[
  {
    "path": ".gitattributes",
    "content": "*.dll filter=lfs diff=lfs merge=lfs -text\n*.exe filter=lfs diff=lfs merge=lfs -text\n"
  },
  {
    "path": "Disasm201/Disasm.bpr",
    "content": "<?xml version='1.0' encoding='utf-8' ?>\n<!-- C++Builder XML Project -->\n<PROJECT>\n  <MACROS>\n    <VERSION value=\"BCB.05.03\"/>\n    <PROJECT value=\"Disasm.exe\"/>\n    <OBJFILES value=\"Disasm.obj main.obj cmdlist.obj\"/>\n    <RESFILES value=\"\"/>\n    <DEFFILE value=\"\"/>\n    <RESDEPEN value=\"$(RESFILES)\"/>\n    <LIBFILES value=\"\"/>\n    <LIBRARIES value=\"Vcl50.lib\"/>\n    <SPARELIBS value=\"Vcl50.lib\"/>\n    <PACKAGES value=\"\"/>\n    <PATHCPP value=\".;\"/>\n    <PATHPAS value=\".;\"/>\n    <PATHRC value=\".;\"/>\n    <PATHASM value=\".;\"/>\n    <DEBUGLIBPATH value=\"$(BCB)\\lib\\debug\"/>\n    <RELEASELIBPATH value=\"$(BCB)\\lib\\release\"/>\n    <LINKER value=\"tlink32\"/>\n    <USERDEFINES value=\"_DEBUG\"/>\n    <SYSDEFINES value=\"NO_STRICT;_NO_VCL;USEPACKAGES\"/>\n    <MAINSOURCE value=\"Disasm.bpf\"/>\n    <INCLUDEPATH value=\"$(BCB)\\include;$(BCB)\\include\\vcl\"/>\n    <LIBPATH value=\"$(BCB)\\lib\\obj;$(BCB)\\lib\"/>\n    <WARNINGS value=\"-w-par\"/>\n  </MACROS>\n  <OPTIONS>\n    <CFLAG1 value=\"-O2 -Oc -Ov -OS -H=$(BCB)\\lib\\vcl50.csm -Hc -w -Vx -Ve -X- -a1 -b -d -k -y \n      -v -vi -tWC -tWM- -c\"/>\n    <PFLAGS value=\"-$YD -$W -$O- -v -JPHNE -M\"/>\n    <RFLAGS value=\"\"/>\n    <AFLAGS value=\"/mx /w2 /zd\"/>\n    <LFLAGS value=\"-D&quot;&quot; -ap -Tpe -x -Gn -v\"/>\n  </OPTIONS>\n  <LINKER>\n    <ALLOBJ value=\"c0x32.obj $(PACKAGES) $(OBJFILES)\"/>\n    <ALLRES value=\"$(RESFILES)\"/>\n    <ALLLIB value=\"$(LIBFILES) $(LIBRARIES) import32.lib cw32.lib\"/>\n  </LINKER>\n  <IDEOPTIONS>\n[Version Info]\nIncludeVerInfo=0\nAutoIncBuild=0\nMajorVer=1\nMinorVer=0\nRelease=0\nBuild=0\nDebug=0\nPreRelease=0\nSpecial=0\nPrivate=0\nDLL=0\nLocale=1033\nCodePage=1252\n\n[Version Info Keys]\nCompanyName=\nFileDescription=\nFileVersion=1.0.0.0\nInternalName=\nLegalCopyright=\nLegalTrademarks=\nOriginalFilename=\nProductName=\nProductVersion=1.0.0.0\nComments=\n\n[HistoryLists\\hlIncludePath]\nCount=1\nItem0=$(BCB)\\include;$(BCB)\\include\\vcl\n\n[HistoryLists\\hlDebugSourcePath]\nCount=1\nItem0=$(BCB)\\source\\vcl\n\n[HistoryLists\\hlConditionals]\nCount=1\nItem0=_DEBUG\n\n[Debugging]\nDebugSourceDirs=$(BCB)\\source\\vcl\n\n[Parameters]\nRunParams=\nHostApplication=\nRemoteHost=\nRemotePath=\nRemoteDebug=0\n\n[Compiler]\nShowInfoMsgs=0\nLinkDebugVcl=0\nLinkCGLIB=0\n  </IDEOPTIONS>\n</PROJECT>"
  },
  {
    "path": "Disasm201/Disasm.c",
    "content": "////////////////////////////////////////////////////////////////////////////////\n//                                                                            //\n// OllyDbg Disassembling Engine v2.01                                         //\n//                                                                            //\n// Copyright (c) 2007-2013 Oleh Yuschuk, ollydbg@t-online.de                  //\n//                                                                            //\n// This code is part of the OllyDbg Disassembler v2.01                        //\n//                                                                            //\n// Disassembling engine is free software; you can redistribute it and/or      //\n// modify it under the terms of the GNU General Public License as published   //\n// by the Free Software Foundation; either version 3 of the License, or (at   //\n// your option) any later version.                                            //\n//                                                                            //\n// This code is distributed in the hope that it will be useful, but WITHOUT   //\n// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or      //\n// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for   //\n// more details.                                                              //\n//                                                                            //\n// You should have received a copy of the GNU General Public License along    //\n// with this program. If not, see <http://www.gnu.org/licenses/>.             //\n//                                                                            //\n////////////////////////////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////////////////////////////\n//                                                                            //\n// This is a fast disassembler that can be used to determine the length of    //\n// the binary 80x86 32-bit command and its attributes, to convert it to the   //\n// human-readable text form, highlight its operands, and create hexadecimal   //\n// dump of the binary command.                                                //\n//                                                                            //\n// It is a stripped down version of the disassembler used by OllyDbg 2.01.    //\n// It can't analyse and comment the contents of the operands, or predict the  //\n// results of the command execution. Analysis-dependent features are not      //\n// included, too. Most other features are kept.                               //\n//                                                                            //\n// Disassembler supports integer, FPU, MMX, 3DNow, SSE1-SSE4.1 and AVX        //\n// instructions. 64-bit mode, AVX2, FMA and XOP are not (yet) supported.      //\n//                                                                            //\n// This code can be compiled either in ASCII or UNICODE mode. It is reentrant //\n// (thread-safe, feature not available in the original OllyDbg code).         //\n//                                                                            //\n// Typical operation speed on 3-GHz Phenom II in MASM mode is:                //\n//                                                                            //\n//   Command length and info:          130 ns/command (7,700,000 commands/s)  //\n//   Disassembly:                      290 ns/command (3,400,000 commands/s)  //\n//   Disassembly, dump, highlighting:  350 ns/command (2,800,000 commands/s)  //\n//                                                                            //\n////////////////////////////////////////////////////////////////////////////////\n\n\n#include <stddef.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <ctype.h>\n#pragma hdrstop\n\n#include \"disasm.h\"\n\n\n////////////////////////////////////////////////////////////////////////////////\n//////////////////////////////// SYMBOLIC NAMES ////////////////////////////////\n\n// 8-bit register names, sorted by 'natural' index (as understood by CPU, not\n// in the alphabetical order as some 'programmers' prefer).\nconst tchar *regname8[NREG] = {\n  T(\"AL\"),       T(\"CL\"),       T(\"DL\"),       T(\"BL\"),\n  T(\"AH\"),       T(\"CH\"),       T(\"DH\"),       T(\"BH\")  };\n\n// 16-bit register names.\nconst tchar *regname16[NREG] = {\n  T(\"AX\"),       T(\"CX\"),       T(\"DX\"),       T(\"BX\"),\n  T(\"SP\"),       T(\"BP\"),       T(\"SI\"),       T(\"DI\")  };\n\n// 32-bit register names.\nconst tchar *regname32[NREG] = {\n  T(\"EAX\"),      T(\"ECX\"),      T(\"EDX\"),      T(\"EBX\"),\n  T(\"ESP\"),      T(\"EBP\"),      T(\"ESI\"),      T(\"EDI\") };\n\n// Names of segment registers.\nconst tchar *segname[NREG] = {\n  T(\"ES\"),       T(\"CS\"),       T(\"SS\"),       T(\"DS\"),\n  T(\"FS\"),       T(\"GS\"),       T(\"SEG6:\"),    T(\"SEG7:\") };\n\n// Names of FPU registers, classical form.\nconst tchar *fpulong[NREG] = {\n  T(\"ST(0)\"),    T(\"ST(1)\"),    T(\"ST(2)\"),    T(\"ST(3)\"),\n  T(\"ST(4)\"),    T(\"ST(5)\"),    T(\"ST(6)\"),    T(\"ST(7)\") };\n\n// Names of FPU registers, short form.\nconst tchar *fpushort[NREG] = {\n  T(\"ST0\"),      T(\"ST1\"),      T(\"ST2\"),      T(\"ST3\"),\n  T(\"ST4\"),      T(\"ST5\"),      T(\"ST6\"),      T(\"ST7\") };\n\n// Names of MMX/3DNow! registers.\nconst tchar *mmxname[NREG] = {\n  T(\"MM0\"),      T(\"MM1\"),      T(\"MM2\"),      T(\"MM3\"),\n  T(\"MM4\"),      T(\"MM5\"),      T(\"MM6\"),      T(\"MM7\") };\n\n// Names of 128-bit SSE registers.\nconst tchar *sse128[NREG] = {\n  T(\"XMM0\"),     T(\"XMM1\"),     T(\"XMM2\"),     T(\"XMM3\"),\n  T(\"XMM4\"),     T(\"XMM5\"),     T(\"XMM6\"),     T(\"XMM7\") };\n\n// Names of 256-bit SSE registers.\nconst tchar *sse256[NREG] = {\n  T(\"YMM0\"),     T(\"YMM1\"),     T(\"YMM2\"),     T(\"YMM3\"),\n  T(\"YMM4\"),     T(\"YMM5\"),     T(\"YMM6\"),     T(\"YMM7\") };\n\n// Names of control registers.\nconst tchar *crname[NREG] = {\n  T(\"CR0\"),      T(\"CR1\"),      T(\"CR2\"),      T(\"CR3\"),\n  T(\"CR4\"),      T(\"CR5\"),      T(\"CR6\"),      T(\"CR7\") };\n\n// Names of debug registers.\nconst tchar *drname[NREG] = {\n  T(\"DR0\"),      T(\"DR1\"),      T(\"DR2\"),      T(\"DR3\"),\n  T(\"DR4\"),      T(\"DR5\"),      T(\"DR6\"),      T(\"DR7\") };\n\n// Declarations for data types. Depending on ssesizemode, name of 16-byte data\n// type (DQWORD) may be changed to XMMWORD and that of 32-bit type (QQWORD) to\n// YMMWORD.\nconst tchar *sizename[33] = {\n  NULL,          T(\"BYTE\"),     T(\"WORD\"),     NULL,\n  T(\"DWORD\"),    NULL,          T(\"FWORD\"),    NULL,\n  T(\"QWORD\"),    NULL,          T(\"TBYTE\"),    NULL,\n  NULL,          NULL,          NULL,          NULL,\n  T(\"DQWORD\"),   NULL,          NULL,          NULL,\n  NULL,          NULL,          NULL,          NULL,\n  NULL,          NULL,          NULL,          NULL,\n  NULL,          NULL,          NULL,          NULL,\n  T(\"QQWORD\") };\n\n// Keywords for immediate data. HLA uses sizename[] instead of sizekey[].\nconst tchar *sizekey[33] = {\n  NULL,          T(\"DB\"),       T(\"DW\"),       NULL,\n  T(\"DD\"),       NULL,          T(\"DF\"),       NULL,\n  T(\"DQ\"),       NULL,          T(\"DT\"),       NULL,\n  NULL,          NULL,          NULL,          NULL,\n  T(\"DDQ\"),      NULL,          NULL,          NULL,\n  NULL,          NULL,          NULL,          NULL,\n  NULL,          NULL,          NULL,          NULL,\n  NULL,          NULL,          NULL,          NULL,\n  T(\"DQQ\") };\n\n// Keywords for immediate data in AT&T format.\nconst tchar *sizeatt[33] = {\n  NULL,          T(\".BYTE\"),    T(\".WORD\"),    NULL,\n  T(\".LONG\"),    NULL,          T(\".FWORD\"),   NULL,\n  T(\".QUAD\"),    NULL,          T(\".TBYTE\"),   NULL,\n  NULL,          NULL,          NULL,          NULL,\n  T(\".DQUAD\"),   NULL,          NULL,          NULL,\n  NULL,          NULL,          NULL,          NULL,\n  NULL,          NULL,          NULL,          NULL,\n  NULL,          NULL,          NULL,          NULL,\n  T(\".QQUAD\") };\n\n// Comparison predicates in SSE [0..7] and VEX commands [0..31].\nconst tchar *ssepredicate[32] = {\n  T(\"EQ\"),       T(\"LT\"),       T(\"LE\"),       T(\"UNORD\"),\n  T(\"NEQ\"),      T(\"NLT\"),      T(\"NLE\"),      T(\"ORD\"),\n  T(\"EQ_UQ\"),    T(\"NGE\"),      T(\"NGT\"),      T(\"FALSE\"),\n  T(\"NEQ_OQ\"),   T(\"GE\"),       T(\"GT\"),       T(\"TRUE\"),\n  T(\"EQ_OS\"),    T(\"LT_OQ\"),    T(\"LE_OQ\"),    T(\"UNORD_S\"),\n  T(\"NEQ_US\"),   T(\"NLT_UQ\"),   T(\"NLE_UQ\"),   T(\"ORD_S\"),\n  T(\"EQ_US\"),    T(\"NGE_UQ\"),   T(\"NGT_UQ\"),   T(\"FALSE_OS\"),\n  T(\"NEQ_OS\"),   T(\"GE_OQ\"),    T(\"GT_OQ\"),    T(\"TRUE_US\") };\n\n\n////////////////////////////////////////////////////////////////////////////////\n///////////////////////////////// DISASSEMBLER /////////////////////////////////\n\ntypedef struct t_imdata {              // Intermediate disassembler data\n  t_disasm       *da;                  // Result of disassembly\n  ulong          damode;               // Disassembling mode, set of DA_xxx\n  t_config       *config;              // Disassembler configuration\n  int            (*decodeaddress)(tchar *s,ulong addr);\n  ulong          prefixlist;           // List of command's prefixes, PF_xxx\n  int            ssesize;              // Size of SSE operands (16/32 bytes)\n  ulong          immsize1;             // Size of first immediate constant\n  ulong          immsize2;             // Size of second immediate constant\n  ulong          mainsize;             // Size of command with prefixes\n  ulong          modsize;              // Size of ModRegRM/SIB bytes\n  ulong          dispsize;             // Size of address offset\n  int            usesdatasize;         // May have data size prefix\n  int            usesaddrsize;         // May have address size prefix\n  int            usessegment;          // May have segment override prefix\n} t_imdata;\n\nstatic t_config  defconfig = {         // Default disassembler configuration\n  DAMODE_MASM,                         // Main style, one of DAMODE_xxx\n  NUM_STD|NUM_DECIMAL,                 // Constant part of address, NUM_xxx\n  NUM_STD|NUM_LONG,                    // Jump/call destination, NUM_xxx\n  NUM_STD|NUM_LONG,                    // Binary constants, NUM_xxx\n  NUM_STD|NUM_DECIMAL,                 // Numeric constants, NUM_xxx\n  0,                                   // Force lowercase display\n  0,                                   // Tab between mnemonic and arguments\n  0,                                   // Extra space between arguments\n  0,                                   // Use RET instead of RETN\n  1,                                   // Use short form of string commands\n  0,                                   // Display default segments in listing\n  1,                                   // Always show memory size\n  0,                                   // Show NEAR modifiers\n  1,                                   // How to decode size of SSE operands\n  0,                                   // How to decode jump hints\n  0,                                   // How to decode size-sensitive mnemonics\n  0,                                   // How to decode top of FPU stack\n  0                                    // Highlight operands\n};\n\nstatic t_config  attconfig = {         // AT&T disassembler configuration\n  DAMODE_ATT,                          // Main style, one of DAMODE_xxx\n  NUM_X|NUM_DECIMAL,                   // Constant part of address, NUM_xxx\n  NUM_X|NUM_LONG,                      // Jump/call destination, NUM_xxx\n  NUM_X|NUM_LONG,                      // Binary constants, NUM_xxx\n  NUM_X|NUM_DECIMAL,                   // Numeric constants, NUM_xxx\n  1,                                   // Force lowercase display\n  1,                                   // Tab between mnemonic and arguments\n  1,                                   // Extra space between arguments\n  0,                                   // Use RET instead of RETN\n  1,                                   // Use short form of string commands\n  0,                                   // Display default segments in listing\n  0,                                   // Always show memory size\n  0,                                   // Show NEAR modifiers\n  1,                                   // How to decode size of SSE operands\n  0,                                   // How to decode jump hints\n  0,                                   // How to decode size-sensitive mnemonics\n  0,                                   // How to decode top of FPU stack\n  0                                    // Highlight operands\n};\n\n////////////////////////////////////////////////////////////////////////////////\n////////////////////////////// SERVICE FUNCTIONS ///////////////////////////////\n\nstatic tchar hexcharu[16] = {          // Nibble-to-hexdigit table, uppercase\n  T('0'), T('1'), T('2'), T('3'), T('4'), T('5'), T('6'), T('7'),\n  T('8'), T('9'), T('A'), T('B'), T('C'), T('D'), T('E'), T('F') };\n\nstatic tchar hexcharl[16] = {          // Nibble-to-hexdigit table, lowercase\n  T('0'), T('1'), T('2'), T('3'), T('4'), T('5'), T('6'), T('7'),\n  T('8'), T('9'), T('a'), T('b'), T('c'), T('d'), T('e'), T('f') };\n\nstatic tchar cvtlower[256];\n\n// Copies at most n-1 wide characters from src to dest and assures that dest is\n// null-terminated. Slow but reliable. Returns number of copied characters, not\n// including the terminal null. Attention, does not check that input parameters\n// are correct!\nstatic int Tstrcopy(tchar *dest,int n,const tchar *src) {\n  int i;\n  if (n<=0)\n    return 0;\n  for (i=0; i<n-1; i++) {\n    if (*src==T('\\0')) break;\n    *dest++=*src++; };\n  *dest=T('\\0');\n  return i;\n};\n\n// Copies at most n-1 wide characters from src to dest and assures that dest is\n// null-terminated. If lowercase is 1, simultaneously converts it to lower\n// case. Slow but reliable. Returns number of copied characters, not including\n// the terminal null. Attention, does not check that input parameters are\n// correct!\nstatic int Tcopycase(tchar *dest,int n,const tchar *src,int lowercase) {\n  int i;\n  if (n<=0)\n    return 0;\n  for (i=0; i<n-1; i++) {\n    if (*src==T('\\0')) break;\n    if (lowercase)\n      *dest++=cvtlower[*src++];        // Much faster than call to tolower()\n    else\n      *dest++=*src++;\n    ;\n  };\n  *dest=T('\\0');\n  return i;\n};\n\n// Dumps ncode bytes of code to the string s. Returns length of resulting text,\n// characters, not including terminal zero. Attention, does not check that\n// input parameters are correct or that s has sufficient length!\nstatic int Thexdump(tchar *s,uchar *code,int ncode,int lowercase) {\n  int d,n;\n  static tchar *hexchar;\n  hexchar=(lowercase?hexcharl:hexcharu);\n  n=0;\n  while (ncode>0) {\n    d=*code++;\n    s[n++]=hexchar[(d>>4) & 0x0F];\n    s[n++]=hexchar[d & 0x0F];\n    ncode--;\n  };\n  s[n]=T('\\0');\n  return n;\n};\n\n// Converts unsigned 1-, 2- or 4-byte number to hexadecimal text, according to\n// the specified mode and type of argument. String s must be at least SHORTNAME\n// characters long. Returns length of resulting text in characters, not\n// including the terminal zero.\nstatic int Hexprint(int size,tchar *s,ulong u,const t_imdata *im,ulong arg) {\n  int i,k,ndigit,lastdigit;\n  ulong nummode,mod;\n  tchar buf[SHORTNAME];\n  static tchar *hexchar;\n  if (size==1)\n    u&=0x000000FF;                     // 8-bit number\n  else if (size==2)\n    u&=0x0000FFFF;                     // 16-bit number\n  else\n    size=4;                            // Correct possible errors\n  mod=arg & B_MODMASK;\n  if (mod==B_ADDR)\n    nummode=im->config->memmode;\n  else if (mod==B_JMPCALL || mod==B_JMPCALLFAR)\n    nummode=im->config->jmpmode;\n  else if (mod==B_BINARY)\n    nummode=im->config->binconstmode;\n  else\n    nummode=im->config->constmode;\n  hexchar=(im->config->lowercase?hexcharl:hexcharu);\n  buf[SHORTNAME-1]=T('\\0');\n  k=SHORTNAME-1;\n  if ((nummode & NUM_DECIMAL)!=0 && (mod==B_SIGNED || mod==B_UNSIGNED ||\n    (u<DECLIMIT && mod!=B_BINARY && mod!=B_JMPCALL && mod!=B_JMPCALLFAR))\n  ) {\n    // Decode as decimal unsigned number.\n    if ((nummode & NUM_STYLE)==NUM_OLLY && u>=10)\n      buf[--k]=T('.');                 // Period marks decimals in OllyDbg\n    do {\n      buf[--k]=hexchar[u%10];\n      u/=10;\n    } while (u!=0); }\n  else {\n    // Decode as hexadecimal number.\n    if (nummode & NUM_LONG)            // 2, 4 or 8 significant digits\n      ndigit=size*2;\n    else\n      ndigit=1;\n    if ((nummode & NUM_STYLE)==NUM_STD)\n      buf[--k]=T('h');\n    for (i=0; i<ndigit || u!=0; i++) {\n      lastdigit=u & 0x0F;\n      buf[--k]=hexchar[lastdigit];\n      u=(u>>4) & 0x0FFFFFFF; };\n    if ((nummode & NUM_STYLE)==NUM_X) {\n      buf[--k]=T('x');\n      buf[--k]=T('0'); }\n    else if (lastdigit>=10 &&\n      ((nummode & NUM_STYLE)!=NUM_OLLY || i<(mod==B_BINARY?size*2:8)))\n      buf[--k]=T('0');\n    ;\n  };\n  return Tstrcopy(s,SHORTNAME,buf+k);\n};\n\n\n////////////////////////////////////////////////////////////////////////////////\n///////////////////////// INTERNAL DISASSEMBLER TABLES /////////////////////////\n\nt_chain          *cmdchain;            // Commands sorted by first CMDMASK bits\nt_modrm          modrm16[256];         // 16-bit ModRM decodings\nt_modrm          modrm32[256];         // 32-bit ModRM decodings without SIB\nt_modrm          sib0[256];            // ModRM-SIB decodings with Mod=00\nt_modrm          sib1[256];            // ModRM-SIB decodings with Mod=01\nt_modrm          sib2[256];            // ModRM-SIB decodings with Mod=10\n\n// Initializes disassembler tables. Call this function once during startup.\n// Returns 0 on success and -1 if initialization was unsuccessful. In the last\n// case, continuation is not possible and program must terminate.\nint Preparedisasm(void) {\n  int n,c,reg,sreg,scale,nchain;\n  ulong u,code,mask;\n  const t_bincmd *pcmd;\n  t_chain *pchain;\n  t_modrm *pmrm,*psib;\n  if (cmdchain!=NULL)\n    return 0;                          // Already initialized\n  // Sort command descriptors into command chains by first CMDMASK bits.\n  cmdchain=(t_chain *)malloc(NCHAIN*sizeof(t_chain));\n  if (cmdchain==NULL)                  // Low memory\n    return -1;\n  memset(cmdchain,0,NCHAIN*sizeof(t_chain));\n  nchain=CMDMASK+1;                    // Number of command chains\n  for (pcmd=bincmd; pcmd->length!=0; pcmd++) {\n    if ((pcmd->cmdtype & D_CMDTYPE)==D_PSEUDO)\n      continue;                        // Pseudocommand, for search models only\n    code=pcmd->code;\n    mask=pcmd->mask & CMDMASK;\n    for (u=0; u<CMDMASK+1; u++) {\n      if (((u ^ code) & mask)!=0)\n        continue;                      // Command has different first bytes\n      pchain=cmdchain+u;\n      while (pchain->pcmd!=NULL && pchain->pnext!=NULL)\n        pchain=pchain->pnext;          // Walk chain to the end\n      if (pchain->pcmd==NULL)\n        pchain->pcmd=pcmd;\n      else if (nchain>=NCHAIN)\n        return -1;                     // Too many commands\n      else {\n        pchain->pnext=cmdchain+nchain; // Prolongate chain\n        pchain=pchain->pnext;\n        pchain->pcmd=pcmd;\n        nchain++;\n      };\n    };\n  };\n  // Prepare 16-bit ModRM decodings.\n  memset(modrm16,0,sizeof(modrm16));\n  for (c=0x00,pmrm=modrm16; c<=0xFF; c++,pmrm++) {\n    reg=c & 0x07;\n    if ((c & 0xC0)==0xC0) {\n      // Register in ModRM.\n      pmrm->size=1;\n      pmrm->features=0;                // Register, its type as yet unknown\n      pmrm->reg=reg;\n      pmrm->defseg=SEG_UNDEF;\n      pmrm->basereg=REG_UNDEF; }\n    else if ((c & 0xC7)==0x06) {\n      // Special case of immediate address.\n      pmrm->size=3;\n      pmrm->dispsize=2;\n      pmrm->features=OP_MEMORY|OP_OPCONST|OP_ADDR16;\n      pmrm->reg=REG_UNDEF;\n      pmrm->defseg=SEG_DS;\n      pmrm->basereg=REG_UNDEF; }\n    else {\n      pmrm->features=OP_MEMORY|OP_INDEXED|OP_ADDR16;\n      if ((c & 0xC0)==0x40) {\n        pmrm->dispsize=1; pmrm->features|=OP_OPCONST; }\n      else if ((c & 0xC0)==0x80) {\n        pmrm->dispsize=2; pmrm->features|=OP_OPCONST; };\n      pmrm->size=pmrm->dispsize+1;\n      pmrm->reg=REG_UNDEF;\n      switch (reg) {\n        case 0:\n          pmrm->scale[REG_EBX]=1; pmrm->scale[REG_ESI]=1;\n          pmrm->defseg=SEG_DS;\n          tstrcpy(pmrm->ardec,T(\"BX+SI\"));\n          tstrcpy(pmrm->aratt,T(\"%BX,%SI\"));\n          pmrm->aregs=(1<<REG_EBX)|(1<<REG_ESI);\n          pmrm->basereg=REG_ESI; break;\n        case 1:\n          pmrm->scale[REG_EBX]=1; pmrm->scale[REG_EDI]=1;\n          pmrm->defseg=SEG_DS;\n          tstrcpy(pmrm->ardec,T(\"BX+DI\"));\n          tstrcpy(pmrm->aratt,T(\"%BX,%DI\"));\n          pmrm->aregs=(1<<REG_EBX)|(1<<REG_EDI);\n          pmrm->basereg=REG_EDI; break;\n        case 2:\n          pmrm->scale[REG_EBP]=1; pmrm->scale[REG_ESI]=1;\n          pmrm->defseg=SEG_SS;\n          tstrcpy(pmrm->ardec,T(\"BP+SI\"));\n          tstrcpy(pmrm->aratt,T(\"%BP,%SI\"));\n          pmrm->aregs=(1<<REG_EBP)|(1<<REG_ESI);\n          pmrm->basereg=REG_ESI; break;\n        case 3:\n          pmrm->scale[REG_EBP]=1; pmrm->scale[REG_EDI]=1;\n          pmrm->defseg=SEG_SS;\n          tstrcpy(pmrm->ardec,T(\"BP+DI\"));\n          tstrcpy(pmrm->aratt,T(\"%BP,%DI\"));\n          pmrm->aregs=(1<<REG_EBP)|(1<<REG_EDI);\n          pmrm->basereg=REG_EDI; break;\n        case 4:\n          pmrm->scale[REG_ESI]=1;\n          pmrm->defseg=SEG_DS;\n          tstrcpy(pmrm->ardec,T(\"SI\"));\n          tstrcpy(pmrm->aratt,T(\"%SI\"));\n          pmrm->aregs=(1<<REG_ESI);\n          pmrm->basereg=REG_ESI; break;\n        case 5:\n          pmrm->scale[REG_EDI]=1;\n          pmrm->defseg=SEG_DS;\n          tstrcpy(pmrm->ardec,T(\"DI\"));\n          tstrcpy(pmrm->aratt,T(\"%DI\"));\n          pmrm->aregs=(1<<REG_EDI);\n          pmrm->basereg=REG_EDI; break;\n        case 6:\n          pmrm->scale[REG_EBP]=1;\n          pmrm->defseg=SEG_SS;\n          tstrcpy(pmrm->ardec,T(\"BP\"));\n          tstrcpy(pmrm->aratt,T(\"%BP\"));\n          pmrm->aregs=(1<<REG_EBP);\n          pmrm->basereg=REG_EBP; break;\n        case 7:\n          pmrm->scale[REG_EBX]=1;\n          pmrm->defseg=SEG_DS;\n          tstrcpy(pmrm->ardec,T(\"BX\"));\n          tstrcpy(pmrm->aratt,T(\"%BX\"));\n          pmrm->aregs=(1<<REG_EBX);\n          pmrm->basereg=REG_EBX;\n        break;\n      };\n    };\n  };\n  // Prepare 32-bit ModRM decodings without SIB.\n  memset(modrm32,0,sizeof(modrm32));\n  for (c=0x00,pmrm=modrm32; c<=0xFF; c++,pmrm++) {\n    reg=c & 0x07;\n    if ((c & 0xC0)==0xC0) {\n      // Register in ModRM.\n      pmrm->size=1;\n      pmrm->features=0;                // Register, its type as yet unknown\n      pmrm->reg=reg;\n      pmrm->defseg=SEG_UNDEF;\n      pmrm->basereg=REG_UNDEF; }\n    else if ((c & 0xC7)==0x05) {\n      // Special case of 32-bit immediate address.\n      pmrm->size=5;\n      pmrm->dispsize=4;\n      pmrm->features=OP_MEMORY|OP_OPCONST;\n      pmrm->reg=REG_UNDEF;\n      pmrm->defseg=SEG_DS;\n      pmrm->basereg=REG_UNDEF; }\n    else {\n      // Regular memory address.\n      pmrm->features=OP_MEMORY;\n      pmrm->reg=REG_UNDEF;\n      if ((c & 0xC0)==0x40) {\n        pmrm->dispsize=1;              // 8-bit sign-extended displacement\n        pmrm->features|=OP_OPCONST; }\n      else if ((c & 0xC0)==0x80) {\n        pmrm->dispsize=4;              // 32-bit displacement\n        pmrm->features|=OP_OPCONST; };\n      if (reg==REG_ESP) {\n        // SIB byte follows, decode with sib32.\n        if ((c & 0xC0)==0x00) pmrm->psib=sib0;\n        else if ((c & 0xC0)==0x40) pmrm->psib=sib1;\n        else pmrm->psib=sib2;\n        pmrm->basereg=REG_UNDEF; }\n      else {\n        pmrm->size=1+pmrm->dispsize;\n        pmrm->features|=OP_INDEXED;\n        pmrm->defseg=(reg==REG_EBP?SEG_SS:SEG_DS);\n        pmrm->scale[reg]=1;\n        tstrcpy(pmrm->ardec,regname32[reg]);\n        pmrm->aratt[0]=T('%');\n        Tstrcopy(pmrm->aratt+1,SHORTNAME-1,regname32[reg]);\n        pmrm->aregs=(1<<reg);\n        pmrm->basereg=reg;\n      };\n    };\n  };\n  // Prepare 32-bit ModRM decodings with SIB, case Mod=00: usually no disp.\n  memset(sib0,0,sizeof(sib0));\n  for (c=0x00,psib=sib0; c<=0xFF; c++,psib++) {\n    psib->features=OP_MEMORY;\n    psib->reg=REG_UNDEF;\n    reg=c & 0x07;\n    sreg=(c>>3) & 0x07;\n    if ((c & 0xC0)==0) scale=1;\n    else if ((c & 0xC0)==0x40) scale=2;\n    else if ((c & 0xC0)==0x80) scale=4;\n    else scale=8;\n    if (sreg!=REG_ESP) {\n      psib->scale[sreg]=(uchar)scale;\n      n=Tstrcopy(psib->ardec,SHORTNAME,regname32[sreg]);\n      psib->aregs=(1<<sreg);\n      psib->features|=OP_INDEXED;\n      if (scale>1) {\n        psib->ardec[n++]=T('*');\n        psib->ardec[n++]=(tchar)(T('0')+scale);\n        psib->ardec[n]=T('\\0');\n      }; }\n    else\n      n=0;\n    if (reg==REG_EBP) {\n      psib->size=6;\n      psib->dispsize=4;\n      psib->features|=OP_OPCONST;\n      psib->defseg=SEG_DS;\n      psib->basereg=REG_UNDEF; }\n    else {\n      psib->size=2;\n      psib->defseg=((reg==REG_ESP || reg==REG_EBP)?SEG_SS:SEG_DS);\n      psib->scale[reg]++;\n      psib->features|=OP_INDEXED;\n      if (n!=0) psib->ardec[n++]=T('+');\n      Tstrcopy(psib->ardec+n,SHORTNAME-n,regname32[reg]);\n      psib->aregs|=(1<<reg);\n      psib->basereg=reg; };\n    if (reg!=REG_EBP) {\n      psib->aratt[0]=T('%'); n=1;\n      n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,regname32[reg]); }\n    else\n      n=0;\n    if (sreg!=REG_ESP) {\n      n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,T(\",%\"));\n      n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,regname32[sreg]);\n      if (scale>1) {\n        psib->aratt[n++]=T(',');\n        psib->aratt[n++]=(tchar)(T('0')+scale);\n        psib->aratt[n]=T('\\0');\n      };\n    };\n  };\n  // Prepare 32-bit ModRM decodings with SIB, case Mod=01: 8-bit displacement.\n  memset(sib1,0,sizeof(sib1));\n  for (c=0x00,psib=sib1; c<=0xFF; c++,psib++) {\n    psib->features=OP_MEMORY|OP_INDEXED|OP_OPCONST;\n    psib->reg=REG_UNDEF;\n    reg=c & 0x07;\n    sreg=(c>>3) & 0x07;\n    if ((c & 0xC0)==0) scale=1;\n    else if ((c & 0xC0)==0x40) scale=2;\n    else if ((c & 0xC0)==0x80) scale=4;\n    else scale=8;\n    psib->size=3;\n    psib->dispsize=1;\n    psib->defseg=((reg==REG_ESP || reg==REG_EBP)?SEG_SS:SEG_DS);\n    psib->scale[reg]=1;\n    psib->basereg=reg;\n    psib->aregs=(1<<reg);\n    if (sreg!=REG_ESP) {\n      psib->scale[sreg]+=(uchar)scale;\n      n=Tstrcopy(psib->ardec,SHORTNAME,regname32[sreg]);\n      psib->aregs|=(1<<sreg);\n      if (scale>1) {\n        psib->ardec[n++]=T('*');\n        psib->ardec[n++]=(tchar)(T('0')+scale);\n      }; }\n    else\n      n=0;\n    if (n!=0) psib->ardec[n++]=T('+');\n    Tstrcopy(psib->ardec+n,SHORTNAME-n,regname32[reg]);\n    psib->aratt[0]=T('%'); n=1;\n    n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,regname32[reg]);\n    if (sreg!=REG_ESP) {\n      n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,T(\",%\"));\n      n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,regname32[sreg]);\n      if (scale>1) {\n        psib->aratt[n++]=T(',');\n        psib->aratt[n++]=(tchar)(T('0')+scale);\n        psib->aratt[n]=T('\\0');\n      };\n    };\n  };\n  // Prepare 32-bit ModRM decodings with SIB, case Mod=10: 32-bit displacement.\n  memset(sib2,0,sizeof(sib2));\n  for (c=0x00,psib=sib2; c<=0xFF; c++,psib++) {\n    psib->features=OP_MEMORY|OP_INDEXED|OP_OPCONST;\n    psib->reg=REG_UNDEF;\n    reg=c & 0x07;\n    sreg=(c>>3) & 0x07;\n    if ((c & 0xC0)==0) scale=1;\n    else if ((c & 0xC0)==0x40) scale=2;\n    else if ((c & 0xC0)==0x80) scale=4;\n    else scale=8;\n    psib->size=6;\n    psib->dispsize=4;\n    psib->defseg=((reg==REG_ESP || reg==REG_EBP)?SEG_SS:SEG_DS);\n    psib->scale[reg]=1;\n    psib->basereg=reg;\n    psib->aregs=(1<<reg);\n    if (sreg!=REG_ESP) {\n      psib->scale[sreg]+=(uchar)scale;\n      n=Tstrcopy(psib->ardec,SHORTNAME,regname32[sreg]);\n      psib->aregs|=(1<<sreg);\n      if (scale>1) {\n        psib->ardec[n++]=T('*');\n        psib->ardec[n++]=(tchar)(T('0')+scale);\n      }; }\n    else\n      n=0;\n    if (n!=0) psib->ardec[n++]=T('+');\n    Tstrcopy(psib->ardec+n,SHORTNAME-n,regname32[reg]);\n    psib->aratt[0]=T('%'); n=1;\n    n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,regname32[reg]);\n    if (sreg!=REG_ESP) {\n      n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,T(\",%\"));\n      n+=Tstrcopy(psib->aratt+n,SHORTNAME-n,regname32[sreg]);\n      if (scale>1) {\n        psib->aratt[n++]=T(',');\n        psib->aratt[n++]=(tchar)(T('0')+scale);\n        psib->aratt[n]=T('\\0');\n      };\n    };\n  };\n  // Fill lowercase conversion table. This table replaces tolower(). When\n  // compiled with Borland C++ Builder, spares significant time.\n  for (c=0; c<256; c++)\n    cvtlower[c]=(tchar)ttolower(c);\n  // Report success.\n  return 0;\n};\n\n// Frees resources allocated by Preparedisasm(). Call this function once\n// during shutdown after disassembling service is no longer necessary.\nvoid Finishdisasm(void) {\n  if (cmdchain!=NULL) {\n    free(cmdchain);\n    cmdchain=NULL;\n  };\n};\n\n\n////////////////////////////////////////////////////////////////////////////////\n////////////////////////////// AUXILIARY ROUTINES //////////////////////////////\n\n// Given index of byte register, returns index of 32-bit container.\nstatic int Byteregtodwordreg(int bytereg) {\n  if (bytereg<0 || bytereg>=NREG)\n    return REG_UNDEF;\n  if (bytereg>=4)\n    return bytereg-4;\n  return bytereg;\n};\n\n// Checks prefix override flags and generates warnings if prefix is superfluous.\n// Returns index of segment register. Note that Disasm() assures that two\n// segment override bits in im->prefixlist can't be set simultaneously.\nstatic int Getsegment(t_imdata *im,int arg,int defseg) {\n  if ((im->prefixlist & PF_SEGMASK)==0)\n    return defseg;                     // Optimization for most frequent case\n  switch (im->prefixlist & PF_SEGMASK) {\n    case PF_ES:\n      if (defseg==SEG_ES) im->da->warnings|=DAW_DEFSEG;\n      if (arg & B_NOSEG) im->da->warnings|=DAW_SEGPREFIX;\n      return SEG_ES;\n    case PF_CS:\n      if (defseg==SEG_CS) im->da->warnings|=DAW_DEFSEG;\n      if (arg & B_NOSEG) im->da->warnings|=DAW_SEGPREFIX;\n      return SEG_CS;\n    case PF_SS:\n      if (defseg==SEG_SS) im->da->warnings|=DAW_DEFSEG;\n      if (arg & B_NOSEG) im->da->warnings|=DAW_SEGPREFIX;\n      return SEG_SS;\n    case PF_DS:\n      if (defseg==SEG_DS) im->da->warnings|=DAW_DEFSEG;\n      if (arg & B_NOSEG) im->da->warnings|=DAW_SEGPREFIX;\n      return SEG_DS;\n    case PF_FS:\n      if (defseg==SEG_FS) im->da->warnings|=DAW_DEFSEG;\n      if (arg & B_NOSEG) im->da->warnings|=DAW_SEGPREFIX;\n      return SEG_FS;\n    case PF_GS:\n      if (defseg==SEG_GS) im->da->warnings|=DAW_DEFSEG;\n      if (arg & B_NOSEG) im->da->warnings|=DAW_SEGPREFIX;\n      return SEG_GS;\n    default: return defseg;            // Most frequent case of default segment\n  };\n};\n\n// Decodes generalized memory address to text.\nstatic void Memaddrtotext(t_imdata *im,int arg,int datasize,int seg,\n  const tchar *regpart,long constpart,tchar *s) {\n  int n;\n  tchar label[TEXTLEN];\n  if (im->config->disasmmode==DAMODE_ATT) {\n    // AT&T memory address syntax is so different from Intel that I process it\n    // separately from the rest.\n    n=0;\n    if ((arg & B_MODMASK)==B_JMPCALL)\n      s[n++]=T('*');\n    // On request, I show only explicit segments.\n    if ((im->config->putdefseg && (arg & B_NOSEG)==0) ||\n      (im->prefixlist & PF_SEGMASK)!=0\n    ) {\n      s[n++]=T('%');\n      n+=Tcopycase(s+n,TEXTLEN-n,segname[seg],im->config->lowercase);\n      s[n++]=T(':'); };\n    // Add constant part (offset).\n    if (constpart<0 && constpart>NEGLIMIT) {\n      s[n++]=T('-');\n      n+=Hexprint((im->prefixlist & PF_ASIZE?2:4),s+n,-constpart,im,B_ADDR); }\n    else if (constpart!=0) {\n      if (seg!=SEG_FS && seg!=SEG_GS &&\n        im->decodeaddress!=NULL &&\n        im->decodeaddress(label,constpart)!=0)\n        n+=Tstrcopy(s+n,TEXTLEN-n,label);\n      else\n        n+=Hexprint((im->prefixlist & PF_ASIZE?2:4),s+n,constpart,im,B_ADDR);\n      ;\n    };\n    // Add register part of address, may be absent.\n    if (regpart[0]!=T('\\0')) {\n      n+=Tstrcopy(s+n,TEXTLEN-n,T(\"(\"));\n      n+=Tcopycase(s+n,TEXTLEN-n,regpart,im->config->lowercase);\n      n+=Tstrcopy(s+n,TEXTLEN-n,T(\")\"));\n    }; }\n  else {\n    // Mark far and near jump/call addresses.\n    if ((arg & B_MODMASK)==B_JMPCALLFAR)\n      n=Tcopycase(s,TEXTLEN,T(\"FAR \"),im->config->lowercase);\n    else if (im->config->shownear && (arg & B_MODMASK)==B_JMPCALL)\n      n=Tcopycase(s,TEXTLEN,T(\"NEAR \"),im->config->lowercase);\n    else\n      n=0;\n    if (im->config->disasmmode!=DAMODE_MASM) {\n      s[n++]=T('[');\n      if ((im->prefixlist & PF_ASIZE)!=0 && regpart[0]==T('\\0'))\n        n+=Tcopycase(s+n,TEXTLEN-n,T(\"SMALL \"),im->config->lowercase);\n      ;\n    };\n    // If operand is longer than 32 bytes or of type B_ANYMEM (memory contents\n    // unimportant), its size is not displayed. Otherwise, bit B_SHOWSIZE\n    // indicates that explicit operand's size can't be omitted.\n    if (datasize<=32 && (arg & B_ARGMASK)!=B_ANYMEM &&\n      (im->config->showmemsize!=0 || (arg & B_SHOWSIZE)!=0)\n    ) {\n      if (im->config->disasmmode==DAMODE_HLA)\n        n+=Tcopycase(s+n,TEXTLEN-n,T(\"TYPE \"),im->config->lowercase);\n      if ((arg & B_ARGMASK)==B_INTPAIR && im->config->disasmmode==DAMODE_IDEAL){\n        // If operand is a pair of integers (BOUND), Borland in IDEAL mode\n        // expects size of single integer, whereas MASM requires size of the\n        // whole pair.\n        n+=Tcopycase(s+n,TEXTLEN-n,sizename[datasize/2],im->config->lowercase);\n        s[n++]=T(' '); }\n      else if (datasize==16 && im->config->ssesizemode==1)\n        n+=Tcopycase(s+n,TEXTLEN-n,T(\"XMMWORD \"),im->config->lowercase);\n      else if (datasize==32 && im->config->ssesizemode==1)\n        n+=Tcopycase(s+n,TEXTLEN-n,T(\"YMMWORD \"),im->config->lowercase);\n      else {\n        n+=Tcopycase(s+n,TEXTLEN-n,sizename[datasize],im->config->lowercase);\n        s[n++]=T(' '); };\n      if (im->config->disasmmode==DAMODE_MASM)\n        n+=Tcopycase(s+n,TEXTLEN-n,T(\"PTR \"),im->config->lowercase);\n      ;\n    };\n    // On request, I show only explicit segments.\n    if ((im->config->putdefseg && (arg & B_NOSEG)==0) ||\n      (im->prefixlist & PF_SEGMASK)!=0\n    ) {\n      n+=Tcopycase(s+n,TEXTLEN-n,segname[seg],im->config->lowercase);\n      s[n++]=T(':'); };\n    if (im->config->disasmmode==DAMODE_MASM) {\n      s[n++]=T('[');\n      if ((im->prefixlist & PF_ASIZE)!=0 && regpart[0]==T('\\0'))\n        n+=Tcopycase(s+n,TEXTLEN-n,T(\"SMALL \"),im->config->lowercase);\n      ;\n    };\n    // Add register part of address, may be absent.\n    if (regpart[0]!=T('\\0'))\n      n+=Tcopycase(s+n,TEXTLEN-n,regpart,im->config->lowercase);\n    if (regpart[0]!=T('\\0') && constpart<0 && constpart>NEGLIMIT) {\n      s[n++]=T('-');\n      n+=Hexprint((im->prefixlist & PF_ASIZE?2:4),s+n,-constpart,im,B_ADDR); }\n    else if (constpart!=0 || regpart[0]==T('\\0')) {\n      if (regpart[0]!=T('\\0')) s[n++]=T('+');\n      if (seg!=SEG_FS && seg!=SEG_GS &&\n        im->decodeaddress!=NULL &&\n        im->decodeaddress(label,constpart)!=0)\n        n+=Tstrcopy(s+n,TEXTLEN-n,label);\n      else\n        n+=Hexprint((im->prefixlist & PF_ASIZE?2:4),s+n,constpart,im,B_ADDR);\n      ;\n    };\n    n+=Tstrcopy(s+n,TEXTLEN-n,T(\"]\"));\n  };\n  s[n]=T('\\0');\n};\n\n// Service function, returns granularity of MMX, 3DNow! and SSE operands.\nstatic int Getgranularity(ulong arg) {\n  int granularity;\n  switch (arg & B_ARGMASK) {\n    case B_MREG8x8:                    // MMX register as 8 8-bit integers\n    case B_MMX8x8:                     // MMX reg/memory as 8 8-bit integers\n    case B_MMX8x8DI:                   // MMX 8 8-bit integers at [DS:(E)DI]\n    case B_XMM0I8x16:                  // XMM0 as 16 8-bit integers\n    case B_SREGI8x16:                  // SSE register as 16 8-bit sigints\n    case B_SVEXI8x16:                  // SSE reg in VEX as 16 8-bit sigints\n    case B_SIMMI8x16:                  // SSE reg in immediate 8-bit constant\n    case B_SSEI8x16:                   // SSE reg/memory as 16 8-bit sigints\n    case B_SSEI8x16DI:                 // SSE 16 8-bit sigints at [DS:(E)DI]\n    case B_SSEI8x8L:                   // Low 8 8-bit ints in SSE reg/memory\n    case B_SSEI8x4L:                   // Low 4 8-bit ints in SSE reg/memory\n    case B_SSEI8x2L:                   // Low 2 8-bit ints in SSE reg/memory\n      granularity=1; break;\n    case B_MREG16x4:                   // MMX register as 4 16-bit integers\n    case B_MMX16x4:                    // MMX reg/memory as 4 16-bit integers\n    case B_SREGI16x8:                  // SSE register as 8 16-bit sigints\n    case B_SVEXI16x8:                  // SSE reg in VEX as 8 16-bit sigints\n    case B_SSEI16x8:                   // SSE reg/memory as 8 16-bit sigints\n    case B_SSEI16x4L:                  // Low 4 16-bit ints in SSE reg/memory\n    case B_SSEI16x2L:                  // Low 2 16-bit ints in SSE reg/memory\n      granularity=2; break;\n    case B_MREG32x2:                   // MMX register as 2 32-bit integers\n    case B_MMX32x2:                    // MMX reg/memory as 2 32-bit integers\n    case B_3DREG:                      // 3DNow! register as 2 32-bit floats\n    case B_3DNOW:                      // 3DNow! reg/memory as 2 32-bit floats\n    case B_SREGF32x4:                  // SSE register as 4 32-bit floats\n    case B_SVEXF32x4:                  // SSE reg in VEX as 4 32-bit floats\n    case B_SREGF32L:                   // Low 32-bit float in SSE register\n    case B_SVEXF32L:                   // Low 32-bit float in SSE in VEX\n    case B_SREGF32x2L:                 // Low 2 32-bit floats in SSE register\n    case B_SSEF32x4:                   // SSE reg/memory as 4 32-bit floats\n    case B_SSEF32L:                    // Low 32-bit float in SSE reg/memory\n    case B_SSEF32x2L:                  // Low 2 32-bit floats in SSE reg/memory\n      granularity=4; break;\n    case B_XMM0I32x4:                  // XMM0 as 4 32-bit integers\n    case B_SREGI32x4:                  // SSE register as 4 32-bit sigints\n    case B_SVEXI32x4:                  // SSE reg in VEX as 4 32-bit sigints\n    case B_SREGI32L:                   // Low 32-bit sigint in SSE register\n    case B_SREGI32x2L:                 // Low 2 32-bit sigints in SSE register\n    case B_SSEI32x4:                   // SSE reg/memory as 4 32-bit sigints\n    case B_SSEI32x2L:                  // Low 2 32-bit sigints in SSE reg/memory\n      granularity=4; break;\n    case B_MREG64:                     // MMX register as 1 64-bit integer\n    case B_MMX64:                      // MMX reg/memory as 1 64-bit integer\n    case B_XMM0I64x2:                  // XMM0 as 2 64-bit integers\n    case B_SREGF64x2:                  // SSE register as 2 64-bit floats\n    case B_SVEXF64x2:                  // SSE reg in VEX as 2 64-bit floats\n    case B_SREGF64L:                   // Low 64-bit float in SSE register\n    case B_SVEXF64L:                   // Low 64-bit float in SSE in VEX\n    case B_SSEF64x2:                   // SSE reg/memory as 2 64-bit floats\n    case B_SSEF64L:                    // Low 64-bit float in SSE reg/memory\n      granularity=8; break;\n    case B_SREGI64x2:                  // SSE register as 2 64-bit sigints\n    case B_SVEXI64x2:                  // SSE reg in VEX as 2 64-bit sigints\n    case B_SSEI64x2:                   // SSE reg/memory as 2 64-bit sigints\n    case B_SREGI64L:                   // Low 64-bit sigint in SSE register\n      granularity=8; break;\n    default:\n      granularity=1;                   // Treat unknown ops as string of bytes\n    break; };\n  return granularity;\n};\n\n\n////////////////////////////////////////////////////////////////////////////////\n////////////////////////// OPERAND DECODING ROUTINES ///////////////////////////\n\n// Decodes 8/16/32-bit integer register operand. ATTENTION, calling routine\n// must set usesdatasize and usesaddrsize by itself!\nstatic void Operandintreg(t_imdata *im,ulong datasize,int index,t_operand *op) {\n  int n,reg32;\n  op->features=OP_REGISTER;\n  op->opsize=op->granularity=datasize;\n  op->reg=index;\n  op->seg=SEG_UNDEF;\n  // Add container register to lists of used and modified registers.\n  if (datasize==1)\n    reg32=Byteregtodwordreg(index);\n  else\n    reg32=index;\n  if ((op->arg & B_CHG)==0) {\n    op->uses=(1<<reg32);\n    im->da->uses|=(1<<reg32); };\n  if (op->arg & (B_CHG|B_UPD)) {\n    op->modifies=(1<<reg32);\n    im->da->modifies|=(1<<reg32); };\n  // Warn if ESP is misused.\n  if ((op->arg & B_NOESP)!=0 && reg32==REG_ESP)\n    im->da->warnings|=DAW_NOESP;\n  // Decode name of integer register.\n  if (im->damode & DA_TEXT) {\n    n=0;\n    if (im->config->disasmmode==DAMODE_ATT) {\n      if ((op->arg & B_MODMASK)==B_JMPCALL) op->text[n++]=T('*');\n      op->text[n++]=T('%'); };\n    if (datasize==4)                   // Most frequent case first\n      Tcopycase(op->text+n,TEXTLEN-n,regname32[index],im->config->lowercase);\n    else if (datasize==1)\n      Tcopycase(op->text+n,TEXTLEN-n,regname8[index],im->config->lowercase);\n    else                               // 16-bit registers are seldom\n      Tcopycase(op->text+n,TEXTLEN-n,regname16[index],im->config->lowercase);\n    ;\n  };\n};\n\n// Decodes 16/32-bit memory address in ModRM/SIB bytes. Returns full length of\n// address (ModRM+SIB+displacement) in bytes, 0 if ModRM indicates register\n// operand and -1 on error. ATTENTION, calling routine must set usesdatasize,\n// granularity (preset to datasize) and reg together with OP_MODREG by itself!\nstatic int Operandmodrm(t_imdata *im,ulong datasize,uchar *cmd,ulong cmdsize,\n  t_operand *op) {\n  tchar *ardec;\n  t_modrm *pmrm;\n  if (cmdsize==0) {\n    im->da->errors|=DAE_CROSS;         // Command crosses end of memory block\n    return -1; };\n  // Decode ModRM/SIB. Most of the work is already done in Preparedisasm(), we\n  // only need to find corresponding t_modrm.\n  if (im->prefixlist & PF_ASIZE) {\n    pmrm=modrm16+cmd[0];               // 16-bit address\n    im->modsize=1; }\n  else {\n    pmrm=modrm32+cmd[0];\n    if (pmrm->psib==NULL)\n      im->modsize=1;                   // No SIB byte\n    else {\n      if (cmdsize<2) {\n        im->da->errors|=DAE_CROSS;     // Command crosses end of memory block\n        return -1; };\n      pmrm=pmrm->psib+cmd[1];\n      im->modsize=2;                   // Both ModRM and SIB\n    };\n  };\n  // Check whether ModRM indicates register operand and immediately return if\n  // true. As a side effect, modsize is already set.\n  if ((cmd[0] & 0xC0)==0xC0)\n    return 0;\n  // Operand in memory.\n  op->opsize=datasize;\n  op->granularity=datasize;            // Default, may be overriden later\n  op->reg=REG_UNDEF;\n  im->usesaddrsize=1;                  // Address size prefix is meaningful\n  im->usessegment=1;                   // Segment override prefix is meaningful\n  // Fetch precalculated t_modrm fields.\n  op->features=pmrm->features;\n  memcpy(op->scale,pmrm->scale,8);\n  op->aregs=pmrm->aregs;\n  im->da->uses|=pmrm->aregs;           // Mark registers used to form address\n  // Get displacement, if any.\n  im->dispsize=pmrm->dispsize;\n  if (pmrm->dispsize!=0) {\n    if (cmdsize<pmrm->size) {\n      im->da->errors|=DAE_CROSS;       // Command crosses end of memory block\n      return -1; };\n    if (pmrm->dispsize==1)             // 8-bit displacement is sign-extended\n      op->opconst=im->da->memconst=(signed char)cmd[im->modsize];\n    else if (pmrm->dispsize==4) {      // 32-bit full displacement\n      im->da->memfixup=\n        im->mainsize+im->modsize;      // Possible 32-bit fixup\n      op->opconst=im->da->memconst=*(ulong *)(cmd+im->modsize); }\n    else                               // 16-bit displacement, very rare\n      op->opconst=im->da->memconst=*(ushort *)(cmd+im->modsize);\n    ;\n  };\n  // Get segment.\n  op->seg=Getsegment(im,op->arg,pmrm->defseg);\n  // Warn if memory contents is 16-bit jump/call destination.\n  if (datasize==2 && (op->arg & B_MODMASK)==B_JMPCALL)\n    im->da->warnings|=DAW_JMP16;\n  // Decode memory operand to text, if requested.\n  if (im->damode & DA_TEXT) {\n    ardec=(im->config->disasmmode==DAMODE_ATT?pmrm->aratt:pmrm->ardec);\n    Memaddrtotext(im,op->arg,datasize,op->seg,ardec,op->opconst,op->text);\n  };\n  return pmrm->size;\n};\n\n// Decodes 16/32-bit immediate address (used only for 8/16/32-bit memory-\n// accumulator moves). ATTENTION, calling routine must set usesdatasize by\n// itself!\nstatic void Operandimmaddr(t_imdata *im,ulong datasize,uchar *cmd,\n  ulong cmdsize,t_operand *op) {\n  if (im->prefixlist & PF_ASIZE)\n    im->dispsize=2;\n  else\n    im->dispsize=4;\n  if (cmdsize<im->dispsize) {\n    im->da->errors|=DAE_CROSS;         // Command crosses end of memory block\n    return; };\n  op->features=OP_MEMORY|OP_OPCONST;\n  op->opsize=op->granularity=datasize;\n  op->reg=REG_UNDEF;\n  im->usesaddrsize=1;                  // Address size prefix is meaningful\n  im->usessegment=1;                   // Segment override prefix is meaningful\n  if (im->dispsize==4) {               // 32-bit immediate address\n    // 32-bit address means possible fixup, calculate offset.\n    im->da->memfixup=im->mainsize;\n    op->opconst=im->da->memconst=*(ulong *)cmd; }\n  else {                               // 16-bit immediate address, very rare\n    op->opconst=im->da->memconst=*(ushort *)cmd;\n    op->features|=OP_ADDR16; };\n  // Get segment.\n  op->seg=Getsegment(im,op->arg,SEG_DS);\n  // Decode memory operand to text, if requested.\n  if (im->damode & DA_TEXT)\n    Memaddrtotext(im,op->arg,datasize,op->seg,T(\"\"),op->opconst,op->text);\n  ;\n};\n\n// Decodes simple register address ([reg16] or [reg32]). Flag changesreg must\n// be 0 if register remains unchanged and 1 if it changes. If fixseg is set to\n// SEG_UNDEF, assumes overridable DS:, otherwise assumes fixsegment that cannot\n// be overriden with segment prefix. If fixaddrsize is 2 or 4, assumes 16- or\n// 32-bit addressing only, otherwise uses default. ATTENTION, calling routine\n// must set usesdatasize by itself!\nstatic void Operandindirect(t_imdata *im,int index,int changesreg,int fixseg,\n  int fixaddrsize,ulong datasize,t_operand *op) {\n  int n;\n  ulong originallist;\n  tchar ardec[SHORTNAME];\n  op->features=OP_MEMORY|OP_INDEXED;\n  if (changesreg) {\n    op->features|=OP_MODREG;\n    op->reg=index;\n    im->da->modifies|=(1<<index); }\n  else\n    op->reg=REG_UNDEF;\n  if (fixaddrsize==2)\n    op->features|=OP_ADDR16;\n  else if (fixaddrsize==0) {\n    im->usesaddrsize=1;                // Address size prefix is meaningful\n    if (im->prefixlist & PF_ASIZE) {\n      op->features|=OP_ADDR16;\n      fixaddrsize=2;\n    };\n  };\n  // Get segment.\n  if (fixseg==SEG_UNDEF) {\n    op->seg=Getsegment(im,op->arg,SEG_DS);\n    im->usessegment=1; }               // Segment override prefix is meaningful\n  else\n    op->seg=fixseg;\n  op->opsize=datasize;\n  op->granularity=datasize;            // Default, may be overriden later\n  op->scale[index]=1;\n  op->aregs=(1<<index);\n  im->da->uses|=(1<<index);\n  // Warn if memory contents is 16-bit jump/call destination.\n  if (datasize==2 && (op->arg & B_MODMASK)==B_JMPCALL)\n    im->da->warnings|=DAW_JMP16;\n  // Decode source operand to text, if requested.\n  if (im->damode & DA_TEXT) {\n    if (im->config->disasmmode==DAMODE_ATT) {\n      ardec[0]=T('%'); n=1; }\n    else\n      n=0;\n    if (fixaddrsize==2)\n      Tstrcopy(ardec+n,SHORTNAME-n,regname16[index]);\n    else\n      Tstrcopy(ardec+n,SHORTNAME-n,regname32[index]);\n    if (fixseg==SEG_UNDEF)\n      Memaddrtotext(im,op->arg,datasize,op->seg,ardec,0,op->text);\n    else {\n      originallist=im->prefixlist;\n      im->prefixlist&=~PF_SEGMASK;\n      Memaddrtotext(im,op->arg,datasize,op->seg,ardec,0,op->text);\n      im->prefixlist=originallist;\n    };\n  };\n};\n\n// Decodes XLAT source address ([(E)BX+AL]). Note that I set scale of EAX to 1,\n// which is not exactly true. ATTENTION, calling routine must set usesdatasize\n// by itself!\nstatic void Operandxlat(t_imdata *im,t_operand *op) {\n  tchar *ardec;\n  op->features=OP_MEMORY|OP_INDEXED;\n  if (im->prefixlist & PF_ASIZE)\n    op->features|=OP_ADDR16;\n  im->usesaddrsize=1;                  // Address size prefix is meaningful\n  im->usessegment=1;                   // Segment override prefix is meaningful\n  op->opsize=1;\n  op->granularity=1;\n  op->reg=REG_UNDEF;\n  // Get segment.\n  op->seg=Getsegment(im,op->arg,SEG_DS);\n  op->scale[REG_EAX]=1;                // This is not correct!\n  op->scale[REG_EBX]=1;\n  op->aregs=(1<<REG_EAX)|(1<<REG_EBX);\n  im->da->uses|=op->aregs;\n  // Decode address to text, if requested.\n  if (im->damode & DA_TEXT) {\n    if (im->config->disasmmode==DAMODE_ATT)\n      ardec=(im->prefixlist & PF_ASIZE?T(\"%BX,%AL\"):T(\"%EBX,%AL\"));\n    else\n      ardec=(im->prefixlist & PF_ASIZE?T(\"BX+AL\"):T(\"EBX+AL\"));\n    Memaddrtotext(im,op->arg,1,op->seg,ardec,0,op->text);\n  };\n};\n\n// Decodes stack pushes of any size, including implicit return address in\n// CALLs. ATTENTION, calling routine must set usesdatasize by itself!\nstatic void Operandpush(t_imdata *im,ulong datasize,t_operand *op) {\n  int n,addrsize;\n  ulong originallist;\n  tchar ardec[SHORTNAME];\n  op->features=OP_MEMORY|OP_INDEXED|OP_MODREG;\n  op->reg=REG_ESP;\n  op->aregs=(1<<REG_ESP);\n  im->da->modifies|=op->aregs;\n  im->usesaddrsize=1;                  // Address size prefix is meaningful\n  if (im->prefixlist & PF_ASIZE) {\n    op->features|=OP_ADDR16;\n    addrsize=2; }\n  else\n    addrsize=4;                        // Flat model!\n  op->seg=SEG_SS;\n  if ((op->arg & B_ARGMASK)==B_PUSHA) {\n    im->da->uses=0xFF;                 // Uses all general registers\n    op->opsize=datasize*8; }\n  else if ((op->arg & B_ARGMASK)==B_PUSHRETF) {\n    im->da->uses|=op->aregs;\n    op->opsize=datasize*2; }\n  else {\n    im->da->uses|=op->aregs;\n    // Warn if memory contents is 16-bit jump/call destination.\n    if (datasize==2 && (op->arg & B_MODMASK)==B_JMPCALL)\n      im->da->warnings|=DAW_JMP16;\n    op->opsize=datasize;\n  };\n  op->opconst=-(long)op->opsize;       // ESP is predecremented\n  op->granularity=datasize;            // Default, may be overriden later\n  op->scale[REG_ESP]=1;\n  // Decode source operand to text, if requested.\n  if (im->damode & DA_TEXT) {\n    if (im->config->disasmmode==DAMODE_ATT) {\n      ardec[0]=T('%'); n=1; }\n    else\n      n=0;\n    if (addrsize==2)\n      Tstrcopy(ardec+n,SHORTNAME-n,regname16[REG_ESP]);\n    else\n      Tstrcopy(ardec+n,SHORTNAME-n,regname32[REG_ESP]);\n    originallist=im->prefixlist;\n    im->prefixlist&=~PF_SEGMASK;\n    Memaddrtotext(im,op->arg,datasize,op->seg,ardec,0,op->text);\n    im->prefixlist=originallist;\n  };\n};\n\n// Decodes segment register.\nstatic void Operandsegreg(t_imdata *im,int index,t_operand *op) {\n  int n;\n  op->features=OP_SEGREG;\n  if (index>=NSEG) {\n    op->features|=OP_INVALID;          // Invalid segment register\n    im->da->errors|=DAE_BADSEG; };\n  op->opsize=op->granularity=2;\n  op->reg=index;\n  op->seg=SEG_UNDEF;                   // Because this is not a memory address\n  if (op->arg & (B_CHG|B_UPD))\n    im->da->warnings|=DAW_SEGMOD;      // Modifies segment register\n  // Decode name of segment register.\n  if (im->damode & DA_TEXT) {\n    n=0;\n    if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('%');\n    Tcopycase(op->text+n,TEXTLEN-n,segname[index],im->config->lowercase);\n  };\n};\n\n// Decodes FPU register operand.\nstatic void Operandfpureg(t_imdata *im,int index,t_operand *op) {\n  op->features=OP_FPUREG;\n  op->opsize=op->granularity=10;\n  op->reg=index;\n  op->seg=SEG_UNDEF;                   // Because this is not a memory address\n  // Decode name of FPU register.\n  if (im->damode & DA_TEXT) {\n    if (im->config->disasmmode==DAMODE_ATT) {\n      if (im->config->simplifiedst && index==0)\n        Tcopycase(op->text,TEXTLEN,T(\"%ST\"),im->config->lowercase);\n      else {\n        op->text[0]=T('%');\n        Tcopycase(op->text+1,TEXTLEN-1,fpushort[index],im->config->lowercase);\n      }; }\n    else if (im->config->simplifiedst && index==0)\n      Tcopycase(op->text,TEXTLEN,T(\"ST\"),im->config->lowercase);\n    else if (im->config->disasmmode!=DAMODE_HLA)\n      Tcopycase(op->text,TEXTLEN,fpulong[index],im->config->lowercase);\n    else\n      Tcopycase(op->text,TEXTLEN,fpushort[index],im->config->lowercase);\n    ;\n  };\n};\n\n// Decodes MMX register operands. ATTENTION, does not set correct granularity!\nstatic void Operandmmxreg(t_imdata *im,int index,t_operand *op) {\n  int n;\n  op->features=OP_MMXREG;\n  op->opsize=8;\n  op->granularity=4;                   // Default, correct it later!\n  op->reg=index;\n  op->seg=SEG_UNDEF;\n  // Decode name of MMX/3DNow! register.\n  if (im->damode & DA_TEXT) {\n    n=0;\n    if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('%');\n    Tcopycase(op->text+n,TEXTLEN-n,mmxname[index],im->config->lowercase);\n  };\n};\n\n// Decodes 3DNow! register operands. ATTENTION, does not set correct\n// granularity!\nstatic void Operandnowreg(t_imdata *im,int index,t_operand *op) {\n  int n;\n  op->features=OP_3DNOWREG;\n  op->opsize=8;\n  op->granularity=4;                   // Default, correct it later!\n  op->reg=index;\n  op->seg=SEG_UNDEF;\n  // Decode name of MMX/3DNow! register.\n  if (im->damode & DA_TEXT) {\n    n=0;\n    if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('%');\n    Tcopycase(op->text+n,TEXTLEN-n,mmxname[index],im->config->lowercase);\n  };\n};\n\n// Decodes SSE register operands. ATTENTION, does not set correct granularity!\nstatic void Operandssereg(t_imdata *im,int index,t_operand *op) {\n  int n;\n  op->features=OP_SSEREG;\n  if (op->arg & B_NOVEXSIZE)\n    op->opsize=16;\n  else\n    op->opsize=im->ssesize;\n  op->granularity=4;                   // Default, correct it later!\n  op->reg=index;\n  op->seg=SEG_UNDEF;\n  // Note that some rare SSE commands may use Reg without ModRM.\n  if (im->modsize==0)\n    im->modsize=1;\n  // Decode name of SSE register.\n  if (im->damode & DA_TEXT) {\n    n=0;\n    if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('%');\n    if (op->opsize==32)\n      Tcopycase(op->text+n,TEXTLEN-n,sse256[index],im->config->lowercase);\n    else\n      Tcopycase(op->text+n,TEXTLEN-n,sse128[index],im->config->lowercase);\n    ;\n  };\n};\n\n// Decodes flag register EFL.\nstatic void Operandefl(t_imdata *im,ulong datasize,t_operand *op) {\n  op->features=OP_OTHERREG;\n  op->opsize=op->granularity=datasize;\n  op->reg=REG_UNDEF;\n  op->seg=SEG_UNDEF;\n  // Decode name of register.\n  if (im->damode & DA_TEXT) {\n    if (im->config->disasmmode==DAMODE_ATT)\n      Tcopycase(op->text,TEXTLEN,T(\"%EFL\"),im->config->lowercase);\n    else\n      Tcopycase(op->text,TEXTLEN,T(\"EFL\"),im->config->lowercase);\n    ;\n  };\n};\n\n// Decodes 8/16/32-bit immediate jump/call offset relative to EIP of next\n// command.\nstatic void Operandoffset(t_imdata *im,ulong offsetsize,ulong datasize,\n  uchar *cmd,ulong cmdsize,ulong offsaddr,t_operand *op) {\n  int n;\n  tchar label[TEXTLEN];\n  if (cmdsize<offsetsize) {\n    im->da->errors|=DAE_CROSS;         // Command crosses end of memory block\n    return; };\n  op->features=OP_CONST;\n  op->opsize=op->granularity=datasize; // NOT offsetsize!\n  im->immsize1=offsetsize;\n  op->reg=REG_UNDEF;\n  op->seg=SEG_UNDEF;\n  offsaddr+=offsetsize;\n  if (offsetsize==1)                   // Sign-extandable constant\n    op->opconst=*(signed char *)cmd+offsaddr;\n  else if (offsetsize==2)              // 16-bit immediate offset, rare\n    op->opconst=*(ushort *)cmd+offsaddr;\n  else                                 // 32-bit immediate offset\n    op->opconst=*(ulong *)cmd+offsaddr;\n  if (datasize==2) {\n    op->opconst&=0x0000FFFF;\n    im->da->warnings|=DAW_JMP16; };    // Practically unused in Win32 code\n  im->usesdatasize=1;\n  // Decode address of destination to text, if requested.\n  if (im->damode & DA_TEXT) {\n    if (offsetsize==1 && im->config->disasmmode!=DAMODE_HLA &&\n      im->config->disasmmode!=DAMODE_ATT)\n      n=Tcopycase(op->text,TEXTLEN,T(\"SHORT \"),im->config->lowercase);\n    else\n      n=0;\n    if (datasize==4) {\n      if (im->decodeaddress!=NULL &&\n        im->decodeaddress(label,op->opconst)!=0)\n        Tstrcopy(op->text+n,TEXTLEN-n,label);\n      else {\n        if (im->config->disasmmode==DAMODE_ATT)\n          op->text[n++]=T('$');\n        Hexprint(4,op->text+n,op->opconst,im,op->arg);\n      }; }\n    else {\n      if (im->config->disasmmode==DAMODE_ATT)\n        op->text[n++]=T('$');\n      Hexprint(2,op->text+n,op->opconst,im,op->arg);\n    };\n  };\n};\n\n// Decodes 16:16/16:32-bit immediate absolute far jump/call address.\nstatic void Operandimmfaraddr(t_imdata *im,ulong datasize,uchar *cmd,\n  ulong cmdsize,t_operand *op) {\n  int n;\n  if (cmdsize<datasize+2) {\n    im->da->errors|=DAE_CROSS;         // Command crosses end of memory block\n    return; };\n  op->features=OP_CONST|OP_SELECTOR;\n  op->opsize=datasize+2;\n  op->granularity=datasize;            // Attention, non-standard case!\n  op->reg=REG_UNDEF;\n  op->seg=SEG_UNDEF;\n  im->immsize1=datasize;\n  im->immsize2=2;\n  if (datasize==2) {\n    op->opconst=*(ushort *)cmd;\n    im->da->warnings|=DAW_JMP16; }     // Practically unused in Win32 code\n  else {\n    op->opconst=*(ulong *)cmd;\n    im->da->immfixup=im->mainsize; };\n  op->selector=*(ushort *)(cmd+datasize);\n  im->usesdatasize=1;\n  // Decode address of destination to text, if requested.\n  if (im->damode & DA_TEXT) {\n    if (im->config->disasmmode==DAMODE_ATT) {\n      op->text[0]=T('$'); n=1; }\n    else\n      n=Tcopycase(op->text,TEXTLEN,T(\"FAR \"),im->config->lowercase);\n    n+=Hexprint(2,op->text+n,op->selector,im,op->arg);\n    op->text[n++]=T(':');\n    if (im->config->disasmmode==DAMODE_ATT)\n      op->text[n++]=T('$');\n    Hexprint(4,op->text+n,op->opconst,im,op->arg);\n  };\n};\n\n// Decodes immediate constant 1 used in shift operations.\nstatic void Operandone(t_imdata *im,t_operand *op) {\n  op->features=OP_CONST;\n  op->opsize=op->granularity=1;        // Just to make it defined\n  op->reg=REG_UNDEF;\n  op->seg=SEG_UNDEF;\n  op->opconst=1;\n  if (im->damode & DA_TEXT) {\n    if (im->config->disasmmode==DAMODE_ATT)\n      Tstrcopy(op->text,TEXTLEN,T(\"$1\"));\n    else\n      Tstrcopy(op->text,TEXTLEN,T(\"1\"));\n    ;\n  };\n};\n\n// Decodes 8/16/32-bit immediate constant (possibly placed after ModRegRM-SIB-\n// Disp combination). Constant is nbytes long in the command and extends to\n// constsize bytes. If constant is a count, it deals with data of size datasize.\n// ATTENTION, calling routine must set usesdatasize by itself!\nstatic void Operandimmconst(t_imdata *im,ulong nbytes,ulong constsize,\n  ulong datasize,uchar *cmd,ulong cmdsize,int issecond,t_operand *op) {\n  int n;\n  ulong u,mod;\n  tchar label[TEXTLEN];\n  if (cmdsize<im->modsize+im->dispsize+nbytes+(issecond?im->immsize1:0)) {\n    im->da->errors|=DAE_CROSS;         // Command crosses end of memory block\n    return; };\n  op->features=OP_CONST;\n  op->opsize=op->granularity=constsize;\n  cmd+=im->modsize+im->dispsize;\n  if (issecond==0)\n    im->immsize1=nbytes;               // First constant\n  else {\n    im->immsize2=nbytes;               // Second constant (ENTER only)\n    cmd+=im->immsize1; };\n  op->reg=REG_UNDEF;\n  op->seg=SEG_UNDEF;\n  if (nbytes==4) {                     // 32-bit immediate constant\n    op->opconst=*(ulong *)cmd;\n    im->da->immfixup=im->mainsize+im->modsize+im->dispsize+\n      (issecond?im->immsize1:0);\n    ; }\n  else if (nbytes==1)                  // 8-byte constant, maybe sign-extendable\n    op->opconst=*(signed char *)cmd;\n  else                                 // 16-bite immediate constant, rare\n    op->opconst=*(ushort *)cmd;\n  if (constsize==1)\n    op->opconst&=0x000000FF;\n  else if (constsize==2)\n    op->opconst&=0x0000FFFF;\n  switch (op->arg & B_MODMASK) {\n    case B_BITCNT:                     // Constant is a bit count\n      if ((datasize==4 && op->opconst>31) ||\n        (datasize==1 && op->opconst>7) ||\n        (datasize==2 && op->opconst>15)) im->da->warnings|=DAW_SHIFT;\n      break;\n    case B_SHIFTCNT:                   // Constant is a shift count\n      if (op->opconst==0 ||\n        (datasize==4 && op->opconst>31) || (datasize==1 && op->opconst>7) ||\n        (datasize==2 && op->opconst>15)) im->da->warnings|=DAW_SHIFT;\n      break;\n    case B_STACKINC:                   // Stack increment must be DWORD-aligned\n      if ((op->opconst & 0x3)!=0)\n        im->da->warnings|=DAW_STACK;\n      im->da->stackinc=op->opconst;\n      break;\n    default: break; };\n  if (im->damode & DA_TEXT) {\n    mod=op->arg & B_MODMASK;\n    n=0;\n    if (constsize==1) {                // 8-bit constant\n      if (im->config->disasmmode==DAMODE_ATT)\n        op->text[n++]=T('$');\n      Hexprint(1,op->text+n,op->opconst,im,op->arg); }\n    else if (constsize==4) {           // 32-bit constant\n      if (im->decodeaddress!=NULL &&\n        (mod==B_NONSPEC || mod==B_JMPCALL || mod==B_JMPCALLFAR) &&\n        im->decodeaddress(label,op->opconst)!=0)\n        Tstrcopy(op->text+n,TEXTLEN-n,label);\n      else {\n        if (im->config->disasmmode==DAMODE_ATT)\n          op->text[n++]=T('$');\n        if (mod!=B_UNSIGNED && mod!=B_BINARY && mod!=B_PORT &&\n          (long)op->opconst<0 &&\n          (mod==B_SIGNED || (long)op->opconst>NEGLIMIT)\n        ) {\n          op->text[n++]=T('-'); u=-(long)op->opconst; }\n        else\n          u=op->opconst;\n        Hexprint(4,op->text+n,u,im,op->arg);\n      }; }\n    else {                             // 16-bit constant\n      if (im->config->disasmmode==DAMODE_ATT)\n        op->text[n++]=T('$');\n      else if ((op->arg & B_SHOWSIZE)!=0) {\n        n+=Tcopycase(op->text+n,TEXTLEN-n,sizename[constsize],\n          im->config->lowercase);\n        n+=Tstrcopy(op->text+n,TEXTLEN-n,T(\" \")); };\n      Hexprint(2,op->text+n,op->opconst,im,op->arg);\n    };\n  };\n  return;\n};\n\n// Decodes contrtol register operands.\nstatic void Operandcreg(t_imdata *im,int index,t_operand *op) {\n  int n;\n  op->features=OP_CREG;\n  op->opsize=op->granularity=4;\n  op->reg=index;\n  op->seg=SEG_UNDEF;\n  // Decode name of control register.\n  if (im->damode & DA_TEXT) {\n    n=0;\n    if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('%');\n    Tcopycase(op->text+n,TEXTLEN-n,crname[index],im->config->lowercase); };\n  // Some control registers are physically absent.\n  if (index!=0 && index!=2 && index!=3 && index!=4)\n    im->da->errors|=DAE_BADCR;\n  ;\n};\n\n// Decodes debug register operands.\nstatic void Operanddreg(t_imdata *im,int index,t_operand *op) {\n  int n;\n  op->features=OP_DREG;\n  op->opsize=op->granularity=4;\n  op->reg=index;\n  op->seg=SEG_UNDEF;\n  // Decode name of debug register.\n  if (im->damode & DA_TEXT) {\n    n=0;\n    if (im->config->disasmmode==DAMODE_ATT) op->text[n++]=T('%');\n    Tcopycase(op->text+n,TEXTLEN-n,drname[index],im->config->lowercase);\n  };\n};\n\n// Decodes FPU status register FST.\nstatic void Operandfst(t_imdata *im,t_operand *op) {\n  op->features=OP_OTHERREG;\n  op->opsize=op->granularity=2;\n  op->reg=REG_UNDEF;\n  op->seg=SEG_UNDEF;\n  // Decode name of register.\n  if (im->damode & DA_TEXT) {\n    if (im->config->disasmmode==DAMODE_ATT)\n      Tcopycase(op->text,TEXTLEN,T(\"%FST\"),im->config->lowercase);\n    else\n      Tcopycase(op->text,TEXTLEN,T(\"FST\"),im->config->lowercase);\n    ;\n  };\n};\n\n// Decodes FPU control register FCW.\nstatic void Operandfcw(t_imdata *im,t_operand *op) {\n  op->features=OP_OTHERREG;\n  op->opsize=op->granularity=2;\n  op->reg=REG_UNDEF;\n  op->seg=SEG_UNDEF;\n  // Decode name of register.\n  if (im->damode & DA_TEXT) {\n    if (im->config->disasmmode==DAMODE_ATT)\n      Tcopycase(op->text,TEXTLEN,T(\"%FCW\"),im->config->lowercase);\n    else\n      Tcopycase(op->text,TEXTLEN,T(\"FCW\"),im->config->lowercase);\n    ;\n  };\n};\n\n// Decodes SSE control register MXCSR.\nstatic void Operandmxcsr(t_imdata *im,t_operand *op) {\n  op->features=OP_OTHERREG;\n  op->opsize=op->granularity=4;\n  op->reg=REG_UNDEF;\n  op->seg=SEG_UNDEF;\n  // Decode name of register.\n  if (im->damode & DA_TEXT) {\n    if (im->config->disasmmode==DAMODE_ATT)\n      Tcopycase(op->text,TEXTLEN,T(\"%MXCSR\"),im->config->lowercase);\n    else\n      Tcopycase(op->text,TEXTLEN,T(\"MXCSR\"),im->config->lowercase);\n    ;\n  };\n};\n\n\n////////////////////////////////////////////////////////////////////////////////\n///////////////////////////////// DISASSEMBLER /////////////////////////////////\n\n// Disassembles first command in the binary code of given length at given\n// address. Assumes that address and data size attributes of all participating\n// segments are 32 bit (flat model). Returns length of the command or 0 in case\n// of severe error.\nulong Disasm(uchar const *cmd,ulong cmdsize,ulong ip,t_disasm *da,\n  int damode,t_config *config,int (*decodeaddress)(tchar *s,ulong addr)) {\n  int i,j,k,q,noperand,nout,enclose,vexreg,success,cfill,ofill;\n  ulong m,n,u,prefix,prefixmask,code,arg,cmdtype,datasize;\n  ulong type,vex,vexlead;\n  t_imdata im;\n  const t_chain *pchain;\n  const t_bincmd *pcmd;\n  const t_modrm *pmrm;\n  t_operand *op,pseudoop;\n  // Verify input parameters.\n  if (cmd==NULL || cmdsize==0 || da==NULL || cmdchain==NULL)\n    return 0;                          // Error in parameters or uninitialized\n  // Initialize t_disasm structure that receives results of disassembly. This\n  // structure is very large, memset() or several memset()'s would take much,\n  // much longer.\n  da->ip=ip;\n  da->memfixup=da->immfixup=-1;\n  da->errors=DAE_NOERR;\n  da->warnings=DAW_NOWARN;\n  da->uses=0;\n  da->modifies=0;\n  da->memconst=0;\n  da->stackinc=0;\n  for (i=0,op=da->op; i<NOPERAND; i++,op++) {\n    op->features=0;\n    op->arg=0;\n    op->opsize=op->granularity=0;\n    op->reg=REG_UNDEF;\n    op->uses=0;\n    op->modifies=0;\n    op->seg=SEG_UNDEF;\n    ((ulong *)op->scale)[0]=0;\n    ((ulong *)op->scale)[1]=0;\n    op->aregs=0;\n    op->opconst=0;\n    op->selector=0;\n    op->text[0]=T('\\0'); };\n  da->dump[0]=T('\\0');\n  da->result[0]=T('\\0');\n  da->masksize=0;\n  // Prepare intermediate data. This data allows to keep Disasm() reentrant\n  // (thread-safe).\n  im.da=da;\n  im.damode=damode;\n  if (config==NULL)\n    im.config=config=&defconfig;       // Use default configuration\n  else\n    im.config=config;\n  im.decodeaddress=decodeaddress;\n  im.prefixlist=0;\n  im.ssesize=16;                       // Default\n  im.immsize1=im.immsize2=0;\n  // Correct 80x86 command may contain up to 4 prefixes belonging to different\n  // prefix groups. If Disasm() detects second prefix from the same group, it\n  // flushes first prefix in the sequence as a pseudocommand. (This is not\n  // quite true; all CPUs that I have tested accept repeating prefixes. Still,\n  // who will place superfluous and possibly nonportable prefixes into the\n  // code?)\n  for (n=0; ; n++) {\n    if (n>=cmdsize) {                  // Command crosses end of memory block\n      n=0; im.prefixlist=0;            // Decode as standalone prefix\n      break; };\n    // Note that some CPUs treat REPx and LOCK as belonging to the same group.\n    switch (cmd[n]) {\n      case 0x26: prefix=PF_ES; prefixmask=PF_SEGMASK; break;\n      case 0x2E: prefix=PF_CS; prefixmask=PF_SEGMASK; break;\n      case 0x36: prefix=PF_SS; prefixmask=PF_SEGMASK; break;\n      case 0x3E: prefix=PF_DS; prefixmask=PF_SEGMASK; break;\n      case 0x64: prefix=PF_FS; prefixmask=PF_SEGMASK; break;\n      case 0x65: prefix=PF_GS; prefixmask=PF_SEGMASK; break;\n      case 0x66: prefix=prefixmask=PF_DSIZE; break;\n      case 0x67: prefix=prefixmask=PF_ASIZE; break;\n      case 0xF0: prefix=prefixmask=PF_LOCK; break;\n      case 0xF2: prefix=PF_REPNE; prefixmask=PF_REPMASK; break;\n      case 0xF3: prefix=PF_REP; prefixmask=PF_REPMASK; break;\n      default: prefix=0; break; };\n    if (prefix==0)\n      break;\n    if (im.prefixlist & prefixmask) {\n      da->errors|=DAE_SAMEPREF;        // Two prefixes from the same group\n      break; };\n    im.prefixlist|=prefix;\n  };\n  // There may be VEX prefix preceding command body. Yes, VEX is supported in\n  // the 32-bit mode! And even in the 16-bit, but who cares?\n  vex=0; vexlead=0;\n  if (cmdsize>=n+3 && (*(ushort *)(cmd+n) & 0xC0FE)==0xC0C4) {\n    // VEX is not compatible with LOCK, 66, F2 and F3 prefixes. VEX is not\n    // compatible with REX, too, but REX prefixes are missing in 32-bit mode.\n    if (im.prefixlist & (PF_LOCK|PF_66|PF_F2|PF_F3))\n      da->errors|=DAE_SAMEPREF;        // Incompatible prefixes\n    else {\n      if (cmd[n]==0xC5) {\n        // 2-byte VEX prefix.\n        im.prefixlist|=PF_VEX2;\n        vex=cmd[n+1];\n        vexlead=DX_VEX|DX_LEAD0F; n+=2; }\n      else {\n        // 3-byte VEX prefix.\n        im.prefixlist|=PF_VEX3;\n        vex=cmd[n+2]+(cmd[n+1]<<8);    // Note the order of the bytes!\n        switch (vex & 0x1F00) {\n          case 0x0100: vexlead=DX_VEX|DX_LEAD0F; n+=3; break;\n          case 0x0200: vexlead=DX_VEX|DX_LEAD38; n+=3; break;\n          case 0x0300: vexlead=DX_VEX|DX_LEAD3A; n+=3; break;\n          default: vex=0; break;       // Unsupported VEX, decode as LES\n        };\n      };\n      if (vex!=0) {\n        // Get size of operands.\n        if (vex & 0x0004)\n          im.ssesize=32;               // 256-bit SSE operands\n        // Get register encoded in VEX prefix.\n        vexreg=(~vex>>3) & 0x07;\n        // Check for SIMD prefix.\n        switch (vex & 0x3) {\n          case 0x0001: im.prefixlist|=PF_66; break;\n          case 0x0002: im.prefixlist|=PF_F3; break;\n          case 0x0003: im.prefixlist|=PF_F2; break;\n        };\n      };\n    };\n    if (n>=cmdsize) {                  // Command crosses end of memory block\n      n=0; vex=0; im.prefixlist=0;     // Decode as LES\n    };\n  };\n  // We have gathered all prefixes, including those that are integral part of\n  // the SSE command.\n  if (n>4 || (da->errors & DAE_SAMEPREF)!=0) {\n    if (n>4) da->errors|=DAE_MANYPREF;\n    n=0; im.prefixlist=0; };           // Decode as standalone prefix\n  da->prefixes=im.prefixlist;\n  da->nprefix=n;\n  // Fetch first 4 bytes of the command and find start of command chain in the\n  // command table.\n  if (cmdsize>=n+sizeof(ulong))\n    code=*(ulong *)(cmd+n);            // Optimization for most frequent case\n  else {\n    code=cmd[n];\n    if (cmdsize>n+1) ((uchar *)&code)[1]=cmd[n+1];\n    if (cmdsize>n+2) ((uchar *)&code)[2]=cmd[n+2];\n    if (cmdsize>n+3) ((uchar *)&code)[3]=cmd[n+3]; };\n  // Walk chain and search for matching command. Command is matched if:\n  // (1) code bits allowed in mask coincide in command and descriptor;\n  // (2) when command type contains D_MEMORY, ModRegRM byte must indicate\n  //     memory, and when type contains D_REGISTER, Mod must indicate register;\n  // (3) when bits D_DATAxx or D_ADDRxx are set, size of data and/or code must\n  //     match these bits;\n  // (4) field D_MUSTMASK must match gathered prefixes;\n  // (5) presence or absence of VEX prefix must be matched by DX_VEX. If VEX\n  //     is present, implied leading bytes must match vexlead and bit L must\n  //     match DX_VLMASK;\n  // (6) if short form of string commands is requested, bit D_LONGFORM must be\n  //     cleared, or segment override prefix other that DS:, or address size\n  //     prefix must be present;\n  // (7) when bit D_POSTBYTE is set, byte after ModRegRM/SIB/offset must match\n  //     postbyte. Note that all postbyted commands include memory address in\n  //     ModRegRM form and do not include immediate constants;\n  // (8) if alternative forms of conditional commands are requested, command\n  //     is conditional, and it is marked as DX_ZEROMASK or DX_CARRYMASK,\n  //     check whether these bits match damode. (Conditional branch on flag\n  //     Z!=0 can be disassembled either as JZ or JE. First form is preferrable\n  //     after SUB or DEC; second form is more natural after CMP);\n  // (9) if command has mnemonics RETN but alternative form RET is expected,\n  //     skip it - RET will follow.\n  success=0;\n  for (pchain=cmdchain+(code & CMDMASK); ; pchain=pchain->pnext) {\n    if (pchain==NULL || pchain->pcmd==NULL)\n      break;                           // End of chain, no match\n    pcmd=pchain->pcmd;\n    if (((code ^ pcmd->code) & pcmd->mask)!=0)\n      continue;                        // (1) Different code bits\n    cmdtype=pcmd->cmdtype;\n    if ((damode & DA_TEXT)!=0) {\n      if ((pcmd->exttype & DX_RETN)!=0 && config->useretform!=0)\n        continue;                      // (9) RET form of near return expected\n      if ((cmdtype & D_COND)!=0 &&\n        (pcmd->exttype & (DX_ZEROMASK|DX_CARRYMASK))!=0\n      ) {\n        if ((damode & DA_JZ)!=0 && (pcmd->exttype & DX_ZEROMASK)==DX_JE)\n          continue;                    // (8) Wait for DX_JZ\n        if ((damode & DA_JC)!=0 && (pcmd->exttype & DX_CARRYMASK)==DX_JB)\n          continue;                    // (8) Wait for DX_JC\n        ;\n      };\n    };\n    if ((pcmd->exttype & (DX_VEX|DX_LEADMASK))!=vexlead)\n      continue;                        // (5) Unmatched VEX prefix\n    if (pcmd->exttype & DX_VEX) {\n      if (((pcmd->exttype & DX_VLMASK)==DX_LSHORT && (vex & 0x04)!=0) ||\n        ((pcmd->exttype & DX_VLMASK)==DX_LLONG && (vex & 0x04)==0))\n        continue;                      // (5) Unmatched VEX.L\n      ;\n    };\n    if ((cmdtype &\n      (D_MEMORY|D_REGISTER|D_LONGFORM|D_SIZEMASK|D_MUSTMASK|D_POSTBYTE))==0\n    ) {\n      success=1; break; };             // Optimization for most frequent case\n    switch (cmdtype & D_MUSTMASK) {\n      case D_MUST66:                   // (4) (SSE) Requires 66, no F2 or F3\n        if ((im.prefixlist & (PF_66|PF_F2|PF_F3))!=PF_66) continue;\n        break;\n      case D_MUSTF2:                   // (4) (SSE) Requires F2, no 66 or F3\n        if ((im.prefixlist & (PF_66|PF_F2|PF_F3))!=PF_F2) continue;\n        break;\n      case D_MUSTF3:                   // (4) (SSE) Requires F3, no 66 or F2\n        if ((im.prefixlist & (PF_66|PF_F2|PF_F3))!=PF_F3) continue;\n        break;\n      case D_MUSTNONE:                 // (4) (MMX,SSE) Requires no 66, F2, F3\n        if ((im.prefixlist & (PF_66|PF_F2|PF_F3))!=0) continue;\n        break;\n      case D_NEEDF2:                   // (4) (SSE) Requires F2, no F3\n        if ((im.prefixlist & (PF_F2|PF_F3))!=PF_F2) continue;\n        break;\n      case D_NEEDF3:                   // (4) (SSE) Requires F3, no F2\n        if ((im.prefixlist & (PF_F2|PF_F3))!=PF_F3) continue;\n        break;\n      case D_NOREP:                    // (4) Must not include F2 or F3\n        if ((im.prefixlist & (PF_REP|PF_REPNE))!=0) continue;\n        break;\n      case D_MUSTREP:                  // (4) Must include F3 (REP)\n      case D_MUSTREPE:                 // (4) Must include F3 (REPE)\n        if ((im.prefixlist & PF_REP)==0) continue;\n        break;\n      case D_MUSTREPNE:                // (4) Must include F2 (REPNE)\n        if ((im.prefixlist & PF_REPNE)==0) continue;\n        break;\n      default: break; };\n    if ((cmdtype & D_DATA16)!=0 && (im.prefixlist & PF_DSIZE)==0)\n      continue;                        // (3) 16-bit data expected\n    if ((cmdtype & D_DATA32)!=0 && (im.prefixlist & PF_DSIZE)!=0)\n      continue;                        // (3) 32-bit data expected\n    if ((cmdtype & D_ADDR16)!=0 && (im.prefixlist & PF_ASIZE)==0)\n      continue;                        // (3) 16-bit address expected\n    if ((cmdtype & D_ADDR32)!=0 && (im.prefixlist & PF_ASIZE)!=0)\n      continue;                        // (3) 32-bit address expected\n    if ((cmdtype & D_LONGFORM)!=0 && config->shortstringcmds!=0 &&\n      (im.prefixlist & (PF_ES|PF_CS|PF_SS|PF_FS|PF_GS|PF_ASIZE))==0)\n      continue;                        // (6) Short form of string cmd expected\n    if (cmdtype & D_MEMORY) {\n      // (2) Command expects operand in memory (Mod in ModRegRM is not 11b).\n      if (n+pcmd->length>=cmdsize)\n        break;                         // Command longer than available code\n      if ((cmd[n+pcmd->length] & 0xC0)==0xC0) continue; }\n    else if (cmdtype & D_REGISTER) {\n      // (2) Command expects operand in register (Mod in ModRegRM is 11b).\n      if (n+pcmd->length>=cmdsize)\n        break;                         // Command longer than available code\n      if ((cmd[n+pcmd->length] & 0xC0)!=0xC0) continue; }\n    if (cmdtype & D_POSTBYTE) {\n      // Command expects postbyte after ModRegRM/SIB/offset as part of the\n      // code. If command is longer than available code, immediately report\n      // match - error will be reported elsewhere.\n      m=n+pcmd->length;                // Offset to ModRegRM byte\n      if (m>=cmdsize)\n        break;                         // Command longer than available code\n      if (im.prefixlist & PF_ASIZE)\n        m+=modrm16[cmd[m]].size;       // 16-bit address\n      else {\n        pmrm=modrm32+cmd[m];\n        if (pmrm->psib==NULL)          // 32-bit address without SIB\n          m+=pmrm->size;\n        else if (m+1>=cmdsize)         // Command longer than available code\n          break;\n        else                           // 32-bit address with SIB\n          m+=pmrm->psib[cmd[m+1]].size;\n        ;\n      };\n      if (m>=cmdsize)\n        break;                         // Command longer than available code\n      // Asterisk in SSE and AVX commands means comparison predicate. Check\n      // for predefined range.\n      if (cmd[m]==(uchar)pcmd->postbyte ||\n        ((cmdtype & D_WILDCARD)!=0 && cmd[m]<(pcmd->exttype & DX_VEX?32:8)))\n        im.immsize1=1;                 // (7) Interprete postbyte as imm const\n      else\n        continue;                      // (7)\n      ;\n    };\n    success=1;\n    break;                             // Perfect match, command found\n  };\n  // If command is bad but preceded with prefixes, decode first prefix as\n  // standalone. In this case, list of command's prefixes is empty.\n  if (success==0) {\n    pcmd=NULL;\n    if (im.prefixlist!=0) {\n      n=0; da->nprefix=0; da->prefixes=im.prefixlist=0;\n      code=cmd[n] & CMDMASK;\n      for (pchain=cmdchain+code; ; pchain=pchain->pnext) {\n        if (pchain==NULL || pchain->pcmd==NULL) {\n          pcmd=NULL; break; };         // End of chain, no match\n        pcmd=pchain->pcmd;\n        if ((pcmd->cmdtype & D_CMDTYPE)!=D_PREFIX)\n          continue;\n        if (((code ^ pcmd->code) & pcmd->mask)==0) {\n          cmdtype=pcmd->cmdtype;\n          da->errors|=DAE_BADCMD;\n          break;\n        };\n      };\n    };\n    // If matching command is still not found, report error and return one byte\n    // as a command length.\n    if (pcmd==NULL) {\n      if (damode & DA_DUMP)\n        Thexdump(da->dump,cmd,1,config->lowercase);\n      if (damode & DA_TEXT) {\n        if (config->disasmmode==DAMODE_HLA)\n          j=Tcopycase(da->result,TEXTLEN,sizename[1],config->lowercase);\n        else if (config->disasmmode==DAMODE_ATT)\n          j=Tcopycase(da->result,TEXTLEN,sizeatt[1],config->lowercase);\n        else\n          j=Tcopycase(da->result,TEXTLEN,sizekey[1],config->lowercase);\n        j+=Tstrcopy(da->result+j,TEXTLEN-j,T(\" \"));\n        Thexdump(da->result+j,cmd,1,config->lowercase); };\n      da->size=1;\n      da->nprefix=0;\n      da->prefixes=0;\n      da->cmdtype=D_BAD;\n      da->exttype=0;\n      da->errors|=DAE_BADCMD;          // Unrecognized command\n      if (damode & DA_HILITE) {\n        da->masksize=tstrlen(da->result);\n        memset(da->mask,DRAW_SUSPECT,da->masksize); };\n      return 1;\n    };\n  };\n  // Exclude prefixes that are integral part of the command from the list of\n  // prefixes. First comparison optimizes for the most frequent case of no\n  // obligatory prefixes.\n  if (cmdtype & (D_SIZEMASK|D_MUSTMASK)) {\n    switch (cmdtype & D_MUSTMASK) {\n      case D_MUST66:                   // (SSE) Requires 66, no F2 or F3\n      case D_MUSTF2:                   // (SSE) Requires F2, no 66 or F3\n      case D_MUSTF3:                   // (SSE) Requires F3, no 66 or F2\n        im.prefixlist&=~(PF_66|PF_F2|PF_F3); break;\n      case D_NEEDF2:                   // (SSE) Requires F2, no F3\n      case D_NEEDF3:                   // (SSE) Requires F3, no F2\n        im.prefixlist&=~(PF_F2|PF_F3); break;\n      default: break; };\n    if (cmdtype & D_DATA16)            // Must include data size prefix\n      im.prefixlist&=~PF_DSIZE;\n    if (cmdtype & D_ADDR16)            // Must include address size prefix\n      im.prefixlist&=~PF_ASIZE;\n    ;\n  };\n  // Prepare for disassembling.\n  im.modsize=0;                        // Size of ModRegRM/SIB bytes\n  im.dispsize=0;                       // Size of address offset\n  im.usesdatasize=0;\n  im.usesaddrsize=0;\n  im.usessegment=0;\n  da->cmdtype=cmdtype;\n  da->exttype=pcmd->exttype;\n  n+=pcmd->length;                     // Offset of ModRegRM or imm constant\n  if (n>cmdsize) {\n    da->errors|=DAE_CROSS;             // Command crosses end of memory block\n    goto error; };\n  im.mainsize=n;                       // Size of command with prefixes\n  // Set default data size (note that many commands and operands override it).\n  if ((cmdtype & D_SIZE01)!=0 && (cmd[n-1] & 0x01)==0) {\n    if (im.prefixlist & PF_DSIZE)\n      da->warnings|=DAW_DATASIZE;      // Superfluous data size prefix\n    datasize=1; }\n  else if (im.prefixlist & PF_DSIZE)\n    datasize=2;\n  else\n    datasize=4;\n  // Process operands.\n  noperand=0;\n  for (i=0; i<NOPERAND; i++) {\n    arg=pcmd->arg[i];\n    if ((arg & B_ARGMASK)==B_NONE)\n      break;                           // Optimization for most frequent case\n    // If pseudooperands to be skipped, I process them nevertheless. Such\n    // operands may contain important information.\n    if ((arg & B_PSEUDO)!=0 && (damode & DA_PSEUDO)==0)\n      op=&pseudoop;                    // Request to skip pseudooperands\n    else\n      op=da->op+noperand++;\n    op->arg=arg;\n    switch (arg & B_ARGMASK) {\n      case B_AL:                       // Register AL\n        Operandintreg(&im,1,REG_AL,op);\n        break;\n      case B_AH:                       // Register AH\n        Operandintreg(&im,1,REG_AH,op);\n        break;\n      case B_AX:                       // Register AX\n        Operandintreg(&im,2,REG_EAX,op);\n        break;\n      case B_CL:                       // Register CL\n        Operandintreg(&im,1,REG_CL,op);\n        break;\n      case B_CX:                       // Register CX\n        Operandintreg(&im,2,REG_ECX,op);\n        break;\n      case B_DX:                       // Register DX\n        Operandintreg(&im,2,REG_EDX,op);\n        break;\n      case B_DXPORT:                   // Register DX as I/O port address\n        Operandintreg(&im,2,REG_EDX,op);\n        op->features|=OP_PORT;\n        break;\n      case B_EAX:                      // Register EAX\n        Operandintreg(&im,4,REG_EAX,op);\n        break;\n      case B_EBX:                      // Register EBX\n        Operandintreg(&im,4,REG_EBX,op);\n        break;\n      case B_ECX:                      // Register ECX\n        Operandintreg(&im,4,REG_ECX,op);\n        break;\n      case B_EDX:                      // Register EDX\n        Operandintreg(&im,4,REG_EDX,op);\n        break;\n      case B_ACC:                      // Accumulator (AL/AX/EAX)\n        Operandintreg(&im,datasize,REG_EAX,op);\n        im.usesdatasize=1;\n        break;\n      case B_STRCNT:                   // Register CX or ECX as REPxx counter\n        Operandintreg(&im,(im.prefixlist & PF_ASIZE?2:4),REG_ECX,op);\n        im.usesaddrsize=1;\n        break;\n      case B_DXEDX:                    // Register DX or EDX in DIV/MUL\n        Operandintreg(&im,datasize,REG_EDX,op);\n        im.usesdatasize=1;\n        break;\n      case B_BPEBP:                    // Register BP or EBP in ENTER/LEAVE\n        Operandintreg(&im,datasize,REG_EBP,op);\n        im.usesdatasize=1;\n        break;\n      case B_REG:                      // 8/16/32-bit register in Reg\n        // Note that all commands that use B_REG have also another operand\n        // that requires ModRM, so we don't need to set modsize here.\n        if (n>=cmdsize)\n          da->errors|=DAE_CROSS;       // Command crosses end of memory block\n        else {\n          Operandintreg(&im,datasize,(cmd[n]>>3) & 0x07,op);\n          im.usesdatasize=1; };\n        break;\n      case B_REG16:                    // 16-bit register in Reg\n        if (n>=cmdsize)\n          da->errors|=DAE_CROSS;       // Command crosses end of memory block\n        else\n          Operandintreg(&im,2,(cmd[n]>>3) & 0x07,op);\n        break;\n      case B_REG32:                    // 32-bit register in Reg\n        if (n>=cmdsize)\n          da->errors|=DAE_CROSS;       // Command crosses end of memory block\n        else\n          Operandintreg(&im,4,(cmd[n]>>3) & 0x07,op);\n        break;\n      case B_REGCMD:                   // 16/32-bit register in last cmd byte\n        Operandintreg(&im,datasize,cmd[n-1] & 0x07,op);\n        im.usesdatasize=1;\n        break;\n      case B_REGCMD8:                  // 8-bit register in last cmd byte\n        Operandintreg(&im,1,cmd[n-1] & 0x07,op);\n        break;\n      case B_ANYREG:                   // Reg field is unused, any allowed\n        break;\n      case B_INT:                      // 8/16/32-bit register/memory in ModRM\n      case B_INT1632:                  // 16/32-bit register/memory in ModRM\n        k=Operandmodrm(&im,datasize,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0) Operandintreg(&im,datasize,cmd[n] & 0x07,op);\n        im.usesdatasize=1;\n        break;\n      case B_INT8:                     // 8-bit register/memory in ModRM\n        k=Operandmodrm(&im,1,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0) Operandintreg(&im,1,cmd[n] & 0x07,op);\n        break;\n      case B_INT16:                    // 16-bit register/memory in ModRM\n        k=Operandmodrm(&im,2,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0) Operandintreg(&im,2,cmd[n] & 0x07,op);\n        break;\n      case B_INT32:                    // 32-bit register/memory in ModRM\n        k=Operandmodrm(&im,4,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0) Operandintreg(&im,4,cmd[n] & 0x07,op);\n        break;\n      case B_INT64:                    // 64-bit integer in ModRM, memory only\n        k=Operandmodrm(&im,8,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0) {\n          // Register is not allowed, decode as 32-bit register and set error.\n          Operandintreg(&im,4,cmd[n] & 0x07,op);\n          op->features|=OP_INVALID;\n          da->errors|=DAE_MEMORY; break; };\n        break;\n      case B_INT128:                   // 128-bit integer in ModRM, memory only\n        k=Operandmodrm(&im,16,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0) {\n          // Register is not allowed, decode as 32-bit register and set error.\n          Operandintreg(&im,4,cmd[n] & 0x07,op);\n          op->features|=OP_INVALID;\n          da->errors|=DAE_MEMORY; break; };\n        break;\n      case B_IMMINT:                   // 8/16/32-bit int at immediate addr\n        Operandimmaddr(&im,datasize,cmd+n,cmdsize-n,op);\n        im.usesdatasize=1;\n        break;\n      case B_INTPAIR:                  // Two signed 16/32 in ModRM, memory only\n        k=Operandmodrm(&im,2*datasize,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        op->granularity=datasize;\n        if (k==0) {\n          // Register is not allowed, decode as register and set error.\n          Operandintreg(&im,datasize,cmd[n] & 0x07,op);\n          op->features|=OP_INVALID;\n          da->errors|=DAE_MEMORY; break; };\n        im.usesdatasize=1;\n        break;\n      case B_SEGOFFS:                  // 16:16/16:32 absolute address in memory\n        k=Operandmodrm(&im,datasize+2,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0) {\n          // Register is not allowed, decode and set error.\n          Operandintreg(&im,datasize,cmd[n] & 0x07,op);\n          op->features|=OP_INVALID;\n          da->errors|=DAE_MEMORY; break; };\n        im.usesdatasize=1;\n        break;\n      case B_STRDEST:                  // 8/16/32-bit string dest, [ES:(E)DI]\n        Operandindirect(&im,REG_EDI,1,SEG_ES,0,datasize,op);\n        im.usesdatasize=1;\n        break;\n      case B_STRDEST8:                 // 8-bit string destination, [ES:(E)DI]\n        Operandindirect(&im,REG_EDI,1,SEG_ES,0,1,op);\n        break;\n      case B_STRSRC:                   // 8/16/32-bit string source, [(E)SI]\n        Operandindirect(&im,REG_ESI,1,SEG_UNDEF,0,datasize,op);\n        im.usesdatasize=1;\n        break;\n      case B_STRSRC8:                  // 8-bit string source, [(E)SI]\n        Operandindirect(&im,REG_ESI,1,SEG_UNDEF,0,1,op);\n        break;\n      case B_XLATMEM:                  // 8-bit memory in XLAT, [(E)BX+AL]\n        Operandxlat(&im,op);\n        break;\n      case B_EAXMEM:                   // Reference to memory addressed by [EAX]\n        Operandindirect(&im,REG_EAX,0,SEG_UNDEF,4,1,op);\n        break;\n      case B_LONGDATA:                 // Long data in ModRM, mem only\n        k=Operandmodrm(&im,256,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        op->granularity=1;             // Just a trick\n        if (k==0) {\n          // Register is not allowed, decode and set error.\n          Operandintreg(&im,4,cmd[n] & 0x07,op);\n          op->features|=OP_INVALID;\n          da->errors|=DAE_MEMORY; break; };\n        im.usesdatasize=1;             // Caveat user\n        break;\n      case B_ANYMEM:                   // Reference to memory, data unimportant\n        k=Operandmodrm(&im,1,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0) {\n          // Register is not allowed, decode and set error.\n          Operandintreg(&im,4,cmd[n] & 0x07,op);\n          op->features|=OP_INVALID;\n          da->errors|=DAE_MEMORY; };\n        break;\n      case B_STKTOP:                   // 16/32-bit int top of stack\n        Operandindirect(&im,REG_ESP,1,SEG_SS,0,datasize,op);\n        im.usesdatasize=1;\n        break;\n      case B_STKTOPFAR:                // Top of stack (16:16/16:32 far addr)\n        Operandindirect(&im,REG_ESP,1,SEG_SS,0,datasize*2,op);\n        op->granularity=datasize;\n        im.usesdatasize=1;\n        break;\n      case B_STKTOPEFL:                // 16/32-bit flags on top of stack\n        Operandindirect(&im,REG_ESP,1,SEG_SS,0,datasize,op);\n        im.usesdatasize=1;\n        break;\n      case B_STKTOPA:                  // 16/32-bit top of stack all registers\n        Operandindirect(&im,REG_ESP,1,SEG_SS,0,datasize*8,op);\n        op->granularity=datasize;\n        op->modifies=da->modifies=0xFF;\n        im.usesdatasize=1;\n        break;\n      case B_PUSH:                     // 16/32-bit int push to stack\n      case B_PUSHRET:                  // 16/32-bit push of return address\n      case B_PUSHRETF:                 // 16:16/16:32-bit push of far retaddr\n      case B_PUSHA:                    // 16/32-bit push all registers\n        Operandpush(&im,datasize,op);\n        im.usesdatasize=1;\n        break;\n      case B_EBPMEM:                   // 16/32-bit int at [EBP]\n        Operandindirect(&im,REG_EBP,1,SEG_SS,0,datasize,op);\n        im.usesdatasize=1;\n        break;\n      case B_SEG:                      // Segment register in Reg\n        if (n>=cmdsize)\n          da->errors|=DAE_CROSS;       // Command crosses end of memory block\n        else\n          Operandsegreg(&im,(cmd[n]>>3) & 0x07,op);\n        break;\n      case B_SEGNOCS:                  // Segment register in Reg, but not CS\n        if (n>=cmdsize)\n          da->errors|=DAE_CROSS;       // Command crosses end of memory block\n        else {\n          k=(cmd[n]>>3) & 0x07;\n          Operandsegreg(&im,k,op);\n          if (k==SEG_SS)\n            da->exttype|=DX_WONKYTRAP;\n          if (k==SEG_CS) {\n            op->features|=OP_INVALID;\n            da->errors|=DAE_BADSEG;\n          };\n        };\n        break;\n      case B_SEGCS:                    // Segment register CS\n        Operandsegreg(&im,SEG_CS,op);\n        break;\n      case B_SEGDS:                    // Segment register DS\n        Operandsegreg(&im,SEG_DS,op);\n        break;\n      case B_SEGES:                    // Segment register ES\n        Operandsegreg(&im,SEG_ES,op);\n        break;\n      case B_SEGFS:                    // Segment register FS\n        Operandsegreg(&im,SEG_FS,op);\n        break;\n      case B_SEGGS:                    // Segment register GS\n        Operandsegreg(&im,SEG_GS,op);\n        break;\n      case B_SEGSS:                    // Segment register SS\n        Operandsegreg(&im,SEG_SS,op);\n        break;\n      case B_ST:                       // 80-bit FPU register in last cmd byte\n        Operandfpureg(&im,cmd[n-1] & 0x07,op);\n        break;\n      case B_ST0:                      // 80-bit FPU register ST0\n        Operandfpureg(&im,0,op);\n        break;\n      case B_ST1:                      // 80-bit FPU register ST1\n        Operandfpureg(&im,1,op);\n        break;\n      case B_FLOAT32:                  // 32-bit float in ModRM, memory only\n        k=Operandmodrm(&im,4,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0) {\n          // Register is not allowed, decode as FPU register and set error.\n          Operandfpureg(&im,cmd[n] & 0x07,op);\n          op->features|=OP_INVALID;\n          da->errors|=DAE_MEMORY; };\n        break;\n      case B_FLOAT64:                  // 64-bit float in ModRM, memory only\n        k=Operandmodrm(&im,8,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0) {\n          // Register is not allowed, decode as FPU register and set error.\n          Operandfpureg(&im,cmd[n] & 0x07,op);\n          op->features|=OP_INVALID;\n          da->errors|=DAE_MEMORY; };\n        break;\n      case B_FLOAT80:                  // 80-bit float in ModRM, memory only\n        k=Operandmodrm(&im,10,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0) {\n          // Register is not allowed, decode as FPU register and set error.\n          Operandfpureg(&im,cmd[n] & 0x07,op);\n          op->features|=OP_INVALID;\n          da->errors|=DAE_MEMORY; };\n        break;\n      case B_BCD:                      // 80-bit BCD in ModRM, memory only\n        k=Operandmodrm(&im,10,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0) {\n          // Register is not allowed, decode as FPU register and set error.\n          Operandfpureg(&im,cmd[n] & 0x07,op);\n          op->features|=OP_INVALID;\n          da->errors|=DAE_MEMORY; };\n        break;\n      case B_MREG8x8:                  // MMX register as 8 8-bit integers\n      case B_MREG16x4:                 // MMX register as 4 16-bit integers\n      case B_MREG32x2:                 // MMX register as 2 32-bit integers\n      case B_MREG64:                   // MMX register as 1 64-bit integer\n        if (n>=cmdsize)\n          da->errors|=DAE_CROSS;       // Command crosses end of memory block\n        else {\n          Operandmmxreg(&im,(cmd[n]>>3) & 0x07,op);\n          op->granularity=Getgranularity(arg); };\n        break;\n      case B_MMX8x8:                   // MMX reg/memory as 8 8-bit integers\n      case B_MMX16x4:                  // MMX reg/memory as 4 16-bit integers\n      case B_MMX32x2:                  // MMX reg/memory as 2 32-bit integers\n      case B_MMX64:                    // MMX reg/memory as 1 64-bit integer\n        k=Operandmodrm(&im,8,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0) Operandmmxreg(&im,cmd[n] & 0x07,op);\n        op->granularity=Getgranularity(arg);\n        break;\n      case B_MMX8x8DI:                 // MMX 8 8-bit integers at [DS:(E)DI]\n        Operandindirect(&im,REG_EDI,0,SEG_UNDEF,0,8,op);\n        op->granularity=Getgranularity(arg);\n        break;\n      case B_3DREG:                    // 3DNow! register as 2 32-bit floats\n        if (n>=cmdsize)\n          da->errors|=DAE_CROSS;       // Command crosses end of memory block\n        else {\n          Operandnowreg(&im,(cmd[n]>>3) & 0x07,op);\n          op->granularity=4; };\n        break;\n      case B_3DNOW:                    // 3DNow! reg/memory as 2 32-bit floats\n        k=Operandmodrm(&im,8,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0) Operandnowreg(&im,cmd[n] & 0x07,op);\n        op->granularity=4;\n        break;\n      case B_SREGF32x4:                // SSE register as 4 32-bit floats\n      case B_SREGF32L:                 // Low 32-bit float in SSE register\n      case B_SREGF32x2L:               // Low 2 32-bit floats in SSE register\n      case B_SREGF64x2:                // SSE register as 2 64-bit floats\n      case B_SREGF64L:                 // Low 64-bit float in SSE register\n        if (n>=cmdsize)\n          da->errors|=DAE_CROSS;       // Command crosses end of memory block\n        else {\n          Operandssereg(&im,(cmd[n]>>3) & 0x07,op);\n          op->granularity=Getgranularity(arg); };\n        break;\n      case B_SVEXF32x4:                // SSE reg in VEX as 4 32-bit floats\n      case B_SVEXF32L:                 // Low 32-bit float in SSE in VEX\n      case B_SVEXF64x2:                // SSE reg in VEX as 2 64-bit floats\n      case B_SVEXF64L:                 // Low 64-bit float in SSE in VEX\n        Operandssereg(&im,vexreg,op);\n        op->granularity=Getgranularity(arg);\n        break;\n      case B_SSEF32x4:                 // SSE reg/memory as 4 32-bit floats\n      case B_SSEF64x2:                 // SSE reg/memory as 2 64-bit floats\n        k=Operandmodrm(&im,\n          (arg & B_NOVEXSIZE?16:im.ssesize),cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0) Operandssereg(&im,cmd[n] & 0x07,op);\n        op->granularity=Getgranularity(arg);\n        break;\n      case B_SSEF32L:                  // Low 32-bit float in SSE reg/memory\n        k=Operandmodrm(&im,4,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0)                      // Operand in SSE register\n          Operandssereg(&im,cmd[n] & 0x07,op);\n        op->granularity=4;\n        break;\n      case B_SSEF32x2L:                // Low 2 32-bit floats in SSE reg/memory\n        k=Operandmodrm(&im,\n          (arg & B_NOVEXSIZE?16:im.ssesize)/2,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0)                      // Operand in SSE register\n          Operandssereg(&im,cmd[n] & 0x07,op);\n        op->granularity=4;\n        break;\n      case B_SSEF64L:                  // Low 64-bit float in SSE reg/memory\n        k=Operandmodrm(&im,8,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0)                      // Operand in SSE register\n          Operandssereg(&im,cmd[n] & 0x07,op);\n        op->granularity=8;\n        break;\n      case B_XMM0I32x4:                // XMM0 as 4 32-bit integers\n      case B_XMM0I64x2:                // XMM0 as 2 64-bit integers\n      case B_XMM0I8x16:                // XMM0 as 16 8-bit integers\n        Operandssereg(&im,0,op);\n        op->granularity=Getgranularity(arg);\n        break;\n      case B_SREGI8x16:                // SSE register as 16 8-bit sigints\n      case B_SREGI16x8:                // SSE register as 8 16-bit sigints\n      case B_SREGI32x4:                // SSE register as 4 32-bit sigints\n      case B_SREGI64x2:                // SSE register as 2 64-bit sigints\n      case B_SREGI32L:                 // Low 32-bit sigint in SSE register\n      case B_SREGI32x2L:               // Low 2 32-bit sigints in SSE register\n      case B_SREGI64L:                 // Low 64-bit sigint in SSE register\n        if (n>=cmdsize)\n          da->errors|=DAE_CROSS;       // Command crosses end of memory block\n        else {\n          Operandssereg(&im,(cmd[n]>>3) & 0x07,op);\n          op->granularity=Getgranularity(arg); };\n        break;\n      case B_SVEXI8x16:                // SSE reg in VEX as 16 8-bit sigints\n      case B_SVEXI16x8:                // SSE reg in VEX as 8 16-bit sigints\n      case B_SVEXI32x4:                // SSE reg in VEX as 4 32-bit sigints\n      case B_SVEXI64x2:                // SSE reg in VEX as 2 64-bit sigints\n        Operandssereg(&im,vexreg,op);\n        op->granularity=Getgranularity(arg);\n        break;\n      case B_SSEI8x16:                 // SSE reg/memory as 16 8-bit sigints\n      case B_SSEI16x8:                 // SSE reg/memory as 8 16-bit sigints\n      case B_SSEI32x4:                 // SSE reg/memory as 4 32-bit sigints\n      case B_SSEI64x2:                 // SSE reg/memory as 2 64-bit sigints\n        k=Operandmodrm(&im,\n          (arg & B_NOVEXSIZE?16:im.ssesize),cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0)\n          Operandssereg(&im,cmd[n] & 0x07,op);\n        op->granularity=Getgranularity(arg);\n        break;\n      case B_SSEI8x8L:                 // Low 8 8-bit ints in SSE reg/memory\n      case B_SSEI16x4L:                // Low 4 16-bit ints in SSE reg/memory\n      case B_SSEI32x2L:                // Low 2 32-bit sigints in SSE reg/memory\n        k=Operandmodrm(&im,\n          (arg & B_NOVEXSIZE?16:im.ssesize)/2,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0)\n          Operandssereg(&im,cmd[n] & 0x07,op);\n        op->granularity=Getgranularity(arg);\n        break;\n      case B_SSEI8x4L:                 // Low 4 8-bit ints in SSE reg/memory\n      case B_SSEI16x2L:                // Low 2 16-bit ints in SSE reg/memory\n        k=Operandmodrm(&im,4,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0)\n          Operandssereg(&im,cmd[n] & 0x07,op);\n        op->granularity=Getgranularity(arg);\n        break;\n      case B_SSEI8x2L:                 // Low 2 8-bit ints in SSE reg/memory\n        k=Operandmodrm(&im,2,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0)\n          Operandssereg(&im,cmd[n] & 0x07,op);\n        op->granularity=Getgranularity(arg);\n        break;\n      case B_SSEI8x16DI:               // SSE 16 8-bit sigints at [DS:(E)DI]\n        Operandindirect(&im,REG_EDI,0,SEG_UNDEF,0,\n          (arg & B_NOVEXSIZE?16:im.ssesize),op);\n        op->granularity=1;\n        break;\n      case B_EFL:                      // Flags register EFL\n        Operandefl(&im,4,op);\n        break;\n      case B_FLAGS8:                   // Flags (low byte)\n        Operandefl(&im,1,op);\n        break;\n      case B_OFFSET:                   // 16/32 const offset from next command\n        Operandoffset(&im,datasize,datasize,cmd+n,cmdsize-n,da->ip+n,op);\n        break;\n      case B_BYTEOFFS:                 // 8-bit sxt const offset from next cmd\n        Operandoffset(&im,1,datasize,cmd+n,cmdsize-n,da->ip+n,op);\n        break;\n      case B_FARCONST:                 // 16:16/16:32 absolute address constant\n        Operandimmfaraddr(&im,datasize,cmd+n,cmdsize-n,op);\n        break;\n      case B_DESCR:                    // 16:32 descriptor in ModRM\n        k=Operandmodrm(&im,6,cmd+n,cmdsize-n,op);\n        if (k<0) break;                // Error in address\n        if (k==0) {\n          // Register is not allowed, decode as 32-bit register and set error.\n          Operandintreg(&im,4,cmd[n] & 0x07,op);\n          op->features|=OP_INVALID;\n          da->errors|=DAE_MEMORY; };\n        break;\n      case B_1:                        // Immediate constant 1\n        Operandone(&im,op);\n        break;\n      case B_CONST8:                   // Immediate 8-bit constant\n        Operandimmconst(&im,1,1,datasize,cmd+n,cmdsize-n,0,op);\n        if (arg & B_PORT) op->features|=OP_PORT;\n        break;\n      case B_SIMMI8x16:                // SSE reg in immediate 8-bit constant\n        if (cmdsize-n<im.modsize+im.dispsize+1) {\n          da->errors|=DAE_CROSS;       // Command crosses end of memory block\n          break; };\n        im.immsize1=1;\n        Operandssereg(&im,(cmd[n+im.modsize+im.dispsize]>>4) & 0x07,op);\n        op->granularity=Getgranularity(arg);\n        break;\n      case B_CONST8_2:                 // Immediate 8-bit const, second in cmd\n        Operandimmconst(&im,1,1,datasize,cmd+n,cmdsize-n,1,op);\n        break;\n      case B_CONST16:                  // Immediate 16-bit constant\n        Operandimmconst(&im,2,2,datasize,cmd+n,cmdsize-n,0,op);\n        break;\n      case B_CONST:                    // Immediate 8/16/32-bit constant\n      case B_CONSTL:                   // Immediate 16/32-bit constant\n        Operandimmconst(&im,datasize,datasize,datasize,cmd+n,cmdsize-n,0,op);\n        im.usesdatasize=1;\n        break;\n      case B_SXTCONST:                 // Immediate 8-bit sign-extended to size\n        Operandimmconst(&im,1,datasize,datasize,cmd+n,cmdsize-n,0,op);\n        im.usesdatasize=1;\n        break;\n      case B_CR:                       // Control register in Reg\n        Operandcreg(&im,(cmd[n]>>3) & 0x07,op);\n        break;\n      case B_CR0:                      // Control register CR0\n        Operandcreg(&im,0,op);\n        break;\n      case B_DR:                       // Debug register in Reg\n        Operanddreg(&im,(cmd[n]>>3) & 0x07,op);\n        break;\n      case B_FST:                      // FPU status register\n        Operandfst(&im,op);\n        break;\n      case B_FCW:                      // FPU control register\n        Operandfcw(&im,op);\n        break;\n      case B_MXCSR:                    // SSE media control and status register\n        Operandmxcsr(&im,op);\n        break;\n      default:                         // Internal error\n        da->errors|=DAE_INTERN;\n      break; };\n    if ((arg & B_32BITONLY)!=0 && op->opsize!=4)\n      da->warnings|=DAW_NONCLASS;\n    if ((arg & B_MODMASK)==B_JMPCALLFAR)\n      da->warnings|=DAW_FARADDR;\n    if (arg & B_PSEUDO) op->features|=OP_PSEUDO;\n    if (arg & (B_CHG|B_UPD)) op->features|=OP_MOD;\n  };\n  if (im.prefixlist!=0) {                 // Optimization for most frequent case\n    // If LOCK prefix is present, report error if prefix is not allowed by\n    // command and warning otherwise. Application code usually doesn't need\n    // atomic bus access.\n    if ((im.prefixlist & PF_LOCK)!=0) {\n      if ((cmdtype & D_LOCKABLE)==0) da->errors|=DAE_LOCK;\n      else da->warnings|=DAW_LOCK; };\n    // Warn if data size prefix is present but not used by command.\n    if ((im.prefixlist & PF_DSIZE)!=0 && im.usesdatasize==0 &&\n      (pcmd->exttype & DX_TYPEMASK)!=DX_NOP)\n      da->warnings|=DAW_DATASIZE;\n    // Warn if address size prefix is present but not used by command.\n    if ((im.prefixlist & PF_ASIZE)!=0 && im.usesaddrsize==0)\n      da->warnings|=DAW_ADDRSIZE;\n    // Warn if segment override prefix is present but command doesn't access\n    // memory. Prefixes CS: and DS: are also used as branch hints in\n    // conditional branches.\n    if ((im.prefixlist & PF_SEGMASK)!=0 && im.usessegment==0) {\n      if ((cmdtype & D_BHINT)==0 || (im.prefixlist & PF_HINT)==0)\n      da->warnings|=DAW_SEGPREFIX; };\n    // Warn if REPxx prefix is present but not used by command. Attention,\n    // Intel frequently uses these prefixes for different means!\n    if (im.prefixlist & PF_REPMASK) {\n      if (((im.prefixlist & PF_REP)!=0 && (cmdtype & D_MUSTMASK)!=D_MUSTREP &&\n      (cmdtype & D_MUSTMASK)!=D_MUSTREPE) ||\n      ((im.prefixlist & PF_REPNE)!=0 && (cmdtype & D_MUSTMASK)!=D_MUSTREPNE))\n      da->warnings|=DAW_REPPREFIX;\n    };\n  };\n  // Warn on unaligned stack, I/O and privileged commands.\n  switch (cmdtype & D_CMDTYPE) {\n    case D_PUSH:\n      if (datasize==2) da->warnings|=DAW_STACK; break;\n    case D_INT:\n      da->warnings|=DAW_INTERRUPT; break;\n    case D_IO:\n      da->warnings|=DAW_IO; break;\n    case D_PRIVILEGED:\n      da->warnings|=DAW_PRIV;\n    break; };\n  // Warn on system, privileged  and undocumented commands.\n  if ((cmdtype & D_USEMASK)!=0) {\n    if ((cmdtype & D_USEMASK)==D_RARE || (cmdtype & D_USEMASK)==D_SUSPICIOUS)\n      da->warnings|=DAW_RARE;\n    if ((cmdtype & D_USEMASK)==D_UNDOC) da->warnings|=DAW_NONCLASS; };\n  // If command implicitly changes ESP, it uses and modifies this register.\n  if (cmdtype & D_CHGESP) {\n    da->uses|=(1<<REG_ESP);\n    da->modifies|=(1<<REG_ESP);\n  };\nerror:\n  // Prepare hex dump, if requested. As maximal size of command is limited to\n  // MAXCMDSIZE=16 bytes, string can't overflow.\n  if (damode & DA_DUMP) {\n    if (da->errors & DAE_CROSS)        // Incomplete command\n      Thexdump(da->dump,cmd,cmdsize,config->lowercase);\n    else {\n      j=0;\n      // Dump prefixes. REPxx is treated as prefix and separated from command\n      // with semicolon; prefixes 66, F2 and F3 that are part of SSE command\n      // are glued with command's body - well, at least if there are no other\n      // prefixes inbetween.\n      for (u=0; u<da->nprefix; u++) {\n        j+=Thexdump(da->dump+j,cmd+u,1,config->lowercase);\n        if (cmd[u]==0x66 && (cmdtype & D_MUSTMASK)==D_MUST66) continue;\n        if (cmd[u]==0xF2 && ((cmdtype & D_MUSTMASK)==D_MUSTF2 ||\n          (cmdtype & D_MUSTMASK)==D_NEEDF2)) continue;\n        if (cmd[u]==0xF3 && ((cmdtype & D_MUSTMASK)==D_MUSTF3 ||\n          (cmdtype & D_MUSTMASK)==D_NEEDF3)) continue;\n        if ((im.prefixlist & (PF_VEX2|PF_VEX3))!=0 && u==da->nprefix-2)\n          continue;\n        if ((im.prefixlist & PF_VEX3)!=0 && u==da->nprefix-3)\n          continue;\n        da->dump[j++]=T(':'); };\n      // Dump body of the command, including ModRegRM and SIB bytes.\n      j+=Thexdump(da->dump+j,cmd+u,im.mainsize+im.modsize-u,\n        config->lowercase);\n      // Dump displacement, if any, separated with space from command's body.\n      if (im.dispsize>0) {\n        da->dump[j++]=T(' ');\n        j+=Thexdump(da->dump+j,cmd+im.mainsize+im.modsize,im.dispsize,\n          config->lowercase);\n        ;\n      };\n      // Dump immediate constants, if any.\n      if (im.immsize1>0) {\n        da->dump[j++]=T(' ');\n        j+=Thexdump(da->dump+j,cmd+im.mainsize+im.modsize+im.dispsize,\n          im.immsize1,config->lowercase)\n        ;\n      };\n      if (im.immsize2>0) {\n        da->dump[j++]=T(' ');\n        Thexdump(da->dump+j,cmd+im.mainsize+im.modsize+im.dispsize+im.immsize1,\n          im.immsize2,config->lowercase);\n        ;\n      };\n    };\n  };\n  // Prepare disassembled command. There are many options that control look\n  // and feel of disassembly, so the procedure is a bit, errr, boring.\n  if (damode & DA_TEXT) {\n    if (da->errors & DAE_CROSS) {      // Incomplete command\n      q=Tstrcopy(da->result,TEXTLEN,T(\"???\"));\n      if (damode & DA_HILITE) {\n        memset(da->mask,DRAW_SUSPECT,q);\n        da->masksize=q;\n      }; }\n    else {\n      j=0;\n      // If LOCK and/or REPxx prefix is present, prepend it to the command.\n      // Such cases are rare, first comparison makes small optimization.\n      if (im.prefixlist & (PF_LOCK|PF_REPMASK)) {\n        if (im.prefixlist & PF_LOCK)\n          j=Tcopycase(da->result,TEXTLEN,T(\"LOCK \"),config->lowercase);\n        if (im.prefixlist & PF_REPNE)\n          j+=Tcopycase(da->result+j,TEXTLEN-j,T(\"REPNE \"),config->lowercase);\n        else if (im.prefixlist & PF_REP) {\n          if ((cmdtype & D_MUSTMASK)==D_MUSTREPE)\n            j+=Tcopycase(da->result+j,TEXTLEN-j,T(\"REPE \"),config->lowercase);\n          else\n            j+=Tcopycase(da->result+j,TEXTLEN-j,T(\"REP \"),config->lowercase);\n          ;\n        };\n      };\n      // If there is a branch hint, prefix jump mnemonics with '+' (taken) or\n      // '-' (not taken), or use pseudoprefixes BHT/BHNT. I don't know how MASM\n      // indicates hints.\n      if (cmdtype & D_BHINT) {\n        if (config->jumphintmode==0) {\n          if (im.prefixlist & PF_TAKEN)\n            da->result[j++]=T('+');\n          else if (im.prefixlist & PF_NOTTAKEN)\n            da->result[j++]=T('-');\n          ; }\n        else {\n          if (im.prefixlist & PF_TAKEN)\n            j+=Tcopycase(da->result+j,TEXTLEN-j,T(\"BHT \"),config->lowercase);\n          else if (im.prefixlist & PF_NOTTAKEN)\n            j+=Tcopycase(da->result+j,TEXTLEN-j,T(\"BHNT \"),config->lowercase);\n          ;\n        };\n      };\n      // Get command mnemonics. If mnemonics contains asterisk, it must be\n      // replaced by W, D or none according to sizesens. Asterisk in SSE and\n      // AVX commands means comparison predicate.\n      if (cmdtype & D_WILDCARD) {\n        for (i=0; ; i++) {\n          if (pcmd->name[i]==T('\\0'))\n            break;\n          else if (pcmd->name[i]!=T('*'))\n            da->result[j++]=pcmd->name[i];\n          else if (cmdtype & D_POSTBYTE)\n            j+=Tstrcopy(da->result+j,TEXTLEN-j,\n            ssepredicate[cmd[im.mainsize+im.modsize+im.dispsize]]);\n          else if (datasize==4 &&\n            (config->sizesens==0 || config->sizesens==1))\n            da->result[j++]=T('D');\n          else if (datasize==2 &&\n            (config->sizesens==1 || config->sizesens==2))\n            da->result[j++]=T('W');\n          ; };\n        da->result[j]=T('\\0');\n        if (config->lowercase) tstrlwr(da->result); }\n      else {\n        j+=Tcopycase(da->result+j,TEXTLEN-j,pcmd->name,config->lowercase);\n        if (config->disasmmode==DAMODE_ATT && im.usesdatasize!=0) {\n          // AT&T mnemonics are suffixed with the operand's size.\n          if ((cmdtype & D_CMDTYPE)!=D_CMD &&\n            (cmdtype & D_CMDTYPE)!=D_MOV &&\n            (cmdtype & D_CMDTYPE)!=D_MOVC &&\n            (cmdtype & D_CMDTYPE)!=D_TEST &&\n            (cmdtype & D_CMDTYPE)!=D_STRING &&\n            (cmdtype & D_CMDTYPE)!=D_PUSH &&\n            (cmdtype & D_CMDTYPE)!=D_POP) ;\n          else if (datasize==1) j+=Tcopycase(da->result+j,TEXTLEN-j,\n            T(\"B\"),config->lowercase);\n          else if (datasize==2) j+=Tcopycase(da->result+j,TEXTLEN-j,\n            T(\"W\"),config->lowercase);\n          else if (datasize==4) j+=Tcopycase(da->result+j,TEXTLEN-j,\n            T(\"L\"),config->lowercase);\n          else if (datasize==8) j+=Tcopycase(da->result+j,TEXTLEN-j,\n            T(\"Q\"),config->lowercase);\n          ;\n        };\n      };\n      if (damode & DA_HILITE) {\n        type=cmdtype & D_CMDTYPE;\n        if (da->errors!=0)\n          cfill=DRAW_SUSPECT;\n        else switch (cmdtype & D_CMDTYPE) {\n          case D_JMP:                  // Unconditional near jump\n          case D_JMPFAR:               // Unconditional far jump\n            cfill=DRAW_JUMP; break;\n          case D_JMC:                  // Conditional jump on flags\n          case D_JMCX:                 // Conditional jump on (E)CX (and flags)\n            cfill=DRAW_CJMP; break;\n          case D_PUSH:                 // PUSH exactly 1 (d)word of data\n          case D_POP:                  // POP exactly 1 (d)word of data\n            cfill=DRAW_PUSHPOP; break;\n          case D_CALL:                 // Plain near call\n          case D_CALLFAR:              // Far call\n          case D_INT:                  // Interrupt\n            cfill=DRAW_CALL; break;\n          case D_RET:                  // Plain near return from call\n          case D_RETFAR:               // Far return or IRET\n            cfill=DRAW_RET; break;\n          case D_FPU:                  // FPU command\n          case D_MMX:                  // MMX instruction, incl. SSE extensions\n          case D_3DNOW:                // 3DNow! instruction\n          case D_SSE:                  // SSE instruction\n          case D_AVX:                  // AVX instruction\n            cfill=DRAW_FPU; break;\n          case D_IO:                   // Accesses I/O ports\n          case D_SYS:                  // Legal but useful in system code only\n          case D_PRIVILEGED:           // Privileged (non-Ring3) command\n            cfill=DRAW_SUSPECT; break;\n          default:\n            cfill=DRAW_PLAIN;\n          break; };\n        memset(da->mask,cfill,j);\n        da->masksize=j;\n      };\n      // Add decoded operands. In HLA mode, order of operands is inverted\n      // except for comparison commands (marked with bit D_HLADIR) and\n      // arguments are enclosed in parenthesis (except for immediate jumps).\n      // In AT&T mode, order of operands is always inverted. Operands of type\n      // B_PSEUDO are implicit and don't appear in text.\n      if (config->disasmmode==DAMODE_HLA &&\n        (pcmd->arg[0] & B_ARGMASK)!=B_OFFSET &&\n        (pcmd->arg[0] & B_ARGMASK)!=B_BYTEOFFS &&\n        (pcmd->arg[0] & B_ARGMASK)!=B_FARCONST)\n        enclose=1;                     // Enclose operand list in parenthesis\n      else\n        enclose=0;\n      if ((damode & DA_HILITE)!=0 && config->hiliteoperands!=0)\n        cfill=DRAW_PLAIN;\n      nout=0;\n      for (i=0; i<noperand; i++) {\n        if ((config->disasmmode==DAMODE_HLA && (cmdtype & D_HLADIR)==0) ||\n          config->disasmmode==DAMODE_ATT)\n          k=noperand-1-i;              // Inverted (HLA/AT&T) order of operands\n        else\n          k=i;                         // Direct (Intel's) order of operands\n        arg=da->op[k].arg;\n        if ((arg & B_ARGMASK)==B_NONE || (arg & B_PSEUDO)!=0)\n          continue;                    // Empty or implicit operand\n        q=j;\n        if (nout==0) {\n          // Spaces between mnemonic and first operand.\n          da->result[j++]=T(' ');\n          if (config->tabarguments) {\n            for ( ; j<8; j++) da->result[j]=T(' '); };\n          if (enclose) {\n            da->result[j++]=T('(');\n            if (config->extraspace) da->result[j++]=(' ');\n          }; }\n        else {\n          // Comma and optional space between operands.\n          da->result[j++]=T(',');\n          if (config->extraspace) da->result[j++]=T(' ');\n        };\n        if (damode & DA_HILITE) {\n          memset(da->mask+q,cfill,j-q);\n          da->masksize=j; };\n        // Operand itself.\n        q=j;\n        op=da->op+k;\n        j+=Tstrcopy(da->result+j,TEXTLEN-j-10,op->text);\n        if (damode & DA_HILITE) {\n          if (config->hiliteoperands==0)\n            ofill=cfill;\n          else if (op->features & OP_REGISTER)\n            ofill=DRAW_IREG;\n          else if (op->features & (OP_FPUREG|OP_MMXREG|OP_3DNOWREG|OP_SSEREG))\n            ofill=DRAW_FREG;\n          else if (op->features & (OP_SEGREG|OP_CREG|OP_DREG))\n            ofill=DRAW_SYSREG;\n          else if (op->features & OP_MEMORY) {\n            if (op->scale[REG_ESP]!=0 || op->scale[REG_EBP]!=0)\n              ofill=DRAW_STKMEM;\n            else\n              ofill=DRAW_MEM;\n            ; }\n          else if (op->features & OP_CONST)\n            ofill=DRAW_CONST;\n          else\n            ofill=cfill;\n          memset(da->mask+q,ofill,j-q);\n          da->masksize=j;\n        };\n        nout++;\n      };\n      // All arguments added, close list.\n      if (enclose && nout!=0) {\n        q=j;\n        if (config->extraspace) da->result[j++]=T(' ');\n        da->result[j++]=T(')');\n        if (damode & DA_HILITE) {\n          memset(da->mask+q,cfill,j-q);\n          da->masksize=j;\n        };\n      };\n      da->result[j]=T('\\0');\n    };\n  };\n  // Calculate total size of command.\n  if (da->errors & DAE_CROSS)          // Incomplete command\n    n=cmdsize;\n  else\n    n+=im.modsize+im.dispsize+im.immsize1+im.immsize2;\n  da->size=n;\n  return n;\n};\n\n// Given error and warning lists, returns pointer to the string describing\n// relatively most severe error or warning, or NULL if there are no errors or\n// warnings.\ntchar *Geterrwarnmessage(ulong errors,ulong warnings) {\n  tchar *ps;\n  if (errors==0 && warnings==0)\n    ps=NULL;\n  else if (errors & DAE_BADCMD)\n    ps=T(\"Unknown command\");\n  else if (errors & DAE_CROSS)\n    ps=T(\"Command crosses end of memory block\");\n  else if (errors & DAE_MEMORY)\n    ps=T(\"Illegal use of register\");\n  else if (errors & DAE_REGISTER)\n    ps=T(\"Memory address is not allowed\");\n  else if (errors & DAE_LOCK)\n    ps=T(\"LOCK prefix is not allowed\");\n  else if (errors & DAE_BADSEG)\n    ps=T(\"Invalid segment register\");\n  else if (errors & DAE_SAMEPREF)\n    ps=T(\"Two prefixes from the same group\");\n  else if (errors & DAE_MANYPREF)\n    ps=T(\"More than 4 prefixes\");\n  else if (errors & DAE_BADCR)\n    ps=T(\"Invalid CR register\");\n  else if (errors & DAE_INTERN)\n    ps=T(\"Internal OllyDbg error\");\n  else if (warnings & DAW_DATASIZE)\n    ps=T(\"Superfluous operand size prefix\");\n  else if (warnings & DAW_ADDRSIZE)\n    ps=T(\"Superfluous address size prefix\");\n  else if (warnings & DAW_SEGPREFIX)\n    ps=T(\"Superfluous segment override prefix\");\n  else if (warnings & DAW_REPPREFIX)\n    ps=T(\"Superfluous REPxx prefix\");\n  else if (warnings & DAW_DEFSEG)\n    ps=T(\"Explicit default segment register\");\n  else if (warnings & DAW_JMP16)\n    ps=T(\"16-bit jump, call or return\");\n  else if (warnings & DAW_FARADDR)\n    ps=T(\"Far jump or call\");\n  else if (warnings & DAW_SEGMOD)\n    ps=T(\"Modification of segment register\");\n  else if (warnings & DAW_PRIV)\n    ps=T(\"Privileged instruction\");\n  else if (warnings & DAW_IO)\n    ps=T(\"I/O command\");\n  else if (warnings & DAW_SHIFT)\n    ps=T(\"Shift out of range\");\n  else if (warnings & DAW_LOCK)\n    ps=T(\"Command uses (valid) LOCK prefix\");\n  else if (warnings & DAW_STACK)\n    ps=T(\"Unaligned stack operation\");\n  else if (warnings & DAW_NOESP)\n    ps=T(\"Suspicious use of stack pointer\");\n  else if (warnings & DAW_NONCLASS)\n    ps=T(\"Undocumented instruction or encoding\");\n  else\n    ps=NULL;\n  return ps;\n};\n\n"
  },
  {
    "path": "Disasm201/cmdlist.c",
    "content": "////////////////////////////////////////////////////////////////////////////////\n//                                                                            //\n// OllyDbg Disassembling Engine v2.01                                         //\n//                                                                            //\n// Copyright (c) 2007-2013 Oleh Yuschuk, ollydbg@t-online.de                  //\n//                                                                            //\n// This code is part of the OllyDbg Disassembler v2.01                        //\n//                                                                            //\n// Disassembling engine is free software; you can redistribute it and/or      //\n// modify it under the terms of the GNU General Public License as published   //\n// by the Free Software Foundation; either version 3 of the License, or (at   //\n// your option) any later version.                                            //\n//                                                                            //\n// This code is distributed in the hope that it will be useful, but WITHOUT   //\n// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or      //\n// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for   //\n// more details.                                                              //\n//                                                                            //\n// You should have received a copy of the GNU General Public License along    //\n// with this program. If not, see <http://www.gnu.org/licenses/>.             //\n//                                                                            //\n////////////////////////////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////////////////////////////\n//                                                                            //\n// This is a fast disassembler that can be used to determine the length of    //\n// the binary 80x86 32-bit command and its attributes, to convert it to the   //\n// human-readable text form, highlight its operands, and create hexadecimal   //\n// dump of the binary command.                                                //\n//                                                                            //\n// It is a stripped down version of the disassembler used by OllyDbg 2.01.    //\n// It can't analyse and comment the contents of the operands, or predict the  //\n// results of the command execution. Analysis-dependent features are not      //\n// included, too. Most other features are kept.                               //\n//                                                                            //\n// Disassembler supports integer, FPU, MMX, 3DNow, SSE1-SSE4.1 and AVX        //\n// instructions. 64-bit mode, AVX2, FMA and XOP are not (yet) supported.      //\n//                                                                            //\n// This code can be compiled either in ASCII or UNICODE mode. It is reentrant //\n// (thread-safe, feature not available in the original OllyDbg code).         //\n//                                                                            //\n// Typical operation speed on 3-GHz Phenom II in MASM mode is:                //\n//                                                                            //\n//   Command length and info:          130 ns/command (7,700,000 commands/s)  //\n//   Disassembly:                      290 ns/command (3,400,000 commands/s)  //\n//   Disassembly, dump, highlighting:  350 ns/command (2,800,000 commands/s)  //\n//                                                                            //\n////////////////////////////////////////////////////////////////////////////////\n\n\n#include <stddef.h>\n#pragma hdrstop\n\n#include \"disasm.h\"\n\nconst t_bincmd bincmd[] = {\n\n  { T(\"PAUSE\"),\n        D_SSE|D_MUSTF3, 0,\n        1, 0x000000FF, 0x00000090, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"NOP\"),\n        D_CMD, DX_NOP,\n        1, 0x000000FF, 0x00000090, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"NOP\"),\n        D_CMD|D_UNDOC, DX_NOP,\n        2, 0x0000FFFF, 0x0000190F, 0x00,\n        B_INT,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"NOP\"),\n        D_CMD|D_UNDOC, DX_NOP,\n        2, 0x0000FFFF, 0x00001A0F, 0x00,\n        B_INT,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"NOP\"),\n        D_CMD|D_UNDOC, DX_NOP,\n        2, 0x0000FFFF, 0x00001B0F, 0x00,\n        B_INT,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"NOP\"),\n        D_CMD|D_UNDOC, DX_NOP,\n        2, 0x0000FFFF, 0x00001C0F, 0x00,\n        B_INT,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"NOP\"),\n        D_CMD|D_UNDOC, DX_NOP,\n        2, 0x0000FFFF, 0x00001D0F, 0x00,\n        B_INT,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"NOP\"),\n        D_CMD|D_UNDOC, DX_NOP,\n        2, 0x0000FFFF, 0x00001E0F, 0x00,\n        B_INT,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"NOP\"),\n        D_CMD, DX_NOP,\n        2, 0x0000FFFF, 0x00001F0F, 0x00,\n        B_INT,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MONITOR\"),\n        D_SYS|D_RARE, 0,\n        3, 0x00FFFFFF, 0x00C8010F, 0x00,\n        B_EAXMEM|B_PSEUDO,\n        B_ECX|B_BINARY|B_PSEUDO,\n        B_EDX|B_BINARY|B_PSEUDO,\n        B_NONE },\n\n  { T(\"MWAIT\"),\n        D_SYS|D_RARE, 0,\n        3, 0x00FFFFFF, 0x00C9010F, 0x00,\n        B_EAX|B_BINARY|B_PSEUDO,\n        B_ECX|B_BINARY|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CLAC\"),\n        D_SYS|D_RARE, 0,\n        3, 0x00FFFFFF, 0x00CA010F, 0x00,\n        B_EAX|B_BINARY|B_PSEUDO,\n        B_ECX|B_BINARY|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"STAC\"),\n        D_SYS|D_RARE, 0,\n        3, 0x00FFFFFF, 0x00CB010F, 0x00,\n        B_EAX|B_BINARY|B_PSEUDO,\n        B_ECX|B_BINARY|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"AAA\"),\n        D_CMD|D_ALLFLAGS|D_RARE, 0,\n        1, 0x000000FF, 0x00000037, 0x00,\n        B_AL|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"AAD\"),\n        D_CMD|D_ALLFLAGS|D_RARE, 0,\n        2, 0x0000FFFF, 0x00000AD5, 0x00,\n        B_AX|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"AAD\"),\n        D_CMD|D_ALLFLAGS|D_RARE, 0,\n        1, 0x000000FF, 0x000000D5, 0x00,\n        B_AX|B_UPD|B_PSEUDO,\n        B_CONST8|B_UNSIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"AAM\"),\n        D_CMD|D_ALLFLAGS|D_RARE, 0,\n        2, 0x0000FFFF, 0x00000AD4, 0x00,\n        B_AX|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"AAM\"),\n        D_CMD|D_ALLFLAGS|D_RARE, 0,\n        1, 0x000000FF, 0x000000D4, 0x00,\n        B_AX|B_UPD|B_PSEUDO,\n        B_CONST8|B_UNSIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"AAS\"),\n        D_CMD|D_ALLFLAGS|D_RARE, 0,\n        1, 0x000000FF, 0x0000003F, 0x00,\n        B_AL|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ADC\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB,\n        1, 0x000000FE, 0x00000014, 0x00,\n        B_ACC|B_UPD,\n        B_CONST|B_NOADDR,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ADC\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB,\n        1, 0x000038FE, 0x00001080, 0x00,\n        B_INT|B_SHOWSIZE|B_UPD,\n        B_CONST|B_NOADDR,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ADC\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB,\n        1, 0x000038FE, 0x00001082, 0x00,\n        B_INT|B_SHOWSIZE|B_UPD,\n        B_SXTCONST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ADC\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB,\n        1, 0x000000FE, 0x00000010, 0x00,\n        B_INT|B_UPD,\n        B_REG,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ADC\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB,\n        1, 0x000000FE, 0x00000012, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ADD\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JB|DX_ADD,\n        1, 0x000000FE, 0x00000004, 0x00,\n        B_ACC|B_UPD,\n        B_CONST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ADD\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB|DX_ADD,\n        1, 0x000038FE, 0x00000080, 0x00,\n        B_INT|B_SHOWSIZE|B_UPD,\n        B_CONST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ADD\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB|DX_ADD,\n        1, 0x000038FE, 0x00000082, 0x00,\n        B_INT|B_SHOWSIZE|B_UPD,\n        B_SXTCONST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ADD\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB|DX_ADD,\n        1, 0x000000FE, 0x00000000, 0x00,\n        B_INT|B_UPD,\n        B_REG,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ADD\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JB|DX_ADD,\n        1, 0x000000FE, 0x00000002, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"AND\"),\n        D_TEST|D_SIZE01|D_ALLFLAGS, DX_JZ,\n        1, 0x000000FE, 0x00000024, 0x00,\n        B_ACC|B_BINARY|B_UPD,\n        B_CONST|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"AND\"),\n        D_TEST|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ,\n        1, 0x000038FE, 0x00002080, 0x00,\n        B_INT|B_BINARY|B_SHOWSIZE|B_UPD,\n        B_CONST|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"AND\"),\n        D_TEST|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ,\n        1, 0x000038FE, 0x00002082, 0x00,\n        B_INT|B_BINARY|B_SHOWSIZE|B_UPD,\n        B_SXTCONST|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"AND\"),\n        D_TEST|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ,\n        1, 0x000000FE, 0x00000020, 0x00,\n        B_INT|B_BINARY|B_UPD,\n        B_REG|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"AND\"),\n        D_TEST|D_SIZE01|D_ALLFLAGS, DX_JZ,\n        1, 0x000000FE, 0x00000022, 0x00,\n        B_REG|B_BINARY|B_UPD,\n        B_INT|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ARPL\"),\n        D_SYS|D_FLAGZ|D_RARE, 0,\n        1, 0x000000FF, 0x00000063, 0x00,\n        B_INT16|B_UPD,\n        B_REG16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"BOUND\"),\n        D_CMD|D_RARE, 0,\n        1, 0x000000FF, 0x00000062, 0x00,\n        B_REG|B_SIGNED,\n        B_INTPAIR|B_MEMONLY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"BSF\"),\n        D_CMD|D_ALLFLAGS, DX_JZ,\n        2, 0x0000FFFF, 0x0000BC0F, 0x00,\n        B_REG|B_CHG,\n        B_INT|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"BSR\"),\n        D_CMD|D_NOREP|D_ALLFLAGS, DX_JZ,\n        2, 0x0000FFFF, 0x0000BD0F, 0x00,\n        B_REG|B_CHG,\n        B_INT|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"BSWAP\"),\n        D_CMD, 0,\n        2, 0x0000F8FF, 0x0000C80F, 0x00,\n        B_REGCMD|B_32BITONLY|B_NOESP|B_UPD,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"BT\"),\n        D_TEST|D_ALLFLAGS, DX_JC,\n        2, 0x0000FFFF, 0x0000A30F, 0x00,\n        B_INT|B_BINARY,\n        B_REG|B_BITCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"BT\"),\n        D_TEST|D_ALLFLAGS, DX_JC,\n        2, 0x0038FFFF, 0x0020BA0F, 0x00,\n        B_INT|B_BINARY|B_SHOWSIZE,\n        B_CONST8|B_BITCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"BTC\"),\n        D_CMD|D_LOCKABLE|D_ALLFLAGS, DX_JC,\n        2, 0x0000FFFF, 0x0000BB0F, 0x00,\n        B_INT|B_BINARY|B_NOESP|B_UPD,\n        B_REG|B_BITCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"BTC\"),\n        D_CMD|D_LOCKABLE|D_ALLFLAGS, DX_JC,\n        2, 0x0038FFFF, 0x0038BA0F, 0x00,\n        B_INT|B_BINARY|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CONST8|B_BITCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"BTR\"),\n        D_CMD|D_LOCKABLE|D_ALLFLAGS, DX_JC,\n        2, 0x0000FFFF, 0x0000B30F, 0x00,\n        B_INT|B_BINARY|B_NOESP|B_UPD,\n        B_REG|B_BITCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"BTR\"),\n        D_CMD|D_LOCKABLE|D_ALLFLAGS, DX_JC,\n        2, 0x0038FFFF, 0x0030BA0F, 0x00,\n        B_INT|B_BINARY|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CONST8|B_BITCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"BTS\"),\n        D_CMD|D_LOCKABLE|D_ALLFLAGS, DX_JC,\n        2, 0x0000FFFF, 0x0000AB0F, 0x00,\n        B_INT|B_BINARY|B_NOESP|B_UPD,\n        B_REG|B_BITCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"BTS\"),\n        D_CMD|D_LOCKABLE|D_ALLFLAGS, DX_JC,\n        2, 0x0038FFFF, 0x0028BA0F, 0x00,\n        B_INT|B_BINARY|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CONST8|B_BITCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CALL\"),\n        D_CALL|D_CHGESP, 0,\n        1, 0x000000FF, 0x000000E8, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_PUSHRET|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CALL\"),\n        D_CALL|D_CHGESP, 0,\n        1, 0x000038FF, 0x000010FF, 0x00,\n        B_INT|B_JMPCALL,\n        B_PUSHRET|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CALL\"),\n        D_CALLFAR|D_CHGESP|D_RARE, 0,\n        1, 0x000000FF, 0x0000009A, 0x00,\n        B_FARCONST|B_JMPCALLFAR,\n        B_PUSHRETF|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CALL\"),\n        D_CALLFAR|D_CHGESP|D_RARE, 0,\n        1, 0x000038FF, 0x000018FF, 0x00,\n        B_SEGOFFS|B_JMPCALLFAR|B_MEMONLY,\n        B_PUSHRETF|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CBW\"),\n        D_CMD|D_DATA16, 0,\n        1, 0x000000FF, 0x00000098, 0x00,\n        B_AX|B_UPD|B_PSEUDO,\n        B_AL|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CBW\"),\n        D_CMD|D_DATA16, 0,\n        1, 0x000000FF, 0x00000098, 0x00,\n        B_AX|B_UPD|B_PSEUDO,\n        B_AL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CDQ\"),\n        D_CMD|D_DATA32, 0,\n        1, 0x000000FF, 0x00000099, 0x00,\n        B_EDX|B_CHG|B_PSEUDO,\n        B_EAX|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CDQ\"),\n        D_CMD|D_DATA32, 0,\n        1, 0x000000FF, 0x00000099, 0x00,\n        B_EDX|B_CHG|B_PSEUDO,\n        B_EAX,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CLC\"),\n        D_CMD|D_FLAGC, 0,\n        1, 0x000000FF, 0x000000F8, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CLD\"),\n        D_CMD|D_FLAGD, 0,\n        1, 0x000000FF, 0x000000FC, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CLFLUSH\"),\n        D_CMD|D_MEMORY|D_RARE, 0,\n        2, 0x0038FFFF, 0x0038AE0F, 0x00,\n        B_ANYMEM|B_MEMONLY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CLI\"),\n        D_CMD|D_RARE, 0,\n        1, 0x000000FF, 0x000000FA, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CLTS\"),\n        D_PRIVILEGED|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000060F, 0x00,\n        B_CR0|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMC\"),\n        D_CMD|D_FLAGC, 0,\n        1, 0x000000FF, 0x000000F5, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVO\"),\n        D_MOVC|D_COND, 0,\n        2, 0x0000FFFF, 0x0000400F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVNO\"),\n        D_MOVC|D_COND, 0,\n        2, 0x0000FFFF, 0x0000410F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVB\"),\n        D_MOVC|D_COND|D_USESCARRY, DX_JB,\n        2, 0x0000FFFF, 0x0000420F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVC\"),\n        D_MOVC|D_COND|D_USESCARRY, DX_JC,\n        2, 0x0000FFFF, 0x0000420F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVNAE\"),\n        D_MOVC|D_COND|D_USESCARRY, DX_JB,\n        2, 0x0000FFFF, 0x0000420F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVAE\"),\n        D_MOVC|D_COND|D_USESCARRY, DX_JB,\n        2, 0x0000FFFF, 0x0000430F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVNB\"),\n        D_MOVC|D_COND|D_USESCARRY, DX_JB,\n        2, 0x0000FFFF, 0x0000430F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVNC\"),\n        D_MOVC|D_COND|D_USESCARRY, DX_JC,\n        2, 0x0000FFFF, 0x0000430F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVE\"),\n        D_MOVC|D_COND, DX_JE,\n        2, 0x0000FFFF, 0x0000440F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVZ\"),\n        D_MOVC|D_COND, DX_JZ,\n        2, 0x0000FFFF, 0x0000440F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVNE\"),\n        D_MOVC|D_COND, DX_JE,\n        2, 0x0000FFFF, 0x0000450F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVNZ\"),\n        D_MOVC|D_COND, DX_JZ,\n        2, 0x0000FFFF, 0x0000450F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVBE\"),\n        D_MOVC|D_COND|D_USESCARRY, 0,\n        2, 0x0000FFFF, 0x0000460F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVNA\"),\n        D_MOVC|D_COND|D_USESCARRY, 0,\n        2, 0x0000FFFF, 0x0000460F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVA\"),\n        D_MOVC|D_COND|D_USESCARRY, 0,\n        2, 0x0000FFFF, 0x0000470F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVNBE\"),\n        D_MOVC|D_COND|D_USESCARRY, 0,\n        2, 0x0000FFFF, 0x0000470F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVS\"),\n        D_MOVC|D_COND, 0,\n        2, 0x0000FFFF, 0x0000480F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVNS\"),\n        D_MOVC|D_COND, 0,\n        2, 0x0000FFFF, 0x0000490F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVPE\"),\n        D_MOVC|D_COND, 0,\n        2, 0x0000FFFF, 0x00004A0F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVP\"),\n        D_MOVC|D_COND, 0,\n        2, 0x0000FFFF, 0x00004A0F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVPO\"),\n        D_MOVC|D_COND, 0,\n        2, 0x0000FFFF, 0x00004B0F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVNP\"),\n        D_MOVC|D_COND, 0,\n        2, 0x0000FFFF, 0x00004B0F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVL\"),\n        D_MOVC|D_COND, 0,\n        2, 0x0000FFFF, 0x00004C0F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVNGE\"),\n        D_MOVC|D_COND, 0,\n        2, 0x0000FFFF, 0x00004C0F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVGE\"),\n        D_MOVC|D_COND, 0,\n        2, 0x0000FFFF, 0x00004D0F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVNL\"),\n        D_MOVC|D_COND, 0,\n        2, 0x0000FFFF, 0x00004D0F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVLE\"),\n        D_MOVC|D_COND, 0,\n        2, 0x0000FFFF, 0x00004E0F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVNG\"),\n        D_MOVC|D_COND, 0,\n        2, 0x0000FFFF, 0x00004E0F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVG\"),\n        D_MOVC|D_COND, 0,\n        2, 0x0000FFFF, 0x00004F0F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVNLE\"),\n        D_MOVC|D_COND, 0,\n        2, 0x0000FFFF, 0x00004F0F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMP\"),\n        D_TEST|D_SIZE01|D_ALLFLAGS|D_HLADIR, DX_JE|DX_JB,\n        1, 0x000000FE, 0x0000003C, 0x00,\n        B_ACC,\n        B_CONST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMP\"),\n        D_TEST|D_SIZE01|D_ALLFLAGS|D_HLADIR, DX_JE|DX_JB,\n        1, 0x000038FE, 0x00003880, 0x00,\n        B_INT|B_SHOWSIZE,\n        B_CONST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMP\"),\n        D_TEST|D_SIZE01|D_ALLFLAGS|D_HLADIR, DX_JE|DX_JB,\n        1, 0x000038FE, 0x00003882, 0x00,\n        B_INT|B_SHOWSIZE,\n        B_SXTCONST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMP\"),\n        D_TEST|D_SIZE01|D_ALLFLAGS|D_HLADIR, DX_JE|DX_JB,\n        1, 0x000000FE, 0x00000038, 0x00,\n        B_INT,\n        B_REG,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMP\"),\n        D_TEST|D_SIZE01|D_ALLFLAGS|D_HLADIR, DX_JE|DX_JB,\n        1, 0x000000FE, 0x0000003A, 0x00,\n        B_REG,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMPXCHG\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS|D_HLADIR, DX_JE|DX_JB,\n        2, 0x0000FEFF, 0x0000B00F, 0x00,\n        B_INT|B_UPD,\n        B_REG,\n        B_ACC|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"CMPXCHG8B\"),\n        D_CMD|D_LOCKABLE|D_MEMORY|D_ALLFLAGS, DX_JE|DX_JB,\n        2, 0x0038FFFF, 0x0008C70F, 0x00,\n        B_INT64|B_MEMONLY|B_UPD,\n        B_EAX|B_UPD|B_PSEUDO,\n        B_EDX|B_UPD|B_PSEUDO,\n        B_EBX|B_PSEUDO },\n\n  { T(\"CPUID\"),\n        D_CMD, 0,\n        2, 0x0000FFFF, 0x0000A20F, 0x00,\n        B_EAX|B_CHG|B_PSEUDO,\n        B_EBX|B_CHG|B_PSEUDO,\n        B_ECX|B_CHG|B_PSEUDO,\n        B_EDX|B_CHG|B_PSEUDO },\n\n  { T(\"CWD\"),\n        D_CMD|D_DATA16, 0,\n        1, 0x000000FF, 0x00000099, 0x00,\n        B_DX|B_CHG|B_PSEUDO,\n        B_AX|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CWD\"),\n        D_CMD|D_DATA16, 0,\n        1, 0x000000FF, 0x00000099, 0x00,\n        B_DX|B_CHG|B_PSEUDO,\n        B_AX,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CWDE\"),\n        D_CMD|D_DATA32, 0,\n        1, 0x000000FF, 0x00000098, 0x00,\n        B_EAX|B_UPD|B_PSEUDO,\n        B_AX|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CWDE\"),\n        D_CMD|D_DATA32, 0,\n        1, 0x000000FF, 0x00000098, 0x00,\n        B_EAX|B_UPD|B_PSEUDO,\n        B_AX,\n        B_NONE,\n        B_NONE },\n\n  { T(\"DAA\"),\n        D_CMD|D_ALLFLAGS|D_USESCARRY|D_RARE, DX_JC,\n        1, 0x000000FF, 0x00000027, 0x00,\n        B_AL|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"DAS\"),\n        D_CMD|D_ALLFLAGS|D_USESCARRY|D_RARE, DX_JC,\n        1, 0x000000FF, 0x0000002F, 0x00,\n        B_AL|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"DEC\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_NOCFLAG, DX_JZ,\n        1, 0x000038FE, 0x000008FE, 0x00,\n        B_INT|B_SHOWSIZE|B_UPD,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"DEC\"),\n        D_CMD|D_NOCFLAG, DX_JZ,\n        1, 0x000000F8, 0x00000048, 0x00,\n        B_REGCMD|B_UPD,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"DIV\"),\n        D_CMD|D_ALLFLAGS, 0,\n        1, 0x000038FF, 0x000030F6, 0x00,\n        B_INT8|B_SHOWSIZE,\n        B_AX|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"DIV\"),\n        D_CMD|D_ALLFLAGS, 0,\n        1, 0x000038FF, 0x000030F7, 0x00,\n        B_INT1632|B_UNSIGNED|B_NOESP|B_SHOWSIZE,\n        B_DXEDX|B_UPD|B_PSEUDO,\n        B_ACC|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"EMMS\"),\n        D_CMD, 0,\n        2, 0x0000FFFF, 0x0000770F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ENTER\"),\n        D_CMD|D_CHGESP, 0,\n        1, 0x000000FF, 0x000000C8, 0x00,\n        B_CONST16|B_STACKINC,\n        B_CONST8_2|B_UNSIGNED,\n        B_PUSH|B_CHG|B_PSEUDO,\n        B_BPEBP|B_CHG|B_PSEUDO },\n\n  { T(\"WAIT\"),\n        D_CMD, 0,\n        1, 0x000000FF, 0x0000009B, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FWAIT\"),\n        D_CMD, 0,\n        1, 0x000000FF, 0x0000009B, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"HLT\"),\n        D_PRIVILEGED|D_RARE, 0,\n        1, 0x000000FF, 0x000000F4, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"IDIV\"),\n        D_CMD|D_ALLFLAGS, 0,\n        1, 0x000038FF, 0x000038F6, 0x00,\n        B_INT8|B_SIGNED|B_SHOWSIZE,\n        B_AX|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"IDIV\"),\n        D_CMD|D_ALLFLAGS, 0,\n        1, 0x000038FF, 0x000038F7, 0x00,\n        B_INT1632|B_SIGNED|B_NOESP|B_SHOWSIZE,\n        B_DXEDX|B_UPD|B_PSEUDO,\n        B_ACC|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"IMUL\"),\n        D_CMD|D_ALLFLAGS, 0,\n        1, 0x000038FF, 0x000028F6, 0x00,\n        B_AX|B_UPD|B_PSEUDO,\n        B_INT8|B_SIGNED|B_SHOWSIZE,\n        B_AL|B_SIGNED|B_PSEUDO,\n        B_NONE },\n\n  { T(\"IMUL\"),\n        D_CMD|D_ALLFLAGS, 0,\n        1, 0x000038FF, 0x000028F7, 0x00,\n        B_DXEDX|B_CHG|B_PSEUDO,\n        B_ACC|B_UPD|B_PSEUDO,\n        B_INT1632|B_SIGNED|B_NOESP|B_SHOWSIZE,\n        B_NONE },\n\n  { T(\"IMUL\"),\n        D_CMD|D_ALLFLAGS, 0,\n        2, 0x0000FFFF, 0x0000AF0F, 0x00,\n        B_REG|B_UPD,\n        B_INT|B_NOESP,\n        B_NONE,\n        B_NONE },\n\n  { T(\"IMUL\"),\n        D_CMD|D_ALLFLAGS, 0,\n        1, 0x000000FF, 0x0000006B, 0x00,\n        B_REG|B_CHG,\n        B_INT|B_NOESP,\n        B_SXTCONST,\n        B_NONE },\n\n  { T(\"IMUL\"),\n        D_CMD|D_ALLFLAGS, 0,\n        1, 0x000000FF, 0x00000069, 0x00,\n        B_REG|B_CHG,\n        B_INT|B_NOESP,\n        B_CONST|B_SIGNED,\n        B_NONE },\n\n  { T(\"IN\"),\n        D_IO|D_SIZE01|D_RARE, 0,\n        1, 0x000000FE, 0x000000E4, 0x00,\n        B_ACC|B_CHG,\n        B_CONST8|B_PORT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"IN\"),\n        D_IO|D_SIZE01|D_RARE, 0,\n        1, 0x000000FE, 0x000000EC, 0x00,\n        B_ACC|B_CHG,\n        B_DXPORT|B_PORT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"INC\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_NOCFLAG, DX_JZ,\n        1, 0x000038FE, 0x000000FE, 0x00,\n        B_INT|B_SHOWSIZE|B_UPD,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"INC\"),\n        D_CMD|D_NOCFLAG, DX_JZ,\n        1, 0x000000F8, 0x00000040, 0x00,\n        B_REGCMD|B_UPD,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"INT\"),\n        D_INT, 0,\n        1, 0x000000FF, 0x000000CD, 0x00,\n        B_CONST8,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"INT3\"),\n        D_INT|D_RARE, 0,\n        1, 0x000000FF, 0x000000CC, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"INTO\"),\n        D_INT|D_RARE, 0,\n        1, 0x000000FF, 0x000000CE, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"INT1\"),\n        D_INT|D_UNDOC, 0,\n        1, 0x000000FF, 0x000000F1, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ICEBP\"),\n        D_INT|D_UNDOC, 0,\n        1, 0x000000FF, 0x000000F1, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"INVD\"),\n        D_PRIVILEGED|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000080F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"INVLPG\"),\n        D_PRIVILEGED|D_MEMORY|D_RARE, 0,\n        2, 0x0038FFFF, 0x0038010F, 0x00,\n        B_ANYMEM|B_MEMONLY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"IRET*\"),\n        D_RETFAR|D_ALLFLAGS|D_CHGESP|D_WILDCARD|D_RARE, 0,\n        1, 0x000000FF, 0x000000CF, 0x00,\n        B_STKTOPFAR|B_JMPCALLFAR|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JO\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        1, 0x000000FF, 0x00000070, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JO\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        2, 0x0000FFFF, 0x0000800F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNO\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        1, 0x000000FF, 0x00000071, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNO\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        2, 0x0000FFFF, 0x0000810F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JB\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JB,\n        1, 0x000000FF, 0x00000072, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JC\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JC,\n        1, 0x000000FF, 0x00000072, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNAE\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JB,\n        1, 0x000000FF, 0x00000072, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JB\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JB,\n        2, 0x0000FFFF, 0x0000820F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JC\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JC,\n        2, 0x0000FFFF, 0x0000820F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNAE\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JB,\n        2, 0x0000FFFF, 0x0000820F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JAE\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JB,\n        1, 0x000000FF, 0x00000073, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNB\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JB,\n        1, 0x000000FF, 0x00000073, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNC\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JC,\n        1, 0x000000FF, 0x00000073, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JAE\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JB,\n        2, 0x0000FFFF, 0x0000830F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNB\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JB,\n        2, 0x0000FFFF, 0x0000830F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNC\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, DX_JC,\n        2, 0x0000FFFF, 0x0000830F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JE\"),\n        D_JMC|D_BHINT|D_COND, DX_JE,\n        1, 0x000000FF, 0x00000074, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JZ\"),\n        D_JMC|D_BHINT|D_COND, DX_JZ,\n        1, 0x000000FF, 0x00000074, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JE\"),\n        D_JMC|D_BHINT|D_COND, DX_JE,\n        2, 0x0000FFFF, 0x0000840F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JZ\"),\n        D_JMC|D_BHINT|D_COND, DX_JZ,\n        2, 0x0000FFFF, 0x0000840F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNE\"),\n        D_JMC|D_BHINT|D_COND, DX_JE,\n        1, 0x000000FF, 0x00000075, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNZ\"),\n        D_JMC|D_BHINT|D_COND, DX_JZ,\n        1, 0x000000FF, 0x00000075, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNE\"),\n        D_JMC|D_BHINT|D_COND, DX_JE,\n        2, 0x0000FFFF, 0x0000850F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNZ\"),\n        D_JMC|D_BHINT|D_COND, DX_JZ,\n        2, 0x0000FFFF, 0x0000850F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JBE\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, 0,\n        1, 0x000000FF, 0x00000076, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNA\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, 0,\n        1, 0x000000FF, 0x00000076, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JBE\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, 0,\n        2, 0x0000FFFF, 0x0000860F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNA\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, 0,\n        2, 0x0000FFFF, 0x0000860F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JA\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, 0,\n        1, 0x000000FF, 0x00000077, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNBE\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, 0,\n        1, 0x000000FF, 0x00000077, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JA\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, 0,\n        2, 0x0000FFFF, 0x0000870F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNBE\"),\n        D_JMC|D_BHINT|D_COND|D_USESCARRY, 0,\n        2, 0x0000FFFF, 0x0000870F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JS\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        1, 0x000000FF, 0x00000078, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JS\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        2, 0x0000FFFF, 0x0000880F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNS\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        1, 0x000000FF, 0x00000079, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNS\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        2, 0x0000FFFF, 0x0000890F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JPE\"),\n        D_JMC|D_BHINT|D_COND|D_RARE, 0,\n        1, 0x000000FF, 0x0000007A, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JP\"),\n        D_JMC|D_BHINT|D_COND|D_RARE, 0,\n        1, 0x000000FF, 0x0000007A, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JPE\"),\n        D_JMC|D_BHINT|D_COND|D_RARE, 0,\n        2, 0x0000FFFF, 0x00008A0F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JP\"),\n        D_JMC|D_BHINT|D_COND|D_RARE, 0,\n        2, 0x0000FFFF, 0x00008A0F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JPO\"),\n        D_JMC|D_BHINT|D_COND|D_RARE, 0,\n        1, 0x000000FF, 0x0000007B, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNP\"),\n        D_JMC|D_BHINT|D_COND|D_RARE, 0,\n        1, 0x000000FF, 0x0000007B, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JPO\"),\n        D_JMC|D_BHINT|D_COND|D_RARE, 0,\n        2, 0x0000FFFF, 0x00008B0F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNP\"),\n        D_JMC|D_BHINT|D_COND|D_RARE, 0,\n        2, 0x0000FFFF, 0x00008B0F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JL\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        1, 0x000000FF, 0x0000007C, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNGE\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        1, 0x000000FF, 0x0000007C, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JL\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        2, 0x0000FFFF, 0x00008C0F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNGE\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        2, 0x0000FFFF, 0x00008C0F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JGE\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        1, 0x000000FF, 0x0000007D, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNL\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        1, 0x000000FF, 0x0000007D, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JGE\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        2, 0x0000FFFF, 0x00008D0F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNL\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        2, 0x0000FFFF, 0x00008D0F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JLE\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        1, 0x000000FF, 0x0000007E, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNG\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        1, 0x000000FF, 0x0000007E, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JLE\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        2, 0x0000FFFF, 0x00008E0F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNG\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        2, 0x0000FFFF, 0x00008E0F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JG\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        1, 0x000000FF, 0x0000007F, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNLE\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        1, 0x000000FF, 0x0000007F, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JG\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        2, 0x0000FFFF, 0x00008F0F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JNLE\"),\n        D_JMC|D_BHINT|D_COND, 0,\n        2, 0x0000FFFF, 0x00008F0F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JCXZ\"),\n        D_JMCX|D_ADDR16|D_BHINT, 0,\n        1, 0x000000FF, 0x000000E3, 0x00,\n        B_CX|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JECXZ\"),\n        D_JMCX|D_ADDR32|D_BHINT, 0,\n        1, 0x000000FF, 0x000000E3, 0x00,\n        B_ECX|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JMP\"),\n        D_JMP, 0,\n        1, 0x000000FF, 0x000000EB, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JMP\"),\n        D_JMP, 0,\n        1, 0x000000FF, 0x000000E9, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JMP\"),\n        D_JMP, 0,\n        1, 0x000038FF, 0x000020FF, 0x00,\n        B_INT|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JMP\"),\n        D_JMPFAR|D_SUSPICIOUS, 0,\n        1, 0x000000FF, 0x000000EA, 0x00,\n        B_FARCONST|B_JMPCALLFAR,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JMP\"),\n        D_JMPFAR|D_RARE, 0,\n        1, 0x000038FF, 0x000028FF, 0x00,\n        B_SEGOFFS|B_JMPCALLFAR|B_MEMONLY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LAHF\"),\n        D_CMD, 0,\n        1, 0x000000FF, 0x0000009F, 0x00,\n        B_AH|B_CHG|B_PSEUDO,\n        B_FLAGS8|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LAR\"),\n        D_CMD|D_FLAGZ|D_RARE, DX_JZ,\n        2, 0x0000FFFF, 0x0000020F, 0x00,\n        B_REG|B_BINARY|B_NOESP|B_CHG,\n        B_INT|B_BINARY|B_NOESP,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LDS\"),\n        D_CMD|D_RARE, 0,\n        1, 0x000000FF, 0x000000C5, 0x00,\n        B_SEGDS|B_CHG|B_PSEUDO,\n        B_REG|B_BINARY|B_CHG,\n        B_SEGOFFS|B_MEMONLY,\n        B_NONE },\n\n  { T(\"LES\"),\n        D_CMD|D_RARE, 0,\n        1, 0x000000FF, 0x000000C4, 0x00,\n        B_SEGES|B_CHG|B_PSEUDO,\n        B_REG|B_BINARY|B_CHG,\n        B_SEGOFFS|B_MEMONLY,\n        B_NONE },\n\n  { T(\"LFS\"),\n        D_CMD|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000B40F, 0x00,\n        B_SEGFS|B_CHG|B_PSEUDO,\n        B_REG|B_BINARY|B_CHG,\n        B_SEGOFFS|B_MEMONLY,\n        B_NONE },\n\n  { T(\"LGS\"),\n        D_CMD|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000B50F, 0x00,\n        B_SEGGS|B_CHG|B_PSEUDO,\n        B_REG|B_BINARY|B_CHG,\n        B_SEGOFFS|B_MEMONLY,\n        B_NONE },\n\n  { T(\"LSS\"),\n        D_CMD|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000B20F, 0x00,\n        B_SEGSS|B_CHG|B_PSEUDO,\n        B_REG|B_BINARY|B_CHG,\n        B_SEGOFFS|B_MEMONLY,\n        B_NONE },\n\n  { T(\"LEA\"),\n        D_CMD|D_HLADIR, DX_LEA,\n        1, 0x000000FF, 0x0000008D, 0x00,\n        B_REG|B_BINARY|B_CHG,\n        B_ANYMEM|B_MEMONLY|B_NOSEG,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LEAVE\"),\n        D_CMD|D_CHGESP, 0,\n        1, 0x000000FF, 0x000000C9, 0x00,\n        B_BPEBP|B_CHG|B_PSEUDO,\n        B_EBPMEM|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LGDT\"),\n        D_PRIVILEGED|D_MEMORY|D_RARE, 0,\n        2, 0x0038FFFF, 0x0010010F, 0x00,\n        B_DESCR|B_MEMONLY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LIDT\"),\n        D_PRIVILEGED|D_MEMORY|D_RARE, 0,\n        2, 0x0038FFFF, 0x0018010F, 0x00,\n        B_DESCR|B_MEMONLY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LLDT\"),\n        D_PRIVILEGED|D_RARE, 0,\n        2, 0x0038FFFF, 0x0010000F, 0x00,\n        B_INT16|B_NOESP,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LMSW\"),\n        D_PRIVILEGED|D_RARE, 0,\n        2, 0x0038FFFF, 0x0030010F, 0x00,\n        B_CR0|B_UPD|B_PSEUDO,\n        B_INT16|B_NOESP,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LOOP\"),\n        D_JMCX|D_ADDR32, 0,\n        1, 0x000000FF, 0x000000E2, 0x00,\n        B_ECX|B_UPD|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LOOPD\"),\n        D_JMCX|D_ADDR32, 0,\n        1, 0x000000FF, 0x000000E2, 0x00,\n        B_ECX|B_UPD|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LOOPW\"),\n        D_JMCX|D_ADDR16, 0,\n        1, 0x000000FF, 0x000000E2, 0x00,\n        B_CX|B_UPD|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LOOPZ\"),\n        D_JMCX|D_ADDR32|D_COND, 0,\n        1, 0x000000FF, 0x000000E1, 0x00,\n        B_ECX|B_UPD|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LOOPDZ\"),\n        D_JMCX|D_ADDR32|D_COND, 0,\n        1, 0x000000FF, 0x000000E1, 0x00,\n        B_ECX|B_UPD|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LOOPWZ\"),\n        D_JMCX|D_ADDR16|D_COND, 0,\n        1, 0x000000FF, 0x000000E1, 0x00,\n        B_CX|B_UPD|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LOOPE\"),\n        D_JMCX|D_ADDR32|D_COND, 0,\n        1, 0x000000FF, 0x000000E1, 0x00,\n        B_ECX|B_UPD|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LOOPDE\"),\n        D_JMCX|D_ADDR32|D_COND, 0,\n        1, 0x000000FF, 0x000000E1, 0x00,\n        B_ECX|B_UPD|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LOOPWE\"),\n        D_JMCX|D_ADDR16|D_COND, 0,\n        1, 0x000000FF, 0x000000E1, 0x00,\n        B_CX|B_UPD|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LOOPNZ\"),\n        D_JMCX|D_ADDR32|D_COND, 0,\n        1, 0x000000FF, 0x000000E0, 0x00,\n        B_ECX|B_UPD|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LOOPDNZ\"),\n        D_JMCX|D_ADDR32|D_COND, 0,\n        1, 0x000000FF, 0x000000E0, 0x00,\n        B_ECX|B_UPD|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LOOPWNZ\"),\n        D_JMCX|D_ADDR16|D_COND, 0,\n        1, 0x000000FF, 0x000000E0, 0x00,\n        B_CX|B_UPD|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LOOPNE\"),\n        D_JMCX|D_ADDR32|D_COND, 0,\n        1, 0x000000FF, 0x000000E0, 0x00,\n        B_ECX|B_UPD|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LOOPDNE\"),\n        D_JMCX|D_ADDR32|D_COND, 0,\n        1, 0x000000FF, 0x000000E0, 0x00,\n        B_ECX|B_UPD|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LOOPWNE\"),\n        D_JMCX|D_ADDR16|D_COND, 0,\n        1, 0x000000FF, 0x000000E0, 0x00,\n        B_CX|B_UPD|B_PSEUDO,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LSL\"),\n        D_SYS|D_FLAGZ|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000030F, 0x00,\n        B_REG|B_NOESP|B_CHG,\n        B_INT|B_BINARY|B_NOESP,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LTR\"),\n        D_PRIVILEGED|D_RARE, 0,\n        2, 0x0038FFFF, 0x0018000F, 0x00,\n        B_INT16|B_NOESP,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOV\"),\n        D_MOV|D_SIZE01, 0,\n        1, 0x000000FE, 0x00000088, 0x00,\n        B_INT|B_CHG,\n        B_REG,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOV\"),\n        D_MOV|D_SIZE01, 0,\n        1, 0x000000FE, 0x0000008A, 0x00,\n        B_REG|B_CHG,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOV\"),\n        D_CMD|D_REGISTER|D_RARE, 0,\n        1, 0x0000C0FF, 0x0000C08C, 0x00,\n        B_INT|B_REGISTER|B_NOESP|B_CHG,\n        B_SEG,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOV\"),\n        D_CMD|D_MEMORY|D_RARE, 0,\n        1, 0x000000FF, 0x0000008C, 0x00,\n        B_INT16|B_MEMORY|B_CHG,\n        B_SEG,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOV\"),\n        D_CMD|D_RARE, 0,\n        1, 0x000000FF, 0x0000008E, 0x00,\n        B_SEGNOCS|B_CHG,\n        B_INT|B_REGISTER|B_NOESP,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOV\"),\n        D_CMD|D_RARE, 0,\n        1, 0x000000FF, 0x0000008E, 0x00,\n        B_SEGNOCS|B_CHG,\n        B_INT16|B_MEMORY|B_NOESP,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOV\"),\n        D_MOV|D_SIZE01, 0,\n        1, 0x000000FE, 0x000000A0, 0x00,\n        B_ACC|B_CHG,\n        B_IMMINT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOV\"),\n        D_MOV|D_SIZE01, 0,\n        1, 0x000000FE, 0x000000A2, 0x00,\n        B_IMMINT|B_CHG,\n        B_ACC,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOV\"),\n        D_MOV, 0,\n        1, 0x000000F8, 0x000000B0, 0x00,\n        B_REGCMD8|B_CHG,\n        B_CONST8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOV\"),\n        D_MOV, 0,\n        1, 0x000000F8, 0x000000B8, 0x00,\n        B_REGCMD|B_NOESP|B_CHG,\n        B_CONST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOV\"),\n        D_MOV|D_SIZE01, 0,\n        1, 0x000038FE, 0x000000C6, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_CHG,\n        B_CONST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOV\"),\n        D_PRIVILEGED|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000220F, 0x00,\n        B_CR|B_CHG,\n        B_INT32|B_BINARY|B_REGONLY|B_NOESP,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOV\"),\n        D_PRIVILEGED|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000200F, 0x00,\n        B_INT32|B_BINARY|B_REGONLY|B_NOESP|B_CHG,\n        B_CR,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOV\"),\n        D_PRIVILEGED|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000230F, 0x00,\n        B_DR|B_CHG,\n        B_INT32|B_BINARY|B_REGONLY|B_NOESP,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOV\"),\n        D_PRIVILEGED|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000210F, 0x00,\n        B_INT32|B_BINARY|B_REGONLY|B_NOESP|B_CHG,\n        B_DR,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVSX\"),\n        D_MOV, 0,\n        2, 0x0000FFFF, 0x0000BE0F, 0x00,\n        B_REG|B_NOESP|B_CHG,\n        B_INT8|B_SIGNED|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVSX\"),\n        D_MOV, 0,\n        2, 0x0000FFFF, 0x0000BF0F, 0x00,\n        B_REG32|B_NOESP|B_CHG,\n        B_INT16|B_SIGNED|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVZX\"),\n        D_MOV, 0,\n        2, 0x0000FFFF, 0x0000B60F, 0x00,\n        B_REG|B_NOESP|B_CHG,\n        B_INT8|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVZX\"),\n        D_MOV, 0,\n        2, 0x0000FFFF, 0x0000B70F, 0x00,\n        B_REG32|B_NOESP|B_CHG,\n        B_INT16|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MUL\"),\n        D_CMD|D_ALLFLAGS, 0,\n        1, 0x000038FF, 0x000020F6, 0x00,\n        B_AX|B_UPD|B_PSEUDO,\n        B_AL|B_PSEUDO,\n        B_INT8|B_UNSIGNED|B_SHOWSIZE,\n        B_NONE },\n\n  { T(\"MUL\"),\n        D_CMD|D_ALLFLAGS, 0,\n        1, 0x000038FF, 0x000020F7, 0x00,\n        B_DXEDX|B_CHG|B_PSEUDO,\n        B_ACC|B_UPD|B_PSEUDO,\n        B_INT1632|B_UNSIGNED|B_NOESP|B_SHOWSIZE,\n        B_NONE },\n\n  { T(\"NEG\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JC,\n        1, 0x000038FE, 0x000018F6, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"NOT\"),\n        D_CMD|D_SIZE01|D_LOCKABLE, 0,\n        1, 0x000038FE, 0x000010F6, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"OR\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JB,\n        1, 0x000000FE, 0x0000000C, 0x00,\n        B_ACC|B_BINARY|B_UPD,\n        B_CONST|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"OR\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB,\n        1, 0x000038FE, 0x00000880, 0x00,\n        B_INT|B_BINARY|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CONST|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"OR\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB,\n        1, 0x000038FE, 0x00000882, 0x00,\n        B_INT|B_BINARY|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_SXTCONST|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"OR\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB,\n        1, 0x000000FE, 0x00000008, 0x00,\n        B_INT|B_BINARY|B_NOESP|B_UPD,\n        B_REG|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"OR\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JB,\n        1, 0x000000FE, 0x0000000A, 0x00,\n        B_REG|B_BINARY|B_NOESP|B_UPD,\n        B_INT|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"OUT\"),\n        D_IO|D_SIZE01|D_RARE, 0,\n        1, 0x000000FE, 0x000000E6, 0x00,\n        B_CONST8|B_PORT,\n        B_ACC,\n        B_NONE,\n        B_NONE },\n\n  { T(\"OUT\"),\n        D_IO|D_SIZE01|D_RARE, 0,\n        1, 0x000000FE, 0x000000EE, 0x00,\n        B_DXPORT|B_PORT,\n        B_ACC,\n        B_NONE,\n        B_NONE },\n\n  { T(\"POP\"),\n        D_POP|D_CHGESP, 0,\n        1, 0x000038FF, 0x0000008F, 0x00,\n        B_INT|B_SHOWSIZE|B_CHG,\n        B_STKTOP|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"POP\"),\n        D_POP|D_CHGESP, 0,\n        1, 0x000000F8, 0x00000058, 0x00,\n        B_REGCMD|B_CHG,\n        B_STKTOP|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"POP\"),\n        D_POP|D_CHGESP|D_RARE, 0,\n        1, 0x000000FF, 0x0000001F, 0x00,\n        B_SEGDS|B_CHG,\n        B_STKTOP|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"POP\"),\n        D_POP|D_CHGESP|D_RARE, 0,\n        1, 0x000000FF, 0x00000007, 0x00,\n        B_SEGES|B_CHG,\n        B_STKTOP|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"POP\"),\n        D_POP|D_CHGESP|D_RARE, DX_JB,\n        1, 0x000000FF, 0x00000017, 0x00,\n        B_SEGSS|B_CHG,\n        B_STKTOP|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"POP\"),\n        D_POP|D_CHGESP|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000A10F, 0x00,\n        B_SEGFS|B_CHG,\n        B_STKTOP|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"POP\"),\n        D_POP|D_CHGESP|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000A90F, 0x00,\n        B_SEGGS|B_CHG,\n        B_STKTOP|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"POPA*\"),\n        D_CMD|D_CHGESP|D_WILDCARD, 0,\n        1, 0x000000FF, 0x00000061, 0x00,\n        B_STKTOPA|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"POPF*\"),\n        D_POP|D_ALLFLAGS|D_CHGESP|D_WILDCARD, 0,\n        1, 0x000000FF, 0x0000009D, 0x00,\n        B_EFL|B_CHG|B_PSEUDO,\n        B_STKTOPEFL|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUSH\"),\n        D_PUSH|D_CHGESP, 0,\n        1, 0x000038FF, 0x000030FF, 0x00,\n        B_INT|B_SHOWSIZE,\n        B_PUSH|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUSH\"),\n        D_PUSH|D_CHGESP, 0,\n        1, 0x000000F8, 0x00000050, 0x00,\n        B_REGCMD,\n        B_PUSH|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUSH\"),\n        D_PUSH|D_CHGESP, 0,\n        1, 0x000000FF, 0x0000006A, 0x00,\n        B_SXTCONST|B_SHOWSIZE,\n        B_PUSH|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUSH\"),\n        D_PUSH|D_CHGESP, 0,\n        1, 0x000000FF, 0x00000068, 0x00,\n        B_CONSTL|B_SHOWSIZE,\n        B_PUSH|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUSH\"),\n        D_PUSH|D_CHGESP|D_RARE, 0,\n        1, 0x000000FF, 0x0000000E, 0x00,\n        B_SEGCS,\n        B_PUSH|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUSH\"),\n        D_PUSH|D_CHGESP|D_RARE, 0,\n        1, 0x000000FF, 0x00000016, 0x00,\n        B_SEGSS,\n        B_PUSH|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUSH\"),\n        D_PUSH|D_CHGESP|D_RARE, 0,\n        1, 0x000000FF, 0x0000001E, 0x00,\n        B_SEGDS,\n        B_PUSH|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUSH\"),\n        D_PUSH|D_CHGESP|D_RARE, 0,\n        1, 0x000000FF, 0x00000006, 0x00,\n        B_SEGES,\n        B_PUSH|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUSH\"),\n        D_PUSH|D_CHGESP|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000A00F, 0x00,\n        B_SEGFS,\n        B_PUSH|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUSH\"),\n        D_PUSH|D_CHGESP|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000A80F, 0x00,\n        B_SEGGS,\n        B_PUSH|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUSHA*\"),\n        D_CMD|D_CHGESP|D_WILDCARD, 0,\n        1, 0x000000FF, 0x00000060, 0x00,\n        B_PUSHA|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUSHF*\"),\n        D_PUSH|D_CHGESP|D_WILDCARD, DX_JB,\n        1, 0x000000FF, 0x0000009C, 0x00,\n        B_EFL|B_PSEUDO,\n        B_PUSH|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RCL\"),\n        D_CMD|D_SIZE01|D_FLAGSCO|D_USESCARRY, DX_JC,\n        1, 0x000038FE, 0x000010D0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_1|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RCL\"),\n        D_CMD|D_SIZE01|D_FLAGSCO|D_USESCARRY, DX_JC,\n        1, 0x000038FE, 0x000010D2, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CL|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RCL\"),\n        D_CMD|D_SIZE01|D_FLAGSCO|D_USESCARRY, DX_JC,\n        1, 0x000038FE, 0x000010C0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CONST8|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RCR\"),\n        D_CMD|D_SIZE01|D_FLAGSCO|D_USESCARRY, DX_JC,\n        1, 0x000038FE, 0x000018D0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_1|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RCR\"),\n        D_CMD|D_SIZE01|D_FLAGSCO|D_USESCARRY, DX_JC,\n        1, 0x000038FE, 0x000018D2, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CL|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RCR\"),\n        D_CMD|D_SIZE01|D_FLAGSCO|D_USESCARRY, DX_JC,\n        1, 0x000038FE, 0x000018C0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CONST8|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ROL\"),\n        D_CMD|D_SIZE01|D_FLAGSCO, DX_JC,\n        1, 0x000038FE, 0x000000D0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_1|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ROL\"),\n        D_CMD|D_SIZE01|D_FLAGSCO, DX_JC,\n        1, 0x000038FE, 0x000000D2, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CL|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ROL\"),\n        D_CMD|D_SIZE01|D_FLAGSCO, DX_JC,\n        1, 0x000038FE, 0x000000C0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CONST8|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ROR\"),\n        D_CMD|D_SIZE01|D_FLAGSCO, DX_JC,\n        1, 0x000038FE, 0x000008D0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_1|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ROR\"),\n        D_CMD|D_SIZE01|D_FLAGSCO, DX_JC,\n        1, 0x000038FE, 0x000008D2, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CL|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ROR\"),\n        D_CMD|D_SIZE01|D_FLAGSCO, DX_JC,\n        1, 0x000038FE, 0x000008C0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CONST8|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RDMSR\"),\n        D_PRIVILEGED|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000320F, 0x00,\n        B_EDX|B_BINARY|B_CHG|B_PSEUDO,\n        B_EAX|B_BINARY|B_CHG|B_PSEUDO,\n        B_ECX|B_PSEUDO,\n        B_NONE },\n\n  { T(\"RDPMC\"),\n        D_SYS|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000330F, 0x00,\n        B_EDX|B_BINARY|B_CHG|B_PSEUDO,\n        B_EAX|B_BINARY|B_CHG|B_PSEUDO,\n        B_ECX|B_PSEUDO,\n        B_NONE },\n\n  { T(\"RDTSC\"),\n        D_SYS|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000310F, 0x00,\n        B_EDX|B_BINARY|B_CHG|B_PSEUDO,\n        B_EAX|B_BINARY|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RDTSCP\"),\n        D_SYS|D_RARE, 0,\n        3, 0x00FFFFFF, 0x00F9010F, 0x00,\n        B_EDX|B_BINARY|B_CHG|B_PSEUDO,\n        B_EAX|B_BINARY|B_CHG|B_PSEUDO,\n        B_ECX|B_BINARY|B_CHG|B_PSEUDO,\n        B_NONE },\n\n  { T(\"RETN\"),\n        D_RET|D_NOREP|D_CHGESP, DX_RETN,\n        1, 0x000000FF, 0x000000C3, 0x00,\n        B_STKTOP|B_JMPCALL|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RET\"),\n        D_RET|D_NOREP|D_CHGESP, 0,\n        1, 0x000000FF, 0x000000C3, 0x00,\n        B_STKTOP|B_JMPCALL|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RETN\"),\n        D_RET|D_MUSTREP|D_CHGESP, DX_RETN,\n        1, 0x000000FF, 0x000000C3, 0x00,\n        B_STKTOP|B_JMPCALL|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RET\"),\n        D_RET|D_MUSTREP|D_CHGESP, 0,\n        1, 0x000000FF, 0x000000C3, 0x00,\n        B_STKTOP|B_JMPCALL|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RETN\"),\n        D_RET|D_CHGESP, DX_RETN,\n        1, 0x000000FF, 0x000000C2, 0x00,\n        B_STKTOP|B_JMPCALL|B_PSEUDO,\n        B_CONST16|B_STACKINC,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RET\"),\n        D_RET|D_CHGESP, 0,\n        1, 0x000000FF, 0x000000C2, 0x00,\n        B_STKTOP|B_JMPCALL|B_PSEUDO,\n        B_CONST16|B_STACKINC,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RETF\"),\n        D_RETFAR|D_CHGESP|D_RARE, 0,\n        1, 0x000000FF, 0x000000CB, 0x00,\n        B_STKTOPFAR|B_JMPCALLFAR|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RETF\"),\n        D_RETFAR|D_CHGESP|D_RARE, 0,\n        1, 0x000000FF, 0x000000CA, 0x00,\n        B_STKTOPFAR|B_JMPCALLFAR|B_PSEUDO,\n        B_CONST16|B_STACKINC,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RSM\"),\n        D_PRIVILEGED|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000AA0F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SAHF\"),\n        D_CMD|D_ALLFLAGS, 0,\n        1, 0x000000FF, 0x0000009E, 0x00,\n        B_AH|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SHL\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC,\n        1, 0x000038FE, 0x000020D0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_1|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SHL\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC,\n        1, 0x000038FE, 0x000020D2, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CL|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SHL\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC,\n        1, 0x000038FE, 0x000020C0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CONST8|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SAL\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC,\n        1, 0x000038FE, 0x000020D0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_1|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SAL\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC,\n        1, 0x000038FE, 0x000020D2, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CL|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SAL\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC,\n        1, 0x000038FE, 0x000020C0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CONST8|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SAL\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS|D_UNDOC, DX_JZ|DX_JC,\n        1, 0x000038FE, 0x000030D0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_1|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SAL\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS|D_UNDOC, DX_JZ|DX_JC,\n        1, 0x000038FE, 0x000030D2, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CL|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SAL\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS|D_UNDOC, DX_JZ|DX_JC,\n        1, 0x000038FE, 0x000030C0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CONST8|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SALC\"),\n        D_CMD|D_ALLFLAGS|D_UNDOC, DX_JZ|DX_JC,\n        1, 0x000000FF, 0x000000D6, 0x00,\n        B_AL|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SHR\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC,\n        1, 0x000038FE, 0x000028D0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_1|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SHR\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC,\n        1, 0x000038FE, 0x000028D2, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CL|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SHR\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC,\n        1, 0x000038FE, 0x000028C0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CONST8|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SAR\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC,\n        1, 0x000038FE, 0x000038D0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_1|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SAR\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC,\n        1, 0x000038FE, 0x000038D2, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CL|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SAR\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JC,\n        1, 0x000038FE, 0x000038C0, 0x00,\n        B_INT|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CONST8|B_SHIFTCNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SBB\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB,\n        1, 0x000000FE, 0x0000001C, 0x00,\n        B_ACC|B_UPD,\n        B_CONST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SBB\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB,\n        1, 0x000038FE, 0x00001880, 0x00,\n        B_INT|B_SHOWSIZE|B_UPD,\n        B_CONST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SBB\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB,\n        1, 0x000038FE, 0x00001882, 0x00,\n        B_INT|B_SHOWSIZE|B_UPD,\n        B_SXTCONST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SBB\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB,\n        1, 0x000000FE, 0x00000018, 0x00,\n        B_INT|B_UPD,\n        B_REG,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SBB\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS|D_USESCARRY, DX_JZ|DX_JB,\n        1, 0x000000FE, 0x0000001A, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETO\"),\n        D_SETC|D_COND, 0,\n        2, 0x0000FFFF, 0x0000900F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETNO\"),\n        D_SETC|D_COND, 0,\n        2, 0x0000FFFF, 0x0000910F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETB\"),\n        D_SETC|D_COND|D_USESCARRY, DX_JB,\n        2, 0x0000FFFF, 0x0000920F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETC\"),\n        D_SETC|D_COND|D_USESCARRY, DX_JC,\n        2, 0x0000FFFF, 0x0000920F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETNAE\"),\n        D_SETC|D_COND|D_USESCARRY, DX_JB,\n        2, 0x0000FFFF, 0x0000920F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETAE\"),\n        D_SETC|D_COND|D_USESCARRY, DX_JB,\n        2, 0x0000FFFF, 0x0000930F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETNB\"),\n        D_SETC|D_COND|D_USESCARRY, DX_JB,\n        2, 0x0000FFFF, 0x0000930F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETNC\"),\n        D_SETC|D_COND|D_USESCARRY, DX_JC,\n        2, 0x0000FFFF, 0x0000930F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETE\"),\n        D_SETC|D_COND, DX_JE,\n        2, 0x0000FFFF, 0x0000940F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETZ\"),\n        D_SETC|D_COND, DX_JZ,\n        2, 0x0000FFFF, 0x0000940F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETNE\"),\n        D_SETC|D_COND, DX_JE,\n        2, 0x0000FFFF, 0x0000950F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETNZ\"),\n        D_SETC|D_COND, DX_JZ,\n        2, 0x0000FFFF, 0x0000950F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETBE\"),\n        D_SETC|D_COND|D_USESCARRY, 0,\n        2, 0x0000FFFF, 0x0000960F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETNA\"),\n        D_SETC|D_COND|D_USESCARRY, 0,\n        2, 0x0000FFFF, 0x0000960F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETA\"),\n        D_SETC|D_COND|D_USESCARRY, 0,\n        2, 0x0000FFFF, 0x0000970F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETNBE\"),\n        D_SETC|D_COND|D_USESCARRY, 0,\n        2, 0x0000FFFF, 0x0000970F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETS\"),\n        D_SETC|D_COND, 0,\n        2, 0x0000FFFF, 0x0000980F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETNS\"),\n        D_SETC|D_COND, 0,\n        2, 0x0000FFFF, 0x0000990F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETPE\"),\n        D_SETC|D_COND|D_RARE, 0,\n        2, 0x0000FFFF, 0x00009A0F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETP\"),\n        D_SETC|D_COND|D_RARE, 0,\n        2, 0x0000FFFF, 0x00009A0F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETPO\"),\n        D_SETC|D_COND|D_RARE, 0,\n        2, 0x0000FFFF, 0x00009B0F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETNP\"),\n        D_SETC|D_COND|D_RARE, 0,\n        2, 0x0000FFFF, 0x00009B0F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETL\"),\n        D_SETC|D_COND, 0,\n        2, 0x0000FFFF, 0x00009C0F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETNGE\"),\n        D_SETC|D_COND, 0,\n        2, 0x0000FFFF, 0x00009C0F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETGE\"),\n        D_SETC|D_COND, 0,\n        2, 0x0000FFFF, 0x00009D0F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETNL\"),\n        D_SETC|D_COND, 0,\n        2, 0x0000FFFF, 0x00009D0F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETLE\"),\n        D_SETC|D_COND, 0,\n        2, 0x0000FFFF, 0x00009E0F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETNG\"),\n        D_SETC|D_COND, 0,\n        2, 0x0000FFFF, 0x00009E0F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETG\"),\n        D_SETC|D_COND, 0,\n        2, 0x0000FFFF, 0x00009F0F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETNLE\"),\n        D_SETC|D_COND, 0,\n        2, 0x0000FFFF, 0x00009F0F, 0x00,\n        B_INT8|B_CHG,\n        B_ANYREG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SGDT\"),\n        D_SYS|D_MEMORY|D_RARE, 0,\n        2, 0x0038FFFF, 0x0000010F, 0x00,\n        B_DESCR|B_MEMONLY|B_CHG,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SIDT\"),\n        D_SYS|D_MEMORY|D_RARE, 0,\n        2, 0x0038FFFF, 0x0008010F, 0x00,\n        B_DESCR|B_MEMONLY|B_CHG,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SHLD\"),\n        D_CMD|D_ALLFLAGS, DX_JZ|DX_JC,\n        2, 0x0000FFFF, 0x0000A40F, 0x00,\n        B_INT|B_NOESP|B_UPD,\n        B_REG,\n        B_CONST8|B_SHIFTCNT,\n        B_NONE },\n\n  { T(\"SHLD\"),\n        D_CMD|D_ALLFLAGS, DX_JZ|DX_JC,\n        2, 0x0000FFFF, 0x0000A50F, 0x00,\n        B_INT|B_NOESP|B_UPD,\n        B_REG,\n        B_CL|B_SHIFTCNT,\n        B_NONE },\n\n  { T(\"SHRD\"),\n        D_CMD|D_ALLFLAGS, DX_JZ|DX_JC,\n        2, 0x0000FFFF, 0x0000AC0F, 0x00,\n        B_INT|B_NOESP|B_UPD,\n        B_REG,\n        B_CONST8|B_SHIFTCNT,\n        B_NONE },\n\n  { T(\"SHRD\"),\n        D_CMD|D_ALLFLAGS, DX_JZ|DX_JC,\n        2, 0x0000FFFF, 0x0000AD0F, 0x00,\n        B_INT|B_NOESP|B_UPD,\n        B_REG,\n        B_CL|B_SHIFTCNT,\n        B_NONE },\n\n  { T(\"SLDT\"),\n        D_SYS|D_RARE, 0,\n        2, 0x0038FFFF, 0x0000000F, 0x00,\n        B_INT|B_NOESP|B_CHG,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SMSW\"),\n        D_SYS|D_MEMORY|D_RARE, 0,\n        2, 0x0038FFFF, 0x0020010F, 0x00,\n        B_INT16|B_MEMONLY|B_CHG,\n        B_CR0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SMSW\"),\n        D_SYS|D_REGISTER|D_RARE, 0,\n        2, 0x0038FFFF, 0x0020010F, 0x00,\n        B_INT|B_REGONLY|B_NOESP|B_CHG,\n        B_CR0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"STC\"),\n        D_CMD|D_FLAGC, 0,\n        1, 0x000000FF, 0x000000F9, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"STD\"),\n        D_CMD|D_FLAGD, 0,\n        1, 0x000000FF, 0x000000FD, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"STI\"),\n        D_CMD|D_RARE, 0,\n        1, 0x000000FF, 0x000000FB, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"STMXCSR\"),\n        D_CMD|D_MEMORY, 0,\n        2, 0x0038FFFF, 0x0018AE0F, 0x00,\n        B_INT32|B_BINARY|B_MEMONLY|B_NOESP|B_SHOWSIZE|B_CHG,\n        B_MXCSR|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"STR\"),\n        D_SYS|D_MEMORY|D_RARE, 0,\n        2, 0x0038FFFF, 0x0008000F, 0x00,\n        B_INT16|B_MEMONLY|B_CHG,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"STR\"),\n        D_SYS|D_REGISTER|D_RARE, 0,\n        2, 0x0038FFFF, 0x0008000F, 0x00,\n        B_INT|B_REGONLY|B_NOESP|B_CHG,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SUB\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JB|DX_SUB,\n        1, 0x000000FE, 0x0000002C, 0x00,\n        B_ACC|B_UPD,\n        B_CONST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SUB\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB|DX_SUB,\n        1, 0x000038FE, 0x00002880, 0x00,\n        B_INT|B_SHOWSIZE|B_UPD,\n        B_CONST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SUB\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB|DX_SUB,\n        1, 0x000038FE, 0x00002882, 0x00,\n        B_INT|B_SHOWSIZE|B_UPD,\n        B_SXTCONST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SUB\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ|DX_JB|DX_SUB,\n        1, 0x000000FE, 0x00000028, 0x00,\n        B_INT|B_UPD,\n        B_REG,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SUB\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ|DX_JB|DX_SUB,\n        1, 0x000000FE, 0x0000002A, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SYSENTER\"),\n        D_SYS|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000340F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SYSEXIT\"),\n        D_SYS|D_ALLFLAGS|D_SUSPICIOUS, 0,\n        2, 0x0000FFFF, 0x0000350F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"TEST\"),\n        D_TEST|D_SIZE01|D_ALLFLAGS, DX_JZ,\n        1, 0x000000FE, 0x000000A8, 0x00,\n        B_ACC|B_BINARY,\n        B_CONST|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"TEST\"),\n        D_TEST|D_SIZE01|D_ALLFLAGS, DX_JZ,\n        1, 0x000038FE, 0x000000F6, 0x00,\n        B_INT|B_BINARY|B_SHOWSIZE,\n        B_CONST|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"TEST\"),\n        D_TEST|D_SIZE01|D_ALLFLAGS|D_UNDOC, DX_JZ,\n        1, 0x000038FE, 0x000008F6, 0x00,\n        B_INT|B_BINARY|B_SHOWSIZE,\n        B_CONST|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"TEST\"),\n        D_TEST|D_SIZE01|D_ALLFLAGS, DX_JZ,\n        1, 0x000000FE, 0x00000084, 0x00,\n        B_INT|B_BINARY,\n        B_REG|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"TEST\"),\n        D_TEST|D_SIZE01|D_ALLFLAGS, DX_JZ,\n        1, 0x000000FE, 0x00000084, 0x00,\n        B_REG|B_BINARY,\n        B_INT|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"UD1\"),\n        D_CMD|D_UNDOC, 0,\n        2, 0x0000FFFF, 0x0000B90F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"UD2\"),\n        D_CMD, 0,\n        2, 0x0000FFFF, 0x00000B0F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VERR\"),\n        D_CMD|D_FLAGZ|D_RARE, 0,\n        2, 0x0038FFFF, 0x0020000F, 0x00,\n        B_INT16|B_NOESP,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VERW\"),\n        D_CMD|D_FLAGZ|D_RARE, 0,\n        2, 0x0038FFFF, 0x0028000F, 0x00,\n        B_INT16|B_NOESP,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"WBINVD\"),\n        D_PRIVILEGED|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000090F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"WRMSR\"),\n        D_PRIVILEGED|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000300F, 0x00,\n        B_EDX|B_BINARY|B_PSEUDO,\n        B_EAX|B_BINARY|B_PSEUDO,\n        B_ECX|B_PSEUDO,\n        B_NONE },\n\n  { T(\"XADD\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JE|DX_JB,\n        2, 0x0000FEFF, 0x0000C00F, 0x00,\n        B_INT|B_UPD,\n        B_REG|B_CHG,\n        B_NONE,\n        B_NONE },\n\n  { T(\"XCHG\"),\n        D_MOV|D_LOCKABLE, 0,\n        1, 0x000000F8, 0x00000090, 0x00,\n        B_ACC|B_CHG,\n        B_REGCMD|B_CHG,\n        B_NONE,\n        B_NONE },\n\n  { T(\"XCHG\"),\n        D_MOV, 0,\n        1, 0x000000F8, 0x00000090, 0x00,\n        B_REGCMD|B_CHG,\n        B_ACC|B_CHG,\n        B_NONE,\n        B_NONE },\n\n  { T(\"XCHG\"),\n        D_MOV|D_SIZE01|D_LOCKABLE, 0,\n        1, 0x000000FE, 0x00000086, 0x00,\n        B_INT|B_CHG,\n        B_REG|B_CHG,\n        B_NONE,\n        B_NONE },\n\n  { T(\"XCHG\"),\n        D_MOV|D_SIZE01|D_LOCKABLE, 0,\n        1, 0x000000FE, 0x00000086, 0x00,\n        B_REG|B_CHG,\n        B_INT|B_CHG,\n        B_NONE,\n        B_NONE },\n\n  { T(\"XLAT\"),\n        D_CMD, 0,\n        1, 0x000000FF, 0x000000D7, 0x00,\n        B_AL|B_CHG|B_PSEUDO,\n        B_XLATMEM,\n        B_NONE,\n        B_NONE },\n\n  { T(\"XLATB\"),\n        D_CMD, 0,\n        1, 0x000000FF, 0x000000D7, 0x00,\n        B_AL|B_UPD|B_PSEUDO,\n        B_XLATMEM|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"XOR\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ,\n        1, 0x000000FE, 0x00000034, 0x00,\n        B_ACC|B_BINARY|B_UPD,\n        B_CONST|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"XOR\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ,\n        1, 0x000038FE, 0x00003080, 0x00,\n        B_INT|B_BINARY|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_CONST|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"XOR\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ,\n        1, 0x000038FE, 0x00003082, 0x00,\n        B_INT|B_BINARY|B_NOESP|B_SHOWSIZE|B_UPD,\n        B_SXTCONST|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"XOR\"),\n        D_CMD|D_SIZE01|D_LOCKABLE|D_ALLFLAGS, DX_JZ,\n        1, 0x000000FE, 0x00000030, 0x00,\n        B_INT|B_BINARY|B_UPD,\n        B_REG|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"XOR\"),\n        D_CMD|D_SIZE01|D_ALLFLAGS, DX_JZ,\n        1, 0x000000FE, 0x00000032, 0x00,\n        B_REG|B_BINARY|B_UPD,\n        B_INT|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMPS\"),\n        D_CMD|D_SIZE01|D_LONGFORM|D_NOREP|D_ALLFLAGS|D_HLADIR, DX_JE|DX_JB,\n        1, 0x000000FE, 0x000000A6, 0x00,\n        B_STRSRC|B_SHOWSIZE,\n        B_STRDEST|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMPSB\"),\n        D_CMD|D_NOREP|D_ALLFLAGS, DX_JE|DX_JB,\n        1, 0x000000FF, 0x000000A6, 0x00,\n        B_STRSRC8|B_PSEUDO,\n        B_STRDEST8|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMPS*\"),\n        D_CMD|D_NOREP|D_ALLFLAGS|D_WILDCARD, DX_JE|DX_JB,\n        1, 0x000000FF, 0x000000A7, 0x00,\n        B_STRSRC|B_PSEUDO,\n        B_STRDEST|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMPS\"),\n        D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREPE|D_ALLFLAGS|D_HLADIR, 0,\n        1, 0x000000FE, 0x000000A6, 0x00,\n        B_STRSRC|B_SHOWSIZE,\n        B_STRDEST|B_SHOWSIZE,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"CMPSB\"),\n        D_STRING|D_MUSTREPE|D_ALLFLAGS, 0,\n        1, 0x000000FF, 0x000000A6, 0x00,\n        B_STRSRC8|B_PSEUDO,\n        B_STRDEST8|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"CMPS*\"),\n        D_STRING|D_MUSTREPE|D_ALLFLAGS|D_WILDCARD, 0,\n        1, 0x000000FF, 0x000000A7, 0x00,\n        B_STRSRC|B_PSEUDO,\n        B_STRDEST|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"CMPS\"),\n        D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREPNE|D_ALLFLAGS|D_HLADIR, 0,\n        1, 0x000000FE, 0x000000A6, 0x00,\n        B_STRSRC|B_SHOWSIZE,\n        B_STRDEST|B_SHOWSIZE,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"CMPSB\"),\n        D_STRING|D_MUSTREPNE|D_ALLFLAGS, 0,\n        1, 0x000000FF, 0x000000A6, 0x00,\n        B_STRSRC8|B_PSEUDO,\n        B_STRDEST8|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"CMPS*\"),\n        D_STRING|D_MUSTREPNE|D_ALLFLAGS|D_WILDCARD, 0,\n        1, 0x000000FF, 0x000000A7, 0x00,\n        B_STRSRC|B_PSEUDO,\n        B_STRDEST|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"LODS\"),\n        D_CMD|D_SIZE01|D_LONGFORM|D_NOREP, 0,\n        1, 0x000000FE, 0x000000AC, 0x00,\n        B_ACC|B_CHG|B_PSEUDO,\n        B_STRSRC|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LODSB\"),\n        D_CMD|D_NOREP, 0,\n        1, 0x000000FF, 0x000000AC, 0x00,\n        B_AL|B_CHG|B_PSEUDO,\n        B_STRSRC8|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LODS*\"),\n        D_CMD|D_NOREP|D_WILDCARD, 0,\n        1, 0x000000FF, 0x000000AD, 0x00,\n        B_ACC|B_CHG|B_PSEUDO,\n        B_STRSRC|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LODS\"),\n        D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREP|D_RARE, 0,\n        1, 0x000000FE, 0x000000AC, 0x00,\n        B_ACC|B_CHG|B_PSEUDO,\n        B_STRSRC|B_SHOWSIZE,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"LODSB\"),\n        D_STRING|D_MUSTREP|D_RARE, 0,\n        1, 0x000000FF, 0x000000AC, 0x00,\n        B_AL|B_CHG|B_PSEUDO,\n        B_STRSRC8|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"LODS*\"),\n        D_STRING|D_MUSTREP|D_WILDCARD|D_RARE, 0,\n        1, 0x000000FF, 0x000000AD, 0x00,\n        B_ACC|B_CHG|B_PSEUDO,\n        B_STRSRC|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"LODS\"),\n        D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREPNE|D_UNDOC, 0,\n        1, 0x000000FE, 0x000000AC, 0x00,\n        B_ACC|B_CHG|B_PSEUDO,\n        B_STRSRC|B_SHOWSIZE,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"LODSB\"),\n        D_STRING|D_MUSTREPNE|D_UNDOC, 0,\n        1, 0x000000FF, 0x000000AC, 0x00,\n        B_AL|B_CHG|B_PSEUDO,\n        B_STRSRC8|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"LODS*\"),\n        D_STRING|D_MUSTREPNE|D_WILDCARD|D_UNDOC, 0,\n        1, 0x000000FF, 0x000000AD, 0x00,\n        B_ACC|B_CHG|B_PSEUDO,\n        B_STRSRC|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"MOVS\"),\n        D_CMD|D_SIZE01|D_LONGFORM|D_NOREP, 0,\n        1, 0x000000FE, 0x000000A4, 0x00,\n        B_STRDEST|B_SHOWSIZE|B_CHG,\n        B_STRSRC|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVSB\"),\n        D_CMD|D_NOREP, 0,\n        1, 0x000000FF, 0x000000A4, 0x00,\n        B_STRDEST8|B_CHG|B_PSEUDO,\n        B_STRSRC8|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVS*\"),\n        D_CMD|D_NOREP|D_WILDCARD, 0,\n        1, 0x000000FF, 0x000000A5, 0x00,\n        B_STRDEST|B_CHG|B_PSEUDO,\n        B_STRSRC|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVS\"),\n        D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREP, 0,\n        1, 0x000000FE, 0x000000A4, 0x00,\n        B_STRDEST|B_SHOWSIZE|B_CHG,\n        B_STRSRC|B_SHOWSIZE,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"MOVSB\"),\n        D_STRING|D_MUSTREP, 0,\n        1, 0x000000FF, 0x000000A4, 0x00,\n        B_STRDEST8|B_CHG|B_PSEUDO,\n        B_STRSRC8|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"MOVS*\"),\n        D_STRING|D_MUSTREP|D_WILDCARD, 0,\n        1, 0x000000FF, 0x000000A5, 0x00,\n        B_STRDEST|B_CHG|B_PSEUDO,\n        B_STRSRC|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"MOVS\"),\n        D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREPNE|D_UNDOC, 0,\n        1, 0x000000FE, 0x000000A4, 0x00,\n        B_STRDEST|B_SHOWSIZE|B_CHG,\n        B_STRSRC|B_SHOWSIZE,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"MOVSB\"),\n        D_STRING|D_MUSTREPNE|D_UNDOC, 0,\n        1, 0x000000FF, 0x000000A4, 0x00,\n        B_STRDEST8|B_CHG|B_PSEUDO,\n        B_STRSRC8|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"MOVS*\"),\n        D_STRING|D_MUSTREPNE|D_WILDCARD|D_UNDOC, 0,\n        1, 0x000000FF, 0x000000A5, 0x00,\n        B_STRDEST|B_CHG|B_PSEUDO,\n        B_STRSRC|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"SCAS\"),\n        D_CMD|D_SIZE01|D_LONGFORM|D_NOREP|D_ALLFLAGS, DX_JE|DX_JB,\n        1, 0x000000FE, 0x000000AE, 0x00,\n        B_STRDEST|B_SHOWSIZE,\n        B_ACC|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SCASB\"),\n        D_CMD|D_NOREP|D_ALLFLAGS, DX_JE|DX_JB,\n        1, 0x000000FF, 0x000000AE, 0x00,\n        B_STRDEST8|B_PSEUDO,\n        B_AL|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SCAS*\"),\n        D_CMD|D_NOREP|D_ALLFLAGS|D_WILDCARD, DX_JE|DX_JB,\n        1, 0x000000FF, 0x000000AF, 0x00,\n        B_STRDEST|B_PSEUDO,\n        B_ACC|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SCAS\"),\n        D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREPE|D_ALLFLAGS, 0,\n        1, 0x000000FE, 0x000000AE, 0x00,\n        B_STRDEST|B_SHOWSIZE,\n        B_ACC|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"SCASB\"),\n        D_STRING|D_MUSTREPE|D_ALLFLAGS, 0,\n        1, 0x000000FF, 0x000000AE, 0x00,\n        B_STRDEST8|B_PSEUDO,\n        B_AL|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"SCAS*\"),\n        D_STRING|D_MUSTREPE|D_ALLFLAGS|D_WILDCARD, 0,\n        1, 0x000000FF, 0x000000AF, 0x00,\n        B_STRDEST|B_PSEUDO,\n        B_ACC|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"SCAS\"),\n        D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREPNE|D_ALLFLAGS, 0,\n        1, 0x000000FE, 0x000000AE, 0x00,\n        B_STRDEST|B_SHOWSIZE,\n        B_ACC|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"SCASB\"),\n        D_STRING|D_MUSTREPNE|D_ALLFLAGS, 0,\n        1, 0x000000FF, 0x000000AE, 0x00,\n        B_STRDEST8|B_PSEUDO,\n        B_AL|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"SCAS*\"),\n        D_STRING|D_MUSTREPNE|D_ALLFLAGS|D_WILDCARD, 0,\n        1, 0x000000FF, 0x000000AF, 0x00,\n        B_STRDEST|B_PSEUDO,\n        B_ACC|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"STOS\"),\n        D_CMD|D_SIZE01|D_LONGFORM|D_NOREP, 0,\n        1, 0x000000FE, 0x000000AA, 0x00,\n        B_STRDEST|B_SHOWSIZE|B_CHG,\n        B_ACC|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"STOSB\"),\n        D_CMD|D_NOREP, 0,\n        1, 0x000000FF, 0x000000AA, 0x00,\n        B_STRDEST8|B_CHG|B_PSEUDO,\n        B_AL|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"STOS*\"),\n        D_CMD|D_NOREP|D_WILDCARD, 0,\n        1, 0x000000FF, 0x000000AB, 0x00,\n        B_STRDEST|B_CHG|B_PSEUDO,\n        B_ACC|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"STOS\"),\n        D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREP, 0,\n        1, 0x000000FE, 0x000000AA, 0x00,\n        B_STRDEST|B_SHOWSIZE|B_CHG,\n        B_ACC|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"STOSB\"),\n        D_STRING|D_MUSTREP, 0,\n        1, 0x000000FF, 0x000000AA, 0x00,\n        B_STRDEST8|B_CHG|B_PSEUDO,\n        B_AL|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"STOS*\"),\n        D_STRING|D_MUSTREP|D_WILDCARD, 0,\n        1, 0x000000FF, 0x000000AB, 0x00,\n        B_STRDEST|B_CHG|B_PSEUDO,\n        B_ACC|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"STOS\"),\n        D_STRING|D_SIZE01|D_LONGFORM|D_MUSTREPNE|D_UNDOC, 0,\n        1, 0x000000FE, 0x000000AA, 0x00,\n        B_STRDEST|B_SHOWSIZE|B_CHG,\n        B_ACC|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"STOSB\"),\n        D_STRING|D_MUSTREPNE|D_UNDOC, 0,\n        1, 0x000000FF, 0x000000AA, 0x00,\n        B_STRDEST8|B_CHG|B_PSEUDO,\n        B_AL|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"STOS*\"),\n        D_STRING|D_MUSTREPNE|D_WILDCARD|D_UNDOC, 0,\n        1, 0x000000FF, 0x000000AB, 0x00,\n        B_STRDEST|B_CHG|B_PSEUDO,\n        B_ACC|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"INS\"),\n        D_IO|D_SIZE01|D_LONGFORM|D_NOREP|D_RARE, 0,\n        1, 0x000000FE, 0x0000006C, 0x00,\n        B_STRDEST|B_SHOWSIZE|B_CHG,\n        B_DXPORT|B_PORT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"INSB\"),\n        D_IO|D_NOREP|D_RARE, 0,\n        1, 0x000000FF, 0x0000006C, 0x00,\n        B_STRDEST8|B_CHG|B_PSEUDO,\n        B_DXPORT|B_PORT|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"INS*\"),\n        D_IO|D_NOREP|D_WILDCARD|D_RARE, 0,\n        1, 0x000000FF, 0x0000006D, 0x00,\n        B_STRDEST|B_CHG|B_PSEUDO,\n        B_DXPORT|B_PORT|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"INS\"),\n        D_IO|D_SIZE01|D_LONGFORM|D_MUSTREP|D_RARE, 0,\n        1, 0x000000FE, 0x0000006C, 0x00,\n        B_STRDEST|B_SHOWSIZE|B_CHG,\n        B_DXPORT|B_PORT,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"INSB\"),\n        D_IO|D_MUSTREP|D_RARE, 0,\n        1, 0x000000FF, 0x0000006C, 0x00,\n        B_STRDEST8|B_CHG|B_PSEUDO,\n        B_DXPORT|B_PORT|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"INS*\"),\n        D_IO|D_MUSTREP|D_WILDCARD|D_RARE, 0,\n        1, 0x000000FF, 0x0000006D, 0x00,\n        B_STRDEST|B_CHG|B_PSEUDO,\n        B_DXPORT|B_PORT|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"INS\"),\n        D_IO|D_SIZE01|D_LONGFORM|D_MUSTREPNE|D_UNDOC, 0,\n        1, 0x000000FE, 0x0000006C, 0x00,\n        B_STRDEST|B_SHOWSIZE|B_CHG,\n        B_DXPORT|B_PORT,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"INSB\"),\n        D_IO|D_MUSTREPNE|D_UNDOC, 0,\n        1, 0x000000FF, 0x0000006C, 0x00,\n        B_STRDEST8|B_CHG|B_PSEUDO,\n        B_DXPORT|B_PORT|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"INS*\"),\n        D_IO|D_MUSTREPNE|D_WILDCARD|D_UNDOC, 0,\n        1, 0x000000FF, 0x0000006D, 0x00,\n        B_STRDEST|B_CHG|B_PSEUDO,\n        B_DXPORT|B_PORT|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"OUTS\"),\n        D_IO|D_SIZE01|D_LONGFORM|D_NOREP|D_RARE, 0,\n        1, 0x000000FE, 0x0000006E, 0x00,\n        B_DXPORT|B_PORT,\n        B_STRSRC|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"OUTSB\"),\n        D_IO|D_NOREP|D_RARE, 0,\n        1, 0x000000FF, 0x0000006E, 0x00,\n        B_DXPORT|B_PORT|B_PSEUDO,\n        B_STRSRC8|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"OUTS*\"),\n        D_IO|D_NOREP|D_WILDCARD|D_RARE, 0,\n        1, 0x000000FF, 0x0000006F, 0x00,\n        B_DXPORT|B_PORT|B_PSEUDO,\n        B_STRSRC|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"OUTS\"),\n        D_IO|D_SIZE01|D_LONGFORM|D_MUSTREP|D_RARE, 0,\n        1, 0x000000FE, 0x0000006E, 0x00,\n        B_DXPORT|B_PORT,\n        B_STRSRC|B_SHOWSIZE,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"OUTSB\"),\n        D_IO|D_MUSTREP|D_RARE, 0,\n        1, 0x000000FF, 0x0000006E, 0x00,\n        B_DXPORT|B_PORT|B_PSEUDO,\n        B_STRSRC8|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"OUTS*\"),\n        D_IO|D_MUSTREP|D_WILDCARD|D_RARE, 0,\n        1, 0x000000FF, 0x0000006F, 0x00,\n        B_DXPORT|B_PORT|B_PSEUDO,\n        B_STRSRC|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"OUTS\"),\n        D_IO|D_SIZE01|D_LONGFORM|D_MUSTREPNE|D_UNDOC, 0,\n        1, 0x000000FE, 0x0000006E, 0x00,\n        B_DXPORT|B_PORT,\n        B_STRSRC|B_SHOWSIZE,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"OUTSB\"),\n        D_IO|D_MUSTREPNE|D_UNDOC, 0,\n        1, 0x000000FF, 0x0000006E, 0x00,\n        B_DXPORT|B_PORT|B_PSEUDO,\n        B_STRSRC8|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"OUTS*\"),\n        D_IO|D_MUSTREPNE|D_WILDCARD|D_UNDOC, 0,\n        1, 0x000000FF, 0x0000006F, 0x00,\n        B_DXPORT|B_PORT|B_PSEUDO,\n        B_STRSRC|B_PSEUDO,\n        B_STRCNT|B_UPD|B_PSEUDO,\n        B_NONE },\n\n  { T(\"MOVBE\"),\n        D_CMD|D_NOREP, 0,\n        3, 0x00FFFFFF, 0x00F0380F, 0x00,\n        B_REG|B_CHG,\n        B_INT|B_MEMONLY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVBE\"),\n        D_CMD|D_NOREP, 0,\n        3, 0x00FFFFFF, 0x00F1380F, 0x00,\n        B_INT|B_MEMONLY|B_CHG,\n        B_REG,\n        B_NONE,\n        B_NONE },\n\n  { T(\"XGETBV\"),\n        D_SYS|D_MUSTNONE|D_RARE, 0,\n        3, 0x00FFFFFF, 0x00D0010F, 0x00,\n        B_EAX|B_CHG|B_PSEUDO,\n        B_EDX|B_CHG|B_PSEUDO,\n        B_ECX|B_PSEUDO,\n        B_NONE },\n\n  { T(\"XSETBV\"),\n        D_PRIVILEGED|D_MUSTNONE|D_RARE, 0,\n        3, 0x00FFFFFF, 0x00D1010F, 0x00,\n        B_EAX|B_PSEUDO,\n        B_EDX|B_PSEUDO,\n        B_ECX|B_PSEUDO,\n        B_NONE },\n\n  { T(\"XRSTOR\"),\n        D_SYS|D_MUSTNONE|D_MEMORY|D_RARE, 0,\n        2, 0x0038FFFF, 0x0028AE0F, 0x00,\n        B_ANYMEM|B_MEMONLY,\n        B_EAX|B_PSEUDO,\n        B_EDX|B_PSEUDO,\n        B_NONE },\n\n  { T(\"XSAVE\"),\n        D_SYS|D_MUSTNONE|D_MEMORY|D_RARE, 0,\n        2, 0x0038FFFF, 0x0020AE0F, 0x00,\n        B_ANYMEM|B_MEMONLY|B_CHG,\n        B_EAX|B_PSEUDO,\n        B_EDX|B_PSEUDO,\n        B_NONE },\n\n  { T(\"F2XM1\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000F0D9, 0x00,\n        B_ST0|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FABS\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000E1D9, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCHS\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000E0D9, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCLEX\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000E2DB, 0x00,\n        B_FST|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCOMPP\"),\n        D_FPU|D_FPUPOP2, 0,\n        2, 0x0000FFFF, 0x0000D9DE, 0x00,\n        B_ST0|B_PSEUDO,\n        B_ST1|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCOS\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000FFD9, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FDECSTP\"),\n        D_FPU|D_FPUPUSH, 0,\n        2, 0x0000FFFF, 0x0000F6D9, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FINCSTP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000FFFF, 0x0000F7D9, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FINIT\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000E3DB, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FLD1\"),\n        D_FPU|D_FPUPUSH, 0,\n        2, 0x0000FFFF, 0x0000E8D9, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FLDL2T\"),\n        D_FPU|D_FPUPUSH, 0,\n        2, 0x0000FFFF, 0x0000E9D9, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FLDL2E\"),\n        D_FPU|D_FPUPUSH, 0,\n        2, 0x0000FFFF, 0x0000EAD9, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FLDPI\"),\n        D_FPU|D_FPUPUSH, 0,\n        2, 0x0000FFFF, 0x0000EBD9, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FLDLG2\"),\n        D_FPU|D_FPUPUSH, 0,\n        2, 0x0000FFFF, 0x0000ECD9, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FLDLN2\"),\n        D_FPU|D_FPUPUSH, 0,\n        2, 0x0000FFFF, 0x0000EDD9, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FLDZ\"),\n        D_FPU|D_FPUPUSH, 0,\n        2, 0x0000FFFF, 0x0000EED9, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FNOP\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000D0D9, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FPATAN\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000FFFF, 0x0000F3D9, 0x00,\n        B_ST1|B_UPD|B_PSEUDO,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FPREM\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000F8D9, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_ST1|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FPREM1\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000F5D9, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_ST1|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FPTAN\"),\n        D_FPU|D_FPUPUSH, 0,\n        2, 0x0000FFFF, 0x0000F2D9, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FRNDINT\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000FCD9, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSCALE\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000FDD9, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_ST1|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSIN\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000FED9, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSINCOS\"),\n        D_FPU|D_FPUPUSH, 0,\n        2, 0x0000FFFF, 0x0000FBD9, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSQRT\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000FAD9, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSTSW\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000E0DF, 0x00,\n        B_AX|B_CHG,\n        B_FST|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FTST\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000E4D9, 0x00,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FUCOMPP\"),\n        D_FPU|D_FPUPOP2, 0,\n        2, 0x0000FFFF, 0x0000E9DA, 0x00,\n        B_ST0|B_PSEUDO,\n        B_ST1|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FXAM\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000E5D9, 0x00,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FXTRACT\"),\n        D_FPU|D_FPUPUSH, 0,\n        2, 0x0000FFFF, 0x0000F4D9, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FYL2X\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000FFFF, 0x0000F1D9, 0x00,\n        B_ST1|B_UPD|B_PSEUDO,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FYL2XP1\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000FFFF, 0x0000F9D9, 0x00,\n        B_ST1|B_UPD|B_PSEUDO,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FENI\"),\n        D_FPU|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000E0DB, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FDISI\"),\n        D_FPU|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000E1DB, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FADD\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000C0D8, 0x00,\n        B_ST0|B_UPD,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FADD\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000C0DC, 0x00,\n        B_ST|B_UPD,\n        B_ST0,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FADDP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000F8FF, 0x0000C0DE, 0x00,\n        B_ST|B_UPD,\n        B_ST0,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FADDP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000FFFF, 0x0000C1DE, 0x00,\n        B_ST1|B_UPD|B_PSEUDO,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCMOVB\"),\n        D_FPU|D_COND, 0,\n        2, 0x0000F8FF, 0x0000C0DA, 0x00,\n        B_ST0|B_CHG,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCMOVE\"),\n        D_FPU|D_COND, 0,\n        2, 0x0000F8FF, 0x0000C8DA, 0x00,\n        B_ST0|B_CHG,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCMOVBE\"),\n        D_FPU|D_COND, 0,\n        2, 0x0000F8FF, 0x0000D0DA, 0x00,\n        B_ST0|B_CHG,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCMOVU\"),\n        D_FPU|D_COND, 0,\n        2, 0x0000F8FF, 0x0000D8DA, 0x00,\n        B_ST0|B_CHG,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCMOVNB\"),\n        D_FPU|D_COND, 0,\n        2, 0x0000F8FF, 0x0000C0DB, 0x00,\n        B_ST0|B_CHG,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCMOVNE\"),\n        D_FPU|D_COND, 0,\n        2, 0x0000F8FF, 0x0000C8DB, 0x00,\n        B_ST0|B_CHG,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCMOVNBE\"),\n        D_FPU|D_COND, 0,\n        2, 0x0000F8FF, 0x0000D0DB, 0x00,\n        B_ST0|B_CHG,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCMOVNU\"),\n        D_FPU|D_COND, 0,\n        2, 0x0000F8FF, 0x0000D8DB, 0x00,\n        B_ST0|B_CHG,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCOM\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000D0D8, 0x00,\n        B_ST0|B_PSEUDO,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCOM\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000D1D8, 0x00,\n        B_ST0|B_PSEUDO,\n        B_ST1|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCOMP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000F8FF, 0x0000D8D8, 0x00,\n        B_ST0|B_PSEUDO,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCOMP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000FFFF, 0x0000D9D8, 0x00,\n        B_ST0|B_PSEUDO,\n        B_ST1|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCOMI\"),\n        D_FPU|D_FLAGSZPC, 0,\n        2, 0x0000F8FF, 0x0000F0DB, 0x00,\n        B_ST0,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCOMIP\"),\n        D_FPU|D_FLAGSZPC|D_FPUPOP, 0,\n        2, 0x0000F8FF, 0x0000F0DF, 0x00,\n        B_ST0,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FUCOMI\"),\n        D_FPU|D_FLAGSZPC, 0,\n        2, 0x0000F8FF, 0x0000E8DB, 0x00,\n        B_ST0,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FUCOMIP\"),\n        D_FPU|D_FLAGSZPC|D_FPUPOP, 0,\n        2, 0x0000F8FF, 0x0000E8DF, 0x00,\n        B_ST0,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FDIV\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000F0D8, 0x00,\n        B_ST0|B_UPD,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FDIV\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000F8DC, 0x00,\n        B_ST|B_UPD,\n        B_ST0,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FDIVP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000F8FF, 0x0000F8DE, 0x00,\n        B_ST|B_UPD,\n        B_ST0,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FDIVP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000FFFF, 0x0000F9DE, 0x00,\n        B_ST1|B_UPD|B_PSEUDO,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FDIVR\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000F8D8, 0x00,\n        B_ST0|B_UPD,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FDIVR\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000F0DC, 0x00,\n        B_ST|B_UPD,\n        B_ST0,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FDIVRP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000F8FF, 0x0000F0DE, 0x00,\n        B_ST|B_UPD,\n        B_ST0,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FDIVRP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000FFFF, 0x0000F1DE, 0x00,\n        B_ST1|B_UPD|B_PSEUDO,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FFREE\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000C0DD, 0x00,\n        B_ST,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FFREEP\"),\n        D_FPU|D_FPUPOP|D_UNDOC, 0,\n        2, 0x0000F8FF, 0x0000C0DF, 0x00,\n        B_ST,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FLD\"),\n        D_FPU|D_FPUPUSH, 0,\n        2, 0x0000F8FF, 0x0000C0D9, 0x00,\n        B_ST,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FMUL\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000C8D8, 0x00,\n        B_ST0|B_UPD,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FMUL\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000C8DC, 0x00,\n        B_ST|B_UPD,\n        B_ST0,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FMULP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000F8FF, 0x0000C8DE, 0x00,\n        B_ST|B_UPD,\n        B_ST0,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FMULP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000FFFF, 0x0000C9DE, 0x00,\n        B_ST1|B_UPD|B_PSEUDO,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FST\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000D0DD, 0x00,\n        B_ST|B_CHG,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSTP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000F8FF, 0x0000D8DD, 0x00,\n        B_ST|B_CHG,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSUB\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000E0D8, 0x00,\n        B_ST0|B_UPD,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSUB\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000E8DC, 0x00,\n        B_ST|B_UPD,\n        B_ST0,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSUBP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000F8FF, 0x0000E8DE, 0x00,\n        B_ST|B_UPD,\n        B_ST0,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSUBP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000FFFF, 0x0000E9DE, 0x00,\n        B_ST1|B_UPD|B_PSEUDO,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSUBR\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000E8D8, 0x00,\n        B_ST0|B_UPD,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSUBR\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000E0DC, 0x00,\n        B_ST|B_UPD,\n        B_ST0,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSUBRP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000F8FF, 0x0000E0DE, 0x00,\n        B_ST|B_UPD,\n        B_ST0,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSUBRP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000FFFF, 0x0000E1DE, 0x00,\n        B_ST1|B_UPD|B_PSEUDO,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FUCOM\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000E0DD, 0x00,\n        B_ST0|B_PSEUDO,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FUCOM\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000E1DD, 0x00,\n        B_ST0|B_PSEUDO,\n        B_ST1|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FUCOMP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000F8FF, 0x0000E8DD, 0x00,\n        B_ST0|B_PSEUDO,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FUCOMP\"),\n        D_FPU|D_FPUPOP, 0,\n        2, 0x0000FFFF, 0x0000E9DD, 0x00,\n        B_ST0|B_PSEUDO,\n        B_ST1|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FXCH\"),\n        D_FPU, 0,\n        2, 0x0000F8FF, 0x0000C8D9, 0x00,\n        B_ST0|B_CHG|B_PSEUDO,\n        B_ST|B_CHG,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FXCH\"),\n        D_FPU, 0,\n        2, 0x0000FFFF, 0x0000C9D9, 0x00,\n        B_ST0|B_CHG|B_PSEUDO,\n        B_ST1|B_CHG|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FADD\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000000D8, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_FLOAT32|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FADD\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000000DC, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_FLOAT64|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FIADD\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000000DA, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FIADD\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000000DE, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FBLD\"),\n        D_FPU|D_MEMORY|D_FPUPUSH|D_RARE, 0,\n        1, 0x000038FF, 0x000020DF, 0x00,\n        B_BCD|B_MEMORY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FBSTP\"),\n        D_FPU|D_MEMORY|D_FPUPOP|D_RARE, 0,\n        1, 0x000038FF, 0x000030DF, 0x00,\n        B_BCD|B_MEMORY|B_CHG,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCOM\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000010D8, 0x00,\n        B_ST0|B_PSEUDO,\n        B_FLOAT32|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCOM\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000010DC, 0x00,\n        B_ST0|B_PSEUDO,\n        B_FLOAT64|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCOMP\"),\n        D_FPU|D_MEMORY|D_FPUPOP, 0,\n        1, 0x000038FF, 0x000018D8, 0x00,\n        B_ST0|B_PSEUDO,\n        B_FLOAT32|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCOMP\"),\n        D_FPU|D_MEMORY|D_FPUPOP, 0,\n        1, 0x000038FF, 0x000018DC, 0x00,\n        B_ST0|B_PSEUDO,\n        B_FLOAT64|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FDIV\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000030D8, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_FLOAT32|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FDIV\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000030DC, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_FLOAT64|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FIDIV\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000030DA, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FIDIV\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000030DE, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FDIVR\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000038D8, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_FLOAT32|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FDIVR\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000038DC, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_FLOAT64|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FIDIVR\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000038DA, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FIDIVR\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000038DE, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FICOM\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000010DE, 0x00,\n        B_ST0|B_PSEUDO,\n        B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FICOM\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000010DA, 0x00,\n        B_ST0|B_PSEUDO,\n        B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FICOMP\"),\n        D_FPU|D_MEMORY|D_FPUPOP, 0,\n        1, 0x000038FF, 0x000018DE, 0x00,\n        B_ST0|B_PSEUDO,\n        B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FICOMP\"),\n        D_FPU|D_MEMORY|D_FPUPOP, 0,\n        1, 0x000038FF, 0x000018DA, 0x00,\n        B_ST0|B_PSEUDO,\n        B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FILD\"),\n        D_FPU|D_MEMORY|D_FPUPUSH, 0,\n        1, 0x000038FF, 0x000000DF, 0x00,\n        B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FILD\"),\n        D_FPU|D_MEMORY|D_FPUPUSH, 0,\n        1, 0x000038FF, 0x000000DB, 0x00,\n        B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FILD\"),\n        D_FPU|D_MEMORY|D_FPUPUSH, 0,\n        1, 0x000038FF, 0x000028DF, 0x00,\n        B_INT64|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FIST\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000010DF, 0x00,\n        B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE|B_CHG,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FIST\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000010DB, 0x00,\n        B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE|B_CHG,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FISTP\"),\n        D_FPU|D_MEMORY|D_FPUPOP, 0,\n        1, 0x000038FF, 0x000018DF, 0x00,\n        B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE|B_CHG,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FISTP\"),\n        D_FPU|D_MEMORY|D_FPUPOP, 0,\n        1, 0x000038FF, 0x000018DB, 0x00,\n        B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE|B_CHG,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FISTP\"),\n        D_FPU|D_MEMORY|D_FPUPOP, 0,\n        1, 0x000038FF, 0x000038DF, 0x00,\n        B_INT64|B_SIGNED|B_MEMORY|B_SHOWSIZE|B_CHG,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FISTTP\"),\n        D_FPU|D_MEMORY|D_FPUPOP, 0,\n        1, 0x000038FF, 0x000008DF, 0x00,\n        B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE|B_CHG,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FISTTP\"),\n        D_FPU|D_MEMORY|D_FPUPOP, 0,\n        1, 0x000038FF, 0x000008DB, 0x00,\n        B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE|B_CHG,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FISTTP\"),\n        D_FPU|D_MEMORY|D_FPUPOP, 0,\n        1, 0x000038FF, 0x000008DD, 0x00,\n        B_INT64|B_SIGNED|B_MEMORY|B_SHOWSIZE|B_CHG,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FLD\"),\n        D_FPU|D_MEMORY|D_FPUPUSH, 0,\n        1, 0x000038FF, 0x000000D9, 0x00,\n        B_FLOAT32|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FLD\"),\n        D_FPU|D_MEMORY|D_FPUPUSH, 0,\n        1, 0x000038FF, 0x000000DD, 0x00,\n        B_FLOAT64|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FLD\"),\n        D_FPU|D_MEMORY|D_FPUPUSH, 0,\n        1, 0x000038FF, 0x000028DB, 0x00,\n        B_FLOAT80|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FLDCW\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000028D9, 0x00,\n        B_FCW|B_CHG|B_PSEUDO,\n        B_INT16|B_BINARY|B_MEMORY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FLDENV\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000020D9, 0x00,\n        B_LONGDATA|B_MEMORY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FMUL\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000008D8, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_FLOAT32|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FMUL\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000008DC, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_FLOAT64|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FIMUL\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000008DA, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FIMUL\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000008DE, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FRSTOR\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000020DD, 0x00,\n        B_LONGDATA|B_MEMORY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSAVE\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000030DD, 0x00,\n        B_LONGDATA|B_MEMORY|B_CHG,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FST\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000010D9, 0x00,\n        B_FLOAT32|B_MEMORY|B_SHOWSIZE|B_CHG,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FST\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000010DD, 0x00,\n        B_FLOAT64|B_MEMORY|B_SHOWSIZE|B_CHG,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSTP\"),\n        D_FPU|D_MEMORY|D_FPUPOP, 0,\n        1, 0x000038FF, 0x000018D9, 0x00,\n        B_FLOAT32|B_MEMORY|B_SHOWSIZE|B_CHG,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSTP\"),\n        D_FPU|D_MEMORY|D_FPUPOP, 0,\n        1, 0x000038FF, 0x000018DD, 0x00,\n        B_FLOAT64|B_MEMORY|B_SHOWSIZE|B_CHG,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSTP\"),\n        D_FPU|D_MEMORY|D_FPUPOP, 0,\n        1, 0x000038FF, 0x000038DB, 0x00,\n        B_FLOAT80|B_MEMORY|B_SHOWSIZE|B_CHG,\n        B_ST0|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSTCW\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000038D9, 0x00,\n        B_INT16|B_BINARY|B_MEMORY|B_CHG,\n        B_FCW|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSTENV\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000030D9, 0x00,\n        B_LONGDATA|B_MEMORY|B_CHG,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSTSW\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000038DD, 0x00,\n        B_INT16|B_BINARY|B_MEMORY|B_CHG,\n        B_FST|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSUB\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000020D8, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_FLOAT32|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSUB\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000020DC, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_FLOAT64|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FISUB\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000020DA, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FISUB\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000020DE, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSUBR\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000028D8, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_FLOAT32|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSUBR\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000028DC, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_FLOAT64|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FISUBR\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000028DA, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_INT32|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FISUBR\"),\n        D_FPU|D_MEMORY, 0,\n        1, 0x000038FF, 0x000028DE, 0x00,\n        B_ST0|B_UPD|B_PSEUDO,\n        B_INT16|B_SIGNED|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FSETPM\"),\n        D_FPU|D_UNDOC, 0,\n        2, 0x0000FFFF, 0x0000E4DB, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ADDPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000580F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VADDPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x00000058, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_NONE },\n\n  { T(\"ADDPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000580F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VADDPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x00000058, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_NONE },\n\n  { T(\"ADDSD\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x0000580F, 0x00,\n        B_SREGF64L|B_UPD,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VADDSD\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x00000058, 0x00,\n        B_SREGF64L|B_CHG,\n        B_SVEXF64L,\n        B_SSEF64L,\n        B_NONE },\n\n  { T(\"ADDSS\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x0000580F, 0x00,\n        B_SREGF32L|B_UPD,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VADDSS\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x00000058, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SVEXF32L,\n        B_SSEF32L,\n        B_NONE },\n\n  { T(\"ADDSUBPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000D00F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VADDSUBPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x000000D0, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_NONE },\n\n  { T(\"ADDSUBPS\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x0000D00F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VADDSUBPS\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x000000D0, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_NONE },\n\n  { T(\"ANDPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000540F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VANDPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x00000054, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_NONE },\n\n  { T(\"ANDPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000540F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VANDPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x00000054, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_NONE },\n\n  { T(\"ANDNPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000550F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VANDNPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x00000055, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_NONE },\n\n  { T(\"ANDNPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000550F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VANDNPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x00000055, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_NONE },\n\n  { T(\"CMP*PD\"),\n        D_SSE|D_POSTBYTE|D_MUST66|D_WILDCARD, 0,\n        2, 0x0000FFFF, 0x0000C20F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCMP*PD\"),\n        D_AVX|D_POSTBYTE|D_MUST66|D_WILDCARD, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x000000C2, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_NONE },\n\n  { T(\"CMPPD\"),\n        D_SSE|D_MUST66|D_SUSPICIOUS, 0,\n        2, 0x0000FFFF, 0x0000C20F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_CONST8,\n        B_NONE },\n\n  { T(\"VCMPPD\"),\n        D_AVX|D_MUST66|D_SUSPICIOUS, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x000000C2, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_CONST8 },\n\n  { T(\"CMP*PS\"),\n        D_SSE|D_POSTBYTE|D_MUSTNONE|D_WILDCARD, 0,\n        2, 0x0000FFFF, 0x0000C20F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCMP*PS\"),\n        D_AVX|D_POSTBYTE|D_MUSTNONE|D_WILDCARD, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x000000C2, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_NONE },\n\n  { T(\"CMPPS\"),\n        D_SSE|D_MUSTNONE|D_SUSPICIOUS, 0,\n        2, 0x0000FFFF, 0x0000C20F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_CONST8,\n        B_NONE },\n\n  { T(\"VCMPPS\"),\n        D_AVX|D_MUSTNONE|D_SUSPICIOUS, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x000000C2, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_CONST8 },\n\n  { T(\"CMP*SD\"),\n        D_SSE|D_POSTBYTE|D_MUSTF2|D_WILDCARD, 0,\n        2, 0x0000FFFF, 0x0000C20F, 0x00,\n        B_SREGF64L|B_UPD,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCMP*SD\"),\n        D_AVX|D_POSTBYTE|D_MUSTF2|D_WILDCARD, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x000000C2, 0x00,\n        B_SREGF64L|B_CHG,\n        B_SVEXF64L,\n        B_SSEF64L,\n        B_NONE },\n\n  { T(\"CMPSD\"),\n        D_SSE|D_MUSTF2|D_SUSPICIOUS, 0,\n        2, 0x0000FFFF, 0x0000C20F, 0x00,\n        B_SREGF64L|B_UPD,\n        B_SVEXF64L,\n        B_CONST8,\n        B_NONE },\n\n  { T(\"VCMPSD\"),\n        D_AVX|D_MUSTF2|D_SUSPICIOUS, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x000000C2, 0x00,\n        B_SREGF64L|B_CHG,\n        B_SVEXF64L,\n        B_SSEF64L,\n        B_CONST8 },\n\n  { T(\"CMP*SS\"),\n        D_SSE|D_POSTBYTE|D_MUSTF3|D_WILDCARD, 0,\n        2, 0x0000FFFF, 0x0000C20F, 0x00,\n        B_SREGF32L|B_UPD,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCMP*SS\"),\n        D_AVX|D_POSTBYTE|D_MUSTF3|D_WILDCARD, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x000000C2, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SVEXF32L,\n        B_SSEF32L,\n        B_NONE },\n\n  { T(\"CMPSS\"),\n        D_SSE|D_MUSTF3|D_SUSPICIOUS, 0,\n        2, 0x0000FFFF, 0x0000C20F, 0x00,\n        B_SREGF32L|B_UPD,\n        B_SSEF32L,\n        B_CONST8,\n        B_NONE },\n\n  { T(\"VCMPSS\"),\n        D_AVX|D_MUSTF3|D_SUSPICIOUS, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x000000C2, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SVEXF32L,\n        B_SSEF32L,\n        B_CONST8 },\n\n  { T(\"COMISD\"),\n        D_SSE|D_MUST66|D_ALLFLAGS, 0,\n        2, 0x0000FFFF, 0x00002F0F, 0x00,\n        B_SREGF64L,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCOMISD\"),\n        D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_IGNOREL|DX_NOVREG,\n        1, 0x000000FF, 0x0000002F, 0x00,\n        B_SREGF64L,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"COMISS\"),\n        D_SSE|D_MUSTNONE|D_ALLFLAGS, 0,\n        2, 0x0000FFFF, 0x00002F0F, 0x00,\n        B_SREGF32L,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCOMISS\"),\n        D_AVX|D_MUSTNONE|D_ALLFLAGS, DX_VEX|DX_IGNOREL|DX_NOVREG,\n        1, 0x000000FF, 0x0000002F, 0x00,\n        B_SREGF32L,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTDQ2PD\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x0000E60F, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEI32x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTDQ2PD\"),\n        D_AVX|D_MUSTF3|D_REGISTER, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x000000E6, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEI32x2L|B_REGISTER|B_NOVEXSIZE|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTDQ2PD\"),\n        D_AVX|D_MUSTF3|D_MEMORY, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x000000E6, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEI32x2L|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTDQ2PS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00005B0F, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTDQ2PS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x0000005B, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTPD2DQ\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x0000E60F, 0x00,\n        B_SREGI32x2L|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTPD2DQ\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x000000E6, 0x00,\n        B_SREGI32x2L|B_NOVEXSIZE|B_CHG,\n        B_SSEF64x2|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTPD2PI\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00002D0F, 0x00,\n        B_MREG32x2|B_SIGNED|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTPD2PS\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00005A0F, 0x00,\n        B_SREGF32x2L|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTPD2PS\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x0000005A, 0x00,\n        B_SREGF32x2L|B_NOVEXSIZE|B_CHG,\n        B_SSEF64x2|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTPI2PD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00002A0F, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_MMX32x2|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTPI2PS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00002A0F, 0x00,\n        B_SREGF32x2L|B_CHG,\n        B_MMX32x2|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTPS2DQ\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00005B0F, 0x00,\n        B_SREGI32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTPS2DQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x0000005B, 0x00,\n        B_SREGI32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTPS2PD\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00005A0F, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF32x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTPS2PD\"),\n        D_AVX|D_MUSTNONE|D_REGISTER, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x0000005A, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF32x2L|B_REGISTER|B_NOVEXSIZE|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTPS2PD\"),\n        D_AVX|D_MUSTNONE|D_MEMORY, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x0000005A, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF32x2L|B_MEMORY|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTPS2PI\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00002D0F, 0x00,\n        B_MREG32x2|B_CHG,\n        B_SSEF32x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTSD2SI\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x00002D0F, 0x00,\n        B_REG32|B_CHG,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTSD2SI\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL|DX_NOVREG,\n        1, 0x000000FF, 0x0000002D, 0x00,\n        B_REG32|B_CHG,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTSD2SS\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x00005A0F, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTSD2SS\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x0000005A, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SVEXF32L,\n        B_SSEF64L,\n        B_NONE },\n\n  { T(\"CVTSI2SD\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x00002A0F, 0x00,\n        B_SREGF64L|B_CHG,\n        B_INT32|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTSI2SD\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x0000002A, 0x00,\n        B_SREGF64L|B_CHG,\n        B_SVEXF64L,\n        B_INT32|B_SIGNED,\n        B_NONE },\n\n  { T(\"CVTSI2SS\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x00002A0F, 0x00,\n        B_SREGF32L|B_CHG,\n        B_INT32|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTSI2SS\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x0000002A, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SVEXF32L,\n        B_INT32|B_SIGNED,\n        B_NONE },\n\n  { T(\"CVTSS2SD\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x00005A0F, 0x00,\n        B_SREGF64L|B_CHG,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTSS2SD\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x0000005A, 0x00,\n        B_SREGF64L|B_CHG,\n        B_SVEXF64L,\n        B_SSEF32L,\n        B_NONE },\n\n  { T(\"CVTSS2SI\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x00002D0F, 0x00,\n        B_REG32|B_CHG,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTSS2SI\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL|DX_NOVREG,\n        1, 0x000000FF, 0x0000002D, 0x00,\n        B_REG32|B_CHG,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTTPD2PI\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00002C0F, 0x00,\n        B_MREG32x2|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTTPD2DQ\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000E60F, 0x00,\n        B_SREGI32x2L|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTTPD2DQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x000000E6, 0x00,\n        B_SREGI32x2L|B_NOVEXSIZE|B_CHG,\n        B_SSEF64x2|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTTPS2DQ\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x00005B0F, 0x00,\n        B_SREGI32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTTPS2DQ\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x0000005B, 0x00,\n        B_SREGI32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTTPS2PI\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00002C0F, 0x00,\n        B_MREG32x2|B_CHG,\n        B_SSEF32x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTTSD2SI\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x00002C0F, 0x00,\n        B_REG32|B_CHG,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTTSD2SI\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL|DX_NOVREG,\n        1, 0x000000FF, 0x0000002C, 0x00,\n        B_REG32|B_CHG,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CVTTSS2SI\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x00002C0F, 0x00,\n        B_REG32|B_CHG,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTTSS2SI\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL|DX_NOVREG,\n        1, 0x000000FF, 0x0000002C, 0x00,\n        B_REG32|B_CHG,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"DIVPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00005E0F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VDIVPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x0000005E, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_NONE },\n\n  { T(\"DIVPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00005E0F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VDIVPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x0000005E, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_NONE },\n\n  { T(\"DIVSD\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x00005E0F, 0x00,\n        B_SREGF64L|B_UPD,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VDIVSD\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x0000005E, 0x00,\n        B_SREGF64L|B_CHG,\n        B_SVEXF64L,\n        B_SSEF64L,\n        B_NONE },\n\n  { T(\"DIVSS\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x00005E0F, 0x00,\n        B_SREGF32L|B_UPD,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VDIVSS\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x0000005E, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SVEXF32L,\n        B_SSEF32L,\n        B_NONE },\n\n  { T(\"HADDPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00007C0F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VHADDPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x0000007C, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_NONE },\n\n  { T(\"HADDPS\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x00007C0F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VHADDPS\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x0000007C, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_NONE },\n\n  { T(\"HSUBPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00007D0F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VHSUBPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x0000007D, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_NONE },\n\n  { T(\"HSUBPS\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x00007D0F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VHSUBPS\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x0000007D, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_NONE },\n\n  { T(\"LDDQU\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x0000F00F, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VLDDQU\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x000000F0, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LDMXCSR\"),\n        D_CMD|D_MEMORY, 0,\n        2, 0x0038FFFF, 0x0010AE0F, 0x00,\n        B_MXCSR|B_CHG|B_PSEUDO,\n        B_INT32|B_BINARY|B_MEMORY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VLDMXCSR\"),\n        D_CMD|D_MEMORY, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x000038FF, 0x000010AE, 0x00,\n        B_MXCSR|B_CHG|B_PSEUDO,\n        B_INT32|B_BINARY|B_MEMORY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VSTMXCSR\"),\n        D_CMD|D_MEMORY, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x000038FF, 0x000018AE, 0x00,\n        B_INT32|B_BINARY|B_MEMONLY|B_NOESP|B_SHOWSIZE|B_CHG,\n        B_MXCSR|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MASKMOVDQU\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        2, 0x00C0FFFF, 0x00C0F70F, 0x00,\n        B_SSEI8x16DI|B_UPD|B_PSEUDO,\n        B_SREGI8x16|B_BINARY,\n        B_SSEI8x16|B_REGISTER,\n        B_NONE },\n\n  { T(\"VMASKMOVDQU\"),\n        D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x0000C0FF, 0x0000C0F7, 0x00,\n        B_SSEI8x16DI|B_UPD|B_PSEUDO,\n        B_SREGI8x16|B_BINARY,\n        B_SSEI8x16|B_REGISTER,\n        B_NONE },\n\n  { T(\"MASKMOVQ\"),\n        D_MMX|D_MUSTNONE|D_REGISTER, 0,\n        2, 0x00C0FFFF, 0x00C0F70F, 0x00,\n        B_MMX8x8DI|B_UPD|B_PSEUDO,\n        B_MREG8x8,\n        B_MMX8x8|B_REGISTER,\n        B_NONE },\n\n  { T(\"MAXPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00005F0F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMAXPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x0000005F, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_NONE },\n\n  { T(\"MAXPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00005F0F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMAXPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x0000005F, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_NONE },\n\n  { T(\"MAXSD\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x00005F0F, 0x00,\n        B_SREGF64L|B_UPD,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMAXSD\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x0000005F, 0x00,\n        B_SREGF64L|B_CHG,\n        B_SVEXF64L,\n        B_SSEF64L,\n        B_NONE },\n\n  { T(\"MAXSS\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x00005F0F, 0x00,\n        B_SREGF32L|B_UPD,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMAXSS\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x0000005F, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SVEXF32L,\n        B_SSEF32L,\n        B_NONE },\n\n  { T(\"MFENCE\"),\n        D_SSE, 0,\n        3, 0x00FFFFFF, 0x00F0AE0F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MINPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00005D0F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMINPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x0000005D, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_NONE },\n\n  { T(\"MINPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00005D0F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMINPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x0000005D, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_NONE },\n\n  { T(\"MINSD\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x00005D0F, 0x00,\n        B_SREGF64L|B_UPD,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMINSD\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x0000005D, 0x00,\n        B_SREGF64L|B_CHG,\n        B_SVEXF64L,\n        B_SSEF64L,\n        B_NONE },\n\n  { T(\"MINSS\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x00005D0F, 0x00,\n        B_SREGF32L|B_UPD,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMINSS\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x0000005D, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SVEXF32L,\n        B_SSEF32L,\n        B_NONE },\n\n  { T(\"MOVAPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000280F, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVAPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x00000028, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVAPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000290F, 0x00,\n        B_SSEF64x2|B_CHG,\n        B_SREGF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVAPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x00000029, 0x00,\n        B_SSEF64x2|B_CHG,\n        B_SREGF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVAPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000280F, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVAPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x00000028, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVAPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000290F, 0x00,\n        B_SSEF32x4|B_CHG,\n        B_SREGF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVAPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x00000029, 0x00,\n        B_SSEF32x4|B_CHG,\n        B_SREGF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVD\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00006E0F, 0x00,\n        B_MREG32x2|B_CHG,\n        B_INT32,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVD\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00007E0F, 0x00,\n        B_INT32|B_CHG,\n        B_MREG32x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00006E0F, 0x00,\n        B_SREGI32x2L|B_CHG,\n        B_INT32,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x000000FF, 0x0000006E, 0x00,\n        B_SREGI32x2L|B_CHG,\n        B_INT32,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00007E0F, 0x00,\n        B_INT32|B_CHG,\n        B_SREGI32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x000000FF, 0x0000007E, 0x00,\n        B_INT32|B_CHG,\n        B_SREGI32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVDDUP\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x0000120F, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVDDUP\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x00000012, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVDQA\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00006F0F, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVDQA\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x0000006F, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVDQA\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00007F0F, 0x00,\n        B_SSEF64x2|B_CHG,\n        B_SREGF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVDQA\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x0000007F, 0x00,\n        B_SSEF64x2|B_CHG,\n        B_SREGF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVDQU\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x00006F0F, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVDQU\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x0000006F, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVDQU\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x00007F0F, 0x00,\n        B_SSEF64x2|B_CHG,\n        B_SREGF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVDQU\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x0000007F, 0x00,\n        B_SSEF64x2|B_CHG,\n        B_SREGF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVDQ2Q\"),\n        D_MMX|D_MUSTF2|D_REGISTER, 0,\n        2, 0x00C0FFFF, 0x00C0D60F, 0x00,\n        B_MREG32x2|B_CHG,\n        B_SSEI32x2L|B_REGISTER,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVHLPS\"),\n        D_SSE|D_MUSTNONE|D_REGISTER, 0,\n        2, 0x00C0FFFF, 0x00C0120F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4|B_REGISTER,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVHLPS\"),\n        D_AVX|D_MUSTNONE|D_REGISTER, DX_VEX|DX_LSHORT,\n        1, 0x0000C0FF, 0x0000C012, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SVEXF32x4,\n        B_SSEF32x4|B_REGISTER,\n        B_NONE },\n\n  { T(\"MOVHPD\"),\n        D_SSE|D_MUST66|D_MEMORY, 0,\n        2, 0x0000FFFF, 0x0000160F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64L|B_MEMORY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVHPD\"),\n        D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000016, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SVEXF64x2,\n        B_SSEF64L|B_MEMORY,\n        B_NONE },\n\n  { T(\"MOVHPD\"),\n        D_SSE|D_MUST66|D_MEMORY, 0,\n        2, 0x0000FFFF, 0x0000170F, 0x00,\n        B_SSEF64L|B_MEMORY|B_UPD,\n        B_SREGF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVHPD\"),\n        D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x000000FF, 0x00000017, 0x00,\n        B_SSEF64L|B_MEMORY|B_UPD,\n        B_SREGF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVHPS\"),\n        D_SSE|D_MUSTNONE|D_MEMORY, 0,\n        2, 0x0000FFFF, 0x0000160F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x2L|B_MEMORY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVHPS\"),\n        D_AVX|D_MUSTNONE|D_MEMORY, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000016, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SVEXF32x4,\n        B_SSEF32x2L|B_MEMORY,\n        B_NONE },\n\n  { T(\"MOVHPS\"),\n        D_SSE|D_MUSTNONE|D_MEMORY, 0,\n        2, 0x0000FFFF, 0x0000170F, 0x00,\n        B_SSEF32x2L|B_MEMORY|B_UPD,\n        B_SREGF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVHPS\"),\n        D_AVX|D_MUSTNONE|D_MEMORY, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x000000FF, 0x00000017, 0x00,\n        B_SSEF32x2L|B_MEMORY|B_UPD,\n        B_SREGF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVLHPS\"),\n        D_SSE|D_MUSTNONE|D_REGISTER, 0,\n        2, 0x00C0FFFF, 0x00C0160F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x2L|B_REGISTER,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVLHPS\"),\n        D_AVX|D_MUSTNONE|D_REGISTER, DX_VEX|DX_LSHORT,\n        1, 0x0000C0FF, 0x0000C016, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SVEXF32x4,\n        B_SSEF32x2L|B_REGISTER,\n        B_NONE },\n\n  { T(\"MOVLPD\"),\n        D_SSE|D_MUST66|D_MEMORY, 0,\n        2, 0x0000FFFF, 0x0000120F, 0x00,\n        B_SREGF64L|B_UPD,\n        B_SSEF64L|B_MEMORY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVLPD\"),\n        D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000012, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SVEXF64x2,\n        B_SSEF64L|B_MEMORY,\n        B_NONE },\n\n  { T(\"MOVLPD\"),\n        D_SSE|D_MUST66|D_MEMORY, 0,\n        2, 0x0000FFFF, 0x0000130F, 0x00,\n        B_SSEF64L|B_MEMORY|B_UPD,\n        B_SREGF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVLPD\"),\n        D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x000000FF, 0x00000013, 0x00,\n        B_SSEF64L|B_MEMORY|B_UPD,\n        B_SREGF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVLPS\"),\n        D_SSE|D_MUSTNONE|D_MEMORY, 0,\n        2, 0x0000FFFF, 0x0000120F, 0x00,\n        B_SREGF32x2L|B_UPD,\n        B_SSEF32x2L|B_MEMORY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVLPS\"),\n        D_AVX|D_MUSTNONE|D_MEMORY, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000012, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SVEXF32x4,\n        B_SSEF32x2L|B_MEMORY,\n        B_NONE },\n\n  { T(\"MOVLPS\"),\n        D_SSE|D_MUSTNONE|D_MEMORY, 0,\n        2, 0x0000FFFF, 0x0000130F, 0x00,\n        B_SSEF32x2L|B_MEMORY|B_UPD,\n        B_SREGF32x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVLPS\"),\n        D_AVX|D_MUSTNONE|D_MEMORY, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x000000FF, 0x00000013, 0x00,\n        B_SSEF32x2L|B_MEMORY|B_UPD,\n        B_SREGF32x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVMSKPD\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        2, 0x00C0FFFF, 0x00C0500F, 0x00,\n        B_REG32|B_CHG,\n        B_SSEF64x2|B_REGONLY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVMSKPD\"),\n        D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x0000C0FF, 0x0000C050, 0x00,\n        B_REG32|B_CHG,\n        B_SSEF64x2|B_REGONLY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVMSKPS\"),\n        D_SSE|D_MUSTNONE|D_REGISTER, 0,\n        2, 0x00C0FFFF, 0x00C0500F, 0x00,\n        B_REG32|B_CHG,\n        B_SSEF32x4|B_REGONLY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVMSKPS\"),\n        D_AVX|D_MUSTNONE|D_REGISTER, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x0000C0FF, 0x0000C050, 0x00,\n        B_REG32|B_CHG,\n        B_SSEF32x4|B_REGONLY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVNTDQ\"),\n        D_SSE|D_MUST66|D_MEMORY, 0,\n        2, 0x0000FFFF, 0x0000E70F, 0x00,\n        B_SSEI8x16|B_MEMORY|B_CHG,\n        B_SREGI8x16|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVNTDQ\"),\n        D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x000000E7, 0x00,\n        B_SSEI8x16|B_MEMORY|B_CHG,\n        B_SREGI8x16|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVNTI\"),\n        D_SSE|D_MUSTNONE|D_MEMORY, 0,\n        2, 0x0000FFFF, 0x0000C30F, 0x00,\n        B_INT32|B_MEMORY|B_CHG,\n        B_REG32,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVNTPD\"),\n        D_SSE|D_MUST66|D_MEMORY, 0,\n        2, 0x0000FFFF, 0x00002B0F, 0x00,\n        B_SSEF64x2|B_MEMORY|B_CHG,\n        B_SREGF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVNTPD\"),\n        D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x0000002B, 0x00,\n        B_SSEF64x2|B_MEMORY|B_CHG,\n        B_SREGF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVNTPS\"),\n        D_SSE|D_MUSTNONE|D_MEMORY, 0,\n        2, 0x0000FFFF, 0x00002B0F, 0x00,\n        B_SSEF32x4|B_MEMORY|B_CHG,\n        B_SREGF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVNTPS\"),\n        D_AVX|D_MUSTNONE|D_MEMORY, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x0000002B, 0x00,\n        B_SSEF32x4|B_MEMORY|B_CHG,\n        B_SREGF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVNTQ\"),\n        D_MMX|D_MUSTNONE|D_MEMORY, 0,\n        2, 0x0000FFFF, 0x0000E70F, 0x00,\n        B_MMX64|B_MEMORY|B_CHG,\n        B_MREG64,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVQ\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00006F0F, 0x00,\n        B_MREG64|B_CHG,\n        B_MMX64,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVQ\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00007F0F, 0x00,\n        B_MMX64|B_CHG,\n        B_MREG64,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVQ\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x00007E0F, 0x00,\n        B_SREGF64L|B_CHG,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVQ\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x000000FF, 0x0000007E, 0x00,\n        B_SREGF64L|B_CHG,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVQ\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000D60F, 0x00,\n        B_SSEF64L|B_CHG,\n        B_SREGF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x000000FF, 0x000000D6, 0x00,\n        B_SSEF64L|B_CHG,\n        B_SREGF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVQ2DQ\"),\n        D_MMX|D_MUSTF3|D_REGISTER, 0,\n        2, 0x00C0FFFF, 0x00C0D60F, 0x00,\n        B_SREGF64L|B_UPD,\n        B_MMX8x8|B_REGISTER,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVSD\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x0000100F, 0x00,\n        B_SREGF64L|B_UPD,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVSD\"),\n        D_AVX|D_MUSTF2|D_MEMORY, DX_VEX|DX_IGNOREL|DX_NOVREG,\n        1, 0x000000FF, 0x00000010, 0x00,\n        B_SREGF64L|B_UPD,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVSD\"),\n        D_AVX|D_MUSTF2|D_REGISTER, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x00000010, 0x00,\n        B_SREGF64L|B_UPD,\n        B_SVEXF64x2,\n        B_SSEF64L,\n        B_NONE },\n\n  { T(\"MOVSD\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x0000110F, 0x00,\n        B_SSEF64L|B_UPD,\n        B_SREGF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVSD\"),\n        D_AVX|D_MUSTF2|D_MEMORY, DX_VEX|DX_IGNOREL|DX_NOVREG,\n        1, 0x000000FF, 0x00000011, 0x00,\n        B_SSEF64L|B_UPD,\n        B_SREGF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVSD\"),\n        D_AVX|D_MUSTF2|D_REGISTER, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x00000011, 0x00,\n        B_SSEF64L|B_UPD,\n        B_SVEXF64x2,\n        B_SREGF64L,\n        B_NONE },\n\n  { T(\"MOVSS\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x0000100F, 0x00,\n        B_SREGF32L|B_UPD,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVSS\"),\n        D_AVX|D_MUSTF3|D_MEMORY, DX_VEX|DX_IGNOREL|DX_NOVREG,\n        1, 0x000000FF, 0x00000010, 0x00,\n        B_SREGF32L|B_UPD,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVSS\"),\n        D_AVX|D_MUSTF3|D_REGISTER, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x00000010, 0x00,\n        B_SREGF32L|B_UPD,\n        B_SVEXF32x4,\n        B_SSEF32L,\n        B_NONE },\n\n  { T(\"MOVSS\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x0000110F, 0x00,\n        B_SSEF32L|B_UPD,\n        B_SREGF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVSS\"),\n        D_AVX|D_MUSTF3|D_MEMORY, DX_VEX|DX_IGNOREL|DX_NOVREG,\n        1, 0x000000FF, 0x00000011, 0x00,\n        B_SSEF32L|B_UPD,\n        B_SREGF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVSS\"),\n        D_AVX|D_MUSTF3|D_REGISTER, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x00000011, 0x00,\n        B_SSEF32L|B_UPD,\n        B_SVEXF32x4,\n        B_SREGF32L,\n        B_NONE },\n\n  { T(\"MOVSHDUP\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x0000160F, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVSHDUP\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x00000016, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVSLDUP\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x0000120F, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVSLDUP\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x00000012, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVUPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000100F, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVUPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x00000010, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVUPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000110F, 0x00,\n        B_SSEF64x2|B_CHG,\n        B_SREGF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVUPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x00000011, 0x00,\n        B_SSEF64x2|B_CHG,\n        B_SREGF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVUPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000100F, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVUPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x00000010, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVUPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000110F, 0x00,\n        B_SSEF32x4|B_CHG,\n        B_SREGF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVUPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x00000011, 0x00,\n        B_SSEF32x4|B_CHG,\n        B_SREGF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MULPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000590F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMULPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x00000059, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_NONE },\n\n  { T(\"MULPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000590F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMULPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x00000059, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_NONE },\n\n  { T(\"MULSD\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x0000590F, 0x00,\n        B_SREGF64L|B_UPD,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMULSD\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x00000059, 0x00,\n        B_SREGF64L|B_UPD,\n        B_SVEXF64L,\n        B_SSEF64L,\n        B_NONE },\n\n  { T(\"MULSS\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x0000590F, 0x00,\n        B_SREGF32L|B_UPD,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMULSS\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x00000059, 0x00,\n        B_SREGF32L|B_UPD,\n        B_SVEXF32L,\n        B_SSEF32L,\n        B_NONE },\n\n  { T(\"ORPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000560F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VORPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x00000056, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_NONE },\n\n  { T(\"ORPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000560F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VORPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x00000056, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_NONE },\n\n  { T(\"PACKSSWB\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000630F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PACKSSWB\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000630F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPACKSSWB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000063, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PACKSSDW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00006B0F, 0x00,\n        B_MREG32x2|B_UPD,\n        B_MMX32x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PACKSSDW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00006B0F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPACKSSDW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x0000006B, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI32x4,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"PACKUSWB\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000670F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PACKUSWB\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000670F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPACKUSWB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000067, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PADDB\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000FC0F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PADDW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000FD0F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PADDD\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000FE0F, 0x00,\n        B_MREG32x2|B_UPD,\n        B_MMX32x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PADDB\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000FC0F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPADDB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000FC, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PADDW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000FD0F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPADDW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000FD, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PADDD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000FE0F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPADDD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000FE, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SVEXI32x4,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"PADDQ\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000D40F, 0x00,\n        B_MREG64|B_UPD,\n        B_MMX64,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PADDQ\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000D40F, 0x00,\n        B_SREGI64x2|B_UPD,\n        B_SSEI64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPADDQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000D4, 0x00,\n        B_SREGI64x2|B_UPD,\n        B_SVEXI64x2,\n        B_SSEI64x2,\n        B_NONE },\n\n  { T(\"PADDSB\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000EC0F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PADDSW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000ED0F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PADDSB\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000EC0F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPADDSB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000EC, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PADDSW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000ED0F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPADDSW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000ED, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PADDUSB\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000DC0F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PADDUSW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000DD0F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PADDUSB\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000DC0F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPADDUSB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000DC, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PADDUSW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000DD0F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPADDUSW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000DD, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PAND\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000DB0F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PAND\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000DB0F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPAND\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000DB, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PANDN\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000DF0F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PANDN\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000DF0F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPANDN\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000DF, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PAVGB\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000E00F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PAVGW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000E30F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PAVGB\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000E00F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPAVGB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000E0, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PAVGW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000E30F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPAVGW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000E3, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PCMPEQB\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000740F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PCMPEQW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000750F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PCMPEQD\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000760F, 0x00,\n        B_MREG32x2|B_UPD,\n        B_MMX32x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PCMPEQB\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000740F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPCMPEQB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000074, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PCMPEQW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000750F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPCMPEQW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000075, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PCMPEQD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000760F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPCMPEQD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000076, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SVEXI32x4,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"PCMPGTB\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000640F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PCMPGTW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000650F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PCMPGTD\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000660F, 0x00,\n        B_MREG32x2|B_UPD,\n        B_MMX32x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PCMPGTB\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000640F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPCMPGTB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000064, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PCMPGTW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000650F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPCMPGTW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000065, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PCMPGTD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000660F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPCMPGTD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000066, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SVEXI32x4,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"PEXTRW\"),\n        D_MMX|D_MUSTNONE|D_REGISTER, 0,\n        2, 0x00C0FFFF, 0x00C0C50F, 0x00,\n        B_REG32|B_CHG,\n        B_MMX16x4|B_REGISTER,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"PEXTRW\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        2, 0x00C0FFFF, 0x00C0C50F, 0x00,\n        B_REG32|B_CHG,\n        B_SSEI16x8|B_REGISTER,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"VPEXTRW\"),\n        D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x0000C0FF, 0x0000C0C5, 0x00,\n        B_REG32|B_CHG,\n        B_SSEI16x8|B_REGISTER,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"PINSRW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000C40F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_INT16,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"PINSRW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x00C0FFFF, 0x00C0C40F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_INT32|B_REGISTER,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"PINSRW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000C40F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_INT16,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"VPINSRW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000C4, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_INT16,\n        B_CONST8|B_COUNT },\n\n  { T(\"PINSRW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x00C0FFFF, 0x00C0C40F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_INT32|B_REGISTER,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"VPINSRW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x0000C0FF, 0x0000C0C4, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_INT32|B_REGISTER,\n        B_CONST8|B_COUNT },\n\n  { T(\"PMADDWD\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000F50F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMADDWD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000F50F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMADDWD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000F5, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PMAXSW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000EE0F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMAXSW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000EE0F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMAXSW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000EE, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PMAXUB\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000DE0F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMAXUB\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000DE0F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMAXUB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000DE, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PMINSW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000EA0F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMINSW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000EA0F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMINSW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000EA, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PMINUB\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000DA0F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMINUB\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000DA0F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMINUB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000DA, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PMOVMSKB\"),\n        D_MMX|D_MUSTNONE|D_REGISTER, 0,\n        2, 0x00C0FFFF, 0x00C0D70F, 0x00,\n        B_REG32|B_CHG,\n        B_MMX8x8|B_REGISTER,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMOVMSKB\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        2, 0x00C0FFFF, 0x00C0D70F, 0x00,\n        B_REG32|B_CHG,\n        B_SSEI8x16|B_REGISTER,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMOVMSKB\"),\n        D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x0000C0FF, 0x0000C0D7, 0x00,\n        B_REG32|B_CHG,\n        B_SSEI8x16|B_REGISTER,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMULHUW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000E40F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMULHUW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000E40F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMULHUW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000E4, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PMULHW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000E50F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMULHW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000E50F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMULHW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000E5, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PMULLW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000D50F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMULLW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000D50F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMULLW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000D5, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PMULUDQ\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000F40F, 0x00,\n        B_MREG32x2|B_UPD,\n        B_MMX32x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMULUDQ\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000F40F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMULUDQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000F4, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SVEXI32x4,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"POR\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000EB0F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"POR\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000EB0F, 0x00,\n        B_SREGI8x16|B_BINARY|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPOR\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000EB, 0x00,\n        B_SREGI8x16|B_BINARY|B_UPD,\n        B_SVEXI8x16|B_BINARY,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PSADBW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000F60F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSADBW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000F60F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSADBW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000F6, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PSHUFD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000700F, 0x00,\n        B_SREGI32x4|B_CHG,\n        B_SSEI32x4,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VPSHUFD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x000000FF, 0x00000070, 0x00,\n        B_SREGI32x4|B_CHG,\n        B_SSEI32x4,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"PSHUFHW\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x0000700F, 0x00,\n        B_SREGI16x8|B_CHG,\n        B_SSEI16x8,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VPSHUFHW\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x000000FF, 0x00000070, 0x00,\n        B_SREGI16x8|B_CHG,\n        B_SSEI16x8,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"PSHUFLW\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x0000700F, 0x00,\n        B_SREGI16x8|B_CHG,\n        B_SSEI16x8,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VPSHUFLW\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x000000FF, 0x00000070, 0x00,\n        B_SREGI16x8|B_CHG,\n        B_SSEI16x8,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"PSHUFW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000700F, 0x00,\n        B_MREG16x4|B_CHG,\n        B_MMX16x4,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"PSLLDQ\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00F8730F, 0x00,\n        B_SSEI8x16|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSLLDQ\"),\n        D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT,\n        1, 0x0000F8FF, 0x0000F873, 0x00,\n        B_SVEXI8x16|B_UPD,\n        B_SSEI8x16|B_REGISTER,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"PSLLW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000F10F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSLLW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000F10F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSLLW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000F1, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PSLLW\"),\n        D_MMX|D_MUSTNONE|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00F0710F, 0x00,\n        B_MMX16x4|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSLLW\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00F0710F, 0x00,\n        B_SSEI16x8|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSLLW\"),\n        D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT,\n        1, 0x0000F8FF, 0x0000F071, 0x00,\n        B_SVEXI16x8|B_UPD,\n        B_SSEI16x8|B_REGISTER,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"PSLLD\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000F20F, 0x00,\n        B_MREG32x2|B_UPD,\n        B_MMX32x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSLLD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000F20F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSLLD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000F2, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SVEXI32x4,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"PSLLD\"),\n        D_MMX|D_MUSTNONE|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00F0720F, 0x00,\n        B_MMX32x2|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSLLD\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00F0720F, 0x00,\n        B_SSEI32x4|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSLLD\"),\n        D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT,\n        1, 0x0000F8FF, 0x0000F072, 0x00,\n        B_SVEXI32x4|B_UPD,\n        B_SSEI32x4|B_REGISTER,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"PSLLQ\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000F30F, 0x00,\n        B_MREG64|B_UPD,\n        B_MMX64,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSLLQ\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000F30F, 0x00,\n        B_SREGI64x2|B_UPD,\n        B_SSEI64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSLLQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000F3, 0x00,\n        B_SREGI64x2|B_UPD,\n        B_SVEXI64x2,\n        B_SSEI64x2,\n        B_NONE },\n\n  { T(\"PSLLQ\"),\n        D_MMX|D_MUSTNONE|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00F0730F, 0x00,\n        B_MMX64|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSLLQ\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00F0730F, 0x00,\n        B_SSEI64x2|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSLLQ\"),\n        D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT,\n        1, 0x0000F8FF, 0x0000F073, 0x00,\n        B_SVEXI64x2|B_UPD,\n        B_SSEI64x2|B_REGISTER,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"PSRAW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000E10F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSRAW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000E10F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSRAW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000E1, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PSRAW\"),\n        D_MMX|D_MUSTNONE|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00E0710F, 0x00,\n        B_MMX16x4|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSRAW\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00E0710F, 0x00,\n        B_SSEI16x8|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSRAW\"),\n        D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT,\n        1, 0x0000F8FF, 0x0000E071, 0x00,\n        B_SVEXI16x8|B_UPD,\n        B_SSEI16x8|B_REGISTER,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"PSRAD\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000E20F, 0x00,\n        B_MREG32x2|B_UPD,\n        B_MMX32x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSRAD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000E20F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSRAD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000E2, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SVEXI32x4,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"PSRAD\"),\n        D_MMX|D_MUSTNONE|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00E0720F, 0x00,\n        B_MMX32x2|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSRAD\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00E0720F, 0x00,\n        B_SSEI32x4|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSRAD\"),\n        D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT,\n        1, 0x0000F8FF, 0x0000E072, 0x00,\n        B_SVEXI32x4|B_UPD,\n        B_SSEI32x4|B_REGISTER,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"PSRLDQ\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00D8730F, 0x00,\n        B_SSEI8x16|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSRLDQ\"),\n        D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT,\n        1, 0x0000F8FF, 0x0000D873, 0x00,\n        B_SVEXI8x16|B_UPD,\n        B_SSEI8x16|B_REGISTER,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"PSRLW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000D10F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSRLW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000D10F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSRLW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000D1, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PSRLW\"),\n        D_MMX|D_MUSTNONE|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00D0710F, 0x00,\n        B_MMX16x4|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSRLW\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00D0710F, 0x00,\n        B_SSEI16x8|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSRLW\"),\n        D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT,\n        1, 0x0000F8FF, 0x0000D071, 0x00,\n        B_SVEXI16x8|B_UPD,\n        B_SSEI16x8|B_REGISTER,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"PSRLD\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000D20F, 0x00,\n        B_MREG32x2|B_UPD,\n        B_MMX32x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSRLD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000D20F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSRLD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000D2, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SVEXI32x4,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"PSRLD\"),\n        D_MMX|D_MUSTNONE|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00D0720F, 0x00,\n        B_MMX32x2|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSRLD\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00D0720F, 0x00,\n        B_SSEI32x4|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSRLD\"),\n        D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT,\n        1, 0x0000F8FF, 0x0000D072, 0x00,\n        B_SVEXI32x4|B_UPD,\n        B_SSEI32x4|B_REGISTER,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"PSRLQ\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000D30F, 0x00,\n        B_MREG64|B_UPD,\n        B_MMX64,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSRLQ\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000D30F, 0x00,\n        B_SREGI64x2|B_UPD,\n        B_SSEI64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSRLQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000D3, 0x00,\n        B_SREGI64x2|B_UPD,\n        B_SVEXI64x2,\n        B_SSEI64x2,\n        B_NONE },\n\n  { T(\"PSRLQ\"),\n        D_MMX|D_MUSTNONE|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00D0730F, 0x00,\n        B_MMX64|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSRLQ\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        2, 0x00F8FFFF, 0x00D0730F, 0x00,\n        B_SSEI64x2|B_REGISTER|B_UPD,\n        B_CONST8|B_COUNT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSRLQ\"),\n        D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT,\n        1, 0x0000F8FF, 0x0000D073, 0x00,\n        B_SVEXI64x2|B_UPD,\n        B_SSEI64x2|B_REGISTER,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"PSUBB\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000F80F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSUBW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000F90F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSUBD\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000FA0F, 0x00,\n        B_MREG32x2|B_UPD,\n        B_MMX32x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSUBB\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000F80F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSUBB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000F8, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PSUBW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000F90F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSUBW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000F9, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PSUBD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000FA0F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSUBD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000FA, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SVEXI32x4,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"PSUBQ\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000FB0F, 0x00,\n        B_MREG64|B_UPD,\n        B_MMX64,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSUBQ\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000FB0F, 0x00,\n        B_SREGI64x2|B_UPD,\n        B_SSEI64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSUBQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000FB, 0x00,\n        B_SREGI64x2|B_UPD,\n        B_SVEXI64x2,\n        B_SSEI64x2,\n        B_NONE },\n\n  { T(\"PSUBSB\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000E80F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSUBSW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000E90F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSUBSB\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000E80F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSUBSB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000E8, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PSUBSW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000E90F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSUBSW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000E9, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PSUBUSB\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000D80F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSUBUSW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000D90F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSUBUSB\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000D80F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSUBUSB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000D8, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PSUBUSW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000D90F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSUBUSW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000D9, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PUNPCKHBW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000680F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUNPCKHBW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000680F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPUNPCKHBW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000068, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PUNPCKHWD\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000690F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUNPCKHWD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000690F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPUNPCKHWD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000069, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PUNPCKHDQ\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00006A0F, 0x00,\n        B_MREG32x2|B_UPD,\n        B_MMX32x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUNPCKHDQ\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00006A0F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPUNPCKHDQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x0000006A, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SVEXI32x4,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"PUNPCKHQDQ\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00006D0F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPUNPCKHQDQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x0000006D, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SVEXI32x4,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"PUNPCKLBW\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000600F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUNPCKLBW\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000600F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPUNPCKLBW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000060, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"PUNPCKLWD\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000610F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUNPCKLWD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000610F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPUNPCKLWD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000061, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PUNPCKLDQ\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000620F, 0x00,\n        B_MREG32x2|B_UPD,\n        B_MMX32x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PUNPCKLDQ\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000620F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPUNPCKLDQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x00000062, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SVEXI32x4,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"PUNPCKLQDQ\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00006C0F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPUNPCKLQDQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x0000006C, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SVEXI32x4,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"PXOR\"),\n        D_MMX|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000EF0F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PXOR\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000EF0F, 0x00,\n        B_SREGI8x16|B_BINARY|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPXOR\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT,\n        1, 0x000000FF, 0x000000EF, 0x00,\n        B_SREGI8x16|B_BINARY|B_UPD,\n        B_SVEXI8x16|B_BINARY,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"RCPPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000530F, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VRCPPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x00000053, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RCPSS\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x0000530F, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VRCPSS\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x00000053, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SVEXF32L|B_CHG,\n        B_SSEF32L,\n        B_NONE },\n\n  { T(\"RSQRTPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000520F, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VRSQRTPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x00000052, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"RSQRTSS\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x0000520F, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VRSQRTSS\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x00000052, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SVEXF32L,\n        B_SSEF32L,\n        B_NONE },\n\n  { T(\"SHUFPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000C60F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VSHUFPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x000000C6, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_CONST8|B_BINARY },\n\n  { T(\"SHUFPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000C60F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VSHUFPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x000000C6, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_CONST8|B_BINARY },\n\n  { T(\"SQRTPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000510F, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VSQRTPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x00000051, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SQRTPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000510F, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VSQRTPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH|DX_NOVREG,\n        1, 0x000000FF, 0x00000051, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SQRTSD\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x0000510F, 0x00,\n        B_SREGF64L|B_CHG,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VSQRTSD\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x00000051, 0x00,\n        B_SREGF64L|B_CHG,\n        B_SVEXF64L,\n        B_SSEF64L,\n        B_NONE },\n\n  { T(\"SQRTSS\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x0000510F, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VSQRTSS\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x00000051, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SVEXF32L,\n        B_SSEF32L,\n        B_NONE },\n\n  { T(\"SUBPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x00005C0F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VSUBPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x0000005C, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_NONE },\n\n  { T(\"SUBPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00005C0F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VSUBPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x0000005C, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_NONE },\n\n  { T(\"SUBSD\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x00005C0F, 0x00,\n        B_SREGF64L|B_UPD,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VSUBSD\"),\n        D_AVX|D_MUSTF2, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x0000005C, 0x00,\n        B_SREGF64L|B_UPD,\n        B_SVEXF64L,\n        B_SSEF64L,\n        B_NONE },\n\n  { T(\"SUBSS\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x00005C0F, 0x00,\n        B_SREGF32L|B_UPD,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VSUBSS\"),\n        D_AVX|D_MUSTF3, DX_VEX|DX_IGNOREL,\n        1, 0x000000FF, 0x0000005C, 0x00,\n        B_SREGF32L|B_UPD,\n        B_SVEXF32L,\n        B_SSEF32L,\n        B_NONE },\n\n  { T(\"UNPCKHPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000150F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VUNPCKHPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x00000015, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_NONE },\n\n  { T(\"UNPCKHPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000150F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VUNPCKHPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x00000015, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_NONE },\n\n  { T(\"UNPCKLPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000140F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VUNPCKLPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x00000014, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_NONE },\n\n  { T(\"UNPCKLPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000140F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VUNPCKLPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x00000014, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_NONE },\n\n  { T(\"UCOMISD\"),\n        D_SSE|D_MUST66|D_ALLFLAGS, 0,\n        2, 0x0000FFFF, 0x00002E0F, 0x00,\n        B_SREGF64L,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VUCOMISD\"),\n        D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_IGNOREL|DX_NOVREG,\n        1, 0x000000FF, 0x0000002E, 0x00,\n        B_SREGF64L,\n        B_SSEF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"UCOMISS\"),\n        D_SSE|D_MUSTNONE|D_ALLFLAGS, 0,\n        2, 0x0000FFFF, 0x00002E0F, 0x00,\n        B_SREGF32L,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VUCOMISS\"),\n        D_AVX|D_MUSTNONE|D_ALLFLAGS, DX_VEX|DX_IGNOREL|DX_NOVREG,\n        1, 0x000000FF, 0x0000002E, 0x00,\n        B_SREGF32L,\n        B_SSEF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"XORPD\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000570F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VXORPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x00000057, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_NONE },\n\n  { T(\"XORPS\"),\n        D_SSE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x0000570F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VXORPS\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LBOTH,\n        1, 0x000000FF, 0x00000057, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_NONE },\n\n  { T(\"FXRSTOR\"),\n        D_SSE|D_MEMORY, 0,\n        2, 0x0038FFFF, 0x0008AE0F, 0x00,\n        B_LONGDATA|B_MEMORY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FXSAVE\"),\n        D_SSE|D_MEMORY, 0,\n        2, 0x0038FFFF, 0x0000AE0F, 0x00,\n        B_LONGDATA|B_MEMORY|B_CHG,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LFENCE\"),\n        D_SSE, 0,\n        3, 0x00FFFFFF, 0x00E8AE0F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PREFETCHT0\"),\n        D_SSE|D_MUSTNONE|D_MEMORY, 0,\n        2, 0x0038FFFF, 0x0008180F, 0x00,\n        B_ANYMEM|B_MEMORY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PREFETCHT1\"),\n        D_SSE|D_MUSTNONE|D_MEMORY, 0,\n        2, 0x0038FFFF, 0x0010180F, 0x00,\n        B_ANYMEM|B_MEMORY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PREFETCHT2\"),\n        D_SSE|D_MUSTNONE|D_MEMORY, 0,\n        2, 0x0038FFFF, 0x0018180F, 0x00,\n        B_ANYMEM|B_MEMORY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PREFETCHNTA\"),\n        D_SSE|D_MUSTNONE|D_MEMORY, 0,\n        2, 0x0038FFFF, 0x0000180F, 0x00,\n        B_ANYMEM|B_MEMORY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"NOP\"),\n        D_SSE|D_MUSTNONE|D_MEMORY|D_UNDOC, DX_NOP,\n        2, 0x0020FFFF, 0x0020180F, 0x00,\n        B_ANYMEM|B_MEMORY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PREFETCH\"),\n        D_SSE|D_MUSTNONE|D_MEMORY, 0,\n        2, 0x0038FFFF, 0x00000D0F, 0x00,\n        B_ANYMEM|B_MEMORY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PREFETCHW\"),\n        D_SSE|D_MUSTNONE|D_MEMORY, 0,\n        2, 0x0038FFFF, 0x00080D0F, 0x00,\n        B_ANYMEM|B_MEMORY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SFENCE\"),\n        D_SSE, 0,\n        3, 0x00FFFFFF, 0x00F8AE0F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"BLENDPD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x000D3A0F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VBLENDPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_LEAD3A,\n        1, 0x000000FF, 0x0000000D, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_CONST8|B_BINARY },\n\n  { T(\"BLENDPS\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x000C3A0F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VBLENDPS\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_LEAD3A,\n        1, 0x000000FF, 0x0000000C, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_CONST8|B_BINARY },\n\n  { T(\"BLENDVPD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0015380F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_XMM0I64x2,\n        B_NONE },\n\n  { T(\"BLENDVPD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0015380F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_XMM0I64x2|B_PSEUDO,\n        B_NONE },\n\n  { T(\"VBLENDVPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_W0|DX_LEAD3A,\n        1, 0x000000FF, 0x0000004B, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_SIMMI8x16 },\n\n  { T(\"BLENDVPS\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0014380F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_XMM0I32x4,\n        B_NONE },\n\n  { T(\"BLENDVPS\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0014380F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_XMM0I32x4|B_PSEUDO,\n        B_NONE },\n\n  { T(\"VBLENDVPS\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_W0|DX_LEAD3A,\n        1, 0x000000FF, 0x0000004A, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_SIMMI8x16 },\n\n  { T(\"CRC32\"),\n        D_CMD|D_NEEDF2, 0,\n        3, 0x00FFFFFF, 0x00F0380F, 0x00,\n        B_REG32|B_NOADDR|B_UPD,\n        B_INT8|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CRC32\"),\n        D_CMD|D_NEEDF2, 0,\n        3, 0x00FFFFFF, 0x00F1380F, 0x00,\n        B_REG32|B_NOADDR|B_UPD,\n        B_INT1632|B_NOADDR|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"DPPD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00413A0F, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SSEF64x2,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VDPPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A,\n        1, 0x000000FF, 0x00000041, 0x00,\n        B_SREGF64x2|B_UPD,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_CONST8|B_BINARY },\n\n  { T(\"DPPS\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00403A0F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32x4,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VDPPS\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_LEAD3A,\n        1, 0x000000FF, 0x00000040, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SVEXF32x4,\n        B_SSEF32x4,\n        B_CONST8|B_BINARY },\n\n  { T(\"EXTRACTPS\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00173A0F, 0x00,\n        B_INT32|B_CHG,\n        B_SREGF32x4,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VEXTRACTPS\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD3A,\n        1, 0x000000FF, 0x00000017, 0x00,\n        B_INT32|B_CHG,\n        B_SREGF32x4,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"INSERTPS\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00213A0F, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SSEF32L,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VINSERTPS\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A,\n        1, 0x000000FF, 0x00000021, 0x00,\n        B_SREGF32x4|B_UPD,\n        B_SVEXF32x4,\n        B_SSEF32L,\n        B_CONST8|B_BINARY },\n\n  { T(\"MOVNTDQA\"),\n        D_SSE|D_MUST66|D_MEMORY, 0,\n        3, 0x00FFFFFF, 0x002A380F, 0x00,\n        B_SREGI8x16|B_BINARY|B_CHG,\n        B_SSEI8x16|B_MEMORY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMOVNTDQA\"),\n        D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x0000002A, 0x00,\n        B_SREGI8x16|B_BINARY|B_CHG,\n        B_SSEI8x16|B_MEMORY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MPSADBW\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00423A0F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VMPSADBW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A,\n        1, 0x000000FF, 0x00000042, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_CONST8|B_BINARY },\n\n  { T(\"PACKUSDW\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x002B380F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPACKUSDW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x0000002B, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SVEXI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"PBLENDVB\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0010380F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_XMM0I8x16,\n        B_NONE },\n\n  { T(\"PBLENDVB\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0010380F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_XMM0I8x16|B_PSEUDO,\n        B_NONE },\n\n  { T(\"VPBLENDVB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_W0|DX_LEAD3A,\n        1, 0x000000FF, 0x0000004C, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_SIMMI8x16 },\n\n  { T(\"PBLENDW\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x000E3A0F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VPBLENDW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A,\n        1, 0x000000FF, 0x0000000E, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_CONST8|B_BINARY },\n\n  { T(\"PCLMULLQLQDQ\"),\n        D_SSE|D_POSTBYTE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00443A0F, 0x00,\n        B_SREGI64x2|B_UPD,\n        B_SSEI64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPCLMULLQLQDQ\"),\n        D_AVX|D_POSTBYTE|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A,\n        1, 0x000000FF, 0x00000044, 0x00,\n        B_SREGI64x2|B_UPD,\n        B_SVEXI64x2,\n        B_SSEI64x2,\n        B_NONE },\n\n  { T(\"PCLMULHQLQDQ\"),\n        D_SSE|D_POSTBYTE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00443A0F, 0x01,\n        B_SREGI64x2|B_UPD,\n        B_SSEI64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPCLMULHQLQDQ\"),\n        D_AVX|D_POSTBYTE|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A,\n        1, 0x000000FF, 0x00000044, 0x01,\n        B_SREGI64x2|B_UPD,\n        B_SVEXI64x2,\n        B_SSEI64x2,\n        B_NONE },\n\n  { T(\"PCLMULLQHDQ\"),\n        D_SSE|D_POSTBYTE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00443A0F, 0x10,\n        B_SREGI64x2|B_UPD,\n        B_SSEI64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPCLMULLQHDQ\"),\n        D_AVX|D_POSTBYTE|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A,\n        1, 0x000000FF, 0x00000044, 0x10,\n        B_SREGI64x2|B_UPD,\n        B_SVEXI64x2,\n        B_SSEI64x2,\n        B_NONE },\n\n  { T(\"PCLMULHQHDQ\"),\n        D_SSE|D_POSTBYTE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00443A0F, 0x11,\n        B_SREGI64x2|B_UPD,\n        B_SSEI64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPCLMULHQHDQ\"),\n        D_AVX|D_POSTBYTE|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A,\n        1, 0x000000FF, 0x00000044, 0x11,\n        B_SREGI64x2|B_UPD,\n        B_SVEXI64x2,\n        B_SSEI64x2,\n        B_NONE },\n\n  { T(\"PCLMULQDQ\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00443A0F, 0x00,\n        B_SREGI64x2|B_UPD,\n        B_SSEI64x2,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VPCLMULQDQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A,\n        1, 0x000000FF, 0x00000044, 0x00,\n        B_SREGI64x2|B_UPD,\n        B_SVEXI64x2,\n        B_SSEI64x2,\n        B_CONST8|B_BINARY },\n\n  { T(\"PCMPEQQ\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0029380F, 0x00,\n        B_SREGI64x2|B_UPD,\n        B_SSEI64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPCMPEQQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x00000029, 0x00,\n        B_SREGI64x2|B_UPD,\n        B_SVEXI64x2,\n        B_SSEI64x2,\n        B_NONE },\n\n  { T(\"PCMPESTRI\"),\n        D_SSE|D_MUST66|D_ALLFLAGS, 0,\n        3, 0x00FFFFFF, 0x00613A0F, 0x00,\n        B_SREGI8x16,\n        B_SSEI8x16,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VPCMPESTRI\"),\n        D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD3A,\n        1, 0x000000FF, 0x00000061, 0x00,\n        B_SREGI8x16,\n        B_SSEI8x16,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"PCMPESTRM\"),\n        D_SSE|D_MUST66|D_ALLFLAGS, 0,\n        3, 0x00FFFFFF, 0x00603A0F, 0x00,\n        B_SREGI8x16,\n        B_SSEI8x16,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VPCMPESTRM\"),\n        D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD3A,\n        1, 0x000000FF, 0x00000060, 0x00,\n        B_SREGI8x16,\n        B_SSEI8x16,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"PCMPISTRI\"),\n        D_SSE|D_MUST66|D_ALLFLAGS, 0,\n        3, 0x00FFFFFF, 0x00633A0F, 0x00,\n        B_SREGI8x16,\n        B_SSEI8x16,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VPCMPISTRI\"),\n        D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD3A,\n        1, 0x000000FF, 0x00000063, 0x00,\n        B_SREGI8x16,\n        B_SSEI8x16,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"PCMPISTRM\"),\n        D_SSE|D_MUST66|D_ALLFLAGS, 0,\n        3, 0x00FFFFFF, 0x00623A0F, 0x00,\n        B_SREGI8x16,\n        B_SSEI8x16,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VPCMPISTRM\"),\n        D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD3A,\n        1, 0x000000FF, 0x00000062, 0x00,\n        B_SREGI8x16,\n        B_SSEI8x16,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"PCMPGTQ\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0037380F, 0x00,\n        B_SREGI64x2|B_UPD,\n        B_SSEI64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPCMPGTQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x00000037, 0x00,\n        B_SREGI64x2|B_UPD,\n        B_SVEXI64x2,\n        B_SSEI64x2,\n        B_NONE },\n\n  { T(\"PEXTRB\"),\n        D_SSE|D_MUST66|D_MEMORY, 0,\n        3, 0x00FFFFFF, 0x00143A0F, 0x00,\n        B_INT8|B_MEMORY|B_CHG,\n        B_SREGI8x16,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"PEXTRB\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        3, 0x00FFFFFF, 0x00143A0F, 0x00,\n        B_INT32|B_REGISTER|B_CHG,\n        B_SREGI8x16,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VPEXTRB\"),\n        D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LSHORT|DX_NOVREG|DX_W0|DX_LEAD3A,\n        1, 0x000000FF, 0x00000014, 0x00,\n        B_INT8|B_MEMORY|B_CHG,\n        B_SREGI8x16,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VPEXTRB\"),\n        D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT|DX_NOVREG|DX_W0|DX_LEAD3A,\n        1, 0x000000FF, 0x00000014, 0x00,\n        B_INT32|B_REGISTER|B_CHG,\n        B_SREGI8x16,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"PEXTRD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00163A0F, 0x00,\n        B_INT32|B_CHG,\n        B_SREGI32x4,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VPEXTRD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD3A,\n        1, 0x000000FF, 0x00000016, 0x00,\n        B_INT32|B_CHG,\n        B_SREGI32x4,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"PEXTRW\"),\n        D_SSE|D_MUST66|D_MEMORY, 0,\n        3, 0x00FFFFFF, 0x00153A0F, 0x00,\n        B_INT16|B_MEMORY|B_CHG,\n        B_SREGI16x8,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"PEXTRW\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        3, 0x00FFFFFF, 0x00153A0F, 0x00,\n        B_INT32|B_REGISTER|B_CHG,\n        B_SREGI16x8,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VPEXTRW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD3A,\n        1, 0x000000FF, 0x00000015, 0x00,\n        B_INT16|B_CHG,\n        B_SREGI16x8,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"PHMINPOSUW\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0041380F, 0x00,\n        B_SREGI16x8|B_CHG,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPHMINPOSUW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x00000041, 0x00,\n        B_SREGI16x8|B_CHG,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PINSRB\"),\n        D_SSE|D_MUST66|D_MEMORY, 0,\n        3, 0x00FFFFFF, 0x00203A0F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_INT8|B_MEMORY,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VPINSRB\"),\n        D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LSHORT|DX_W0|DX_LEAD3A,\n        1, 0x000000FF, 0x00000020, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_INT8|B_MEMORY,\n        B_CONST8|B_BINARY },\n\n  { T(\"PINSRB\"),\n        D_SSE|D_MUST66|D_REGISTER, 0,\n        3, 0x00FFFFFF, 0x00203A0F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_INT32|B_REGISTER,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VPINSRB\"),\n        D_AVX|D_MUST66|D_REGISTER, DX_VEX|DX_LSHORT|DX_W0|DX_LEAD3A,\n        1, 0x000000FF, 0x00000020, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_INT32|B_REGISTER,\n        B_CONST8|B_BINARY },\n\n  { T(\"PINSRD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00223A0F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_INT32,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VPINSRD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_W0|DX_LEAD3A,\n        1, 0x000000FF, 0x00000022, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SVEXI32x4,\n        B_INT32,\n        B_CONST8|B_BINARY },\n\n  { T(\"PMAXSB\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x003C380F, 0x00,\n        B_SREGI8x16|B_SIGNED|B_UPD,\n        B_SSEI8x16|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMAXSB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x0000003C, 0x00,\n        B_SREGI8x16|B_SIGNED|B_UPD,\n        B_SVEXI8x16|B_SIGNED,\n        B_SSEI8x16|B_SIGNED,\n        B_NONE },\n\n  { T(\"PMAXSD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x003D380F, 0x00,\n        B_SREGI32x4|B_SIGNED|B_UPD,\n        B_SSEI32x4|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMAXSD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x0000003D, 0x00,\n        B_SREGI32x4|B_SIGNED|B_UPD,\n        B_SVEXI32x4|B_SIGNED,\n        B_SSEI32x4|B_SIGNED,\n        B_NONE },\n\n  { T(\"PMAXUD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x003F380F, 0x00,\n        B_SREGI32x4|B_UNSIGNED|B_UPD,\n        B_SSEI32x4|B_UNSIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMAXUD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x0000003F, 0x00,\n        B_SREGI32x4|B_UNSIGNED|B_UPD,\n        B_SVEXI32x4|B_UNSIGNED,\n        B_SSEI32x4|B_UNSIGNED,\n        B_NONE },\n\n  { T(\"PMAXUW\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x003E380F, 0x00,\n        B_SREGI16x8|B_UNSIGNED|B_UPD,\n        B_SSEI16x8|B_UNSIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMAXUW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x0000003E, 0x00,\n        B_SREGI16x8|B_UNSIGNED|B_UPD,\n        B_SVEXI16x8|B_UNSIGNED,\n        B_SSEI16x8|B_UNSIGNED,\n        B_NONE },\n\n  { T(\"PMINSB\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0038380F, 0x00,\n        B_SREGI8x16|B_SIGNED|B_UPD,\n        B_SSEI8x16|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMINSB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x00000038, 0x00,\n        B_SREGI8x16|B_SIGNED|B_UPD,\n        B_SVEXI8x16|B_SIGNED,\n        B_SSEI8x16|B_SIGNED,\n        B_NONE },\n\n  { T(\"PMINSD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0039380F, 0x00,\n        B_SREGI32x4|B_SIGNED|B_UPD,\n        B_SSEI32x4|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMINSD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x00000039, 0x00,\n        B_SREGI32x4|B_SIGNED|B_UPD,\n        B_SVEXI32x4|B_SIGNED,\n        B_SSEI32x4|B_SIGNED,\n        B_NONE },\n\n  { T(\"PMINUD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x003B380F, 0x00,\n        B_SREGI32x4|B_UNSIGNED|B_UPD,\n        B_SSEI32x4|B_UNSIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMINUD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x0000003B, 0x00,\n        B_SREGI32x4|B_UNSIGNED|B_UPD,\n        B_SVEXI32x4|B_UNSIGNED,\n        B_SSEI32x4|B_UNSIGNED,\n        B_NONE },\n\n  { T(\"PMINUW\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x003A380F, 0x00,\n        B_SREGI16x8|B_UNSIGNED|B_UPD,\n        B_SSEI16x8|B_UNSIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMINUW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x0000003A, 0x00,\n        B_SREGI16x8|B_UNSIGNED|B_UPD,\n        B_SVEXI16x8|B_UNSIGNED,\n        B_SSEI16x8|B_UNSIGNED,\n        B_NONE },\n\n  { T(\"PMOVSXBW\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0020380F, 0x00,\n        B_SREGI16x8|B_SIGNED|B_CHG,\n        B_SSEI8x8L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMOVSXBW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x00000020, 0x00,\n        B_SREGI16x8|B_SIGNED|B_CHG,\n        B_SSEI8x8L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMOVSXBD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0021380F, 0x00,\n        B_SREGI32x4|B_SIGNED|B_CHG,\n        B_SSEI8x4L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMOVSXBD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x00000021, 0x00,\n        B_SREGI32x4|B_SIGNED|B_CHG,\n        B_SSEI8x4L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMOVSXBQ\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0022380F, 0x00,\n        B_SREGI64x2|B_SIGNED|B_CHG,\n        B_SSEI8x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMOVSXBQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x00000022, 0x00,\n        B_SREGI64x2|B_SIGNED|B_CHG,\n        B_SSEI8x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMOVSXWD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0023380F, 0x00,\n        B_SREGI32x4|B_SIGNED|B_CHG,\n        B_SSEI16x4L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMOVSXWD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x00000023, 0x00,\n        B_SREGI32x4|B_SIGNED|B_CHG,\n        B_SSEI16x4L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMOVSXWQ\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0024380F, 0x00,\n        B_SREGI64x2|B_SIGNED|B_CHG,\n        B_SSEI16x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMOVSXWQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x00000024, 0x00,\n        B_SREGI64x2|B_SIGNED|B_CHG,\n        B_SSEI16x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMOVSXDQ\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0025380F, 0x00,\n        B_SREGI64x2|B_SIGNED|B_CHG,\n        B_SSEI32x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMOVSXDQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x00000025, 0x00,\n        B_SREGI64x2|B_SIGNED|B_CHG,\n        B_SSEI32x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMOVZXBW\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0030380F, 0x00,\n        B_SREGI16x8|B_CHG,\n        B_SSEI8x8L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMOVZXBW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x00000030, 0x00,\n        B_SREGI16x8|B_CHG,\n        B_SSEI8x8L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMOVZXBD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0031380F, 0x00,\n        B_SREGI32x4|B_CHG,\n        B_SSEI8x4L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMOVZXBD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x00000031, 0x00,\n        B_SREGI32x4|B_CHG,\n        B_SSEI8x4L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMOVZXBQ\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0032380F, 0x00,\n        B_SREGI64x2|B_CHG,\n        B_SSEI8x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMOVZXBQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x00000032, 0x00,\n        B_SREGI64x2|B_CHG,\n        B_SSEI8x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMOVZXWD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0033380F, 0x00,\n        B_SREGI32x4|B_CHG,\n        B_SSEI16x4L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMOVZXWD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x00000033, 0x00,\n        B_SREGI32x4|B_CHG,\n        B_SSEI16x4L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMOVZXWQ\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0034380F, 0x00,\n        B_SREGI64x2|B_CHG,\n        B_SSEI16x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMOVZXWQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x00000034, 0x00,\n        B_SREGI64x2|B_CHG,\n        B_SSEI16x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMOVZXDQ\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0035380F, 0x00,\n        B_SREGI64x2|B_CHG,\n        B_SSEI32x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMOVZXDQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x00000035, 0x00,\n        B_SREGI64x2|B_CHG,\n        B_SSEI32x2L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMULDQ\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0028380F, 0x00,\n        B_SREGI32x4|B_SIGNED|B_UPD,\n        B_SSEI32x4|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMULDQ\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x00000028, 0x00,\n        B_SREGI32x4|B_SIGNED|B_UPD,\n        B_SVEXI32x4|B_SIGNED,\n        B_SSEI32x4|B_SIGNED,\n        B_NONE },\n\n  { T(\"PMULLD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0040380F, 0x00,\n        B_SREGI32x4|B_SIGNED|B_UPD,\n        B_SSEI32x4|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMULLD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x00000040, 0x00,\n        B_SREGI32x4|B_SIGNED|B_UPD,\n        B_SVEXI32x4|B_SIGNED,\n        B_SSEI32x4|B_SIGNED,\n        B_NONE },\n\n  { T(\"PTEST\"),\n        D_SSE|D_MUST66|D_ALLFLAGS, 0,\n        3, 0x00FFFFFF, 0x0017380F, 0x00,\n        B_SREGI32x4,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPTEST\"),\n        D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_LBOTH|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x00000017, 0x00,\n        B_SREGI32x4,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ROUNDPD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00093A0F, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VROUNDPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG|DX_LEAD3A,\n        1, 0x000000FF, 0x00000009, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"ROUNDPS\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00083A0F, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VROUNDPS\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG|DX_LEAD3A,\n        1, 0x000000FF, 0x00000008, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"ROUNDSD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x000B3A0F, 0x00,\n        B_SREGF64L|B_CHG,\n        B_SSEF64L,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VROUNDSD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_IGNOREL|DX_LEAD3A,\n        1, 0x000000FF, 0x0000000B, 0x00,\n        B_SREGF64L|B_CHG,\n        B_SVEXF64L,\n        B_SSEF64L,\n        B_CONST8|B_BINARY },\n\n  { T(\"ROUNDSS\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x000A3A0F, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SSEF32L,\n        B_CONST8|B_BINARY,\n        B_NONE },\n\n  { T(\"VROUNDSS\"),\n        D_AVX|D_MUST66, DX_VEX|DX_IGNOREL|DX_LEAD3A,\n        1, 0x000000FF, 0x0000000A, 0x00,\n        B_SREGF32L|B_CHG,\n        B_SVEXF32L,\n        B_SSEF32L,\n        B_CONST8|B_BINARY },\n\n  { T(\"PABSB\"),\n        D_MMX|D_MUSTNONE, 0,\n        3, 0x00FFFFFF, 0x001C380F, 0x00,\n        B_MREG8x8|B_UNSIGNED|B_CHG,\n        B_MMX8x8|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PABSB\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x001C380F, 0x00,\n        B_SREGI8x16|B_UNSIGNED|B_CHG,\n        B_SSEI8x16|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPABSB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x0000001C, 0x00,\n        B_SREGI8x16|B_UNSIGNED|B_CHG,\n        B_SSEI8x16|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PABSW\"),\n        D_MMX|D_MUSTNONE, 0,\n        3, 0x00FFFFFF, 0x001D380F, 0x00,\n        B_MREG16x4|B_UNSIGNED|B_CHG,\n        B_MMX16x4|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PABSW\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x001D380F, 0x00,\n        B_SREGI16x8|B_UNSIGNED|B_CHG,\n        B_SSEI16x8|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPABSW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x0000001D, 0x00,\n        B_SREGI16x8|B_UNSIGNED|B_CHG,\n        B_SSEI16x8|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PABSD\"),\n        D_MMX|D_MUSTNONE, 0,\n        3, 0x00FFFFFF, 0x001E380F, 0x00,\n        B_MREG32x2|B_UNSIGNED|B_CHG,\n        B_MMX32x2|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PABSD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x001E380F, 0x00,\n        B_SREGI32x4|B_UNSIGNED|B_CHG,\n        B_SSEI32x4|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPABSD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x0000001E, 0x00,\n        B_SREGI32x4|B_UNSIGNED|B_CHG,\n        B_SSEI32x4|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PALIGNR\"),\n        D_MMX|D_MUSTNONE, 0,\n        3, 0x00FFFFFF, 0x000F3A0F, 0x00,\n        B_MREG8x8|B_BINARY|B_UPD,\n        B_MMX8x8|B_BINARY,\n        B_CONST8|B_UNSIGNED,\n        B_NONE },\n\n  { T(\"PALIGNR\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x000F3A0F, 0x00,\n        B_SREGI8x16|B_BINARY|B_UPD,\n        B_SSEI8x16|B_BINARY,\n        B_CONST8|B_UNSIGNED,\n        B_NONE },\n\n  { T(\"VPALIGNR\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD3A,\n        1, 0x000000FF, 0x0000000F, 0x00,\n        B_SREGI8x16|B_BINARY|B_UPD,\n        B_SVEXI8x16|B_BINARY,\n        B_SSEI8x16|B_BINARY,\n        B_CONST8|B_UNSIGNED },\n\n  { T(\"PHADDW\"),\n        D_MMX|D_MUSTNONE, 0,\n        3, 0x00FFFFFF, 0x0001380F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PHADDW\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0001380F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPHADDW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x00000001, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PHADDD\"),\n        D_MMX|D_MUSTNONE, 0,\n        3, 0x00FFFFFF, 0x0002380F, 0x00,\n        B_MREG32x2|B_UPD,\n        B_MMX32x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PHADDD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0002380F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPHADDD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x00000002, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SVEXI32x4,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"PHSUBW\"),\n        D_MMX|D_MUSTNONE, 0,\n        3, 0x00FFFFFF, 0x0005380F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PHSUBW\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0005380F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPHSUBW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x00000005, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PHSUBD\"),\n        D_MMX|D_MUSTNONE, 0,\n        3, 0x00FFFFFF, 0x0006380F, 0x00,\n        B_MREG32x2|B_UPD,\n        B_MMX32x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PHSUBD\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0006380F, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SSEI32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPHSUBD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x00000006, 0x00,\n        B_SREGI32x4|B_UPD,\n        B_SVEXI32x4,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"PHADDSW\"),\n        D_MMX|D_MUSTNONE, 0,\n        3, 0x00FFFFFF, 0x0003380F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PHADDSW\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0003380F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPHADDSW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x00000003, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PHSUBSW\"),\n        D_MMX|D_MUSTNONE, 0,\n        3, 0x00FFFFFF, 0x0007380F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PHSUBSW\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0007380F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPHSUBSW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x00000007, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PMADDUBSW\"),\n        D_MMX|D_MUSTNONE, 0,\n        3, 0x00FFFFFF, 0x0004380F, 0x00,\n        B_MREG8x8|B_UNSIGNED|B_UPD,\n        B_MMX8x8|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMADDUBSW\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0004380F, 0x00,\n        B_SREGI8x16|B_UNSIGNED|B_UPD,\n        B_SSEI8x16|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMADDUBSW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x00000004, 0x00,\n        B_SREGI8x16|B_UNSIGNED|B_UPD,\n        B_SVEXI8x16|B_UNSIGNED,\n        B_SSEI8x16|B_SIGNED,\n        B_NONE },\n\n  { T(\"PMULHRSW\"),\n        D_MMX|D_MUSTNONE, 0,\n        3, 0x00FFFFFF, 0x000B380F, 0x00,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMULHRSW\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x000B380F, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SSEI16x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPMULHRSW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x0000000B, 0x00,\n        B_SREGI16x8|B_UPD,\n        B_SVEXI16x8,\n        B_SSEI16x8,\n        B_NONE },\n\n  { T(\"PSHUFB\"),\n        D_MMX|D_MUSTNONE, 0,\n        3, 0x00FFFFFF, 0x0000380F, 0x00,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSHUFB\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0000380F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSHUFB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x00000000, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SVEXI8x16,\n        B_SSEI8x16|B_BINARY,\n        B_NONE },\n\n  { T(\"PSIGNB\"),\n        D_MMX|D_MUSTNONE, 0,\n        3, 0x00FFFFFF, 0x0008380F, 0x00,\n        B_MREG8x8|B_SIGNED|B_UPD,\n        B_MMX8x8|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSIGNB\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0008380F, 0x00,\n        B_SREGI8x16|B_SIGNED|B_UPD,\n        B_SSEI8x16|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSIGNB\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x00000008, 0x00,\n        B_SREGI8x16|B_SIGNED|B_UPD,\n        B_SVEXI8x16|B_SIGNED,\n        B_SSEI8x16|B_SIGNED,\n        B_NONE },\n\n  { T(\"PSIGNW\"),\n        D_MMX|D_MUSTNONE, 0,\n        3, 0x00FFFFFF, 0x0009380F, 0x00,\n        B_MREG16x4|B_SIGNED|B_UPD,\n        B_MMX16x4|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSIGNW\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x0009380F, 0x00,\n        B_SREGI16x8|B_SIGNED|B_UPD,\n        B_SSEI16x8|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSIGNW\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x00000009, 0x00,\n        B_SREGI16x8|B_SIGNED|B_UPD,\n        B_SVEXI16x8|B_SIGNED,\n        B_SSEI16x8|B_SIGNED,\n        B_NONE },\n\n  { T(\"PSIGND\"),\n        D_MMX|D_MUSTNONE, 0,\n        3, 0x00FFFFFF, 0x000A380F, 0x00,\n        B_MREG32x2|B_SIGNED|B_UPD,\n        B_MMX32x2|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSIGND\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x000A380F, 0x00,\n        B_SREGI32x4|B_SIGNED|B_UPD,\n        B_SSEI32x4|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VPSIGND\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x0000000A, 0x00,\n        B_SREGI32x4|B_SIGNED|B_UPD,\n        B_SVEXI32x4|B_SIGNED,\n        B_SSEI32x4|B_SIGNED,\n        B_NONE },\n\n  { T(\"VBROADCASTSS\"),\n        D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LBOTH|DX_NOVREG|DX_W0|DX_LEAD38,\n        1, 0x000000FF, 0x00000018, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32L|B_MEMORY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VBROADCASTSD\"),\n        D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LLONG|DX_NOVREG|DX_W0|DX_LEAD38,\n        1, 0x000000FF, 0x00000019, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64L|B_MEMORY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VBROADCASTF128\"),\n        D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LLONG|DX_NOVREG|DX_W0|DX_LEAD38,\n        1, 0x000000FF, 0x0000001A, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2|B_MEMORY|B_NOVEXSIZE|B_SHOWSIZE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VEXTRACTF128\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LLONG|DX_NOVREG|DX_W0|DX_LEAD3A,\n        1, 0x000000FF, 0x00000019, 0x00,\n        B_SSEF64x2|B_NOVEXSIZE|B_SHOWSIZE|B_CHG,\n        B_SREGF64x2,\n        B_CONST8,\n        B_NONE },\n\n  { T(\"VINSERTF128\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LLONG|DX_W0|DX_LEAD3A,\n        1, 0x000000FF, 0x00000018, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SVEXF64x2,\n        B_SSEF64x2|B_NOVEXSIZE|B_SHOWSIZE,\n        B_CONST8 },\n\n  { T(\"VMASKMOVPS\"),\n        D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LBOTH|DX_W0|DX_LEAD38,\n        1, 0x000000FF, 0x0000002C, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SVEXF32x4,\n        B_SSEF32x4|B_MEMORY,\n        B_NONE },\n\n  { T(\"VMASKMOVPS\"),\n        D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LBOTH|DX_W0|DX_LEAD38,\n        1, 0x000000FF, 0x0000002E, 0x00,\n        B_SSEF32x4|B_MEMORY|B_CHG,\n        B_SVEXF32x4,\n        B_SREGF32x4,\n        B_NONE },\n\n  { T(\"VMASKMOVPD\"),\n        D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LBOTH|DX_W0|DX_LEAD38,\n        1, 0x000000FF, 0x0000002D, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SVEXF64x2,\n        B_SSEF64x2|B_MEMORY,\n        B_NONE },\n\n  { T(\"VMASKMOVPD\"),\n        D_AVX|D_MUST66|D_MEMORY, DX_VEX|DX_LBOTH|DX_W0|DX_LEAD38,\n        1, 0x000000FF, 0x0000002F, 0x00,\n        B_SSEF64x2|B_MEMORY|B_CHG,\n        B_SVEXF64x2,\n        B_SREGF64x2,\n        B_NONE },\n\n  { T(\"VPERMILPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_W0|DX_LEAD38,\n        1, 0x000000FF, 0x0000000D, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SVEXF64x2,\n        B_SSEI64x2,\n        B_NONE },\n\n  { T(\"VPERMILPD\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG|DX_W0|DX_LEAD3A,\n        1, 0x000000FF, 0x00000005, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SSEF64x2,\n        B_CONST8,\n        B_NONE },\n\n  { T(\"VPERMILPS\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_W0|DX_LEAD38,\n        1, 0x000000FF, 0x0000000C, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SVEXF32x4,\n        B_SSEI32x4,\n        B_NONE },\n\n  { T(\"VPERMILPS\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG|DX_W0|DX_LEAD3A,\n        1, 0x000000FF, 0x00000004, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEF32x4,\n        B_CONST8,\n        B_NONE },\n\n  { T(\"VPERM2F128\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LLONG|DX_W0|DX_LEAD3A,\n        1, 0x000000FF, 0x00000006, 0x00,\n        B_SREGF64x2|B_CHG,\n        B_SVEXF64x2,\n        B_SSEF64x2,\n        B_CONST8 },\n\n  { T(\"VTESTPS\"),\n        D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_LBOTH|DX_NOVREG|DX_W0|DX_LEAD38,\n        1, 0x000000FF, 0x0000000E, 0x00,\n        B_SREGF32x4,\n        B_SSEF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VTESTPD\"),\n        D_AVX|D_MUST66|D_ALLFLAGS, DX_VEX|DX_LBOTH|DX_NOVREG|DX_W0|DX_LEAD38,\n        1, 0x000000FF, 0x0000000F, 0x00,\n        B_SREGF64x2,\n        B_SSEF64x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VZEROALL\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LLONG|DX_NOVREG,\n        1, 0x000000FF, 0x00000077, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VZEROUPPER\"),\n        D_AVX|D_MUSTNONE, DX_VEX|DX_LSHORT|DX_NOVREG,\n        1, 0x000000FF, 0x00000077, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"AESDEC\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00DE380F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VAESDEC\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x000000DE, 0x00,\n        B_SREGI8x16|B_CHG,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"AESDECLAST\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00DF380F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VAESDECLAST\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x000000DF, 0x00,\n        B_SREGI8x16|B_CHG,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"AESENC\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00DC380F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VAESENC\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x000000DC, 0x00,\n        B_SREGI8x16|B_CHG,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"AESENCLAST\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00DD380F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VAESENCLAST\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_LEAD38,\n        1, 0x000000FF, 0x000000DD, 0x00,\n        B_SREGI8x16|B_CHG,\n        B_SVEXI8x16,\n        B_SSEI8x16,\n        B_NONE },\n\n  { T(\"AESIMC\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00DB380F, 0x00,\n        B_SREGI8x16|B_CHG,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VAESIMC\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD38,\n        1, 0x000000FF, 0x000000DB, 0x00,\n        B_SREGI8x16|B_CHG,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"AESKEYGENASSIST\"),\n        D_SSE|D_MUST66, 0,\n        3, 0x00FFFFFF, 0x00DF3A0F, 0x00,\n        B_SREGI8x16|B_CHG,\n        B_SSEI8x16,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"VAESKEYGENASSIST\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LSHORT|DX_NOVREG|DX_LEAD3A,\n        1, 0x000000FF, 0x000000DF, 0x00,\n        B_SREGI8x16|B_CHG,\n        B_SSEI8x16,\n        B_CONST8|B_COUNT,\n        B_NONE },\n\n  { T(\"VCVTPH2PS\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG|DX_W0|DX_LEAD38,\n        1, 0x000000FF, 0x00000013, 0x00,\n        B_SREGF32x4|B_CHG,\n        B_SSEI16x4L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VCVTPS2PH\"),\n        D_AVX|D_MUST66, DX_VEX|DX_LBOTH|DX_NOVREG|DX_W0|DX_LEAD3A,\n        1, 0x000000FF, 0x0000001D, 0x00,\n        B_SSEI16x4L|B_CHG,\n        B_SREGF32x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LZCNT\"),\n        D_CMD|D_NEEDF3|D_ALLFLAGS, 0,\n        2, 0x0000FFFF, 0x0000BD0F, 0x00,\n        B_REG|B_CHG,\n        B_INT|B_BINARY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"POPCNT\"),\n        D_CMD|D_NEEDF3|D_ALLFLAGS, 0,\n        2, 0x0000FFFF, 0x0000B80F, 0x00,\n        B_REG|B_CHG,\n        B_INT|B_NOADDR,\n        B_NONE,\n        B_NONE },\n\n  { T(\"EXTRQ\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0038FFFF, 0x0000780F, 0x00,\n        B_SSEI8x16|B_REGONLY|B_UPD,\n        B_CONST8|B_COUNT,\n        B_CONST8_2|B_COUNT,\n        B_NONE },\n\n  { T(\"EXTRQ\"),\n        D_SSE|D_MUST66, 0,\n        2, 0x0000FFFF, 0x0000790F, 0x00,\n        B_SREGI8x16|B_UPD,\n        B_SSEI8x2L|B_REGONLY,\n        B_NONE,\n        B_NONE },\n\n  { T(\"INSERTQ\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x0000780F, 0x00,\n        B_SREGI8x16|B_REGONLY|B_UPD,\n        B_SSEI8x8L,\n        B_CONST8|B_COUNT,\n        B_CONST8_2|B_COUNT },\n\n  { T(\"INSERTQ\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x0000790F, 0x00,\n        B_SREGI8x16|B_REGONLY|B_UPD,\n        B_SSEI8x16,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVNTSD\"),\n        D_SSE|D_MUSTF2, 0,\n        2, 0x0000FFFF, 0x00002B0F, 0x00,\n        B_SSEF64L|B_MEMONLY|B_CHG,\n        B_SREGF64L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"MOVNTSS\"),\n        D_SSE|D_MUSTF3, 0,\n        2, 0x0000FFFF, 0x00002B0F, 0x00,\n        B_SSEF32L|B_MEMONLY|B_CHG,\n        B_SREGF32L,\n        B_NONE,\n        B_NONE },\n\n  { T(\"INVEPT\"),\n        D_PRIVILEGED|D_MUST66|D_MEMORY|D_RARE, 0,\n        3, 0x00FFFFFF, 0x0080380F, 0x00,\n        B_REG32,\n        B_INT128,\n        B_NONE,\n        B_NONE },\n\n  { T(\"INVVPID\"),\n        D_PRIVILEGED|D_MUST66|D_MEMORY|D_RARE, 0,\n        3, 0x00FFFFFF, 0x0081380F, 0x00,\n        B_REG32,\n        B_INT128,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMCALL\"),\n        D_PRIVILEGED|D_RARE, 0,\n        3, 0x00FFFFFF, 0x00C1010F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMCLEAR\"),\n        D_PRIVILEGED|D_MUST66|D_MEMORY|D_RARE, 0,\n        2, 0x0038FFFF, 0x0030C70F, 0x00,\n        B_INT64|B_MEMONLY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMLAUNCH\"),\n        D_PRIVILEGED|D_RARE, 0,\n        3, 0x00FFFFFF, 0x00C2010F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMFUNC\"),\n        D_PRIVILEGED|D_RARE, 0,\n        3, 0x00FFFFFF, 0x00D4010F, 0x00,\n        B_EAX|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"XEND\"),\n        D_PRIVILEGED|D_RARE, 0,\n        3, 0x00FFFFFF, 0x00D5010F, 0x00,\n        B_EAX|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"XTEST\"),\n        D_PRIVILEGED|D_RARE, 0,\n        3, 0x00FFFFFF, 0x00D6010F, 0x00,\n        B_EAX|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMRESUME\"),\n        D_PRIVILEGED|D_RARE, 0,\n        3, 0x00FFFFFF, 0x00C3010F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMPTRLD\"),\n        D_PRIVILEGED|D_MUSTNONE|D_MEMORY|D_RARE, 0,\n        2, 0x0038FFFF, 0x0030C70F, 0x00,\n        B_INT64|B_MEMONLY,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMPTRST\"),\n        D_PRIVILEGED|D_MUSTNONE|D_MEMORY|D_RARE, 0,\n        2, 0x0038FFFF, 0x0038C70F, 0x00,\n        B_INT64|B_MEMONLY|B_CHG,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMREAD\"),\n        D_PRIVILEGED|D_MUSTNONE|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000780F, 0x00,\n        B_INT32|B_CHG,\n        B_REG32,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMWRITE\"),\n        D_PRIVILEGED|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000790F, 0x00,\n        B_REG32,\n        B_INT32,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMXOFF\"),\n        D_PRIVILEGED|D_RARE, 0,\n        3, 0x00FFFFFF, 0x00C4010F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMXON\"),\n        D_PRIVILEGED|D_MUSTF3|D_MEMORY|D_RARE, 0,\n        2, 0x0038FFFF, 0x0030C70F, 0x00,\n        B_INT64,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"GETSEC\"),\n        D_PRIVILEGED|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000370F, 0x00,\n        B_EAX|B_UPD|B_PSEUDO,\n        B_EBX|B_PSEUDO,\n        B_ECX|B_PSEUDO,\n        B_NONE },\n\n  { T(\"FEMMS\"),\n        D_CMD, 0,\n        2, 0x0000FFFF, 0x00000E0F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PAVGUSB\"),\n        D_MMX|D_POSTBYTE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0xBF,\n        B_MREG8x8|B_UPD,\n        B_MMX8x8,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PF2ID\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0x1D,\n        B_MREG32x2|B_CHG,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFACC\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0xAE,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFADD\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0x9E,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFCMPEQ\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0xB0,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFCMPGE\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0x90,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFCMPGT\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0xA0,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFMAX\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0xA4,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFMIN\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0x94,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFMUL\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0xB4,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFRCP\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0x96,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFRCPIT1\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0xA6,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFRCPIT2\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0xB6,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFRSQIT1\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0xA7,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFRSQRT\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0x97,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFSUB\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0x9A,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFSUBR\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0xAA,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PI2FD\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0x0D,\n        B_3DREG|B_UPD,\n        B_MMX32x2|B_SIGNED,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PMULHRW\"),\n        D_MMX|D_POSTBYTE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0xB7,\n        B_MREG16x4|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PF2IW\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0x1C,\n        B_MREG32x2|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFNACC\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0x8A,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PFPNACC\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0x8E,\n        B_3DREG|B_UPD,\n        B_3DNOW,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PI2FW\"),\n        D_3DNOW|D_POSTBYTE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0x0C,\n        B_3DREG|B_UPD,\n        B_MMX16x4,\n        B_NONE,\n        B_NONE },\n\n  { T(\"PSWAPD\"),\n        D_MMX|D_POSTBYTE|D_MUSTNONE, 0,\n        2, 0x0000FFFF, 0x00000F0F, 0xBB,\n        B_MREG32x2|B_UPD,\n        B_MMX32x2,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SYSCALL\"),\n        D_SYS|D_RARE, 0,\n        2, 0x0000FFFF, 0x0000050F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SYSRET\"),\n        D_SYS|D_ALLFLAGS|D_SUSPICIOUS, 0,\n        2, 0x0000FFFF, 0x0000070F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CLGI\"),\n        D_PRIVILEGED, 0,\n        3, 0x00FFFFFF, 0x00DD010F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"STGI\"),\n        D_PRIVILEGED, 0,\n        3, 0x00FFFFFF, 0x00DC010F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"INVLPGA\"),\n        D_PRIVILEGED|D_RARE, 0,\n        3, 0x00FFFFFF, 0x00DF010F, 0x00,\n        B_EAX|B_PSEUDO,\n        B_ECX|B_PSEUDO,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SKINIT\"),\n        D_PRIVILEGED, 0,\n        3, 0x00FFFFFF, 0x00DE010F, 0x00,\n        B_EAX|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMLOAD\"),\n        D_PRIVILEGED, 0,\n        3, 0x00FFFFFF, 0x00DA010F, 0x00,\n        B_EAX|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMMCALL\"),\n        D_SYS|D_SUSPICIOUS, 0,\n        3, 0x00FFFFFF, 0x00D9010F, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMRUN\"),\n        D_PRIVILEGED, 0,\n        3, 0x00FFFFFF, 0x00D8010F, 0x00,\n        B_EAX|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"VMSAVE\"),\n        D_PRIVILEGED, 0,\n        3, 0x00FFFFFF, 0x00DB010F, 0x00,\n        B_EAX|B_PSEUDO,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ES:\"),\n        D_PREFIX|D_SUSPICIOUS, 0,\n        1, 0x000000FF, 0x00000026, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CS:\"),\n        D_PREFIX|D_SUSPICIOUS, 0,\n        1, 0x000000FF, 0x0000002E, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SS:\"),\n        D_PREFIX|D_SUSPICIOUS, 0,\n        1, 0x000000FF, 0x00000036, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"DS:\"),\n        D_PREFIX|D_SUSPICIOUS, 0,\n        1, 0x000000FF, 0x0000003E, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FS:\"),\n        D_PREFIX|D_SUSPICIOUS, 0,\n        1, 0x000000FF, 0x00000064, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"GS:\"),\n        D_PREFIX|D_SUSPICIOUS, 0,\n        1, 0x000000FF, 0x00000065, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"DATASIZE:\"),\n        D_PREFIX|D_SUSPICIOUS, 0,\n        1, 0x000000FF, 0x00000066, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"ADDRSIZE:\"),\n        D_PREFIX|D_SUSPICIOUS, 0,\n        1, 0x000000FF, 0x00000067, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"LOCK\"),\n        D_PREFIX|D_SUSPICIOUS, 0,\n        1, 0x000000FF, 0x000000F0, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"REPNE\"),\n        D_PREFIX|D_SUSPICIOUS, 0,\n        1, 0x000000FF, 0x000000F2, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"REPNZ\"),\n        D_PREFIX|D_SUSPICIOUS, 0,\n        1, 0x000000FF, 0x000000F2, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"REP\"),\n        D_PREFIX|D_SUSPICIOUS, 0,\n        1, 0x000000FF, 0x000000F3, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"REPE\"),\n        D_PREFIX|D_SUSPICIOUS, 0,\n        1, 0x000000FF, 0x000000F3, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"REPZ\"),\n        D_PREFIX|D_SUSPICIOUS, 0,\n        1, 0x000000FF, 0x000000F3, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JCC\"),\n        D_PSEUDO|D_BHINT|D_COND, 0,\n        1, 0x000000F0, 0x00000070, 0x00,\n        B_BYTEOFFS|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"JCC\"),\n        D_PSEUDO|D_BHINT|D_COND, 0,\n        2, 0x0000F0FF, 0x0000800F, 0x00,\n        B_OFFSET|B_JMPCALL,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"SETCC\"),\n        D_PSEUDO|D_COND, 0,\n        2, 0x0038F0FF, 0x0000900F, 0x00,\n        B_INT8|B_SHOWSIZE|B_CHG,\n        B_NONE,\n        B_NONE,\n        B_NONE },\n\n  { T(\"CMOVCC\"),\n        D_PSEUDO|D_COND, 0,\n        2, 0x0000F0FF, 0x0000400F, 0x00,\n        B_REG|B_UPD,\n        B_INT,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCMOVCC\"),\n        D_PSEUDO|D_COND, 0,\n        2, 0x0000E0FF, 0x0000C0DA, 0x00,\n        B_ST0|B_CHG,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { T(\"FCMOVCC\"),\n        D_PSEUDO|D_COND, 0,\n        2, 0x0000E0FF, 0x0000C0DB, 0x00,\n        B_ST0|B_CHG,\n        B_ST,\n        B_NONE,\n        B_NONE },\n\n  { NULL,\n        0, 0,\n        0, 0x00000000, 0x00000000, 0x00,\n        B_NONE,\n        B_NONE,\n        B_NONE,\n        B_NONE\n  }\n\n};\n\n"
  },
  {
    "path": "Disasm201/disasm.def",
    "content": "LIBRARY disasm\nEXPORTS\n\t\tPreparedisasm\t\t@1\n\t\tFinishdisasm\t\t@2\n\t\tDisasm\t\t\t\t@3\n\t\tGeterrwarnmessage\t@4\n"
  },
  {
    "path": "Disasm201/disasm.h",
    "content": "////////////////////////////////////////////////////////////////////////////////\n//                                                                            //\n// OllyDbg Disassembling Engine v2.01                                         //\n//                                                                            //\n// Copyright (c) 2007-2013 Oleh Yuschuk, ollydbg@t-online.de                  //\n//                                                                            //\n// This code is part of the OllyDbg Disassembler v2.01                        //\n//                                                                            //\n// Disassembling engine is free software; you can redistribute it and/or      //\n// modify it under the terms of the GNU General Public License as published   //\n// by the Free Software Foundation; either version 3 of the License, or (at   //\n// your option) any later version.                                            //\n//                                                                            //\n// This code is distributed in the hope that it will be useful, but WITHOUT   //\n// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or      //\n// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for   //\n// more details.                                                              //\n//                                                                            //\n// You should have received a copy of the GNU General Public License along    //\n// with this program. If not, see <http://www.gnu.org/licenses/>.             //\n//                                                                            //\n////////////////////////////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////////////////////////////\n//                                                                            //\n// This is a fast disassembler that can be used to determine the length of    //\n// the binary 80x86 32-bit command and its attributes, to convert it to the   //\n// human-readable text form, highlight its operands, and create hexadecimal   //\n// dump of the binary command.                                                //\n//                                                                            //\n// It is a stripped down version of the disassembler used by OllyDbg 2.01.    //\n// It can't analyse and comment the contents of the operands, or predict the  //\n// results of the command execution. Analysis-dependent features are not      //\n// included, too. Most other features are kept.                               //\n//                                                                            //\n// Disassembler supports integer, FPU, MMX, 3DNow, SSE1-SSE4.1 and AVX        //\n// instructions. 64-bit mode, AVX2, FMA and XOP are not (yet) supported.      //\n//                                                                            //\n// This code can be compiled either in ASCII or UNICODE mode. It is reentrant //\n// (thread-safe, feature not available in the original OllyDbg code).         //\n//                                                                            //\n// Typical operation speed on 3-GHz Phenom II in MASM mode is:                //\n//                                                                            //\n//   Command length and info:          130 ns/command (7,700,000 commands/s)  //\n//   Disassembly:                      290 ns/command (3,400,000 commands/s)  //\n//   Disassembly, dump, highlighting:  350 ns/command (2,800,000 commands/s)  //\n//                                                                            //\n////////////////////////////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////////////////////////////\n////////////// PREFERRED SETTINGS AND FIXES FOR BORLAND COMPILERS //////////////\n\n#ifdef __BORLANDC__\n  #pragma option -a1                   // Byte alignment\n  #pragma option -w-pin                // Disable \"partially bracketed\" warning\n  // Redefinition of MAKELONG removes nasty warning under Borland Builder 4.0:\n  // boolean OR in one row with arithmetical shift.\n  #undef  MAKELONG\n  #define MAKELONG(lo,hi) ((LONG)(((WORD)(lo))|(((DWORD)((WORD)(hi)))<<16)))\n#endif\n\n#define MAKEWP(lo,hi)  ((WPARAM)MAKELONG(lo,hi))\n#define MAKELP(lo,hi)  ((LPARAM)MAKELONG(lo,hi))\n\n#define LOINT(l)       ((signed short)((WORD)(l)))\n#define HIINT(l)       ((signed short)(((DWORD)(l)>>16) & 0xFFFF))\n\n#ifndef FIELD_OFFSET\n  #define FIELD_OFFSET(type,field) ((long)&(((type *)0)->field))\n#endif\n\n\n////////////////////////////////////////////////////////////////////////////////\n\n#define TEXTLEN        256             // Max length of text string\n#define SHORTNAME      32              // Max length of short or module name\n\n#ifdef UNICODE\n  #define tchar        wchar_t         // Or replace it with TCHAR\n  #define T(x)         L##x\n  #define tstrlen      wcslen\n  #define tstrcpy      wcscpy\n  #define tstrcmp      wcscmp\n  #define tstrlwr      _wcslwr\n  #define tsprintf     swprintf\n  #define ttolower     towlower\n#else\n  #define tchar        char\n  #define T(x)         x\n  #define tstrlen      strlen\n  #define tstrcpy      strcpy\n  #define tstrcmp      strcmp\n  #define tstrlwr      strlwr\n  #define tsprintf     sprintf\n  #define ttolower     tolower\n#endif\n\n#define NOPERAND       4               // Maximal allowed number of operands\n#define NREG           8               // Number of registers (of any type)\n#define NSEG           6               // Number of valid segment registers\n#define MAXCMDSIZE     16              // Maximal length of valid 80x86 command\n#define NEGLIMIT       (-16384)        // Limit to decode offsets as negative\n#define DECLIMIT       16384           // Limit to decode constants as decimal\n\ntypedef unsigned char  uchar;          // Unsigned character (byte)\ntypedef unsigned short ushort;         // Unsigned short\ntypedef unsigned int   uint;           // Unsigned integer\ntypedef unsigned long  ulong;          // Unsigned long\n\n// CMDMASK can be used to balance between the necessary memory size and the\n// disassembly time.\n#define CMDMASK        0x3FFF          // Search mask for Disassembler, 2**n-1\n#define NCHAIN         44300           // Max allowed number of chain links\n\n// Registers.\n#define REG_UNDEF      (-1)            // Codes of general purpose registers\n#define REG_EAX        0\n#define REG_ECX        1\n#define REG_EDX        2\n#define REG_EBX        3\n#define REG_ESP        4\n#define REG_EBP        5\n#define REG_ESI        6\n#define REG_EDI        7\n\n#define REG_AL         0               // Symbolic indices of 8-bit registers\n#define REG_CL         1\n#define REG_DL         2\n#define REG_BL         3\n#define REG_AH         4\n#define REG_CH         5\n#define REG_DH         6\n#define REG_BH         7\n\n#define SEG_UNDEF      (-1)            // Codes of segment/selector registers\n#define SEG_ES         0\n#define SEG_CS         1\n#define SEG_SS         2\n#define SEG_DS         3\n#define SEG_FS         4\n#define SEG_GS         5\n\n// Command highlighting.\n#define DRAW_PLAIN     '.' //0x0000000C      // Plain commands\n#define DRAW_JUMP      '>' //0x0000000D      // Unconditional jump commands\n#define DRAW_CJMP      '?' //0x0000000E      // Conditional jump commands\n#define DRAW_PUSHPOP   '=' //0x0000000F      // PUSH/POP commands\n#define DRAW_CALL      '@' //0x00000010      // CALL commands\n#define DRAW_RET       '<' //0x00000011      // RET commands\n#define DRAW_FPU       '1' //0x00000012      // FPU, MMX, 3DNow! and SSE commands\n#define DRAW_SUSPECT   '!' //0x00000013      // Bad, system and privileged commands\n// Operand highlighting.\n#define DRAW_IREG      'R' //0x00000018      // General purpose registers\n#define DRAW_FREG      'F' //0x00000019      // FPU, MMX and SSE registers\n#define DRAW_SYSREG    'S' //0x0000001A      // Segment and system registers\n#define DRAW_STKMEM    'K' //0x0000001B      // Memory accessed over ESP or EBP\n#define DRAW_MEM       'M' //0x0000001C      // Any other memory\n#define DRAW_CONST     'C' //0x0000001E      // Constant\n\n#define D_NONE         0x00000000      // No special features\n// General type of command, only one is allowed.\n#define D_CMDTYPE      0x0000001F      // Mask to extract type of command\n#define   D_CMD        0x00000000      // Ordinary (none of listed below)\n#define   D_MOV        0x00000001      // Move to or from integer register\n#define   D_MOVC       0x00000002      // Conditional move to integer register\n#define   D_SETC       0x00000003      // Conditional set integer register\n#define   D_TEST       0x00000004      // Used to test data (CMP, TEST, AND...)\n#define   D_STRING     0x00000005      // String command with REPxxx prefix\n#define   D_JMP        0x00000006      // Unconditional near jump\n#define   D_JMPFAR     0x00000007      // Unconditional far jump\n#define   D_JMC        0x00000008      // Conditional jump on flags\n#define   D_JMCX       0x00000009      // Conditional jump on (E)CX (and flags)\n#define   D_PUSH       0x0000000A      // PUSH exactly 1 (d)word of data\n#define   D_POP        0x0000000B      // POP exactly 1 (d)word of data\n#define   D_CALL       0x0000000C      // Plain near call\n#define   D_CALLFAR    0x0000000D      // Far call\n#define   D_INT        0x0000000E      // Interrupt\n#define   D_RET        0x0000000F      // Plain near return from call\n#define   D_RETFAR     0x00000010      // Far return or IRET\n#define   D_FPU        0x00000011      // FPU command\n#define   D_MMX        0x00000012      // MMX instruction, incl. SSE extensions\n#define   D_3DNOW      0x00000013      // 3DNow! instruction\n#define   D_SSE        0x00000014      // SSE instruction\n#define   D_IO         0x00000015      // Accesses I/O ports\n#define   D_SYS        0x00000016      // Legal but useful in system code only\n#define   D_PRIVILEGED 0x00000017      // Privileged (non-Ring3) command\n#define   D_AVX        0x00000018      // AVX instruction\n#define   D_XOP        0x00000019      // AMD instruction with XOP prefix\n#define   D_DATA       0x0000001C      // Data recognized by Analyser\n#define   D_PSEUDO     0x0000001D      // Pseudocommand, for search models only\n#define   D_PREFIX     0x0000001E      // Standalone prefix\n#define   D_BAD        0x0000001F      // Bad or unrecognized command\n// Additional parts of the command.\n#define D_SIZE01       0x00000020      // Bit 0x01 in last cmd is data size\n#define D_POSTBYTE     0x00000040      // Command continues in postbyte\n// For string commands, either long or short form can be selected.\n#define D_LONGFORM     0x00000080      // Long form of string command\n// Decoding of some commands depends on data or address size.\n#define D_SIZEMASK     0x00000F00      // Mask for data/address size dependence\n#define   D_DATA16     0x00000100      // Requires 16-bit data size\n#define   D_DATA32     0x00000200      // Requires 32-bit data size\n#define   D_ADDR16     0x00000400      // Requires 16-bit address size\n#define   D_ADDR32     0x00000800      // Requires 32-bit address size\n// Prefixes that command may, must or must not possess.\n#define D_MUSTMASK     0x0000F000      // Mask for fixed set of prefixes\n#define   D_NOMUST     0x00000000      // No obligatory prefixes (default)\n#define   D_MUST66     0x00001000      // (SSE,AVX) Requires 66, no F2 or F3\n#define   D_MUSTF2     0x00002000      // (SSE,AVX) Requires F2, no 66 or F3\n#define   D_MUSTF3     0x00003000      // (SSE,AVX) Requires F3, no 66 or F2\n#define   D_MUSTNONE   0x00004000      // (MMX,SSE,AVX) Requires no 66, F2, F3\n#define   D_NEEDF2     0x00005000      // (SSE,AVX) Requires F2, no F3\n#define   D_NEEDF3     0x00006000      // (SSE,AVX) Requires F3, no F2\n#define   D_NOREP      0x00007000      // Must not include F2 or F3\n#define   D_MUSTREP    0x00008000      // Must include F3 (REP)\n#define   D_MUSTREPE   0x00009000      // Must include F3 (REPE)\n#define   D_MUSTREPNE  0x0000A000      // Must include F2 (REPNE)\n#define D_LOCKABLE     0x00010000      // Allows for F0 (LOCK, memory only)\n#define D_BHINT        0x00020000      // Allows for branch hints (2E, 3E)\n// Decoding of some commands with ModRM-SIB depends whether register or memory.\n#define D_MEMORY       0x00040000      // Mod field must indicate memory\n#define D_REGISTER     0x00080000      // Mod field must indicate register\n// Side effects caused by command.\n#define D_FLAGMASK     0x00700000      // Mask to extract modified flags\n#define   D_NOFLAGS    0x00000000      // Flags S,Z,P,O,C remain unchanged\n#define   D_ALLFLAGS   0x00100000      // Modifies flags S,Z,P,O,C\n#define   D_FLAGZ      0x00200000      // Modifies flag Z only\n#define   D_FLAGC      0x00300000      // Modifies flag C only\n#define   D_FLAGSCO    0x00400000      // Modifies flag C and O only\n#define   D_FLAGD      0x00500000      // Modifies flag D only\n#define   D_FLAGSZPC   0x00600000      // Modifies flags Z, P and C only (FPU)\n#define   D_NOCFLAG    0x00700000      // S,Z,P,O modified, C unaffected\n#define D_FPUMASK      0x01800000      // Mask for effects on FPU stack\n#define   D_FPUSAME    0x00000000      // Doesn't rotate FPU stack (default)\n#define   D_FPUPOP     0x00800000      // Pops FPU stack\n#define   D_FPUPOP2    0x01000000      // Pops FPU stack twice\n#define   D_FPUPUSH    0x01800000      // Pushes FPU stack\n#define D_CHGESP       0x02000000      // Command indirectly modifies ESP\n// Command features.\n#define D_HLADIR       0x04000000      // Nonstandard order of operands in HLA\n#define D_WILDCARD     0x08000000      // Mnemonics contains W/D wildcard ('*')\n#define D_COND         0x10000000      // Conditional (action depends on flags)\n#define D_USESCARRY    0x20000000      // Uses Carry flag\n#define D_USEMASK      0xC0000000      // Mask to detect unusual commands\n#define   D_RARE       0x40000000      // Rare or obsolete in Win32 apps\n#define   D_SUSPICIOUS 0x80000000      // Suspicious command\n#define   D_UNDOC      0xC0000000      // Undocumented command\n\n// Extension of D_xxx.\n#define DX_ZEROMASK    0x00000003      // How to decode FLAGS.Z flag\n#define   DX_JE        0x00000001      // JE, JNE instead of JZ, JNZ\n#define   DX_JZ        0x00000002      // JZ, JNZ instead of JE, JNE\n#define DX_CARRYMASK   0x0000000C      // How to decode FLAGS.C flag\n#define   DX_JB        0x00000004      // JAE, JB instead of JC, JNC\n#define   DX_JC        0x00000008      // JC, JNC instead of JAE, JB\n#define DX_RETN        0x00000010      // The mnemonics is RETN\n#define DX_VEX         0x00000100      // Requires VEX prefix\n#define DX_VLMASK      0x00000600      // Mask to extract VEX operand length\n#define   DX_LSHORT    0x00000000      // 128-bit only\n#define   DX_LBOTH     0x00000200      // Both 128- and 256-bit versions\n#define   DX_LLONG     0x00000400      // 256-bit only\n#define   DX_IGNOREL   0x00000600      // Ignore VEX.L\n#define DX_NOVREG      0x00000800      // VEX.vvvv must be set to all 1's\n#define DX_VWMASK      0x00003000      // Mask to extract VEX.W\n#define   DX_W0        0x00001000      // VEX.W must be 0\n#define   DX_W1        0x00002000      // VEX.W must be 1\n#define DX_LEADMASK    0x00070000      // Mask to extract leading opcode bytes\n#define   DX_LEAD0F    0x00000000      // Implied 0F leading byte (default)\n#define   DX_LEAD38    0x00010000      // Implied 0F 38 leading opcode bytes\n#define   DX_LEAD3A    0x00020000      // Implied 0F 3A leading opcode bytes\n#define DX_WONKYTRAP   0x00800000      // Don't single-step this command\n#define DX_TYPEMASK    0xFF000000      // Precised command type mask\n#define   DX_ADD       0x01000000      // The command is integer ADD\n#define   DX_SUB       0x02000000      // The command is integer SUB\n#define   DX_LEA       0x03000000      // The command is LEA\n#define   DX_NOP       0x04000000      // The command is NOP\n\n//#define DX_LVEX        (DX_VEX|DX_LBOTH)\n//#define DX_GVEX        (DX_VEX|DX_LLONG)\n\n// Type of operand, only one is allowed. Size of SSE operands is given for the\n// case of 128-bit operations and usually doubles for 256-bit AVX commands. If\n// B_NOVEXSIZE is set, memory may double but XMM registers are not promoted to\n// YMM.\n#define B_ARGMASK      0x000000FF      // Mask to extract type of argument\n#define   B_NONE       0x00000000      // Operand absent\n#define   B_AL         0x00000001      // Register AL\n#define   B_AH         0x00000002      // Register AH\n#define   B_AX         0x00000003      // Register AX\n#define   B_CL         0x00000004      // Register CL\n#define   B_CX         0x00000005      // Register CX\n#define   B_DX         0x00000006      // Register DX\n#define   B_DXPORT     0x00000007      // Register DX as I/O port address\n#define   B_EAX        0x00000008      // Register EAX\n#define   B_EBX        0x00000009      // Register EBX\n#define   B_ECX        0x0000000A      // Register ECX\n#define   B_EDX        0x0000000B      // Register EDX\n#define   B_ACC        0x0000000C      // Accumulator (AL/AX/EAX)\n#define   B_STRCNT     0x0000000D      // Register CX or ECX as REPxx counter\n#define   B_DXEDX      0x0000000E      // Register DX or EDX in DIV/MUL\n#define   B_BPEBP      0x0000000F      // Register BP or EBP in ENTER/LEAVE\n#define   B_REG        0x00000010      // 8/16/32-bit register in Reg\n#define   B_REG16      0x00000011      // 16-bit register in Reg\n#define   B_REG32      0x00000012      // 32-bit register in Reg\n#define   B_REGCMD     0x00000013      // 16/32-bit register in last cmd byte\n#define   B_REGCMD8    0x00000014      // 8-bit register in last cmd byte\n#define   B_ANYREG     0x00000015      // Reg field is unused, any allowed\n#define   B_INT        0x00000016      // 8/16/32-bit register/memory in ModRM\n#define   B_INT8       0x00000017      // 8-bit register/memory in ModRM\n#define   B_INT16      0x00000018      // 16-bit register/memory in ModRM\n#define   B_INT32      0x00000019      // 32-bit register/memory in ModRM\n#define   B_INT1632    0x0000001A      // 16/32-bit register/memory in ModRM\n#define   B_INT64      0x0000001B      // 64-bit integer in ModRM, memory only\n#define   B_INT128     0x0000001C      // 128-bit integer in ModRM, memory only\n#define   B_IMMINT     0x0000001D      // 8/16/32-bit int at immediate addr\n#define   B_INTPAIR    0x0000001E      // Two signed 16/32 in ModRM, memory only\n#define   B_SEGOFFS    0x0000001F      // 16:16/16:32 absolute address in memory\n#define   B_STRDEST    0x00000020      // 8/16/32-bit string dest, [ES:(E)DI]\n#define   B_STRDEST8   0x00000021      // 8-bit string destination, [ES:(E)DI]\n#define   B_STRSRC     0x00000022      // 8/16/32-bit string source, [(E)SI]\n#define   B_STRSRC8    0x00000023      // 8-bit string source, [(E)SI]\n#define   B_XLATMEM    0x00000024      // 8-bit memory in XLAT, [(E)BX+AL]\n#define   B_EAXMEM     0x00000025      // Reference to memory addressed by [EAX]\n#define   B_LONGDATA   0x00000026      // Long data in ModRM, mem only\n#define   B_ANYMEM     0x00000027      // Reference to memory, data unimportant\n#define   B_STKTOP     0x00000028      // 16/32-bit int top of stack\n#define   B_STKTOPFAR  0x00000029      // Top of stack (16:16/16:32 far addr)\n#define   B_STKTOPEFL  0x0000002A      // 16/32-bit flags on top of stack\n#define   B_STKTOPA    0x0000002B      // 16/32-bit top of stack all registers\n#define   B_PUSH       0x0000002C      // 16/32-bit int push to stack\n#define   B_PUSHRET    0x0000002D      // 16/32-bit push of return address\n#define   B_PUSHRETF   0x0000002E      // 16:16/16:32-bit push of far retaddr\n#define   B_PUSHA      0x0000002F      // 16/32-bit push all registers\n#define   B_EBPMEM     0x00000030      // 16/32-bit int at [EBP]\n#define   B_SEG        0x00000031      // Segment register in Reg\n#define   B_SEGNOCS    0x00000032      // Segment register in Reg, but not CS\n#define   B_SEGCS      0x00000033      // Segment register CS\n#define   B_SEGDS      0x00000034      // Segment register DS\n#define   B_SEGES      0x00000035      // Segment register ES\n#define   B_SEGFS      0x00000036      // Segment register FS\n#define   B_SEGGS      0x00000037      // Segment register GS\n#define   B_SEGSS      0x00000038      // Segment register SS\n#define   B_ST         0x00000039      // 80-bit FPU register in last cmd byte\n#define   B_ST0        0x0000003A      // 80-bit FPU register ST0\n#define   B_ST1        0x0000003B      // 80-bit FPU register ST1\n#define   B_FLOAT32    0x0000003C      // 32-bit float in ModRM, memory only\n#define   B_FLOAT64    0x0000003D      // 64-bit float in ModRM, memory only\n#define   B_FLOAT80    0x0000003E      // 80-bit float in ModRM, memory only\n#define   B_BCD        0x0000003F      // 80-bit BCD in ModRM, memory only\n#define   B_MREG8x8    0x00000040      // MMX register as 8 8-bit integers\n#define   B_MMX8x8     0x00000041      // MMX reg/memory as 8 8-bit integers\n#define   B_MMX8x8DI   0x00000042      // MMX 8 8-bit integers at [DS:(E)DI]\n#define   B_MREG16x4   0x00000043      // MMX register as 4 16-bit integers\n#define   B_MMX16x4    0x00000044      // MMX reg/memory as 4 16-bit integers\n#define   B_MREG32x2   0x00000045      // MMX register as 2 32-bit integers\n#define   B_MMX32x2    0x00000046      // MMX reg/memory as 2 32-bit integers\n#define   B_MREG64     0x00000047      // MMX register as 1 64-bit integer\n#define   B_MMX64      0x00000048      // MMX reg/memory as 1 64-bit integer\n#define   B_3DREG      0x00000049      // 3DNow! register as 2 32-bit floats\n#define   B_3DNOW      0x0000004A      // 3DNow! reg/memory as 2 32-bit floats\n#define   B_XMM0I32x4  0x0000004B      // XMM0 as 4 32-bit integers\n#define   B_XMM0I64x2  0x0000004C      // XMM0 as 2 64-bit integers\n#define   B_XMM0I8x16  0x0000004D      // XMM0 as 16 8-bit integers\n#define   B_SREGF32x4  0x0000004E      // SSE register as 4 32-bit floats\n#define   B_SREGF32L   0x0000004F      // Low 32-bit float in SSE register\n#define   B_SREGF32x2L 0x00000050      // Low 2 32-bit floats in SSE register\n#define   B_SSEF32x4   0x00000051      // SSE reg/memory as 4 32-bit floats\n#define   B_SSEF32L    0x00000052      // Low 32-bit float in SSE reg/memory\n#define   B_SSEF32x2L  0x00000053      // Low 2 32-bit floats in SSE reg/memory\n#define   B_SREGF64x2  0x00000054      // SSE register as 2 64-bit floats\n#define   B_SREGF64L   0x00000055      // Low 64-bit float in SSE register\n#define   B_SSEF64x2   0x00000056      // SSE reg/memory as 2 64-bit floats\n#define   B_SSEF64L    0x00000057      // Low 64-bit float in SSE reg/memory\n#define   B_SREGI8x16  0x00000058      // SSE register as 16 8-bit sigints\n#define   B_SSEI8x16   0x00000059      // SSE reg/memory as 16 8-bit sigints\n#define   B_SSEI8x16DI 0x0000005A      // SSE 16 8-bit sigints at [DS:(E)DI]\n#define   B_SSEI8x8L   0x0000005B      // Low 8 8-bit ints in SSE reg/memory\n#define   B_SSEI8x4L   0x0000005C      // Low 4 8-bit ints in SSE reg/memory\n#define   B_SSEI8x2L   0x0000005D      // Low 2 8-bit ints in SSE reg/memory\n#define   B_SREGI16x8  0x0000005E      // SSE register as 8 16-bit sigints\n#define   B_SSEI16x8   0x0000005F      // SSE reg/memory as 8 16-bit sigints\n#define   B_SSEI16x4L  0x00000060      // Low 4 16-bit ints in SSE reg/memory\n#define   B_SSEI16x2L  0x00000061      // Low 2 16-bit ints in SSE reg/memory\n#define   B_SREGI32x4  0x00000062      // SSE register as 4 32-bit sigints\n#define   B_SREGI32L   0x00000063      // Low 32-bit sigint in SSE register\n#define   B_SREGI32x2L 0x00000064      // Low 2 32-bit sigints in SSE register\n#define   B_SSEI32x4   0x00000065      // SSE reg/memory as 4 32-bit sigints\n#define   B_SSEI32x2L  0x00000066      // Low 2 32-bit sigints in SSE reg/memory\n#define   B_SREGI64x2  0x00000067      // SSE register as 2 64-bit sigints\n#define   B_SSEI64x2   0x00000068      // SSE reg/memory as 2 64-bit sigints\n#define   B_SREGI64L   0x00000069      // Low 64-bit sigint in SSE register\n#define   B_EFL        0x0000006A      // Flags register EFL\n#define   B_FLAGS8     0x0000006B      // Flags (low byte)\n#define   B_OFFSET     0x0000006C      // 16/32 const offset from next command\n#define   B_BYTEOFFS   0x0000006D      // 8-bit sxt const offset from next cmd\n#define   B_FARCONST   0x0000006E      // 16:16/16:32 absolute address constant\n#define   B_DESCR      0x0000006F      // 16:32 descriptor in ModRM\n#define   B_1          0x00000070      // Immediate constant 1\n#define   B_CONST8     0x00000071      // Immediate 8-bit constant\n#define   B_CONST8_2   0x00000072      // Immediate 8-bit const, second in cmd\n#define   B_CONST16    0x00000073      // Immediate 16-bit constant\n#define   B_CONST      0x00000074      // Immediate 8/16/32-bit constant\n#define   B_CONSTL     0x00000075      // Immediate 16/32-bit constant\n#define   B_SXTCONST   0x00000076      // Immediate 8-bit sign-extended to size\n#define   B_CR         0x00000077      // Control register in Reg\n#define   B_CR0        0x00000078      // Control register CR0\n#define   B_DR         0x00000079      // Debug register in Reg\n#define   B_FST        0x0000007A      // FPU status register\n#define   B_FCW        0x0000007B      // FPU control register\n#define   B_MXCSR      0x0000007C      // SSE media control and status register\n#define   B_SVEXF32x4  0x0000007D      // SSE reg in VEX as 4 32-bit floats\n#define   B_SVEXF32L   0x0000007E      // Low 32-bit float in SSE in VEX\n#define   B_SVEXF64x2  0x0000007F      // SSE reg in VEX as 2 64-bit floats\n#define   B_SVEXF64L   0x00000080      // Low 64-bit float in SSE in VEX\n#define   B_SVEXI8x16  0x00000081      // SSE reg in VEX as 16 8-bit sigints\n#define   B_SVEXI16x8  0x00000082      // SSE reg in VEX as 8 16-bit sigints\n#define   B_SVEXI32x4  0x00000083      // SSE reg in VEX as 4 32-bit sigints\n#define   B_SVEXI64x2  0x00000084      // SSE reg in VEX as 2 64-bit sigints\n#define   B_SIMMI8x16  0x00000085      // SSE reg in immediate 8-bit constant\n// Type modifiers, used for interpretation of contents, only one is allowed.\n#define B_MODMASK      0x000F0000      // Mask to extract type modifier\n#define   B_NONSPEC    0x00000000      // Non-specific operand\n#define   B_UNSIGNED   0x00010000      // Decode as unsigned decimal\n#define   B_SIGNED     0x00020000      // Decode as signed decimal\n#define   B_BINARY     0x00030000      // Decode as binary (full hex) data\n#define   B_BITCNT     0x00040000      // Bit count\n#define   B_SHIFTCNT   0x00050000      // Shift count\n#define   B_COUNT      0x00060000      // General-purpose count\n#define   B_NOADDR     0x00070000      // Not an address\n#define   B_JMPCALL    0x00080000      // Near jump/call/return destination\n#define   B_JMPCALLFAR 0x00090000      // Far jump/call/return destination\n#define   B_STACKINC   0x000A0000      // Unsigned stack increment/decrement\n#define   B_PORT       0x000B0000      // I/O port\n#define   B_ADDR       0x000F0000      // Used internally\n// Validity markers.\n#define B_MEMORY       0x00100000      // Memory only, reg version different\n#define B_REGISTER     0x00200000      // Register only, mem version different\n#define B_MEMONLY      0x00400000      // Warn if operand in register\n#define B_REGONLY      0x00800000      // Warn if operand in memory\n#define B_32BITONLY    0x01000000      // Warn if 16-bit operand\n#define B_NOESP        0x02000000      // ESP is not allowed\n// Miscellaneous options.\n#define B_NOVEXSIZE    0x04000000      // Always 128-bit SSE in 256-bit AVX\n#define B_SHOWSIZE     0x08000000      // Always show argument size in disasm\n#define B_CHG          0x10000000      // Changed, old contents is not used\n#define B_UPD          0x20000000      // Modified using old contents\n#define B_PSEUDO       0x40000000      // Pseoudooperand, not in assembler cmd\n#define B_NOSEG        0x80000000      // Don't add offset of selector\n\n// Location of operand, only one bit is allowed.\n#define OP_SOMEREG     0x000000FF      // Mask for any kind of register\n#define   OP_REGISTER  0x00000001      // Operand is a general-purpose register\n#define   OP_SEGREG    0x00000002      // Operand is a segment register\n#define   OP_FPUREG    0x00000004      // Operand is a FPU register\n#define   OP_MMXREG    0x00000008      // Operand is a MMX register\n#define   OP_3DNOWREG  0x00000010      // Operand is a 3DNow! register\n#define   OP_SSEREG    0x00000020      // Operand is a SSE register\n#define   OP_CREG      0x00000040      // Operand is a control register\n#define   OP_DREG      0x00000080      // Operand is a debug register\n#define OP_MEMORY      0x00000100      // Operand is in memory\n#define OP_CONST       0x00000200      // Operand is an immediate constant\n// Additional operand properties.\n#define OP_PORT        0x00000400      // Used to access I/O port\n#define OP_OTHERREG    0x00000800      // Special register like EFL or MXCSR\n#define OP_INVALID     0x00001000      // Invalid operand, like reg in mem-only\n#define OP_PSEUDO      0x00002000      // Pseudooperand (not in mnenonics)\n#define OP_MOD         0x00004000      // Command may change/update operand\n#define OP_MODREG      0x00008000      // Memory, but modifies reg (POP,MOVSD)\n#define OP_IMPORT      0x00020000      // Value imported from different module\n#define OP_SELECTOR    0x00040000      // Includes immediate selector\n// Additional properties of memory address.\n#define OP_INDEXED     0x00080000      // Memory address contains registers\n#define OP_OPCONST     0x00100000      // Memory address contains constant\n#define OP_ADDR16      0x00200000      // 16-bit memory address\n#define OP_ADDR32      0x00400000      // Explicit 32-bit memory address\n\n#define DAMODE_MASM    0               // MASM assembling/disassembling style\n#define DAMODE_IDEAL   1               // IDEAL assembling/disassembling style\n#define DAMODE_HLA     2               // HLA assembling/disassembling style\n#define DAMODE_ATT     3               // AT&T disassembling style\n\n#define NUM_STYLE     0x0003           // Mask to extract hex style\n#define   NUM_STD     0x0000           // 123, 12345678h, 0ABCD1234h\n#define   NUM_X       0x0001           // 123, 0x12345678, 0xABCD1234\n#define   NUM_OLLY    0x0002           // 123., 12345678, 0ABCD1234\n#define NUM_LONG      0x0010           // 00001234h instead of 1234h\n#define NUM_DECIMAL   0x0020           // 123 instead of 7Bh if under DECLIMIT\n\n// Disassembling options.\n#define DA_TEXT        0x00000001      // Decode command to text and comment\n#define   DA_HILITE    0x00000002      // Use syntax highlighting\n#define   DA_JZ        0x00000004      // JZ, JNZ instead of JE, JNE\n#define   DA_JC        0x00000008      // JC, JNC instead of JAE, JB\n#define DA_DUMP        0x00000020      // Dump command to hexadecimal text\n#define DA_PSEUDO      0x00000400      // List pseudooperands\n\n// Disassembling errors.\n#define DAE_NOERR      0x00000000      // No errors\n#define DAE_BADCMD     0x00000001      // Unrecognized command\n#define DAE_CROSS      0x00000002      // Command crosses end of memory block\n#define DAE_MEMORY     0x00000004      // Register where only memory allowed\n#define DAE_REGISTER   0x00000008      // Memory where only register allowed\n#define DAE_LOCK       0x00000010      // LOCK prefix is not allowed\n#define DAE_BADSEG     0x00000020      // Invalid segment register\n#define DAE_SAMEPREF   0x00000040      // Two prefixes from the same group\n#define DAE_MANYPREF   0x00000080      // More than 4 prefixes\n#define DAE_BADCR      0x00000100      // Invalid CR register\n#define DAE_INTERN     0x00000200      // Internal error\n\n// Disassembling warnings.\n#define DAW_NOWARN     0x00000000      // No warnings\n#define DAW_DATASIZE   0x00000001      // Superfluous data size prefix\n#define DAW_ADDRSIZE   0x00000002      // Superfluous address size prefix\n#define DAW_SEGPREFIX  0x00000004      // Superfluous segment override prefix\n#define DAW_REPPREFIX  0x00000008      // Superfluous REPxx prefix\n#define DAW_DEFSEG     0x00000010      // Segment prefix coincides with default\n#define DAW_JMP16      0x00000020      // 16-bit jump, call or return\n#define DAW_FARADDR    0x00000040      // Far jump or call\n#define DAW_SEGMOD     0x00000080      // Modifies segment register\n#define DAW_PRIV       0x00000100      // Privileged command\n#define DAW_IO         0x00000200      // I/O command\n#define DAW_SHIFT      0x00000400      // Shift out of range 1..31\n#define DAW_LOCK       0x00000800      // Command with valid LOCK prefix\n#define DAW_STACK      0x00001000      // Unaligned stack operation\n#define DAW_NOESP      0x00002000      // Suspicious use of stack pointer\n#define DAW_RARE       0x00004000      // Rare, seldom used command\n#define DAW_NONCLASS   0x00008000      // Non-standard or non-documented code\n#define DAW_INTERRUPT  0x00010000      // Interrupt command\n\n// List of prefixes.\n#define PF_SEGMASK     0x0000003F      // Mask for segment override prefixes\n#define   PF_ES        0x00000001      // 0x26, ES segment override\n#define   PF_CS        0x00000002      // 0x2E, CS segment override\n#define   PF_SS        0x00000004      // 0x36, SS segment override\n#define   PF_DS        0x00000008      // 0x3E, DS segment override\n#define   PF_FS        0x00000010      // 0x64, FS segment override\n#define   PF_GS        0x00000020      // 0x65, GS segment override\n#define PF_DSIZE       0x00000040      // 0x66, data size override\n#define PF_ASIZE       0x00000080      // 0x67, address size override\n#define PF_LOCK        0x00000100      // 0xF0, bus lock\n#define PF_REPMASK     0x00000600      // Mask for repeat prefixes\n#define   PF_REPNE     0x00000200      // 0xF2, REPNE prefix\n#define   PF_REP       0x00000400      // 0xF3, REP/REPE prefix\n#define PF_BYTE        0x00000800      // Size bit in command, used in cmdexec\n#define PF_MUSTMASK    D_MUSTMASK      // Necessary prefixes, used in t_asmmod\n#define PF_VEX2        0x00010000      // 2-byte VEX prefix\n#define PF_VEX3        0x00020000      // 3-byte VEX prefix\n// Useful shortcuts.\n#define PF_66          PF_DSIZE        // Alternative names for SSE prefixes\n#define PF_F2          PF_REPNE\n#define PF_F3          PF_REP\n#define PF_HINT        (PF_CS|PF_DS)   // Alternative names for branch hints\n#define   PF_NOTTAKEN  PF_CS\n#define   PF_TAKEN     PF_DS\n#define PF_VEX         (PF_VEX2|PF_VEX3)\n\ntypedef struct t_modrm {               // ModRM byte decoding\n  ulong          size;                 // Total size with SIB and disp, bytes\n  struct t_modrm *psib;                // Pointer to SIB table or NULL\n  ulong          dispsize;             // Size of displacement or 0 if none\n  ulong          features;             // Operand features, set of OP_xxx\n  int            reg;                  // Register index or REG_UNDEF\n  int            defseg;               // Default selector (SEG_xxx)\n  uchar          scale[NREG];          // Scales of registers in memory address\n  ulong          aregs;                // List of registers used in address\n  int            basereg;              // Register used as base or REG_UNDEF\n  tchar          ardec[SHORTNAME];     // Register part of address, INTEL fmt\n  tchar          aratt[SHORTNAME];     // Register part of address, AT&T fmt\n} t_modrm;\n\ntypedef struct t_bincmd {              // Description of 80x86 command\n  tchar          *name;                // Symbolic name for this command\n  ulong          cmdtype;              // Command's features, set of D_xxx\n  ulong          exttype;              // More features, set of DX_xxx\n  ulong          length;               // Length of main code (before ModRM/SIB)\n  ulong          mask;                 // Mask for first 4 bytes of the command\n  ulong          code;                 // Compare masked bytes with this\n  ulong          postbyte;             // Postbyte\n  ulong          arg[NOPERAND];        // Types of arguments, set of B_xxx\n} t_bincmd;\n\ntypedef struct t_chain {               // Element of command chain\n  const t_bincmd *pcmd;                // Pointer to command descriptor or NULL\n  struct t_chain *pnext;               // Pointer to next element in chain\n} t_chain;\n\ntypedef struct t_config {              // Disassembler configuration\n  int            disasmmode;           // Main style, one of DAMODE_xxx\n  int            memmode;              // Constant part of address, NUM_xxx\n  int            jmpmode;              // Jump/call destination, NUM_xxx\n  int            binconstmode;         // Binary constants, NUM_xxx\n  int            constmode;            // Numeric constants, NUM_xxx\n  int            lowercase;            // Force lowercase display\n  int            tabarguments;         // Tab between mnemonic and arguments\n  int            extraspace;           // Extra space between arguments\n  int            useretform;           // Use RET instead of RETN\n  int            shortstringcmds;      // Use short form of string commands\n  int            putdefseg;            // Display default segments in listing\n  int            showmemsize;          // Always show memory size\n  int            shownear;             // Show NEAR modifiers\n  int            ssesizemode;          // How to decode size of SSE operands\n  int            jumphintmode;         // How to decode jump hints\n  int            sizesens;             // How to decode size-sensitive mnemonics\n  int            simplifiedst;         // How to decode top of FPU stack\n  int            hiliteoperands;       // Highlight operands\n} t_config;\n\ntypedef struct t_operand {             // Description of disassembled operand\n  // Description of operand.\n  ulong          features;             // Operand features, set of OP_xxx\n  ulong          arg;                  // Operand type, set of B_xxx\n//  int            optype;               // DEC_INT, DEC_FLOAT or DEC_UNKNOWN\n  int            opsize;               // Total size of data, bytes\n  int            granularity;          // Size of element (opsize exc. MMX/SSE)\n  int            reg;                  // REG_xxx (also ESP in POP) or REG_UNDEF\n  ulong          uses;                 // List of used regs (not in address!)\n  ulong          modifies;             // List of modified regs (not in addr!)\n  // Description of memory address.\n  int            seg;                  // Selector (SEG_xxx)\n  uchar          scale[NREG];          // Scales of registers in memory address\n  ulong          aregs;                // List of registers used in address\n  ulong          opconst;              // Constant or const part of address\n  ulong          selector;             // Immediate selector in far jump/call\n  // Textual decoding.\n  tchar          text[TEXTLEN];        // Operand, decoded to text\n} t_operand;\n\n// Note that used registers are those which contents is necessary to create\n// result. Modified registers are those which value is changed. For example,\n// command MOV EAX,[EBX+ECX] uses EBX and ECX and modifies EAX. Command\n// ADD ESI,EDI uses ESI and EDI and modifies ESI.\ntypedef struct t_disasm {              // Disassembled command\n  ulong          ip;                   // Address of first command byte\n  ulong          size;                 // Full length of command, bytes\n  ulong          cmdtype;              // Type of command, D_xxx\n  ulong          exttype;              // More features, set of DX_xxx\n  ulong          prefixes;             // List of prefixes, set of PF_xxx\n  ulong          nprefix;              // Number of prefixes, including SSE2\n  ulong          memfixup;             // Offset of first 4-byte fixup or -1\n  ulong          immfixup;             // Offset of second 4-byte fixup or -1\n  int            errors;               // Set of DAE_xxx\n  int            warnings;             // Set of DAW_xxx\n  ulong          uses;                 // List of used registers\n  ulong          modifies;             // List of modified registers\n  ulong          memconst;             // Constant in memory address or 0\n  ulong          stackinc;             // Data size in ENTER/RETN/RETF\n  t_operand      op[NOPERAND];         // Operands\n  tchar          dump[TEXTLEN];        // Hex dump of the command\n  tchar          result[TEXTLEN];      // Fully decoded command as text\n  uchar          mask[TEXTLEN];        // Mask to highlight result\n  int            masksize;             // Length of mask corresponding to result\n} t_disasm;\n\nextern t_modrm   modrm16[256];         // 16-bit ModRM decodings\nextern t_modrm   modrm32[256];         // 32-bit ModRM decodings without SIB\nextern t_modrm   sib0[256];            // ModRM-SIB decodings with Mod=00\nextern t_modrm   sib1[256];            // ModRM-SIB decodings with Mod=01\nextern t_modrm   sib2[256];            // ModRM-SIB decodings with Mod=10\n\nextern const t_bincmd bincmd[];        // List of 80x86 commands\nextern t_chain   *cmdchain;            // Commands sorted by first CMDMASK bits\n\nint              Preparedisasm(void);\nvoid             Finishdisasm(void);\n\nulong            Disasm(uchar const *cmd,ulong cmdsize,ulong cmdip,\n                   t_disasm *da,int cmdmode,t_config *cmdconfig,\n                   int (*decodeaddress)(tchar *s,ulong addr));\ntchar            *Geterrwarnmessage(ulong errors,ulong warnings);\n\n"
  },
  {
    "path": "Disasm201/disasm.vs2008.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"disasm\", \"disasm.vs2008.vcproj\", \"{579E7FE7-2745-4100-A802-23511711FCDE}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Disasm201/disasm.vs2008.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"disasm\"\n\tProjectGUID=\"{579E7FE7-2745-4100-A802-23511711FCDE}\"\n\tRootNamespace=\"dxwnd\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/dxwnd.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tAdditionalOptions=\"/IInclude\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"../Include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS;_USRDLL;DXWND_EXPORTS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tExceptionHandling=\"2\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/dxwnd.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"1041\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"shlwapi.lib odbc32.lib odbccp32.lib\"\n\t\t\t\tOutputFile=\"../Debug/disasm.dll\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tModuleDefinitionFile=\".\\disasm.def\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/disasm.pdb\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\".\\Debug/disasm.lib\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/disasm.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/dxwnd.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"../Include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS;_USRDLL;DXWND_EXPORTS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"2\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/dxwnd.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"1041\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"../Release/Disasm.dll\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tModuleDefinitionFile=\".\\disasm.def\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/dxwnd.pdb\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\".\\Release/dxwnd.lib\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/disasm.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\cmdlist.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Disasm.c\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\disasm.def\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\disasm.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "Disasm201/main.c",
    "content": "#include <stdio.h>\n#include <conio.h>\n#include <windows.h>\n#pragma hdrstop\n\n#include \"disasm.h\"\n\nint Decodeaddress(tchar *s,ulong addr) {\n  if (addr<1024 || addr>50000) return 0;\n  return sprintf(s,\"LABEL_%x\",addr); \n};\n\nint main(int argc,tchar* argv[]) {\n  int m,n,len,cmdlen,pos,ncmd;\n  uchar *cmd;\n  tchar *pmsg,s[512];\n  ulong t;\n  t_disasm da;\n  FILE *f,*g;\n\n  Preparedisasm();\n\n  f=fopen(\"disasm.exe\",\"rb\");\n\n  fseek(f,0,SEEK_END);\n  len=ftell(f);\n  fseek(f,0,SEEK_SET);\n  cmd=(uchar *)malloc(len);\n  fread(cmd,len,1,f);\n  fclose(f);\n\n  // First loop: determine length of the command, no text.\n  printf(\"Determine command length and get information:\\n\");\n  pos=0;\n  ncmd=0;\n  t=GetTickCount();\n  while (pos<len) {\n    cmdlen=Disasm(cmd+pos,len-pos,pos,&da,0,NULL,NULL);\n    if (cmdlen==0) break;\n    pos+=cmdlen; ncmd++;\n  };\n  t=GetTickCount()-t;\n  printf(\"  %i commands in %i milliseconds, %i ns per commnand\\n\\n\",\n    ncmd,t,(__int64)(t*1000000)/max(1,ncmd));\n\n  // Second loop: disassembling to text.\n  printf(\"Pure disassembling to text:\\n\");\n  pos=0;\n  ncmd=0;\n  t=GetTickCount();\n  while (pos<len) {\n    cmdlen=Disasm(cmd+pos,len-pos,pos,&da,DA_TEXT,NULL,NULL);\n    if (cmdlen==0) break;\n    pos+=cmdlen; ncmd++;\n  };\n  t=GetTickCount()-t;\n  printf(\"  %i commands in %i milliseconds, %i ns per commnand\\n\\n\",\n    ncmd,t,(__int64)(t*1000000)/max(1,ncmd));\n\n  // Third loop: disassembling to text, creation of dump and highlighting\n  // of operands.\n  printf(\"Disassembly, dump and highlighting:\\n\");\n  pos=0;\n  ncmd=0;\n  t=GetTickCount();\n  while (pos<len) {\n    cmdlen=Disasm(cmd+pos,len-pos,pos,&da,DA_TEXT|DA_DUMP|DA_HILITE,NULL,NULL);\n    if (cmdlen==0) break;\n    pos+=cmdlen; ncmd++;\n  };\n  t=GetTickCount()-t;\n  printf(\"  %i commands in %i milliseconds, %i ns per commnand\\n\\n\",\n    ncmd,t,(__int64)(t*1000000)/max(1,ncmd));\n\n  // Fourth loop: creation of file with addresses, dump, disassembly and\n  // comments.\n\n  printf(\"Creation of file:\\n\");\n  pos=0;\n  ncmd=0;\n  g=fopen(T(\"a.asm\"),T(\"wt\"));\n  while (pos<len) {\n    cmdlen=Disasm(cmd+pos,len-pos,0x00000+pos,&da,DA_TEXT|DA_DUMP,NULL,Decodeaddress);\n    if (cmdlen==0) break;\n    n=tsprintf(s,T(\"%08X  %s \"),da.ip,da.dump);\n    while (n<30) s[n++]=T(' ');\n    n+=tsprintf(s+n,T(\"%s\"),da.result);\n    pmsg=Geterrwarnmessage(da.errors,da.warnings);\n    if (pmsg!=NULL) {\n      while (n<56) s[n++]=T(' ');\n      tsprintf(s+n,T(\"; %s\"),pmsg); };\n    fprintf(g,T(\"%s\\n\"),s);\n    if (da.masksize>0) {\n      for (n=0; n<30; n++) s[n]=T(' ');\n      for (m=0; m<da.masksize; m++) s[n++]=da.mask[m];\n      s[n]=T('\\0');\n      fprintf(g,T(\"%s\\n\"),s);\n    };\n    pos+=cmdlen; ncmd++;\n  };\n  fclose(g);\n  printf(\"  File a.asm created.\\n\\n\");\n\n  free(cmd);\n  Finishdisasm();\n\n  printf(\"Press any key to finish...\\n\");\n  getch();\n  return 0;\n};\n\n"
  },
  {
    "path": "Include/---dsound.h",
    "content": "/*==========================================================================;\n *\n *  Copyright (C) 1995,1996 Microsoft Corporation.  All Rights Reserved.\n *\n *  File:       dsound.h\n *  Content:    DirectSound include file\n *\n **************************************************************************/\n\n#ifndef __DSOUND_INCLUDED__\n#define __DSOUND_INCLUDED__\n\n#include <d3dtypes.h>\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n\n#define _FACDS  0x878\n#define MAKE_DSHRESULT(code)  MAKE_HRESULT(1, _FACDS, code)\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif // __cplusplus\n\n// Direct Sound Component GUID {47D4D946-62E8-11cf-93BC-444553540000}\nDEFINE_GUID(CLSID_DirectSound, 0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);\n\n// DirectSound Capture Component GUID {B0210780-89CD-11d0-AF08-00A0C925CD16}\nDEFINE_GUID(CLSID_DirectSoundCapture, 0xb0210780, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16);\n\n//\n// Structures\n// \n\n#ifdef __cplusplus\n// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined\nstruct IDirectSound;\nstruct IDirectSoundBuffer;\nstruct IDirectSound3DListener;\nstruct IDirectSound3DBuffer;\nstruct IDirectSoundCapture;\nstruct IDirectSoundCaptureBuffer;\nstruct IDirectSoundNotify;\n#endif // __cplusplus\n\ntypedef struct IDirectSound *LPDIRECTSOUND;\ntypedef struct IDirectSoundBuffer *LPDIRECTSOUNDBUFFER;\ntypedef struct IDirectSound3DListener *LPDIRECTSOUND3DLISTENER;\ntypedef struct IDirectSound3DBuffer *LPDIRECTSOUND3DBUFFER;\ntypedef struct IDirectSoundCapture *LPDIRECTSOUNDCAPTURE;\ntypedef struct IDirectSoundCaptureBuffer *LPDIRECTSOUNDCAPTUREBUFFER;\ntypedef struct IDirectSoundNotify *LPDIRECTSOUNDNOTIFY;\n\ntypedef struct _DSCAPS\n{\n    DWORD           dwSize;\n    DWORD           dwFlags;\n    DWORD           dwMinSecondarySampleRate;\n    DWORD           dwMaxSecondarySampleRate;\n    DWORD           dwPrimaryBuffers;\n    DWORD           dwMaxHwMixingAllBuffers;\n    DWORD           dwMaxHwMixingStaticBuffers;\n    DWORD           dwMaxHwMixingStreamingBuffers;\n    DWORD           dwFreeHwMixingAllBuffers;\n    DWORD           dwFreeHwMixingStaticBuffers;\n    DWORD           dwFreeHwMixingStreamingBuffers;\n    DWORD           dwMaxHw3DAllBuffers;\n    DWORD           dwMaxHw3DStaticBuffers;\n    DWORD           dwMaxHw3DStreamingBuffers;\n    DWORD           dwFreeHw3DAllBuffers;\n    DWORD           dwFreeHw3DStaticBuffers;\n    DWORD           dwFreeHw3DStreamingBuffers;\n    DWORD           dwTotalHwMemBytes;\n    DWORD           dwFreeHwMemBytes;\n    DWORD           dwMaxContigFreeHwMemBytes;\n    DWORD           dwUnlockTransferRateHwBuffers;\n    DWORD           dwPlayCpuOverheadSwBuffers;\n    DWORD           dwReserved1;\n    DWORD           dwReserved2;\n} DSCAPS, *LPDSCAPS;\n\ntypedef const DSCAPS *LPCDSCAPS;\n\ntypedef struct _DSBCAPS\n{\n    DWORD           dwSize;\n    DWORD           dwFlags;\n    DWORD           dwBufferBytes;\n    DWORD           dwUnlockTransferRate;\n    DWORD           dwPlayCpuOverhead;\n} DSBCAPS, *LPDSBCAPS;\n\ntypedef const DSBCAPS *LPCDSBCAPS;\n\ntypedef struct _DSBUFFERDESC\n{\n    DWORD           dwSize;\n    DWORD           dwFlags;\n    DWORD           dwBufferBytes;\n    DWORD           dwReserved;\n    LPWAVEFORMATEX  lpwfxFormat;\n} DSBUFFERDESC, *LPDSBUFFERDESC;\n\ntypedef const DSBUFFERDESC *LPCDSBUFFERDESC;\n\ntypedef struct _DS3DBUFFER\n{\n    DWORD           dwSize;\n    D3DVECTOR       vPosition;\n    D3DVECTOR       vVelocity;\n    DWORD           dwInsideConeAngle;\n    DWORD           dwOutsideConeAngle;\n    D3DVECTOR       vConeOrientation;\n    LONG            lConeOutsideVolume;\n    D3DVALUE        flMinDistance;\n    D3DVALUE        flMaxDistance;\n    DWORD           dwMode;\n} DS3DBUFFER, *LPDS3DBUFFER;\n\ntypedef const DS3DBUFFER *LPCDS3DBUFFER;\n\ntypedef struct _DS3DLISTENER\n{\n    DWORD           dwSize;\n    D3DVECTOR       vPosition;\n    D3DVECTOR       vVelocity;\n    D3DVECTOR       vOrientFront;\n    D3DVECTOR       vOrientTop;\n    D3DVALUE        flDistanceFactor;\n    D3DVALUE        flRolloffFactor;\n    D3DVALUE        flDopplerFactor;\n} DS3DLISTENER, *LPDS3DLISTENER;\n\ntypedef const DS3DLISTENER *LPCDS3DLISTENER;\n\ntypedef struct _DSCCAPS\n{\n    DWORD           dwSize;\n    DWORD           dwFlags;\n    DWORD           dwFormats;\n    DWORD           dwChannels;\n} DSCCAPS, *LPDSCCAPS;\n\ntypedef const DSCCAPS *LPCDSCCAPS;\n\ntypedef struct _DSCBUFFERDESC\n{\n    DWORD           dwSize;\n    DWORD           dwFlags;\n    DWORD           dwBufferBytes;\n    DWORD           dwReserved;\n    LPWAVEFORMATEX  lpwfxFormat;\n} DSCBUFFERDESC, *LPDSCBUFFERDESC;\n\ntypedef const DSCBUFFERDESC *LPCDSCBUFFERDESC;\n\ntypedef struct _DSCBCAPS \n{\n    DWORD           dwSize;\n    DWORD           dwFlags;\n    DWORD           dwBufferBytes;\n    DWORD           dwReserved;\n} DSCBCAPS, *LPDSCBCAPS;\n\ntypedef const DSCBCAPS *LPCDSCBCAPS;\n\ntypedef struct _DSBPOSITIONNOTIFY\n{\n    DWORD           dwOffset;\n    HANDLE          hEventNotify;\n} DSBPOSITIONNOTIFY, *LPDSBPOSITIONNOTIFY;\n\ntypedef const DSBPOSITIONNOTIFY *LPCDSBPOSITIONNOTIFY;\n\n//\n// Compatibility typedefs\n//\n\ntypedef LPDIRECTSOUND *LPLPDIRECTSOUND;\ntypedef LPDIRECTSOUNDBUFFER *LPLPDIRECTSOUNDBUFFER;\ntypedef LPDIRECTSOUND3DLISTENER *LPLPDIRECTSOUND3DLISTENER;\ntypedef LPDIRECTSOUND3DBUFFER *LPLPDIRECTSOUND3DBUFFER;\ntypedef LPDIRECTSOUNDCAPTURE *LPLPDIRECTSOUNDCAPTURE;\ntypedef LPDIRECTSOUNDCAPTUREBUFFER *LPLPDIRECTSOUNDCAPTUREBUFFER;\ntypedef LPDIRECTSOUNDNOTIFY *LPLPDIRECTSOUNDNOTIFY;\ntypedef LPVOID *LPLPVOID;\ntypedef const WAVEFORMATEX *LPCWAVEFORMATEX;\n\n//\n// DirectSound API\n//\n\ntypedef BOOL (CALLBACK *LPDSENUMCALLBACKW)(LPGUID, LPCWSTR, LPCWSTR, LPVOID);\ntypedef BOOL (CALLBACK *LPDSENUMCALLBACKA)(LPGUID, LPCSTR, LPCSTR, LPVOID);\n\nextern HRESULT WINAPI DirectSoundCreate(LPGUID, LPDIRECTSOUND *, LPUNKNOWN);\nextern HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW, LPVOID);\nextern HRESULT WINAPI DirectSoundEnumerateA(LPDSENUMCALLBACKA, LPVOID);\n\nextern HRESULT WINAPI DirectSoundCaptureCreate(LPGUID, LPDIRECTSOUNDCAPTURE *, LPUNKNOWN);\nextern HRESULT WINAPI DirectSoundCaptureEnumerateW(LPDSENUMCALLBACKW, LPVOID);\nextern HRESULT WINAPI DirectSoundCaptureEnumerateA(LPDSENUMCALLBACKA, LPVOID);\n\n#ifdef UNICODE\n#define LPDSENUMCALLBACK            LPDSENUMCALLBACKW\n#define DirectSoundEnumerate        DirectSoundEnumerateW\n#define DirectSoundCaptureEnumerate DirectSoundCaptureEnumerateW\n#else // UNICODE\n#define LPDSENUMCALLBACK            LPDSENUMCALLBACKA\n#define DirectSoundEnumerate        DirectSoundEnumerateA\n#define DirectSoundCaptureEnumerate DirectSoundCaptureEnumerateA\n#endif // UNICODE\n\n//\n// IDirectSound\n//\n\nDEFINE_GUID(IID_IDirectSound, 0x279AFA83, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60);\n\n#undef INTERFACE\n#define INTERFACE IDirectSound\n\nDECLARE_INTERFACE_(IDirectSound, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID FAR *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n    \n    // IDirectSound methods\n    STDMETHOD(CreateSoundBuffer)    (THIS_ LPCDSBUFFERDESC, LPDIRECTSOUNDBUFFER *, LPUNKNOWN) PURE;\n    STDMETHOD(GetCaps)              (THIS_ LPDSCAPS) PURE;\n    STDMETHOD(DuplicateSoundBuffer) (THIS_ LPDIRECTSOUNDBUFFER, LPDIRECTSOUNDBUFFER *) PURE;\n    STDMETHOD(SetCooperativeLevel)  (THIS_ HWND, DWORD) PURE;\n    STDMETHOD(Compact)              (THIS) PURE;\n    STDMETHOD(GetSpeakerConfig)     (THIS_ LPDWORD) PURE;\n    STDMETHOD(SetSpeakerConfig)     (THIS_ DWORD) PURE;\n    STDMETHOD(Initialize)           (THIS_ LPGUID) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSound_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSound_AddRef(p)                   (p)->lpVtbl->AddRef(p)\n#define IDirectSound_Release(p)                  (p)->lpVtbl->Release(p)\n#define IDirectSound_CreateSoundBuffer(p,a,b,c)  (p)->lpVtbl->CreateSoundBuffer(p,a,b,c)\n#define IDirectSound_GetCaps(p,a)                (p)->lpVtbl->GetCaps(p,a)\n#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b)\n#define IDirectSound_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectSound_Compact(p)                  (p)->lpVtbl->Compact(p)\n#define IDirectSound_GetSpeakerConfig(p,a)       (p)->lpVtbl->GetSpeakerConfig(p,a)\n#define IDirectSound_SetSpeakerConfig(p,b)       (p)->lpVtbl->SetSpeakerConfig(p,b)\n#define IDirectSound_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSound_QueryInterface(p,a,b)       (p)->QueryInterface(a,b)\n#define IDirectSound_AddRef(p)                   (p)->AddRef()\n#define IDirectSound_Release(p)                  (p)->Release()\n#define IDirectSound_CreateSoundBuffer(p,a,b,c)  (p)->CreateSoundBuffer(a,b,c)\n#define IDirectSound_GetCaps(p,a)                (p)->GetCaps(a)\n#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b)\n#define IDirectSound_SetCooperativeLevel(p,a,b)  (p)->SetCooperativeLevel(a,b)\n#define IDirectSound_Compact(p)                  (p)->Compact()\n#define IDirectSound_GetSpeakerConfig(p,a)       (p)->GetSpeakerConfig(a)\n#define IDirectSound_SetSpeakerConfig(p,b)       (p)->SetSpeakerConfig(b)\n#define IDirectSound_Initialize(p,a)             (p)->Initialize(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSoundBuffer\n//\n\nDEFINE_GUID(IID_IDirectSoundBuffer, 0x279AFA85, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60);\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundBuffer\n\nDECLARE_INTERFACE_(IDirectSoundBuffer, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID FAR *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n    \n    // IDirectSoundBuffer methods\n    STDMETHOD(GetCaps)              (THIS_ LPDSBCAPS) PURE;\n    STDMETHOD(GetCurrentPosition)   (THIS_ LPDWORD, LPDWORD) PURE;\n    STDMETHOD(GetFormat)            (THIS_ LPWAVEFORMATEX, DWORD, LPDWORD) PURE;\n    STDMETHOD(GetVolume)            (THIS_ LPLONG) PURE;\n    STDMETHOD(GetPan)               (THIS_ LPLONG) PURE;\n    STDMETHOD(GetFrequency)         (THIS_ LPDWORD) PURE;\n    STDMETHOD(GetStatus)            (THIS_ LPDWORD) PURE;\n    STDMETHOD(Initialize)           (THIS_ LPDIRECTSOUND, LPCDSBUFFERDESC) PURE;\n    STDMETHOD(Lock)                 (THIS_ DWORD, DWORD, LPVOID *, LPDWORD, LPVOID *, LPDWORD, DWORD) PURE;\n    STDMETHOD(Play)                 (THIS_ DWORD, DWORD, DWORD) PURE;\n    STDMETHOD(SetCurrentPosition)   (THIS_ DWORD) PURE;\n    STDMETHOD(SetFormat)            (THIS_ LPCWAVEFORMATEX) PURE;\n    STDMETHOD(SetVolume)            (THIS_ LONG) PURE;\n    STDMETHOD(SetPan)               (THIS_ LONG) PURE;\n    STDMETHOD(SetFrequency)         (THIS_ DWORD) PURE;\n    STDMETHOD(Stop)                 (THIS) PURE;\n    STDMETHOD(Unlock)               (THIS_ LPVOID, DWORD, LPVOID, DWORD) PURE;\n    STDMETHOD(Restore)              (THIS) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundBuffer_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSoundBuffer_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirectSoundBuffer_Release(p)                   (p)->lpVtbl->Release(p)\n#define IDirectSoundBuffer_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)\n#define IDirectSoundBuffer_GetCurrentPosition(p,a,b)    (p)->lpVtbl->GetCurrentPosition(p,a,b)\n#define IDirectSoundBuffer_GetFormat(p,a,b,c)           (p)->lpVtbl->GetFormat(p,a,b,c)\n#define IDirectSoundBuffer_GetVolume(p,a)               (p)->lpVtbl->GetVolume(p,a)\n#define IDirectSoundBuffer_GetPan(p,a)                  (p)->lpVtbl->GetPan(p,a)\n#define IDirectSoundBuffer_GetFrequency(p,a)            (p)->lpVtbl->GetFrequency(p,a)\n#define IDirectSoundBuffer_GetStatus(p,a)               (p)->lpVtbl->GetStatus(p,a)\n#define IDirectSoundBuffer_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g)        (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)\n#define IDirectSoundBuffer_Play(p,a,b,c)                (p)->lpVtbl->Play(p,a,b,c)\n#define IDirectSoundBuffer_SetCurrentPosition(p,a)      (p)->lpVtbl->SetCurrentPosition(p,a)\n#define IDirectSoundBuffer_SetFormat(p,a)               (p)->lpVtbl->SetFormat(p,a)\n#define IDirectSoundBuffer_SetVolume(p,a)               (p)->lpVtbl->SetVolume(p,a)\n#define IDirectSoundBuffer_SetPan(p,a)                  (p)->lpVtbl->SetPan(p,a)\n#define IDirectSoundBuffer_SetFrequency(p,a)            (p)->lpVtbl->SetFrequency(p,a)\n#define IDirectSoundBuffer_Stop(p)                      (p)->lpVtbl->Stop(p)\n#define IDirectSoundBuffer_Unlock(p,a,b,c,d)            (p)->lpVtbl->Unlock(p,a,b,c,d)\n#define IDirectSoundBuffer_Restore(p)                   (p)->lpVtbl->Restore(p)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundBuffer_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirectSoundBuffer_AddRef(p)                    (p)->AddRef()\n#define IDirectSoundBuffer_Release(p)                   (p)->Release()\n#define IDirectSoundBuffer_GetCaps(p,a)                 (p)->GetCaps(a)\n#define IDirectSoundBuffer_GetCurrentPosition(p,a,b)    (p)->GetCurrentPosition(a,b)\n#define IDirectSoundBuffer_GetFormat(p,a,b,c)           (p)->GetFormat(a,b,c)\n#define IDirectSoundBuffer_GetVolume(p,a)               (p)->GetVolume(a)\n#define IDirectSoundBuffer_GetPan(p,a)                  (p)->GetPan(a)\n#define IDirectSoundBuffer_GetFrequency(p,a)            (p)->GetFrequency(a)\n#define IDirectSoundBuffer_GetStatus(p,a)               (p)->GetStatus(a)\n#define IDirectSoundBuffer_Initialize(p,a,b)            (p)->Initialize(a,b)\n#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g)        (p)->Lock(a,b,c,d,e,f,g)\n#define IDirectSoundBuffer_Play(p,a,b,c)                (p)->Play(a,b,c)\n#define IDirectSoundBuffer_SetCurrentPosition(p,a)      (p)->SetCurrentPosition(a)\n#define IDirectSoundBuffer_SetFormat(p,a)               (p)->SetFormat(a)\n#define IDirectSoundBuffer_SetVolume(p,a)               (p)->SetVolume(a)\n#define IDirectSoundBuffer_SetPan(p,a)                  (p)->SetPan(a)\n#define IDirectSoundBuffer_SetFrequency(p,a)            (p)->SetFrequency(a)\n#define IDirectSoundBuffer_Stop(p)                      (p)->Stop()\n#define IDirectSoundBuffer_Unlock(p,a,b,c,d)            (p)->Unlock(a,b,c,d)\n#define IDirectSoundBuffer_Restore(p)                   (p)->Restore()\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSound3DListener\n//\n\nDEFINE_GUID(IID_IDirectSound3DListener, 0x279AFA84, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60);\n\n#undef INTERFACE\n#define INTERFACE IDirectSound3DListener\n\nDECLARE_INTERFACE_(IDirectSound3DListener, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)           (THIS_ REFIID, LPVOID FAR *) PURE;\n    STDMETHOD_(ULONG,AddRef)            (THIS) PURE;\n    STDMETHOD_(ULONG,Release)           (THIS) PURE;\n\n    // IDirectSound3D methods\n    STDMETHOD(GetAllParameters)         (THIS_ LPDS3DLISTENER) PURE;\n    STDMETHOD(GetDistanceFactor)        (THIS_ LPD3DVALUE) PURE;\n    STDMETHOD(GetDopplerFactor)         (THIS_ LPD3DVALUE) PURE;\n    STDMETHOD(GetOrientation)           (THIS_ LPD3DVECTOR, LPD3DVECTOR) PURE;\n    STDMETHOD(GetPosition)              (THIS_ LPD3DVECTOR) PURE;\n    STDMETHOD(GetRolloffFactor)         (THIS_ LPD3DVALUE) PURE;\n    STDMETHOD(GetVelocity)              (THIS_ LPD3DVECTOR) PURE;\n    STDMETHOD(SetAllParameters)         (THIS_ LPCDS3DLISTENER, DWORD) PURE;\n    STDMETHOD(SetDistanceFactor)        (THIS_ D3DVALUE, DWORD) PURE;\n    STDMETHOD(SetDopplerFactor)         (THIS_ D3DVALUE, DWORD) PURE;\n    STDMETHOD(SetOrientation)           (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE;\n    STDMETHOD(SetPosition)              (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE;\n    STDMETHOD(SetRolloffFactor)         (THIS_ D3DVALUE, DWORD) PURE;\n    STDMETHOD(SetVelocity)              (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE;\n    STDMETHOD(CommitDeferredSettings)   (THIS) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSound3DListener_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSound3DListener_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirectSound3DListener_Release(p)                       (p)->lpVtbl->Release(p)\n#define IDirectSound3DListener_GetAllParameters(p,a)            (p)->lpVtbl->GetAllParameters(p,a)\n#define IDirectSound3DListener_GetDistanceFactor(p,a)           (p)->lpVtbl->GetDistanceFactor(p,a)\n#define IDirectSound3DListener_GetDopplerFactor(p,a)            (p)->lpVtbl->GetDopplerFactor(p,a)\n#define IDirectSound3DListener_GetOrientation(p,a,b)            (p)->lpVtbl->GetOrientation(p,a,b)\n#define IDirectSound3DListener_GetPosition(p,a)                 (p)->lpVtbl->GetPosition(p,a)\n#define IDirectSound3DListener_GetRolloffFactor(p,a)            (p)->lpVtbl->GetRolloffFactor(p,a)\n#define IDirectSound3DListener_GetVelocity(p,a)                 (p)->lpVtbl->GetVelocity(p,a)\n#define IDirectSound3DListener_SetAllParameters(p,a,b)          (p)->lpVtbl->SetAllParameters(p,a,b)\n#define IDirectSound3DListener_SetDistanceFactor(p,a,b)         (p)->lpVtbl->SetDistanceFactor(p,a,b)\n#define IDirectSound3DListener_SetDopplerFactor(p,a,b)          (p)->lpVtbl->SetDopplerFactor(p,a,b)\n#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g)  (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g)\n#define IDirectSound3DListener_SetPosition(p,a,b,c,d)           (p)->lpVtbl->SetPosition(p,a,b,c,d)\n#define IDirectSound3DListener_SetRolloffFactor(p,a,b)          (p)->lpVtbl->SetRolloffFactor(p,a,b)\n#define IDirectSound3DListener_SetVelocity(p,a,b,c,d)           (p)->lpVtbl->SetVelocity(p,a,b,c,d)\n#define IDirectSound3DListener_CommitDeferredSettings(p)        (p)->lpVtbl->CommitDeferredSettings(p)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSound3DListener_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)\n#define IDirectSound3DListener_AddRef(p)                        (p)->AddRef()\n#define IDirectSound3DListener_Release(p)                       (p)->Release()\n#define IDirectSound3DListener_GetAllParameters(p,a)            (p)->GetAllParameters(a)\n#define IDirectSound3DListener_GetDistanceFactor(p,a)           (p)->GetDistanceFactor(a)\n#define IDirectSound3DListener_GetDopplerFactor(p,a)            (p)->GetDopplerFactor(a)\n#define IDirectSound3DListener_GetOrientation(p,a,b)            (p)->GetOrientation(a,b)\n#define IDirectSound3DListener_GetPosition(p,a)                 (p)->GetPosition(a)\n#define IDirectSound3DListener_GetRolloffFactor(p,a)            (p)->GetRolloffFactor(a)\n#define IDirectSound3DListener_GetVelocity(p,a)                 (p)->GetVelocity(a)\n#define IDirectSound3DListener_SetAllParameters(p,a,b)          (p)->SetAllParameters(a,b)\n#define IDirectSound3DListener_SetDistanceFactor(p,a,b)         (p)->SetDistanceFactor(a,b)\n#define IDirectSound3DListener_SetDopplerFactor(p,a,b)          (p)->SetDopplerFactor(a,b)\n#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g)  (p)->SetOrientation(a,b,c,d,e,f,g)\n#define IDirectSound3DListener_SetPosition(p,a,b,c,d)           (p)->SetPosition(a,b,c,d)\n#define IDirectSound3DListener_SetRolloffFactor(p,a,b)          (p)->SetRolloffFactor(a,b)\n#define IDirectSound3DListener_SetVelocity(p,a,b,c,d)           (p)->SetVelocity(a,b,c,d)\n#define IDirectSound3DListener_CommitDeferredSettings(p)        (p)->CommitDeferredSettings()\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSound3DBuffer\n//\n\nDEFINE_GUID(IID_IDirectSound3DBuffer, 0x279AFA86, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60);\n\n#undef INTERFACE\n#define INTERFACE IDirectSound3DBuffer\n\nDECLARE_INTERFACE_(IDirectSound3DBuffer, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundBuffer3D methods\n    STDMETHOD(GetAllParameters)     (THIS_ LPDS3DBUFFER) PURE;\n    STDMETHOD(GetConeAngles)        (THIS_ LPDWORD, LPDWORD) PURE;\n    STDMETHOD(GetConeOrientation)   (THIS_ LPD3DVECTOR) PURE;\n    STDMETHOD(GetConeOutsideVolume) (THIS_ LPLONG) PURE;\n    STDMETHOD(GetMaxDistance)       (THIS_ LPD3DVALUE) PURE;\n    STDMETHOD(GetMinDistance)       (THIS_ LPD3DVALUE) PURE;\n    STDMETHOD(GetMode)              (THIS_ LPDWORD) PURE;\n    STDMETHOD(GetPosition)          (THIS_ LPD3DVECTOR) PURE;\n    STDMETHOD(GetVelocity)          (THIS_ LPD3DVECTOR) PURE;\n    STDMETHOD(SetAllParameters)     (THIS_ LPCDS3DBUFFER, DWORD) PURE;\n    STDMETHOD(SetConeAngles)        (THIS_ DWORD, DWORD, DWORD) PURE;\n    STDMETHOD(SetConeOrientation)   (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE;\n    STDMETHOD(SetConeOutsideVolume) (THIS_ LONG, DWORD) PURE;\n    STDMETHOD(SetMaxDistance)       (THIS_ D3DVALUE, DWORD) PURE;\n    STDMETHOD(SetMinDistance)       (THIS_ D3DVALUE, DWORD) PURE;\n    STDMETHOD(SetMode)              (THIS_ DWORD, DWORD) PURE;\n    STDMETHOD(SetPosition)          (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE;\n    STDMETHOD(SetVelocity)          (THIS_ D3DVALUE, D3DVALUE, D3DVALUE, DWORD) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSound3DBuffer_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSound3DBuffer_AddRef(p)                  (p)->lpVtbl->AddRef(p)\n#define IDirectSound3DBuffer_Release(p)                 (p)->lpVtbl->Release(p)\n#define IDirectSound3DBuffer_GetAllParameters(p,a)      (p)->lpVtbl->GetAllParameters(p,a)\n#define IDirectSound3DBuffer_GetConeAngles(p,a,b)       (p)->lpVtbl->GetConeAngles(p,a,b)\n#define IDirectSound3DBuffer_GetConeOrientation(p,a)    (p)->lpVtbl->GetConeOrientation(p,a)\n#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a)  (p)->lpVtbl->GetConeOutsideVolume(p,a)\n#define IDirectSound3DBuffer_GetPosition(p,a)           (p)->lpVtbl->GetPosition(p,a)\n#define IDirectSound3DBuffer_GetMinDistance(p,a)        (p)->lpVtbl->GetMinDistance(p,a)\n#define IDirectSound3DBuffer_GetMaxDistance(p,a)        (p)->lpVtbl->GetMaxDistance(p,a)\n#define IDirectSound3DBuffer_GetMode(p,a)               (p)->lpVtbl->GetMode(p,a)\n#define IDirectSound3DBuffer_GetVelocity(p,a)           (p)->lpVtbl->GetVelocity(p,a)\n#define IDirectSound3DBuffer_SetAllParameters(p,a,b)    (p)->lpVtbl->SetAllParameters(p,a,b)\n#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c)     (p)->lpVtbl->SetConeAngles(p,a,b,c)\n#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->lpVtbl->SetConeOrientation(p,a,b,c,d)\n#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b)(p)->lpVtbl->SetConeOutsideVolume(p,a,b)\n#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d)     (p)->lpVtbl->SetPosition(p,a,b,c,d)\n#define IDirectSound3DBuffer_SetMinDistance(p,a,b)      (p)->lpVtbl->SetMinDistance(p,a,b)\n#define IDirectSound3DBuffer_SetMaxDistance(p,a,b)      (p)->lpVtbl->SetMaxDistance(p,a,b)\n#define IDirectSound3DBuffer_SetMode(p,a,b)             (p)->lpVtbl->SetMode(p,a,b)\n#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d)     (p)->lpVtbl->SetVelocity(p,a,b,c,d)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSound3DBuffer_QueryInterface(p,a,b)      (p)->QueryInterface(a,b)\n#define IDirectSound3DBuffer_AddRef(p)                  (p)->AddRef()\n#define IDirectSound3DBuffer_Release(p)                 (p)->Release()\n#define IDirectSound3DBuffer_GetAllParameters(p,a)      (p)->GetAllParameters(a)\n#define IDirectSound3DBuffer_GetConeAngles(p,a,b)       (p)->GetConeAngles(a,b)\n#define IDirectSound3DBuffer_GetConeOrientation(p,a)    (p)->GetConeOrientation(a)\n#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a)  (p)->GetConeOutsideVolume(a)\n#define IDirectSound3DBuffer_GetPosition(p,a)           (p)->GetPosition(a)\n#define IDirectSound3DBuffer_GetMinDistance(p,a)        (p)->GetMinDistance(a)\n#define IDirectSound3DBuffer_GetMaxDistance(p,a)        (p)->GetMaxDistance(a)\n#define IDirectSound3DBuffer_GetMode(p,a)               (p)->GetMode(a)\n#define IDirectSound3DBuffer_GetVelocity(p,a)           (p)->GetVelocity(a)\n#define IDirectSound3DBuffer_SetAllParameters(p,a,b)    (p)->SetAllParameters(a,b)\n#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c)     (p)->SetConeAngles(a,b,c)\n#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->SetConeOrientation(a,b,c,d)\n#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b)(p)->SetConeOutsideVolume(a,b)\n#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d)     (p)->SetPosition(a,b,c,d)\n#define IDirectSound3DBuffer_SetMinDistance(p,a,b)      (p)->SetMinDistance(a,b)\n#define IDirectSound3DBuffer_SetMaxDistance(p,a,b)      (p)->SetMaxDistance(a,b)\n#define IDirectSound3DBuffer_SetMode(p,a,b)             (p)->SetMode(a,b)\n#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d)     (p)->SetVelocity(a,b,c,d)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSoundCapture\n//\n\nDEFINE_GUID(IID_IDirectSoundCapture, 0xb0210781, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16);\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundCapture\n\nDECLARE_INTERFACE_(IDirectSoundCapture, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundCapture methods\n    STDMETHOD(CreateCaptureBuffer)  (THIS_ LPCDSCBUFFERDESC, LPDIRECTSOUNDCAPTUREBUFFER *, LPUNKNOWN) PURE;\n    STDMETHOD(GetCaps)              (THIS_ LPDSCCAPS ) PURE;\n    STDMETHOD(Initialize)           (THIS_ LPGUID) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundCapture_QueryInterface(p,a,b)           (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSoundCapture_AddRef(p)                       (p)->lpVtbl->AddRef(p)\n#define IDirectSoundCapture_Release(p)                      (p)->lpVtbl->Release(p)\n#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c)    (p)->lpVtbl->CreateCaptureBuffer(p,a,b,c)\n#define IDirectSoundCapture_GetCaps(p,a)                    (p)->lpVtbl->GetCaps(p,a)\n#define IDirectSoundCapture_Initialize(p,a)                 (p)->lpVtbl->Initialize(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundCapture_QueryInterface(p,a,b)           (p)->QueryInterface(a,b)\n#define IDirectSoundCapture_AddRef(p)                       (p)->AddRef()\n#define IDirectSoundCapture_Release(p)                      (p)->Release()\n#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c)    (p)->CreateCaptureBuffer(a,b,c)\n#define IDirectSoundCapture_GetCaps(p,a)                    (p)->GetCaps(a)\n#define IDirectSoundCapture_Initialize(p,a)                 (p)->Initialize(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSoundCaptureBuffer\n//\n\nDEFINE_GUID(IID_IDirectSoundCaptureBuffer, 0xb0210782, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16);\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundCaptureBuffer\n\nDECLARE_INTERFACE_(IDirectSoundCaptureBuffer, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundCaptureBuffer methods\n    STDMETHOD(GetCaps)              (THIS_ LPDSCBCAPS ) PURE;\n    STDMETHOD(GetCurrentPosition)   (THIS_ LPDWORD, LPDWORD ) PURE;\n    STDMETHOD(GetFormat)            (THIS_ LPWAVEFORMATEX, DWORD, LPDWORD ) PURE;\n    STDMETHOD(GetStatus)            (THIS_ LPDWORD ) PURE;\n    STDMETHOD(Initialize)           (THIS_ LPDIRECTSOUNDCAPTURE, LPCDSCBUFFERDESC) PURE;\n    STDMETHOD(Lock)                 (THIS_ DWORD, DWORD, LPVOID *, LPDWORD, LPVOID *, LPDWORD, DWORD) PURE;\n    STDMETHOD(Start)                (THIS_ DWORD) PURE;\n    STDMETHOD(Stop)                 (THIS) PURE;\n    STDMETHOD(Unlock)               (THIS_ LPVOID, DWORD, LPVOID, DWORD) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundCaptureBuffer_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSoundCaptureBuffer_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirectSoundCaptureBuffer_Release(p)                   (p)->lpVtbl->Release(p)\n#define IDirectSoundCaptureBuffer_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)\n#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b)    (p)->lpVtbl->GetCurrentPosition(p,a,b)\n#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c)           (p)->lpVtbl->GetFormat(p,a,b,c)\n#define IDirectSoundCaptureBuffer_GetStatus(p,a)               (p)->lpVtbl->GetStatus(p,a)\n#define IDirectSoundCaptureBuffer_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g)        (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)\n#define IDirectSoundCaptureBuffer_Start(p,a)                   (p)->lpVtbl->Start(p,a)\n#define IDirectSoundCaptureBuffer_Stop(p)                      (p)->lpVtbl->Stop(p)\n#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d)            (p)->lpVtbl->Unlock(p,a,b,c,d)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundCaptureBuffer_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirectSoundCaptureBuffer_AddRef(p)                    (p)->AddRef()\n#define IDirectSoundCaptureBuffer_Release(p)                   (p)->Release()\n#define IDirectSoundCaptureBuffer_GetCaps(p,a)                 (p)->GetCaps(a)\n#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b)    (p)->GetCurrentPosition(a,b)\n#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c)           (p)->GetFormat(a,b,c)\n#define IDirectSoundCaptureBuffer_GetStatus(p,a)               (p)->GetStatus(a)\n#define IDirectSoundCaptureBuffer_Initialize(p,a,b)            (p)->Initialize(a,b)\n#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g)        (p)->Lock(a,b,c,d,e,f,g)\n#define IDirectSoundCaptureBuffer_Start(p,a)                   (p)->Start(a)\n#define IDirectSoundCaptureBuffer_Stop(p)                      (p)->Stop()\n#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d)            (p)->Unlock(a,b,c,d)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSoundNotify\n//\n\nDEFINE_GUID(IID_IDirectSoundNotify, 0xb0210783, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16);\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundNotify\n\nDECLARE_INTERFACE_(IDirectSoundNotify, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)           (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)            (THIS) PURE;\n    STDMETHOD_(ULONG,Release)           (THIS) PURE;\n\n    // IDirectSoundNotify methods\n    STDMETHOD(SetNotificationPositions) (THIS_ DWORD, LPCDSBPOSITIONNOTIFY) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundNotify_QueryInterface(p,a,b)            (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectSoundNotify_AddRef(p)                        (p)->lpVtbl->AddRef(p)\n#define IDirectSoundNotify_Release(p)                       (p)->lpVtbl->Release(p)\n#define IDirectSoundNotify_SetNotificationPositions(p,a,b)  (p)->lpVtbl->SetNotificationPositions(p,a,b)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundNotify_QueryInterface(p,a,b)            (p)->QueryInterface(a,b)\n#define IDirectSoundNotify_AddRef(p)                        (p)->AddRef()\n#define IDirectSoundNotify_Release(p)                       (p)->Release()\n#define IDirectSoundNotify_SetNotificationPositions(p,a,b)  (p)->SetNotificationPositions(a,b)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IKsPropertySet\n//\n\n#ifndef _IKsPropertySet_\n#define _IKsPropertySet_\n\n#ifdef __cplusplus\n// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined\nstruct IKsPropertySet;\n#endif // __cplusplus\n\ntypedef struct IKsPropertySet *LPKSPROPERTYSET;\n\n#define KSPROPERTY_SUPPORT_GET  0x00000001\n#define KSPROPERTY_SUPPORT_SET  0x00000002\n\nDEFINE_GUID(IID_IKsPropertySet, 0x31efac30, 0x515c, 0x11d0, 0xa9, 0xaa, 0x00, 0xaa, 0x00, 0x61, 0xbe, 0x93);\n\n#undef INTERFACE\n#define INTERFACE IKsPropertySet\n\nDECLARE_INTERFACE_(IKsPropertySet, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)   (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)    (THIS) PURE;\n    STDMETHOD_(ULONG,Release)   (THIS) PURE;\n\n    // IKsPropertySet methods\n    STDMETHOD(Get)              (THIS_ REFGUID, ULONG, LPVOID, ULONG, LPVOID, ULONG, PULONG) PURE;\n    STDMETHOD(Set)              (THIS_ REFGUID, ULONG, LPVOID, ULONG, LPVOID, ULONG) PURE;\n    STDMETHOD(QuerySupport)     (THIS_ REFGUID, ULONG, PULONG) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IKsPropertySet_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)\n#define IKsPropertySet_AddRef(p)                   (p)->lpVtbl->AddRef(p)\n#define IKsPropertySet_Release(p)                  (p)->lpVtbl->Release(p)\n#define IKsPropertySet_Get(p,a,b,c,d,e,f,g)        (p)->lpVtbl->Get(p,a,b,c,d,e,f,g)\n#define IKsPropertySet_Set(p,a,b,c,d,e,f)          (p)->lpVtbl->Set(p,a,b,c,d,e,f)\n#define IKsPropertySet_QuerySupport(p,a,b,c)       (p)->lpVtbl->QuerySupport(p,a,b,c)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IKsPropertySet_QueryInterface(p,a,b)       (p)->QueryInterface(a,b)\n#define IKsPropertySet_AddRef(p)                   (p)->AddRef()\n#define IKsPropertySet_Release(p)                  (p)->Release()\n#define IKsPropertySet_Get(p,a,b,c,d,e,f,g)        (p)->Get(a,b,c,d,e,f,g)\n#define IKsPropertySet_Set(p,a,b,c,d,e,f)          (p)->Set(a,b,c,d,e,f)\n#define IKsPropertySet_QuerySupport(p,a,b,c)       (p)->QuerySupport(a,b,c)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n#endif // _IKsPropertySet_\n\n//\n// Return Codes\n//\n\n#define DS_OK                           0\n\n// The call failed because resources (such as a priority level)\n// were already being used by another caller.\n#define DSERR_ALLOCATED                 MAKE_DSHRESULT(10)\n\n// The control (vol,pan,etc.) requested by the caller is not available.\n#define DSERR_CONTROLUNAVAIL            MAKE_DSHRESULT(30)\n\n// An invalid parameter was passed to the returning function\n#define DSERR_INVALIDPARAM              E_INVALIDARG\n\n// This call is not valid for the current state of this object\n#define DSERR_INVALIDCALL               MAKE_DSHRESULT(50)\n\n// An undetermined error occured inside the DirectSound subsystem\n#define DSERR_GENERIC                   E_FAIL\n\n// The caller does not have the priority level required for the function to\n// succeed.\n#define DSERR_PRIOLEVELNEEDED           MAKE_DSHRESULT(70)\n\n// Not enough free memory is available to complete the operation\n#define DSERR_OUTOFMEMORY               E_OUTOFMEMORY\n\n// The specified WAVE format is not supported\n#define DSERR_BADFORMAT                 MAKE_DSHRESULT(100)\n\n// The function called is not supported at this time\n#define DSERR_UNSUPPORTED               E_NOTIMPL\n\n// No sound driver is available for use\n#define DSERR_NODRIVER                  MAKE_DSHRESULT(120)\n\n// This object is already initialized\n#define DSERR_ALREADYINITIALIZED        MAKE_DSHRESULT(130)\n\n// This object does not support aggregation\n#define DSERR_NOAGGREGATION             CLASS_E_NOAGGREGATION\n\n// The buffer memory has been lost, and must be restored.\n#define DSERR_BUFFERLOST                MAKE_DSHRESULT(150)\n\n// Another app has a higher priority level, preventing this call from\n// succeeding.\n#define DSERR_OTHERAPPHASPRIO           MAKE_DSHRESULT(160)\n\n// This object has not been initialized\n#define DSERR_UNINITIALIZED             MAKE_DSHRESULT(170)\n\n// The requested COM interface is not available\n#define DSERR_NOINTERFACE               E_NOINTERFACE\n\n//\n// Flags\n//\n\n#define DSCAPS_PRIMARYMONO          0x00000001\n#define DSCAPS_PRIMARYSTEREO        0x00000002\n#define DSCAPS_PRIMARY8BIT          0x00000004\n#define DSCAPS_PRIMARY16BIT         0x00000008\n#define DSCAPS_CONTINUOUSRATE       0x00000010\n#define DSCAPS_EMULDRIVER           0x00000020\n#define DSCAPS_CERTIFIED            0x00000040\n#define DSCAPS_SECONDARYMONO        0x00000100\n#define DSCAPS_SECONDARYSTEREO      0x00000200\n#define DSCAPS_SECONDARY8BIT        0x00000400\n#define DSCAPS_SECONDARY16BIT       0x00000800\n\n#define DSBPLAY_LOOPING             0x00000001\n      \n#define DSBSTATUS_PLAYING           0x00000001\n#define DSBSTATUS_BUFFERLOST        0x00000002\n#define DSBSTATUS_LOOPING           0x00000004\n\n#define DSBLOCK_FROMWRITECURSOR     0x00000001\n#define DSBLOCK_ENTIREBUFFER        0x00000002\n\n#define DSSCL_NORMAL                0x00000001\n#define DSSCL_PRIORITY              0x00000002\n#define DSSCL_EXCLUSIVE             0x00000003\n#define DSSCL_WRITEPRIMARY          0x00000004\n\n#define DS3DMODE_NORMAL             0x00000000\n#define DS3DMODE_HEADRELATIVE       0x00000001\n#define DS3DMODE_DISABLE            0x00000002\n\n#define DS3D_IMMEDIATE              0x00000000\n#define DS3D_DEFERRED               0x00000001\n\n#define DS3D_MINDISTANCEFACTOR      0.0f\n#define DS3D_MAXDISTANCEFACTOR      10.0f\n#define DS3D_DEFAULTDISTANCEFACTOR  1.0f\n\n#define DS3D_MINROLLOFFFACTOR       0.0f\n#define DS3D_MAXROLLOFFFACTOR       10.0f\n#define DS3D_DEFAULTROLLOFFFACTOR   1.0f\n\n#define DS3D_MINDOPPLERFACTOR       0.0f\n#define DS3D_MAXDOPPLERFACTOR       10.0f\n#define DS3D_DEFAULTDOPPLERFACTOR   1.0f\n\n#define DS3D_DEFAULTMINDISTANCE     1.0f\n#define DS3D_DEFAULTMAXDISTANCE     1000000000.0f\n\n#define DS3D_MINCONEANGLE           0\n#define DS3D_MAXCONEANGLE           360\n#define DS3D_DEFAULTCONEANGLE       360\n\n#define DS3D_DEFAULTCONEOUTSIDEVOLUME   0\n\n#define DSBCAPS_PRIMARYBUFFER       0x00000001\n#define DSBCAPS_STATIC              0x00000002\n#define DSBCAPS_LOCHARDWARE         0x00000004\n#define DSBCAPS_LOCSOFTWARE         0x00000008\n#define DSBCAPS_CTRL3D              0x00000010\n#define DSBCAPS_CTRLFREQUENCY       0x00000020\n#define DSBCAPS_CTRLPAN             0x00000040\n#define DSBCAPS_CTRLVOLUME          0x00000080\n#define DSBCAPS_CTRLPOSITIONNOTIFY  0x00000100\n#define DSBCAPS_CTRLDEFAULT         0x000000E0\n#define DSBCAPS_CTRLALL             0x000001F0\n#define DSBCAPS_STICKYFOCUS         0x00004000\n#define DSBCAPS_GLOBALFOCUS         0x00008000 \n#define DSBCAPS_GETCURRENTPOSITION2 0x00010000\n#define DSBCAPS_MUTE3DATMAXDISTANCE 0x00020000\n\n#define DSCBCAPS_WAVEMAPPED         0x80000000\n\n#define DSSPEAKER_HEADPHONE         0x00000001\n#define DSSPEAKER_MONO              0x00000002\n#define DSSPEAKER_QUAD              0x00000003\n#define DSSPEAKER_STEREO            0x00000004\n#define DSSPEAKER_SURROUND          0x00000005\n\n#define DSSPEAKER_GEOMETRY_MIN      0x00000005  //   5 degrees\n#define DSSPEAKER_GEOMETRY_NARROW   0x0000000A  //  10 degrees\n#define DSSPEAKER_GEOMETRY_WIDE     0x00000014  //  20 degrees\n#define DSSPEAKER_GEOMETRY_MAX      0x000000B4  // 180 degrees\n\n#define DSSPEAKER_COMBINED(c, g)    ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16))\n#define DSSPEAKER_CONFIG(a)         ((BYTE)(a))\n#define DSSPEAKER_GEOMETRY(a)       ((BYTE)(((DWORD)(a) >> 16) & 0x00FF))\n\n#define DSCCAPS_EMULDRIVER          0x00000020\n\n#define DSCBLOCK_ENTIREBUFFER       0x00000001\n\n#define DSCBSTATUS_CAPTURING        0x00000001\n#define DSCBSTATUS_LOOPING          0x00000002\n\n#define DSCBSTART_LOOPING           0x00000001\n\n#define DSBFREQUENCY_MIN            100\n#define DSBFREQUENCY_MAX            100000\n#define DSBFREQUENCY_ORIGINAL       0\n\n#define DSBPAN_LEFT                 -10000\n#define DSBPAN_CENTER               0\n#define DSBPAN_RIGHT                10000\n\n#define DSBVOLUME_MIN               -10000\n#define DSBVOLUME_MAX               0\n\n#define DSBSIZE_MIN                 4\n#define DSBSIZE_MAX                 0x0FFFFFFF\n\n#define DSBPN_OFFSETSTOP            0xFFFFFFFF\n\n#ifdef __cplusplus\n};\n#endif // __cplusplus\n\n#endif  // __DSOUND_INCLUDED__ \n"
  },
  {
    "path": "Include/3DFX.H",
    "content": "/*\n** Copyright (c) 1995, 3Dfx Interactive, Inc.\n** All Rights Reserved.\n**\n** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.;\n** the contents of this file may not be disclosed to third parties, copied or\n** duplicated in any form, in whole or in part, without the prior written\n** permission of 3Dfx Interactive, Inc.\n**\n** RESTRICTED RIGHTS LEGEND:\n** Use, duplication or disclosure by the Government is subject to restrictions\n** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data\n** and Computer Software clause at DFARS 252.227-7013, and/or in similar or\n** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished  -\n** rights reserved under the Copyright Laws of the United States.\n**\n** $Revision: 9 $\n** $Date: 12/23/97 9:57a $\n*/\n#ifndef __3DFX_H__\n#define __3DFX_H__\n\n/*\n** basic data types\n*/\ntypedef unsigned char   FxU8;\ntypedef signed   char   FxI8;\ntypedef unsigned short  FxU16;\ntypedef signed   short  FxI16;\ntypedef signed   long   FxI32;\ntypedef unsigned long   FxU32;\ntypedef int             FxBool;\ntypedef float           FxFloat;\ntypedef double          FxDouble;\n\n/*\n** color types\n*/\ntypedef unsigned long                FxColor_t;\ntypedef struct { float r, g, b, a; } FxColor4;\n\n/*\n** fundamental types\n*/\n#define FXTRUE    1\n#define FXFALSE   0\n\n/*\n** helper macros\n*/\n#define FXUNUSED( a ) ((void)(a))\n#define FXBIT( i )    ( 1L << (i) )\n\n/*\n** export macros\n*/\n\n#if defined(__MSC__)\n#  if defined (MSVC16)\n#    define FX_ENTRY \n#    define FX_CALL\n#  else\n#    define FX_ENTRY extern\n#    define FX_CALL  __stdcall\n#  endif\n#elif defined(__WATCOMC__)\n#  define FX_ENTRY extern\n#  define FX_CALL  __stdcall\n#elif defined (__IBMC__) || defined (__IBMCPP__)\n   /*  IBM Visual Age C/C++: */\n#  define FX_ENTRY extern\n#  define FX_CALL  __stdcall\n#elif defined(__DJGPP__)\n#  define FX_ENTRY extern\n#  define FX_CALL\n#elif defined(__unix__)\n#  define FX_ENTRY extern\n#  define FX_CALL\n#elif defined(__MWERKS__)\n#  if macintosh\n#    define FX_ENTRY extern\n#    define FX_CALL\n#  else /* !macintosh */\n#    error \"Unknown MetroWerks target platform\"\n#  endif /* !macintosh */\n#else\n#  warning define FX_ENTRY & FX_CALL for your compiler\n#  define FX_ENTRY extern\n#  define FX_CALL\n#endif\n\n/*\n** x86 compiler specific stuff\n*/\n#if defined(__BORLANDC_)\n#  define REALMODE\n\n#  define REGW( a, b ) ((a).x.b)\n#  define REGB( a, b ) ((a).h.b)\n#  define INT86( a, b, c ) int86(a,b,c)\n#  define INT86X( a, b, c, d ) int86x(a,b,c,d)\n\n#  define RM_SEG( a ) FP_SEG( a )\n#  define RM_OFF( a ) FP_OFF( a )\n#elif defined(__WATCOMC__)\n#  undef FP_SEG\n#  undef FP_OFF\n\n#  define REGW( a, b ) ((a).w.b)\n#  define REGB( a, b ) ((a).h.b)\n#  define INT86( a, b, c ) int386(a,b,c)\n#  define INT86X( a, b, c, d ) int386x(a,b,c,d)\n\n#  define RM_SEG( a )  ( ( ( ( FxU32 ) (a) ) & 0x000F0000 ) >> 4 )\n#  define RM_OFF( a )  ( ( FxU16 ) (a) )\n#endif\n\n#endif /* !__3DFX_H__ */\n"
  },
  {
    "path": "Include/D3D10.h",
    "content": "/*-------------------------------------------------------------------------------------\n *\n * Copyright (c) Microsoft Corporation\n *\n *-------------------------------------------------------------------------------------*/\n\n\n/* this ALWAYS GENERATED file contains the definitions for the interfaces */\n\n\n /* File created by MIDL compiler version 7.00.0555 */\n/* @@MIDL_FILE_HEADING(  ) */\n\n#pragma warning( disable: 4049 )  /* more than 64k source lines */\n\n\n/* verify that the <rpcndr.h> version is high enough to compile this file*/\n#ifndef __REQUIRED_RPCNDR_H_VERSION__\n#define __REQUIRED_RPCNDR_H_VERSION__ 475\n#endif\n\n/* verify that the <rpcsal.h> version is high enough to compile this file*/\n#ifndef __REQUIRED_RPCSAL_H_VERSION__\n#define __REQUIRED_RPCSAL_H_VERSION__ 100\n#endif\n\n#include \"rpc.h\"\n#include \"rpcndr.h\"\n\n#ifndef __RPCNDR_H_VERSION__\n#error this stub requires an updated version of <rpcndr.h>\n#endif // __RPCNDR_H_VERSION__\n\n#ifndef COM_NO_WINDOWS_H\n#include \"windows.h\"\n#include \"ole2.h\"\n#endif /*COM_NO_WINDOWS_H*/\n\n#ifndef __d3d10_h__\n#define __d3d10_h__\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n#pragma once\n#endif\n\n/* Forward Declarations */ \n\n#ifndef __ID3D10DeviceChild_FWD_DEFINED__\n#define __ID3D10DeviceChild_FWD_DEFINED__\ntypedef interface ID3D10DeviceChild ID3D10DeviceChild;\n#endif \t/* __ID3D10DeviceChild_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10DepthStencilState_FWD_DEFINED__\n#define __ID3D10DepthStencilState_FWD_DEFINED__\ntypedef interface ID3D10DepthStencilState ID3D10DepthStencilState;\n#endif \t/* __ID3D10DepthStencilState_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10BlendState_FWD_DEFINED__\n#define __ID3D10BlendState_FWD_DEFINED__\ntypedef interface ID3D10BlendState ID3D10BlendState;\n#endif \t/* __ID3D10BlendState_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10RasterizerState_FWD_DEFINED__\n#define __ID3D10RasterizerState_FWD_DEFINED__\ntypedef interface ID3D10RasterizerState ID3D10RasterizerState;\n#endif \t/* __ID3D10RasterizerState_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10Resource_FWD_DEFINED__\n#define __ID3D10Resource_FWD_DEFINED__\ntypedef interface ID3D10Resource ID3D10Resource;\n#endif \t/* __ID3D10Resource_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10Buffer_FWD_DEFINED__\n#define __ID3D10Buffer_FWD_DEFINED__\ntypedef interface ID3D10Buffer ID3D10Buffer;\n#endif \t/* __ID3D10Buffer_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10Texture1D_FWD_DEFINED__\n#define __ID3D10Texture1D_FWD_DEFINED__\ntypedef interface ID3D10Texture1D ID3D10Texture1D;\n#endif \t/* __ID3D10Texture1D_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10Texture2D_FWD_DEFINED__\n#define __ID3D10Texture2D_FWD_DEFINED__\ntypedef interface ID3D10Texture2D ID3D10Texture2D;\n#endif \t/* __ID3D10Texture2D_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10Texture3D_FWD_DEFINED__\n#define __ID3D10Texture3D_FWD_DEFINED__\ntypedef interface ID3D10Texture3D ID3D10Texture3D;\n#endif \t/* __ID3D10Texture3D_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10View_FWD_DEFINED__\n#define __ID3D10View_FWD_DEFINED__\ntypedef interface ID3D10View ID3D10View;\n#endif \t/* __ID3D10View_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10ShaderResourceView_FWD_DEFINED__\n#define __ID3D10ShaderResourceView_FWD_DEFINED__\ntypedef interface ID3D10ShaderResourceView ID3D10ShaderResourceView;\n#endif \t/* __ID3D10ShaderResourceView_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10RenderTargetView_FWD_DEFINED__\n#define __ID3D10RenderTargetView_FWD_DEFINED__\ntypedef interface ID3D10RenderTargetView ID3D10RenderTargetView;\n#endif \t/* __ID3D10RenderTargetView_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10DepthStencilView_FWD_DEFINED__\n#define __ID3D10DepthStencilView_FWD_DEFINED__\ntypedef interface ID3D10DepthStencilView ID3D10DepthStencilView;\n#endif \t/* __ID3D10DepthStencilView_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10VertexShader_FWD_DEFINED__\n#define __ID3D10VertexShader_FWD_DEFINED__\ntypedef interface ID3D10VertexShader ID3D10VertexShader;\n#endif \t/* __ID3D10VertexShader_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10GeometryShader_FWD_DEFINED__\n#define __ID3D10GeometryShader_FWD_DEFINED__\ntypedef interface ID3D10GeometryShader ID3D10GeometryShader;\n#endif \t/* __ID3D10GeometryShader_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10PixelShader_FWD_DEFINED__\n#define __ID3D10PixelShader_FWD_DEFINED__\ntypedef interface ID3D10PixelShader ID3D10PixelShader;\n#endif \t/* __ID3D10PixelShader_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10InputLayout_FWD_DEFINED__\n#define __ID3D10InputLayout_FWD_DEFINED__\ntypedef interface ID3D10InputLayout ID3D10InputLayout;\n#endif \t/* __ID3D10InputLayout_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10SamplerState_FWD_DEFINED__\n#define __ID3D10SamplerState_FWD_DEFINED__\ntypedef interface ID3D10SamplerState ID3D10SamplerState;\n#endif \t/* __ID3D10SamplerState_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10Asynchronous_FWD_DEFINED__\n#define __ID3D10Asynchronous_FWD_DEFINED__\ntypedef interface ID3D10Asynchronous ID3D10Asynchronous;\n#endif \t/* __ID3D10Asynchronous_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10Query_FWD_DEFINED__\n#define __ID3D10Query_FWD_DEFINED__\ntypedef interface ID3D10Query ID3D10Query;\n#endif \t/* __ID3D10Query_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10Predicate_FWD_DEFINED__\n#define __ID3D10Predicate_FWD_DEFINED__\ntypedef interface ID3D10Predicate ID3D10Predicate;\n#endif \t/* __ID3D10Predicate_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10Counter_FWD_DEFINED__\n#define __ID3D10Counter_FWD_DEFINED__\ntypedef interface ID3D10Counter ID3D10Counter;\n#endif \t/* __ID3D10Counter_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10Device_FWD_DEFINED__\n#define __ID3D10Device_FWD_DEFINED__\ntypedef interface ID3D10Device ID3D10Device;\n#endif \t/* __ID3D10Device_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10Multithread_FWD_DEFINED__\n#define __ID3D10Multithread_FWD_DEFINED__\ntypedef interface ID3D10Multithread ID3D10Multithread;\n#endif \t/* __ID3D10Multithread_FWD_DEFINED__ */\n\n\n/* header files for imported files */\n#include \"oaidl.h\"\n#include \"ocidl.h\"\n#include \"dxgi.h\"\n#include \"d3dcommon.h\"\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif \n\n\n/* interface __MIDL_itf_d3d10_0000_0000 */\n/* [local] */ \n\n#ifndef _D3D10_CONSTANTS\n#define _D3D10_CONSTANTS\n#define\tD3D10_16BIT_INDEX_STRIP_CUT_VALUE\t( 0xffff )\n\n#define\tD3D10_32BIT_INDEX_STRIP_CUT_VALUE\t( 0xffffffff )\n\n#define\tD3D10_8BIT_INDEX_STRIP_CUT_VALUE\t( 0xff )\n\n#define\tD3D10_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT\t( 9 )\n\n#define\tD3D10_CLIP_OR_CULL_DISTANCE_COUNT\t( 8 )\n\n#define\tD3D10_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT\t( 2 )\n\n#define\tD3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT\t( 14 )\n\n#define\tD3D10_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS\t( 4 )\n\n#define\tD3D10_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D10_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT\t( 15 )\n\n#define\tD3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT\t( 15 )\n\n#define\tD3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST\t( 1 )\n\n#define\tD3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D10_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT\t( 64 )\n\n#define\tD3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT\t( 1 )\n\n#define\tD3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST\t( 1 )\n\n#define\tD3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D10_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT\t( 128 )\n\n#define\tD3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST\t( 1 )\n\n#define\tD3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT\t( 128 )\n\n#define\tD3D10_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D10_COMMONSHADER_SAMPLER_REGISTER_COUNT\t( 16 )\n\n#define\tD3D10_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST\t( 1 )\n\n#define\tD3D10_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D10_COMMONSHADER_SAMPLER_SLOT_COUNT\t( 16 )\n\n#define\tD3D10_COMMONSHADER_SUBROUTINE_NESTING_LIMIT\t( 32 )\n\n#define\tD3D10_COMMONSHADER_TEMP_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D10_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D10_COMMONSHADER_TEMP_REGISTER_COUNT\t( 4096 )\n\n#define\tD3D10_COMMONSHADER_TEMP_REGISTER_READS_PER_INST\t( 3 )\n\n#define\tD3D10_COMMONSHADER_TEMP_REGISTER_READ_PORTS\t( 3 )\n\n#define\tD3D10_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX\t( 10 )\n\n#define\tD3D10_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN\t( -10 )\n\n#define\tD3D10_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE\t( -8 )\n\n#define\tD3D10_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE\t( 7 )\n\n#define D3D10_DEFAULT_BLEND_FACTOR_ALPHA\t( 1.0f )\n#define D3D10_DEFAULT_BLEND_FACTOR_BLUE\t( 1.0f )\n#define D3D10_DEFAULT_BLEND_FACTOR_GREEN\t( 1.0f )\n#define D3D10_DEFAULT_BLEND_FACTOR_RED\t( 1.0f )\n#define D3D10_DEFAULT_BORDER_COLOR_COMPONENT\t( 0.0f )\n#define\tD3D10_DEFAULT_DEPTH_BIAS\t( 0 )\n\n#define D3D10_DEFAULT_DEPTH_BIAS_CLAMP\t( 0.0f )\n#define D3D10_DEFAULT_MAX_ANISOTROPY\t( 16.0f )\n#define D3D10_DEFAULT_MIP_LOD_BIAS\t( 0.0f )\n#define\tD3D10_DEFAULT_RENDER_TARGET_ARRAY_INDEX\t( 0 )\n\n#define\tD3D10_DEFAULT_SAMPLE_MASK\t( 0xffffffff )\n\n#define\tD3D10_DEFAULT_SCISSOR_ENDX\t( 0 )\n\n#define\tD3D10_DEFAULT_SCISSOR_ENDY\t( 0 )\n\n#define\tD3D10_DEFAULT_SCISSOR_STARTX\t( 0 )\n\n#define\tD3D10_DEFAULT_SCISSOR_STARTY\t( 0 )\n\n#define D3D10_DEFAULT_SLOPE_SCALED_DEPTH_BIAS\t( 0.0f )\n#define\tD3D10_DEFAULT_STENCIL_READ_MASK\t( 0xff )\n\n#define\tD3D10_DEFAULT_STENCIL_REFERENCE\t( 0 )\n\n#define\tD3D10_DEFAULT_STENCIL_WRITE_MASK\t( 0xff )\n\n#define\tD3D10_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX\t( 0 )\n\n#define\tD3D10_DEFAULT_VIEWPORT_HEIGHT\t( 0 )\n\n#define D3D10_DEFAULT_VIEWPORT_MAX_DEPTH\t( 0.0f )\n#define D3D10_DEFAULT_VIEWPORT_MIN_DEPTH\t( 0.0f )\n#define\tD3D10_DEFAULT_VIEWPORT_TOPLEFTX\t( 0 )\n\n#define\tD3D10_DEFAULT_VIEWPORT_TOPLEFTY\t( 0 )\n\n#define\tD3D10_DEFAULT_VIEWPORT_WIDTH\t( 0 )\n\n#define D3D10_FLOAT16_FUSED_TOLERANCE_IN_ULP\t( 0.6 )\n#define D3D10_FLOAT32_MAX\t( 3.402823466e+38f )\n#define D3D10_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP\t( 0.6f )\n#define D3D10_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR\t( 2.4f )\n#define D3D10_FLOAT_TO_SRGB_EXPONENT_NUMERATOR\t( 1.0f )\n#define D3D10_FLOAT_TO_SRGB_OFFSET\t( 0.055f )\n#define D3D10_FLOAT_TO_SRGB_SCALE_1\t( 12.92f )\n#define D3D10_FLOAT_TO_SRGB_SCALE_2\t( 1.055f )\n#define D3D10_FLOAT_TO_SRGB_THRESHOLD\t( 0.0031308f )\n#define D3D10_FTOI_INSTRUCTION_MAX_INPUT\t( 2147483647.999f )\n#define D3D10_FTOI_INSTRUCTION_MIN_INPUT\t( -2147483648.999f )\n#define D3D10_FTOU_INSTRUCTION_MAX_INPUT\t( 4294967295.999f )\n#define D3D10_FTOU_INSTRUCTION_MIN_INPUT\t( 0.0f )\n#define\tD3D10_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D10_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D10_GS_INPUT_PRIM_CONST_REGISTER_COUNT\t( 1 )\n\n#define\tD3D10_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D10_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D10_GS_INPUT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D10_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D10_GS_INPUT_REGISTER_COUNT\t( 16 )\n\n#define\tD3D10_GS_INPUT_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D10_GS_INPUT_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D10_GS_INPUT_REGISTER_VERTICES\t( 6 )\n\n#define\tD3D10_GS_OUTPUT_ELEMENTS\t( 32 )\n\n#define\tD3D10_GS_OUTPUT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D10_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D10_GS_OUTPUT_REGISTER_COUNT\t( 32 )\n\n#define\tD3D10_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES\t( 0 )\n\n#define\tD3D10_IA_DEFAULT_PRIMITIVE_TOPOLOGY\t( 0 )\n\n#define\tD3D10_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES\t( 0 )\n\n#define\tD3D10_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT\t( 1 )\n\n#define\tD3D10_IA_INSTANCE_ID_BIT_COUNT\t( 32 )\n\n#define\tD3D10_IA_INTEGER_ARITHMETIC_BIT_COUNT\t( 32 )\n\n#define\tD3D10_IA_PRIMITIVE_ID_BIT_COUNT\t( 32 )\n\n#define\tD3D10_IA_VERTEX_ID_BIT_COUNT\t( 32 )\n\n#define\tD3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT\t( 16 )\n\n#define\tD3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS\t( 64 )\n\n#define\tD3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT\t( 16 )\n\n#define\tD3D10_INTEGER_DIVIDE_BY_ZERO_QUOTIENT\t( 0xffffffff )\n\n#define\tD3D10_INTEGER_DIVIDE_BY_ZERO_REMAINDER\t( 0xffffffff )\n\n#define D3D10_LINEAR_GAMMA\t( 1.0f )\n#define D3D10_MAX_BORDER_COLOR_COMPONENT\t( 1.0f )\n#define D3D10_MAX_DEPTH\t( 1.0f )\n#define\tD3D10_MAX_MAXANISOTROPY\t( 16 )\n\n#define\tD3D10_MAX_MULTISAMPLE_SAMPLE_COUNT\t( 32 )\n\n#define D3D10_MAX_POSITION_VALUE\t( 3.402823466e+34f )\n#define\tD3D10_MAX_TEXTURE_DIMENSION_2_TO_EXP\t( 17 )\n\n#define D3D10_MIN_BORDER_COLOR_COMPONENT\t( 0.0f )\n#define D3D10_MIN_DEPTH\t( 0.0f )\n#define\tD3D10_MIN_MAXANISOTROPY\t( 0 )\n\n#define D3D10_MIP_LOD_BIAS_MAX\t( 15.99f )\n#define D3D10_MIP_LOD_BIAS_MIN\t( -16.0f )\n#define\tD3D10_MIP_LOD_FRACTIONAL_BIT_COUNT\t( 6 )\n\n#define\tD3D10_MIP_LOD_RANGE_BIT_COUNT\t( 8 )\n\n#define D3D10_MULTISAMPLE_ANTIALIAS_LINE_WIDTH\t( 1.4f )\n#define\tD3D10_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT\t( 0 )\n\n#define\tD3D10_PIXEL_ADDRESS_RANGE_BIT_COUNT\t( 13 )\n\n#define\tD3D10_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT\t( 15 )\n\n#define\tD3D10_PS_FRONTFACING_DEFAULT_VALUE\t( 0xffffffff )\n\n#define\tD3D10_PS_FRONTFACING_FALSE_VALUE\t( 0 )\n\n#define\tD3D10_PS_FRONTFACING_TRUE_VALUE\t( 0xffffffff )\n\n#define\tD3D10_PS_INPUT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D10_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D10_PS_INPUT_REGISTER_COUNT\t( 32 )\n\n#define\tD3D10_PS_INPUT_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D10_PS_INPUT_REGISTER_READ_PORTS\t( 1 )\n\n#define D3D10_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT\t( 0.0f )\n#define\tD3D10_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D10_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D10_PS_OUTPUT_DEPTH_REGISTER_COUNT\t( 1 )\n\n#define\tD3D10_PS_OUTPUT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D10_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D10_PS_OUTPUT_REGISTER_COUNT\t( 8 )\n\n#define D3D10_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT\t( 0.5f )\n#define\tD3D10_REQ_BLEND_OBJECT_COUNT_PER_CONTEXT\t( 4096 )\n\n#define\tD3D10_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP\t( 27 )\n\n#define\tD3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT\t( 4096 )\n\n#define\tD3D10_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_CONTEXT\t( 4096 )\n\n#define\tD3D10_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP\t( 32 )\n\n#define\tD3D10_REQ_DRAW_VERTEX_COUNT_2_TO_EXP\t( 32 )\n\n#define\tD3D10_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION\t( 8192 )\n\n#define\tD3D10_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT\t( 1024 )\n\n#define\tD3D10_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT\t( 4096 )\n\n#define\tD3D10_REQ_MAXANISOTROPY\t( 16 )\n\n#define\tD3D10_REQ_MIP_LEVELS\t( 14 )\n\n#define\tD3D10_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES\t( 2048 )\n\n#define\tD3D10_REQ_RASTERIZER_OBJECT_COUNT_PER_CONTEXT\t( 4096 )\n\n#define\tD3D10_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH\t( 8192 )\n\n#define\tD3D10_REQ_RESOURCE_SIZE_IN_MEGABYTES\t( 128 )\n\n#define\tD3D10_REQ_RESOURCE_VIEW_COUNT_PER_CONTEXT_2_TO_EXP\t( 20 )\n\n#define\tD3D10_REQ_SAMPLER_OBJECT_COUNT_PER_CONTEXT\t( 4096 )\n\n#define\tD3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION\t( 512 )\n\n#define\tD3D10_REQ_TEXTURE1D_U_DIMENSION\t( 8192 )\n\n#define\tD3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION\t( 512 )\n\n#define\tD3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION\t( 8192 )\n\n#define\tD3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION\t( 2048 )\n\n#define\tD3D10_REQ_TEXTURECUBE_DIMENSION\t( 8192 )\n\n#define\tD3D10_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL\t( 0 )\n\n#define\tD3D10_SHADER_MAJOR_VERSION\t( 4 )\n\n#define\tD3D10_SHADER_MINOR_VERSION\t( 0 )\n\n#define\tD3D10_SHIFT_INSTRUCTION_PAD_VALUE\t( 0 )\n\n#define\tD3D10_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT\t( 5 )\n\n#define\tD3D10_SIMULTANEOUS_RENDER_TARGET_COUNT\t( 8 )\n\n#define\tD3D10_SO_BUFFER_MAX_STRIDE_IN_BYTES\t( 2048 )\n\n#define\tD3D10_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES\t( 256 )\n\n#define\tD3D10_SO_BUFFER_SLOT_COUNT\t( 4 )\n\n#define\tD3D10_SO_DDI_REGISTER_INDEX_DENOTING_GAP\t( 0xffffffff )\n\n#define\tD3D10_SO_MULTIPLE_BUFFER_ELEMENTS_PER_BUFFER\t( 1 )\n\n#define\tD3D10_SO_SINGLE_BUFFER_COMPONENT_LIMIT\t( 64 )\n\n#define D3D10_SRGB_GAMMA\t( 2.2f )\n#define D3D10_SRGB_TO_FLOAT_DENOMINATOR_1\t( 12.92f )\n#define D3D10_SRGB_TO_FLOAT_DENOMINATOR_2\t( 1.055f )\n#define D3D10_SRGB_TO_FLOAT_EXPONENT\t( 2.4f )\n#define D3D10_SRGB_TO_FLOAT_OFFSET\t( 0.055f )\n#define D3D10_SRGB_TO_FLOAT_THRESHOLD\t( 0.04045f )\n#define D3D10_SRGB_TO_FLOAT_TOLERANCE_IN_ULP\t( 0.5f )\n#define\tD3D10_STANDARD_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D10_STANDARD_COMPONENT_BIT_COUNT_DOUBLED\t( 64 )\n\n#define\tD3D10_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE\t( 4 )\n\n#define\tD3D10_STANDARD_PIXEL_COMPONENT_COUNT\t( 128 )\n\n#define\tD3D10_STANDARD_PIXEL_ELEMENT_COUNT\t( 32 )\n\n#define\tD3D10_STANDARD_VECTOR_SIZE\t( 4 )\n\n#define\tD3D10_STANDARD_VERTEX_ELEMENT_COUNT\t( 16 )\n\n#define\tD3D10_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT\t( 64 )\n\n#define\tD3D10_SUBPIXEL_FRACTIONAL_BIT_COUNT\t( 8 )\n\n#define\tD3D10_SUBTEXEL_FRACTIONAL_BIT_COUNT\t( 6 )\n\n#define\tD3D10_TEXEL_ADDRESS_RANGE_BIT_COUNT\t( 18 )\n\n#define\tD3D10_UNBOUND_MEMORY_ACCESS_RESULT\t( 0 )\n\n#define\tD3D10_VIEWPORT_AND_SCISSORRECT_MAX_INDEX\t( 15 )\n\n#define\tD3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE\t( 16 )\n\n#define\tD3D10_VIEWPORT_BOUNDS_MAX\t( 16383 )\n\n#define\tD3D10_VIEWPORT_BOUNDS_MIN\t( -16384 )\n\n#define\tD3D10_VS_INPUT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D10_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D10_VS_INPUT_REGISTER_COUNT\t( 16 )\n\n#define\tD3D10_VS_INPUT_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D10_VS_INPUT_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D10_VS_OUTPUT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D10_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D10_VS_OUTPUT_REGISTER_COUNT\t( 16 )\n\n#define\tD3D10_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT\t( 10 )\n\n#define\tD3D10_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP\t( 25 )\n\n#define\tD3D10_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP\t( 25 )\n\n#define\tD3D_MAJOR_VERSION\t( 10 )\n\n#define\tD3D_MINOR_VERSION\t( 0 )\n\n#define\tD3D_SPEC_DATE_DAY\t( 8 )\n\n#define\tD3D_SPEC_DATE_MONTH\t( 8 )\n\n#define\tD3D_SPEC_DATE_YEAR\t( 2006 )\n\n#define D3D_SPEC_VERSION\t( 1.050005 )\n#endif\n#if !defined( __d3d10_1_h__ ) && !(D3D10_HEADER_MINOR_VERSION >= 1)\n#define D3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT\n#define D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT\n#endif\n#define\t_FACD3D10\t( 0x879 )\n\n#define\t_FACD3D10DEBUG\t( ( _FACD3D10 + 1 )  )\n\n#define MAKE_D3D10_HRESULT( code )  MAKE_HRESULT( 1, _FACD3D10, code )\n#define MAKE_D3D10_STATUS( code )    MAKE_HRESULT( 0, _FACD3D10, code )\n#define D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS  MAKE_D3D10_HRESULT(1)\n#define D3D10_ERROR_FILE_NOT_FOUND  MAKE_D3D10_HRESULT(2)\n#if __SAL_H_FULL_VER < 140050727\n#undef __in_range\n#undef __in_xcount_opt\n#define __in_range(x, y)\n#define __in_xcount_opt(x)\n#endif\ntypedef \nenum D3D10_INPUT_CLASSIFICATION\n    {\tD3D10_INPUT_PER_VERTEX_DATA\t= 0,\n\tD3D10_INPUT_PER_INSTANCE_DATA\t= 1\n    } \tD3D10_INPUT_CLASSIFICATION;\n\n#define\tD3D10_APPEND_ALIGNED_ELEMENT\t( 0xffffffff )\n\ntypedef struct D3D10_INPUT_ELEMENT_DESC\n    {\n    LPCSTR SemanticName;\n    UINT SemanticIndex;\n    DXGI_FORMAT Format;\n    UINT InputSlot;\n    UINT AlignedByteOffset;\n    D3D10_INPUT_CLASSIFICATION InputSlotClass;\n    UINT InstanceDataStepRate;\n    } \tD3D10_INPUT_ELEMENT_DESC;\n\ntypedef \nenum D3D10_FILL_MODE\n    {\tD3D10_FILL_WIREFRAME\t= 2,\n\tD3D10_FILL_SOLID\t= 3\n    } \tD3D10_FILL_MODE;\n\ntypedef D3D_PRIMITIVE_TOPOLOGY D3D10_PRIMITIVE_TOPOLOGY;\n\ntypedef D3D_PRIMITIVE D3D10_PRIMITIVE;\n\ntypedef \nenum D3D10_CULL_MODE\n    {\tD3D10_CULL_NONE\t= 1,\n\tD3D10_CULL_FRONT\t= 2,\n\tD3D10_CULL_BACK\t= 3\n    } \tD3D10_CULL_MODE;\n\ntypedef struct D3D10_SO_DECLARATION_ENTRY\n    {\n    LPCSTR SemanticName;\n    UINT SemanticIndex;\n    BYTE StartComponent;\n    BYTE ComponentCount;\n    BYTE OutputSlot;\n    } \tD3D10_SO_DECLARATION_ENTRY;\n\ntypedef struct D3D10_VIEWPORT\n    {\n    INT TopLeftX;\n    INT TopLeftY;\n    UINT Width;\n    UINT Height;\n    FLOAT MinDepth;\n    FLOAT MaxDepth;\n    } \tD3D10_VIEWPORT;\n\ntypedef \nenum D3D10_RESOURCE_DIMENSION\n    {\tD3D10_RESOURCE_DIMENSION_UNKNOWN\t= 0,\n\tD3D10_RESOURCE_DIMENSION_BUFFER\t= 1,\n\tD3D10_RESOURCE_DIMENSION_TEXTURE1D\t= 2,\n\tD3D10_RESOURCE_DIMENSION_TEXTURE2D\t= 3,\n\tD3D10_RESOURCE_DIMENSION_TEXTURE3D\t= 4\n    } \tD3D10_RESOURCE_DIMENSION;\n\ntypedef D3D_SRV_DIMENSION D3D10_SRV_DIMENSION;\n\ntypedef \nenum D3D10_DSV_DIMENSION\n    {\tD3D10_DSV_DIMENSION_UNKNOWN\t= 0,\n\tD3D10_DSV_DIMENSION_TEXTURE1D\t= 1,\n\tD3D10_DSV_DIMENSION_TEXTURE1DARRAY\t= 2,\n\tD3D10_DSV_DIMENSION_TEXTURE2D\t= 3,\n\tD3D10_DSV_DIMENSION_TEXTURE2DARRAY\t= 4,\n\tD3D10_DSV_DIMENSION_TEXTURE2DMS\t= 5,\n\tD3D10_DSV_DIMENSION_TEXTURE2DMSARRAY\t= 6\n    } \tD3D10_DSV_DIMENSION;\n\ntypedef \nenum D3D10_RTV_DIMENSION\n    {\tD3D10_RTV_DIMENSION_UNKNOWN\t= 0,\n\tD3D10_RTV_DIMENSION_BUFFER\t= 1,\n\tD3D10_RTV_DIMENSION_TEXTURE1D\t= 2,\n\tD3D10_RTV_DIMENSION_TEXTURE1DARRAY\t= 3,\n\tD3D10_RTV_DIMENSION_TEXTURE2D\t= 4,\n\tD3D10_RTV_DIMENSION_TEXTURE2DARRAY\t= 5,\n\tD3D10_RTV_DIMENSION_TEXTURE2DMS\t= 6,\n\tD3D10_RTV_DIMENSION_TEXTURE2DMSARRAY\t= 7,\n\tD3D10_RTV_DIMENSION_TEXTURE3D\t= 8\n    } \tD3D10_RTV_DIMENSION;\n\ntypedef \nenum D3D10_USAGE\n    {\tD3D10_USAGE_DEFAULT\t= 0,\n\tD3D10_USAGE_IMMUTABLE\t= 1,\n\tD3D10_USAGE_DYNAMIC\t= 2,\n\tD3D10_USAGE_STAGING\t= 3\n    } \tD3D10_USAGE;\n\ntypedef \nenum D3D10_BIND_FLAG\n    {\tD3D10_BIND_VERTEX_BUFFER\t= 0x1L,\n\tD3D10_BIND_INDEX_BUFFER\t= 0x2L,\n\tD3D10_BIND_CONSTANT_BUFFER\t= 0x4L,\n\tD3D10_BIND_SHADER_RESOURCE\t= 0x8L,\n\tD3D10_BIND_STREAM_OUTPUT\t= 0x10L,\n\tD3D10_BIND_RENDER_TARGET\t= 0x20L,\n\tD3D10_BIND_DEPTH_STENCIL\t= 0x40L\n    } \tD3D10_BIND_FLAG;\n\ntypedef \nenum D3D10_CPU_ACCESS_FLAG\n    {\tD3D10_CPU_ACCESS_WRITE\t= 0x10000L,\n\tD3D10_CPU_ACCESS_READ\t= 0x20000L\n    } \tD3D10_CPU_ACCESS_FLAG;\n\ntypedef \nenum D3D10_RESOURCE_MISC_FLAG\n    {\tD3D10_RESOURCE_MISC_GENERATE_MIPS\t= 0x1L,\n\tD3D10_RESOURCE_MISC_SHARED\t= 0x2L,\n\tD3D10_RESOURCE_MISC_TEXTURECUBE\t= 0x4L,\n\tD3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX\t= 0x10L,\n\tD3D10_RESOURCE_MISC_GDI_COMPATIBLE\t= 0x20L\n    } \tD3D10_RESOURCE_MISC_FLAG;\n\ntypedef \nenum D3D10_MAP\n    {\tD3D10_MAP_READ\t= 1,\n\tD3D10_MAP_WRITE\t= 2,\n\tD3D10_MAP_READ_WRITE\t= 3,\n\tD3D10_MAP_WRITE_DISCARD\t= 4,\n\tD3D10_MAP_WRITE_NO_OVERWRITE\t= 5\n    } \tD3D10_MAP;\n\ntypedef \nenum D3D10_MAP_FLAG\n    {\tD3D10_MAP_FLAG_DO_NOT_WAIT\t= 0x100000L\n    } \tD3D10_MAP_FLAG;\n\ntypedef \nenum D3D10_RAISE_FLAG\n    {\tD3D10_RAISE_FLAG_DRIVER_INTERNAL_ERROR\t= 0x1L\n    } \tD3D10_RAISE_FLAG;\n\ntypedef \nenum D3D10_CLEAR_FLAG\n    {\tD3D10_CLEAR_DEPTH\t= 0x1L,\n\tD3D10_CLEAR_STENCIL\t= 0x2L\n    } \tD3D10_CLEAR_FLAG;\n\ntypedef RECT D3D10_RECT;\n\ntypedef struct D3D10_BOX\n    {\n    UINT left;\n    UINT top;\n    UINT front;\n    UINT right;\n    UINT bottom;\n    UINT back;\n    } \tD3D10_BOX;\n\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0000_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0000_v0_0_s_ifspec;\n\n#ifndef __ID3D10DeviceChild_INTERFACE_DEFINED__\n#define __ID3D10DeviceChild_INTERFACE_DEFINED__\n\n/* interface ID3D10DeviceChild */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10DeviceChild;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C00-342C-4106-A19F-4F2704F689F0\")\n    ID3D10DeviceChild : public IUnknown\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDevice( \n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetPrivateData( \n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetPrivateData( \n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface( \n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10DeviceChildVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10DeviceChild * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10DeviceChild * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10DeviceChild * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10DeviceChild * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10DeviceChild * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10DeviceChild * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10DeviceChild * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        END_INTERFACE\n    } ID3D10DeviceChildVtbl;\n\n    interface ID3D10DeviceChild\n    {\n        CONST_VTBL struct ID3D10DeviceChildVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10DeviceChild_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10DeviceChild_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10DeviceChild_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10DeviceChild_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10DeviceChild_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10DeviceChild_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10DeviceChild_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10DeviceChild_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0001 */\n/* [local] */ \n\ntypedef \nenum D3D10_COMPARISON_FUNC\n    {\tD3D10_COMPARISON_NEVER\t= 1,\n\tD3D10_COMPARISON_LESS\t= 2,\n\tD3D10_COMPARISON_EQUAL\t= 3,\n\tD3D10_COMPARISON_LESS_EQUAL\t= 4,\n\tD3D10_COMPARISON_GREATER\t= 5,\n\tD3D10_COMPARISON_NOT_EQUAL\t= 6,\n\tD3D10_COMPARISON_GREATER_EQUAL\t= 7,\n\tD3D10_COMPARISON_ALWAYS\t= 8\n    } \tD3D10_COMPARISON_FUNC;\n\ntypedef \nenum D3D10_DEPTH_WRITE_MASK\n    {\tD3D10_DEPTH_WRITE_MASK_ZERO\t= 0,\n\tD3D10_DEPTH_WRITE_MASK_ALL\t= 1\n    } \tD3D10_DEPTH_WRITE_MASK;\n\ntypedef \nenum D3D10_STENCIL_OP\n    {\tD3D10_STENCIL_OP_KEEP\t= 1,\n\tD3D10_STENCIL_OP_ZERO\t= 2,\n\tD3D10_STENCIL_OP_REPLACE\t= 3,\n\tD3D10_STENCIL_OP_INCR_SAT\t= 4,\n\tD3D10_STENCIL_OP_DECR_SAT\t= 5,\n\tD3D10_STENCIL_OP_INVERT\t= 6,\n\tD3D10_STENCIL_OP_INCR\t= 7,\n\tD3D10_STENCIL_OP_DECR\t= 8\n    } \tD3D10_STENCIL_OP;\n\ntypedef struct D3D10_DEPTH_STENCILOP_DESC\n    {\n    D3D10_STENCIL_OP StencilFailOp;\n    D3D10_STENCIL_OP StencilDepthFailOp;\n    D3D10_STENCIL_OP StencilPassOp;\n    D3D10_COMPARISON_FUNC StencilFunc;\n    } \tD3D10_DEPTH_STENCILOP_DESC;\n\ntypedef struct D3D10_DEPTH_STENCIL_DESC\n    {\n    BOOL DepthEnable;\n    D3D10_DEPTH_WRITE_MASK DepthWriteMask;\n    D3D10_COMPARISON_FUNC DepthFunc;\n    BOOL StencilEnable;\n    UINT8 StencilReadMask;\n    UINT8 StencilWriteMask;\n    D3D10_DEPTH_STENCILOP_DESC FrontFace;\n    D3D10_DEPTH_STENCILOP_DESC BackFace;\n    } \tD3D10_DEPTH_STENCIL_DESC;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0001_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0001_v0_0_s_ifspec;\n\n#ifndef __ID3D10DepthStencilState_INTERFACE_DEFINED__\n#define __ID3D10DepthStencilState_INTERFACE_DEFINED__\n\n/* interface ID3D10DepthStencilState */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10DepthStencilState;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"2B4B1CC8-A4AD-41f8-8322-CA86FC3EC675\")\n    ID3D10DepthStencilState : public ID3D10DeviceChild\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D10_DEPTH_STENCIL_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10DepthStencilStateVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10DepthStencilState * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10DepthStencilState * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10DepthStencilState * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10DepthStencilState * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10DepthStencilState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10DepthStencilState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10DepthStencilState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D10DepthStencilState * This,\n            /* [annotation] */ \n            __out  D3D10_DEPTH_STENCIL_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D10DepthStencilStateVtbl;\n\n    interface ID3D10DepthStencilState\n    {\n        CONST_VTBL struct ID3D10DepthStencilStateVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10DepthStencilState_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10DepthStencilState_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10DepthStencilState_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10DepthStencilState_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10DepthStencilState_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10DepthStencilState_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10DepthStencilState_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10DepthStencilState_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10DepthStencilState_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0002 */\n/* [local] */ \n\ntypedef \nenum D3D10_BLEND\n    {\tD3D10_BLEND_ZERO\t= 1,\n\tD3D10_BLEND_ONE\t= 2,\n\tD3D10_BLEND_SRC_COLOR\t= 3,\n\tD3D10_BLEND_INV_SRC_COLOR\t= 4,\n\tD3D10_BLEND_SRC_ALPHA\t= 5,\n\tD3D10_BLEND_INV_SRC_ALPHA\t= 6,\n\tD3D10_BLEND_DEST_ALPHA\t= 7,\n\tD3D10_BLEND_INV_DEST_ALPHA\t= 8,\n\tD3D10_BLEND_DEST_COLOR\t= 9,\n\tD3D10_BLEND_INV_DEST_COLOR\t= 10,\n\tD3D10_BLEND_SRC_ALPHA_SAT\t= 11,\n\tD3D10_BLEND_BLEND_FACTOR\t= 14,\n\tD3D10_BLEND_INV_BLEND_FACTOR\t= 15,\n\tD3D10_BLEND_SRC1_COLOR\t= 16,\n\tD3D10_BLEND_INV_SRC1_COLOR\t= 17,\n\tD3D10_BLEND_SRC1_ALPHA\t= 18,\n\tD3D10_BLEND_INV_SRC1_ALPHA\t= 19\n    } \tD3D10_BLEND;\n\ntypedef \nenum D3D10_BLEND_OP\n    {\tD3D10_BLEND_OP_ADD\t= 1,\n\tD3D10_BLEND_OP_SUBTRACT\t= 2,\n\tD3D10_BLEND_OP_REV_SUBTRACT\t= 3,\n\tD3D10_BLEND_OP_MIN\t= 4,\n\tD3D10_BLEND_OP_MAX\t= 5\n    } \tD3D10_BLEND_OP;\n\ntypedef \nenum D3D10_COLOR_WRITE_ENABLE\n    {\tD3D10_COLOR_WRITE_ENABLE_RED\t= 1,\n\tD3D10_COLOR_WRITE_ENABLE_GREEN\t= 2,\n\tD3D10_COLOR_WRITE_ENABLE_BLUE\t= 4,\n\tD3D10_COLOR_WRITE_ENABLE_ALPHA\t= 8,\n\tD3D10_COLOR_WRITE_ENABLE_ALL\t= ( ( ( D3D10_COLOR_WRITE_ENABLE_RED | D3D10_COLOR_WRITE_ENABLE_GREEN )  | D3D10_COLOR_WRITE_ENABLE_BLUE )  | D3D10_COLOR_WRITE_ENABLE_ALPHA ) \n    } \tD3D10_COLOR_WRITE_ENABLE;\n\ntypedef struct D3D10_BLEND_DESC\n    {\n    BOOL AlphaToCoverageEnable;\n    BOOL BlendEnable[ 8 ];\n    D3D10_BLEND SrcBlend;\n    D3D10_BLEND DestBlend;\n    D3D10_BLEND_OP BlendOp;\n    D3D10_BLEND SrcBlendAlpha;\n    D3D10_BLEND DestBlendAlpha;\n    D3D10_BLEND_OP BlendOpAlpha;\n    UINT8 RenderTargetWriteMask[ 8 ];\n    } \tD3D10_BLEND_DESC;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0002_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0002_v0_0_s_ifspec;\n\n#ifndef __ID3D10BlendState_INTERFACE_DEFINED__\n#define __ID3D10BlendState_INTERFACE_DEFINED__\n\n/* interface ID3D10BlendState */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10BlendState;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"EDAD8D19-8A35-4d6d-8566-2EA276CDE161\")\n    ID3D10BlendState : public ID3D10DeviceChild\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D10_BLEND_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10BlendStateVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10BlendState * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10BlendState * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10BlendState * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10BlendState * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10BlendState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10BlendState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10BlendState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D10BlendState * This,\n            /* [annotation] */ \n            __out  D3D10_BLEND_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D10BlendStateVtbl;\n\n    interface ID3D10BlendState\n    {\n        CONST_VTBL struct ID3D10BlendStateVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10BlendState_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10BlendState_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10BlendState_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10BlendState_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10BlendState_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10BlendState_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10BlendState_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10BlendState_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10BlendState_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0003 */\n/* [local] */ \n\ntypedef struct D3D10_RASTERIZER_DESC\n    {\n    D3D10_FILL_MODE FillMode;\n    D3D10_CULL_MODE CullMode;\n    BOOL FrontCounterClockwise;\n    INT DepthBias;\n    FLOAT DepthBiasClamp;\n    FLOAT SlopeScaledDepthBias;\n    BOOL DepthClipEnable;\n    BOOL ScissorEnable;\n    BOOL MultisampleEnable;\n    BOOL AntialiasedLineEnable;\n    } \tD3D10_RASTERIZER_DESC;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0003_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0003_v0_0_s_ifspec;\n\n#ifndef __ID3D10RasterizerState_INTERFACE_DEFINED__\n#define __ID3D10RasterizerState_INTERFACE_DEFINED__\n\n/* interface ID3D10RasterizerState */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10RasterizerState;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"A2A07292-89AF-4345-BE2E-C53D9FBB6E9F\")\n    ID3D10RasterizerState : public ID3D10DeviceChild\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D10_RASTERIZER_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10RasterizerStateVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10RasterizerState * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10RasterizerState * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10RasterizerState * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10RasterizerState * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10RasterizerState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10RasterizerState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10RasterizerState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D10RasterizerState * This,\n            /* [annotation] */ \n            __out  D3D10_RASTERIZER_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D10RasterizerStateVtbl;\n\n    interface ID3D10RasterizerState\n    {\n        CONST_VTBL struct ID3D10RasterizerStateVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10RasterizerState_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10RasterizerState_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10RasterizerState_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10RasterizerState_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10RasterizerState_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10RasterizerState_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10RasterizerState_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10RasterizerState_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10RasterizerState_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0004 */\n/* [local] */ \n\n#if !defined( D3D10_NO_HELPERS ) && defined( __cplusplus )\ninline UINT D3D10CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT MipLevels )\n{ return MipSlice + ArraySlice * MipLevels; }\n#endif\ntypedef struct D3D10_SUBRESOURCE_DATA\n    {\n    const void *pSysMem;\n    UINT SysMemPitch;\n    UINT SysMemSlicePitch;\n    } \tD3D10_SUBRESOURCE_DATA;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0004_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0004_v0_0_s_ifspec;\n\n#ifndef __ID3D10Resource_INTERFACE_DEFINED__\n#define __ID3D10Resource_INTERFACE_DEFINED__\n\n/* interface ID3D10Resource */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10Resource;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C01-342C-4106-A19F-4F2704F689F0\")\n    ID3D10Resource : public ID3D10DeviceChild\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetType( \n            /* [annotation] */ \n            __out  D3D10_RESOURCE_DIMENSION *rType) = 0;\n        \n        virtual void STDMETHODCALLTYPE SetEvictionPriority( \n            /* [annotation] */ \n            __in  UINT EvictionPriority) = 0;\n        \n        virtual UINT STDMETHODCALLTYPE GetEvictionPriority( void) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10ResourceVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10Resource * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10Resource * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10Resource * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10Resource * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10Resource * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10Resource * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10Resource * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetType )( \n            ID3D10Resource * This,\n            /* [annotation] */ \n            __out  D3D10_RESOURCE_DIMENSION *rType);\n        \n        void ( STDMETHODCALLTYPE *SetEvictionPriority )( \n            ID3D10Resource * This,\n            /* [annotation] */ \n            __in  UINT EvictionPriority);\n        \n        UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( \n            ID3D10Resource * This);\n        \n        END_INTERFACE\n    } ID3D10ResourceVtbl;\n\n    interface ID3D10Resource\n    {\n        CONST_VTBL struct ID3D10ResourceVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10Resource_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10Resource_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10Resource_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10Resource_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10Resource_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10Resource_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10Resource_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10Resource_GetType(This,rType)\t\\\n    ( (This)->lpVtbl -> GetType(This,rType) ) \n\n#define ID3D10Resource_SetEvictionPriority(This,EvictionPriority)\t\\\n    ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) \n\n#define ID3D10Resource_GetEvictionPriority(This)\t\\\n    ( (This)->lpVtbl -> GetEvictionPriority(This) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10Resource_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0005 */\n/* [local] */ \n\ntypedef struct D3D10_BUFFER_DESC\n    {\n    UINT ByteWidth;\n    D3D10_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n    } \tD3D10_BUFFER_DESC;\n\n#if !defined( D3D10_NO_HELPERS ) && defined( __cplusplus )\nstruct CD3D10_BUFFER_DESC : public D3D10_BUFFER_DESC\n{\n    CD3D10_BUFFER_DESC()\n    {}\n    explicit CD3D10_BUFFER_DESC( const D3D10_BUFFER_DESC& o ) :\n        D3D10_BUFFER_DESC( o )\n    {}\n    explicit CD3D10_BUFFER_DESC(\n        UINT byteWidth,\n        UINT bindFlags,\n        D3D10_USAGE usage = D3D10_USAGE_DEFAULT,\n        UINT cpuaccessFlags = 0,\n        UINT miscFlags = 0 )\n    {\n        ByteWidth = byteWidth;\n        Usage = usage;\n        BindFlags = bindFlags;\n        CPUAccessFlags = cpuaccessFlags ;\n        MiscFlags = miscFlags;\n    }\n    ~CD3D10_BUFFER_DESC() {}\n    operator const D3D10_BUFFER_DESC&() const { return *this; }\n};\n#endif\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0005_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0005_v0_0_s_ifspec;\n\n#ifndef __ID3D10Buffer_INTERFACE_DEFINED__\n#define __ID3D10Buffer_INTERFACE_DEFINED__\n\n/* interface ID3D10Buffer */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10Buffer;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C02-342C-4106-A19F-4F2704F689F0\")\n    ID3D10Buffer : public ID3D10Resource\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE Map( \n            /* [annotation] */ \n            __in  D3D10_MAP MapType,\n            /* [annotation] */ \n            __in  UINT MapFlags,\n            /* [annotation] */ \n            __out  void **ppData) = 0;\n        \n        virtual void STDMETHODCALLTYPE Unmap( void) = 0;\n        \n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D10_BUFFER_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10BufferVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10Buffer * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10Buffer * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10Buffer * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10Buffer * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10Buffer * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10Buffer * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10Buffer * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetType )( \n            ID3D10Buffer * This,\n            /* [annotation] */ \n            __out  D3D10_RESOURCE_DIMENSION *rType);\n        \n        void ( STDMETHODCALLTYPE *SetEvictionPriority )( \n            ID3D10Buffer * This,\n            /* [annotation] */ \n            __in  UINT EvictionPriority);\n        \n        UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( \n            ID3D10Buffer * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *Map )( \n            ID3D10Buffer * This,\n            /* [annotation] */ \n            __in  D3D10_MAP MapType,\n            /* [annotation] */ \n            __in  UINT MapFlags,\n            /* [annotation] */ \n            __out  void **ppData);\n        \n        void ( STDMETHODCALLTYPE *Unmap )( \n            ID3D10Buffer * This);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D10Buffer * This,\n            /* [annotation] */ \n            __out  D3D10_BUFFER_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D10BufferVtbl;\n\n    interface ID3D10Buffer\n    {\n        CONST_VTBL struct ID3D10BufferVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10Buffer_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10Buffer_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10Buffer_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10Buffer_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10Buffer_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10Buffer_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10Buffer_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10Buffer_GetType(This,rType)\t\\\n    ( (This)->lpVtbl -> GetType(This,rType) ) \n\n#define ID3D10Buffer_SetEvictionPriority(This,EvictionPriority)\t\\\n    ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) \n\n#define ID3D10Buffer_GetEvictionPriority(This)\t\\\n    ( (This)->lpVtbl -> GetEvictionPriority(This) ) \n\n\n#define ID3D10Buffer_Map(This,MapType,MapFlags,ppData)\t\\\n    ( (This)->lpVtbl -> Map(This,MapType,MapFlags,ppData) ) \n\n#define ID3D10Buffer_Unmap(This)\t\\\n    ( (This)->lpVtbl -> Unmap(This) ) \n\n#define ID3D10Buffer_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10Buffer_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0006 */\n/* [local] */ \n\ntypedef struct D3D10_TEXTURE1D_DESC\n    {\n    UINT Width;\n    UINT MipLevels;\n    UINT ArraySize;\n    DXGI_FORMAT Format;\n    D3D10_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n    } \tD3D10_TEXTURE1D_DESC;\n\n#if !defined( D3D10_NO_HELPERS ) && defined( __cplusplus )\nstruct CD3D10_TEXTURE1D_DESC : public D3D10_TEXTURE1D_DESC\n{\n    CD3D10_TEXTURE1D_DESC()\n    {}\n    explicit CD3D10_TEXTURE1D_DESC( const D3D10_TEXTURE1D_DESC& o ) :\n        D3D10_TEXTURE1D_DESC( o )\n    {}\n    explicit CD3D10_TEXTURE1D_DESC(\n        DXGI_FORMAT format,\n        UINT width,\n        UINT arraySize = 1,\n        UINT mipLevels = 0,\n        UINT bindFlags = D3D10_BIND_SHADER_RESOURCE,\n        D3D10_USAGE usage = D3D10_USAGE_DEFAULT,\n        UINT cpuaccessFlags= 0,\n        UINT miscFlags = 0 )\n    {\n        Width = width;\n        MipLevels = mipLevels;\n        ArraySize = arraySize;\n        Format = format;\n        Usage = usage;\n        BindFlags = bindFlags;\n        CPUAccessFlags = cpuaccessFlags;\n        MiscFlags = miscFlags;\n    }\n    ~CD3D10_TEXTURE1D_DESC() {}\n    operator const D3D10_TEXTURE1D_DESC&() const { return *this; }\n};\n#endif\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0006_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0006_v0_0_s_ifspec;\n\n#ifndef __ID3D10Texture1D_INTERFACE_DEFINED__\n#define __ID3D10Texture1D_INTERFACE_DEFINED__\n\n/* interface ID3D10Texture1D */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10Texture1D;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C03-342C-4106-A19F-4F2704F689F0\")\n    ID3D10Texture1D : public ID3D10Resource\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE Map( \n            /* [annotation] */ \n            __in  UINT Subresource,\n            /* [annotation] */ \n            __in  D3D10_MAP MapType,\n            /* [annotation] */ \n            __in  UINT MapFlags,\n            /* [annotation] */ \n            __out  void **ppData) = 0;\n        \n        virtual void STDMETHODCALLTYPE Unmap( \n            /* [annotation] */ \n            __in  UINT Subresource) = 0;\n        \n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D10_TEXTURE1D_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10Texture1DVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10Texture1D * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10Texture1D * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10Texture1D * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10Texture1D * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10Texture1D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10Texture1D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10Texture1D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetType )( \n            ID3D10Texture1D * This,\n            /* [annotation] */ \n            __out  D3D10_RESOURCE_DIMENSION *rType);\n        \n        void ( STDMETHODCALLTYPE *SetEvictionPriority )( \n            ID3D10Texture1D * This,\n            /* [annotation] */ \n            __in  UINT EvictionPriority);\n        \n        UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( \n            ID3D10Texture1D * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *Map )( \n            ID3D10Texture1D * This,\n            /* [annotation] */ \n            __in  UINT Subresource,\n            /* [annotation] */ \n            __in  D3D10_MAP MapType,\n            /* [annotation] */ \n            __in  UINT MapFlags,\n            /* [annotation] */ \n            __out  void **ppData);\n        \n        void ( STDMETHODCALLTYPE *Unmap )( \n            ID3D10Texture1D * This,\n            /* [annotation] */ \n            __in  UINT Subresource);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D10Texture1D * This,\n            /* [annotation] */ \n            __out  D3D10_TEXTURE1D_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D10Texture1DVtbl;\n\n    interface ID3D10Texture1D\n    {\n        CONST_VTBL struct ID3D10Texture1DVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10Texture1D_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10Texture1D_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10Texture1D_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10Texture1D_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10Texture1D_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10Texture1D_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10Texture1D_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10Texture1D_GetType(This,rType)\t\\\n    ( (This)->lpVtbl -> GetType(This,rType) ) \n\n#define ID3D10Texture1D_SetEvictionPriority(This,EvictionPriority)\t\\\n    ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) \n\n#define ID3D10Texture1D_GetEvictionPriority(This)\t\\\n    ( (This)->lpVtbl -> GetEvictionPriority(This) ) \n\n\n#define ID3D10Texture1D_Map(This,Subresource,MapType,MapFlags,ppData)\t\\\n    ( (This)->lpVtbl -> Map(This,Subresource,MapType,MapFlags,ppData) ) \n\n#define ID3D10Texture1D_Unmap(This,Subresource)\t\\\n    ( (This)->lpVtbl -> Unmap(This,Subresource) ) \n\n#define ID3D10Texture1D_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10Texture1D_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0007 */\n/* [local] */ \n\ntypedef struct D3D10_TEXTURE2D_DESC\n    {\n    UINT Width;\n    UINT Height;\n    UINT MipLevels;\n    UINT ArraySize;\n    DXGI_FORMAT Format;\n    DXGI_SAMPLE_DESC SampleDesc;\n    D3D10_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n    } \tD3D10_TEXTURE2D_DESC;\n\n#if !defined( D3D10_NO_HELPERS ) && defined( __cplusplus )\nstruct CD3D10_TEXTURE2D_DESC : public D3D10_TEXTURE2D_DESC\n{\n    CD3D10_TEXTURE2D_DESC()\n    {}\n    explicit CD3D10_TEXTURE2D_DESC( const D3D10_TEXTURE2D_DESC& o ) :\n        D3D10_TEXTURE2D_DESC( o )\n    {}\n    explicit CD3D10_TEXTURE2D_DESC(\n        DXGI_FORMAT format,\n        UINT width,\n        UINT height,\n        UINT arraySize = 1,\n        UINT mipLevels = 0,\n        UINT bindFlags = D3D10_BIND_SHADER_RESOURCE,\n        D3D10_USAGE usage = D3D10_USAGE_DEFAULT,\n        UINT cpuaccessFlags = 0,\n        UINT sampleCount = 1,\n        UINT sampleQuality = 0,\n        UINT miscFlags = 0 )\n    {\n        Width = width;\n        Height = height;\n        MipLevels = mipLevels;\n        ArraySize = arraySize;\n        Format = format;\n        SampleDesc.Count = sampleCount;\n        SampleDesc.Quality = sampleQuality;\n        Usage = usage;\n        BindFlags = bindFlags;\n        CPUAccessFlags = cpuaccessFlags;\n        MiscFlags = miscFlags;\n    }\n    ~CD3D10_TEXTURE2D_DESC() {}\n    operator const D3D10_TEXTURE2D_DESC&() const { return *this; }\n};\n#endif\ntypedef struct D3D10_MAPPED_TEXTURE2D\n    {\n    void *pData;\n    UINT RowPitch;\n    } \tD3D10_MAPPED_TEXTURE2D;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0007_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0007_v0_0_s_ifspec;\n\n#ifndef __ID3D10Texture2D_INTERFACE_DEFINED__\n#define __ID3D10Texture2D_INTERFACE_DEFINED__\n\n/* interface ID3D10Texture2D */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10Texture2D;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C04-342C-4106-A19F-4F2704F689F0\")\n    ID3D10Texture2D : public ID3D10Resource\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE Map( \n            /* [annotation] */ \n            __in  UINT Subresource,\n            /* [annotation] */ \n            __in  D3D10_MAP MapType,\n            /* [annotation] */ \n            __in  UINT MapFlags,\n            /* [annotation] */ \n            __out  D3D10_MAPPED_TEXTURE2D *pMappedTex2D) = 0;\n        \n        virtual void STDMETHODCALLTYPE Unmap( \n            /* [annotation] */ \n            __in  UINT Subresource) = 0;\n        \n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D10_TEXTURE2D_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10Texture2DVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10Texture2D * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10Texture2D * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10Texture2D * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10Texture2D * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10Texture2D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10Texture2D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10Texture2D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetType )( \n            ID3D10Texture2D * This,\n            /* [annotation] */ \n            __out  D3D10_RESOURCE_DIMENSION *rType);\n        \n        void ( STDMETHODCALLTYPE *SetEvictionPriority )( \n            ID3D10Texture2D * This,\n            /* [annotation] */ \n            __in  UINT EvictionPriority);\n        \n        UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( \n            ID3D10Texture2D * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *Map )( \n            ID3D10Texture2D * This,\n            /* [annotation] */ \n            __in  UINT Subresource,\n            /* [annotation] */ \n            __in  D3D10_MAP MapType,\n            /* [annotation] */ \n            __in  UINT MapFlags,\n            /* [annotation] */ \n            __out  D3D10_MAPPED_TEXTURE2D *pMappedTex2D);\n        \n        void ( STDMETHODCALLTYPE *Unmap )( \n            ID3D10Texture2D * This,\n            /* [annotation] */ \n            __in  UINT Subresource);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D10Texture2D * This,\n            /* [annotation] */ \n            __out  D3D10_TEXTURE2D_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D10Texture2DVtbl;\n\n    interface ID3D10Texture2D\n    {\n        CONST_VTBL struct ID3D10Texture2DVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10Texture2D_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10Texture2D_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10Texture2D_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10Texture2D_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10Texture2D_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10Texture2D_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10Texture2D_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10Texture2D_GetType(This,rType)\t\\\n    ( (This)->lpVtbl -> GetType(This,rType) ) \n\n#define ID3D10Texture2D_SetEvictionPriority(This,EvictionPriority)\t\\\n    ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) \n\n#define ID3D10Texture2D_GetEvictionPriority(This)\t\\\n    ( (This)->lpVtbl -> GetEvictionPriority(This) ) \n\n\n#define ID3D10Texture2D_Map(This,Subresource,MapType,MapFlags,pMappedTex2D)\t\\\n    ( (This)->lpVtbl -> Map(This,Subresource,MapType,MapFlags,pMappedTex2D) ) \n\n#define ID3D10Texture2D_Unmap(This,Subresource)\t\\\n    ( (This)->lpVtbl -> Unmap(This,Subresource) ) \n\n#define ID3D10Texture2D_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10Texture2D_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0008 */\n/* [local] */ \n\ntypedef struct D3D10_TEXTURE3D_DESC\n    {\n    UINT Width;\n    UINT Height;\n    UINT Depth;\n    UINT MipLevels;\n    DXGI_FORMAT Format;\n    D3D10_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n    } \tD3D10_TEXTURE3D_DESC;\n\n#if !defined( D3D10_NO_HELPERS ) && defined( __cplusplus )\nstruct CD3D10_TEXTURE3D_DESC : public D3D10_TEXTURE3D_DESC\n{\n    CD3D10_TEXTURE3D_DESC()\n    {}\n    explicit CD3D10_TEXTURE3D_DESC( const D3D10_TEXTURE3D_DESC& o ) :\n        D3D10_TEXTURE3D_DESC( o )\n    {}\n    explicit CD3D10_TEXTURE3D_DESC(\n        DXGI_FORMAT format,\n        UINT width,\n        UINT height,\n        UINT depth,\n        UINT mipLevels = 0,\n        UINT bindFlags = D3D10_BIND_SHADER_RESOURCE,\n        D3D10_USAGE usage = D3D10_USAGE_DEFAULT,\n        UINT cpuaccessFlags = 0,\n        UINT miscFlags = 0 )\n    {\n        Width = width;\n        Height = height;\n        Depth = depth;\n        MipLevels = mipLevels;\n        Format = format;\n        Usage = usage;\n        BindFlags = bindFlags;\n        CPUAccessFlags = cpuaccessFlags;\n        MiscFlags = miscFlags;\n    }\n    ~CD3D10_TEXTURE3D_DESC() {}\n    operator const D3D10_TEXTURE3D_DESC&() const { return *this; }\n};\n#endif\ntypedef struct D3D10_MAPPED_TEXTURE3D\n    {\n    void *pData;\n    UINT RowPitch;\n    UINT DepthPitch;\n    } \tD3D10_MAPPED_TEXTURE3D;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0008_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0008_v0_0_s_ifspec;\n\n#ifndef __ID3D10Texture3D_INTERFACE_DEFINED__\n#define __ID3D10Texture3D_INTERFACE_DEFINED__\n\n/* interface ID3D10Texture3D */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10Texture3D;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C05-342C-4106-A19F-4F2704F689F0\")\n    ID3D10Texture3D : public ID3D10Resource\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE Map( \n            /* [annotation] */ \n            __in  UINT Subresource,\n            /* [annotation] */ \n            __in  D3D10_MAP MapType,\n            /* [annotation] */ \n            __in  UINT MapFlags,\n            /* [annotation] */ \n            __out  D3D10_MAPPED_TEXTURE3D *pMappedTex3D) = 0;\n        \n        virtual void STDMETHODCALLTYPE Unmap( \n            /* [annotation] */ \n            __in  UINT Subresource) = 0;\n        \n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D10_TEXTURE3D_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10Texture3DVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10Texture3D * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10Texture3D * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10Texture3D * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10Texture3D * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10Texture3D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10Texture3D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10Texture3D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetType )( \n            ID3D10Texture3D * This,\n            /* [annotation] */ \n            __out  D3D10_RESOURCE_DIMENSION *rType);\n        \n        void ( STDMETHODCALLTYPE *SetEvictionPriority )( \n            ID3D10Texture3D * This,\n            /* [annotation] */ \n            __in  UINT EvictionPriority);\n        \n        UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( \n            ID3D10Texture3D * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *Map )( \n            ID3D10Texture3D * This,\n            /* [annotation] */ \n            __in  UINT Subresource,\n            /* [annotation] */ \n            __in  D3D10_MAP MapType,\n            /* [annotation] */ \n            __in  UINT MapFlags,\n            /* [annotation] */ \n            __out  D3D10_MAPPED_TEXTURE3D *pMappedTex3D);\n        \n        void ( STDMETHODCALLTYPE *Unmap )( \n            ID3D10Texture3D * This,\n            /* [annotation] */ \n            __in  UINT Subresource);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D10Texture3D * This,\n            /* [annotation] */ \n            __out  D3D10_TEXTURE3D_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D10Texture3DVtbl;\n\n    interface ID3D10Texture3D\n    {\n        CONST_VTBL struct ID3D10Texture3DVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10Texture3D_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10Texture3D_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10Texture3D_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10Texture3D_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10Texture3D_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10Texture3D_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10Texture3D_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10Texture3D_GetType(This,rType)\t\\\n    ( (This)->lpVtbl -> GetType(This,rType) ) \n\n#define ID3D10Texture3D_SetEvictionPriority(This,EvictionPriority)\t\\\n    ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) \n\n#define ID3D10Texture3D_GetEvictionPriority(This)\t\\\n    ( (This)->lpVtbl -> GetEvictionPriority(This) ) \n\n\n#define ID3D10Texture3D_Map(This,Subresource,MapType,MapFlags,pMappedTex3D)\t\\\n    ( (This)->lpVtbl -> Map(This,Subresource,MapType,MapFlags,pMappedTex3D) ) \n\n#define ID3D10Texture3D_Unmap(This,Subresource)\t\\\n    ( (This)->lpVtbl -> Unmap(This,Subresource) ) \n\n#define ID3D10Texture3D_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10Texture3D_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0009 */\n/* [local] */ \n\ntypedef \nenum D3D10_TEXTURECUBE_FACE\n    {\tD3D10_TEXTURECUBE_FACE_POSITIVE_X\t= 0,\n\tD3D10_TEXTURECUBE_FACE_NEGATIVE_X\t= 1,\n\tD3D10_TEXTURECUBE_FACE_POSITIVE_Y\t= 2,\n\tD3D10_TEXTURECUBE_FACE_NEGATIVE_Y\t= 3,\n\tD3D10_TEXTURECUBE_FACE_POSITIVE_Z\t= 4,\n\tD3D10_TEXTURECUBE_FACE_NEGATIVE_Z\t= 5\n    } \tD3D10_TEXTURECUBE_FACE;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0009_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0009_v0_0_s_ifspec;\n\n#ifndef __ID3D10View_INTERFACE_DEFINED__\n#define __ID3D10View_INTERFACE_DEFINED__\n\n/* interface ID3D10View */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10View;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"C902B03F-60A7-49BA-9936-2A3AB37A7E33\")\n    ID3D10View : public ID3D10DeviceChild\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetResource( \n            /* [annotation] */ \n            __out  ID3D10Resource **ppResource) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10ViewVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10View * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10View * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10View * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10View * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10View * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10View * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10View * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetResource )( \n            ID3D10View * This,\n            /* [annotation] */ \n            __out  ID3D10Resource **ppResource);\n        \n        END_INTERFACE\n    } ID3D10ViewVtbl;\n\n    interface ID3D10View\n    {\n        CONST_VTBL struct ID3D10ViewVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10View_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10View_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10View_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10View_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10View_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10View_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10View_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10View_GetResource(This,ppResource)\t\\\n    ( (This)->lpVtbl -> GetResource(This,ppResource) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10View_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0010 */\n/* [local] */ \n\ntypedef struct D3D10_BUFFER_SRV\n    {\n    union \n        {\n        UINT FirstElement;\n        UINT ElementOffset;\n        } \t;\n    union \n        {\n        UINT NumElements;\n        UINT ElementWidth;\n        } \t;\n    } \tD3D10_BUFFER_SRV;\n\ntypedef struct D3D10_TEX1D_SRV\n    {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    } \tD3D10_TEX1D_SRV;\n\ntypedef struct D3D10_TEX1D_ARRAY_SRV\n    {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D10_TEX1D_ARRAY_SRV;\n\ntypedef struct D3D10_TEX2D_SRV\n    {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    } \tD3D10_TEX2D_SRV;\n\ntypedef struct D3D10_TEX2D_ARRAY_SRV\n    {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D10_TEX2D_ARRAY_SRV;\n\ntypedef struct D3D10_TEX3D_SRV\n    {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    } \tD3D10_TEX3D_SRV;\n\ntypedef struct D3D10_TEXCUBE_SRV\n    {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    } \tD3D10_TEXCUBE_SRV;\n\ntypedef struct D3D10_TEX2DMS_SRV\n    {\n    UINT UnusedField_NothingToDefine;\n    } \tD3D10_TEX2DMS_SRV;\n\ntypedef struct D3D10_TEX2DMS_ARRAY_SRV\n    {\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D10_TEX2DMS_ARRAY_SRV;\n\ntypedef struct D3D10_SHADER_RESOURCE_VIEW_DESC\n    {\n    DXGI_FORMAT Format;\n    D3D10_SRV_DIMENSION ViewDimension;\n    union \n        {\n        D3D10_BUFFER_SRV Buffer;\n        D3D10_TEX1D_SRV Texture1D;\n        D3D10_TEX1D_ARRAY_SRV Texture1DArray;\n        D3D10_TEX2D_SRV Texture2D;\n        D3D10_TEX2D_ARRAY_SRV Texture2DArray;\n        D3D10_TEX2DMS_SRV Texture2DMS;\n        D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray;\n        D3D10_TEX3D_SRV Texture3D;\n        D3D10_TEXCUBE_SRV TextureCube;\n        } \t;\n    } \tD3D10_SHADER_RESOURCE_VIEW_DESC;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0010_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0010_v0_0_s_ifspec;\n\n#ifndef __ID3D10ShaderResourceView_INTERFACE_DEFINED__\n#define __ID3D10ShaderResourceView_INTERFACE_DEFINED__\n\n/* interface ID3D10ShaderResourceView */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10ShaderResourceView;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C07-342C-4106-A19F-4F2704F689F0\")\n    ID3D10ShaderResourceView : public ID3D10View\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10ShaderResourceViewVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10ShaderResourceView * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10ShaderResourceView * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10ShaderResourceView * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10ShaderResourceView * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10ShaderResourceView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10ShaderResourceView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10ShaderResourceView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetResource )( \n            ID3D10ShaderResourceView * This,\n            /* [annotation] */ \n            __out  ID3D10Resource **ppResource);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D10ShaderResourceView * This,\n            /* [annotation] */ \n            __out  D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D10ShaderResourceViewVtbl;\n\n    interface ID3D10ShaderResourceView\n    {\n        CONST_VTBL struct ID3D10ShaderResourceViewVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10ShaderResourceView_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10ShaderResourceView_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10ShaderResourceView_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10ShaderResourceView_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10ShaderResourceView_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10ShaderResourceView_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10ShaderResourceView_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10ShaderResourceView_GetResource(This,ppResource)\t\\\n    ( (This)->lpVtbl -> GetResource(This,ppResource) ) \n\n\n#define ID3D10ShaderResourceView_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10ShaderResourceView_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0011 */\n/* [local] */ \n\ntypedef struct D3D10_BUFFER_RTV\n    {\n    union \n        {\n        UINT FirstElement;\n        UINT ElementOffset;\n        } \t;\n    union \n        {\n        UINT NumElements;\n        UINT ElementWidth;\n        } \t;\n    } \tD3D10_BUFFER_RTV;\n\ntypedef struct D3D10_TEX1D_RTV\n    {\n    UINT MipSlice;\n    } \tD3D10_TEX1D_RTV;\n\ntypedef struct D3D10_TEX1D_ARRAY_RTV\n    {\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D10_TEX1D_ARRAY_RTV;\n\ntypedef struct D3D10_TEX2D_RTV\n    {\n    UINT MipSlice;\n    } \tD3D10_TEX2D_RTV;\n\ntypedef struct D3D10_TEX2DMS_RTV\n    {\n    UINT UnusedField_NothingToDefine;\n    } \tD3D10_TEX2DMS_RTV;\n\ntypedef struct D3D10_TEX2D_ARRAY_RTV\n    {\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D10_TEX2D_ARRAY_RTV;\n\ntypedef struct D3D10_TEX2DMS_ARRAY_RTV\n    {\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D10_TEX2DMS_ARRAY_RTV;\n\ntypedef struct D3D10_TEX3D_RTV\n    {\n    UINT MipSlice;\n    UINT FirstWSlice;\n    UINT WSize;\n    } \tD3D10_TEX3D_RTV;\n\ntypedef struct D3D10_RENDER_TARGET_VIEW_DESC\n    {\n    DXGI_FORMAT Format;\n    D3D10_RTV_DIMENSION ViewDimension;\n    union \n        {\n        D3D10_BUFFER_RTV Buffer;\n        D3D10_TEX1D_RTV Texture1D;\n        D3D10_TEX1D_ARRAY_RTV Texture1DArray;\n        D3D10_TEX2D_RTV Texture2D;\n        D3D10_TEX2D_ARRAY_RTV Texture2DArray;\n        D3D10_TEX2DMS_RTV Texture2DMS;\n        D3D10_TEX2DMS_ARRAY_RTV Texture2DMSArray;\n        D3D10_TEX3D_RTV Texture3D;\n        } \t;\n    } \tD3D10_RENDER_TARGET_VIEW_DESC;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0011_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0011_v0_0_s_ifspec;\n\n#ifndef __ID3D10RenderTargetView_INTERFACE_DEFINED__\n#define __ID3D10RenderTargetView_INTERFACE_DEFINED__\n\n/* interface ID3D10RenderTargetView */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10RenderTargetView;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C08-342C-4106-A19F-4F2704F689F0\")\n    ID3D10RenderTargetView : public ID3D10View\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D10_RENDER_TARGET_VIEW_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10RenderTargetViewVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10RenderTargetView * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10RenderTargetView * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10RenderTargetView * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10RenderTargetView * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10RenderTargetView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10RenderTargetView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10RenderTargetView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetResource )( \n            ID3D10RenderTargetView * This,\n            /* [annotation] */ \n            __out  ID3D10Resource **ppResource);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D10RenderTargetView * This,\n            /* [annotation] */ \n            __out  D3D10_RENDER_TARGET_VIEW_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D10RenderTargetViewVtbl;\n\n    interface ID3D10RenderTargetView\n    {\n        CONST_VTBL struct ID3D10RenderTargetViewVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10RenderTargetView_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10RenderTargetView_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10RenderTargetView_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10RenderTargetView_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10RenderTargetView_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10RenderTargetView_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10RenderTargetView_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10RenderTargetView_GetResource(This,ppResource)\t\\\n    ( (This)->lpVtbl -> GetResource(This,ppResource) ) \n\n\n#define ID3D10RenderTargetView_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10RenderTargetView_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0012 */\n/* [local] */ \n\ntypedef struct D3D10_TEX1D_DSV\n    {\n    UINT MipSlice;\n    } \tD3D10_TEX1D_DSV;\n\ntypedef struct D3D10_TEX1D_ARRAY_DSV\n    {\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D10_TEX1D_ARRAY_DSV;\n\ntypedef struct D3D10_TEX2D_DSV\n    {\n    UINT MipSlice;\n    } \tD3D10_TEX2D_DSV;\n\ntypedef struct D3D10_TEX2D_ARRAY_DSV\n    {\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D10_TEX2D_ARRAY_DSV;\n\ntypedef struct D3D10_TEX2DMS_DSV\n    {\n    UINT UnusedField_NothingToDefine;\n    } \tD3D10_TEX2DMS_DSV;\n\ntypedef struct D3D10_TEX2DMS_ARRAY_DSV\n    {\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D10_TEX2DMS_ARRAY_DSV;\n\ntypedef struct D3D10_DEPTH_STENCIL_VIEW_DESC\n    {\n    DXGI_FORMAT Format;\n    D3D10_DSV_DIMENSION ViewDimension;\n    union \n        {\n        D3D10_TEX1D_DSV Texture1D;\n        D3D10_TEX1D_ARRAY_DSV Texture1DArray;\n        D3D10_TEX2D_DSV Texture2D;\n        D3D10_TEX2D_ARRAY_DSV Texture2DArray;\n        D3D10_TEX2DMS_DSV Texture2DMS;\n        D3D10_TEX2DMS_ARRAY_DSV Texture2DMSArray;\n        } \t;\n    } \tD3D10_DEPTH_STENCIL_VIEW_DESC;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0012_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0012_v0_0_s_ifspec;\n\n#ifndef __ID3D10DepthStencilView_INTERFACE_DEFINED__\n#define __ID3D10DepthStencilView_INTERFACE_DEFINED__\n\n/* interface ID3D10DepthStencilView */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10DepthStencilView;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C09-342C-4106-A19F-4F2704F689F0\")\n    ID3D10DepthStencilView : public ID3D10View\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10DepthStencilViewVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10DepthStencilView * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10DepthStencilView * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10DepthStencilView * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10DepthStencilView * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10DepthStencilView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10DepthStencilView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10DepthStencilView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetResource )( \n            ID3D10DepthStencilView * This,\n            /* [annotation] */ \n            __out  ID3D10Resource **ppResource);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D10DepthStencilView * This,\n            /* [annotation] */ \n            __out  D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D10DepthStencilViewVtbl;\n\n    interface ID3D10DepthStencilView\n    {\n        CONST_VTBL struct ID3D10DepthStencilViewVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10DepthStencilView_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10DepthStencilView_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10DepthStencilView_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10DepthStencilView_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10DepthStencilView_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10DepthStencilView_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10DepthStencilView_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10DepthStencilView_GetResource(This,ppResource)\t\\\n    ( (This)->lpVtbl -> GetResource(This,ppResource) ) \n\n\n#define ID3D10DepthStencilView_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10DepthStencilView_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D10VertexShader_INTERFACE_DEFINED__\n#define __ID3D10VertexShader_INTERFACE_DEFINED__\n\n/* interface ID3D10VertexShader */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10VertexShader;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C0A-342C-4106-A19F-4F2704F689F0\")\n    ID3D10VertexShader : public ID3D10DeviceChild\n    {\n    public:\n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10VertexShaderVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10VertexShader * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10VertexShader * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10VertexShader * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10VertexShader * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10VertexShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10VertexShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10VertexShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        END_INTERFACE\n    } ID3D10VertexShaderVtbl;\n\n    interface ID3D10VertexShader\n    {\n        CONST_VTBL struct ID3D10VertexShaderVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10VertexShader_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10VertexShader_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10VertexShader_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10VertexShader_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10VertexShader_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10VertexShader_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10VertexShader_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10VertexShader_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D10GeometryShader_INTERFACE_DEFINED__\n#define __ID3D10GeometryShader_INTERFACE_DEFINED__\n\n/* interface ID3D10GeometryShader */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10GeometryShader;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"6316BE88-54CD-4040-AB44-20461BC81F68\")\n    ID3D10GeometryShader : public ID3D10DeviceChild\n    {\n    public:\n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10GeometryShaderVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10GeometryShader * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10GeometryShader * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10GeometryShader * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10GeometryShader * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10GeometryShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10GeometryShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10GeometryShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        END_INTERFACE\n    } ID3D10GeometryShaderVtbl;\n\n    interface ID3D10GeometryShader\n    {\n        CONST_VTBL struct ID3D10GeometryShaderVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10GeometryShader_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10GeometryShader_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10GeometryShader_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10GeometryShader_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10GeometryShader_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10GeometryShader_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10GeometryShader_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10GeometryShader_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D10PixelShader_INTERFACE_DEFINED__\n#define __ID3D10PixelShader_INTERFACE_DEFINED__\n\n/* interface ID3D10PixelShader */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10PixelShader;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"4968B601-9D00-4cde-8346-8E7F675819B6\")\n    ID3D10PixelShader : public ID3D10DeviceChild\n    {\n    public:\n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10PixelShaderVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10PixelShader * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10PixelShader * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10PixelShader * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10PixelShader * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10PixelShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10PixelShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10PixelShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        END_INTERFACE\n    } ID3D10PixelShaderVtbl;\n\n    interface ID3D10PixelShader\n    {\n        CONST_VTBL struct ID3D10PixelShaderVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10PixelShader_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10PixelShader_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10PixelShader_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10PixelShader_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10PixelShader_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10PixelShader_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10PixelShader_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10PixelShader_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D10InputLayout_INTERFACE_DEFINED__\n#define __ID3D10InputLayout_INTERFACE_DEFINED__\n\n/* interface ID3D10InputLayout */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10InputLayout;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C0B-342C-4106-A19F-4F2704F689F0\")\n    ID3D10InputLayout : public ID3D10DeviceChild\n    {\n    public:\n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10InputLayoutVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10InputLayout * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10InputLayout * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10InputLayout * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10InputLayout * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10InputLayout * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10InputLayout * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10InputLayout * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        END_INTERFACE\n    } ID3D10InputLayoutVtbl;\n\n    interface ID3D10InputLayout\n    {\n        CONST_VTBL struct ID3D10InputLayoutVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10InputLayout_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10InputLayout_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10InputLayout_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10InputLayout_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10InputLayout_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10InputLayout_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10InputLayout_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10InputLayout_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0017 */\n/* [local] */ \n\ntypedef \nenum D3D10_FILTER\n    {\tD3D10_FILTER_MIN_MAG_MIP_POINT\t= 0,\n\tD3D10_FILTER_MIN_MAG_POINT_MIP_LINEAR\t= 0x1,\n\tD3D10_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT\t= 0x4,\n\tD3D10_FILTER_MIN_POINT_MAG_MIP_LINEAR\t= 0x5,\n\tD3D10_FILTER_MIN_LINEAR_MAG_MIP_POINT\t= 0x10,\n\tD3D10_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR\t= 0x11,\n\tD3D10_FILTER_MIN_MAG_LINEAR_MIP_POINT\t= 0x14,\n\tD3D10_FILTER_MIN_MAG_MIP_LINEAR\t= 0x15,\n\tD3D10_FILTER_ANISOTROPIC\t= 0x55,\n\tD3D10_FILTER_COMPARISON_MIN_MAG_MIP_POINT\t= 0x80,\n\tD3D10_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR\t= 0x81,\n\tD3D10_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT\t= 0x84,\n\tD3D10_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR\t= 0x85,\n\tD3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT\t= 0x90,\n\tD3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR\t= 0x91,\n\tD3D10_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT\t= 0x94,\n\tD3D10_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR\t= 0x95,\n\tD3D10_FILTER_COMPARISON_ANISOTROPIC\t= 0xd5,\n\tD3D10_FILTER_TEXT_1BIT\t= 0x80000000\n    } \tD3D10_FILTER;\n\ntypedef \nenum D3D10_FILTER_TYPE\n    {\tD3D10_FILTER_TYPE_POINT\t= 0,\n\tD3D10_FILTER_TYPE_LINEAR\t= 1\n    } \tD3D10_FILTER_TYPE;\n\n#define\tD3D10_FILTER_TYPE_MASK\t( 0x3 )\n\n#define\tD3D10_MIN_FILTER_SHIFT\t( 4 )\n\n#define\tD3D10_MAG_FILTER_SHIFT\t( 2 )\n\n#define\tD3D10_MIP_FILTER_SHIFT\t( 0 )\n\n#define\tD3D10_COMPARISON_FILTERING_BIT\t( 0x80 )\n\n#define\tD3D10_ANISOTROPIC_FILTERING_BIT\t( 0x40 )\n\n#define\tD3D10_TEXT_1BIT_BIT\t( 0x80000000 )\n\n#define D3D10_ENCODE_BASIC_FILTER( min, mag, mip, bComparison )                                           \\\n                                   ( ( D3D10_FILTER ) (                                                   \\\n                                   ( ( bComparison ) ? D3D10_COMPARISON_FILTERING_BIT : 0 ) |             \\\n                                   ( ( ( min ) & D3D10_FILTER_TYPE_MASK ) << D3D10_MIN_FILTER_SHIFT ) |   \\\n                                   ( ( ( mag ) & D3D10_FILTER_TYPE_MASK ) << D3D10_MAG_FILTER_SHIFT ) |   \\\n                                   ( ( ( mip ) & D3D10_FILTER_TYPE_MASK ) << D3D10_MIP_FILTER_SHIFT ) ) )   \n#define D3D10_ENCODE_ANISOTROPIC_FILTER( bComparison )                                                \\\n                                         ( ( D3D10_FILTER ) (                                         \\\n                                         D3D10_ANISOTROPIC_FILTERING_BIT |                            \\\n                                         D3D10_ENCODE_BASIC_FILTER( D3D10_FILTER_TYPE_LINEAR,         \\\n                                                                    D3D10_FILTER_TYPE_LINEAR,         \\\n                                                                    D3D10_FILTER_TYPE_LINEAR,         \\\n                                                                    bComparison ) ) )                   \n#define D3D10_DECODE_MIN_FILTER( d3d10Filter )                                                              \\\n                                 ( ( D3D10_FILTER_TYPE )                                                    \\\n                                 ( ( ( d3d10Filter ) >> D3D10_MIN_FILTER_SHIFT ) & D3D10_FILTER_TYPE_MASK ) ) \n#define D3D10_DECODE_MAG_FILTER( d3d10Filter )                                                              \\\n                                 ( ( D3D10_FILTER_TYPE )                                                    \\\n                                 ( ( ( d3d10Filter ) >> D3D10_MAG_FILTER_SHIFT ) & D3D10_FILTER_TYPE_MASK ) ) \n#define D3D10_DECODE_MIP_FILTER( d3d10Filter )                                                              \\\n                                 ( ( D3D10_FILTER_TYPE )                                                    \\\n                                 ( ( ( d3d10Filter ) >> D3D10_MIP_FILTER_SHIFT ) & D3D10_FILTER_TYPE_MASK ) ) \n#define D3D10_DECODE_IS_COMPARISON_FILTER( d3d10Filter )                                                    \\\n                                 ( ( d3d10Filter ) & D3D10_COMPARISON_FILTERING_BIT )                         \n#define D3D10_DECODE_IS_ANISOTROPIC_FILTER( d3d10Filter )                                               \\\n                            ( ( ( d3d10Filter ) & D3D10_ANISOTROPIC_FILTERING_BIT ) &&                  \\\n                            ( D3D10_FILTER_TYPE_LINEAR == D3D10_DECODE_MIN_FILTER( d3d10Filter ) ) &&   \\\n                            ( D3D10_FILTER_TYPE_LINEAR == D3D10_DECODE_MAG_FILTER( d3d10Filter ) ) &&   \\\n                            ( D3D10_FILTER_TYPE_LINEAR == D3D10_DECODE_MIP_FILTER( d3d10Filter ) ) )      \n#define D3D10_DECODE_IS_TEXT_1BIT_FILTER( d3d10Filter )                                             \\\n                                 ( ( d3d10Filter ) == D3D10_TEXT_1BIT_BIT )                           \ntypedef \nenum D3D10_TEXTURE_ADDRESS_MODE\n    {\tD3D10_TEXTURE_ADDRESS_WRAP\t= 1,\n\tD3D10_TEXTURE_ADDRESS_MIRROR\t= 2,\n\tD3D10_TEXTURE_ADDRESS_CLAMP\t= 3,\n\tD3D10_TEXTURE_ADDRESS_BORDER\t= 4,\n\tD3D10_TEXTURE_ADDRESS_MIRROR_ONCE\t= 5\n    } \tD3D10_TEXTURE_ADDRESS_MODE;\n\ntypedef struct D3D10_SAMPLER_DESC\n    {\n    D3D10_FILTER Filter;\n    D3D10_TEXTURE_ADDRESS_MODE AddressU;\n    D3D10_TEXTURE_ADDRESS_MODE AddressV;\n    D3D10_TEXTURE_ADDRESS_MODE AddressW;\n    FLOAT MipLODBias;\n    UINT MaxAnisotropy;\n    D3D10_COMPARISON_FUNC ComparisonFunc;\n    FLOAT BorderColor[ 4 ];\n    FLOAT MinLOD;\n    FLOAT MaxLOD;\n    } \tD3D10_SAMPLER_DESC;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0017_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0017_v0_0_s_ifspec;\n\n#ifndef __ID3D10SamplerState_INTERFACE_DEFINED__\n#define __ID3D10SamplerState_INTERFACE_DEFINED__\n\n/* interface ID3D10SamplerState */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10SamplerState;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C0C-342C-4106-A19F-4F2704F689F0\")\n    ID3D10SamplerState : public ID3D10DeviceChild\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D10_SAMPLER_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10SamplerStateVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10SamplerState * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10SamplerState * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10SamplerState * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10SamplerState * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10SamplerState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10SamplerState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10SamplerState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D10SamplerState * This,\n            /* [annotation] */ \n            __out  D3D10_SAMPLER_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D10SamplerStateVtbl;\n\n    interface ID3D10SamplerState\n    {\n        CONST_VTBL struct ID3D10SamplerStateVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10SamplerState_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10SamplerState_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10SamplerState_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10SamplerState_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10SamplerState_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10SamplerState_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10SamplerState_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10SamplerState_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10SamplerState_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0018 */\n/* [local] */ \n\ntypedef \nenum D3D10_FORMAT_SUPPORT\n    {\tD3D10_FORMAT_SUPPORT_BUFFER\t= 0x1,\n\tD3D10_FORMAT_SUPPORT_IA_VERTEX_BUFFER\t= 0x2,\n\tD3D10_FORMAT_SUPPORT_IA_INDEX_BUFFER\t= 0x4,\n\tD3D10_FORMAT_SUPPORT_SO_BUFFER\t= 0x8,\n\tD3D10_FORMAT_SUPPORT_TEXTURE1D\t= 0x10,\n\tD3D10_FORMAT_SUPPORT_TEXTURE2D\t= 0x20,\n\tD3D10_FORMAT_SUPPORT_TEXTURE3D\t= 0x40,\n\tD3D10_FORMAT_SUPPORT_TEXTURECUBE\t= 0x80,\n\tD3D10_FORMAT_SUPPORT_SHADER_LOAD\t= 0x100,\n\tD3D10_FORMAT_SUPPORT_SHADER_SAMPLE\t= 0x200,\n\tD3D10_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON\t= 0x400,\n\tD3D10_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT\t= 0x800,\n\tD3D10_FORMAT_SUPPORT_MIP\t= 0x1000,\n\tD3D10_FORMAT_SUPPORT_MIP_AUTOGEN\t= 0x2000,\n\tD3D10_FORMAT_SUPPORT_RENDER_TARGET\t= 0x4000,\n\tD3D10_FORMAT_SUPPORT_BLENDABLE\t= 0x8000,\n\tD3D10_FORMAT_SUPPORT_DEPTH_STENCIL\t= 0x10000,\n\tD3D10_FORMAT_SUPPORT_CPU_LOCKABLE\t= 0x20000,\n\tD3D10_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE\t= 0x40000,\n\tD3D10_FORMAT_SUPPORT_DISPLAY\t= 0x80000,\n\tD3D10_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT\t= 0x100000,\n\tD3D10_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET\t= 0x200000,\n\tD3D10_FORMAT_SUPPORT_MULTISAMPLE_LOAD\t= 0x400000,\n\tD3D10_FORMAT_SUPPORT_SHADER_GATHER\t= 0x800000,\n\tD3D10_FORMAT_SUPPORT_BACK_BUFFER_CAST\t= 0x1000000\n    } \tD3D10_FORMAT_SUPPORT;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0018_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0018_v0_0_s_ifspec;\n\n#ifndef __ID3D10Asynchronous_INTERFACE_DEFINED__\n#define __ID3D10Asynchronous_INTERFACE_DEFINED__\n\n/* interface ID3D10Asynchronous */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10Asynchronous;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C0D-342C-4106-A19F-4F2704F689F0\")\n    ID3D10Asynchronous : public ID3D10DeviceChild\n    {\n    public:\n        virtual void STDMETHODCALLTYPE Begin( void) = 0;\n        \n        virtual void STDMETHODCALLTYPE End( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetData( \n            /* [annotation] */ \n            __out_bcount_opt(DataSize)  void *pData,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in  UINT GetDataFlags) = 0;\n        \n        virtual UINT STDMETHODCALLTYPE GetDataSize( void) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10AsynchronousVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10Asynchronous * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10Asynchronous * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10Asynchronous * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10Asynchronous * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10Asynchronous * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10Asynchronous * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10Asynchronous * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *Begin )( \n            ID3D10Asynchronous * This);\n        \n        void ( STDMETHODCALLTYPE *End )( \n            ID3D10Asynchronous * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetData )( \n            ID3D10Asynchronous * This,\n            /* [annotation] */ \n            __out_bcount_opt(DataSize)  void *pData,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in  UINT GetDataFlags);\n        \n        UINT ( STDMETHODCALLTYPE *GetDataSize )( \n            ID3D10Asynchronous * This);\n        \n        END_INTERFACE\n    } ID3D10AsynchronousVtbl;\n\n    interface ID3D10Asynchronous\n    {\n        CONST_VTBL struct ID3D10AsynchronousVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10Asynchronous_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10Asynchronous_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10Asynchronous_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10Asynchronous_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10Asynchronous_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10Asynchronous_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10Asynchronous_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10Asynchronous_Begin(This)\t\\\n    ( (This)->lpVtbl -> Begin(This) ) \n\n#define ID3D10Asynchronous_End(This)\t\\\n    ( (This)->lpVtbl -> End(This) ) \n\n#define ID3D10Asynchronous_GetData(This,pData,DataSize,GetDataFlags)\t\\\n    ( (This)->lpVtbl -> GetData(This,pData,DataSize,GetDataFlags) ) \n\n#define ID3D10Asynchronous_GetDataSize(This)\t\\\n    ( (This)->lpVtbl -> GetDataSize(This) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10Asynchronous_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0019 */\n/* [local] */ \n\ntypedef \nenum D3D10_ASYNC_GETDATA_FLAG\n    {\tD3D10_ASYNC_GETDATA_DONOTFLUSH\t= 0x1\n    } \tD3D10_ASYNC_GETDATA_FLAG;\n\ntypedef \nenum D3D10_QUERY\n    {\tD3D10_QUERY_EVENT\t= 0,\n\tD3D10_QUERY_OCCLUSION\t= ( D3D10_QUERY_EVENT + 1 ) ,\n\tD3D10_QUERY_TIMESTAMP\t= ( D3D10_QUERY_OCCLUSION + 1 ) ,\n\tD3D10_QUERY_TIMESTAMP_DISJOINT\t= ( D3D10_QUERY_TIMESTAMP + 1 ) ,\n\tD3D10_QUERY_PIPELINE_STATISTICS\t= ( D3D10_QUERY_TIMESTAMP_DISJOINT + 1 ) ,\n\tD3D10_QUERY_OCCLUSION_PREDICATE\t= ( D3D10_QUERY_PIPELINE_STATISTICS + 1 ) ,\n\tD3D10_QUERY_SO_STATISTICS\t= ( D3D10_QUERY_OCCLUSION_PREDICATE + 1 ) ,\n\tD3D10_QUERY_SO_OVERFLOW_PREDICATE\t= ( D3D10_QUERY_SO_STATISTICS + 1 ) \n    } \tD3D10_QUERY;\n\ntypedef \nenum D3D10_QUERY_MISC_FLAG\n    {\tD3D10_QUERY_MISC_PREDICATEHINT\t= 0x1\n    } \tD3D10_QUERY_MISC_FLAG;\n\ntypedef struct D3D10_QUERY_DESC\n    {\n    D3D10_QUERY Query;\n    UINT MiscFlags;\n    } \tD3D10_QUERY_DESC;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0019_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0019_v0_0_s_ifspec;\n\n#ifndef __ID3D10Query_INTERFACE_DEFINED__\n#define __ID3D10Query_INTERFACE_DEFINED__\n\n/* interface ID3D10Query */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10Query;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C0E-342C-4106-A19F-4F2704F689F0\")\n    ID3D10Query : public ID3D10Asynchronous\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D10_QUERY_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10QueryVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10Query * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10Query * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10Query * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10Query * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10Query * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10Query * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10Query * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *Begin )( \n            ID3D10Query * This);\n        \n        void ( STDMETHODCALLTYPE *End )( \n            ID3D10Query * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetData )( \n            ID3D10Query * This,\n            /* [annotation] */ \n            __out_bcount_opt(DataSize)  void *pData,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in  UINT GetDataFlags);\n        \n        UINT ( STDMETHODCALLTYPE *GetDataSize )( \n            ID3D10Query * This);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D10Query * This,\n            /* [annotation] */ \n            __out  D3D10_QUERY_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D10QueryVtbl;\n\n    interface ID3D10Query\n    {\n        CONST_VTBL struct ID3D10QueryVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10Query_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10Query_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10Query_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10Query_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10Query_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10Query_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10Query_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10Query_Begin(This)\t\\\n    ( (This)->lpVtbl -> Begin(This) ) \n\n#define ID3D10Query_End(This)\t\\\n    ( (This)->lpVtbl -> End(This) ) \n\n#define ID3D10Query_GetData(This,pData,DataSize,GetDataFlags)\t\\\n    ( (This)->lpVtbl -> GetData(This,pData,DataSize,GetDataFlags) ) \n\n#define ID3D10Query_GetDataSize(This)\t\\\n    ( (This)->lpVtbl -> GetDataSize(This) ) \n\n\n#define ID3D10Query_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10Query_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D10Predicate_INTERFACE_DEFINED__\n#define __ID3D10Predicate_INTERFACE_DEFINED__\n\n/* interface ID3D10Predicate */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10Predicate;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C10-342C-4106-A19F-4F2704F689F0\")\n    ID3D10Predicate : public ID3D10Query\n    {\n    public:\n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10PredicateVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10Predicate * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10Predicate * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10Predicate * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10Predicate * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10Predicate * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10Predicate * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10Predicate * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *Begin )( \n            ID3D10Predicate * This);\n        \n        void ( STDMETHODCALLTYPE *End )( \n            ID3D10Predicate * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetData )( \n            ID3D10Predicate * This,\n            /* [annotation] */ \n            __out_bcount_opt(DataSize)  void *pData,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in  UINT GetDataFlags);\n        \n        UINT ( STDMETHODCALLTYPE *GetDataSize )( \n            ID3D10Predicate * This);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D10Predicate * This,\n            /* [annotation] */ \n            __out  D3D10_QUERY_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D10PredicateVtbl;\n\n    interface ID3D10Predicate\n    {\n        CONST_VTBL struct ID3D10PredicateVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10Predicate_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10Predicate_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10Predicate_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10Predicate_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10Predicate_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10Predicate_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10Predicate_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10Predicate_Begin(This)\t\\\n    ( (This)->lpVtbl -> Begin(This) ) \n\n#define ID3D10Predicate_End(This)\t\\\n    ( (This)->lpVtbl -> End(This) ) \n\n#define ID3D10Predicate_GetData(This,pData,DataSize,GetDataFlags)\t\\\n    ( (This)->lpVtbl -> GetData(This,pData,DataSize,GetDataFlags) ) \n\n#define ID3D10Predicate_GetDataSize(This)\t\\\n    ( (This)->lpVtbl -> GetDataSize(This) ) \n\n\n#define ID3D10Predicate_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10Predicate_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0021 */\n/* [local] */ \n\ntypedef struct D3D10_QUERY_DATA_TIMESTAMP_DISJOINT\n    {\n    UINT64 Frequency;\n    BOOL Disjoint;\n    } \tD3D10_QUERY_DATA_TIMESTAMP_DISJOINT;\n\ntypedef struct D3D10_QUERY_DATA_PIPELINE_STATISTICS\n    {\n    UINT64 IAVertices;\n    UINT64 IAPrimitives;\n    UINT64 VSInvocations;\n    UINT64 GSInvocations;\n    UINT64 GSPrimitives;\n    UINT64 CInvocations;\n    UINT64 CPrimitives;\n    UINT64 PSInvocations;\n    } \tD3D10_QUERY_DATA_PIPELINE_STATISTICS;\n\ntypedef struct D3D10_QUERY_DATA_SO_STATISTICS\n    {\n    UINT64 NumPrimitivesWritten;\n    UINT64 PrimitivesStorageNeeded;\n    } \tD3D10_QUERY_DATA_SO_STATISTICS;\n\ntypedef \nenum D3D10_COUNTER\n    {\tD3D10_COUNTER_GPU_IDLE\t= 0,\n\tD3D10_COUNTER_VERTEX_PROCESSING\t= ( D3D10_COUNTER_GPU_IDLE + 1 ) ,\n\tD3D10_COUNTER_GEOMETRY_PROCESSING\t= ( D3D10_COUNTER_VERTEX_PROCESSING + 1 ) ,\n\tD3D10_COUNTER_PIXEL_PROCESSING\t= ( D3D10_COUNTER_GEOMETRY_PROCESSING + 1 ) ,\n\tD3D10_COUNTER_OTHER_GPU_PROCESSING\t= ( D3D10_COUNTER_PIXEL_PROCESSING + 1 ) ,\n\tD3D10_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION\t= ( D3D10_COUNTER_OTHER_GPU_PROCESSING + 1 ) ,\n\tD3D10_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION\t= ( D3D10_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION + 1 ) ,\n\tD3D10_COUNTER_VERTEX_THROUGHPUT_UTILIZATION\t= ( D3D10_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION + 1 ) ,\n\tD3D10_COUNTER_TRIANGLE_SETUP_THROUGHPUT_UTILIZATION\t= ( D3D10_COUNTER_VERTEX_THROUGHPUT_UTILIZATION + 1 ) ,\n\tD3D10_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION\t= ( D3D10_COUNTER_TRIANGLE_SETUP_THROUGHPUT_UTILIZATION + 1 ) ,\n\tD3D10_COUNTER_VS_MEMORY_LIMITED\t= ( D3D10_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION + 1 ) ,\n\tD3D10_COUNTER_VS_COMPUTATION_LIMITED\t= ( D3D10_COUNTER_VS_MEMORY_LIMITED + 1 ) ,\n\tD3D10_COUNTER_GS_MEMORY_LIMITED\t= ( D3D10_COUNTER_VS_COMPUTATION_LIMITED + 1 ) ,\n\tD3D10_COUNTER_GS_COMPUTATION_LIMITED\t= ( D3D10_COUNTER_GS_MEMORY_LIMITED + 1 ) ,\n\tD3D10_COUNTER_PS_MEMORY_LIMITED\t= ( D3D10_COUNTER_GS_COMPUTATION_LIMITED + 1 ) ,\n\tD3D10_COUNTER_PS_COMPUTATION_LIMITED\t= ( D3D10_COUNTER_PS_MEMORY_LIMITED + 1 ) ,\n\tD3D10_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE\t= ( D3D10_COUNTER_PS_COMPUTATION_LIMITED + 1 ) ,\n\tD3D10_COUNTER_TEXTURE_CACHE_HIT_RATE\t= ( D3D10_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE + 1 ) ,\n\tD3D10_COUNTER_DEVICE_DEPENDENT_0\t= 0x40000000\n    } \tD3D10_COUNTER;\n\ntypedef \nenum D3D10_COUNTER_TYPE\n    {\tD3D10_COUNTER_TYPE_FLOAT32\t= 0,\n\tD3D10_COUNTER_TYPE_UINT16\t= ( D3D10_COUNTER_TYPE_FLOAT32 + 1 ) ,\n\tD3D10_COUNTER_TYPE_UINT32\t= ( D3D10_COUNTER_TYPE_UINT16 + 1 ) ,\n\tD3D10_COUNTER_TYPE_UINT64\t= ( D3D10_COUNTER_TYPE_UINT32 + 1 ) \n    } \tD3D10_COUNTER_TYPE;\n\ntypedef struct D3D10_COUNTER_DESC\n    {\n    D3D10_COUNTER Counter;\n    UINT MiscFlags;\n    } \tD3D10_COUNTER_DESC;\n\ntypedef struct D3D10_COUNTER_INFO\n    {\n    D3D10_COUNTER LastDeviceDependentCounter;\n    UINT NumSimultaneousCounters;\n    UINT8 NumDetectableParallelUnits;\n    } \tD3D10_COUNTER_INFO;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0021_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0021_v0_0_s_ifspec;\n\n#ifndef __ID3D10Counter_INTERFACE_DEFINED__\n#define __ID3D10Counter_INTERFACE_DEFINED__\n\n/* interface ID3D10Counter */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10Counter;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C11-342C-4106-A19F-4F2704F689F0\")\n    ID3D10Counter : public ID3D10Asynchronous\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D10_COUNTER_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10CounterVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10Counter * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10Counter * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10Counter * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10Counter * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10Counter * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10Counter * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10Counter * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *Begin )( \n            ID3D10Counter * This);\n        \n        void ( STDMETHODCALLTYPE *End )( \n            ID3D10Counter * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetData )( \n            ID3D10Counter * This,\n            /* [annotation] */ \n            __out_bcount_opt(DataSize)  void *pData,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in  UINT GetDataFlags);\n        \n        UINT ( STDMETHODCALLTYPE *GetDataSize )( \n            ID3D10Counter * This);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D10Counter * This,\n            /* [annotation] */ \n            __out  D3D10_COUNTER_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D10CounterVtbl;\n\n    interface ID3D10Counter\n    {\n        CONST_VTBL struct ID3D10CounterVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10Counter_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10Counter_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10Counter_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10Counter_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10Counter_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10Counter_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10Counter_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10Counter_Begin(This)\t\\\n    ( (This)->lpVtbl -> Begin(This) ) \n\n#define ID3D10Counter_End(This)\t\\\n    ( (This)->lpVtbl -> End(This) ) \n\n#define ID3D10Counter_GetData(This,pData,DataSize,GetDataFlags)\t\\\n    ( (This)->lpVtbl -> GetData(This,pData,DataSize,GetDataFlags) ) \n\n#define ID3D10Counter_GetDataSize(This)\t\\\n    ( (This)->lpVtbl -> GetDataSize(This) ) \n\n\n#define ID3D10Counter_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10Counter_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D10Device_INTERFACE_DEFINED__\n#define __ID3D10Device_INTERFACE_DEFINED__\n\n/* interface ID3D10Device */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10Device;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C0F-342C-4106-A19F-4F2704F689F0\")\n    ID3D10Device : public IUnknown\n    {\n    public:\n        virtual void STDMETHODCALLTYPE VSSetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D10Buffer *const *ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE PSSetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D10ShaderResourceView *const *ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE PSSetShader( \n            /* [annotation] */ \n            __in_opt  ID3D10PixelShader *pPixelShader) = 0;\n        \n        virtual void STDMETHODCALLTYPE PSSetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D10SamplerState *const *ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE VSSetShader( \n            /* [annotation] */ \n            __in_opt  ID3D10VertexShader *pVertexShader) = 0;\n        \n        virtual void STDMETHODCALLTYPE DrawIndexed( \n            /* [annotation] */ \n            __in  UINT IndexCount,\n            /* [annotation] */ \n            __in  UINT StartIndexLocation,\n            /* [annotation] */ \n            __in  INT BaseVertexLocation) = 0;\n        \n        virtual void STDMETHODCALLTYPE Draw( \n            /* [annotation] */ \n            __in  UINT VertexCount,\n            /* [annotation] */ \n            __in  UINT StartVertexLocation) = 0;\n        \n        virtual void STDMETHODCALLTYPE PSSetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D10Buffer *const *ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE IASetInputLayout( \n            /* [annotation] */ \n            __in_opt  ID3D10InputLayout *pInputLayout) = 0;\n        \n        virtual void STDMETHODCALLTYPE IASetVertexBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D10Buffer *const *ppVertexBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  const UINT *pStrides,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  const UINT *pOffsets) = 0;\n        \n        virtual void STDMETHODCALLTYPE IASetIndexBuffer( \n            /* [annotation] */ \n            __in_opt  ID3D10Buffer *pIndexBuffer,\n            /* [annotation] */ \n            __in  DXGI_FORMAT Format,\n            /* [annotation] */ \n            __in  UINT Offset) = 0;\n        \n        virtual void STDMETHODCALLTYPE DrawIndexedInstanced( \n            /* [annotation] */ \n            __in  UINT IndexCountPerInstance,\n            /* [annotation] */ \n            __in  UINT InstanceCount,\n            /* [annotation] */ \n            __in  UINT StartIndexLocation,\n            /* [annotation] */ \n            __in  INT BaseVertexLocation,\n            /* [annotation] */ \n            __in  UINT StartInstanceLocation) = 0;\n        \n        virtual void STDMETHODCALLTYPE DrawInstanced( \n            /* [annotation] */ \n            __in  UINT VertexCountPerInstance,\n            /* [annotation] */ \n            __in  UINT InstanceCount,\n            /* [annotation] */ \n            __in  UINT StartVertexLocation,\n            /* [annotation] */ \n            __in  UINT StartInstanceLocation) = 0;\n        \n        virtual void STDMETHODCALLTYPE GSSetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D10Buffer *const *ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE GSSetShader( \n            /* [annotation] */ \n            __in_opt  ID3D10GeometryShader *pShader) = 0;\n        \n        virtual void STDMETHODCALLTYPE IASetPrimitiveTopology( \n            /* [annotation] */ \n            __in  D3D10_PRIMITIVE_TOPOLOGY Topology) = 0;\n        \n        virtual void STDMETHODCALLTYPE VSSetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D10ShaderResourceView *const *ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE VSSetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D10SamplerState *const *ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE SetPredication( \n            /* [annotation] */ \n            __in_opt  ID3D10Predicate *pPredicate,\n            /* [annotation] */ \n            __in  BOOL PredicateValue) = 0;\n        \n        virtual void STDMETHODCALLTYPE GSSetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D10ShaderResourceView *const *ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE GSSetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D10SamplerState *const *ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE OMSetRenderTargets( \n            /* [annotation] */ \n            __in_range( 0, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount_opt(NumViews)  ID3D10RenderTargetView *const *ppRenderTargetViews,\n            /* [annotation] */ \n            __in_opt  ID3D10DepthStencilView *pDepthStencilView) = 0;\n        \n        virtual void STDMETHODCALLTYPE OMSetBlendState( \n            /* [annotation] */ \n            __in_opt  ID3D10BlendState *pBlendState,\n            /* [annotation] */ \n            __in  const FLOAT BlendFactor[ 4 ],\n            /* [annotation] */ \n            __in  UINT SampleMask) = 0;\n        \n        virtual void STDMETHODCALLTYPE OMSetDepthStencilState( \n            /* [annotation] */ \n            __in_opt  ID3D10DepthStencilState *pDepthStencilState,\n            /* [annotation] */ \n            __in  UINT StencilRef) = 0;\n        \n        virtual void STDMETHODCALLTYPE SOSetTargets( \n            /* [annotation] */ \n            __in_range( 0, D3D10_SO_BUFFER_SLOT_COUNT)  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount_opt(NumBuffers)  ID3D10Buffer *const *ppSOTargets,\n            /* [annotation] */ \n            __in_ecount_opt(NumBuffers)  const UINT *pOffsets) = 0;\n        \n        virtual void STDMETHODCALLTYPE DrawAuto( void) = 0;\n        \n        virtual void STDMETHODCALLTYPE RSSetState( \n            /* [annotation] */ \n            __in_opt  ID3D10RasterizerState *pRasterizerState) = 0;\n        \n        virtual void STDMETHODCALLTYPE RSSetViewports( \n            /* [annotation] */ \n            __in_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,\n            /* [annotation] */ \n            __in_ecount_opt(NumViewports)  const D3D10_VIEWPORT *pViewports) = 0;\n        \n        virtual void STDMETHODCALLTYPE RSSetScissorRects( \n            /* [annotation] */ \n            __in_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,\n            /* [annotation] */ \n            __in_ecount_opt(NumRects)  const D3D10_RECT *pRects) = 0;\n        \n        virtual void STDMETHODCALLTYPE CopySubresourceRegion( \n            /* [annotation] */ \n            __in  ID3D10Resource *pDstResource,\n            /* [annotation] */ \n            __in  UINT DstSubresource,\n            /* [annotation] */ \n            __in  UINT DstX,\n            /* [annotation] */ \n            __in  UINT DstY,\n            /* [annotation] */ \n            __in  UINT DstZ,\n            /* [annotation] */ \n            __in  ID3D10Resource *pSrcResource,\n            /* [annotation] */ \n            __in  UINT SrcSubresource,\n            /* [annotation] */ \n            __in_opt  const D3D10_BOX *pSrcBox) = 0;\n        \n        virtual void STDMETHODCALLTYPE CopyResource( \n            /* [annotation] */ \n            __in  ID3D10Resource *pDstResource,\n            /* [annotation] */ \n            __in  ID3D10Resource *pSrcResource) = 0;\n        \n        virtual void STDMETHODCALLTYPE UpdateSubresource( \n            /* [annotation] */ \n            __in  ID3D10Resource *pDstResource,\n            /* [annotation] */ \n            __in  UINT DstSubresource,\n            /* [annotation] */ \n            __in_opt  const D3D10_BOX *pDstBox,\n            /* [annotation] */ \n            __in  const void *pSrcData,\n            /* [annotation] */ \n            __in  UINT SrcRowPitch,\n            /* [annotation] */ \n            __in  UINT SrcDepthPitch) = 0;\n        \n        virtual void STDMETHODCALLTYPE ClearRenderTargetView( \n            /* [annotation] */ \n            __in  ID3D10RenderTargetView *pRenderTargetView,\n            /* [annotation] */ \n            __in  const FLOAT ColorRGBA[ 4 ]) = 0;\n        \n        virtual void STDMETHODCALLTYPE ClearDepthStencilView( \n            /* [annotation] */ \n            __in  ID3D10DepthStencilView *pDepthStencilView,\n            /* [annotation] */ \n            __in  UINT ClearFlags,\n            /* [annotation] */ \n            __in  FLOAT Depth,\n            /* [annotation] */ \n            __in  UINT8 Stencil) = 0;\n        \n        virtual void STDMETHODCALLTYPE GenerateMips( \n            /* [annotation] */ \n            __in  ID3D10ShaderResourceView *pShaderResourceView) = 0;\n        \n        virtual void STDMETHODCALLTYPE ResolveSubresource( \n            /* [annotation] */ \n            __in  ID3D10Resource *pDstResource,\n            /* [annotation] */ \n            __in  UINT DstSubresource,\n            /* [annotation] */ \n            __in  ID3D10Resource *pSrcResource,\n            /* [annotation] */ \n            __in  UINT SrcSubresource,\n            /* [annotation] */ \n            __in  DXGI_FORMAT Format) = 0;\n        \n        virtual void STDMETHODCALLTYPE VSGetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D10Buffer **ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE PSGetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D10ShaderResourceView **ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE PSGetShader( \n            /* [annotation] */ \n            __out  ID3D10PixelShader **ppPixelShader) = 0;\n        \n        virtual void STDMETHODCALLTYPE PSGetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D10SamplerState **ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE VSGetShader( \n            /* [annotation] */ \n            __out  ID3D10VertexShader **ppVertexShader) = 0;\n        \n        virtual void STDMETHODCALLTYPE PSGetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D10Buffer **ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE IAGetInputLayout( \n            /* [annotation] */ \n            __out  ID3D10InputLayout **ppInputLayout) = 0;\n        \n        virtual void STDMETHODCALLTYPE IAGetVertexBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  ID3D10Buffer **ppVertexBuffers,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  UINT *pStrides,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  UINT *pOffsets) = 0;\n        \n        virtual void STDMETHODCALLTYPE IAGetIndexBuffer( \n            /* [annotation] */ \n            __out_opt  ID3D10Buffer **pIndexBuffer,\n            /* [annotation] */ \n            __out_opt  DXGI_FORMAT *Format,\n            /* [annotation] */ \n            __out_opt  UINT *Offset) = 0;\n        \n        virtual void STDMETHODCALLTYPE GSGetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D10Buffer **ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE GSGetShader( \n            /* [annotation] */ \n            __out  ID3D10GeometryShader **ppGeometryShader) = 0;\n        \n        virtual void STDMETHODCALLTYPE IAGetPrimitiveTopology( \n            /* [annotation] */ \n            __out  D3D10_PRIMITIVE_TOPOLOGY *pTopology) = 0;\n        \n        virtual void STDMETHODCALLTYPE VSGetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D10ShaderResourceView **ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE VSGetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D10SamplerState **ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE GetPredication( \n            /* [annotation] */ \n            __out_opt  ID3D10Predicate **ppPredicate,\n            /* [annotation] */ \n            __out_opt  BOOL *pPredicateValue) = 0;\n        \n        virtual void STDMETHODCALLTYPE GSGetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D10ShaderResourceView **ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE GSGetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D10SamplerState **ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE OMGetRenderTargets( \n            /* [annotation] */ \n            __in_range( 0, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount_opt(NumViews)  ID3D10RenderTargetView **ppRenderTargetViews,\n            /* [annotation] */ \n            __out_opt  ID3D10DepthStencilView **ppDepthStencilView) = 0;\n        \n        virtual void STDMETHODCALLTYPE OMGetBlendState( \n            /* [annotation] */ \n            __out_opt  ID3D10BlendState **ppBlendState,\n            /* [annotation] */ \n            __out_opt  FLOAT BlendFactor[ 4 ],\n            /* [annotation] */ \n            __out_opt  UINT *pSampleMask) = 0;\n        \n        virtual void STDMETHODCALLTYPE OMGetDepthStencilState( \n            /* [annotation] */ \n            __out_opt  ID3D10DepthStencilState **ppDepthStencilState,\n            /* [annotation] */ \n            __out_opt  UINT *pStencilRef) = 0;\n        \n        virtual void STDMETHODCALLTYPE SOGetTargets( \n            /* [annotation] */ \n            __in_range( 0, D3D10_SO_BUFFER_SLOT_COUNT )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  ID3D10Buffer **ppSOTargets,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  UINT *pOffsets) = 0;\n        \n        virtual void STDMETHODCALLTYPE RSGetState( \n            /* [annotation] */ \n            __out  ID3D10RasterizerState **ppRasterizerState) = 0;\n        \n        virtual void STDMETHODCALLTYPE RSGetViewports( \n            /* [annotation] */ \n            __inout /*_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/   UINT *NumViewports,\n            /* [annotation] */ \n            __out_ecount_opt(*NumViewports)  D3D10_VIEWPORT *pViewports) = 0;\n        \n        virtual void STDMETHODCALLTYPE RSGetScissorRects( \n            /* [annotation] */ \n            __inout /*_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/   UINT *NumRects,\n            /* [annotation] */ \n            __out_ecount_opt(*NumRects)  D3D10_RECT *pRects) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetDeviceRemovedReason( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetExceptionMode( \n            UINT RaiseFlags) = 0;\n        \n        virtual UINT STDMETHODCALLTYPE GetExceptionMode( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetPrivateData( \n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetPrivateData( \n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface( \n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData) = 0;\n        \n        virtual void STDMETHODCALLTYPE ClearState( void) = 0;\n        \n        virtual void STDMETHODCALLTYPE Flush( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateBuffer( \n            /* [annotation] */ \n            __in  const D3D10_BUFFER_DESC *pDesc,\n            /* [annotation] */ \n            __in_opt  const D3D10_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out_opt  ID3D10Buffer **ppBuffer) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateTexture1D( \n            /* [annotation] */ \n            __in  const D3D10_TEXTURE1D_DESC *pDesc,\n            /* [annotation] */ \n            __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize)  const D3D10_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out  ID3D10Texture1D **ppTexture1D) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateTexture2D( \n            /* [annotation] */ \n            __in  const D3D10_TEXTURE2D_DESC *pDesc,\n            /* [annotation] */ \n            __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize)  const D3D10_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out  ID3D10Texture2D **ppTexture2D) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateTexture3D( \n            /* [annotation] */ \n            __in  const D3D10_TEXTURE3D_DESC *pDesc,\n            /* [annotation] */ \n            __in_xcount_opt(pDesc->MipLevels)  const D3D10_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out  ID3D10Texture3D **ppTexture3D) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateShaderResourceView( \n            /* [annotation] */ \n            __in  ID3D10Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10ShaderResourceView **ppSRView) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateRenderTargetView( \n            /* [annotation] */ \n            __in  ID3D10Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D10_RENDER_TARGET_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10RenderTargetView **ppRTView) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilView( \n            /* [annotation] */ \n            __in  ID3D10Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10DepthStencilView **ppDepthStencilView) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateInputLayout( \n            /* [annotation] */ \n            __in_ecount(NumElements)  const D3D10_INPUT_ELEMENT_DESC *pInputElementDescs,\n            /* [annotation] */ \n            __in_range( 0, D3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT )  UINT NumElements,\n            /* [annotation] */ \n            __in  const void *pShaderBytecodeWithInputSignature,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __out_opt  ID3D10InputLayout **ppInputLayout) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateVertexShader( \n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __out_opt  ID3D10VertexShader **ppVertexShader) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateGeometryShader( \n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __out_opt  ID3D10GeometryShader **ppGeometryShader) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateGeometryShaderWithStreamOutput( \n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_ecount_opt(NumEntries)  const D3D10_SO_DECLARATION_ENTRY *pSODeclaration,\n            /* [annotation] */ \n            __in_range( 0, D3D10_SO_SINGLE_BUFFER_COMPONENT_LIMIT )  UINT NumEntries,\n            /* [annotation] */ \n            __in  UINT OutputStreamStride,\n            /* [annotation] */ \n            __out_opt  ID3D10GeometryShader **ppGeometryShader) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreatePixelShader( \n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __out_opt  ID3D10PixelShader **ppPixelShader) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateBlendState( \n            /* [annotation] */ \n            __in  const D3D10_BLEND_DESC *pBlendStateDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10BlendState **ppBlendState) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilState( \n            /* [annotation] */ \n            __in  const D3D10_DEPTH_STENCIL_DESC *pDepthStencilDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10DepthStencilState **ppDepthStencilState) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateRasterizerState( \n            /* [annotation] */ \n            __in  const D3D10_RASTERIZER_DESC *pRasterizerDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10RasterizerState **ppRasterizerState) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateSamplerState( \n            /* [annotation] */ \n            __in  const D3D10_SAMPLER_DESC *pSamplerDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10SamplerState **ppSamplerState) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateQuery( \n            /* [annotation] */ \n            __in  const D3D10_QUERY_DESC *pQueryDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10Query **ppQuery) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreatePredicate( \n            /* [annotation] */ \n            __in  const D3D10_QUERY_DESC *pPredicateDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10Predicate **ppPredicate) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateCounter( \n            /* [annotation] */ \n            __in  const D3D10_COUNTER_DESC *pCounterDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10Counter **ppCounter) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CheckFormatSupport( \n            /* [annotation] */ \n            __in  DXGI_FORMAT Format,\n            /* [annotation] */ \n            __out  UINT *pFormatSupport) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CheckMultisampleQualityLevels( \n            /* [annotation] */ \n            __in  DXGI_FORMAT Format,\n            /* [annotation] */ \n            __in  UINT SampleCount,\n            /* [annotation] */ \n            __out  UINT *pNumQualityLevels) = 0;\n        \n        virtual void STDMETHODCALLTYPE CheckCounterInfo( \n            /* [annotation] */ \n            __out  D3D10_COUNTER_INFO *pCounterInfo) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CheckCounter( \n            /* [annotation] */ \n            __in  const D3D10_COUNTER_DESC *pDesc,\n            /* [annotation] */ \n            __out  D3D10_COUNTER_TYPE *pType,\n            /* [annotation] */ \n            __out  UINT *pActiveCounters,\n            /* [annotation] */ \n            __out_ecount_opt(*pNameLength)  LPSTR szName,\n            /* [annotation] */ \n            __inout_opt  UINT *pNameLength,\n            /* [annotation] */ \n            __out_ecount_opt(*pUnitsLength)  LPSTR szUnits,\n            /* [annotation] */ \n            __inout_opt  UINT *pUnitsLength,\n            /* [annotation] */ \n            __out_ecount_opt(*pDescriptionLength)  LPSTR szDescription,\n            /* [annotation] */ \n            __inout_opt  UINT *pDescriptionLength) = 0;\n        \n        virtual UINT STDMETHODCALLTYPE GetCreationFlags( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE OpenSharedResource( \n            /* [annotation] */ \n            __in  HANDLE hResource,\n            /* [annotation] */ \n            __in  REFIID ReturnedInterface,\n            /* [annotation] */ \n            __out_opt  void **ppResource) = 0;\n        \n        virtual void STDMETHODCALLTYPE SetTextFilterSize( \n            /* [annotation] */ \n            __in  UINT Width,\n            /* [annotation] */ \n            __in  UINT Height) = 0;\n        \n        virtual void STDMETHODCALLTYPE GetTextFilterSize( \n            /* [annotation] */ \n            __out_opt  UINT *pWidth,\n            /* [annotation] */ \n            __out_opt  UINT *pHeight) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10DeviceVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10Device * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10Device * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10Device * This);\n        \n        void ( STDMETHODCALLTYPE *VSSetConstantBuffers )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D10Buffer *const *ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *PSSetShaderResources )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D10ShaderResourceView *const *ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *PSSetShader )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_opt  ID3D10PixelShader *pPixelShader);\n        \n        void ( STDMETHODCALLTYPE *PSSetSamplers )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D10SamplerState *const *ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *VSSetShader )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_opt  ID3D10VertexShader *pVertexShader);\n        \n        void ( STDMETHODCALLTYPE *DrawIndexed )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  UINT IndexCount,\n            /* [annotation] */ \n            __in  UINT StartIndexLocation,\n            /* [annotation] */ \n            __in  INT BaseVertexLocation);\n        \n        void ( STDMETHODCALLTYPE *Draw )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  UINT VertexCount,\n            /* [annotation] */ \n            __in  UINT StartVertexLocation);\n        \n        void ( STDMETHODCALLTYPE *PSSetConstantBuffers )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D10Buffer *const *ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *IASetInputLayout )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_opt  ID3D10InputLayout *pInputLayout);\n        \n        void ( STDMETHODCALLTYPE *IASetVertexBuffers )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D10Buffer *const *ppVertexBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  const UINT *pStrides,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  const UINT *pOffsets);\n        \n        void ( STDMETHODCALLTYPE *IASetIndexBuffer )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_opt  ID3D10Buffer *pIndexBuffer,\n            /* [annotation] */ \n            __in  DXGI_FORMAT Format,\n            /* [annotation] */ \n            __in  UINT Offset);\n        \n        void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  UINT IndexCountPerInstance,\n            /* [annotation] */ \n            __in  UINT InstanceCount,\n            /* [annotation] */ \n            __in  UINT StartIndexLocation,\n            /* [annotation] */ \n            __in  INT BaseVertexLocation,\n            /* [annotation] */ \n            __in  UINT StartInstanceLocation);\n        \n        void ( STDMETHODCALLTYPE *DrawInstanced )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  UINT VertexCountPerInstance,\n            /* [annotation] */ \n            __in  UINT InstanceCount,\n            /* [annotation] */ \n            __in  UINT StartVertexLocation,\n            /* [annotation] */ \n            __in  UINT StartInstanceLocation);\n        \n        void ( STDMETHODCALLTYPE *GSSetConstantBuffers )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D10Buffer *const *ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *GSSetShader )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_opt  ID3D10GeometryShader *pShader);\n        \n        void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  D3D10_PRIMITIVE_TOPOLOGY Topology);\n        \n        void ( STDMETHODCALLTYPE *VSSetShaderResources )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D10ShaderResourceView *const *ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *VSSetSamplers )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D10SamplerState *const *ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *SetPredication )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_opt  ID3D10Predicate *pPredicate,\n            /* [annotation] */ \n            __in  BOOL PredicateValue);\n        \n        void ( STDMETHODCALLTYPE *GSSetShaderResources )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D10ShaderResourceView *const *ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *GSSetSamplers )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D10SamplerState *const *ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *OMSetRenderTargets )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount_opt(NumViews)  ID3D10RenderTargetView *const *ppRenderTargetViews,\n            /* [annotation] */ \n            __in_opt  ID3D10DepthStencilView *pDepthStencilView);\n        \n        void ( STDMETHODCALLTYPE *OMSetBlendState )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_opt  ID3D10BlendState *pBlendState,\n            /* [annotation] */ \n            __in  const FLOAT BlendFactor[ 4 ],\n            /* [annotation] */ \n            __in  UINT SampleMask);\n        \n        void ( STDMETHODCALLTYPE *OMSetDepthStencilState )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_opt  ID3D10DepthStencilState *pDepthStencilState,\n            /* [annotation] */ \n            __in  UINT StencilRef);\n        \n        void ( STDMETHODCALLTYPE *SOSetTargets )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_SO_BUFFER_SLOT_COUNT)  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount_opt(NumBuffers)  ID3D10Buffer *const *ppSOTargets,\n            /* [annotation] */ \n            __in_ecount_opt(NumBuffers)  const UINT *pOffsets);\n        \n        void ( STDMETHODCALLTYPE *DrawAuto )( \n            ID3D10Device * This);\n        \n        void ( STDMETHODCALLTYPE *RSSetState )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_opt  ID3D10RasterizerState *pRasterizerState);\n        \n        void ( STDMETHODCALLTYPE *RSSetViewports )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,\n            /* [annotation] */ \n            __in_ecount_opt(NumViewports)  const D3D10_VIEWPORT *pViewports);\n        \n        void ( STDMETHODCALLTYPE *RSSetScissorRects )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,\n            /* [annotation] */ \n            __in_ecount_opt(NumRects)  const D3D10_RECT *pRects);\n        \n        void ( STDMETHODCALLTYPE *CopySubresourceRegion )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  ID3D10Resource *pDstResource,\n            /* [annotation] */ \n            __in  UINT DstSubresource,\n            /* [annotation] */ \n            __in  UINT DstX,\n            /* [annotation] */ \n            __in  UINT DstY,\n            /* [annotation] */ \n            __in  UINT DstZ,\n            /* [annotation] */ \n            __in  ID3D10Resource *pSrcResource,\n            /* [annotation] */ \n            __in  UINT SrcSubresource,\n            /* [annotation] */ \n            __in_opt  const D3D10_BOX *pSrcBox);\n        \n        void ( STDMETHODCALLTYPE *CopyResource )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  ID3D10Resource *pDstResource,\n            /* [annotation] */ \n            __in  ID3D10Resource *pSrcResource);\n        \n        void ( STDMETHODCALLTYPE *UpdateSubresource )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  ID3D10Resource *pDstResource,\n            /* [annotation] */ \n            __in  UINT DstSubresource,\n            /* [annotation] */ \n            __in_opt  const D3D10_BOX *pDstBox,\n            /* [annotation] */ \n            __in  const void *pSrcData,\n            /* [annotation] */ \n            __in  UINT SrcRowPitch,\n            /* [annotation] */ \n            __in  UINT SrcDepthPitch);\n        \n        void ( STDMETHODCALLTYPE *ClearRenderTargetView )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  ID3D10RenderTargetView *pRenderTargetView,\n            /* [annotation] */ \n            __in  const FLOAT ColorRGBA[ 4 ]);\n        \n        void ( STDMETHODCALLTYPE *ClearDepthStencilView )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  ID3D10DepthStencilView *pDepthStencilView,\n            /* [annotation] */ \n            __in  UINT ClearFlags,\n            /* [annotation] */ \n            __in  FLOAT Depth,\n            /* [annotation] */ \n            __in  UINT8 Stencil);\n        \n        void ( STDMETHODCALLTYPE *GenerateMips )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  ID3D10ShaderResourceView *pShaderResourceView);\n        \n        void ( STDMETHODCALLTYPE *ResolveSubresource )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  ID3D10Resource *pDstResource,\n            /* [annotation] */ \n            __in  UINT DstSubresource,\n            /* [annotation] */ \n            __in  ID3D10Resource *pSrcResource,\n            /* [annotation] */ \n            __in  UINT SrcSubresource,\n            /* [annotation] */ \n            __in  DXGI_FORMAT Format);\n        \n        void ( STDMETHODCALLTYPE *VSGetConstantBuffers )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D10Buffer **ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *PSGetShaderResources )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D10ShaderResourceView **ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *PSGetShader )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __out  ID3D10PixelShader **ppPixelShader);\n        \n        void ( STDMETHODCALLTYPE *PSGetSamplers )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D10SamplerState **ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *VSGetShader )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __out  ID3D10VertexShader **ppVertexShader);\n        \n        void ( STDMETHODCALLTYPE *PSGetConstantBuffers )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D10Buffer **ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *IAGetInputLayout )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __out  ID3D10InputLayout **ppInputLayout);\n        \n        void ( STDMETHODCALLTYPE *IAGetVertexBuffers )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  ID3D10Buffer **ppVertexBuffers,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  UINT *pStrides,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  UINT *pOffsets);\n        \n        void ( STDMETHODCALLTYPE *IAGetIndexBuffer )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __out_opt  ID3D10Buffer **pIndexBuffer,\n            /* [annotation] */ \n            __out_opt  DXGI_FORMAT *Format,\n            /* [annotation] */ \n            __out_opt  UINT *Offset);\n        \n        void ( STDMETHODCALLTYPE *GSGetConstantBuffers )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D10Buffer **ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *GSGetShader )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __out  ID3D10GeometryShader **ppGeometryShader);\n        \n        void ( STDMETHODCALLTYPE *IAGetPrimitiveTopology )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __out  D3D10_PRIMITIVE_TOPOLOGY *pTopology);\n        \n        void ( STDMETHODCALLTYPE *VSGetShaderResources )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D10ShaderResourceView **ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *VSGetSamplers )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D10SamplerState **ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *GetPredication )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __out_opt  ID3D10Predicate **ppPredicate,\n            /* [annotation] */ \n            __out_opt  BOOL *pPredicateValue);\n        \n        void ( STDMETHODCALLTYPE *GSGetShaderResources )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D10ShaderResourceView **ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *GSGetSamplers )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D10SamplerState **ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *OMGetRenderTargets )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount_opt(NumViews)  ID3D10RenderTargetView **ppRenderTargetViews,\n            /* [annotation] */ \n            __out_opt  ID3D10DepthStencilView **ppDepthStencilView);\n        \n        void ( STDMETHODCALLTYPE *OMGetBlendState )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __out_opt  ID3D10BlendState **ppBlendState,\n            /* [annotation] */ \n            __out_opt  FLOAT BlendFactor[ 4 ],\n            /* [annotation] */ \n            __out_opt  UINT *pSampleMask);\n        \n        void ( STDMETHODCALLTYPE *OMGetDepthStencilState )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __out_opt  ID3D10DepthStencilState **ppDepthStencilState,\n            /* [annotation] */ \n            __out_opt  UINT *pStencilRef);\n        \n        void ( STDMETHODCALLTYPE *SOGetTargets )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_SO_BUFFER_SLOT_COUNT )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  ID3D10Buffer **ppSOTargets,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  UINT *pOffsets);\n        \n        void ( STDMETHODCALLTYPE *RSGetState )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __out  ID3D10RasterizerState **ppRasterizerState);\n        \n        void ( STDMETHODCALLTYPE *RSGetViewports )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __inout /*_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/   UINT *NumViewports,\n            /* [annotation] */ \n            __out_ecount_opt(*NumViewports)  D3D10_VIEWPORT *pViewports);\n        \n        void ( STDMETHODCALLTYPE *RSGetScissorRects )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __inout /*_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/   UINT *NumRects,\n            /* [annotation] */ \n            __out_ecount_opt(*NumRects)  D3D10_RECT *pRects);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( \n            ID3D10Device * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetExceptionMode )( \n            ID3D10Device * This,\n            UINT RaiseFlags);\n        \n        UINT ( STDMETHODCALLTYPE *GetExceptionMode )( \n            ID3D10Device * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *ClearState )( \n            ID3D10Device * This);\n        \n        void ( STDMETHODCALLTYPE *Flush )( \n            ID3D10Device * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateBuffer )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  const D3D10_BUFFER_DESC *pDesc,\n            /* [annotation] */ \n            __in_opt  const D3D10_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out_opt  ID3D10Buffer **ppBuffer);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateTexture1D )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  const D3D10_TEXTURE1D_DESC *pDesc,\n            /* [annotation] */ \n            __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize)  const D3D10_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out  ID3D10Texture1D **ppTexture1D);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateTexture2D )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  const D3D10_TEXTURE2D_DESC *pDesc,\n            /* [annotation] */ \n            __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize)  const D3D10_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out  ID3D10Texture2D **ppTexture2D);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateTexture3D )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  const D3D10_TEXTURE3D_DESC *pDesc,\n            /* [annotation] */ \n            __in_xcount_opt(pDesc->MipLevels)  const D3D10_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out  ID3D10Texture3D **ppTexture3D);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateShaderResourceView )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  ID3D10Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10ShaderResourceView **ppSRView);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateRenderTargetView )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  ID3D10Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D10_RENDER_TARGET_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10RenderTargetView **ppRTView);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateDepthStencilView )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  ID3D10Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10DepthStencilView **ppDepthStencilView);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateInputLayout )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in_ecount(NumElements)  const D3D10_INPUT_ELEMENT_DESC *pInputElementDescs,\n            /* [annotation] */ \n            __in_range( 0, D3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT )  UINT NumElements,\n            /* [annotation] */ \n            __in  const void *pShaderBytecodeWithInputSignature,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __out_opt  ID3D10InputLayout **ppInputLayout);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateVertexShader )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __out_opt  ID3D10VertexShader **ppVertexShader);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateGeometryShader )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __out_opt  ID3D10GeometryShader **ppGeometryShader);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateGeometryShaderWithStreamOutput )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_ecount_opt(NumEntries)  const D3D10_SO_DECLARATION_ENTRY *pSODeclaration,\n            /* [annotation] */ \n            __in_range( 0, D3D10_SO_SINGLE_BUFFER_COMPONENT_LIMIT )  UINT NumEntries,\n            /* [annotation] */ \n            __in  UINT OutputStreamStride,\n            /* [annotation] */ \n            __out_opt  ID3D10GeometryShader **ppGeometryShader);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreatePixelShader )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __out_opt  ID3D10PixelShader **ppPixelShader);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateBlendState )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  const D3D10_BLEND_DESC *pBlendStateDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10BlendState **ppBlendState);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateDepthStencilState )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  const D3D10_DEPTH_STENCIL_DESC *pDepthStencilDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10DepthStencilState **ppDepthStencilState);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateRasterizerState )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  const D3D10_RASTERIZER_DESC *pRasterizerDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10RasterizerState **ppRasterizerState);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateSamplerState )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  const D3D10_SAMPLER_DESC *pSamplerDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10SamplerState **ppSamplerState);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateQuery )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  const D3D10_QUERY_DESC *pQueryDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10Query **ppQuery);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreatePredicate )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  const D3D10_QUERY_DESC *pPredicateDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10Predicate **ppPredicate);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateCounter )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  const D3D10_COUNTER_DESC *pCounterDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10Counter **ppCounter);\n        \n        HRESULT ( STDMETHODCALLTYPE *CheckFormatSupport )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  DXGI_FORMAT Format,\n            /* [annotation] */ \n            __out  UINT *pFormatSupport);\n        \n        HRESULT ( STDMETHODCALLTYPE *CheckMultisampleQualityLevels )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  DXGI_FORMAT Format,\n            /* [annotation] */ \n            __in  UINT SampleCount,\n            /* [annotation] */ \n            __out  UINT *pNumQualityLevels);\n        \n        void ( STDMETHODCALLTYPE *CheckCounterInfo )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __out  D3D10_COUNTER_INFO *pCounterInfo);\n        \n        HRESULT ( STDMETHODCALLTYPE *CheckCounter )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  const D3D10_COUNTER_DESC *pDesc,\n            /* [annotation] */ \n            __out  D3D10_COUNTER_TYPE *pType,\n            /* [annotation] */ \n            __out  UINT *pActiveCounters,\n            /* [annotation] */ \n            __out_ecount_opt(*pNameLength)  LPSTR szName,\n            /* [annotation] */ \n            __inout_opt  UINT *pNameLength,\n            /* [annotation] */ \n            __out_ecount_opt(*pUnitsLength)  LPSTR szUnits,\n            /* [annotation] */ \n            __inout_opt  UINT *pUnitsLength,\n            /* [annotation] */ \n            __out_ecount_opt(*pDescriptionLength)  LPSTR szDescription,\n            /* [annotation] */ \n            __inout_opt  UINT *pDescriptionLength);\n        \n        UINT ( STDMETHODCALLTYPE *GetCreationFlags )( \n            ID3D10Device * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *OpenSharedResource )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  HANDLE hResource,\n            /* [annotation] */ \n            __in  REFIID ReturnedInterface,\n            /* [annotation] */ \n            __out_opt  void **ppResource);\n        \n        void ( STDMETHODCALLTYPE *SetTextFilterSize )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __in  UINT Width,\n            /* [annotation] */ \n            __in  UINT Height);\n        \n        void ( STDMETHODCALLTYPE *GetTextFilterSize )( \n            ID3D10Device * This,\n            /* [annotation] */ \n            __out_opt  UINT *pWidth,\n            /* [annotation] */ \n            __out_opt  UINT *pHeight);\n        \n        END_INTERFACE\n    } ID3D10DeviceVtbl;\n\n    interface ID3D10Device\n    {\n        CONST_VTBL struct ID3D10DeviceVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10Device_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10Device_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10Device_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10Device_VSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> VSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D10Device_PSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> PSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D10Device_PSSetShader(This,pPixelShader)\t\\\n    ( (This)->lpVtbl -> PSSetShader(This,pPixelShader) ) \n\n#define ID3D10Device_PSSetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> PSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D10Device_VSSetShader(This,pVertexShader)\t\\\n    ( (This)->lpVtbl -> VSSetShader(This,pVertexShader) ) \n\n#define ID3D10Device_DrawIndexed(This,IndexCount,StartIndexLocation,BaseVertexLocation)\t\\\n    ( (This)->lpVtbl -> DrawIndexed(This,IndexCount,StartIndexLocation,BaseVertexLocation) ) \n\n#define ID3D10Device_Draw(This,VertexCount,StartVertexLocation)\t\\\n    ( (This)->lpVtbl -> Draw(This,VertexCount,StartVertexLocation) ) \n\n#define ID3D10Device_PSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> PSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D10Device_IASetInputLayout(This,pInputLayout)\t\\\n    ( (This)->lpVtbl -> IASetInputLayout(This,pInputLayout) ) \n\n#define ID3D10Device_IASetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets)\t\\\n    ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) ) \n\n#define ID3D10Device_IASetIndexBuffer(This,pIndexBuffer,Format,Offset)\t\\\n    ( (This)->lpVtbl -> IASetIndexBuffer(This,pIndexBuffer,Format,Offset) ) \n\n#define ID3D10Device_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation)\t\\\n    ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) \n\n#define ID3D10Device_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation)\t\\\n    ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) \n\n#define ID3D10Device_GSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> GSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D10Device_GSSetShader(This,pShader)\t\\\n    ( (This)->lpVtbl -> GSSetShader(This,pShader) ) \n\n#define ID3D10Device_IASetPrimitiveTopology(This,Topology)\t\\\n    ( (This)->lpVtbl -> IASetPrimitiveTopology(This,Topology) ) \n\n#define ID3D10Device_VSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> VSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D10Device_VSSetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> VSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D10Device_SetPredication(This,pPredicate,PredicateValue)\t\\\n    ( (This)->lpVtbl -> SetPredication(This,pPredicate,PredicateValue) ) \n\n#define ID3D10Device_GSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> GSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D10Device_GSSetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> GSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D10Device_OMSetRenderTargets(This,NumViews,ppRenderTargetViews,pDepthStencilView)\t\\\n    ( (This)->lpVtbl -> OMSetRenderTargets(This,NumViews,ppRenderTargetViews,pDepthStencilView) ) \n\n#define ID3D10Device_OMSetBlendState(This,pBlendState,BlendFactor,SampleMask)\t\\\n    ( (This)->lpVtbl -> OMSetBlendState(This,pBlendState,BlendFactor,SampleMask) ) \n\n#define ID3D10Device_OMSetDepthStencilState(This,pDepthStencilState,StencilRef)\t\\\n    ( (This)->lpVtbl -> OMSetDepthStencilState(This,pDepthStencilState,StencilRef) ) \n\n#define ID3D10Device_SOSetTargets(This,NumBuffers,ppSOTargets,pOffsets)\t\\\n    ( (This)->lpVtbl -> SOSetTargets(This,NumBuffers,ppSOTargets,pOffsets) ) \n\n#define ID3D10Device_DrawAuto(This)\t\\\n    ( (This)->lpVtbl -> DrawAuto(This) ) \n\n#define ID3D10Device_RSSetState(This,pRasterizerState)\t\\\n    ( (This)->lpVtbl -> RSSetState(This,pRasterizerState) ) \n\n#define ID3D10Device_RSSetViewports(This,NumViewports,pViewports)\t\\\n    ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) \n\n#define ID3D10Device_RSSetScissorRects(This,NumRects,pRects)\t\\\n    ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) \n\n#define ID3D10Device_CopySubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,DstZ,pSrcResource,SrcSubresource,pSrcBox)\t\\\n    ( (This)->lpVtbl -> CopySubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,DstZ,pSrcResource,SrcSubresource,pSrcBox) ) \n\n#define ID3D10Device_CopyResource(This,pDstResource,pSrcResource)\t\\\n    ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) \n\n#define ID3D10Device_UpdateSubresource(This,pDstResource,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch)\t\\\n    ( (This)->lpVtbl -> UpdateSubresource(This,pDstResource,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) ) \n\n#define ID3D10Device_ClearRenderTargetView(This,pRenderTargetView,ColorRGBA)\t\\\n    ( (This)->lpVtbl -> ClearRenderTargetView(This,pRenderTargetView,ColorRGBA) ) \n\n#define ID3D10Device_ClearDepthStencilView(This,pDepthStencilView,ClearFlags,Depth,Stencil)\t\\\n    ( (This)->lpVtbl -> ClearDepthStencilView(This,pDepthStencilView,ClearFlags,Depth,Stencil) ) \n\n#define ID3D10Device_GenerateMips(This,pShaderResourceView)\t\\\n    ( (This)->lpVtbl -> GenerateMips(This,pShaderResourceView) ) \n\n#define ID3D10Device_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format)\t\\\n    ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) \n\n#define ID3D10Device_VSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> VSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D10Device_PSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> PSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D10Device_PSGetShader(This,ppPixelShader)\t\\\n    ( (This)->lpVtbl -> PSGetShader(This,ppPixelShader) ) \n\n#define ID3D10Device_PSGetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> PSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D10Device_VSGetShader(This,ppVertexShader)\t\\\n    ( (This)->lpVtbl -> VSGetShader(This,ppVertexShader) ) \n\n#define ID3D10Device_PSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> PSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D10Device_IAGetInputLayout(This,ppInputLayout)\t\\\n    ( (This)->lpVtbl -> IAGetInputLayout(This,ppInputLayout) ) \n\n#define ID3D10Device_IAGetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets)\t\\\n    ( (This)->lpVtbl -> IAGetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) ) \n\n#define ID3D10Device_IAGetIndexBuffer(This,pIndexBuffer,Format,Offset)\t\\\n    ( (This)->lpVtbl -> IAGetIndexBuffer(This,pIndexBuffer,Format,Offset) ) \n\n#define ID3D10Device_GSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> GSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D10Device_GSGetShader(This,ppGeometryShader)\t\\\n    ( (This)->lpVtbl -> GSGetShader(This,ppGeometryShader) ) \n\n#define ID3D10Device_IAGetPrimitiveTopology(This,pTopology)\t\\\n    ( (This)->lpVtbl -> IAGetPrimitiveTopology(This,pTopology) ) \n\n#define ID3D10Device_VSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> VSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D10Device_VSGetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> VSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D10Device_GetPredication(This,ppPredicate,pPredicateValue)\t\\\n    ( (This)->lpVtbl -> GetPredication(This,ppPredicate,pPredicateValue) ) \n\n#define ID3D10Device_GSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> GSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D10Device_GSGetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> GSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D10Device_OMGetRenderTargets(This,NumViews,ppRenderTargetViews,ppDepthStencilView)\t\\\n    ( (This)->lpVtbl -> OMGetRenderTargets(This,NumViews,ppRenderTargetViews,ppDepthStencilView) ) \n\n#define ID3D10Device_OMGetBlendState(This,ppBlendState,BlendFactor,pSampleMask)\t\\\n    ( (This)->lpVtbl -> OMGetBlendState(This,ppBlendState,BlendFactor,pSampleMask) ) \n\n#define ID3D10Device_OMGetDepthStencilState(This,ppDepthStencilState,pStencilRef)\t\\\n    ( (This)->lpVtbl -> OMGetDepthStencilState(This,ppDepthStencilState,pStencilRef) ) \n\n#define ID3D10Device_SOGetTargets(This,NumBuffers,ppSOTargets,pOffsets)\t\\\n    ( (This)->lpVtbl -> SOGetTargets(This,NumBuffers,ppSOTargets,pOffsets) ) \n\n#define ID3D10Device_RSGetState(This,ppRasterizerState)\t\\\n    ( (This)->lpVtbl -> RSGetState(This,ppRasterizerState) ) \n\n#define ID3D10Device_RSGetViewports(This,NumViewports,pViewports)\t\\\n    ( (This)->lpVtbl -> RSGetViewports(This,NumViewports,pViewports) ) \n\n#define ID3D10Device_RSGetScissorRects(This,NumRects,pRects)\t\\\n    ( (This)->lpVtbl -> RSGetScissorRects(This,NumRects,pRects) ) \n\n#define ID3D10Device_GetDeviceRemovedReason(This)\t\\\n    ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) \n\n#define ID3D10Device_SetExceptionMode(This,RaiseFlags)\t\\\n    ( (This)->lpVtbl -> SetExceptionMode(This,RaiseFlags) ) \n\n#define ID3D10Device_GetExceptionMode(This)\t\\\n    ( (This)->lpVtbl -> GetExceptionMode(This) ) \n\n#define ID3D10Device_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10Device_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10Device_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n#define ID3D10Device_ClearState(This)\t\\\n    ( (This)->lpVtbl -> ClearState(This) ) \n\n#define ID3D10Device_Flush(This)\t\\\n    ( (This)->lpVtbl -> Flush(This) ) \n\n#define ID3D10Device_CreateBuffer(This,pDesc,pInitialData,ppBuffer)\t\\\n    ( (This)->lpVtbl -> CreateBuffer(This,pDesc,pInitialData,ppBuffer) ) \n\n#define ID3D10Device_CreateTexture1D(This,pDesc,pInitialData,ppTexture1D)\t\\\n    ( (This)->lpVtbl -> CreateTexture1D(This,pDesc,pInitialData,ppTexture1D) ) \n\n#define ID3D10Device_CreateTexture2D(This,pDesc,pInitialData,ppTexture2D)\t\\\n    ( (This)->lpVtbl -> CreateTexture2D(This,pDesc,pInitialData,ppTexture2D) ) \n\n#define ID3D10Device_CreateTexture3D(This,pDesc,pInitialData,ppTexture3D)\t\\\n    ( (This)->lpVtbl -> CreateTexture3D(This,pDesc,pInitialData,ppTexture3D) ) \n\n#define ID3D10Device_CreateShaderResourceView(This,pResource,pDesc,ppSRView)\t\\\n    ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,ppSRView) ) \n\n#define ID3D10Device_CreateRenderTargetView(This,pResource,pDesc,ppRTView)\t\\\n    ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,ppRTView) ) \n\n#define ID3D10Device_CreateDepthStencilView(This,pResource,pDesc,ppDepthStencilView)\t\\\n    ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,ppDepthStencilView) ) \n\n#define ID3D10Device_CreateInputLayout(This,pInputElementDescs,NumElements,pShaderBytecodeWithInputSignature,BytecodeLength,ppInputLayout)\t\\\n    ( (This)->lpVtbl -> CreateInputLayout(This,pInputElementDescs,NumElements,pShaderBytecodeWithInputSignature,BytecodeLength,ppInputLayout) ) \n\n#define ID3D10Device_CreateVertexShader(This,pShaderBytecode,BytecodeLength,ppVertexShader)\t\\\n    ( (This)->lpVtbl -> CreateVertexShader(This,pShaderBytecode,BytecodeLength,ppVertexShader) ) \n\n#define ID3D10Device_CreateGeometryShader(This,pShaderBytecode,BytecodeLength,ppGeometryShader)\t\\\n    ( (This)->lpVtbl -> CreateGeometryShader(This,pShaderBytecode,BytecodeLength,ppGeometryShader) ) \n\n#define ID3D10Device_CreateGeometryShaderWithStreamOutput(This,pShaderBytecode,BytecodeLength,pSODeclaration,NumEntries,OutputStreamStride,ppGeometryShader)\t\\\n    ( (This)->lpVtbl -> CreateGeometryShaderWithStreamOutput(This,pShaderBytecode,BytecodeLength,pSODeclaration,NumEntries,OutputStreamStride,ppGeometryShader) ) \n\n#define ID3D10Device_CreatePixelShader(This,pShaderBytecode,BytecodeLength,ppPixelShader)\t\\\n    ( (This)->lpVtbl -> CreatePixelShader(This,pShaderBytecode,BytecodeLength,ppPixelShader) ) \n\n#define ID3D10Device_CreateBlendState(This,pBlendStateDesc,ppBlendState)\t\\\n    ( (This)->lpVtbl -> CreateBlendState(This,pBlendStateDesc,ppBlendState) ) \n\n#define ID3D10Device_CreateDepthStencilState(This,pDepthStencilDesc,ppDepthStencilState)\t\\\n    ( (This)->lpVtbl -> CreateDepthStencilState(This,pDepthStencilDesc,ppDepthStencilState) ) \n\n#define ID3D10Device_CreateRasterizerState(This,pRasterizerDesc,ppRasterizerState)\t\\\n    ( (This)->lpVtbl -> CreateRasterizerState(This,pRasterizerDesc,ppRasterizerState) ) \n\n#define ID3D10Device_CreateSamplerState(This,pSamplerDesc,ppSamplerState)\t\\\n    ( (This)->lpVtbl -> CreateSamplerState(This,pSamplerDesc,ppSamplerState) ) \n\n#define ID3D10Device_CreateQuery(This,pQueryDesc,ppQuery)\t\\\n    ( (This)->lpVtbl -> CreateQuery(This,pQueryDesc,ppQuery) ) \n\n#define ID3D10Device_CreatePredicate(This,pPredicateDesc,ppPredicate)\t\\\n    ( (This)->lpVtbl -> CreatePredicate(This,pPredicateDesc,ppPredicate) ) \n\n#define ID3D10Device_CreateCounter(This,pCounterDesc,ppCounter)\t\\\n    ( (This)->lpVtbl -> CreateCounter(This,pCounterDesc,ppCounter) ) \n\n#define ID3D10Device_CheckFormatSupport(This,Format,pFormatSupport)\t\\\n    ( (This)->lpVtbl -> CheckFormatSupport(This,Format,pFormatSupport) ) \n\n#define ID3D10Device_CheckMultisampleQualityLevels(This,Format,SampleCount,pNumQualityLevels)\t\\\n    ( (This)->lpVtbl -> CheckMultisampleQualityLevels(This,Format,SampleCount,pNumQualityLevels) ) \n\n#define ID3D10Device_CheckCounterInfo(This,pCounterInfo)\t\\\n    ( (This)->lpVtbl -> CheckCounterInfo(This,pCounterInfo) ) \n\n#define ID3D10Device_CheckCounter(This,pDesc,pType,pActiveCounters,szName,pNameLength,szUnits,pUnitsLength,szDescription,pDescriptionLength)\t\\\n    ( (This)->lpVtbl -> CheckCounter(This,pDesc,pType,pActiveCounters,szName,pNameLength,szUnits,pUnitsLength,szDescription,pDescriptionLength) ) \n\n#define ID3D10Device_GetCreationFlags(This)\t\\\n    ( (This)->lpVtbl -> GetCreationFlags(This) ) \n\n#define ID3D10Device_OpenSharedResource(This,hResource,ReturnedInterface,ppResource)\t\\\n    ( (This)->lpVtbl -> OpenSharedResource(This,hResource,ReturnedInterface,ppResource) ) \n\n#define ID3D10Device_SetTextFilterSize(This,Width,Height)\t\\\n    ( (This)->lpVtbl -> SetTextFilterSize(This,Width,Height) ) \n\n#define ID3D10Device_GetTextFilterSize(This,pWidth,pHeight)\t\\\n    ( (This)->lpVtbl -> GetTextFilterSize(This,pWidth,pHeight) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10Device_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D10Multithread_INTERFACE_DEFINED__\n#define __ID3D10Multithread_INTERFACE_DEFINED__\n\n/* interface ID3D10Multithread */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10Multithread;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4E00-342C-4106-A19F-4F2704F689F0\")\n    ID3D10Multithread : public IUnknown\n    {\n    public:\n        virtual void STDMETHODCALLTYPE Enter( void) = 0;\n        \n        virtual void STDMETHODCALLTYPE Leave( void) = 0;\n        \n        virtual BOOL STDMETHODCALLTYPE SetMultithreadProtected( \n            /* [annotation] */ \n            __in  BOOL bMTProtect) = 0;\n        \n        virtual BOOL STDMETHODCALLTYPE GetMultithreadProtected( void) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10MultithreadVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10Multithread * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10Multithread * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10Multithread * This);\n        \n        void ( STDMETHODCALLTYPE *Enter )( \n            ID3D10Multithread * This);\n        \n        void ( STDMETHODCALLTYPE *Leave )( \n            ID3D10Multithread * This);\n        \n        BOOL ( STDMETHODCALLTYPE *SetMultithreadProtected )( \n            ID3D10Multithread * This,\n            /* [annotation] */ \n            __in  BOOL bMTProtect);\n        \n        BOOL ( STDMETHODCALLTYPE *GetMultithreadProtected )( \n            ID3D10Multithread * This);\n        \n        END_INTERFACE\n    } ID3D10MultithreadVtbl;\n\n    interface ID3D10Multithread\n    {\n        CONST_VTBL struct ID3D10MultithreadVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10Multithread_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10Multithread_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10Multithread_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10Multithread_Enter(This)\t\\\n    ( (This)->lpVtbl -> Enter(This) ) \n\n#define ID3D10Multithread_Leave(This)\t\\\n    ( (This)->lpVtbl -> Leave(This) ) \n\n#define ID3D10Multithread_SetMultithreadProtected(This,bMTProtect)\t\\\n    ( (This)->lpVtbl -> SetMultithreadProtected(This,bMTProtect) ) \n\n#define ID3D10Multithread_GetMultithreadProtected(This)\t\\\n    ( (This)->lpVtbl -> GetMultithreadProtected(This) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10Multithread_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_0000_0024 */\n/* [local] */ \n\ntypedef \nenum D3D10_CREATE_DEVICE_FLAG\n    {\tD3D10_CREATE_DEVICE_SINGLETHREADED\t= 0x1,\n\tD3D10_CREATE_DEVICE_DEBUG\t= 0x2,\n\tD3D10_CREATE_DEVICE_SWITCH_TO_REF\t= 0x4,\n\tD3D10_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS\t= 0x8,\n\tD3D10_CREATE_DEVICE_ALLOW_NULL_FROM_MAP\t= 0x10,\n\tD3D10_CREATE_DEVICE_BGRA_SUPPORT\t= 0x20,\n\tD3D10_CREATE_DEVICE_STRICT_VALIDATION\t= 0x200\n    } \tD3D10_CREATE_DEVICE_FLAG;\n\n\n#define\tD3D10_SDK_VERSION\t( 29 )\n\n#if !defined( D3D10_IGNORE_SDK_LAYERS ) \n#include \"d3d10sdklayers.h\" \n#endif \n#include \"d3d10misc.h\" \n#include \"d3d10shader.h\" \n#include \"d3d10effect.h\" \nDEFINE_GUID(IID_ID3D10DeviceChild,0x9B7E4C00,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10DepthStencilState,0x2B4B1CC8,0xA4AD,0x41f8,0x83,0x22,0xCA,0x86,0xFC,0x3E,0xC6,0x75);\nDEFINE_GUID(IID_ID3D10BlendState,0xEDAD8D19,0x8A35,0x4d6d,0x85,0x66,0x2E,0xA2,0x76,0xCD,0xE1,0x61);\nDEFINE_GUID(IID_ID3D10RasterizerState,0xA2A07292,0x89AF,0x4345,0xBE,0x2E,0xC5,0x3D,0x9F,0xBB,0x6E,0x9F);\nDEFINE_GUID(IID_ID3D10Resource,0x9B7E4C01,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10Buffer,0x9B7E4C02,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10Texture1D,0x9B7E4C03,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10Texture2D,0x9B7E4C04,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10Texture3D,0x9B7E4C05,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10View,0xC902B03F,0x60A7,0x49BA,0x99,0x36,0x2A,0x3A,0xB3,0x7A,0x7E,0x33);\nDEFINE_GUID(IID_ID3D10ShaderResourceView,0x9B7E4C07,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10RenderTargetView,0x9B7E4C08,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10DepthStencilView,0x9B7E4C09,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10VertexShader,0x9B7E4C0A,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10GeometryShader,0x6316BE88,0x54CD,0x4040,0xAB,0x44,0x20,0x46,0x1B,0xC8,0x1F,0x68);\nDEFINE_GUID(IID_ID3D10PixelShader,0x4968B601,0x9D00,0x4cde,0x83,0x46,0x8E,0x7F,0x67,0x58,0x19,0xB6);\nDEFINE_GUID(IID_ID3D10InputLayout,0x9B7E4C0B,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10SamplerState,0x9B7E4C0C,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10Asynchronous,0x9B7E4C0D,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10Query,0x9B7E4C0E,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10Predicate,0x9B7E4C10,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10Counter,0x9B7E4C11,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10Device,0x9B7E4C0F,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10Multithread,0x9B7E4E00,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0024_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_0000_0024_v0_0_s_ifspec;\n\n/* Additional Prototypes for ALL interfaces */\n\n/* end of Additional Prototypes */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n\n"
  },
  {
    "path": "Include/D3D10_1.h",
    "content": "\n\n/* this ALWAYS GENERATED file contains the definitions for the interfaces */\n\n\n /* File created by MIDL compiler version 7.00.0555 */\n/* @@MIDL_FILE_HEADING(  ) */\n\n#pragma warning( disable: 4049 )  /* more than 64k source lines */\n\n\n/* verify that the <rpcndr.h> version is high enough to compile this file*/\n#ifndef __REQUIRED_RPCNDR_H_VERSION__\n#define __REQUIRED_RPCNDR_H_VERSION__ 475\n#endif\n\n/* verify that the <rpcsal.h> version is high enough to compile this file*/\n#ifndef __REQUIRED_RPCSAL_H_VERSION__\n#define __REQUIRED_RPCSAL_H_VERSION__ 100\n#endif\n\n#include \"rpc.h\"\n#include \"rpcndr.h\"\n\n#ifndef __RPCNDR_H_VERSION__\n#error this stub requires an updated version of <rpcndr.h>\n#endif // __RPCNDR_H_VERSION__\n\n#ifndef COM_NO_WINDOWS_H\n#include \"windows.h\"\n#include \"ole2.h\"\n#endif /*COM_NO_WINDOWS_H*/\n\n#ifndef __d3d10_1_h__\n#define __d3d10_1_h__\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n#pragma once\n#endif\n\n/* Forward Declarations */ \n\n#ifndef __ID3D10BlendState1_FWD_DEFINED__\n#define __ID3D10BlendState1_FWD_DEFINED__\ntypedef interface ID3D10BlendState1 ID3D10BlendState1;\n#endif \t/* __ID3D10BlendState1_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10ShaderResourceView1_FWD_DEFINED__\n#define __ID3D10ShaderResourceView1_FWD_DEFINED__\ntypedef interface ID3D10ShaderResourceView1 ID3D10ShaderResourceView1;\n#endif \t/* __ID3D10ShaderResourceView1_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10Device1_FWD_DEFINED__\n#define __ID3D10Device1_FWD_DEFINED__\ntypedef interface ID3D10Device1 ID3D10Device1;\n#endif \t/* __ID3D10Device1_FWD_DEFINED__ */\n\n\n/* header files for imported files */\n#include \"oaidl.h\"\n#include \"ocidl.h\"\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif \n\n\n/* interface __MIDL_itf_d3d10_1_0000_0000 */\n/* [local] */ \n\n#if defined( __d3d10_h__ ) && !defined( D3D10_ARBITRARY_HEADER_ORDERING )\n#error d3d10.h is included before d3d10_1.h, and it will confuse tools that honor SAL annotations. \\\nIf possibly targeting d3d10.1, include d3d10_1.h instead of d3d10.h, or ensure d3d10_1.h is included before d3d10.h\n#endif\n#ifndef _D3D10_1_CONSTANTS\n#define _D3D10_1_CONSTANTS\n#define\tD3D10_1_DEFAULT_SAMPLE_MASK\t( 0xffffffff )\n\n#define D3D10_1_FLOAT16_FUSED_TOLERANCE_IN_ULP\t( 0.6 )\n#define D3D10_1_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP\t( 0.6f )\n#define\tD3D10_1_GS_INPUT_REGISTER_COUNT\t( 32 )\n\n#define\tD3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT\t( 32 )\n\n#define\tD3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS\t( 128 )\n\n#define\tD3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT\t( 32 )\n\n#define\tD3D10_1_PS_OUTPUT_MASK_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D10_1_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D10_1_PS_OUTPUT_MASK_REGISTER_COUNT\t( 1 )\n\n#define\tD3D10_1_SHADER_MAJOR_VERSION\t( 4 )\n\n#define\tD3D10_1_SHADER_MINOR_VERSION\t( 1 )\n\n#define\tD3D10_1_SO_BUFFER_MAX_STRIDE_IN_BYTES\t( 2048 )\n\n#define\tD3D10_1_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES\t( 256 )\n\n#define\tD3D10_1_SO_BUFFER_SLOT_COUNT\t( 4 )\n\n#define\tD3D10_1_SO_MULTIPLE_BUFFER_ELEMENTS_PER_BUFFER\t( 1 )\n\n#define\tD3D10_1_SO_SINGLE_BUFFER_COMPONENT_LIMIT\t( 64 )\n\n#define\tD3D10_1_STANDARD_VERTEX_ELEMENT_COUNT\t( 32 )\n\n#define\tD3D10_1_SUBPIXEL_FRACTIONAL_BIT_COUNT\t( 8 )\n\n#define\tD3D10_1_VS_INPUT_REGISTER_COUNT\t( 32 )\n\n#define\tD3D10_1_VS_OUTPUT_REGISTER_COUNT\t( 32 )\n\n#endif\n#include \"d3d10.h\" //\n\ntypedef \nenum D3D10_FEATURE_LEVEL1\n    {\tD3D10_FEATURE_LEVEL_10_0\t= 0xa000,\n\tD3D10_FEATURE_LEVEL_10_1\t= 0xa100,\n\tD3D10_FEATURE_LEVEL_9_1\t= 0x9100,\n\tD3D10_FEATURE_LEVEL_9_2\t= 0x9200,\n\tD3D10_FEATURE_LEVEL_9_3\t= 0x9300\n    } \tD3D10_FEATURE_LEVEL1;\n\ntypedef struct D3D10_RENDER_TARGET_BLEND_DESC1\n    {\n    BOOL BlendEnable;\n    D3D10_BLEND SrcBlend;\n    D3D10_BLEND DestBlend;\n    D3D10_BLEND_OP BlendOp;\n    D3D10_BLEND SrcBlendAlpha;\n    D3D10_BLEND DestBlendAlpha;\n    D3D10_BLEND_OP BlendOpAlpha;\n    UINT8 RenderTargetWriteMask;\n    } \tD3D10_RENDER_TARGET_BLEND_DESC1;\n\ntypedef struct D3D10_BLEND_DESC1\n    {\n    BOOL AlphaToCoverageEnable;\n    BOOL IndependentBlendEnable;\n    D3D10_RENDER_TARGET_BLEND_DESC1 RenderTarget[ 8 ];\n    } \tD3D10_BLEND_DESC1;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_1_0000_0000_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_1_0000_0000_v0_0_s_ifspec;\n\n#ifndef __ID3D10BlendState1_INTERFACE_DEFINED__\n#define __ID3D10BlendState1_INTERFACE_DEFINED__\n\n/* interface ID3D10BlendState1 */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10BlendState1;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"EDAD8D99-8A35-4d6d-8566-2EA276CDE161\")\n    ID3D10BlendState1 : public ID3D10BlendState\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc1( \n            /* [annotation] */ \n            __out  D3D10_BLEND_DESC1 *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10BlendState1Vtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10BlendState1 * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10BlendState1 * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10BlendState1 * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10BlendState1 * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10BlendState1 * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10BlendState1 * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10BlendState1 * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D10BlendState1 * This,\n            /* [annotation] */ \n            __out  D3D10_BLEND_DESC *pDesc);\n        \n        void ( STDMETHODCALLTYPE *GetDesc1 )( \n            ID3D10BlendState1 * This,\n            /* [annotation] */ \n            __out  D3D10_BLEND_DESC1 *pDesc);\n        \n        END_INTERFACE\n    } ID3D10BlendState1Vtbl;\n\n    interface ID3D10BlendState1\n    {\n        CONST_VTBL struct ID3D10BlendState1Vtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10BlendState1_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10BlendState1_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10BlendState1_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10BlendState1_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10BlendState1_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10BlendState1_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10BlendState1_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10BlendState1_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n\n#define ID3D10BlendState1_GetDesc1(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc1(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10BlendState1_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_1_0000_0001 */\n/* [local] */ \n\ntypedef struct D3D10_TEXCUBE_ARRAY_SRV1\n    {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT First2DArrayFace;\n    UINT NumCubes;\n    } \tD3D10_TEXCUBE_ARRAY_SRV1;\n\ntypedef D3D_SRV_DIMENSION D3D10_SRV_DIMENSION1;\n\ntypedef struct D3D10_SHADER_RESOURCE_VIEW_DESC1\n    {\n    DXGI_FORMAT Format;\n    D3D10_SRV_DIMENSION1 ViewDimension;\n    union \n        {\n        D3D10_BUFFER_SRV Buffer;\n        D3D10_TEX1D_SRV Texture1D;\n        D3D10_TEX1D_ARRAY_SRV Texture1DArray;\n        D3D10_TEX2D_SRV Texture2D;\n        D3D10_TEX2D_ARRAY_SRV Texture2DArray;\n        D3D10_TEX2DMS_SRV Texture2DMS;\n        D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray;\n        D3D10_TEX3D_SRV Texture3D;\n        D3D10_TEXCUBE_SRV TextureCube;\n        D3D10_TEXCUBE_ARRAY_SRV1 TextureCubeArray;\n        } \t;\n    } \tD3D10_SHADER_RESOURCE_VIEW_DESC1;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_1_0000_0001_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_1_0000_0001_v0_0_s_ifspec;\n\n#ifndef __ID3D10ShaderResourceView1_INTERFACE_DEFINED__\n#define __ID3D10ShaderResourceView1_INTERFACE_DEFINED__\n\n/* interface ID3D10ShaderResourceView1 */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10ShaderResourceView1;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C87-342C-4106-A19F-4F2704F689F0\")\n    ID3D10ShaderResourceView1 : public ID3D10ShaderResourceView\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc1( \n            /* [annotation] */ \n            __out  D3D10_SHADER_RESOURCE_VIEW_DESC1 *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10ShaderResourceView1Vtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10ShaderResourceView1 * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10ShaderResourceView1 * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10ShaderResourceView1 * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D10ShaderResourceView1 * This,\n            /* [annotation] */ \n            __out  ID3D10Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10ShaderResourceView1 * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10ShaderResourceView1 * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10ShaderResourceView1 * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetResource )( \n            ID3D10ShaderResourceView1 * This,\n            /* [annotation] */ \n            __out  ID3D10Resource **ppResource);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D10ShaderResourceView1 * This,\n            /* [annotation] */ \n            __out  D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc);\n        \n        void ( STDMETHODCALLTYPE *GetDesc1 )( \n            ID3D10ShaderResourceView1 * This,\n            /* [annotation] */ \n            __out  D3D10_SHADER_RESOURCE_VIEW_DESC1 *pDesc);\n        \n        END_INTERFACE\n    } ID3D10ShaderResourceView1Vtbl;\n\n    interface ID3D10ShaderResourceView1\n    {\n        CONST_VTBL struct ID3D10ShaderResourceView1Vtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10ShaderResourceView1_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10ShaderResourceView1_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10ShaderResourceView1_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10ShaderResourceView1_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D10ShaderResourceView1_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10ShaderResourceView1_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10ShaderResourceView1_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D10ShaderResourceView1_GetResource(This,ppResource)\t\\\n    ( (This)->lpVtbl -> GetResource(This,ppResource) ) \n\n\n#define ID3D10ShaderResourceView1_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n\n#define ID3D10ShaderResourceView1_GetDesc1(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc1(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10ShaderResourceView1_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_1_0000_0002 */\n/* [local] */ \n\ntypedef \nenum D3D10_STANDARD_MULTISAMPLE_QUALITY_LEVELS\n    {\tD3D10_STANDARD_MULTISAMPLE_PATTERN\t= 0xffffffff,\n\tD3D10_CENTER_MULTISAMPLE_PATTERN\t= 0xfffffffe\n    } \tD3D10_STANDARD_MULTISAMPLE_QUALITY_LEVELS;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_1_0000_0002_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_1_0000_0002_v0_0_s_ifspec;\n\n#ifndef __ID3D10Device1_INTERFACE_DEFINED__\n#define __ID3D10Device1_INTERFACE_DEFINED__\n\n/* interface ID3D10Device1 */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10Device1;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4C8F-342C-4106-A19F-4F2704F689F0\")\n    ID3D10Device1 : public ID3D10Device\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE CreateShaderResourceView1( \n            /* [annotation] */ \n            __in  ID3D10Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D10_SHADER_RESOURCE_VIEW_DESC1 *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10ShaderResourceView1 **ppSRView) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateBlendState1( \n            /* [annotation] */ \n            __in  const D3D10_BLEND_DESC1 *pBlendStateDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10BlendState1 **ppBlendState) = 0;\n        \n        virtual D3D10_FEATURE_LEVEL1 STDMETHODCALLTYPE GetFeatureLevel( void) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10Device1Vtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10Device1 * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10Device1 * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10Device1 * This);\n        \n        void ( STDMETHODCALLTYPE *VSSetConstantBuffers )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D10Buffer *const *ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *PSSetShaderResources )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D10ShaderResourceView *const *ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *PSSetShader )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_opt  ID3D10PixelShader *pPixelShader);\n        \n        void ( STDMETHODCALLTYPE *PSSetSamplers )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D10SamplerState *const *ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *VSSetShader )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_opt  ID3D10VertexShader *pVertexShader);\n        \n        void ( STDMETHODCALLTYPE *DrawIndexed )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  UINT IndexCount,\n            /* [annotation] */ \n            __in  UINT StartIndexLocation,\n            /* [annotation] */ \n            __in  INT BaseVertexLocation);\n        \n        void ( STDMETHODCALLTYPE *Draw )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  UINT VertexCount,\n            /* [annotation] */ \n            __in  UINT StartVertexLocation);\n        \n        void ( STDMETHODCALLTYPE *PSSetConstantBuffers )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D10Buffer *const *ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *IASetInputLayout )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_opt  ID3D10InputLayout *pInputLayout);\n        \n        void ( STDMETHODCALLTYPE *IASetVertexBuffers )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D10Buffer *const *ppVertexBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  const UINT *pStrides,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  const UINT *pOffsets);\n        \n        void ( STDMETHODCALLTYPE *IASetIndexBuffer )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_opt  ID3D10Buffer *pIndexBuffer,\n            /* [annotation] */ \n            __in  DXGI_FORMAT Format,\n            /* [annotation] */ \n            __in  UINT Offset);\n        \n        void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  UINT IndexCountPerInstance,\n            /* [annotation] */ \n            __in  UINT InstanceCount,\n            /* [annotation] */ \n            __in  UINT StartIndexLocation,\n            /* [annotation] */ \n            __in  INT BaseVertexLocation,\n            /* [annotation] */ \n            __in  UINT StartInstanceLocation);\n        \n        void ( STDMETHODCALLTYPE *DrawInstanced )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  UINT VertexCountPerInstance,\n            /* [annotation] */ \n            __in  UINT InstanceCount,\n            /* [annotation] */ \n            __in  UINT StartVertexLocation,\n            /* [annotation] */ \n            __in  UINT StartInstanceLocation);\n        \n        void ( STDMETHODCALLTYPE *GSSetConstantBuffers )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D10Buffer *const *ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *GSSetShader )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_opt  ID3D10GeometryShader *pShader);\n        \n        void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  D3D10_PRIMITIVE_TOPOLOGY Topology);\n        \n        void ( STDMETHODCALLTYPE *VSSetShaderResources )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D10ShaderResourceView *const *ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *VSSetSamplers )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D10SamplerState *const *ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *SetPredication )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_opt  ID3D10Predicate *pPredicate,\n            /* [annotation] */ \n            __in  BOOL PredicateValue);\n        \n        void ( STDMETHODCALLTYPE *GSSetShaderResources )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D10ShaderResourceView *const *ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *GSSetSamplers )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D10SamplerState *const *ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *OMSetRenderTargets )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount_opt(NumViews)  ID3D10RenderTargetView *const *ppRenderTargetViews,\n            /* [annotation] */ \n            __in_opt  ID3D10DepthStencilView *pDepthStencilView);\n        \n        void ( STDMETHODCALLTYPE *OMSetBlendState )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_opt  ID3D10BlendState *pBlendState,\n            /* [annotation] */ \n            __in  const FLOAT BlendFactor[ 4 ],\n            /* [annotation] */ \n            __in  UINT SampleMask);\n        \n        void ( STDMETHODCALLTYPE *OMSetDepthStencilState )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_opt  ID3D10DepthStencilState *pDepthStencilState,\n            /* [annotation] */ \n            __in  UINT StencilRef);\n        \n        void ( STDMETHODCALLTYPE *SOSetTargets )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_SO_BUFFER_SLOT_COUNT)  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount_opt(NumBuffers)  ID3D10Buffer *const *ppSOTargets,\n            /* [annotation] */ \n            __in_ecount_opt(NumBuffers)  const UINT *pOffsets);\n        \n        void ( STDMETHODCALLTYPE *DrawAuto )( \n            ID3D10Device1 * This);\n        \n        void ( STDMETHODCALLTYPE *RSSetState )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_opt  ID3D10RasterizerState *pRasterizerState);\n        \n        void ( STDMETHODCALLTYPE *RSSetViewports )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,\n            /* [annotation] */ \n            __in_ecount_opt(NumViewports)  const D3D10_VIEWPORT *pViewports);\n        \n        void ( STDMETHODCALLTYPE *RSSetScissorRects )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,\n            /* [annotation] */ \n            __in_ecount_opt(NumRects)  const D3D10_RECT *pRects);\n        \n        void ( STDMETHODCALLTYPE *CopySubresourceRegion )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  ID3D10Resource *pDstResource,\n            /* [annotation] */ \n            __in  UINT DstSubresource,\n            /* [annotation] */ \n            __in  UINT DstX,\n            /* [annotation] */ \n            __in  UINT DstY,\n            /* [annotation] */ \n            __in  UINT DstZ,\n            /* [annotation] */ \n            __in  ID3D10Resource *pSrcResource,\n            /* [annotation] */ \n            __in  UINT SrcSubresource,\n            /* [annotation] */ \n            __in_opt  const D3D10_BOX *pSrcBox);\n        \n        void ( STDMETHODCALLTYPE *CopyResource )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  ID3D10Resource *pDstResource,\n            /* [annotation] */ \n            __in  ID3D10Resource *pSrcResource);\n        \n        void ( STDMETHODCALLTYPE *UpdateSubresource )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  ID3D10Resource *pDstResource,\n            /* [annotation] */ \n            __in  UINT DstSubresource,\n            /* [annotation] */ \n            __in_opt  const D3D10_BOX *pDstBox,\n            /* [annotation] */ \n            __in  const void *pSrcData,\n            /* [annotation] */ \n            __in  UINT SrcRowPitch,\n            /* [annotation] */ \n            __in  UINT SrcDepthPitch);\n        \n        void ( STDMETHODCALLTYPE *ClearRenderTargetView )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  ID3D10RenderTargetView *pRenderTargetView,\n            /* [annotation] */ \n            __in  const FLOAT ColorRGBA[ 4 ]);\n        \n        void ( STDMETHODCALLTYPE *ClearDepthStencilView )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  ID3D10DepthStencilView *pDepthStencilView,\n            /* [annotation] */ \n            __in  UINT ClearFlags,\n            /* [annotation] */ \n            __in  FLOAT Depth,\n            /* [annotation] */ \n            __in  UINT8 Stencil);\n        \n        void ( STDMETHODCALLTYPE *GenerateMips )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  ID3D10ShaderResourceView *pShaderResourceView);\n        \n        void ( STDMETHODCALLTYPE *ResolveSubresource )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  ID3D10Resource *pDstResource,\n            /* [annotation] */ \n            __in  UINT DstSubresource,\n            /* [annotation] */ \n            __in  ID3D10Resource *pSrcResource,\n            /* [annotation] */ \n            __in  UINT SrcSubresource,\n            /* [annotation] */ \n            __in  DXGI_FORMAT Format);\n        \n        void ( STDMETHODCALLTYPE *VSGetConstantBuffers )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D10Buffer **ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *PSGetShaderResources )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D10ShaderResourceView **ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *PSGetShader )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __out  ID3D10PixelShader **ppPixelShader);\n        \n        void ( STDMETHODCALLTYPE *PSGetSamplers )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D10SamplerState **ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *VSGetShader )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __out  ID3D10VertexShader **ppVertexShader);\n        \n        void ( STDMETHODCALLTYPE *PSGetConstantBuffers )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D10Buffer **ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *IAGetInputLayout )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __out  ID3D10InputLayout **ppInputLayout);\n        \n        void ( STDMETHODCALLTYPE *IAGetVertexBuffers )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_1_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  ID3D10Buffer **ppVertexBuffers,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  UINT *pStrides,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  UINT *pOffsets);\n        \n        void ( STDMETHODCALLTYPE *IAGetIndexBuffer )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __out_opt  ID3D10Buffer **pIndexBuffer,\n            /* [annotation] */ \n            __out_opt  DXGI_FORMAT *Format,\n            /* [annotation] */ \n            __out_opt  UINT *Offset);\n        \n        void ( STDMETHODCALLTYPE *GSGetConstantBuffers )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D10Buffer **ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *GSGetShader )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __out  ID3D10GeometryShader **ppGeometryShader);\n        \n        void ( STDMETHODCALLTYPE *IAGetPrimitiveTopology )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __out  D3D10_PRIMITIVE_TOPOLOGY *pTopology);\n        \n        void ( STDMETHODCALLTYPE *VSGetShaderResources )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D10ShaderResourceView **ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *VSGetSamplers )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D10SamplerState **ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *GetPredication )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __out_opt  ID3D10Predicate **ppPredicate,\n            /* [annotation] */ \n            __out_opt  BOOL *pPredicateValue);\n        \n        void ( STDMETHODCALLTYPE *GSGetShaderResources )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D10ShaderResourceView **ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *GSGetSamplers )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D10SamplerState **ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *OMGetRenderTargets )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount_opt(NumViews)  ID3D10RenderTargetView **ppRenderTargetViews,\n            /* [annotation] */ \n            __out_opt  ID3D10DepthStencilView **ppDepthStencilView);\n        \n        void ( STDMETHODCALLTYPE *OMGetBlendState )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __out_opt  ID3D10BlendState **ppBlendState,\n            /* [annotation] */ \n            __out_opt  FLOAT BlendFactor[ 4 ],\n            /* [annotation] */ \n            __out_opt  UINT *pSampleMask);\n        \n        void ( STDMETHODCALLTYPE *OMGetDepthStencilState )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __out_opt  ID3D10DepthStencilState **ppDepthStencilState,\n            /* [annotation] */ \n            __out_opt  UINT *pStencilRef);\n        \n        void ( STDMETHODCALLTYPE *SOGetTargets )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_range( 0, D3D10_SO_BUFFER_SLOT_COUNT )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  ID3D10Buffer **ppSOTargets,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  UINT *pOffsets);\n        \n        void ( STDMETHODCALLTYPE *RSGetState )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __out  ID3D10RasterizerState **ppRasterizerState);\n        \n        void ( STDMETHODCALLTYPE *RSGetViewports )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __inout /*_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/   UINT *NumViewports,\n            /* [annotation] */ \n            __out_ecount_opt(*NumViewports)  D3D10_VIEWPORT *pViewports);\n        \n        void ( STDMETHODCALLTYPE *RSGetScissorRects )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __inout /*_range(0, D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/   UINT *NumRects,\n            /* [annotation] */ \n            __out_ecount_opt(*NumRects)  D3D10_RECT *pRects);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( \n            ID3D10Device1 * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetExceptionMode )( \n            ID3D10Device1 * This,\n            UINT RaiseFlags);\n        \n        UINT ( STDMETHODCALLTYPE *GetExceptionMode )( \n            ID3D10Device1 * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *ClearState )( \n            ID3D10Device1 * This);\n        \n        void ( STDMETHODCALLTYPE *Flush )( \n            ID3D10Device1 * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateBuffer )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const D3D10_BUFFER_DESC *pDesc,\n            /* [annotation] */ \n            __in_opt  const D3D10_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out_opt  ID3D10Buffer **ppBuffer);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateTexture1D )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const D3D10_TEXTURE1D_DESC *pDesc,\n            /* [annotation] */ \n            __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize)  const D3D10_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out  ID3D10Texture1D **ppTexture1D);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateTexture2D )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const D3D10_TEXTURE2D_DESC *pDesc,\n            /* [annotation] */ \n            __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize)  const D3D10_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out  ID3D10Texture2D **ppTexture2D);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateTexture3D )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const D3D10_TEXTURE3D_DESC *pDesc,\n            /* [annotation] */ \n            __in_xcount_opt(pDesc->MipLevels)  const D3D10_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out  ID3D10Texture3D **ppTexture3D);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateShaderResourceView )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  ID3D10Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10ShaderResourceView **ppSRView);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateRenderTargetView )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  ID3D10Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D10_RENDER_TARGET_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10RenderTargetView **ppRTView);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateDepthStencilView )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  ID3D10Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10DepthStencilView **ppDepthStencilView);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateInputLayout )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in_ecount(NumElements)  const D3D10_INPUT_ELEMENT_DESC *pInputElementDescs,\n            /* [annotation] */ \n            __in_range( 0, D3D10_1_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT )  UINT NumElements,\n            /* [annotation] */ \n            __in  const void *pShaderBytecodeWithInputSignature,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __out_opt  ID3D10InputLayout **ppInputLayout);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateVertexShader )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __out_opt  ID3D10VertexShader **ppVertexShader);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateGeometryShader )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __out_opt  ID3D10GeometryShader **ppGeometryShader);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateGeometryShaderWithStreamOutput )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_ecount_opt(NumEntries)  const D3D10_SO_DECLARATION_ENTRY *pSODeclaration,\n            /* [annotation] */ \n            __in_range( 0, D3D10_SO_SINGLE_BUFFER_COMPONENT_LIMIT )  UINT NumEntries,\n            /* [annotation] */ \n            __in  UINT OutputStreamStride,\n            /* [annotation] */ \n            __out_opt  ID3D10GeometryShader **ppGeometryShader);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreatePixelShader )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __out_opt  ID3D10PixelShader **ppPixelShader);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateBlendState )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const D3D10_BLEND_DESC *pBlendStateDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10BlendState **ppBlendState);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateDepthStencilState )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const D3D10_DEPTH_STENCIL_DESC *pDepthStencilDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10DepthStencilState **ppDepthStencilState);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateRasterizerState )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const D3D10_RASTERIZER_DESC *pRasterizerDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10RasterizerState **ppRasterizerState);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateSamplerState )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const D3D10_SAMPLER_DESC *pSamplerDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10SamplerState **ppSamplerState);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateQuery )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const D3D10_QUERY_DESC *pQueryDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10Query **ppQuery);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreatePredicate )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const D3D10_QUERY_DESC *pPredicateDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10Predicate **ppPredicate);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateCounter )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const D3D10_COUNTER_DESC *pCounterDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10Counter **ppCounter);\n        \n        HRESULT ( STDMETHODCALLTYPE *CheckFormatSupport )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  DXGI_FORMAT Format,\n            /* [annotation] */ \n            __out  UINT *pFormatSupport);\n        \n        HRESULT ( STDMETHODCALLTYPE *CheckMultisampleQualityLevels )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  DXGI_FORMAT Format,\n            /* [annotation] */ \n            __in  UINT SampleCount,\n            /* [annotation] */ \n            __out  UINT *pNumQualityLevels);\n        \n        void ( STDMETHODCALLTYPE *CheckCounterInfo )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __out  D3D10_COUNTER_INFO *pCounterInfo);\n        \n        HRESULT ( STDMETHODCALLTYPE *CheckCounter )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const D3D10_COUNTER_DESC *pDesc,\n            /* [annotation] */ \n            __out  D3D10_COUNTER_TYPE *pType,\n            /* [annotation] */ \n            __out  UINT *pActiveCounters,\n            /* [annotation] */ \n            __out_ecount_opt(*pNameLength)  LPSTR szName,\n            /* [annotation] */ \n            __inout_opt  UINT *pNameLength,\n            /* [annotation] */ \n            __out_ecount_opt(*pUnitsLength)  LPSTR szUnits,\n            /* [annotation] */ \n            __inout_opt  UINT *pUnitsLength,\n            /* [annotation] */ \n            __out_ecount_opt(*pDescriptionLength)  LPSTR szDescription,\n            /* [annotation] */ \n            __inout_opt  UINT *pDescriptionLength);\n        \n        UINT ( STDMETHODCALLTYPE *GetCreationFlags )( \n            ID3D10Device1 * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *OpenSharedResource )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  HANDLE hResource,\n            /* [annotation] */ \n            __in  REFIID ReturnedInterface,\n            /* [annotation] */ \n            __out_opt  void **ppResource);\n        \n        void ( STDMETHODCALLTYPE *SetTextFilterSize )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  UINT Width,\n            /* [annotation] */ \n            __in  UINT Height);\n        \n        void ( STDMETHODCALLTYPE *GetTextFilterSize )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __out_opt  UINT *pWidth,\n            /* [annotation] */ \n            __out_opt  UINT *pHeight);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateShaderResourceView1 )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  ID3D10Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D10_SHADER_RESOURCE_VIEW_DESC1 *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10ShaderResourceView1 **ppSRView);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateBlendState1 )( \n            ID3D10Device1 * This,\n            /* [annotation] */ \n            __in  const D3D10_BLEND_DESC1 *pBlendStateDesc,\n            /* [annotation] */ \n            __out_opt  ID3D10BlendState1 **ppBlendState);\n        \n        D3D10_FEATURE_LEVEL1 ( STDMETHODCALLTYPE *GetFeatureLevel )( \n            ID3D10Device1 * This);\n        \n        END_INTERFACE\n    } ID3D10Device1Vtbl;\n\n    interface ID3D10Device1\n    {\n        CONST_VTBL struct ID3D10Device1Vtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10Device1_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10Device1_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10Device1_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10Device1_VSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> VSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D10Device1_PSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> PSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D10Device1_PSSetShader(This,pPixelShader)\t\\\n    ( (This)->lpVtbl -> PSSetShader(This,pPixelShader) ) \n\n#define ID3D10Device1_PSSetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> PSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D10Device1_VSSetShader(This,pVertexShader)\t\\\n    ( (This)->lpVtbl -> VSSetShader(This,pVertexShader) ) \n\n#define ID3D10Device1_DrawIndexed(This,IndexCount,StartIndexLocation,BaseVertexLocation)\t\\\n    ( (This)->lpVtbl -> DrawIndexed(This,IndexCount,StartIndexLocation,BaseVertexLocation) ) \n\n#define ID3D10Device1_Draw(This,VertexCount,StartVertexLocation)\t\\\n    ( (This)->lpVtbl -> Draw(This,VertexCount,StartVertexLocation) ) \n\n#define ID3D10Device1_PSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> PSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D10Device1_IASetInputLayout(This,pInputLayout)\t\\\n    ( (This)->lpVtbl -> IASetInputLayout(This,pInputLayout) ) \n\n#define ID3D10Device1_IASetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets)\t\\\n    ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) ) \n\n#define ID3D10Device1_IASetIndexBuffer(This,pIndexBuffer,Format,Offset)\t\\\n    ( (This)->lpVtbl -> IASetIndexBuffer(This,pIndexBuffer,Format,Offset) ) \n\n#define ID3D10Device1_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation)\t\\\n    ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) \n\n#define ID3D10Device1_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation)\t\\\n    ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) \n\n#define ID3D10Device1_GSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> GSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D10Device1_GSSetShader(This,pShader)\t\\\n    ( (This)->lpVtbl -> GSSetShader(This,pShader) ) \n\n#define ID3D10Device1_IASetPrimitiveTopology(This,Topology)\t\\\n    ( (This)->lpVtbl -> IASetPrimitiveTopology(This,Topology) ) \n\n#define ID3D10Device1_VSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> VSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D10Device1_VSSetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> VSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D10Device1_SetPredication(This,pPredicate,PredicateValue)\t\\\n    ( (This)->lpVtbl -> SetPredication(This,pPredicate,PredicateValue) ) \n\n#define ID3D10Device1_GSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> GSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D10Device1_GSSetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> GSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D10Device1_OMSetRenderTargets(This,NumViews,ppRenderTargetViews,pDepthStencilView)\t\\\n    ( (This)->lpVtbl -> OMSetRenderTargets(This,NumViews,ppRenderTargetViews,pDepthStencilView) ) \n\n#define ID3D10Device1_OMSetBlendState(This,pBlendState,BlendFactor,SampleMask)\t\\\n    ( (This)->lpVtbl -> OMSetBlendState(This,pBlendState,BlendFactor,SampleMask) ) \n\n#define ID3D10Device1_OMSetDepthStencilState(This,pDepthStencilState,StencilRef)\t\\\n    ( (This)->lpVtbl -> OMSetDepthStencilState(This,pDepthStencilState,StencilRef) ) \n\n#define ID3D10Device1_SOSetTargets(This,NumBuffers,ppSOTargets,pOffsets)\t\\\n    ( (This)->lpVtbl -> SOSetTargets(This,NumBuffers,ppSOTargets,pOffsets) ) \n\n#define ID3D10Device1_DrawAuto(This)\t\\\n    ( (This)->lpVtbl -> DrawAuto(This) ) \n\n#define ID3D10Device1_RSSetState(This,pRasterizerState)\t\\\n    ( (This)->lpVtbl -> RSSetState(This,pRasterizerState) ) \n\n#define ID3D10Device1_RSSetViewports(This,NumViewports,pViewports)\t\\\n    ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) \n\n#define ID3D10Device1_RSSetScissorRects(This,NumRects,pRects)\t\\\n    ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) \n\n#define ID3D10Device1_CopySubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,DstZ,pSrcResource,SrcSubresource,pSrcBox)\t\\\n    ( (This)->lpVtbl -> CopySubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,DstZ,pSrcResource,SrcSubresource,pSrcBox) ) \n\n#define ID3D10Device1_CopyResource(This,pDstResource,pSrcResource)\t\\\n    ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) \n\n#define ID3D10Device1_UpdateSubresource(This,pDstResource,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch)\t\\\n    ( (This)->lpVtbl -> UpdateSubresource(This,pDstResource,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) ) \n\n#define ID3D10Device1_ClearRenderTargetView(This,pRenderTargetView,ColorRGBA)\t\\\n    ( (This)->lpVtbl -> ClearRenderTargetView(This,pRenderTargetView,ColorRGBA) ) \n\n#define ID3D10Device1_ClearDepthStencilView(This,pDepthStencilView,ClearFlags,Depth,Stencil)\t\\\n    ( (This)->lpVtbl -> ClearDepthStencilView(This,pDepthStencilView,ClearFlags,Depth,Stencil) ) \n\n#define ID3D10Device1_GenerateMips(This,pShaderResourceView)\t\\\n    ( (This)->lpVtbl -> GenerateMips(This,pShaderResourceView) ) \n\n#define ID3D10Device1_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format)\t\\\n    ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) \n\n#define ID3D10Device1_VSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> VSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D10Device1_PSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> PSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D10Device1_PSGetShader(This,ppPixelShader)\t\\\n    ( (This)->lpVtbl -> PSGetShader(This,ppPixelShader) ) \n\n#define ID3D10Device1_PSGetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> PSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D10Device1_VSGetShader(This,ppVertexShader)\t\\\n    ( (This)->lpVtbl -> VSGetShader(This,ppVertexShader) ) \n\n#define ID3D10Device1_PSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> PSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D10Device1_IAGetInputLayout(This,ppInputLayout)\t\\\n    ( (This)->lpVtbl -> IAGetInputLayout(This,ppInputLayout) ) \n\n#define ID3D10Device1_IAGetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets)\t\\\n    ( (This)->lpVtbl -> IAGetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) ) \n\n#define ID3D10Device1_IAGetIndexBuffer(This,pIndexBuffer,Format,Offset)\t\\\n    ( (This)->lpVtbl -> IAGetIndexBuffer(This,pIndexBuffer,Format,Offset) ) \n\n#define ID3D10Device1_GSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> GSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D10Device1_GSGetShader(This,ppGeometryShader)\t\\\n    ( (This)->lpVtbl -> GSGetShader(This,ppGeometryShader) ) \n\n#define ID3D10Device1_IAGetPrimitiveTopology(This,pTopology)\t\\\n    ( (This)->lpVtbl -> IAGetPrimitiveTopology(This,pTopology) ) \n\n#define ID3D10Device1_VSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> VSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D10Device1_VSGetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> VSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D10Device1_GetPredication(This,ppPredicate,pPredicateValue)\t\\\n    ( (This)->lpVtbl -> GetPredication(This,ppPredicate,pPredicateValue) ) \n\n#define ID3D10Device1_GSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> GSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D10Device1_GSGetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> GSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D10Device1_OMGetRenderTargets(This,NumViews,ppRenderTargetViews,ppDepthStencilView)\t\\\n    ( (This)->lpVtbl -> OMGetRenderTargets(This,NumViews,ppRenderTargetViews,ppDepthStencilView) ) \n\n#define ID3D10Device1_OMGetBlendState(This,ppBlendState,BlendFactor,pSampleMask)\t\\\n    ( (This)->lpVtbl -> OMGetBlendState(This,ppBlendState,BlendFactor,pSampleMask) ) \n\n#define ID3D10Device1_OMGetDepthStencilState(This,ppDepthStencilState,pStencilRef)\t\\\n    ( (This)->lpVtbl -> OMGetDepthStencilState(This,ppDepthStencilState,pStencilRef) ) \n\n#define ID3D10Device1_SOGetTargets(This,NumBuffers,ppSOTargets,pOffsets)\t\\\n    ( (This)->lpVtbl -> SOGetTargets(This,NumBuffers,ppSOTargets,pOffsets) ) \n\n#define ID3D10Device1_RSGetState(This,ppRasterizerState)\t\\\n    ( (This)->lpVtbl -> RSGetState(This,ppRasterizerState) ) \n\n#define ID3D10Device1_RSGetViewports(This,NumViewports,pViewports)\t\\\n    ( (This)->lpVtbl -> RSGetViewports(This,NumViewports,pViewports) ) \n\n#define ID3D10Device1_RSGetScissorRects(This,NumRects,pRects)\t\\\n    ( (This)->lpVtbl -> RSGetScissorRects(This,NumRects,pRects) ) \n\n#define ID3D10Device1_GetDeviceRemovedReason(This)\t\\\n    ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) \n\n#define ID3D10Device1_SetExceptionMode(This,RaiseFlags)\t\\\n    ( (This)->lpVtbl -> SetExceptionMode(This,RaiseFlags) ) \n\n#define ID3D10Device1_GetExceptionMode(This)\t\\\n    ( (This)->lpVtbl -> GetExceptionMode(This) ) \n\n#define ID3D10Device1_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D10Device1_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D10Device1_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n#define ID3D10Device1_ClearState(This)\t\\\n    ( (This)->lpVtbl -> ClearState(This) ) \n\n#define ID3D10Device1_Flush(This)\t\\\n    ( (This)->lpVtbl -> Flush(This) ) \n\n#define ID3D10Device1_CreateBuffer(This,pDesc,pInitialData,ppBuffer)\t\\\n    ( (This)->lpVtbl -> CreateBuffer(This,pDesc,pInitialData,ppBuffer) ) \n\n#define ID3D10Device1_CreateTexture1D(This,pDesc,pInitialData,ppTexture1D)\t\\\n    ( (This)->lpVtbl -> CreateTexture1D(This,pDesc,pInitialData,ppTexture1D) ) \n\n#define ID3D10Device1_CreateTexture2D(This,pDesc,pInitialData,ppTexture2D)\t\\\n    ( (This)->lpVtbl -> CreateTexture2D(This,pDesc,pInitialData,ppTexture2D) ) \n\n#define ID3D10Device1_CreateTexture3D(This,pDesc,pInitialData,ppTexture3D)\t\\\n    ( (This)->lpVtbl -> CreateTexture3D(This,pDesc,pInitialData,ppTexture3D) ) \n\n#define ID3D10Device1_CreateShaderResourceView(This,pResource,pDesc,ppSRView)\t\\\n    ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,ppSRView) ) \n\n#define ID3D10Device1_CreateRenderTargetView(This,pResource,pDesc,ppRTView)\t\\\n    ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,ppRTView) ) \n\n#define ID3D10Device1_CreateDepthStencilView(This,pResource,pDesc,ppDepthStencilView)\t\\\n    ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,ppDepthStencilView) ) \n\n#define ID3D10Device1_CreateInputLayout(This,pInputElementDescs,NumElements,pShaderBytecodeWithInputSignature,BytecodeLength,ppInputLayout)\t\\\n    ( (This)->lpVtbl -> CreateInputLayout(This,pInputElementDescs,NumElements,pShaderBytecodeWithInputSignature,BytecodeLength,ppInputLayout) ) \n\n#define ID3D10Device1_CreateVertexShader(This,pShaderBytecode,BytecodeLength,ppVertexShader)\t\\\n    ( (This)->lpVtbl -> CreateVertexShader(This,pShaderBytecode,BytecodeLength,ppVertexShader) ) \n\n#define ID3D10Device1_CreateGeometryShader(This,pShaderBytecode,BytecodeLength,ppGeometryShader)\t\\\n    ( (This)->lpVtbl -> CreateGeometryShader(This,pShaderBytecode,BytecodeLength,ppGeometryShader) ) \n\n#define ID3D10Device1_CreateGeometryShaderWithStreamOutput(This,pShaderBytecode,BytecodeLength,pSODeclaration,NumEntries,OutputStreamStride,ppGeometryShader)\t\\\n    ( (This)->lpVtbl -> CreateGeometryShaderWithStreamOutput(This,pShaderBytecode,BytecodeLength,pSODeclaration,NumEntries,OutputStreamStride,ppGeometryShader) ) \n\n#define ID3D10Device1_CreatePixelShader(This,pShaderBytecode,BytecodeLength,ppPixelShader)\t\\\n    ( (This)->lpVtbl -> CreatePixelShader(This,pShaderBytecode,BytecodeLength,ppPixelShader) ) \n\n#define ID3D10Device1_CreateBlendState(This,pBlendStateDesc,ppBlendState)\t\\\n    ( (This)->lpVtbl -> CreateBlendState(This,pBlendStateDesc,ppBlendState) ) \n\n#define ID3D10Device1_CreateDepthStencilState(This,pDepthStencilDesc,ppDepthStencilState)\t\\\n    ( (This)->lpVtbl -> CreateDepthStencilState(This,pDepthStencilDesc,ppDepthStencilState) ) \n\n#define ID3D10Device1_CreateRasterizerState(This,pRasterizerDesc,ppRasterizerState)\t\\\n    ( (This)->lpVtbl -> CreateRasterizerState(This,pRasterizerDesc,ppRasterizerState) ) \n\n#define ID3D10Device1_CreateSamplerState(This,pSamplerDesc,ppSamplerState)\t\\\n    ( (This)->lpVtbl -> CreateSamplerState(This,pSamplerDesc,ppSamplerState) ) \n\n#define ID3D10Device1_CreateQuery(This,pQueryDesc,ppQuery)\t\\\n    ( (This)->lpVtbl -> CreateQuery(This,pQueryDesc,ppQuery) ) \n\n#define ID3D10Device1_CreatePredicate(This,pPredicateDesc,ppPredicate)\t\\\n    ( (This)->lpVtbl -> CreatePredicate(This,pPredicateDesc,ppPredicate) ) \n\n#define ID3D10Device1_CreateCounter(This,pCounterDesc,ppCounter)\t\\\n    ( (This)->lpVtbl -> CreateCounter(This,pCounterDesc,ppCounter) ) \n\n#define ID3D10Device1_CheckFormatSupport(This,Format,pFormatSupport)\t\\\n    ( (This)->lpVtbl -> CheckFormatSupport(This,Format,pFormatSupport) ) \n\n#define ID3D10Device1_CheckMultisampleQualityLevels(This,Format,SampleCount,pNumQualityLevels)\t\\\n    ( (This)->lpVtbl -> CheckMultisampleQualityLevels(This,Format,SampleCount,pNumQualityLevels) ) \n\n#define ID3D10Device1_CheckCounterInfo(This,pCounterInfo)\t\\\n    ( (This)->lpVtbl -> CheckCounterInfo(This,pCounterInfo) ) \n\n#define ID3D10Device1_CheckCounter(This,pDesc,pType,pActiveCounters,szName,pNameLength,szUnits,pUnitsLength,szDescription,pDescriptionLength)\t\\\n    ( (This)->lpVtbl -> CheckCounter(This,pDesc,pType,pActiveCounters,szName,pNameLength,szUnits,pUnitsLength,szDescription,pDescriptionLength) ) \n\n#define ID3D10Device1_GetCreationFlags(This)\t\\\n    ( (This)->lpVtbl -> GetCreationFlags(This) ) \n\n#define ID3D10Device1_OpenSharedResource(This,hResource,ReturnedInterface,ppResource)\t\\\n    ( (This)->lpVtbl -> OpenSharedResource(This,hResource,ReturnedInterface,ppResource) ) \n\n#define ID3D10Device1_SetTextFilterSize(This,Width,Height)\t\\\n    ( (This)->lpVtbl -> SetTextFilterSize(This,Width,Height) ) \n\n#define ID3D10Device1_GetTextFilterSize(This,pWidth,pHeight)\t\\\n    ( (This)->lpVtbl -> GetTextFilterSize(This,pWidth,pHeight) ) \n\n\n#define ID3D10Device1_CreateShaderResourceView1(This,pResource,pDesc,ppSRView)\t\\\n    ( (This)->lpVtbl -> CreateShaderResourceView1(This,pResource,pDesc,ppSRView) ) \n\n#define ID3D10Device1_CreateBlendState1(This,pBlendStateDesc,ppBlendState)\t\\\n    ( (This)->lpVtbl -> CreateBlendState1(This,pBlendStateDesc,ppBlendState) ) \n\n#define ID3D10Device1_GetFeatureLevel(This)\t\\\n    ( (This)->lpVtbl -> GetFeatureLevel(This) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10Device1_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10_1_0000_0003 */\n/* [local] */ \n\n#define\tD3D10_1_SDK_VERSION\t( ( 0 + 0x20 )  )\n\n#include \"d3d10_1shader.h\" \n\n///////////////////////////////////////////////////////////////////////////\n// D3D10CreateDevice1\n// ------------------\n//\n// pAdapter\n//      If NULL, D3D10CreateDevice1 will choose the primary adapter and\n//      create a new instance from a temporarily created IDXGIFactory.\n//      If non-NULL, D3D10CreateDevice1 will register the appropriate\n//      device, if necessary (via IDXGIAdapter::RegisterDrver), before\n//      creating the device.\n// DriverType\n//      Specifies the driver type to be created: hardware, reference or\n//      null.\n// Software\n//      HMODULE of a DLL implementing a software rasterizer. Must be NULL for\n//      non-Software driver types.\n// Flags\n//      Any of those documented for D3D10CreateDeviceAndSwapChain1.\n// HardwareLevel\n//      Any of those documented for D3D10CreateDeviceAndSwapChain1.\n// SDKVersion\n//      SDK version. Use the D3D10_1_SDK_VERSION macro.\n// ppDevice\n//      Pointer to returned interface.\n//\n// Return Values\n//  Any of those documented for \n//          CreateDXGIFactory\n//          IDXGIFactory::EnumAdapters\n//          IDXGIAdapter::RegisterDriver\n//          D3D10CreateDevice1\n//\n///////////////////////////////////////////////////////////////////////////\ntypedef HRESULT (WINAPI* PFN_D3D10_CREATE_DEVICE1)(IDXGIAdapter *, \n    D3D10_DRIVER_TYPE, HMODULE, UINT, D3D10_FEATURE_LEVEL1, UINT, ID3D10Device1**);\n\nHRESULT WINAPI D3D10CreateDevice1(\n    IDXGIAdapter *pAdapter,\n    D3D10_DRIVER_TYPE DriverType,\n    HMODULE Software,\n    UINT Flags,\n    D3D10_FEATURE_LEVEL1 HardwareLevel,\n    UINT SDKVersion,\n    ID3D10Device1 **ppDevice);\n\n///////////////////////////////////////////////////////////////////////////\n// D3D10CreateDeviceAndSwapChain1\n// ------------------------------\n//\n// ppAdapter\n//      If NULL, D3D10CreateDevice1 will choose the primary adapter and \n//      create a new instance from a temporarily created IDXGIFactory.\n//      If non-NULL, D3D10CreateDevice1 will register the appropriate\n//      device, if necessary (via IDXGIAdapter::RegisterDrver), before\n//      creating the device.\n// DriverType\n//      Specifies the driver type to be created: hardware, reference or\n//      null.\n// Software\n//      HMODULE of a DLL implementing a software rasterizer. Must be NULL for\n//      non-Software driver types.\n// Flags\n//      Any of those documented for D3D10CreateDevice1.\n// HardwareLevel\n//      Any of:\n//          D3D10_CREATE_LEVEL_10_0\n//          D3D10_CREATE_LEVEL_10_1\n// SDKVersion\n//      SDK version. Use the D3D10_1_SDK_VERSION macro.\n// pSwapChainDesc\n//      Swap chain description, may be NULL.\n// ppSwapChain\n//      Pointer to returned interface. May be NULL.\n// ppDevice\n//      Pointer to returned interface.\n//\n// Return Values\n//  Any of those documented for \n//          CreateDXGIFactory\n//          IDXGIFactory::EnumAdapters\n//          IDXGIAdapter::RegisterDriver\n//          D3D10CreateDevice1\n//          IDXGIFactory::CreateSwapChain\n//\n///////////////////////////////////////////////////////////////////////////\ntypedef HRESULT (WINAPI* PFN_D3D10_CREATE_DEVICE_AND_SWAP_CHAIN1)(IDXGIAdapter *, \n    D3D10_DRIVER_TYPE, HMODULE, UINT, D3D10_FEATURE_LEVEL1, UINT, DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D10Device1 **);\n\nHRESULT WINAPI D3D10CreateDeviceAndSwapChain1(\n    IDXGIAdapter *pAdapter,\n    D3D10_DRIVER_TYPE DriverType,\n    HMODULE Software,\n    UINT Flags,\n    D3D10_FEATURE_LEVEL1 HardwareLevel,\n    UINT SDKVersion,\n    DXGI_SWAP_CHAIN_DESC *pSwapChainDesc,\n    IDXGISwapChain **ppSwapChain,\n    ID3D10Device1 **ppDevice);\nDEFINE_GUID(IID_ID3D10BlendState1,0xEDAD8D99,0x8A35,0x4d6d,0x85,0x66,0x2E,0xA2,0x76,0xCD,0xE1,0x61);\nDEFINE_GUID(IID_ID3D10ShaderResourceView1,0x9B7E4C87,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10Device1,0x9B7E4C8F,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_1_0000_0003_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10_1_0000_0003_v0_0_s_ifspec;\n\n/* Additional Prototypes for ALL interfaces */\n\n/* end of Additional Prototypes */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n\n"
  },
  {
    "path": "Include/D3D10_1shader.h",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n//  Copyright (c) Microsoft Corporation.  All rights reserved.\n//\n//  File:       D3D10_1Shader.h\n//  Content:    D3D10.1 Shader Types and APIs\n//\n//////////////////////////////////////////////////////////////////////////////\n\n#ifndef __D3D10_1SHADER_H__\n#define __D3D10_1SHADER_H__\n\n#include \"d3d10shader.h\"\n\n//----------------------------------------------------------------------------\n// Shader debugging structures\n//----------------------------------------------------------------------------\n\ntypedef enum _D3D10_SHADER_DEBUG_REGTYPE\n{\n    D3D10_SHADER_DEBUG_REG_INPUT,\n    D3D10_SHADER_DEBUG_REG_OUTPUT,\n    D3D10_SHADER_DEBUG_REG_CBUFFER,\n    D3D10_SHADER_DEBUG_REG_TBUFFER,\n    D3D10_SHADER_DEBUG_REG_TEMP,\n    D3D10_SHADER_DEBUG_REG_TEMPARRAY,\n    D3D10_SHADER_DEBUG_REG_TEXTURE,\n    D3D10_SHADER_DEBUG_REG_SAMPLER,\n    D3D10_SHADER_DEBUG_REG_IMMEDIATECBUFFER,\n    D3D10_SHADER_DEBUG_REG_LITERAL,\n    D3D10_SHADER_DEBUG_REG_UNUSED,\n    D3D11_SHADER_DEBUG_REG_INTERFACE_POINTERS,\n    D3D11_SHADER_DEBUG_REG_UAV,\n    D3D10_SHADER_DEBUG_REG_FORCE_DWORD = 0x7fffffff,\n} D3D10_SHADER_DEBUG_REGTYPE;\n\ntypedef enum _D3D10_SHADER_DEBUG_SCOPETYPE\n{\n    D3D10_SHADER_DEBUG_SCOPE_GLOBAL,\n    D3D10_SHADER_DEBUG_SCOPE_BLOCK,\n    D3D10_SHADER_DEBUG_SCOPE_FORLOOP,\n    D3D10_SHADER_DEBUG_SCOPE_STRUCT,\n    D3D10_SHADER_DEBUG_SCOPE_FUNC_PARAMS,\n    D3D10_SHADER_DEBUG_SCOPE_STATEBLOCK,\n    D3D10_SHADER_DEBUG_SCOPE_NAMESPACE,\n    D3D10_SHADER_DEBUG_SCOPE_ANNOTATION,\n    D3D10_SHADER_DEBUG_SCOPE_FORCE_DWORD = 0x7fffffff,\n} D3D10_SHADER_DEBUG_SCOPETYPE;\n\ntypedef enum _D3D10_SHADER_DEBUG_VARTYPE\n{\n    D3D10_SHADER_DEBUG_VAR_VARIABLE,\n    D3D10_SHADER_DEBUG_VAR_FUNCTION,\n    D3D10_SHADER_DEBUG_VAR_FORCE_DWORD = 0x7fffffff,\n} D3D10_SHADER_DEBUG_VARTYPE;\n\n/////////////////////////////////////////////////////////////////////\n// These are the serialized structures that get written to the file\n/////////////////////////////////////////////////////////////////////\n\ntypedef struct _D3D10_SHADER_DEBUG_TOKEN_INFO\n{\n    UINT File;    // offset into file list\n    UINT Line;    // line #\n    UINT Column;  // column #\n\n    UINT TokenLength;\n    UINT TokenId; // offset to LPCSTR of length TokenLength in string datastore\n} D3D10_SHADER_DEBUG_TOKEN_INFO;\n\n// Variable list\ntypedef struct _D3D10_SHADER_DEBUG_VAR_INFO\n{\n    // Index into token list for declaring identifier\n    UINT TokenId;\n    D3D10_SHADER_VARIABLE_TYPE Type;\n    // register and component for this variable, only valid/necessary for arrays\n    UINT Register;\n    UINT Component;\n    // gives the original variable that declared this variable\n    UINT ScopeVar;\n    // this variable's offset in its ScopeVar\n    UINT ScopeVarOffset;\n} D3D10_SHADER_DEBUG_VAR_INFO;\n\ntypedef struct _D3D10_SHADER_DEBUG_INPUT_INFO\n{\n    // index into array of variables of variable to initialize\n    UINT Var;\n    // input, cbuffer, tbuffer\n    D3D10_SHADER_DEBUG_REGTYPE InitialRegisterSet;\n    // set to cbuffer or tbuffer slot, geometry shader input primitive #,\n    // identifying register for indexable temp, or -1\n    UINT InitialBank;\n    // -1 if temp, otherwise gives register in register set\n    UINT InitialRegister;\n    // -1 if temp, otherwise gives component\n    UINT InitialComponent;\n    // initial value if literal\n    UINT InitialValue;\n} D3D10_SHADER_DEBUG_INPUT_INFO;\n\ntypedef struct _D3D10_SHADER_DEBUG_SCOPEVAR_INFO\n{\n    // Index into variable token\n    UINT TokenId;\n\n    D3D10_SHADER_DEBUG_VARTYPE VarType; // variable or function (different namespaces)\n    D3D10_SHADER_VARIABLE_CLASS Class;\n    UINT Rows;          // number of rows (matrices)\n    UINT Columns;       // number of columns (vectors and matrices)\n\n    // In an array of structures, one struct member scope is provided, and\n    // you'll have to add the array stride times the index to the variable\n    // index you find, then find that variable in this structure's list of\n    // variables.\n\n    // gives a scope to look up struct members. -1 if not a struct\n    UINT StructMemberScope;\n\n    // number of array indices\n    UINT uArrayIndices;    // a[3][2][1] has 3 indices\n    // maximum array index for each index\n    // offset to UINT[uArrayIndices] in UINT datastore\n    UINT ArrayElements; // a[3][2][1] has {3, 2, 1}\n    // how many variables each array index moves\n    // offset to UINT[uArrayIndices] in UINT datastore\n    UINT ArrayStrides;  // a[3][2][1] has {2, 1, 1}\n\n    UINT uVariables;\n    // index of the first variable, later variables are offsets from this one\n    UINT uFirstVariable;\n} D3D10_SHADER_DEBUG_SCOPEVAR_INFO;\n\n// scope data, this maps variable names to debug variables (useful for the watch window)\ntypedef struct _D3D10_SHADER_DEBUG_SCOPE_INFO\n{\n    D3D10_SHADER_DEBUG_SCOPETYPE ScopeType;\n    UINT Name;         // offset to name of scope in strings list\n    UINT uNameLen;     // length of name string\n    UINT uVariables;\n    UINT VariableData; // Offset to UINT[uVariables] indexing the Scope Variable list\n} D3D10_SHADER_DEBUG_SCOPE_INFO;\n\n// instruction outputs\ntypedef struct _D3D10_SHADER_DEBUG_OUTPUTVAR\n{\n    // index variable being written to, if -1 it's not going to a variable\n    UINT Var;\n    // range data that the compiler expects to be true\n    UINT  uValueMin, uValueMax;\n    INT   iValueMin, iValueMax;\n    FLOAT fValueMin, fValueMax;\n\n    BOOL  bNaNPossible, bInfPossible;\n} D3D10_SHADER_DEBUG_OUTPUTVAR;\n\ntypedef struct _D3D10_SHADER_DEBUG_OUTPUTREG_INFO\n{\n    // Only temp, indexable temp, and output are valid here\n    D3D10_SHADER_DEBUG_REGTYPE OutputRegisterSet;\n    // -1 means no output\n    UINT OutputReg;\n    // if a temp array, identifier for which one\n    UINT TempArrayReg;\n    // -1 means masked out\n    UINT OutputComponents[4];\n    D3D10_SHADER_DEBUG_OUTPUTVAR OutputVars[4];\n    // when indexing the output, get the value of this register, then add\n    // that to uOutputReg. If uIndexReg is -1, then there is no index.\n    // find the variable whose register is the sum (by looking in the ScopeVar)\n    // and component matches, then set it. This should only happen for indexable\n    // temps and outputs.\n    UINT IndexReg;\n    UINT IndexComp;\n} D3D10_SHADER_DEBUG_OUTPUTREG_INFO;\n\n// per instruction data\ntypedef struct _D3D10_SHADER_DEBUG_INST_INFO\n{\n    UINT Id; // Which instruction this is in the bytecode\n    UINT Opcode; // instruction type\n\n    // 0, 1, or 2\n    UINT uOutputs;\n\n    // up to two outputs per instruction\n    D3D10_SHADER_DEBUG_OUTPUTREG_INFO pOutputs[2];\n    \n    // index into the list of tokens for this instruction's token\n    UINT TokenId;\n\n    // how many function calls deep this instruction is\n    UINT NestingLevel;\n\n    // list of scopes from outer-most to inner-most\n    // Number of scopes\n    UINT Scopes;\n    UINT ScopeInfo; // Offset to UINT[uScopes] specifying indices of the ScopeInfo Array\n\n    // list of variables accessed by this instruction\n    // Number of variables\n    UINT AccessedVars;\n    UINT AccessedVarsInfo; // Offset to UINT[AccessedVars] specifying indices of the ScopeVariableInfo Array\n} D3D10_SHADER_DEBUG_INST_INFO;\n\ntypedef struct _D3D10_SHADER_DEBUG_FILE_INFO\n{\n    UINT FileName;    // Offset to LPCSTR for file name\n    UINT FileNameLen; // Length of file name\n    UINT FileData;    // Offset to LPCSTR of length FileLen\n    UINT FileLen;     // Length of file\n} D3D10_SHADER_DEBUG_FILE_INFO;\n\ntypedef struct _D3D10_SHADER_DEBUG_INFO\n{\n    UINT Size;                             // sizeof(D3D10_SHADER_DEBUG_INFO)\n    UINT Creator;                          // Offset to LPCSTR for compiler version\n    UINT EntrypointName;                   // Offset to LPCSTR for Entry point name\n    UINT ShaderTarget;                     // Offset to LPCSTR for shader target\n    UINT CompileFlags;                     // flags used to compile\n    UINT Files;                            // number of included files\n    UINT FileInfo;                         // Offset to D3D10_SHADER_DEBUG_FILE_INFO[Files]\n    UINT Instructions;                     // number of instructions\n    UINT InstructionInfo;                  // Offset to D3D10_SHADER_DEBUG_INST_INFO[Instructions]\n    UINT Variables;                        // number of variables\n    UINT VariableInfo;                     // Offset to D3D10_SHADER_DEBUG_VAR_INFO[Variables]\n    UINT InputVariables;                   // number of variables to initialize before running\n    UINT InputVariableInfo;                // Offset to D3D10_SHADER_DEBUG_INPUT_INFO[InputVariables]\n    UINT Tokens;                           // number of tokens to initialize\n    UINT TokenInfo;                        // Offset to D3D10_SHADER_DEBUG_TOKEN_INFO[Tokens]\n    UINT Scopes;                           // number of scopes\n    UINT ScopeInfo;                        // Offset to D3D10_SHADER_DEBUG_SCOPE_INFO[Scopes]\n    UINT ScopeVariables;                   // number of variables declared\n    UINT ScopeVariableInfo;                // Offset to D3D10_SHADER_DEBUG_SCOPEVAR_INFO[Scopes]\n    UINT UintOffset;                       // Offset to the UINT datastore, all UINT offsets are from this offset\n    UINT StringOffset;                     // Offset to the string datastore, all string offsets are from this offset\n} D3D10_SHADER_DEBUG_INFO;\n\n//----------------------------------------------------------------------------\n// ID3D10ShaderReflection1:\n//----------------------------------------------------------------------------\n\n//\n// Interface definitions\n//\n\ntypedef interface ID3D10ShaderReflection1 ID3D10ShaderReflection1;\ntypedef interface ID3D10ShaderReflection1 *LPD3D10SHADERREFLECTION1;\n\n// {C3457783-A846-47CE-9520-CEA6F66E7447}\nDEFINE_GUID(IID_ID3D10ShaderReflection1, \n0xc3457783, 0xa846, 0x47ce, 0x95, 0x20, 0xce, 0xa6, 0xf6, 0x6e, 0x74, 0x47);\n\n#undef INTERFACE\n#define INTERFACE ID3D10ShaderReflection1\n\nDECLARE_INTERFACE_(ID3D10ShaderReflection1, IUnknown)\n{\n    STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n\n    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10ShaderReflectionConstantBuffer*, GetConstantBufferByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10ShaderReflectionConstantBuffer*, GetConstantBufferByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD(GetResourceBindingDesc)(THIS_ UINT ResourceIndex, D3D10_SHADER_INPUT_BIND_DESC *pDesc) PURE;\n    \n    STDMETHOD(GetInputParameterDesc)(THIS_ UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE;\n    STDMETHOD(GetOutputParameterDesc)(THIS_ UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE;\n\n    STDMETHOD_(ID3D10ShaderReflectionVariable*, GetVariableByName)(THIS_ LPCSTR Name) PURE;\n\n    STDMETHOD(GetResourceBindingDescByName)(THIS_ LPCSTR Name, D3D10_SHADER_INPUT_BIND_DESC *pDesc) PURE;\n\n    STDMETHOD(GetMovInstructionCount)(THIS_ UINT* pCount) PURE;\n    STDMETHOD(GetMovcInstructionCount)(THIS_ UINT* pCount) PURE;\n    STDMETHOD(GetConversionInstructionCount)(THIS_ UINT* pCount) PURE;\n    STDMETHOD(GetBitwiseInstructionCount)(THIS_ UINT* pCount) PURE;\n    \n    STDMETHOD(GetGSInputPrimitive)(THIS_ D3D10_PRIMITIVE* pPrim) PURE;\n    STDMETHOD(IsLevel9Shader)(THIS_ BOOL* pbLevel9Shader) PURE;\n    STDMETHOD(IsSampleFrequencyShader)(THIS_ BOOL* pbSampleFrequency) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// APIs //////////////////////////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif //__cplusplus\n\n#ifdef __cplusplus\n}\n#endif //__cplusplus\n    \n#endif //__D3D10_1SHADER_H__\n\n"
  },
  {
    "path": "Include/D3D10effect.h",
    "content": "\n//////////////////////////////////////////////////////////////////////////////\n//\n//  Copyright (c) Microsoft Corporation.  All rights reserved.\n//\n//  File:       D3D10Effect.h\n//  Content:    D3D10 Stateblock/Effect Types & APIs\n//\n//////////////////////////////////////////////////////////////////////////////\n\n#ifndef __D3D10EFFECT_H__\n#define __D3D10EFFECT_H__\n\n#include \"d3d10.h\"\n\n//////////////////////////////////////////////////////////////////////////////\n// File contents:\n//\n// 1) Stateblock enums, structs, interfaces, flat APIs\n// 2) Effect enums, structs, interfaces, flat APIs\n//////////////////////////////////////////////////////////////////////////////\n\n//----------------------------------------------------------------------------\n// D3D10_DEVICE_STATE_TYPES:\n//\n// Used in ID3D10StateBlockMask function calls\n//\n//----------------------------------------------------------------------------\n\ntypedef enum _D3D10_DEVICE_STATE_TYPES\n{\n    \n    D3D10_DST_SO_BUFFERS=1,             // Single-value state (atomical gets/sets)\n    D3D10_DST_OM_RENDER_TARGETS,        // Single-value state (atomical gets/sets)\n    D3D10_DST_OM_DEPTH_STENCIL_STATE,   // Single-value state\n    D3D10_DST_OM_BLEND_STATE,           // Single-value state\n\n    D3D10_DST_VS,                       // Single-value state\n    D3D10_DST_VS_SAMPLERS,              // Count: D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT\n    D3D10_DST_VS_SHADER_RESOURCES,      // Count: D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT\n    D3D10_DST_VS_CONSTANT_BUFFERS,      // Count:\t\t\t\n\n    D3D10_DST_GS,                       // Single-value state\n    D3D10_DST_GS_SAMPLERS,              // Count: D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT\n    D3D10_DST_GS_SHADER_RESOURCES,      // Count: D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT\n    D3D10_DST_GS_CONSTANT_BUFFERS,      // Count: D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT\n\n    D3D10_DST_PS,                       // Single-value state\n    D3D10_DST_PS_SAMPLERS,              // Count: D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT\n    D3D10_DST_PS_SHADER_RESOURCES,      // Count: D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT\n    D3D10_DST_PS_CONSTANT_BUFFERS,      // Count: D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT\n    \n    D3D10_DST_IA_VERTEX_BUFFERS,        // Count: D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT\n    D3D10_DST_IA_INDEX_BUFFER,          // Single-value state\n    D3D10_DST_IA_INPUT_LAYOUT,          // Single-value state\n    D3D10_DST_IA_PRIMITIVE_TOPOLOGY,    // Single-value state\n\n    D3D10_DST_RS_VIEWPORTS,             // Single-value state (atomical gets/sets)\n    D3D10_DST_RS_SCISSOR_RECTS,         // Single-value state (atomical gets/sets)\n    D3D10_DST_RS_RASTERIZER_STATE,      // Single-value state\n\n    D3D10_DST_PREDICATION,              // Single-value state\n} D3D10_DEVICE_STATE_TYPES;\n\n//----------------------------------------------------------------------------\n// D3D10_DEVICE_STATE_TYPES:\n//\n// Used in ID3D10StateBlockMask function calls\n//\n//----------------------------------------------------------------------------\n\n#ifndef D3D10_BYTES_FROM_BITS\n#define D3D10_BYTES_FROM_BITS(x) (((x) + 7) / 8)\n#endif // D3D10_BYTES_FROM_BITS\n\ntypedef struct _D3D10_STATE_BLOCK_MASK\n{\n    BYTE VS;\n    BYTE VSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];\n    BYTE VSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];\n    BYTE VSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];\n    \n    BYTE GS;\n    BYTE GSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];\n    BYTE GSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];\n    BYTE GSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];\n    \n    BYTE PS;\n    BYTE PSSamplers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT)];\n    BYTE PSShaderResources[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT)];\n    BYTE PSConstantBuffers[D3D10_BYTES_FROM_BITS(D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT)];\n    \n    BYTE IAVertexBuffers[D3D10_BYTES_FROM_BITS(D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT)];\n    BYTE IAIndexBuffer;\n    BYTE IAInputLayout;\n    BYTE IAPrimitiveTopology;\n    \n    BYTE OMRenderTargets;\n    BYTE OMDepthStencilState;\n    BYTE OMBlendState;\n    \n    BYTE RSViewports;\n    BYTE RSScissorRects;\n    BYTE RSRasterizerState;\n    \n    BYTE SOBuffers;\n    \n    BYTE Predication;\n} D3D10_STATE_BLOCK_MASK;\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10StateBlock //////////////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\ntypedef interface ID3D10StateBlock ID3D10StateBlock;\ntypedef interface ID3D10StateBlock *LPD3D10STATEBLOCK;\n\n// {0803425A-57F5-4dd6-9465-A87570834A08}\nDEFINE_GUID(IID_ID3D10StateBlock, \n0x803425a, 0x57f5, 0x4dd6, 0x94, 0x65, 0xa8, 0x75, 0x70, 0x83, 0x4a, 0x8);\n\n#undef INTERFACE\n#define INTERFACE ID3D10StateBlock\n\nDECLARE_INTERFACE_(ID3D10StateBlock, IUnknown)\n{\n    STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    \n    STDMETHOD(Capture)(THIS) PURE;\n    STDMETHOD(Apply)(THIS) PURE;\n    STDMETHOD(ReleaseAllDeviceObjects)(THIS) PURE;\n    STDMETHOD(GetDevice)(THIS_ ID3D10Device **ppDevice) PURE;\n};\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif //__cplusplus\n\n//----------------------------------------------------------------------------\n// D3D10_STATE_BLOCK_MASK and manipulation functions\n// -------------------------------------------------\n//\n// These functions exist to facilitate working with the D3D10_STATE_BLOCK_MASK\n// structure.\n//\n// D3D10_STATE_BLOCK_MASK *pResult or *pMask\n//   The state block mask to operate on\n//\n// D3D10_STATE_BLOCK_MASK *pA, *pB\n//   The source state block masks for the binary union/intersect/difference\n//   operations.\n//\n// D3D10_DEVICE_STATE_TYPES StateType\n//   The specific state type to enable/disable/query\n//\n// UINT RangeStart, RangeLength, Entry\n//   The specific bit or range of bits for a given state type to operate on.\n//   Consult the comments for D3D10_DEVICE_STATE_TYPES and \n//   D3D10_STATE_BLOCK_MASK for information on the valid bit ranges for \n//   each state.\n//\n//----------------------------------------------------------------------------\n\nHRESULT WINAPI D3D10StateBlockMaskUnion(D3D10_STATE_BLOCK_MASK *pA, D3D10_STATE_BLOCK_MASK *pB, D3D10_STATE_BLOCK_MASK *pResult);\nHRESULT WINAPI D3D10StateBlockMaskIntersect(D3D10_STATE_BLOCK_MASK *pA, D3D10_STATE_BLOCK_MASK *pB, D3D10_STATE_BLOCK_MASK *pResult);\nHRESULT WINAPI D3D10StateBlockMaskDifference(D3D10_STATE_BLOCK_MASK *pA, D3D10_STATE_BLOCK_MASK *pB, D3D10_STATE_BLOCK_MASK *pResult);\nHRESULT WINAPI D3D10StateBlockMaskEnableCapture(D3D10_STATE_BLOCK_MASK *pMask, D3D10_DEVICE_STATE_TYPES StateType, UINT RangeStart, UINT RangeLength);\nHRESULT WINAPI D3D10StateBlockMaskDisableCapture(D3D10_STATE_BLOCK_MASK *pMask, D3D10_DEVICE_STATE_TYPES StateType, UINT RangeStart, UINT RangeLength);\nHRESULT WINAPI D3D10StateBlockMaskEnableAll(D3D10_STATE_BLOCK_MASK *pMask);\nHRESULT WINAPI D3D10StateBlockMaskDisableAll(D3D10_STATE_BLOCK_MASK *pMask);\nBOOL    WINAPI D3D10StateBlockMaskGetSetting(D3D10_STATE_BLOCK_MASK *pMask, D3D10_DEVICE_STATE_TYPES StateType, UINT Entry);\n\n//----------------------------------------------------------------------------\n// D3D10CreateStateBlock\n// ---------------------\n//\n// Creates a state block object based on the mask settings specified\n//   in a D3D10_STATE_BLOCK_MASK structure.\n//\n// ID3D10Device *pDevice\n//      The device interface to associate with this state block\n//\n// D3D10_STATE_BLOCK_MASK *pStateBlockMask\n//      A bit mask whose settings are used to generate a state block\n//      object.\n//\n// ID3D10StateBlock **ppStateBlock\n//      The resulting state block object.  This object will save/restore\n//      only those pieces of state that were set in the state block\n//      bit mask\n//----------------------------------------------------------------------------\n\nHRESULT WINAPI D3D10CreateStateBlock(ID3D10Device *pDevice, D3D10_STATE_BLOCK_MASK *pStateBlockMask, ID3D10StateBlock **ppStateBlock);\n\n#ifdef __cplusplus\n}\n#endif //__cplusplus\n\n//----------------------------------------------------------------------------\n// D3D10_COMPILE & D3D10_EFFECT flags:\n// -------------------------------------\n//\n// These flags are passed in when creating an effect, and affect\n// either compilation behavior or runtime effect behavior\n//\n// D3D10_EFFECT_COMPILE_CHILD_EFFECT\n//   Compile this .fx file to a child effect. Child effects have no initializers\n//   for any shared values as these are initialied in the master effect (pool).\n//\n// D3D10_EFFECT_COMPILE_ALLOW_SLOW_OPS\n//   By default, performance mode is enabled.  Performance mode disallows\n//   mutable state objects by preventing non-literal expressions from appearing in\n//   state object definitions.  Specifying this flag will disable the mode and allow\n//   for mutable state objects.\n//\n// D3D10_EFFECT_SINGLE_THREADED\n//   Do not attempt to synchronize with other threads loading effects into the\n//   same pool.\n//\n//----------------------------------------------------------------------------\n\n#define D3D10_EFFECT_COMPILE_CHILD_EFFECT              (1 << 0)\n#define D3D10_EFFECT_COMPILE_ALLOW_SLOW_OPS            (1 << 1)\n#define D3D10_EFFECT_SINGLE_THREADED                   (1 << 3)\n\n\n//----------------------------------------------------------------------------\n// D3D10_EFFECT_VARIABLE flags:\n// ----------------------------\n//\n// These flags describe an effect variable (global or annotation),\n// and are returned in D3D10_EFFECT_VARIABLE_DESC::Flags.\n//\n// D3D10_EFFECT_VARIABLE_POOLED\n//   Indicates that the this variable or constant buffer resides\n//   in an effect pool. If this flag is not set, then the variable resides\n//   in a standalone effect (if ID3D10Effect::GetPool returns NULL)\n//   or a child effect (if ID3D10Effect::GetPool returns non-NULL)\n//\n// D3D10_EFFECT_VARIABLE_ANNOTATION\n//   Indicates that this is an annotation on a technique, pass, or global\n//   variable. Otherwise, this is a global variable. Annotations cannot\n//   be shared.\n//\n// D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT\n//   Indicates that the variable has been explicitly bound using the\n//   register keyword.\n//----------------------------------------------------------------------------\n\n#define D3D10_EFFECT_VARIABLE_POOLED                  (1 << 0)\n#define D3D10_EFFECT_VARIABLE_ANNOTATION              (1 << 1)\n#define D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT     (1 << 2)\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectType //////////////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\n//----------------------------------------------------------------------------\n// D3D10_EFFECT_TYPE_DESC:\n//\n// Retrieved by ID3D10EffectType::GetDesc()\n//----------------------------------------------------------------------------\n\ntypedef struct _D3D10_EFFECT_TYPE_DESC\n{\n    LPCSTR  TypeName;               // Name of the type \n                                    // (e.g. \"float4\" or \"MyStruct\")\n\n    D3D10_SHADER_VARIABLE_CLASS    Class;  // (e.g. scalar, vector, object, etc.)\n    D3D10_SHADER_VARIABLE_TYPE     Type;   // (e.g. float, texture, vertexshader, etc.)\n    \n    UINT    Elements;               // Number of elements in this type\n                                    // (0 if not an array) \n    UINT    Members;                // Number of members\n                                    // (0 if not a structure)\n    UINT    Rows;                   // Number of rows in this type\n                                    // (0 if not a numeric primitive)\n    UINT    Columns;                // Number of columns in this type\n                                    // (0 if not a numeric primitive)\n    \n    UINT    PackedSize;             // Number of bytes required to represent\n                                    // this data type, when tightly packed\n    UINT    UnpackedSize;           // Number of bytes occupied by this data\n                                    // type, when laid out in a constant buffer\n    UINT    Stride;                 // Number of bytes to seek between elements,\n                                    // when laid out in a constant buffer\n} D3D10_EFFECT_TYPE_DESC;\n\ntypedef interface ID3D10EffectType ID3D10EffectType;\ntypedef interface ID3D10EffectType *LPD3D10EFFECTTYPE;\n\n// {4E9E1DDC-CD9D-4772-A837-00180B9B88FD}\nDEFINE_GUID(IID_ID3D10EffectType, \n0x4e9e1ddc, 0xcd9d, 0x4772, 0xa8, 0x37, 0x0, 0x18, 0xb, 0x9b, 0x88, 0xfd);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectType\n\nDECLARE_INTERFACE(ID3D10EffectType)\n{\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_TYPE_DESC *pDesc) PURE;\n    STDMETHOD_(ID3D10EffectType*, GetMemberTypeByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectType*, GetMemberTypeByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(ID3D10EffectType*, GetMemberTypeBySemantic)(THIS_ LPCSTR Semantic) PURE;\n    STDMETHOD_(LPCSTR, GetMemberName)(THIS_ UINT Index) PURE;\n    STDMETHOD_(LPCSTR, GetMemberSemantic)(THIS_ UINT Index) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectVariable //////////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\n//----------------------------------------------------------------------------\n// D3D10_EFFECT_VARIABLE_DESC:\n//\n// Retrieved by ID3D10EffectVariable::GetDesc()\n//----------------------------------------------------------------------------\n\ntypedef struct _D3D10_EFFECT_VARIABLE_DESC\n{\n    LPCSTR  Name;                   // Name of this variable, annotation, \n                                    // or structure member\n    LPCSTR  Semantic;               // Semantic string of this variable\n                                    // or structure member (NULL for \n                                    // annotations or if not present)\n    \n    UINT    Flags;                  // D3D10_EFFECT_VARIABLE_* flags\n    UINT    Annotations;            // Number of annotations on this variable\n                                    // (always 0 for annotations)\n\n    UINT    BufferOffset;           // Offset into containing cbuffer or tbuffer\n                                    // (always 0 for annotations or variables\n                                    // not in constant buffers)\n\n    UINT    ExplicitBindPoint;      // Used if the variable has been explicitly bound\n                                    // using the register keyword. Check Flags for\n                                    // D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT;\n} D3D10_EFFECT_VARIABLE_DESC;\n\ntypedef interface ID3D10EffectVariable ID3D10EffectVariable;\ntypedef interface ID3D10EffectVariable *LPD3D10EFFECTVARIABLE;\n\n// {AE897105-00E6-45bf-BB8E-281DD6DB8E1B}\nDEFINE_GUID(IID_ID3D10EffectVariable, \n0xae897105, 0xe6, 0x45bf, 0xbb, 0x8e, 0x28, 0x1d, 0xd6, 0xdb, 0x8e, 0x1b);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectVariable\n\n// Forward defines\ntypedef interface ID3D10EffectScalarVariable ID3D10EffectScalarVariable;\ntypedef interface ID3D10EffectVectorVariable ID3D10EffectVectorVariable;\ntypedef interface ID3D10EffectMatrixVariable ID3D10EffectMatrixVariable;\ntypedef interface ID3D10EffectStringVariable ID3D10EffectStringVariable;\ntypedef interface ID3D10EffectShaderResourceVariable ID3D10EffectShaderResourceVariable;\ntypedef interface ID3D10EffectRenderTargetViewVariable ID3D10EffectRenderTargetViewVariable;\ntypedef interface ID3D10EffectDepthStencilViewVariable ID3D10EffectDepthStencilViewVariable;\ntypedef interface ID3D10EffectConstantBuffer ID3D10EffectConstantBuffer;\ntypedef interface ID3D10EffectShaderVariable ID3D10EffectShaderVariable;\ntypedef interface ID3D10EffectBlendVariable ID3D10EffectBlendVariable;\ntypedef interface ID3D10EffectDepthStencilVariable ID3D10EffectDepthStencilVariable;\ntypedef interface ID3D10EffectRasterizerVariable ID3D10EffectRasterizerVariable;\ntypedef interface ID3D10EffectSamplerVariable ID3D10EffectSamplerVariable;\n\nDECLARE_INTERFACE(ID3D10EffectVariable)\n{\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE;\n\n    STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;\n    \n    STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE;\n    \n    STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectScalarVariable ////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\ntypedef interface ID3D10EffectScalarVariable ID3D10EffectScalarVariable;\ntypedef interface ID3D10EffectScalarVariable *LPD3D10EFFECTSCALARVARIABLE;\n\n// {00E48F7B-D2C8-49e8-A86C-022DEE53431F}\nDEFINE_GUID(IID_ID3D10EffectScalarVariable, \n0xe48f7b, 0xd2c8, 0x49e8, 0xa8, 0x6c, 0x2, 0x2d, 0xee, 0x53, 0x43, 0x1f);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectScalarVariable\n\nDECLARE_INTERFACE_(ID3D10EffectScalarVariable, ID3D10EffectVariable)\n{\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE;\n    \n    STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;\n    \n    STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE;\n    \n    STDMETHOD(SetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE;\n    \n    STDMETHOD(SetFloat)(THIS_ float Value) PURE;\n    STDMETHOD(GetFloat)(THIS_ float *pValue) PURE;    \n    \n    STDMETHOD(SetFloatArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetFloatArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE;\n    \n    STDMETHOD(SetInt)(THIS_ int Value) PURE;\n    STDMETHOD(GetInt)(THIS_ int *pValue) PURE;\n    \n    STDMETHOD(SetIntArray)(THIS_ int *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetIntArray)(THIS_ int *pData, UINT Offset, UINT Count) PURE;\n    \n    STDMETHOD(SetBool)(THIS_ BOOL Value) PURE;\n    STDMETHOD(GetBool)(THIS_ BOOL *pValue) PURE;\n    \n    STDMETHOD(SetBoolArray)(THIS_ BOOL *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetBoolArray)(THIS_ BOOL *pData, UINT Offset, UINT Count) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectVectorVariable ////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\ntypedef interface ID3D10EffectVectorVariable ID3D10EffectVectorVariable;\ntypedef interface ID3D10EffectVectorVariable *LPD3D10EFFECTVECTORVARIABLE;\n\n// {62B98C44-1F82-4c67-BCD0-72CF8F217E81}\nDEFINE_GUID(IID_ID3D10EffectVectorVariable, \n0x62b98c44, 0x1f82, 0x4c67, 0xbc, 0xd0, 0x72, 0xcf, 0x8f, 0x21, 0x7e, 0x81);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectVectorVariable\n\nDECLARE_INTERFACE_(ID3D10EffectVectorVariable, ID3D10EffectVariable)\n{\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE;\n    \n    STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;\n    \n    STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE; \n    STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE;\n    \n    STDMETHOD(SetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE;\n    \n    STDMETHOD(SetBoolVector) (THIS_ BOOL *pData) PURE;\n    STDMETHOD(SetIntVector)  (THIS_ int *pData) PURE;\n    STDMETHOD(SetFloatVector)(THIS_ float *pData) PURE;\n\n    STDMETHOD(GetBoolVector) (THIS_ BOOL *pData) PURE;\n    STDMETHOD(GetIntVector)  (THIS_ int *pData) PURE;\n    STDMETHOD(GetFloatVector)(THIS_ float *pData) PURE;\n\n    STDMETHOD(SetBoolVectorArray) (THIS_ BOOL *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(SetIntVectorArray)  (THIS_ int *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(SetFloatVectorArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE;\n\n    STDMETHOD(GetBoolVectorArray) (THIS_ BOOL *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetIntVectorArray)  (THIS_ int *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetFloatVectorArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectMatrixVariable ////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\ntypedef interface ID3D10EffectMatrixVariable ID3D10EffectMatrixVariable;\ntypedef interface ID3D10EffectMatrixVariable *LPD3D10EFFECTMATRIXVARIABLE;\n\n// {50666C24-B82F-4eed-A172-5B6E7E8522E0}\nDEFINE_GUID(IID_ID3D10EffectMatrixVariable, \n0x50666c24, 0xb82f, 0x4eed, 0xa1, 0x72, 0x5b, 0x6e, 0x7e, 0x85, 0x22, 0xe0);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectMatrixVariable\n\nDECLARE_INTERFACE_(ID3D10EffectMatrixVariable, ID3D10EffectVariable)\n{\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE;\n    \n    STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;\n    \n    STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE;\n    \n    STDMETHOD(SetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *pData, UINT ByteOffset, UINT ByteCount) PURE;\n    \n    STDMETHOD(SetMatrix)(THIS_ float *pData) PURE;\n    STDMETHOD(GetMatrix)(THIS_ float *pData) PURE;\n    \n    STDMETHOD(SetMatrixArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetMatrixArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE;\n    \n    STDMETHOD(SetMatrixTranspose)(THIS_ float *pData) PURE;\n    STDMETHOD(GetMatrixTranspose)(THIS_ float *pData) PURE;\n    \n    STDMETHOD(SetMatrixTransposeArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetMatrixTransposeArray)(THIS_ float *pData, UINT Offset, UINT Count) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectStringVariable ////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\ntypedef interface ID3D10EffectStringVariable ID3D10EffectStringVariable;\ntypedef interface ID3D10EffectStringVariable *LPD3D10EFFECTSTRINGVARIABLE;\n\n// {71417501-8DF9-4e0a-A78A-255F9756BAFF}\nDEFINE_GUID(IID_ID3D10EffectStringVariable, \n0x71417501, 0x8df9, 0x4e0a, 0xa7, 0x8a, 0x25, 0x5f, 0x97, 0x56, 0xba, 0xff);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectStringVariable\n\nDECLARE_INTERFACE_(ID3D10EffectStringVariable, ID3D10EffectVariable)\n{\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE;\n    \n    STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;\n    \n    STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE;\n    \n    STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    \n    STDMETHOD(GetString)(THIS_ LPCSTR *ppString) PURE;\n    STDMETHOD(GetStringArray)(THIS_ LPCSTR *ppStrings, UINT Offset, UINT Count) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectShaderResourceVariable ////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\ntypedef interface ID3D10EffectShaderResourceVariable ID3D10EffectShaderResourceVariable;\ntypedef interface ID3D10EffectShaderResourceVariable *LPD3D10EFFECTSHADERRESOURCEVARIABLE;\n\n// {C0A7157B-D872-4b1d-8073-EFC2ACD4B1FC}\nDEFINE_GUID(IID_ID3D10EffectShaderResourceVariable, \n0xc0a7157b, 0xd872, 0x4b1d, 0x80, 0x73, 0xef, 0xc2, 0xac, 0xd4, 0xb1, 0xfc);\n\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectShaderResourceVariable\n\nDECLARE_INTERFACE_(ID3D10EffectShaderResourceVariable, ID3D10EffectVariable)\n{\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE;\n    \n    STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;\n    \n    STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE;\n    \n    STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    \n    STDMETHOD(SetResource)(THIS_ ID3D10ShaderResourceView *pResource) PURE;\n    STDMETHOD(GetResource)(THIS_ ID3D10ShaderResourceView **ppResource) PURE;\n    \n    STDMETHOD(SetResourceArray)(THIS_ ID3D10ShaderResourceView **ppResources, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetResourceArray)(THIS_ ID3D10ShaderResourceView **ppResources, UINT Offset, UINT Count) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectRenderTargetViewVariable //////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\ntypedef interface ID3D10EffectRenderTargetViewVariable ID3D10EffectRenderTargetViewVariable;\ntypedef interface ID3D10EffectRenderTargetViewVariable *LPD3D10EFFECTRENDERTARGETVIEWVARIABLE;\n\n// {28CA0CC3-C2C9-40bb-B57F-67B737122B17}\nDEFINE_GUID(IID_ID3D10EffectRenderTargetViewVariable, \n0x28ca0cc3, 0xc2c9, 0x40bb, 0xb5, 0x7f, 0x67, 0xb7, 0x37, 0x12, 0x2b, 0x17);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectRenderTargetViewVariable\n\nDECLARE_INTERFACE_(ID3D10EffectRenderTargetViewVariable, ID3D10EffectVariable)\n{\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE;\n    \n    STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;\n    \n    STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE;\n    \n    STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    \n    STDMETHOD(SetRenderTarget)(THIS_ ID3D10RenderTargetView *pResource) PURE;\n    STDMETHOD(GetRenderTarget)(THIS_ ID3D10RenderTargetView **ppResource) PURE;\n    \n    STDMETHOD(SetRenderTargetArray)(THIS_ ID3D10RenderTargetView **ppResources, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetRenderTargetArray)(THIS_ ID3D10RenderTargetView **ppResources, UINT Offset, UINT Count) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectDepthStencilViewVariable //////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\ntypedef interface ID3D10EffectDepthStencilViewVariable ID3D10EffectDepthStencilViewVariable;\ntypedef interface ID3D10EffectDepthStencilViewVariable *LPD3D10EFFECTDEPTHSTENCILVIEWVARIABLE;\n\n// {3E02C918-CC79-4985-B622-2D92AD701623}\nDEFINE_GUID(IID_ID3D10EffectDepthStencilViewVariable, \n0x3e02c918, 0xcc79, 0x4985, 0xb6, 0x22, 0x2d, 0x92, 0xad, 0x70, 0x16, 0x23);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectDepthStencilViewVariable\n\nDECLARE_INTERFACE_(ID3D10EffectDepthStencilViewVariable, ID3D10EffectVariable)\n{\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE;\n    \n    STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;\n    \n    STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE;\n    \n    STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    \n    STDMETHOD(SetDepthStencil)(THIS_ ID3D10DepthStencilView *pResource) PURE;\n    STDMETHOD(GetDepthStencil)(THIS_ ID3D10DepthStencilView **ppResource) PURE;\n    \n    STDMETHOD(SetDepthStencilArray)(THIS_ ID3D10DepthStencilView **ppResources, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetDepthStencilArray)(THIS_ ID3D10DepthStencilView **ppResources, UINT Offset, UINT Count) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectConstantBuffer ////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\ntypedef interface ID3D10EffectConstantBuffer ID3D10EffectConstantBuffer;\ntypedef interface ID3D10EffectConstantBuffer *LPD3D10EFFECTCONSTANTBUFFER;\n\n// {56648F4D-CC8B-4444-A5AD-B5A3D76E91B3}\nDEFINE_GUID(IID_ID3D10EffectConstantBuffer, \n0x56648f4d, 0xcc8b, 0x4444, 0xa5, 0xad, 0xb5, 0xa3, 0xd7, 0x6e, 0x91, 0xb3);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectConstantBuffer\n\nDECLARE_INTERFACE_(ID3D10EffectConstantBuffer, ID3D10EffectVariable)\n{\n    STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE;\n    \n    STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;\n    \n    STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE;\n    \n    STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    \n    STDMETHOD(SetConstantBuffer)(THIS_ ID3D10Buffer *pConstantBuffer) PURE;\n    STDMETHOD(GetConstantBuffer)(THIS_ ID3D10Buffer **ppConstantBuffer) PURE;\n    \n    STDMETHOD(SetTextureBuffer)(THIS_ ID3D10ShaderResourceView *pTextureBuffer) PURE;\n    STDMETHOD(GetTextureBuffer)(THIS_ ID3D10ShaderResourceView **ppTextureBuffer) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectShaderVariable ////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\n//----------------------------------------------------------------------------\n// D3D10_EFFECT_SHADER_DESC:\n//\n// Retrieved by ID3D10EffectShaderVariable::GetShaderDesc()\n//----------------------------------------------------------------------------\n\ntypedef struct _D3D10_EFFECT_SHADER_DESC\n{\n    CONST BYTE *pInputSignature;    // Passed into CreateInputLayout,\n                                    // valid on VS and GS only\n    \n    BOOL IsInline;                  // Is this an anonymous shader variable\n                                    // resulting from an inline shader assignment?\n    \n    \n    // -- The following fields are not valid after Optimize() --\n    CONST BYTE *pBytecode;          // Shader bytecode\n    UINT BytecodeLength;\n    \n    LPCSTR SODecl;                  // Stream out declaration string (for GS with SO)\n    \n    UINT NumInputSignatureEntries;  // Number of entries in the input signature\n    UINT NumOutputSignatureEntries; // Number of entries in the output signature\n} D3D10_EFFECT_SHADER_DESC;\n\n\ntypedef interface ID3D10EffectShaderVariable ID3D10EffectShaderVariable;\ntypedef interface ID3D10EffectShaderVariable *LPD3D10EFFECTSHADERVARIABLE;\n\n// {80849279-C799-4797-8C33-0407A07D9E06}\nDEFINE_GUID(IID_ID3D10EffectShaderVariable, \n0x80849279, 0xc799, 0x4797, 0x8c, 0x33, 0x4, 0x7, 0xa0, 0x7d, 0x9e, 0x6);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectShaderVariable\n\nDECLARE_INTERFACE_(ID3D10EffectShaderVariable, ID3D10EffectVariable)\n{\n    STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE;\n    \n    STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;\n    \n    STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE;\n        \n    STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    \n    STDMETHOD(GetShaderDesc)(THIS_ UINT ShaderIndex, D3D10_EFFECT_SHADER_DESC *pDesc) PURE;\n    \n    STDMETHOD(GetVertexShader)(THIS_ UINT ShaderIndex, ID3D10VertexShader **ppVS) PURE;\n    STDMETHOD(GetGeometryShader)(THIS_ UINT ShaderIndex, ID3D10GeometryShader **ppGS) PURE;\n    STDMETHOD(GetPixelShader)(THIS_ UINT ShaderIndex, ID3D10PixelShader **ppPS) PURE;\n    \n    STDMETHOD(GetInputSignatureElementDesc)(THIS_ UINT ShaderIndex, UINT Element, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE;\n    STDMETHOD(GetOutputSignatureElementDesc)(THIS_ UINT ShaderIndex, UINT Element, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectBlendVariable /////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\ntypedef interface ID3D10EffectBlendVariable ID3D10EffectBlendVariable;\ntypedef interface ID3D10EffectBlendVariable *LPD3D10EFFECTBLENDVARIABLE;\n\n// {1FCD2294-DF6D-4eae-86B3-0E9160CFB07B}\nDEFINE_GUID(IID_ID3D10EffectBlendVariable, \n0x1fcd2294, 0xdf6d, 0x4eae, 0x86, 0xb3, 0xe, 0x91, 0x60, 0xcf, 0xb0, 0x7b);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectBlendVariable\n\nDECLARE_INTERFACE_(ID3D10EffectBlendVariable, ID3D10EffectVariable)\n{\n    STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE;\n    \n    STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;\n    \n    STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE;\n    \n    STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    \n    STDMETHOD(GetBlendState)(THIS_ UINT Index, ID3D10BlendState **ppBlendState) PURE;\n    STDMETHOD(GetBackingStore)(THIS_ UINT Index, D3D10_BLEND_DESC *pBlendDesc) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectDepthStencilVariable //////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\ntypedef interface ID3D10EffectDepthStencilVariable ID3D10EffectDepthStencilVariable;\ntypedef interface ID3D10EffectDepthStencilVariable *LPD3D10EFFECTDEPTHSTENCILVARIABLE;\n\n// {AF482368-330A-46a5-9A5C-01C71AF24C8D}\nDEFINE_GUID(IID_ID3D10EffectDepthStencilVariable, \n0xaf482368, 0x330a, 0x46a5, 0x9a, 0x5c, 0x1, 0xc7, 0x1a, 0xf2, 0x4c, 0x8d);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectDepthStencilVariable\n\nDECLARE_INTERFACE_(ID3D10EffectDepthStencilVariable, ID3D10EffectVariable)\n{\n    STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE;\n    \n    STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;\n    \n    STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE;\n    \n    STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    \n    STDMETHOD(GetDepthStencilState)(THIS_ UINT Index, ID3D10DepthStencilState **ppDepthStencilState) PURE;\n    STDMETHOD(GetBackingStore)(THIS_ UINT Index, D3D10_DEPTH_STENCIL_DESC *pDepthStencilDesc) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectRasterizerVariable ////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\ntypedef interface ID3D10EffectRasterizerVariable ID3D10EffectRasterizerVariable;\ntypedef interface ID3D10EffectRasterizerVariable *LPD3D10EFFECTRASTERIZERVARIABLE;\n\n// {21AF9F0E-4D94-4ea9-9785-2CB76B8C0B34}\nDEFINE_GUID(IID_ID3D10EffectRasterizerVariable, \n0x21af9f0e, 0x4d94, 0x4ea9, 0x97, 0x85, 0x2c, 0xb7, 0x6b, 0x8c, 0xb, 0x34);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectRasterizerVariable\n\nDECLARE_INTERFACE_(ID3D10EffectRasterizerVariable, ID3D10EffectVariable)\n{\n    STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE;\n    \n    STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;\n    \n    STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE;\n    \n    STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    \n    STDMETHOD(GetRasterizerState)(THIS_ UINT Index, ID3D10RasterizerState **ppRasterizerState) PURE;\n    STDMETHOD(GetBackingStore)(THIS_ UINT Index, D3D10_RASTERIZER_DESC *pRasterizerDesc) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectSamplerVariable ///////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\ntypedef interface ID3D10EffectSamplerVariable ID3D10EffectSamplerVariable;\ntypedef interface ID3D10EffectSamplerVariable *LPD3D10EFFECTSAMPLERVARIABLE;\n\n// {6530D5C7-07E9-4271-A418-E7CE4BD1E480}\nDEFINE_GUID(IID_ID3D10EffectSamplerVariable, \n0x6530d5c7, 0x7e9, 0x4271, 0xa4, 0x18, 0xe7, 0xce, 0x4b, 0xd1, 0xe4, 0x80);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectSamplerVariable\n\nDECLARE_INTERFACE_(ID3D10EffectSamplerVariable, ID3D10EffectVariable)\n{\n    STDMETHOD_(ID3D10EffectType*, GetType)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_VARIABLE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetMemberBySemantic)(THIS_ LPCSTR Semantic) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetElement)(THIS_ UINT Index) PURE;\n    \n    STDMETHOD_(ID3D10EffectConstantBuffer*, GetParentConstantBuffer)(THIS) PURE;\n    \n    STDMETHOD_(ID3D10EffectScalarVariable*, AsScalar)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectVectorVariable*, AsVector)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectMatrixVariable*, AsMatrix)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectStringVariable*, AsString)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderResourceVariable*, AsShaderResource)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRenderTargetViewVariable*, AsRenderTargetView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilViewVariable*, AsDepthStencilView)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectConstantBuffer*, AsConstantBuffer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectShaderVariable*, AsShader)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectBlendVariable*, AsBlend)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectDepthStencilVariable*, AsDepthStencil)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectRasterizerVariable*, AsRasterizer)(THIS) PURE;\n    STDMETHOD_(ID3D10EffectSamplerVariable*, AsSampler)(THIS) PURE;\n    \n    STDMETHOD(SetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    STDMETHOD(GetRawValue)(THIS_ void *pData, UINT Offset, UINT Count) PURE;\n    \n    STDMETHOD(GetSampler)(THIS_ UINT Index, ID3D10SamplerState **ppSampler) PURE;\n    STDMETHOD(GetBackingStore)(THIS_ UINT Index, D3D10_SAMPLER_DESC *pSamplerDesc) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectPass //////////////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\n//----------------------------------------------------------------------------\n// D3D10_PASS_DESC:\n//\n// Retrieved by ID3D10EffectPass::GetDesc()\n//----------------------------------------------------------------------------\n\ntypedef struct _D3D10_PASS_DESC\n{\n    LPCSTR Name;                    // Name of this pass (NULL if not anonymous)    \n    UINT Annotations;               // Number of annotations on this pass\n    \n    BYTE *pIAInputSignature;        // Signature from VS or GS (if there is no VS)\n                                    // or NULL if neither exists\n    SIZE_T IAInputSignatureSize;    // Singature size in bytes                                \n                                    \n    UINT StencilRef;                // Specified in SetDepthStencilState()\n    UINT SampleMask;                // Specified in SetBlendState()\n    FLOAT BlendFactor[4];           // Specified in SetBlendState()\n} D3D10_PASS_DESC;\n\n//----------------------------------------------------------------------------\n// D3D10_PASS_SHADER_DESC:\n//\n// Retrieved by ID3D10EffectPass::Get**ShaderDesc()\n//----------------------------------------------------------------------------\n\ntypedef struct _D3D10_PASS_SHADER_DESC\n{\n    ID3D10EffectShaderVariable *pShaderVariable;    // The variable that this shader came from.\n                                                    // If this is an inline shader assignment,\n                                                    //   the returned interface will be an \n                                                    //   anonymous shader variable, which is\n                                                    //   not retrievable any other way.  It's\n                                                    //   name in the variable description will\n                                                    //   be \"$Anonymous\".\n                                                    // If there is no assignment of this type in\n                                                    //   the pass block, pShaderVariable != NULL,\n                                                    //   but pShaderVariable->IsValid() == FALSE.\n    \n    UINT                        ShaderIndex;        // The element of pShaderVariable (if an array)\n                                                    // or 0 if not applicable\n} D3D10_PASS_SHADER_DESC;\n\ntypedef interface ID3D10EffectPass ID3D10EffectPass;\ntypedef interface ID3D10EffectPass *LPD3D10EFFECTPASS;\n\n// {5CFBEB89-1A06-46e0-B282-E3F9BFA36A54}\nDEFINE_GUID(IID_ID3D10EffectPass, \n0x5cfbeb89, 0x1a06, 0x46e0, 0xb2, 0x82, 0xe3, 0xf9, 0xbf, 0xa3, 0x6a, 0x54);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectPass\n\nDECLARE_INTERFACE(ID3D10EffectPass)\n{\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_PASS_DESC *pDesc) PURE;\n    \n    STDMETHOD(GetVertexShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *pDesc) PURE;\n    STDMETHOD(GetGeometryShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *pDesc) PURE;\n    STDMETHOD(GetPixelShaderDesc)(THIS_ D3D10_PASS_SHADER_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD(Apply)(THIS_ UINT Flags) PURE;\n    \n    STDMETHOD(ComputeStateBlockMask)(THIS_ D3D10_STATE_BLOCK_MASK *pStateBlockMask) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectTechnique /////////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\n//----------------------------------------------------------------------------\n// D3D10_TECHNIQUE_DESC:\n//\n// Retrieved by ID3D10EffectTechnique::GetDesc()\n//----------------------------------------------------------------------------\n\ntypedef struct _D3D10_TECHNIQUE_DESC\n{\n    LPCSTR  Name;                   // Name of this technique (NULL if not anonymous)\n    UINT    Passes;                 // Number of passes contained within\n    UINT    Annotations;            // Number of annotations on this technique\n} D3D10_TECHNIQUE_DESC;\n\ntypedef interface ID3D10EffectTechnique ID3D10EffectTechnique;\ntypedef interface ID3D10EffectTechnique *LPD3D10EFFECTTECHNIQUE;\n\n// {DB122CE8-D1C9-4292-B237-24ED3DE8B175}\nDEFINE_GUID(IID_ID3D10EffectTechnique, \n0xdb122ce8, 0xd1c9, 0x4292, 0xb2, 0x37, 0x24, 0xed, 0x3d, 0xe8, 0xb1, 0x75);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectTechnique\n\nDECLARE_INTERFACE(ID3D10EffectTechnique)\n{\n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3D10_TECHNIQUE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetAnnotationByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD_(ID3D10EffectPass*, GetPassByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectPass*, GetPassByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD(ComputeStateBlockMask)(THIS_ D3D10_STATE_BLOCK_MASK *pStateBlockMask) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10Effect //////////////////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\n//----------------------------------------------------------------------------\n// D3D10_EFFECT_DESC:\n//\n// Retrieved by ID3D10Effect::GetDesc()\n//----------------------------------------------------------------------------\n\ntypedef struct _D3D10_EFFECT_DESC\n{\n    \n    BOOL    IsChildEffect;          // TRUE if this is a child effect, \n                                    // FALSE if this is standalone or an effect pool.\n                                    \n    UINT    ConstantBuffers;        // Number of constant buffers in this effect,\n                                    // excluding the effect pool.\n    UINT    SharedConstantBuffers;  // Number of constant buffers shared in this\n                                    // effect's pool.\n                                    \n    UINT    GlobalVariables;        // Number of global variables in this effect,\n                                    // excluding the effect pool.\n    UINT    SharedGlobalVariables;  // Number of global variables shared in this\n                                    // effect's pool.\n                                    \n    UINT    Techniques;             // Number of techniques in this effect,\n                                    // excluding the effect pool.\n} D3D10_EFFECT_DESC;\n\ntypedef interface ID3D10Effect ID3D10Effect;\ntypedef interface ID3D10Effect *LPD3D10EFFECT;\n\n// {51B0CA8B-EC0B-4519-870D-8EE1CB5017C7}\nDEFINE_GUID(IID_ID3D10Effect, \n0x51b0ca8b, 0xec0b, 0x4519, 0x87, 0xd, 0x8e, 0xe1, 0xcb, 0x50, 0x17, 0xc7);\n\n#undef INTERFACE\n#define INTERFACE ID3D10Effect\n\nDECLARE_INTERFACE_(ID3D10Effect, IUnknown)\n{\n    // IUnknown\n    STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    \n    STDMETHOD_(BOOL, IsValid)(THIS) PURE;\n    STDMETHOD_(BOOL, IsPool)(THIS) PURE;\n\n    // Managing D3D Device\n    STDMETHOD(GetDevice)(THIS_ ID3D10Device** ppDevice) PURE;\n    \n    // New Reflection APIs\n    STDMETHOD(GetDesc)(THIS_ D3D10_EFFECT_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10EffectConstantBuffer*, GetConstantBufferByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectConstantBuffer*, GetConstantBufferByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD_(ID3D10EffectVariable*, GetVariableByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetVariableByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(ID3D10EffectVariable*, GetVariableBySemantic)(THIS_ LPCSTR Semantic) PURE;\n    \n    STDMETHOD_(ID3D10EffectTechnique*, GetTechniqueByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10EffectTechnique*, GetTechniqueByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD(Optimize)(THIS) PURE;\n    STDMETHOD_(BOOL, IsOptimized)(THIS) PURE;\n\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// ID3D10EffectPool //////////////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\ntypedef interface ID3D10EffectPool ID3D10EffectPool;\ntypedef interface ID3D10EffectPool *LPD3D10EFFECTPOOL;\n\n// {9537AB04-3250-412e-8213-FCD2F8677933}\nDEFINE_GUID(IID_ID3D10EffectPool, \n0x9537ab04, 0x3250, 0x412e, 0x82, 0x13, 0xfc, 0xd2, 0xf8, 0x67, 0x79, 0x33);\n\n#undef INTERFACE\n#define INTERFACE ID3D10EffectPool\n\nDECLARE_INTERFACE_(ID3D10EffectPool, IUnknown)\n{\n    // IUnknown\n    STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n    \n    STDMETHOD_(ID3D10Effect*, AsEffect)(THIS) PURE;\n    \n    // No public methods\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// APIs //////////////////////////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif //__cplusplus\n\n//----------------------------------------------------------------------------\n// D3D10CreateEffectFromXXXX:\n// --------------------------\n// Creates an effect from a binary effect or file\n//\n// Parameters:\n//\n// [in]\n//\n//\n//  pData\n//      Blob of effect data, either ASCII (uncompiled, for D3D10CompileEffectFromMemory) or binary (compiled, for D3D10CreateEffect*)\n//  DataLength\n//      Length of the data blob\n//\n//  pSrcFileName\n//      Name of the ASCII Effect file pData was obtained from\n//\n//  pDefines\n//      Optional NULL-terminated array of preprocessor macro definitions.\n//  pInclude\n//      Optional interface pointer to use for handling #include directives.\n//      If this parameter is NULL, #includes will be honored when compiling\n//      from file, and will error when compiling from resource or memory.\n//  HLSLFlags\n//      Compilation flags pertaining to shaders and data types, honored by\n//      the HLSL compiler\n//  FXFlags\n//      Compilation flags pertaining to Effect compilation, honored\n//      by the Effect compiler\n//  pDevice\n//      Pointer to the D3D10 device on which to create Effect resources\n//  pEffectPool\n//      Pointer to an Effect pool to share variables with or NULL\n//\n// [out]\n//\n//  ppEffect\n//      Address of the newly created Effect interface\n//  ppEffectPool\n//      Address of the newly created Effect pool interface\n//  ppErrors\n//      If non-NULL, address of a buffer with error messages that occurred \n//      during parsing or compilation\n//\n//----------------------------------------------------------------------------\n\nHRESULT WINAPI D3D10CompileEffectFromMemory(void *pData, SIZE_T DataLength, LPCSTR pSrcFileName, CONST D3D10_SHADER_MACRO *pDefines, \n    ID3D10Include *pInclude, UINT HLSLFlags, UINT FXFlags, \n    ID3D10Blob **ppCompiledEffect, ID3D10Blob **ppErrors);\n\nHRESULT WINAPI D3D10CreateEffectFromMemory(void *pData, SIZE_T DataLength, UINT FXFlags, ID3D10Device *pDevice, \n    ID3D10EffectPool *pEffectPool, ID3D10Effect **ppEffect);\n\nHRESULT WINAPI D3D10CreateEffectPoolFromMemory(void *pData, SIZE_T DataLength, UINT FXFlags, ID3D10Device *pDevice,\n    ID3D10EffectPool **ppEffectPool);\n\n\n//----------------------------------------------------------------------------\n// D3D10DisassembleEffect:\n// -----------------------\n// Takes an effect interface, and returns a buffer containing text assembly.\n//\n// Parameters:\n//  pEffect\n//      Pointer to the runtime effect interface.\n//  EnableColorCode\n//      Emit HTML tags for color coding the output?\n//  ppDisassembly\n//      Returns a buffer containing the disassembled effect.\n//----------------------------------------------------------------------------\n\nHRESULT WINAPI D3D10DisassembleEffect(ID3D10Effect *pEffect, BOOL EnableColorCode, ID3D10Blob **ppDisassembly);\n\n#ifdef __cplusplus\n}\n#endif //__cplusplus\n\n#endif //__D3D10EFFECT_H__\n\n\n"
  },
  {
    "path": "Include/D3D10shader.h",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n//  Copyright (c) Microsoft Corporation.  All rights reserved.\n//\n//  File:       D3D10Shader.h\n//  Content:    D3D10 Shader Types and APIs\n//\n//////////////////////////////////////////////////////////////////////////////\n\n#ifndef __D3D10SHADER_H__\n#define __D3D10SHADER_H__\n\n#include \"d3d10.h\"\n\n\n//---------------------------------------------------------------------------\n// D3D10_TX_VERSION:\n// --------------\n// Version token used to create a procedural texture filler in effects\n// Used by D3D10Fill[]TX functions\n//---------------------------------------------------------------------------\n#define D3D10_TX_VERSION(_Major,_Minor) (('T' << 24) | ('X' << 16) | ((_Major) << 8) | (_Minor))\n\n\n//----------------------------------------------------------------------------\n// D3D10SHADER flags:\n// -----------------\n// D3D10_SHADER_DEBUG\n//   Insert debug file/line/type/symbol information.\n//\n// D3D10_SHADER_SKIP_VALIDATION\n//   Do not validate the generated code against known capabilities and\n//   constraints.  This option is only recommended when compiling shaders\n//   you KNOW will work.  (ie. have compiled before without this option.)\n//   Shaders are always validated by D3D before they are set to the device.\n//\n// D3D10_SHADER_SKIP_OPTIMIZATION \n//   Instructs the compiler to skip optimization steps during code generation.\n//   Unless you are trying to isolate a problem in your code using this option \n//   is not recommended.\n//\n// D3D10_SHADER_PACK_MATRIX_ROW_MAJOR\n//   Unless explicitly specified, matrices will be packed in row-major order\n//   on input and output from the shader.\n//\n// D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR\n//   Unless explicitly specified, matrices will be packed in column-major \n//   order on input and output from the shader.  This is generally more \n//   efficient, since it allows vector-matrix multiplication to be performed\n//   using a series of dot-products.\n//\n// D3D10_SHADER_PARTIAL_PRECISION\n//   Force all computations in resulting shader to occur at partial precision.\n//   This may result in faster evaluation of shaders on some hardware.\n//\n// D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT\n//   Force compiler to compile against the next highest available software\n//   target for vertex shaders.  This flag also turns optimizations off, \n//   and debugging on.  \n//\n// D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT\n//   Force compiler to compile against the next highest available software\n//   target for pixel shaders.  This flag also turns optimizations off, \n//   and debugging on.\n//\n// D3D10_SHADER_NO_PRESHADER\n//   Disables Preshaders. Using this flag will cause the compiler to not \n//   pull out static expression for evaluation on the host cpu\n//\n// D3D10_SHADER_AVOID_FLOW_CONTROL\n//   Hint compiler to avoid flow-control constructs where possible.\n//\n// D3D10_SHADER_PREFER_FLOW_CONTROL\n//   Hint compiler to prefer flow-control constructs where possible.\n//\n// D3D10_SHADER_ENABLE_STRICTNESS\n//   By default, the HLSL/Effect compilers are not strict on deprecated syntax.\n//   Specifying this flag enables the strict mode. Deprecated syntax may be\n//   removed in a future release, and enabling syntax is a good way to make sure\n//   your shaders comply to the latest spec.\n//\n// D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY\n//   This enables older shaders to compile to 4_0 targets.\n//\n//----------------------------------------------------------------------------\n\n#define D3D10_SHADER_DEBUG                          (1 << 0)\n#define D3D10_SHADER_SKIP_VALIDATION                (1 << 1)\n#define D3D10_SHADER_SKIP_OPTIMIZATION              (1 << 2)\n#define D3D10_SHADER_PACK_MATRIX_ROW_MAJOR          (1 << 3)\n#define D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR       (1 << 4)\n#define D3D10_SHADER_PARTIAL_PRECISION              (1 << 5)\n#define D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT       (1 << 6)\n#define D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT       (1 << 7)\n#define D3D10_SHADER_NO_PRESHADER                   (1 << 8)\n#define D3D10_SHADER_AVOID_FLOW_CONTROL             (1 << 9)\n#define D3D10_SHADER_PREFER_FLOW_CONTROL            (1 << 10)\n#define D3D10_SHADER_ENABLE_STRICTNESS              (1 << 11)\n#define D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY (1 << 12)\n#define D3D10_SHADER_IEEE_STRICTNESS                (1 << 13)\n#define D3D10_SHADER_WARNINGS_ARE_ERRORS            (1 << 18)\n\n\n// optimization level flags\n#define D3D10_SHADER_OPTIMIZATION_LEVEL0            (1 << 14)\n#define D3D10_SHADER_OPTIMIZATION_LEVEL1            0\n#define D3D10_SHADER_OPTIMIZATION_LEVEL2            ((1 << 14) | (1 << 15))\n#define D3D10_SHADER_OPTIMIZATION_LEVEL3            (1 << 15)\n\n\n\n\ntypedef D3D_SHADER_MACRO D3D10_SHADER_MACRO;\ntypedef D3D10_SHADER_MACRO* LPD3D10_SHADER_MACRO;\n\n\ntypedef D3D_SHADER_VARIABLE_CLASS D3D10_SHADER_VARIABLE_CLASS;\ntypedef D3D10_SHADER_VARIABLE_CLASS* LPD3D10_SHADER_VARIABLE_CLASS;\n\ntypedef D3D_SHADER_VARIABLE_FLAGS D3D10_SHADER_VARIABLE_FLAGS;\ntypedef D3D10_SHADER_VARIABLE_FLAGS* LPD3D10_SHADER_VARIABLE_FLAGS;\n\ntypedef D3D_SHADER_VARIABLE_TYPE D3D10_SHADER_VARIABLE_TYPE;\ntypedef D3D10_SHADER_VARIABLE_TYPE* LPD3D10_SHADER_VARIABLE_TYPE;\n\ntypedef D3D_SHADER_INPUT_FLAGS D3D10_SHADER_INPUT_FLAGS;\ntypedef D3D10_SHADER_INPUT_FLAGS* LPD3D10_SHADER_INPUT_FLAGS;\n\ntypedef D3D_SHADER_INPUT_TYPE D3D10_SHADER_INPUT_TYPE;\ntypedef D3D10_SHADER_INPUT_TYPE* LPD3D10_SHADER_INPUT_TYPE;\n\ntypedef D3D_SHADER_CBUFFER_FLAGS D3D10_SHADER_CBUFFER_FLAGS;\ntypedef D3D10_SHADER_CBUFFER_FLAGS* LPD3D10_SHADER_CBUFFER_FLAGS;\n\ntypedef D3D_CBUFFER_TYPE D3D10_CBUFFER_TYPE;\ntypedef D3D10_CBUFFER_TYPE* LPD3D10_CBUFFER_TYPE;\n\ntypedef D3D_NAME D3D10_NAME;\n\ntypedef D3D_RESOURCE_RETURN_TYPE D3D10_RESOURCE_RETURN_TYPE;\n\ntypedef D3D_REGISTER_COMPONENT_TYPE D3D10_REGISTER_COMPONENT_TYPE;\n\ntypedef D3D_INCLUDE_TYPE D3D10_INCLUDE_TYPE;\n\n// ID3D10Include has been made version-neutral and moved to d3dcommon.h.\ntypedef interface ID3DInclude ID3D10Include;\ntypedef interface ID3DInclude* LPD3D10INCLUDE;\n#define IID_ID3D10Include IID_ID3DInclude\n\n\n//----------------------------------------------------------------------------\n// ID3D10ShaderReflection:\n//----------------------------------------------------------------------------\n\n//\n// Structure definitions\n//\n\ntypedef struct _D3D10_SHADER_DESC\n{\n    UINT                    Version;                     // Shader version\n    LPCSTR                  Creator;                     // Creator string\n    UINT                    Flags;                       // Shader compilation/parse flags\n    \n    UINT                    ConstantBuffers;             // Number of constant buffers\n    UINT                    BoundResources;              // Number of bound resources\n    UINT                    InputParameters;             // Number of parameters in the input signature\n    UINT                    OutputParameters;            // Number of parameters in the output signature\n\n    UINT                    InstructionCount;            // Number of emitted instructions\n    UINT                    TempRegisterCount;           // Number of temporary registers used \n    UINT                    TempArrayCount;              // Number of temporary arrays used\n    UINT                    DefCount;                    // Number of constant defines \n    UINT                    DclCount;                    // Number of declarations (input + output)\n    UINT                    TextureNormalInstructions;   // Number of non-categorized texture instructions\n    UINT                    TextureLoadInstructions;     // Number of texture load instructions\n    UINT                    TextureCompInstructions;     // Number of texture comparison instructions\n    UINT                    TextureBiasInstructions;     // Number of texture bias instructions\n    UINT                    TextureGradientInstructions; // Number of texture gradient instructions\n    UINT                    FloatInstructionCount;       // Number of floating point arithmetic instructions used\n    UINT                    IntInstructionCount;         // Number of signed integer arithmetic instructions used\n    UINT                    UintInstructionCount;        // Number of unsigned integer arithmetic instructions used\n    UINT                    StaticFlowControlCount;      // Number of static flow control instructions used\n    UINT                    DynamicFlowControlCount;     // Number of dynamic flow control instructions used\n    UINT                    MacroInstructionCount;       // Number of macro instructions used\n    UINT                    ArrayInstructionCount;       // Number of array instructions used\n    UINT                    CutInstructionCount;         // Number of cut instructions used\n    UINT                    EmitInstructionCount;        // Number of emit instructions used\n    D3D10_PRIMITIVE_TOPOLOGY GSOutputTopology;           // Geometry shader output topology\n    UINT                    GSMaxOutputVertexCount;      // Geometry shader maximum output vertex count\n} D3D10_SHADER_DESC;\n\ntypedef struct _D3D10_SHADER_BUFFER_DESC\n{\n    LPCSTR                  Name;           // Name of the constant buffer\n    D3D10_CBUFFER_TYPE      Type;           // Indicates that this is a CBuffer or TBuffer\n    UINT                    Variables;      // Number of member variables\n    UINT                    Size;           // Size of CB (in bytes)\n    UINT                    uFlags;         // Buffer description flags\n} D3D10_SHADER_BUFFER_DESC;\n\ntypedef struct _D3D10_SHADER_VARIABLE_DESC\n{\n    LPCSTR                  Name;           // Name of the variable\n    UINT                    StartOffset;    // Offset in constant buffer's backing store\n    UINT                    Size;           // Size of variable (in bytes)\n    UINT                    uFlags;         // Variable flags\n    LPVOID                  DefaultValue;   // Raw pointer to default value\n} D3D10_SHADER_VARIABLE_DESC;\n\ntypedef struct _D3D10_SHADER_TYPE_DESC\n{\n    D3D10_SHADER_VARIABLE_CLASS Class;          // Variable class (e.g. object, matrix, etc.)\n    D3D10_SHADER_VARIABLE_TYPE  Type;           // Variable type (e.g. float, sampler, etc.)\n    UINT                        Rows;           // Number of rows (for matrices, 1 for other numeric, 0 if not applicable)\n    UINT                        Columns;        // Number of columns (for vectors & matrices, 1 for other numeric, 0 if not applicable)\n    UINT                        Elements;       // Number of elements (0 if not an array)\n    UINT                        Members;        // Number of members (0 if not a structure)\n    UINT                        Offset;         // Offset from the start of structure (0 if not a structure member) \n} D3D10_SHADER_TYPE_DESC;\n\ntypedef struct _D3D10_SHADER_INPUT_BIND_DESC\n{\n    LPCSTR                      Name;           // Name of the resource\n    D3D10_SHADER_INPUT_TYPE     Type;           // Type of resource (e.g. texture, cbuffer, etc.)\n    UINT                        BindPoint;      // Starting bind point\n    UINT                        BindCount;      // Number of contiguous bind points (for arrays)\n    \n    UINT                        uFlags;         // Input binding flags\n    D3D10_RESOURCE_RETURN_TYPE  ReturnType;     // Return type (if texture)\n    D3D10_SRV_DIMENSION         Dimension;      // Dimension (if texture)\n    UINT                        NumSamples;     // Number of samples (0 if not MS texture)\n} D3D10_SHADER_INPUT_BIND_DESC;\n\ntypedef struct _D3D10_SIGNATURE_PARAMETER_DESC\n{\n    LPCSTR                      SemanticName;   // Name of the semantic\n    UINT                        SemanticIndex;  // Index of the semantic\n    UINT                        Register;       // Number of member variables\n    D3D10_NAME                  SystemValueType;// A predefined system value, or D3D10_NAME_UNDEFINED if not applicable\n    D3D10_REGISTER_COMPONENT_TYPE ComponentType;// Scalar type (e.g. uint, float, etc.)\n    BYTE                        Mask;           // Mask to indicate which components of the register\n                                                // are used (combination of D3D10_COMPONENT_MASK values)\n    BYTE                        ReadWriteMask;  // Mask to indicate whether a given component is \n                                                // never written (if this is an output signature) or\n                                                // always read (if this is an input signature).\n                                                // (combination of D3D10_COMPONENT_MASK values)\n    \n} D3D10_SIGNATURE_PARAMETER_DESC;\n\n\n//\n// Interface definitions\n//\n\ntypedef interface ID3D10ShaderReflectionType ID3D10ShaderReflectionType;\ntypedef interface ID3D10ShaderReflectionType *LPD3D10SHADERREFLECTIONTYPE;\n\n// {C530AD7D-9B16-4395-A979-BA2ECFF83ADD}\nDEFINE_GUID(IID_ID3D10ShaderReflectionType, \n0xc530ad7d, 0x9b16, 0x4395, 0xa9, 0x79, 0xba, 0x2e, 0xcf, 0xf8, 0x3a, 0xdd);\n\n#undef INTERFACE\n#define INTERFACE ID3D10ShaderReflectionType\n\nDECLARE_INTERFACE(ID3D10ShaderReflectionType)\n{\n    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_TYPE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10ShaderReflectionType*, GetMemberTypeByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10ShaderReflectionType*, GetMemberTypeByName)(THIS_ LPCSTR Name) PURE;\n    STDMETHOD_(LPCSTR, GetMemberTypeName)(THIS_ UINT Index) PURE;\n};\n\ntypedef interface ID3D10ShaderReflectionVariable ID3D10ShaderReflectionVariable;\ntypedef interface ID3D10ShaderReflectionVariable *LPD3D10SHADERREFLECTIONVARIABLE;\n\n// {1BF63C95-2650-405d-99C1-3636BD1DA0A1}\nDEFINE_GUID(IID_ID3D10ShaderReflectionVariable, \n0x1bf63c95, 0x2650, 0x405d, 0x99, 0xc1, 0x36, 0x36, 0xbd, 0x1d, 0xa0, 0xa1);\n\n#undef INTERFACE\n#define INTERFACE ID3D10ShaderReflectionVariable\n\nDECLARE_INTERFACE(ID3D10ShaderReflectionVariable)\n{\n    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_VARIABLE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10ShaderReflectionType*, GetType)(THIS) PURE;\n};\n\ntypedef interface ID3D10ShaderReflectionConstantBuffer ID3D10ShaderReflectionConstantBuffer;\ntypedef interface ID3D10ShaderReflectionConstantBuffer *LPD3D10SHADERREFLECTIONCONSTANTBUFFER;\n\n// {66C66A94-DDDD-4b62-A66A-F0DA33C2B4D0}\nDEFINE_GUID(IID_ID3D10ShaderReflectionConstantBuffer, \n0x66c66a94, 0xdddd, 0x4b62, 0xa6, 0x6a, 0xf0, 0xda, 0x33, 0xc2, 0xb4, 0xd0);\n\n#undef INTERFACE\n#define INTERFACE ID3D10ShaderReflectionConstantBuffer\n\nDECLARE_INTERFACE(ID3D10ShaderReflectionConstantBuffer)\n{\n    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_BUFFER_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10ShaderReflectionVariable*, GetVariableByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10ShaderReflectionVariable*, GetVariableByName)(THIS_ LPCSTR Name) PURE;\n};\n\ntypedef interface ID3D10ShaderReflection ID3D10ShaderReflection;\ntypedef interface ID3D10ShaderReflection *LPD3D10SHADERREFLECTION;\n\n// {D40E20B6-F8F7-42ad-AB20-4BAF8F15DFAA}\nDEFINE_GUID(IID_ID3D10ShaderReflection, \n0xd40e20b6, 0xf8f7, 0x42ad, 0xab, 0x20, 0x4b, 0xaf, 0x8f, 0x15, 0xdf, 0xaa);\n\n#undef INTERFACE\n#define INTERFACE ID3D10ShaderReflection\n\nDECLARE_INTERFACE_(ID3D10ShaderReflection, IUnknown)\n{\n    STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n\n    STDMETHOD(GetDesc)(THIS_ D3D10_SHADER_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D10ShaderReflectionConstantBuffer*, GetConstantBufferByIndex)(THIS_ UINT Index) PURE;\n    STDMETHOD_(ID3D10ShaderReflectionConstantBuffer*, GetConstantBufferByName)(THIS_ LPCSTR Name) PURE;\n    \n    STDMETHOD(GetResourceBindingDesc)(THIS_ UINT ResourceIndex, D3D10_SHADER_INPUT_BIND_DESC *pDesc) PURE;\n    \n    STDMETHOD(GetInputParameterDesc)(THIS_ UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE;\n    STDMETHOD(GetOutputParameterDesc)(THIS_ UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC *pDesc) PURE;\n    \n};\n\n//////////////////////////////////////////////////////////////////////////////\n// APIs //////////////////////////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif //__cplusplus\n\n\n//----------------------------------------------------------------------------\n// D3D10CompileShader:\n// ------------------\n// Compiles a shader.\n//\n// Parameters:\n//  pSrcFile\n//      Source file name.\n//  hSrcModule\n//      Module handle. if NULL, current module will be used.\n//  pSrcResource\n//      Resource name in module.\n//  pSrcData\n//      Pointer to source code.\n//  SrcDataLen\n//      Size of source code, in bytes.\n//  pDefines\n//      Optional NULL-terminated array of preprocessor macro definitions.\n//  pInclude\n//      Optional interface pointer to use for handling #include directives.\n//      If this parameter is NULL, #includes will be honored when compiling\n//      from file, and will error when compiling from resource or memory.\n//  pFunctionName\n//      Name of the entrypoint function where execution should begin.\n//  pProfile\n//      Instruction set to be used when generating code.  The D3D10 entry\n//      point currently supports only \"vs_4_0\", \"ps_4_0\", and \"gs_4_0\".\n//  Flags\n//      See D3D10_SHADER_xxx flags.\n//  ppShader\n//      Returns a buffer containing the created shader.  This buffer contains\n//      the compiled shader code, as well as any embedded debug and symbol\n//      table info.  (See D3D10GetShaderConstantTable)\n//  ppErrorMsgs\n//      Returns a buffer containing a listing of errors and warnings that were\n//      encountered during the compile.  If you are running in a debugger,\n//      these are the same messages you will see in your debug output.\n//----------------------------------------------------------------------------\n\nHRESULT WINAPI D3D10CompileShader(LPCSTR pSrcData, SIZE_T SrcDataLen, LPCSTR pFileName, CONST D3D10_SHADER_MACRO* pDefines, LPD3D10INCLUDE pInclude, \n    LPCSTR pFunctionName, LPCSTR pProfile, UINT Flags, ID3D10Blob** ppShader, ID3D10Blob** ppErrorMsgs);\n\n//----------------------------------------------------------------------------\n// D3D10DisassembleShader:\n// ----------------------\n// Takes a binary shader, and returns a buffer containing text assembly.\n//\n// Parameters:\n//  pShader\n//      Pointer to the shader byte code.\n//  BytecodeLength\n//      Size of the shader byte code in bytes.\n//  EnableColorCode\n//      Emit HTML tags for color coding the output?\n//  pComments\n//      Pointer to a comment string to include at the top of the shader.\n//  ppDisassembly\n//      Returns a buffer containing the disassembled shader.\n//----------------------------------------------------------------------------\n\nHRESULT WINAPI D3D10DisassembleShader(CONST void *pShader, SIZE_T BytecodeLength, BOOL EnableColorCode, LPCSTR pComments, ID3D10Blob** ppDisassembly);\n\n\n//----------------------------------------------------------------------------\n// D3D10GetPixelShaderProfile/D3D10GetVertexShaderProfile/D3D10GetGeometryShaderProfile:\n// -----------------------------------------------------\n// Returns the name of the HLSL profile best suited to a given device.\n//\n// Parameters:\n//  pDevice\n//      Pointer to the device in question\n//----------------------------------------------------------------------------\n\nLPCSTR WINAPI D3D10GetPixelShaderProfile(ID3D10Device *pDevice);\n\nLPCSTR WINAPI D3D10GetVertexShaderProfile(ID3D10Device *pDevice);\n\nLPCSTR WINAPI D3D10GetGeometryShaderProfile(ID3D10Device *pDevice);\n\n//----------------------------------------------------------------------------\n// D3D10ReflectShader:\n// ------------------\n// Creates a shader reflection object that can be used to retrieve information\n// about a compiled shader\n//\n// Parameters:\n//  pShaderBytecode\n//      Pointer to a compiled shader (same pointer that is passed into\n//      ID3D10Device::CreateShader)\n//  BytecodeLength\n//      Length of the shader bytecode buffer\n//  ppReflector\n//      [out] Returns a ID3D10ShaderReflection object that can be used to \n//      retrieve shader resource and constant buffer information\n//\n//----------------------------------------------------------------------------\n\nHRESULT WINAPI D3D10ReflectShader(CONST void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10ShaderReflection **ppReflector);\n\n//----------------------------------------------------------------------------\n// D3D10PreprocessShader\n// ---------------------\n// Creates a shader reflection object that can be used to retrieve information\n// about a compiled shader\n//\n// Parameters:\n//  pSrcData\n//      Pointer to source code\n//  SrcDataLen\n//      Size of source code, in bytes\n//  pFileName\n//      Source file name (used for error output)\n//  pDefines\n//      Optional NULL-terminated array of preprocessor macro definitions.\n//  pInclude\n//      Optional interface pointer to use for handling #include directives.\n//      If this parameter is NULL, #includes will be honored when assembling\n//      from file, and will error when assembling from resource or memory.\n//  ppShaderText\n//      Returns a buffer containing a single large string that represents\n//      the resulting formatted token stream\n//  ppErrorMsgs\n//      Returns a buffer containing a listing of errors and warnings that were\n//      encountered during assembly.  If you are running in a debugger,\n//      these are the same messages you will see in your debug output.\n//----------------------------------------------------------------------------\n\nHRESULT WINAPI D3D10PreprocessShader(LPCSTR pSrcData, SIZE_T SrcDataSize, LPCSTR pFileName, CONST D3D10_SHADER_MACRO* pDefines, \n    LPD3D10INCLUDE pInclude, ID3D10Blob** ppShaderText, ID3D10Blob** ppErrorMsgs);\n\n//////////////////////////////////////////////////////////////////////////\n//\n// Shader blob manipulation routines\n// ---------------------------------\n//\n// void *pShaderBytecode - a buffer containing the result of an HLSL\n//  compilation.  Typically this opaque buffer contains several \n//  discrete sections including the shader executable code, the input\n//  signature, and the output signature.  This can typically be retrieved \n//  by calling ID3D10Blob::GetBufferPointer() on the returned blob\n//  from HLSL's compile APIs.\n//\n// UINT BytecodeLength - the length of pShaderBytecode.  This can \n//  typically be retrieved by calling ID3D10Blob::GetBufferSize() \n//  on the returned blob from HLSL's compile APIs.\n//\n// ID3D10Blob **ppSignatureBlob(s) - a newly created buffer that\n//  contains only the signature portions of the original bytecode.\n//  This is a copy; the original bytecode is not modified.  You may\n//  specify NULL for this parameter to have the bytecode validated\n//  for the presence of the corresponding signatures without actually\n//  copying them and creating a new blob.\n//\n// Returns E_INVALIDARG if any required parameters are NULL\n// Returns E_FAIL is the bytecode is corrupt or missing signatures\n// Returns S_OK on success\n//\n//////////////////////////////////////////////////////////////////////////\n\nHRESULT WINAPI D3D10GetInputSignatureBlob(CONST void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob **ppSignatureBlob);\nHRESULT WINAPI D3D10GetOutputSignatureBlob(CONST void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob **ppSignatureBlob);\nHRESULT WINAPI D3D10GetInputAndOutputSignatureBlob(CONST void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob **ppSignatureBlob);\n\n//----------------------------------------------------------------------------\n// D3D10GetShaderDebugInfo:\n// -----------------------\n// Gets shader debug info.  Debug info is generated by D3D10CompileShader and is\n// embedded in the body of the shader.\n//\n// Parameters:\n//  pShaderBytecode\n//      Pointer to the function bytecode\n//  BytecodeLength\n//      Length of the shader bytecode buffer\n//  ppDebugInfo\n//      Buffer used to return debug info.  For information about the layout\n//      of this buffer, see definition of D3D10_SHADER_DEBUG_INFO above.\n//----------------------------------------------------------------------------\n\nHRESULT WINAPI D3D10GetShaderDebugInfo(CONST void *pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob** ppDebugInfo);\n\n#ifdef __cplusplus\n}\n#endif //__cplusplus\n    \n#endif //__D3D10SHADER_H__\n\n"
  },
  {
    "path": "Include/D3D11.h",
    "content": "/*-------------------------------------------------------------------------------------\n *\n * Copyright (c) Microsoft Corporation\n *\n *-------------------------------------------------------------------------------------*/\n\n\n/* this ALWAYS GENERATED file contains the definitions for the interfaces */\n\n\n /* File created by MIDL compiler version 7.00.0555 */\n/* @@MIDL_FILE_HEADING(  ) */\n\n#pragma warning( disable: 4049 )  /* more than 64k source lines */\n\n\n/* verify that the <rpcndr.h> version is high enough to compile this file*/\n#ifndef __REQUIRED_RPCNDR_H_VERSION__\n#define __REQUIRED_RPCNDR_H_VERSION__ 475\n#endif\n\n/* verify that the <rpcsal.h> version is high enough to compile this file*/\n#ifndef __REQUIRED_RPCSAL_H_VERSION__\n#define __REQUIRED_RPCSAL_H_VERSION__ 100\n#endif\n\n#include \"rpc.h\"\n#include \"rpcndr.h\"\n\n#ifndef __RPCNDR_H_VERSION__\n#error this stub requires an updated version of <rpcndr.h>\n#endif // __RPCNDR_H_VERSION__\n\n#ifndef COM_NO_WINDOWS_H\n#include \"windows.h\"\n#include \"ole2.h\"\n#endif /*COM_NO_WINDOWS_H*/\n\n#ifndef __d3d11_h__\n#define __d3d11_h__\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n#pragma once\n#endif\n\n/* Forward Declarations */ \n\n#ifndef __ID3D11DeviceChild_FWD_DEFINED__\n#define __ID3D11DeviceChild_FWD_DEFINED__\ntypedef interface ID3D11DeviceChild ID3D11DeviceChild;\n#endif \t/* __ID3D11DeviceChild_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11DepthStencilState_FWD_DEFINED__\n#define __ID3D11DepthStencilState_FWD_DEFINED__\ntypedef interface ID3D11DepthStencilState ID3D11DepthStencilState;\n#endif \t/* __ID3D11DepthStencilState_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11BlendState_FWD_DEFINED__\n#define __ID3D11BlendState_FWD_DEFINED__\ntypedef interface ID3D11BlendState ID3D11BlendState;\n#endif \t/* __ID3D11BlendState_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11RasterizerState_FWD_DEFINED__\n#define __ID3D11RasterizerState_FWD_DEFINED__\ntypedef interface ID3D11RasterizerState ID3D11RasterizerState;\n#endif \t/* __ID3D11RasterizerState_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11Resource_FWD_DEFINED__\n#define __ID3D11Resource_FWD_DEFINED__\ntypedef interface ID3D11Resource ID3D11Resource;\n#endif \t/* __ID3D11Resource_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11Buffer_FWD_DEFINED__\n#define __ID3D11Buffer_FWD_DEFINED__\ntypedef interface ID3D11Buffer ID3D11Buffer;\n#endif \t/* __ID3D11Buffer_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11Texture1D_FWD_DEFINED__\n#define __ID3D11Texture1D_FWD_DEFINED__\ntypedef interface ID3D11Texture1D ID3D11Texture1D;\n#endif \t/* __ID3D11Texture1D_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11Texture2D_FWD_DEFINED__\n#define __ID3D11Texture2D_FWD_DEFINED__\ntypedef interface ID3D11Texture2D ID3D11Texture2D;\n#endif \t/* __ID3D11Texture2D_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11Texture3D_FWD_DEFINED__\n#define __ID3D11Texture3D_FWD_DEFINED__\ntypedef interface ID3D11Texture3D ID3D11Texture3D;\n#endif \t/* __ID3D11Texture3D_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11View_FWD_DEFINED__\n#define __ID3D11View_FWD_DEFINED__\ntypedef interface ID3D11View ID3D11View;\n#endif \t/* __ID3D11View_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11ShaderResourceView_FWD_DEFINED__\n#define __ID3D11ShaderResourceView_FWD_DEFINED__\ntypedef interface ID3D11ShaderResourceView ID3D11ShaderResourceView;\n#endif \t/* __ID3D11ShaderResourceView_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11RenderTargetView_FWD_DEFINED__\n#define __ID3D11RenderTargetView_FWD_DEFINED__\ntypedef interface ID3D11RenderTargetView ID3D11RenderTargetView;\n#endif \t/* __ID3D11RenderTargetView_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11DepthStencilView_FWD_DEFINED__\n#define __ID3D11DepthStencilView_FWD_DEFINED__\ntypedef interface ID3D11DepthStencilView ID3D11DepthStencilView;\n#endif \t/* __ID3D11DepthStencilView_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11UnorderedAccessView_FWD_DEFINED__\n#define __ID3D11UnorderedAccessView_FWD_DEFINED__\ntypedef interface ID3D11UnorderedAccessView ID3D11UnorderedAccessView;\n#endif \t/* __ID3D11UnorderedAccessView_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11VertexShader_FWD_DEFINED__\n#define __ID3D11VertexShader_FWD_DEFINED__\ntypedef interface ID3D11VertexShader ID3D11VertexShader;\n#endif \t/* __ID3D11VertexShader_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11HullShader_FWD_DEFINED__\n#define __ID3D11HullShader_FWD_DEFINED__\ntypedef interface ID3D11HullShader ID3D11HullShader;\n#endif \t/* __ID3D11HullShader_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11DomainShader_FWD_DEFINED__\n#define __ID3D11DomainShader_FWD_DEFINED__\ntypedef interface ID3D11DomainShader ID3D11DomainShader;\n#endif \t/* __ID3D11DomainShader_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11GeometryShader_FWD_DEFINED__\n#define __ID3D11GeometryShader_FWD_DEFINED__\ntypedef interface ID3D11GeometryShader ID3D11GeometryShader;\n#endif \t/* __ID3D11GeometryShader_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11PixelShader_FWD_DEFINED__\n#define __ID3D11PixelShader_FWD_DEFINED__\ntypedef interface ID3D11PixelShader ID3D11PixelShader;\n#endif \t/* __ID3D11PixelShader_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11ComputeShader_FWD_DEFINED__\n#define __ID3D11ComputeShader_FWD_DEFINED__\ntypedef interface ID3D11ComputeShader ID3D11ComputeShader;\n#endif \t/* __ID3D11ComputeShader_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11InputLayout_FWD_DEFINED__\n#define __ID3D11InputLayout_FWD_DEFINED__\ntypedef interface ID3D11InputLayout ID3D11InputLayout;\n#endif \t/* __ID3D11InputLayout_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11SamplerState_FWD_DEFINED__\n#define __ID3D11SamplerState_FWD_DEFINED__\ntypedef interface ID3D11SamplerState ID3D11SamplerState;\n#endif \t/* __ID3D11SamplerState_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11Asynchronous_FWD_DEFINED__\n#define __ID3D11Asynchronous_FWD_DEFINED__\ntypedef interface ID3D11Asynchronous ID3D11Asynchronous;\n#endif \t/* __ID3D11Asynchronous_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11Query_FWD_DEFINED__\n#define __ID3D11Query_FWD_DEFINED__\ntypedef interface ID3D11Query ID3D11Query;\n#endif \t/* __ID3D11Query_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11Predicate_FWD_DEFINED__\n#define __ID3D11Predicate_FWD_DEFINED__\ntypedef interface ID3D11Predicate ID3D11Predicate;\n#endif \t/* __ID3D11Predicate_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11Counter_FWD_DEFINED__\n#define __ID3D11Counter_FWD_DEFINED__\ntypedef interface ID3D11Counter ID3D11Counter;\n#endif \t/* __ID3D11Counter_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11ClassInstance_FWD_DEFINED__\n#define __ID3D11ClassInstance_FWD_DEFINED__\ntypedef interface ID3D11ClassInstance ID3D11ClassInstance;\n#endif \t/* __ID3D11ClassInstance_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11ClassLinkage_FWD_DEFINED__\n#define __ID3D11ClassLinkage_FWD_DEFINED__\ntypedef interface ID3D11ClassLinkage ID3D11ClassLinkage;\n#endif \t/* __ID3D11ClassLinkage_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11CommandList_FWD_DEFINED__\n#define __ID3D11CommandList_FWD_DEFINED__\ntypedef interface ID3D11CommandList ID3D11CommandList;\n#endif \t/* __ID3D11CommandList_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11DeviceContext_FWD_DEFINED__\n#define __ID3D11DeviceContext_FWD_DEFINED__\ntypedef interface ID3D11DeviceContext ID3D11DeviceContext;\n#endif \t/* __ID3D11DeviceContext_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11Device_FWD_DEFINED__\n#define __ID3D11Device_FWD_DEFINED__\ntypedef interface ID3D11Device ID3D11Device;\n#endif \t/* __ID3D11Device_FWD_DEFINED__ */\n\n\n/* header files for imported files */\n#include \"oaidl.h\"\n#include \"ocidl.h\"\n#include \"dxgi.h\"\n#include \"d3dcommon.h\"\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif \n\n\n/* interface __MIDL_itf_d3d11_0000_0000 */\n/* [local] */ \n\n#ifndef _D3D11_CONSTANTS\n#define _D3D11_CONSTANTS\n#define\tD3D11_16BIT_INDEX_STRIP_CUT_VALUE\t( 0xffff )\n\n#define\tD3D11_32BIT_INDEX_STRIP_CUT_VALUE\t( 0xffffffff )\n\n#define\tD3D11_8BIT_INDEX_STRIP_CUT_VALUE\t( 0xff )\n\n#define\tD3D11_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT\t( 9 )\n\n#define\tD3D11_CLIP_OR_CULL_DISTANCE_COUNT\t( 8 )\n\n#define\tD3D11_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT\t( 2 )\n\n#define\tD3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT\t( 14 )\n\n#define\tD3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS\t( 4 )\n\n#define\tD3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT\t( 15 )\n\n#define\tD3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT\t( 15 )\n\n#define\tD3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST\t( 1 )\n\n#define\tD3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT\t( 64 )\n\n#define\tD3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT\t( 1 )\n\n#define\tD3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST\t( 1 )\n\n#define\tD3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT\t( 128 )\n\n#define\tD3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST\t( 1 )\n\n#define\tD3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT\t( 128 )\n\n#define\tD3D11_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D11_COMMONSHADER_SAMPLER_REGISTER_COUNT\t( 16 )\n\n#define\tD3D11_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST\t( 1 )\n\n#define\tD3D11_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_COMMONSHADER_SAMPLER_SLOT_COUNT\t( 16 )\n\n#define\tD3D11_COMMONSHADER_SUBROUTINE_NESTING_LIMIT\t( 32 )\n\n#define\tD3D11_COMMONSHADER_TEMP_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D11_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_COMMONSHADER_TEMP_REGISTER_COUNT\t( 4096 )\n\n#define\tD3D11_COMMONSHADER_TEMP_REGISTER_READS_PER_INST\t( 3 )\n\n#define\tD3D11_COMMONSHADER_TEMP_REGISTER_READ_PORTS\t( 3 )\n\n#define\tD3D11_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX\t( 10 )\n\n#define\tD3D11_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN\t( -10 )\n\n#define\tD3D11_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE\t( -8 )\n\n#define\tD3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE\t( 7 )\n\n#define\tD3D11_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD\t( 256 )\n\n#define\tD3D11_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP\t( 64 )\n\n#define\tD3D11_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD\t( 240 )\n\n#define\tD3D11_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP\t( 68 )\n\n#define\tD3D11_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD\t( 224 )\n\n#define\tD3D11_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP\t( 72 )\n\n#define\tD3D11_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD\t( 208 )\n\n#define\tD3D11_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP\t( 76 )\n\n#define\tD3D11_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD\t( 192 )\n\n#define\tD3D11_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP\t( 84 )\n\n#define\tD3D11_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD\t( 176 )\n\n#define\tD3D11_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP\t( 92 )\n\n#define\tD3D11_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD\t( 160 )\n\n#define\tD3D11_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP\t( 100 )\n\n#define\tD3D11_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD\t( 144 )\n\n#define\tD3D11_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP\t( 112 )\n\n#define\tD3D11_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD\t( 128 )\n\n#define\tD3D11_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP\t( 128 )\n\n#define\tD3D11_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD\t( 112 )\n\n#define\tD3D11_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP\t( 144 )\n\n#define\tD3D11_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD\t( 96 )\n\n#define\tD3D11_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP\t( 168 )\n\n#define\tD3D11_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD\t( 80 )\n\n#define\tD3D11_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP\t( 204 )\n\n#define\tD3D11_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD\t( 64 )\n\n#define\tD3D11_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP\t( 256 )\n\n#define\tD3D11_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD\t( 48 )\n\n#define\tD3D11_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP\t( 340 )\n\n#define\tD3D11_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD\t( 32 )\n\n#define\tD3D11_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP\t( 512 )\n\n#define\tD3D11_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD\t( 16 )\n\n#define\tD3D11_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP\t( 768 )\n\n#define\tD3D11_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION\t( 1 )\n\n#define\tD3D11_CS_4_X_RAW_UAV_BYTE_ALIGNMENT\t( 256 )\n\n#define\tD3D11_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP\t( 768 )\n\n#define\tD3D11_CS_4_X_THREAD_GROUP_MAX_X\t( 768 )\n\n#define\tD3D11_CS_4_X_THREAD_GROUP_MAX_Y\t( 768 )\n\n#define\tD3D11_CS_4_X_UAV_REGISTER_COUNT\t( 1 )\n\n#define\tD3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION\t( 65535 )\n\n#define\tD3D11_CS_TGSM_REGISTER_COUNT\t( 8192 )\n\n#define\tD3D11_CS_TGSM_REGISTER_READS_PER_INST\t( 1 )\n\n#define\tD3D11_CS_TGSM_RESOURCE_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D11_CS_TGSM_RESOURCE_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP\t( 1024 )\n\n#define\tD3D11_CS_THREAD_GROUP_MAX_X\t( 1024 )\n\n#define\tD3D11_CS_THREAD_GROUP_MAX_Y\t( 1024 )\n\n#define\tD3D11_CS_THREAD_GROUP_MAX_Z\t( 64 )\n\n#define\tD3D11_CS_THREAD_GROUP_MIN_X\t( 1 )\n\n#define\tD3D11_CS_THREAD_GROUP_MIN_Y\t( 1 )\n\n#define\tD3D11_CS_THREAD_GROUP_MIN_Z\t( 1 )\n\n#define\tD3D11_CS_THREAD_LOCAL_TEMP_REGISTER_POOL\t( 16384 )\n\n#define D3D11_DEFAULT_BLEND_FACTOR_ALPHA\t( 1.0f )\n#define D3D11_DEFAULT_BLEND_FACTOR_BLUE\t( 1.0f )\n#define D3D11_DEFAULT_BLEND_FACTOR_GREEN\t( 1.0f )\n#define D3D11_DEFAULT_BLEND_FACTOR_RED\t( 1.0f )\n#define D3D11_DEFAULT_BORDER_COLOR_COMPONENT\t( 0.0f )\n#define\tD3D11_DEFAULT_DEPTH_BIAS\t( 0 )\n\n#define D3D11_DEFAULT_DEPTH_BIAS_CLAMP\t( 0.0f )\n#define D3D11_DEFAULT_MAX_ANISOTROPY\t( 16 )\n#define D3D11_DEFAULT_MIP_LOD_BIAS\t( 0.0f )\n#define\tD3D11_DEFAULT_RENDER_TARGET_ARRAY_INDEX\t( 0 )\n\n#define\tD3D11_DEFAULT_SAMPLE_MASK\t( 0xffffffff )\n\n#define\tD3D11_DEFAULT_SCISSOR_ENDX\t( 0 )\n\n#define\tD3D11_DEFAULT_SCISSOR_ENDY\t( 0 )\n\n#define\tD3D11_DEFAULT_SCISSOR_STARTX\t( 0 )\n\n#define\tD3D11_DEFAULT_SCISSOR_STARTY\t( 0 )\n\n#define D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS\t( 0.0f )\n#define\tD3D11_DEFAULT_STENCIL_READ_MASK\t( 0xff )\n\n#define\tD3D11_DEFAULT_STENCIL_REFERENCE\t( 0 )\n\n#define\tD3D11_DEFAULT_STENCIL_WRITE_MASK\t( 0xff )\n\n#define\tD3D11_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX\t( 0 )\n\n#define\tD3D11_DEFAULT_VIEWPORT_HEIGHT\t( 0 )\n\n#define D3D11_DEFAULT_VIEWPORT_MAX_DEPTH\t( 0.0f )\n#define D3D11_DEFAULT_VIEWPORT_MIN_DEPTH\t( 0.0f )\n#define\tD3D11_DEFAULT_VIEWPORT_TOPLEFTX\t( 0 )\n\n#define\tD3D11_DEFAULT_VIEWPORT_TOPLEFTY\t( 0 )\n\n#define\tD3D11_DEFAULT_VIEWPORT_WIDTH\t( 0 )\n\n#define\tD3D11_DS_INPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS\t( 3968 )\n\n#define\tD3D11_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D11_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_DS_INPUT_CONTROL_POINT_REGISTER_COUNT\t( 32 )\n\n#define\tD3D11_DS_INPUT_CONTROL_POINT_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D11_DS_INPUT_CONTROL_POINT_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENTS\t( 3 )\n\n#define\tD3D11_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_DS_INPUT_DOMAIN_POINT_REGISTER_COUNT\t( 1 )\n\n#define\tD3D11_DS_INPUT_DOMAIN_POINT_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D11_DS_INPUT_DOMAIN_POINT_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D11_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_DS_INPUT_PATCH_CONSTANT_REGISTER_COUNT\t( 32 )\n\n#define\tD3D11_DS_INPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D11_DS_INPUT_PATCH_CONSTANT_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_DS_OUTPUT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D11_DS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_DS_OUTPUT_REGISTER_COUNT\t( 32 )\n\n#define D3D11_FLOAT16_FUSED_TOLERANCE_IN_ULP\t( 0.6 )\n#define D3D11_FLOAT32_MAX\t( 3.402823466e+38f )\n#define D3D11_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP\t( 0.6f )\n#define D3D11_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR\t( 2.4f )\n#define D3D11_FLOAT_TO_SRGB_EXPONENT_NUMERATOR\t( 1.0f )\n#define D3D11_FLOAT_TO_SRGB_OFFSET\t( 0.055f )\n#define D3D11_FLOAT_TO_SRGB_SCALE_1\t( 12.92f )\n#define D3D11_FLOAT_TO_SRGB_SCALE_2\t( 1.055f )\n#define D3D11_FLOAT_TO_SRGB_THRESHOLD\t( 0.0031308f )\n#define D3D11_FTOI_INSTRUCTION_MAX_INPUT\t( 2147483647.999f )\n#define D3D11_FTOI_INSTRUCTION_MIN_INPUT\t( -2147483648.999f )\n#define D3D11_FTOU_INSTRUCTION_MAX_INPUT\t( 4294967295.999f )\n#define D3D11_FTOU_INSTRUCTION_MIN_INPUT\t( 0.0f )\n#define\tD3D11_GS_INPUT_INSTANCE_ID_READS_PER_INST\t( 2 )\n\n#define\tD3D11_GS_INPUT_INSTANCE_ID_READ_PORTS\t( 1 )\n\n#define\tD3D11_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D11_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_GS_INPUT_INSTANCE_ID_REGISTER_COUNT\t( 1 )\n\n#define\tD3D11_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D11_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_GS_INPUT_PRIM_CONST_REGISTER_COUNT\t( 1 )\n\n#define\tD3D11_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D11_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_GS_INPUT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D11_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_GS_INPUT_REGISTER_COUNT\t( 32 )\n\n#define\tD3D11_GS_INPUT_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D11_GS_INPUT_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_GS_INPUT_REGISTER_VERTICES\t( 32 )\n\n#define\tD3D11_GS_MAX_INSTANCE_COUNT\t( 32 )\n\n#define\tD3D11_GS_MAX_OUTPUT_VERTEX_COUNT_ACROSS_INSTANCES\t( 1024 )\n\n#define\tD3D11_GS_OUTPUT_ELEMENTS\t( 32 )\n\n#define\tD3D11_GS_OUTPUT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D11_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_GS_OUTPUT_REGISTER_COUNT\t( 32 )\n\n#define\tD3D11_HS_CONTROL_POINT_PHASE_INPUT_REGISTER_COUNT\t( 32 )\n\n#define\tD3D11_HS_CONTROL_POINT_PHASE_OUTPUT_REGISTER_COUNT\t( 32 )\n\n#define\tD3D11_HS_CONTROL_POINT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D11_HS_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_HS_CONTROL_POINT_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D11_HS_CONTROL_POINT_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_HS_FORK_PHASE_INSTANCE_COUNT_UPPER_BOUND\t( 0xffffffff )\n\n#define\tD3D11_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D11_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COUNT\t( 1 )\n\n#define\tD3D11_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D11_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D11_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COUNT\t( 1 )\n\n#define\tD3D11_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D11_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D11_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_HS_INPUT_PRIMITIVE_ID_REGISTER_COUNT\t( 1 )\n\n#define\tD3D11_HS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D11_HS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_HS_JOIN_PHASE_INSTANCE_COUNT_UPPER_BOUND\t( 0xffffffff )\n\n#define D3D11_HS_MAXTESSFACTOR_LOWER_BOUND\t( 1.0f )\n#define D3D11_HS_MAXTESSFACTOR_UPPER_BOUND\t( 64.0f )\n#define\tD3D11_HS_OUTPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS\t( 3968 )\n\n#define\tD3D11_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D11_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COUNT\t( 1 )\n\n#define\tD3D11_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D11_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D11_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COUNT\t( 32 )\n\n#define\tD3D11_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D11_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES\t( 0 )\n\n#define\tD3D11_IA_DEFAULT_PRIMITIVE_TOPOLOGY\t( 0 )\n\n#define\tD3D11_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES\t( 0 )\n\n#define\tD3D11_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT\t( 1 )\n\n#define\tD3D11_IA_INSTANCE_ID_BIT_COUNT\t( 32 )\n\n#define\tD3D11_IA_INTEGER_ARITHMETIC_BIT_COUNT\t( 32 )\n\n#define\tD3D11_IA_PATCH_MAX_CONTROL_POINT_COUNT\t( 32 )\n\n#define\tD3D11_IA_PRIMITIVE_ID_BIT_COUNT\t( 32 )\n\n#define\tD3D11_IA_VERTEX_ID_BIT_COUNT\t( 32 )\n\n#define\tD3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT\t( 32 )\n\n#define\tD3D11_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS\t( 128 )\n\n#define\tD3D11_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT\t( 32 )\n\n#define\tD3D11_INTEGER_DIVIDE_BY_ZERO_QUOTIENT\t( 0xffffffff )\n\n#define\tD3D11_INTEGER_DIVIDE_BY_ZERO_REMAINDER\t( 0xffffffff )\n\n#define\tD3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL\t( 0xffffffff )\n\n#define\tD3D11_KEEP_UNORDERED_ACCESS_VIEWS\t( 0xffffffff )\n\n#define D3D11_LINEAR_GAMMA\t( 1.0f )\n#define\tD3D11_MAJOR_VERSION\t( 11 )\n\n#define D3D11_MAX_BORDER_COLOR_COMPONENT\t( 1.0f )\n#define D3D11_MAX_DEPTH\t( 1.0f )\n#define\tD3D11_MAX_MAXANISOTROPY\t( 16 )\n\n#define\tD3D11_MAX_MULTISAMPLE_SAMPLE_COUNT\t( 32 )\n\n#define D3D11_MAX_POSITION_VALUE\t( 3.402823466e+34f )\n#define\tD3D11_MAX_TEXTURE_DIMENSION_2_TO_EXP\t( 17 )\n\n#define\tD3D11_MINOR_VERSION\t( 0 )\n\n#define D3D11_MIN_BORDER_COLOR_COMPONENT\t( 0.0f )\n#define D3D11_MIN_DEPTH\t( 0.0f )\n#define\tD3D11_MIN_MAXANISOTROPY\t( 0 )\n\n#define D3D11_MIP_LOD_BIAS_MAX\t( 15.99f )\n#define D3D11_MIP_LOD_BIAS_MIN\t( -16.0f )\n#define\tD3D11_MIP_LOD_FRACTIONAL_BIT_COUNT\t( 8 )\n\n#define\tD3D11_MIP_LOD_RANGE_BIT_COUNT\t( 8 )\n\n#define D3D11_MULTISAMPLE_ANTIALIAS_LINE_WIDTH\t( 1.4f )\n#define\tD3D11_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT\t( 0 )\n\n#define\tD3D11_PIXEL_ADDRESS_RANGE_BIT_COUNT\t( 15 )\n\n#define\tD3D11_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT\t( 16 )\n\n#define\tD3D11_PS_CS_UAV_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D11_PS_CS_UAV_REGISTER_COUNT\t( 8 )\n\n#define\tD3D11_PS_CS_UAV_REGISTER_READS_PER_INST\t( 1 )\n\n#define\tD3D11_PS_CS_UAV_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_PS_FRONTFACING_DEFAULT_VALUE\t( 0xffffffff )\n\n#define\tD3D11_PS_FRONTFACING_FALSE_VALUE\t( 0 )\n\n#define\tD3D11_PS_FRONTFACING_TRUE_VALUE\t( 0xffffffff )\n\n#define\tD3D11_PS_INPUT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D11_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_PS_INPUT_REGISTER_COUNT\t( 32 )\n\n#define\tD3D11_PS_INPUT_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D11_PS_INPUT_REGISTER_READ_PORTS\t( 1 )\n\n#define D3D11_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT\t( 0.0f )\n#define\tD3D11_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D11_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_PS_OUTPUT_DEPTH_REGISTER_COUNT\t( 1 )\n\n#define\tD3D11_PS_OUTPUT_MASK_REGISTER_COMPONENTS\t( 1 )\n\n#define\tD3D11_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_PS_OUTPUT_MASK_REGISTER_COUNT\t( 1 )\n\n#define\tD3D11_PS_OUTPUT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D11_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_PS_OUTPUT_REGISTER_COUNT\t( 8 )\n\n#define D3D11_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT\t( 0.5f )\n#define\tD3D11_RAW_UAV_SRV_BYTE_ALIGNMENT\t( 16 )\n\n#define\tD3D11_REQ_BLEND_OBJECT_COUNT_PER_DEVICE\t( 4096 )\n\n#define\tD3D11_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP\t( 27 )\n\n#define\tD3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT\t( 4096 )\n\n#define\tD3D11_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE\t( 4096 )\n\n#define\tD3D11_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP\t( 32 )\n\n#define\tD3D11_REQ_DRAW_VERTEX_COUNT_2_TO_EXP\t( 32 )\n\n#define\tD3D11_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION\t( 16384 )\n\n#define\tD3D11_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT\t( 1024 )\n\n#define\tD3D11_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT\t( 4096 )\n\n#define\tD3D11_REQ_MAXANISOTROPY\t( 16 )\n\n#define\tD3D11_REQ_MIP_LEVELS\t( 15 )\n\n#define\tD3D11_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES\t( 2048 )\n\n#define\tD3D11_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE\t( 4096 )\n\n#define\tD3D11_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH\t( 16384 )\n\n#define\tD3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM\t( 128 )\n\n#define D3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM\t( 0.25f )\n#define\tD3D11_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP\t( 20 )\n\n#define\tD3D11_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE\t( 4096 )\n\n#define\tD3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION\t( 2048 )\n\n#define\tD3D11_REQ_TEXTURE1D_U_DIMENSION\t( 16384 )\n\n#define\tD3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION\t( 2048 )\n\n#define\tD3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION\t( 16384 )\n\n#define\tD3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION\t( 2048 )\n\n#define\tD3D11_REQ_TEXTURECUBE_DIMENSION\t( 16384 )\n\n#define\tD3D11_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL\t( 0 )\n\n#define\tD3D11_SHADER_MAJOR_VERSION\t( 5 )\n\n#define\tD3D11_SHADER_MAX_INSTANCES\t( 65535 )\n\n#define\tD3D11_SHADER_MAX_INTERFACES\t( 253 )\n\n#define\tD3D11_SHADER_MAX_INTERFACE_CALL_SITES\t( 4096 )\n\n#define\tD3D11_SHADER_MAX_TYPES\t( 65535 )\n\n#define\tD3D11_SHADER_MINOR_VERSION\t( 0 )\n\n#define\tD3D11_SHIFT_INSTRUCTION_PAD_VALUE\t( 0 )\n\n#define\tD3D11_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT\t( 5 )\n\n#define\tD3D11_SIMULTANEOUS_RENDER_TARGET_COUNT\t( 8 )\n\n#define\tD3D11_SO_BUFFER_MAX_STRIDE_IN_BYTES\t( 2048 )\n\n#define\tD3D11_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES\t( 512 )\n\n#define\tD3D11_SO_BUFFER_SLOT_COUNT\t( 4 )\n\n#define\tD3D11_SO_DDI_REGISTER_INDEX_DENOTING_GAP\t( 0xffffffff )\n\n#define\tD3D11_SO_NO_RASTERIZED_STREAM\t( 0xffffffff )\n\n#define\tD3D11_SO_OUTPUT_COMPONENT_COUNT\t( 128 )\n\n#define\tD3D11_SO_STREAM_COUNT\t( 4 )\n\n#define\tD3D11_SPEC_DATE_DAY\t( 04 )\n\n#define\tD3D11_SPEC_DATE_MONTH\t( 06 )\n\n#define\tD3D11_SPEC_DATE_YEAR\t( 2009 )\n\n#define D3D11_SPEC_VERSION\t( 1.0 )\n#define D3D11_SRGB_GAMMA\t( 2.2f )\n#define D3D11_SRGB_TO_FLOAT_DENOMINATOR_1\t( 12.92f )\n#define D3D11_SRGB_TO_FLOAT_DENOMINATOR_2\t( 1.055f )\n#define D3D11_SRGB_TO_FLOAT_EXPONENT\t( 2.4f )\n#define D3D11_SRGB_TO_FLOAT_OFFSET\t( 0.055f )\n#define D3D11_SRGB_TO_FLOAT_THRESHOLD\t( 0.04045f )\n#define D3D11_SRGB_TO_FLOAT_TOLERANCE_IN_ULP\t( 0.5f )\n#define\tD3D11_STANDARD_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_STANDARD_COMPONENT_BIT_COUNT_DOUBLED\t( 64 )\n\n#define\tD3D11_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE\t( 4 )\n\n#define\tD3D11_STANDARD_PIXEL_COMPONENT_COUNT\t( 128 )\n\n#define\tD3D11_STANDARD_PIXEL_ELEMENT_COUNT\t( 32 )\n\n#define\tD3D11_STANDARD_VECTOR_SIZE\t( 4 )\n\n#define\tD3D11_STANDARD_VERTEX_ELEMENT_COUNT\t( 32 )\n\n#define\tD3D11_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT\t( 64 )\n\n#define\tD3D11_SUBPIXEL_FRACTIONAL_BIT_COUNT\t( 8 )\n\n#define\tD3D11_SUBTEXEL_FRACTIONAL_BIT_COUNT\t( 8 )\n\n#define\tD3D11_TESSELLATOR_MAX_EVEN_TESSELLATION_FACTOR\t( 64 )\n\n#define\tD3D11_TESSELLATOR_MAX_ISOLINE_DENSITY_TESSELLATION_FACTOR\t( 64 )\n\n#define\tD3D11_TESSELLATOR_MAX_ODD_TESSELLATION_FACTOR\t( 63 )\n\n#define\tD3D11_TESSELLATOR_MAX_TESSELLATION_FACTOR\t( 64 )\n\n#define\tD3D11_TESSELLATOR_MIN_EVEN_TESSELLATION_FACTOR\t( 2 )\n\n#define\tD3D11_TESSELLATOR_MIN_ISOLINE_DENSITY_TESSELLATION_FACTOR\t( 1 )\n\n#define\tD3D11_TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR\t( 1 )\n\n#define\tD3D11_TEXEL_ADDRESS_RANGE_BIT_COUNT\t( 16 )\n\n#define\tD3D11_UNBOUND_MEMORY_ACCESS_RESULT\t( 0 )\n\n#define\tD3D11_VIEWPORT_AND_SCISSORRECT_MAX_INDEX\t( 15 )\n\n#define\tD3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE\t( 16 )\n\n#define\tD3D11_VIEWPORT_BOUNDS_MAX\t( 32767 )\n\n#define\tD3D11_VIEWPORT_BOUNDS_MIN\t( -32768 )\n\n#define\tD3D11_VS_INPUT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D11_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_VS_INPUT_REGISTER_COUNT\t( 32 )\n\n#define\tD3D11_VS_INPUT_REGISTER_READS_PER_INST\t( 2 )\n\n#define\tD3D11_VS_INPUT_REGISTER_READ_PORTS\t( 1 )\n\n#define\tD3D11_VS_OUTPUT_REGISTER_COMPONENTS\t( 4 )\n\n#define\tD3D11_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT\t( 32 )\n\n#define\tD3D11_VS_OUTPUT_REGISTER_COUNT\t( 32 )\n\n#define\tD3D11_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT\t( 10 )\n\n#define\tD3D11_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP\t( 25 )\n\n#define\tD3D11_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP\t( 25 )\n\n#endif\n#define\t_FACD3D11\t( 0x87c )\n\n#define\t_FACD3D11DEBUG\t( ( _FACD3D11 + 1 )  )\n\n#define MAKE_D3D11_HRESULT( code )  MAKE_HRESULT( 1, _FACD3D11, code )\n#define MAKE_D3D11_STATUS( code )    MAKE_HRESULT( 0, _FACD3D11, code )\n#define D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS  MAKE_D3D11_HRESULT(1)\n#define D3D11_ERROR_FILE_NOT_FOUND  MAKE_D3D11_HRESULT(2)\n#define D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS  MAKE_D3D11_HRESULT(3)\n#define D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD  MAKE_D3D11_HRESULT(4)\n#if __SAL_H_FULL_VER < 140050727\n#undef __in_range\n#undef __in_xcount_opt\n#define __in_range(x, y)\n#define __in_xcount_opt(x)\n#endif\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_DEFAULT {};\nextern const DECLSPEC_SELECTANY CD3D11_DEFAULT D3D11_DEFAULT;\nextern \"C\"{\n#endif\ntypedef \nenum D3D11_INPUT_CLASSIFICATION\n    {\tD3D11_INPUT_PER_VERTEX_DATA\t= 0,\n\tD3D11_INPUT_PER_INSTANCE_DATA\t= 1\n    } \tD3D11_INPUT_CLASSIFICATION;\n\n#define\tD3D11_APPEND_ALIGNED_ELEMENT\t( 0xffffffff )\n\ntypedef struct D3D11_INPUT_ELEMENT_DESC\n    {\n    LPCSTR SemanticName;\n    UINT SemanticIndex;\n    DXGI_FORMAT Format;\n    UINT InputSlot;\n    UINT AlignedByteOffset;\n    D3D11_INPUT_CLASSIFICATION InputSlotClass;\n    UINT InstanceDataStepRate;\n    } \tD3D11_INPUT_ELEMENT_DESC;\n\ntypedef \nenum D3D11_FILL_MODE\n    {\tD3D11_FILL_WIREFRAME\t= 2,\n\tD3D11_FILL_SOLID\t= 3\n    } \tD3D11_FILL_MODE;\n\ntypedef D3D_PRIMITIVE_TOPOLOGY D3D11_PRIMITIVE_TOPOLOGY;\n\ntypedef D3D_PRIMITIVE D3D11_PRIMITIVE;\n\ntypedef \nenum D3D11_CULL_MODE\n    {\tD3D11_CULL_NONE\t= 1,\n\tD3D11_CULL_FRONT\t= 2,\n\tD3D11_CULL_BACK\t= 3\n    } \tD3D11_CULL_MODE;\n\ntypedef struct D3D11_SO_DECLARATION_ENTRY\n    {\n    UINT Stream;\n    LPCSTR SemanticName;\n    UINT SemanticIndex;\n    BYTE StartComponent;\n    BYTE ComponentCount;\n    BYTE OutputSlot;\n    } \tD3D11_SO_DECLARATION_ENTRY;\n\ntypedef struct D3D11_VIEWPORT\n    {\n    FLOAT TopLeftX;\n    FLOAT TopLeftY;\n    FLOAT Width;\n    FLOAT Height;\n    FLOAT MinDepth;\n    FLOAT MaxDepth;\n    } \tD3D11_VIEWPORT;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\ninline bool operator==( const D3D11_VIEWPORT& l, const D3D11_VIEWPORT& r )\n{\n    return l.TopLeftX == r.TopLeftX && l.TopLeftY == r.TopLeftY && l.Width == r.Width &&\n        l.Height == r.Height && l.MinDepth == r.MinDepth && l.MaxDepth == r.MaxDepth;\n}\ninline bool operator!=( const D3D11_VIEWPORT& l, const D3D11_VIEWPORT& r )\n{ return !( l == r ); }\nextern \"C\"{\n#endif\ntypedef \nenum D3D11_RESOURCE_DIMENSION\n    {\tD3D11_RESOURCE_DIMENSION_UNKNOWN\t= 0,\n\tD3D11_RESOURCE_DIMENSION_BUFFER\t= 1,\n\tD3D11_RESOURCE_DIMENSION_TEXTURE1D\t= 2,\n\tD3D11_RESOURCE_DIMENSION_TEXTURE2D\t= 3,\n\tD3D11_RESOURCE_DIMENSION_TEXTURE3D\t= 4\n    } \tD3D11_RESOURCE_DIMENSION;\n\ntypedef D3D_SRV_DIMENSION D3D11_SRV_DIMENSION;\n\ntypedef \nenum D3D11_DSV_DIMENSION\n    {\tD3D11_DSV_DIMENSION_UNKNOWN\t= 0,\n\tD3D11_DSV_DIMENSION_TEXTURE1D\t= 1,\n\tD3D11_DSV_DIMENSION_TEXTURE1DARRAY\t= 2,\n\tD3D11_DSV_DIMENSION_TEXTURE2D\t= 3,\n\tD3D11_DSV_DIMENSION_TEXTURE2DARRAY\t= 4,\n\tD3D11_DSV_DIMENSION_TEXTURE2DMS\t= 5,\n\tD3D11_DSV_DIMENSION_TEXTURE2DMSARRAY\t= 6\n    } \tD3D11_DSV_DIMENSION;\n\ntypedef \nenum D3D11_RTV_DIMENSION\n    {\tD3D11_RTV_DIMENSION_UNKNOWN\t= 0,\n\tD3D11_RTV_DIMENSION_BUFFER\t= 1,\n\tD3D11_RTV_DIMENSION_TEXTURE1D\t= 2,\n\tD3D11_RTV_DIMENSION_TEXTURE1DARRAY\t= 3,\n\tD3D11_RTV_DIMENSION_TEXTURE2D\t= 4,\n\tD3D11_RTV_DIMENSION_TEXTURE2DARRAY\t= 5,\n\tD3D11_RTV_DIMENSION_TEXTURE2DMS\t= 6,\n\tD3D11_RTV_DIMENSION_TEXTURE2DMSARRAY\t= 7,\n\tD3D11_RTV_DIMENSION_TEXTURE3D\t= 8\n    } \tD3D11_RTV_DIMENSION;\n\ntypedef \nenum D3D11_UAV_DIMENSION\n    {\tD3D11_UAV_DIMENSION_UNKNOWN\t= 0,\n\tD3D11_UAV_DIMENSION_BUFFER\t= 1,\n\tD3D11_UAV_DIMENSION_TEXTURE1D\t= 2,\n\tD3D11_UAV_DIMENSION_TEXTURE1DARRAY\t= 3,\n\tD3D11_UAV_DIMENSION_TEXTURE2D\t= 4,\n\tD3D11_UAV_DIMENSION_TEXTURE2DARRAY\t= 5,\n\tD3D11_UAV_DIMENSION_TEXTURE3D\t= 8\n    } \tD3D11_UAV_DIMENSION;\n\ntypedef \nenum D3D11_USAGE\n    {\tD3D11_USAGE_DEFAULT\t= 0,\n\tD3D11_USAGE_IMMUTABLE\t= 1,\n\tD3D11_USAGE_DYNAMIC\t= 2,\n\tD3D11_USAGE_STAGING\t= 3\n    } \tD3D11_USAGE;\n\ntypedef \nenum D3D11_BIND_FLAG\n    {\tD3D11_BIND_VERTEX_BUFFER\t= 0x1L,\n\tD3D11_BIND_INDEX_BUFFER\t= 0x2L,\n\tD3D11_BIND_CONSTANT_BUFFER\t= 0x4L,\n\tD3D11_BIND_SHADER_RESOURCE\t= 0x8L,\n\tD3D11_BIND_STREAM_OUTPUT\t= 0x10L,\n\tD3D11_BIND_RENDER_TARGET\t= 0x20L,\n\tD3D11_BIND_DEPTH_STENCIL\t= 0x40L,\n\tD3D11_BIND_UNORDERED_ACCESS\t= 0x80L\n    } \tD3D11_BIND_FLAG;\n\ntypedef \nenum D3D11_CPU_ACCESS_FLAG\n    {\tD3D11_CPU_ACCESS_WRITE\t= 0x10000L,\n\tD3D11_CPU_ACCESS_READ\t= 0x20000L\n    } \tD3D11_CPU_ACCESS_FLAG;\n\ntypedef \nenum D3D11_RESOURCE_MISC_FLAG\n    {\tD3D11_RESOURCE_MISC_GENERATE_MIPS\t= 0x1L,\n\tD3D11_RESOURCE_MISC_SHARED\t= 0x2L,\n\tD3D11_RESOURCE_MISC_TEXTURECUBE\t= 0x4L,\n\tD3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS\t= 0x10L,\n\tD3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS\t= 0x20L,\n\tD3D11_RESOURCE_MISC_BUFFER_STRUCTURED\t= 0x40L,\n\tD3D11_RESOURCE_MISC_RESOURCE_CLAMP\t= 0x80L,\n\tD3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX\t= 0x100L,\n\tD3D11_RESOURCE_MISC_GDI_COMPATIBLE\t= 0x200L\n    } \tD3D11_RESOURCE_MISC_FLAG;\n\ntypedef \nenum D3D11_MAP\n    {\tD3D11_MAP_READ\t= 1,\n\tD3D11_MAP_WRITE\t= 2,\n\tD3D11_MAP_READ_WRITE\t= 3,\n\tD3D11_MAP_WRITE_DISCARD\t= 4,\n\tD3D11_MAP_WRITE_NO_OVERWRITE\t= 5\n    } \tD3D11_MAP;\n\ntypedef \nenum D3D11_MAP_FLAG\n    {\tD3D11_MAP_FLAG_DO_NOT_WAIT\t= 0x100000L\n    } \tD3D11_MAP_FLAG;\n\ntypedef \nenum D3D11_RAISE_FLAG\n    {\tD3D11_RAISE_FLAG_DRIVER_INTERNAL_ERROR\t= 0x1L\n    } \tD3D11_RAISE_FLAG;\n\ntypedef \nenum D3D11_CLEAR_FLAG\n    {\tD3D11_CLEAR_DEPTH\t= 0x1L,\n\tD3D11_CLEAR_STENCIL\t= 0x2L\n    } \tD3D11_CLEAR_FLAG;\n\ntypedef RECT D3D11_RECT;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_RECT : public D3D11_RECT\n{\n    CD3D11_RECT()\n    {}\n    explicit CD3D11_RECT( const D3D11_RECT& o ) :\n        D3D11_RECT( o )\n    {}\n    explicit CD3D11_RECT(\n        LONG Left,\n        LONG Top,\n        LONG Right,\n        LONG Bottom )\n    {\n        left = Left;\n        top = Top;\n        right = Right;\n        bottom = Bottom;\n    }\n    ~CD3D11_RECT() {}\n    operator const D3D11_RECT&() const { return *this; }\n};\ninline bool operator==( const D3D11_RECT& l, const D3D11_RECT& r )\n{\n    return l.left == r.left && l.top == r.top &&\n        l.right == r.right && l.bottom == r.bottom;\n}\ninline bool operator!=( const D3D11_RECT& l, const D3D11_RECT& r )\n{ return !( l == r ); }\nextern \"C\"{\n#endif\ntypedef struct D3D11_BOX\n    {\n    UINT left;\n    UINT top;\n    UINT front;\n    UINT right;\n    UINT bottom;\n    UINT back;\n    } \tD3D11_BOX;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_BOX : public D3D11_BOX\n{\n    CD3D11_BOX()\n    {}\n    explicit CD3D11_BOX( const D3D11_BOX& o ) :\n        D3D11_BOX( o )\n    {}\n    explicit CD3D11_BOX(\n        LONG Left,\n        LONG Top,\n        LONG Front,\n        LONG Right,\n        LONG Bottom,\n        LONG Back )\n    {\n        left = Left;\n        top = Top;\n        front = Front;\n        right = Right;\n        bottom = Bottom;\n        back = Back;\n    }\n    ~CD3D11_BOX() {}\n    operator const D3D11_BOX&() const { return *this; }\n};\ninline bool operator==( const D3D11_BOX& l, const D3D11_BOX& r )\n{\n    return l.left == r.left && l.top == r.top && l.front == r.front &&\n        l.right == r.right && l.bottom == r.bottom && l.back == r.back;\n}\ninline bool operator!=( const D3D11_BOX& l, const D3D11_BOX& r )\n{ return !( l == r ); }\nextern \"C\"{\n#endif\n\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0000_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0000_v0_0_s_ifspec;\n\n#ifndef __ID3D11DeviceChild_INTERFACE_DEFINED__\n#define __ID3D11DeviceChild_INTERFACE_DEFINED__\n\n/* interface ID3D11DeviceChild */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11DeviceChild;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"1841e5c8-16b0-489b-bcc8-44cfb0d5deae\")\n    ID3D11DeviceChild : public IUnknown\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDevice( \n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetPrivateData( \n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetPrivateData( \n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface( \n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11DeviceChildVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11DeviceChild * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11DeviceChild * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11DeviceChild * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11DeviceChild * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11DeviceChild * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11DeviceChild * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11DeviceChild * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        END_INTERFACE\n    } ID3D11DeviceChildVtbl;\n\n    interface ID3D11DeviceChild\n    {\n        CONST_VTBL struct ID3D11DeviceChildVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11DeviceChild_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11DeviceChild_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11DeviceChild_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11DeviceChild_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11DeviceChild_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11DeviceChild_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11DeviceChild_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11DeviceChild_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0001 */\n/* [local] */ \n\ntypedef \nenum D3D11_COMPARISON_FUNC\n    {\tD3D11_COMPARISON_NEVER\t= 1,\n\tD3D11_COMPARISON_LESS\t= 2,\n\tD3D11_COMPARISON_EQUAL\t= 3,\n\tD3D11_COMPARISON_LESS_EQUAL\t= 4,\n\tD3D11_COMPARISON_GREATER\t= 5,\n\tD3D11_COMPARISON_NOT_EQUAL\t= 6,\n\tD3D11_COMPARISON_GREATER_EQUAL\t= 7,\n\tD3D11_COMPARISON_ALWAYS\t= 8\n    } \tD3D11_COMPARISON_FUNC;\n\ntypedef \nenum D3D11_DEPTH_WRITE_MASK\n    {\tD3D11_DEPTH_WRITE_MASK_ZERO\t= 0,\n\tD3D11_DEPTH_WRITE_MASK_ALL\t= 1\n    } \tD3D11_DEPTH_WRITE_MASK;\n\ntypedef \nenum D3D11_STENCIL_OP\n    {\tD3D11_STENCIL_OP_KEEP\t= 1,\n\tD3D11_STENCIL_OP_ZERO\t= 2,\n\tD3D11_STENCIL_OP_REPLACE\t= 3,\n\tD3D11_STENCIL_OP_INCR_SAT\t= 4,\n\tD3D11_STENCIL_OP_DECR_SAT\t= 5,\n\tD3D11_STENCIL_OP_INVERT\t= 6,\n\tD3D11_STENCIL_OP_INCR\t= 7,\n\tD3D11_STENCIL_OP_DECR\t= 8\n    } \tD3D11_STENCIL_OP;\n\ntypedef struct D3D11_DEPTH_STENCILOP_DESC\n    {\n    D3D11_STENCIL_OP StencilFailOp;\n    D3D11_STENCIL_OP StencilDepthFailOp;\n    D3D11_STENCIL_OP StencilPassOp;\n    D3D11_COMPARISON_FUNC StencilFunc;\n    } \tD3D11_DEPTH_STENCILOP_DESC;\n\ntypedef struct D3D11_DEPTH_STENCIL_DESC\n    {\n    BOOL DepthEnable;\n    D3D11_DEPTH_WRITE_MASK DepthWriteMask;\n    D3D11_COMPARISON_FUNC DepthFunc;\n    BOOL StencilEnable;\n    UINT8 StencilReadMask;\n    UINT8 StencilWriteMask;\n    D3D11_DEPTH_STENCILOP_DESC FrontFace;\n    D3D11_DEPTH_STENCILOP_DESC BackFace;\n    } \tD3D11_DEPTH_STENCIL_DESC;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_DEPTH_STENCIL_DESC : public D3D11_DEPTH_STENCIL_DESC\n{\n    CD3D11_DEPTH_STENCIL_DESC()\n    {}\n    explicit CD3D11_DEPTH_STENCIL_DESC( const D3D11_DEPTH_STENCIL_DESC& o ) :\n        D3D11_DEPTH_STENCIL_DESC( o )\n    {}\n    explicit CD3D11_DEPTH_STENCIL_DESC( CD3D11_DEFAULT )\n    {\n        DepthEnable = TRUE;\n        DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;\n        DepthFunc = D3D11_COMPARISON_LESS;\n        StencilEnable = FALSE;\n        StencilReadMask = D3D11_DEFAULT_STENCIL_READ_MASK;\n        StencilWriteMask = D3D11_DEFAULT_STENCIL_WRITE_MASK;\n        const D3D11_DEPTH_STENCILOP_DESC defaultStencilOp =\n        { D3D11_STENCIL_OP_KEEP, D3D11_STENCIL_OP_KEEP, D3D11_STENCIL_OP_KEEP, D3D11_COMPARISON_ALWAYS };\n        FrontFace = defaultStencilOp;\n        BackFace = defaultStencilOp;\n    }\n    explicit CD3D11_DEPTH_STENCIL_DESC(\n        BOOL depthEnable,\n        D3D11_DEPTH_WRITE_MASK depthWriteMask,\n        D3D11_COMPARISON_FUNC depthFunc,\n        BOOL stencilEnable,\n        UINT8 stencilReadMask,\n        UINT8 stencilWriteMask,\n        D3D11_STENCIL_OP frontStencilFailOp,\n        D3D11_STENCIL_OP frontStencilDepthFailOp,\n        D3D11_STENCIL_OP frontStencilPassOp,\n        D3D11_COMPARISON_FUNC frontStencilFunc,\n        D3D11_STENCIL_OP backStencilFailOp,\n        D3D11_STENCIL_OP backStencilDepthFailOp,\n        D3D11_STENCIL_OP backStencilPassOp,\n        D3D11_COMPARISON_FUNC backStencilFunc )\n    {\n        DepthEnable = depthEnable;\n        DepthWriteMask = depthWriteMask;\n        DepthFunc = depthFunc;\n        StencilEnable = stencilEnable;\n        StencilReadMask = stencilReadMask;\n        StencilWriteMask = stencilWriteMask;\n        FrontFace.StencilFailOp = frontStencilFailOp;\n        FrontFace.StencilDepthFailOp = frontStencilDepthFailOp;\n        FrontFace.StencilPassOp = frontStencilPassOp;\n        FrontFace.StencilFunc = frontStencilFunc;\n        BackFace.StencilFailOp = backStencilFailOp;\n        BackFace.StencilDepthFailOp = backStencilDepthFailOp;\n        BackFace.StencilPassOp = backStencilPassOp;\n        BackFace.StencilFunc = backStencilFunc;\n    }\n    ~CD3D11_DEPTH_STENCIL_DESC() {}\n    operator const D3D11_DEPTH_STENCIL_DESC&() const { return *this; }\n};\nextern \"C\"{\n#endif\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0001_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0001_v0_0_s_ifspec;\n\n#ifndef __ID3D11DepthStencilState_INTERFACE_DEFINED__\n#define __ID3D11DepthStencilState_INTERFACE_DEFINED__\n\n/* interface ID3D11DepthStencilState */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11DepthStencilState;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"03823efb-8d8f-4e1c-9aa2-f64bb2cbfdf1\")\n    ID3D11DepthStencilState : public ID3D11DeviceChild\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D11_DEPTH_STENCIL_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11DepthStencilStateVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11DepthStencilState * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11DepthStencilState * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11DepthStencilState * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11DepthStencilState * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11DepthStencilState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11DepthStencilState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11DepthStencilState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D11DepthStencilState * This,\n            /* [annotation] */ \n            __out  D3D11_DEPTH_STENCIL_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D11DepthStencilStateVtbl;\n\n    interface ID3D11DepthStencilState\n    {\n        CONST_VTBL struct ID3D11DepthStencilStateVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11DepthStencilState_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11DepthStencilState_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11DepthStencilState_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11DepthStencilState_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11DepthStencilState_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11DepthStencilState_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11DepthStencilState_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11DepthStencilState_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11DepthStencilState_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0002 */\n/* [local] */ \n\ntypedef \nenum D3D11_BLEND\n    {\tD3D11_BLEND_ZERO\t= 1,\n\tD3D11_BLEND_ONE\t= 2,\n\tD3D11_BLEND_SRC_COLOR\t= 3,\n\tD3D11_BLEND_INV_SRC_COLOR\t= 4,\n\tD3D11_BLEND_SRC_ALPHA\t= 5,\n\tD3D11_BLEND_INV_SRC_ALPHA\t= 6,\n\tD3D11_BLEND_DEST_ALPHA\t= 7,\n\tD3D11_BLEND_INV_DEST_ALPHA\t= 8,\n\tD3D11_BLEND_DEST_COLOR\t= 9,\n\tD3D11_BLEND_INV_DEST_COLOR\t= 10,\n\tD3D11_BLEND_SRC_ALPHA_SAT\t= 11,\n\tD3D11_BLEND_BLEND_FACTOR\t= 14,\n\tD3D11_BLEND_INV_BLEND_FACTOR\t= 15,\n\tD3D11_BLEND_SRC1_COLOR\t= 16,\n\tD3D11_BLEND_INV_SRC1_COLOR\t= 17,\n\tD3D11_BLEND_SRC1_ALPHA\t= 18,\n\tD3D11_BLEND_INV_SRC1_ALPHA\t= 19\n    } \tD3D11_BLEND;\n\ntypedef \nenum D3D11_BLEND_OP\n    {\tD3D11_BLEND_OP_ADD\t= 1,\n\tD3D11_BLEND_OP_SUBTRACT\t= 2,\n\tD3D11_BLEND_OP_REV_SUBTRACT\t= 3,\n\tD3D11_BLEND_OP_MIN\t= 4,\n\tD3D11_BLEND_OP_MAX\t= 5\n    } \tD3D11_BLEND_OP;\n\ntypedef \nenum D3D11_COLOR_WRITE_ENABLE\n    {\tD3D11_COLOR_WRITE_ENABLE_RED\t= 1,\n\tD3D11_COLOR_WRITE_ENABLE_GREEN\t= 2,\n\tD3D11_COLOR_WRITE_ENABLE_BLUE\t= 4,\n\tD3D11_COLOR_WRITE_ENABLE_ALPHA\t= 8,\n\tD3D11_COLOR_WRITE_ENABLE_ALL\t= ( ( ( D3D11_COLOR_WRITE_ENABLE_RED | D3D11_COLOR_WRITE_ENABLE_GREEN )  | D3D11_COLOR_WRITE_ENABLE_BLUE )  | D3D11_COLOR_WRITE_ENABLE_ALPHA ) \n    } \tD3D11_COLOR_WRITE_ENABLE;\n\ntypedef struct D3D11_RENDER_TARGET_BLEND_DESC\n    {\n    BOOL BlendEnable;\n    D3D11_BLEND SrcBlend;\n    D3D11_BLEND DestBlend;\n    D3D11_BLEND_OP BlendOp;\n    D3D11_BLEND SrcBlendAlpha;\n    D3D11_BLEND DestBlendAlpha;\n    D3D11_BLEND_OP BlendOpAlpha;\n    UINT8 RenderTargetWriteMask;\n    } \tD3D11_RENDER_TARGET_BLEND_DESC;\n\ntypedef struct D3D11_BLEND_DESC\n    {\n    BOOL AlphaToCoverageEnable;\n    BOOL IndependentBlendEnable;\n    D3D11_RENDER_TARGET_BLEND_DESC RenderTarget[ 8 ];\n    } \tD3D11_BLEND_DESC;\n\n/* Note, the array size for RenderTarget[] above is D3D11_SIMULTANEOUS_RENDERTARGET_COUNT. \n   IDL processing/generation of this header replaces the define; this comment is merely explaining what happened. */\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_BLEND_DESC : public D3D11_BLEND_DESC\n{\n    CD3D11_BLEND_DESC()\n    {}\n    explicit CD3D11_BLEND_DESC( const D3D11_BLEND_DESC& o ) :\n        D3D11_BLEND_DESC( o )\n    {}\n    explicit CD3D11_BLEND_DESC( CD3D11_DEFAULT )\n    {\n        AlphaToCoverageEnable = FALSE;\n        IndependentBlendEnable = FALSE;\n        const D3D11_RENDER_TARGET_BLEND_DESC defaultRenderTargetBlendDesc =\n        {\n            FALSE,\n            D3D11_BLEND_ONE, D3D11_BLEND_ZERO, D3D11_BLEND_OP_ADD,\n            D3D11_BLEND_ONE, D3D11_BLEND_ZERO, D3D11_BLEND_OP_ADD,\n            D3D11_COLOR_WRITE_ENABLE_ALL,\n        };\n        for (UINT i = 0; i < D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i)\n            RenderTarget[ i ] = defaultRenderTargetBlendDesc;\n    }\n    ~CD3D11_BLEND_DESC() {}\n    operator const D3D11_BLEND_DESC&() const { return *this; }\n};\nextern \"C\"{\n#endif\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0002_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0002_v0_0_s_ifspec;\n\n#ifndef __ID3D11BlendState_INTERFACE_DEFINED__\n#define __ID3D11BlendState_INTERFACE_DEFINED__\n\n/* interface ID3D11BlendState */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11BlendState;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"75b68faa-347d-4159-8f45-a0640f01cd9a\")\n    ID3D11BlendState : public ID3D11DeviceChild\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D11_BLEND_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11BlendStateVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11BlendState * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11BlendState * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11BlendState * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11BlendState * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11BlendState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11BlendState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11BlendState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D11BlendState * This,\n            /* [annotation] */ \n            __out  D3D11_BLEND_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D11BlendStateVtbl;\n\n    interface ID3D11BlendState\n    {\n        CONST_VTBL struct ID3D11BlendStateVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11BlendState_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11BlendState_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11BlendState_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11BlendState_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11BlendState_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11BlendState_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11BlendState_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11BlendState_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11BlendState_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0003 */\n/* [local] */ \n\ntypedef struct D3D11_RASTERIZER_DESC\n    {\n    D3D11_FILL_MODE FillMode;\n    D3D11_CULL_MODE CullMode;\n    BOOL FrontCounterClockwise;\n    INT DepthBias;\n    FLOAT DepthBiasClamp;\n    FLOAT SlopeScaledDepthBias;\n    BOOL DepthClipEnable;\n    BOOL ScissorEnable;\n    BOOL MultisampleEnable;\n    BOOL AntialiasedLineEnable;\n    } \tD3D11_RASTERIZER_DESC;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_RASTERIZER_DESC : public D3D11_RASTERIZER_DESC\n{\n    CD3D11_RASTERIZER_DESC()\n    {}\n    explicit CD3D11_RASTERIZER_DESC( const D3D11_RASTERIZER_DESC& o ) :\n        D3D11_RASTERIZER_DESC( o )\n    {}\n    explicit CD3D11_RASTERIZER_DESC( CD3D11_DEFAULT )\n    {\n        FillMode = D3D11_FILL_SOLID;\n        CullMode = D3D11_CULL_BACK;\n        FrontCounterClockwise = FALSE;\n        DepthBias = D3D11_DEFAULT_DEPTH_BIAS;\n        DepthBiasClamp = D3D11_DEFAULT_DEPTH_BIAS_CLAMP;\n        SlopeScaledDepthBias = D3D11_DEFAULT_SLOPE_SCALED_DEPTH_BIAS;\n        DepthClipEnable = TRUE;\n        ScissorEnable = FALSE;\n        MultisampleEnable = FALSE;\n        AntialiasedLineEnable = FALSE;\n    }\n    explicit CD3D11_RASTERIZER_DESC(\n        D3D11_FILL_MODE fillMode,\n        D3D11_CULL_MODE cullMode,\n        BOOL frontCounterClockwise,\n        INT depthBias,\n        FLOAT depthBiasClamp,\n        FLOAT slopeScaledDepthBias,\n        BOOL depthClipEnable,\n        BOOL scissorEnable,\n        BOOL multisampleEnable,\n        BOOL antialiasedLineEnable )\n    {\n        FillMode = fillMode;\n        CullMode = cullMode;\n        FrontCounterClockwise = frontCounterClockwise;\n        DepthBias = depthBias;\n        DepthBiasClamp = depthBiasClamp;\n        SlopeScaledDepthBias = slopeScaledDepthBias;\n        DepthClipEnable = depthClipEnable;\n        ScissorEnable = scissorEnable;\n        MultisampleEnable = multisampleEnable;\n        AntialiasedLineEnable = antialiasedLineEnable;\n    }\n    ~CD3D11_RASTERIZER_DESC() {}\n    operator const D3D11_RASTERIZER_DESC&() const { return *this; }\n};\nextern \"C\"{\n#endif\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0003_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0003_v0_0_s_ifspec;\n\n#ifndef __ID3D11RasterizerState_INTERFACE_DEFINED__\n#define __ID3D11RasterizerState_INTERFACE_DEFINED__\n\n/* interface ID3D11RasterizerState */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11RasterizerState;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9bb4ab81-ab1a-4d8f-b506-fc04200b6ee7\")\n    ID3D11RasterizerState : public ID3D11DeviceChild\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D11_RASTERIZER_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11RasterizerStateVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11RasterizerState * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11RasterizerState * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11RasterizerState * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11RasterizerState * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11RasterizerState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11RasterizerState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11RasterizerState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D11RasterizerState * This,\n            /* [annotation] */ \n            __out  D3D11_RASTERIZER_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D11RasterizerStateVtbl;\n\n    interface ID3D11RasterizerState\n    {\n        CONST_VTBL struct ID3D11RasterizerStateVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11RasterizerState_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11RasterizerState_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11RasterizerState_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11RasterizerState_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11RasterizerState_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11RasterizerState_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11RasterizerState_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11RasterizerState_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11RasterizerState_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0004 */\n/* [local] */ \n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\ninline UINT D3D11CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT MipLevels )\n{ return MipSlice + ArraySlice * MipLevels; }\nextern \"C\"{\n#endif\ntypedef struct D3D11_SUBRESOURCE_DATA\n    {\n    const void *pSysMem;\n    UINT SysMemPitch;\n    UINT SysMemSlicePitch;\n    } \tD3D11_SUBRESOURCE_DATA;\n\ntypedef struct D3D11_MAPPED_SUBRESOURCE\n    {\n    void *pData;\n    UINT RowPitch;\n    UINT DepthPitch;\n    } \tD3D11_MAPPED_SUBRESOURCE;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0004_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0004_v0_0_s_ifspec;\n\n#ifndef __ID3D11Resource_INTERFACE_DEFINED__\n#define __ID3D11Resource_INTERFACE_DEFINED__\n\n/* interface ID3D11Resource */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11Resource;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"dc8e63f3-d12b-4952-b47b-5e45026a862d\")\n    ID3D11Resource : public ID3D11DeviceChild\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetType( \n            /* [annotation] */ \n            __out  D3D11_RESOURCE_DIMENSION *pResourceDimension) = 0;\n        \n        virtual void STDMETHODCALLTYPE SetEvictionPriority( \n            /* [annotation] */ \n            __in  UINT EvictionPriority) = 0;\n        \n        virtual UINT STDMETHODCALLTYPE GetEvictionPriority( void) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11ResourceVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11Resource * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11Resource * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11Resource * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11Resource * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11Resource * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11Resource * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11Resource * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetType )( \n            ID3D11Resource * This,\n            /* [annotation] */ \n            __out  D3D11_RESOURCE_DIMENSION *pResourceDimension);\n        \n        void ( STDMETHODCALLTYPE *SetEvictionPriority )( \n            ID3D11Resource * This,\n            /* [annotation] */ \n            __in  UINT EvictionPriority);\n        \n        UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( \n            ID3D11Resource * This);\n        \n        END_INTERFACE\n    } ID3D11ResourceVtbl;\n\n    interface ID3D11Resource\n    {\n        CONST_VTBL struct ID3D11ResourceVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11Resource_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11Resource_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11Resource_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11Resource_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11Resource_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11Resource_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11Resource_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11Resource_GetType(This,pResourceDimension)\t\\\n    ( (This)->lpVtbl -> GetType(This,pResourceDimension) ) \n\n#define ID3D11Resource_SetEvictionPriority(This,EvictionPriority)\t\\\n    ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) \n\n#define ID3D11Resource_GetEvictionPriority(This)\t\\\n    ( (This)->lpVtbl -> GetEvictionPriority(This) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11Resource_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0005 */\n/* [local] */ \n\ntypedef struct D3D11_BUFFER_DESC\n    {\n    UINT ByteWidth;\n    D3D11_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n    UINT StructureByteStride;\n    } \tD3D11_BUFFER_DESC;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_BUFFER_DESC : public D3D11_BUFFER_DESC\n{\n    CD3D11_BUFFER_DESC()\n    {}\n    explicit CD3D11_BUFFER_DESC( const D3D11_BUFFER_DESC& o ) :\n        D3D11_BUFFER_DESC( o )\n    {}\n    explicit CD3D11_BUFFER_DESC(\n        UINT byteWidth,\n        UINT bindFlags,\n        D3D11_USAGE usage = D3D11_USAGE_DEFAULT,\n        UINT cpuaccessFlags = 0,\n        UINT miscFlags = 0,\n        UINT structureByteStride = 0 )\n    {\n        ByteWidth = byteWidth;\n        Usage = usage;\n        BindFlags = bindFlags;\n        CPUAccessFlags = cpuaccessFlags ;\n        MiscFlags = miscFlags;\n        StructureByteStride = structureByteStride;\n    }\n    ~CD3D11_BUFFER_DESC() {}\n    operator const D3D11_BUFFER_DESC&() const { return *this; }\n};\nextern \"C\"{\n#endif\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0005_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0005_v0_0_s_ifspec;\n\n#ifndef __ID3D11Buffer_INTERFACE_DEFINED__\n#define __ID3D11Buffer_INTERFACE_DEFINED__\n\n/* interface ID3D11Buffer */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11Buffer;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"48570b85-d1ee-4fcd-a250-eb350722b037\")\n    ID3D11Buffer : public ID3D11Resource\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D11_BUFFER_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11BufferVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11Buffer * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11Buffer * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11Buffer * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11Buffer * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11Buffer * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11Buffer * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11Buffer * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetType )( \n            ID3D11Buffer * This,\n            /* [annotation] */ \n            __out  D3D11_RESOURCE_DIMENSION *pResourceDimension);\n        \n        void ( STDMETHODCALLTYPE *SetEvictionPriority )( \n            ID3D11Buffer * This,\n            /* [annotation] */ \n            __in  UINT EvictionPriority);\n        \n        UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( \n            ID3D11Buffer * This);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D11Buffer * This,\n            /* [annotation] */ \n            __out  D3D11_BUFFER_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D11BufferVtbl;\n\n    interface ID3D11Buffer\n    {\n        CONST_VTBL struct ID3D11BufferVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11Buffer_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11Buffer_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11Buffer_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11Buffer_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11Buffer_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11Buffer_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11Buffer_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11Buffer_GetType(This,pResourceDimension)\t\\\n    ( (This)->lpVtbl -> GetType(This,pResourceDimension) ) \n\n#define ID3D11Buffer_SetEvictionPriority(This,EvictionPriority)\t\\\n    ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) \n\n#define ID3D11Buffer_GetEvictionPriority(This)\t\\\n    ( (This)->lpVtbl -> GetEvictionPriority(This) ) \n\n\n#define ID3D11Buffer_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11Buffer_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0006 */\n/* [local] */ \n\ntypedef struct D3D11_TEXTURE1D_DESC\n    {\n    UINT Width;\n    UINT MipLevels;\n    UINT ArraySize;\n    DXGI_FORMAT Format;\n    D3D11_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n    } \tD3D11_TEXTURE1D_DESC;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_TEXTURE1D_DESC : public D3D11_TEXTURE1D_DESC\n{\n    CD3D11_TEXTURE1D_DESC()\n    {}\n    explicit CD3D11_TEXTURE1D_DESC( const D3D11_TEXTURE1D_DESC& o ) :\n        D3D11_TEXTURE1D_DESC( o )\n    {}\n    explicit CD3D11_TEXTURE1D_DESC(\n        DXGI_FORMAT format,\n        UINT width,\n        UINT arraySize = 1,\n        UINT mipLevels = 0,\n        UINT bindFlags = D3D11_BIND_SHADER_RESOURCE,\n        D3D11_USAGE usage = D3D11_USAGE_DEFAULT,\n        UINT cpuaccessFlags= 0,\n        UINT miscFlags = 0 )\n    {\n        Width = width;\n        MipLevels = mipLevels;\n        ArraySize = arraySize;\n        Format = format;\n        Usage = usage;\n        BindFlags = bindFlags;\n        CPUAccessFlags = cpuaccessFlags;\n        MiscFlags = miscFlags;\n    }\n    ~CD3D11_TEXTURE1D_DESC() {}\n    operator const D3D11_TEXTURE1D_DESC&() const { return *this; }\n};\nextern \"C\"{\n#endif\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0006_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0006_v0_0_s_ifspec;\n\n#ifndef __ID3D11Texture1D_INTERFACE_DEFINED__\n#define __ID3D11Texture1D_INTERFACE_DEFINED__\n\n/* interface ID3D11Texture1D */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11Texture1D;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"f8fb5c27-c6b3-4f75-a4c8-439af2ef564c\")\n    ID3D11Texture1D : public ID3D11Resource\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D11_TEXTURE1D_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11Texture1DVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11Texture1D * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11Texture1D * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11Texture1D * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11Texture1D * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11Texture1D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11Texture1D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11Texture1D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetType )( \n            ID3D11Texture1D * This,\n            /* [annotation] */ \n            __out  D3D11_RESOURCE_DIMENSION *pResourceDimension);\n        \n        void ( STDMETHODCALLTYPE *SetEvictionPriority )( \n            ID3D11Texture1D * This,\n            /* [annotation] */ \n            __in  UINT EvictionPriority);\n        \n        UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( \n            ID3D11Texture1D * This);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D11Texture1D * This,\n            /* [annotation] */ \n            __out  D3D11_TEXTURE1D_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D11Texture1DVtbl;\n\n    interface ID3D11Texture1D\n    {\n        CONST_VTBL struct ID3D11Texture1DVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11Texture1D_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11Texture1D_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11Texture1D_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11Texture1D_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11Texture1D_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11Texture1D_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11Texture1D_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11Texture1D_GetType(This,pResourceDimension)\t\\\n    ( (This)->lpVtbl -> GetType(This,pResourceDimension) ) \n\n#define ID3D11Texture1D_SetEvictionPriority(This,EvictionPriority)\t\\\n    ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) \n\n#define ID3D11Texture1D_GetEvictionPriority(This)\t\\\n    ( (This)->lpVtbl -> GetEvictionPriority(This) ) \n\n\n#define ID3D11Texture1D_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11Texture1D_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0007 */\n/* [local] */ \n\ntypedef struct D3D11_TEXTURE2D_DESC\n    {\n    UINT Width;\n    UINT Height;\n    UINT MipLevels;\n    UINT ArraySize;\n    DXGI_FORMAT Format;\n    DXGI_SAMPLE_DESC SampleDesc;\n    D3D11_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n    } \tD3D11_TEXTURE2D_DESC;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_TEXTURE2D_DESC : public D3D11_TEXTURE2D_DESC\n{\n    CD3D11_TEXTURE2D_DESC()\n    {}\n    explicit CD3D11_TEXTURE2D_DESC( const D3D11_TEXTURE2D_DESC& o ) :\n        D3D11_TEXTURE2D_DESC( o )\n    {}\n    explicit CD3D11_TEXTURE2D_DESC(\n        DXGI_FORMAT format,\n        UINT width,\n        UINT height,\n        UINT arraySize = 1,\n        UINT mipLevels = 0,\n        UINT bindFlags = D3D11_BIND_SHADER_RESOURCE,\n        D3D11_USAGE usage = D3D11_USAGE_DEFAULT,\n        UINT cpuaccessFlags = 0,\n        UINT sampleCount = 1,\n        UINT sampleQuality = 0,\n        UINT miscFlags = 0 )\n    {\n        Width = width;\n        Height = height;\n        MipLevels = mipLevels;\n        ArraySize = arraySize;\n        Format = format;\n        SampleDesc.Count = sampleCount;\n        SampleDesc.Quality = sampleQuality;\n        Usage = usage;\n        BindFlags = bindFlags;\n        CPUAccessFlags = cpuaccessFlags;\n        MiscFlags = miscFlags;\n    }\n    ~CD3D11_TEXTURE2D_DESC() {}\n    operator const D3D11_TEXTURE2D_DESC&() const { return *this; }\n};\nextern \"C\"{\n#endif\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0007_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0007_v0_0_s_ifspec;\n\n#ifndef __ID3D11Texture2D_INTERFACE_DEFINED__\n#define __ID3D11Texture2D_INTERFACE_DEFINED__\n\n/* interface ID3D11Texture2D */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11Texture2D;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"6f15aaf2-d208-4e89-9ab4-489535d34f9c\")\n    ID3D11Texture2D : public ID3D11Resource\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D11_TEXTURE2D_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11Texture2DVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11Texture2D * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11Texture2D * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11Texture2D * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11Texture2D * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11Texture2D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11Texture2D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11Texture2D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetType )( \n            ID3D11Texture2D * This,\n            /* [annotation] */ \n            __out  D3D11_RESOURCE_DIMENSION *pResourceDimension);\n        \n        void ( STDMETHODCALLTYPE *SetEvictionPriority )( \n            ID3D11Texture2D * This,\n            /* [annotation] */ \n            __in  UINT EvictionPriority);\n        \n        UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( \n            ID3D11Texture2D * This);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D11Texture2D * This,\n            /* [annotation] */ \n            __out  D3D11_TEXTURE2D_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D11Texture2DVtbl;\n\n    interface ID3D11Texture2D\n    {\n        CONST_VTBL struct ID3D11Texture2DVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11Texture2D_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11Texture2D_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11Texture2D_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11Texture2D_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11Texture2D_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11Texture2D_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11Texture2D_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11Texture2D_GetType(This,pResourceDimension)\t\\\n    ( (This)->lpVtbl -> GetType(This,pResourceDimension) ) \n\n#define ID3D11Texture2D_SetEvictionPriority(This,EvictionPriority)\t\\\n    ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) \n\n#define ID3D11Texture2D_GetEvictionPriority(This)\t\\\n    ( (This)->lpVtbl -> GetEvictionPriority(This) ) \n\n\n#define ID3D11Texture2D_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11Texture2D_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0008 */\n/* [local] */ \n\ntypedef struct D3D11_TEXTURE3D_DESC\n    {\n    UINT Width;\n    UINT Height;\n    UINT Depth;\n    UINT MipLevels;\n    DXGI_FORMAT Format;\n    D3D11_USAGE Usage;\n    UINT BindFlags;\n    UINT CPUAccessFlags;\n    UINT MiscFlags;\n    } \tD3D11_TEXTURE3D_DESC;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_TEXTURE3D_DESC : public D3D11_TEXTURE3D_DESC\n{\n    CD3D11_TEXTURE3D_DESC()\n    {}\n    explicit CD3D11_TEXTURE3D_DESC( const D3D11_TEXTURE3D_DESC& o ) :\n        D3D11_TEXTURE3D_DESC( o )\n    {}\n    explicit CD3D11_TEXTURE3D_DESC(\n        DXGI_FORMAT format,\n        UINT width,\n        UINT height,\n        UINT depth,\n        UINT mipLevels = 0,\n        UINT bindFlags = D3D11_BIND_SHADER_RESOURCE,\n        D3D11_USAGE usage = D3D11_USAGE_DEFAULT,\n        UINT cpuaccessFlags = 0,\n        UINT miscFlags = 0 )\n    {\n        Width = width;\n        Height = height;\n        Depth = depth;\n        MipLevels = mipLevels;\n        Format = format;\n        Usage = usage;\n        BindFlags = bindFlags;\n        CPUAccessFlags = cpuaccessFlags;\n        MiscFlags = miscFlags;\n    }\n    ~CD3D11_TEXTURE3D_DESC() {}\n    operator const D3D11_TEXTURE3D_DESC&() const { return *this; }\n};\nextern \"C\"{\n#endif\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0008_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0008_v0_0_s_ifspec;\n\n#ifndef __ID3D11Texture3D_INTERFACE_DEFINED__\n#define __ID3D11Texture3D_INTERFACE_DEFINED__\n\n/* interface ID3D11Texture3D */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11Texture3D;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"037e866e-f56d-4357-a8af-9dabbe6e250e\")\n    ID3D11Texture3D : public ID3D11Resource\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D11_TEXTURE3D_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11Texture3DVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11Texture3D * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11Texture3D * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11Texture3D * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11Texture3D * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11Texture3D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11Texture3D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11Texture3D * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetType )( \n            ID3D11Texture3D * This,\n            /* [annotation] */ \n            __out  D3D11_RESOURCE_DIMENSION *pResourceDimension);\n        \n        void ( STDMETHODCALLTYPE *SetEvictionPriority )( \n            ID3D11Texture3D * This,\n            /* [annotation] */ \n            __in  UINT EvictionPriority);\n        \n        UINT ( STDMETHODCALLTYPE *GetEvictionPriority )( \n            ID3D11Texture3D * This);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D11Texture3D * This,\n            /* [annotation] */ \n            __out  D3D11_TEXTURE3D_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D11Texture3DVtbl;\n\n    interface ID3D11Texture3D\n    {\n        CONST_VTBL struct ID3D11Texture3DVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11Texture3D_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11Texture3D_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11Texture3D_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11Texture3D_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11Texture3D_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11Texture3D_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11Texture3D_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11Texture3D_GetType(This,pResourceDimension)\t\\\n    ( (This)->lpVtbl -> GetType(This,pResourceDimension) ) \n\n#define ID3D11Texture3D_SetEvictionPriority(This,EvictionPriority)\t\\\n    ( (This)->lpVtbl -> SetEvictionPriority(This,EvictionPriority) ) \n\n#define ID3D11Texture3D_GetEvictionPriority(This)\t\\\n    ( (This)->lpVtbl -> GetEvictionPriority(This) ) \n\n\n#define ID3D11Texture3D_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11Texture3D_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0009 */\n/* [local] */ \n\ntypedef \nenum D3D11_TEXTURECUBE_FACE\n    {\tD3D11_TEXTURECUBE_FACE_POSITIVE_X\t= 0,\n\tD3D11_TEXTURECUBE_FACE_NEGATIVE_X\t= 1,\n\tD3D11_TEXTURECUBE_FACE_POSITIVE_Y\t= 2,\n\tD3D11_TEXTURECUBE_FACE_NEGATIVE_Y\t= 3,\n\tD3D11_TEXTURECUBE_FACE_POSITIVE_Z\t= 4,\n\tD3D11_TEXTURECUBE_FACE_NEGATIVE_Z\t= 5\n    } \tD3D11_TEXTURECUBE_FACE;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0009_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0009_v0_0_s_ifspec;\n\n#ifndef __ID3D11View_INTERFACE_DEFINED__\n#define __ID3D11View_INTERFACE_DEFINED__\n\n/* interface ID3D11View */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11View;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"839d1216-bb2e-412b-b7f4-a9dbebe08ed1\")\n    ID3D11View : public ID3D11DeviceChild\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetResource( \n            /* [annotation] */ \n            __out  ID3D11Resource **ppResource) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11ViewVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11View * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11View * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11View * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11View * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11View * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11View * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11View * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetResource )( \n            ID3D11View * This,\n            /* [annotation] */ \n            __out  ID3D11Resource **ppResource);\n        \n        END_INTERFACE\n    } ID3D11ViewVtbl;\n\n    interface ID3D11View\n    {\n        CONST_VTBL struct ID3D11ViewVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11View_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11View_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11View_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11View_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11View_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11View_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11View_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11View_GetResource(This,ppResource)\t\\\n    ( (This)->lpVtbl -> GetResource(This,ppResource) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11View_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0010 */\n/* [local] */ \n\ntypedef struct D3D11_BUFFER_SRV\n    {\n    union \n        {\n        UINT FirstElement;\n        UINT ElementOffset;\n        } \t;\n    union \n        {\n        UINT NumElements;\n        UINT ElementWidth;\n        } \t;\n    } \tD3D11_BUFFER_SRV;\n\ntypedef \nenum D3D11_BUFFEREX_SRV_FLAG\n    {\tD3D11_BUFFEREX_SRV_FLAG_RAW\t= 0x1\n    } \tD3D11_BUFFEREX_SRV_FLAG;\n\ntypedef struct D3D11_BUFFEREX_SRV\n    {\n    UINT FirstElement;\n    UINT NumElements;\n    UINT Flags;\n    } \tD3D11_BUFFEREX_SRV;\n\ntypedef struct D3D11_TEX1D_SRV\n    {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    } \tD3D11_TEX1D_SRV;\n\ntypedef struct D3D11_TEX1D_ARRAY_SRV\n    {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D11_TEX1D_ARRAY_SRV;\n\ntypedef struct D3D11_TEX2D_SRV\n    {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    } \tD3D11_TEX2D_SRV;\n\ntypedef struct D3D11_TEX2D_ARRAY_SRV\n    {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D11_TEX2D_ARRAY_SRV;\n\ntypedef struct D3D11_TEX3D_SRV\n    {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    } \tD3D11_TEX3D_SRV;\n\ntypedef struct D3D11_TEXCUBE_SRV\n    {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    } \tD3D11_TEXCUBE_SRV;\n\ntypedef struct D3D11_TEXCUBE_ARRAY_SRV\n    {\n    UINT MostDetailedMip;\n    UINT MipLevels;\n    UINT First2DArrayFace;\n    UINT NumCubes;\n    } \tD3D11_TEXCUBE_ARRAY_SRV;\n\ntypedef struct D3D11_TEX2DMS_SRV\n    {\n    UINT UnusedField_NothingToDefine;\n    } \tD3D11_TEX2DMS_SRV;\n\ntypedef struct D3D11_TEX2DMS_ARRAY_SRV\n    {\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D11_TEX2DMS_ARRAY_SRV;\n\ntypedef struct D3D11_SHADER_RESOURCE_VIEW_DESC\n    {\n    DXGI_FORMAT Format;\n    D3D11_SRV_DIMENSION ViewDimension;\n    union \n        {\n        D3D11_BUFFER_SRV Buffer;\n        D3D11_TEX1D_SRV Texture1D;\n        D3D11_TEX1D_ARRAY_SRV Texture1DArray;\n        D3D11_TEX2D_SRV Texture2D;\n        D3D11_TEX2D_ARRAY_SRV Texture2DArray;\n        D3D11_TEX2DMS_SRV Texture2DMS;\n        D3D11_TEX2DMS_ARRAY_SRV Texture2DMSArray;\n        D3D11_TEX3D_SRV Texture3D;\n        D3D11_TEXCUBE_SRV TextureCube;\n        D3D11_TEXCUBE_ARRAY_SRV TextureCubeArray;\n        D3D11_BUFFEREX_SRV BufferEx;\n        } \t;\n    } \tD3D11_SHADER_RESOURCE_VIEW_DESC;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_SHADER_RESOURCE_VIEW_DESC : public D3D11_SHADER_RESOURCE_VIEW_DESC\n{\n    CD3D11_SHADER_RESOURCE_VIEW_DESC()\n    {}\n    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC( const D3D11_SHADER_RESOURCE_VIEW_DESC& o ) :\n        D3D11_SHADER_RESOURCE_VIEW_DESC( o )\n    {}\n    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(\n        D3D11_SRV_DIMENSION viewDimension,\n        DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\n        UINT mostDetailedMip = 0, // FirstElement for BUFFER\n        UINT mipLevels = -1, // NumElements for BUFFER\n        UINT firstArraySlice = 0, // First2DArrayFace for TEXTURECUBEARRAY\n        UINT arraySize = -1, // NumCubes for TEXTURECUBEARRAY\n        UINT flags = 0 ) // BUFFEREX only\n    {\n        Format = format;\n        ViewDimension = viewDimension;\n        switch (viewDimension)\n        {\n        case D3D11_SRV_DIMENSION_BUFFER:\n            Buffer.FirstElement = mostDetailedMip;\n            Buffer.NumElements = mipLevels;\n            break;\n        case D3D11_SRV_DIMENSION_TEXTURE1D:\n            Texture1D.MostDetailedMip = mostDetailedMip;\n            Texture1D.MipLevels = mipLevels;\n            break;\n        case D3D11_SRV_DIMENSION_TEXTURE1DARRAY:\n            Texture1DArray.MostDetailedMip = mostDetailedMip;\n            Texture1DArray.MipLevels = mipLevels;\n            Texture1DArray.FirstArraySlice = firstArraySlice;\n            Texture1DArray.ArraySize = arraySize;\n            break;\n        case D3D11_SRV_DIMENSION_TEXTURE2D:\n            Texture2D.MostDetailedMip = mostDetailedMip;\n            Texture2D.MipLevels = mipLevels;\n            break;\n        case D3D11_SRV_DIMENSION_TEXTURE2DARRAY:\n            Texture2DArray.MostDetailedMip = mostDetailedMip;\n            Texture2DArray.MipLevels = mipLevels;\n            Texture2DArray.FirstArraySlice = firstArraySlice;\n            Texture2DArray.ArraySize = arraySize;\n            break;\n        case D3D11_SRV_DIMENSION_TEXTURE2DMS:\n            break;\n        case D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY:\n            Texture2DMSArray.FirstArraySlice = firstArraySlice;\n            Texture2DMSArray.ArraySize = arraySize;\n            break;\n        case D3D11_SRV_DIMENSION_TEXTURE3D:\n            Texture3D.MostDetailedMip = mostDetailedMip;\n            Texture3D.MipLevels = mipLevels;\n            break;\n        case D3D11_SRV_DIMENSION_TEXTURECUBE:\n            TextureCube.MostDetailedMip = mostDetailedMip;\n            TextureCube.MipLevels = mipLevels;\n            break;\n        case D3D11_SRV_DIMENSION_TEXTURECUBEARRAY:\n            TextureCubeArray.MostDetailedMip = mostDetailedMip;\n            TextureCubeArray.MipLevels = mipLevels;\n            TextureCubeArray.First2DArrayFace = firstArraySlice;\n            TextureCubeArray.NumCubes = arraySize;\n            break;\n        case D3D11_SRV_DIMENSION_BUFFEREX:\n            BufferEx.FirstElement = mostDetailedMip;\n            BufferEx.NumElements = mipLevels;\n            BufferEx.Flags = flags;\n            break;\n        default: break;\n        }\n    }\n    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(\n        __in ID3D11Buffer*,\n        DXGI_FORMAT format,\n        UINT firstElement,\n        UINT numElements,\n        UINT flags = 0 )\n    {\n        Format = format;\n        ViewDimension = D3D11_SRV_DIMENSION_BUFFEREX;\n        BufferEx.FirstElement = firstElement;\n        BufferEx.NumElements = numElements;\n        BufferEx.Flags = flags;\n    }\n    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(\n        __in ID3D11Texture1D* pTex1D,\n        D3D11_SRV_DIMENSION viewDimension,\n        DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\n        UINT mostDetailedMip = 0,\n        UINT mipLevels = -1,\n        UINT firstArraySlice = 0,\n        UINT arraySize = -1 )\n    {\n        ViewDimension = viewDimension;\n        if (DXGI_FORMAT_UNKNOWN == format || -1 == mipLevels ||\n            (-1 == arraySize && D3D11_SRV_DIMENSION_TEXTURE1DARRAY == viewDimension))\n        {\n            D3D11_TEXTURE1D_DESC TexDesc;\n            pTex1D->GetDesc( &TexDesc );\n            if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format;\n            if (-1 == mipLevels) mipLevels = TexDesc.MipLevels - mostDetailedMip;\n            if (-1 == arraySize) arraySize = TexDesc.ArraySize - firstArraySlice;\n        }\n        Format = format;\n        switch (viewDimension)\n        {\n        case D3D11_SRV_DIMENSION_TEXTURE1D:\n            Texture1D.MostDetailedMip = mostDetailedMip;\n            Texture1D.MipLevels = mipLevels;\n            break;\n        case D3D11_SRV_DIMENSION_TEXTURE1DARRAY:\n            Texture1DArray.MostDetailedMip = mostDetailedMip;\n            Texture1DArray.MipLevels = mipLevels;\n            Texture1DArray.FirstArraySlice = firstArraySlice;\n            Texture1DArray.ArraySize = arraySize;\n            break;\n        default: break;\n        }\n    }\n    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(\n        __in ID3D11Texture2D* pTex2D,\n        D3D11_SRV_DIMENSION viewDimension,\n        DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\n        UINT mostDetailedMip = 0,\n        UINT mipLevels = -1,\n        UINT firstArraySlice = 0, // First2DArrayFace for TEXTURECUBEARRAY\n        UINT arraySize = -1 ) // NumCubes for TEXTURECUBEARRAY\n    {\n        ViewDimension = viewDimension;\n        if (DXGI_FORMAT_UNKNOWN == format || \n            (-1 == mipLevels &&\n                D3D11_SRV_DIMENSION_TEXTURE2DMS != viewDimension &&\n                D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY != viewDimension) ||\n            (-1 == arraySize &&\n                (D3D11_SRV_DIMENSION_TEXTURE2DARRAY == viewDimension ||\n                D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY == viewDimension ||\n                D3D11_SRV_DIMENSION_TEXTURECUBEARRAY == viewDimension)))\n        {\n            D3D11_TEXTURE2D_DESC TexDesc;\n            pTex2D->GetDesc( &TexDesc );\n            if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format;\n            if (-1 == mipLevels) mipLevels = TexDesc.MipLevels - mostDetailedMip;\n            if (-1 == arraySize)\n            {\n                arraySize = TexDesc.ArraySize - firstArraySlice;\n                if (D3D11_SRV_DIMENSION_TEXTURECUBEARRAY == viewDimension) arraySize /= 6;\n            }\n        }\n        Format = format;\n        switch (viewDimension)\n        {\n        case D3D11_SRV_DIMENSION_TEXTURE2D:\n            Texture2D.MostDetailedMip = mostDetailedMip;\n            Texture2D.MipLevels = mipLevels;\n            break;\n        case D3D11_SRV_DIMENSION_TEXTURE2DARRAY:\n            Texture2DArray.MostDetailedMip = mostDetailedMip;\n            Texture2DArray.MipLevels = mipLevels;\n            Texture2DArray.FirstArraySlice = firstArraySlice;\n            Texture2DArray.ArraySize = arraySize;\n            break;\n        case D3D11_SRV_DIMENSION_TEXTURE2DMS:\n            break;\n        case D3D11_SRV_DIMENSION_TEXTURE2DMSARRAY:\n            Texture2DMSArray.FirstArraySlice = firstArraySlice;\n            Texture2DMSArray.ArraySize = arraySize;\n            break;\n        case D3D11_SRV_DIMENSION_TEXTURECUBE:\n            TextureCube.MostDetailedMip = mostDetailedMip;\n            TextureCube.MipLevels = mipLevels;\n            break;\n        case D3D11_SRV_DIMENSION_TEXTURECUBEARRAY:\n            TextureCubeArray.MostDetailedMip = mostDetailedMip;\n            TextureCubeArray.MipLevels = mipLevels;\n            TextureCubeArray.First2DArrayFace = firstArraySlice;\n            TextureCubeArray.NumCubes = arraySize;\n            break;\n        default: break;\n        }\n    }\n    explicit CD3D11_SHADER_RESOURCE_VIEW_DESC(\n        __in ID3D11Texture3D* pTex3D,\n        DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\n        UINT mostDetailedMip = 0,\n        UINT mipLevels = -1 )\n    {\n        ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D;\n        if (DXGI_FORMAT_UNKNOWN == format || -1 == mipLevels)\n        {\n            D3D11_TEXTURE3D_DESC TexDesc;\n            pTex3D->GetDesc( &TexDesc );\n            if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format;\n            if (-1 == mipLevels) mipLevels = TexDesc.MipLevels - mostDetailedMip;\n        }\n        Format = format;\n        Texture3D.MostDetailedMip = mostDetailedMip;\n        Texture3D.MipLevels = mipLevels;\n    }\n    ~CD3D11_SHADER_RESOURCE_VIEW_DESC() {}\n    operator const D3D11_SHADER_RESOURCE_VIEW_DESC&() const { return *this; }\n};\nextern \"C\"{\n#endif\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0010_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0010_v0_0_s_ifspec;\n\n#ifndef __ID3D11ShaderResourceView_INTERFACE_DEFINED__\n#define __ID3D11ShaderResourceView_INTERFACE_DEFINED__\n\n/* interface ID3D11ShaderResourceView */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11ShaderResourceView;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"b0e06fe0-8192-4e1a-b1ca-36d7414710b2\")\n    ID3D11ShaderResourceView : public ID3D11View\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11ShaderResourceViewVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11ShaderResourceView * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11ShaderResourceView * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11ShaderResourceView * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11ShaderResourceView * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11ShaderResourceView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11ShaderResourceView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11ShaderResourceView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetResource )( \n            ID3D11ShaderResourceView * This,\n            /* [annotation] */ \n            __out  ID3D11Resource **ppResource);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D11ShaderResourceView * This,\n            /* [annotation] */ \n            __out  D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D11ShaderResourceViewVtbl;\n\n    interface ID3D11ShaderResourceView\n    {\n        CONST_VTBL struct ID3D11ShaderResourceViewVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11ShaderResourceView_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11ShaderResourceView_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11ShaderResourceView_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11ShaderResourceView_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11ShaderResourceView_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11ShaderResourceView_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11ShaderResourceView_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11ShaderResourceView_GetResource(This,ppResource)\t\\\n    ( (This)->lpVtbl -> GetResource(This,ppResource) ) \n\n\n#define ID3D11ShaderResourceView_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11ShaderResourceView_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0011 */\n/* [local] */ \n\ntypedef struct D3D11_BUFFER_RTV\n    {\n    union \n        {\n        UINT FirstElement;\n        UINT ElementOffset;\n        } \t;\n    union \n        {\n        UINT NumElements;\n        UINT ElementWidth;\n        } \t;\n    } \tD3D11_BUFFER_RTV;\n\ntypedef struct D3D11_TEX1D_RTV\n    {\n    UINT MipSlice;\n    } \tD3D11_TEX1D_RTV;\n\ntypedef struct D3D11_TEX1D_ARRAY_RTV\n    {\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D11_TEX1D_ARRAY_RTV;\n\ntypedef struct D3D11_TEX2D_RTV\n    {\n    UINT MipSlice;\n    } \tD3D11_TEX2D_RTV;\n\ntypedef struct D3D11_TEX2DMS_RTV\n    {\n    UINT UnusedField_NothingToDefine;\n    } \tD3D11_TEX2DMS_RTV;\n\ntypedef struct D3D11_TEX2D_ARRAY_RTV\n    {\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D11_TEX2D_ARRAY_RTV;\n\ntypedef struct D3D11_TEX2DMS_ARRAY_RTV\n    {\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D11_TEX2DMS_ARRAY_RTV;\n\ntypedef struct D3D11_TEX3D_RTV\n    {\n    UINT MipSlice;\n    UINT FirstWSlice;\n    UINT WSize;\n    } \tD3D11_TEX3D_RTV;\n\ntypedef struct D3D11_RENDER_TARGET_VIEW_DESC\n    {\n    DXGI_FORMAT Format;\n    D3D11_RTV_DIMENSION ViewDimension;\n    union \n        {\n        D3D11_BUFFER_RTV Buffer;\n        D3D11_TEX1D_RTV Texture1D;\n        D3D11_TEX1D_ARRAY_RTV Texture1DArray;\n        D3D11_TEX2D_RTV Texture2D;\n        D3D11_TEX2D_ARRAY_RTV Texture2DArray;\n        D3D11_TEX2DMS_RTV Texture2DMS;\n        D3D11_TEX2DMS_ARRAY_RTV Texture2DMSArray;\n        D3D11_TEX3D_RTV Texture3D;\n        } \t;\n    } \tD3D11_RENDER_TARGET_VIEW_DESC;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_RENDER_TARGET_VIEW_DESC : public D3D11_RENDER_TARGET_VIEW_DESC\n{\n    CD3D11_RENDER_TARGET_VIEW_DESC()\n    {}\n    explicit CD3D11_RENDER_TARGET_VIEW_DESC( const D3D11_RENDER_TARGET_VIEW_DESC& o ) :\n        D3D11_RENDER_TARGET_VIEW_DESC( o )\n    {}\n    explicit CD3D11_RENDER_TARGET_VIEW_DESC(\n        D3D11_RTV_DIMENSION viewDimension,\n        DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\n        UINT mipSlice = 0, // FirstElement for BUFFER\n        UINT firstArraySlice = 0, // NumElements for BUFFER, FirstWSlice for TEXTURE3D\n        UINT arraySize = -1 ) // WSize for TEXTURE3D\n    {\n        Format = format;\n        ViewDimension = viewDimension;\n        switch (viewDimension)\n        {\n        case D3D11_RTV_DIMENSION_BUFFER:\n            Buffer.FirstElement = mipSlice;\n            Buffer.NumElements = firstArraySlice;\n            break;\n        case D3D11_RTV_DIMENSION_TEXTURE1D:\n            Texture1D.MipSlice = mipSlice;\n            break;\n        case D3D11_RTV_DIMENSION_TEXTURE1DARRAY:\n            Texture1DArray.MipSlice = mipSlice;\n            Texture1DArray.FirstArraySlice = firstArraySlice;\n            Texture1DArray.ArraySize = arraySize;\n            break;\n        case D3D11_RTV_DIMENSION_TEXTURE2D:\n            Texture2D.MipSlice = mipSlice;\n            break;\n        case D3D11_RTV_DIMENSION_TEXTURE2DARRAY:\n            Texture2DArray.MipSlice = mipSlice;\n            Texture2DArray.FirstArraySlice = firstArraySlice;\n            Texture2DArray.ArraySize = arraySize;\n            break;\n        case D3D11_RTV_DIMENSION_TEXTURE2DMS:\n            break;\n        case D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY:\n            Texture2DMSArray.FirstArraySlice = firstArraySlice;\n            Texture2DMSArray.ArraySize = arraySize;\n            break;\n        case D3D11_RTV_DIMENSION_TEXTURE3D:\n            Texture3D.MipSlice = mipSlice;\n            Texture3D.FirstWSlice = firstArraySlice;\n            Texture3D.WSize = arraySize;\n            break;\n        default: break;\n        }\n    }\n    explicit CD3D11_RENDER_TARGET_VIEW_DESC(\n        __in ID3D11Buffer*,\n        DXGI_FORMAT format,\n        UINT firstElement,\n        UINT numElements )\n    {\n        Format = format;\n        ViewDimension = D3D11_RTV_DIMENSION_BUFFER;\n        Buffer.FirstElement = firstElement;\n        Buffer.NumElements = numElements;\n    }\n    explicit CD3D11_RENDER_TARGET_VIEW_DESC(\n        __in ID3D11Texture1D* pTex1D,\n        D3D11_RTV_DIMENSION viewDimension,\n        DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\n        UINT mipSlice = 0,\n        UINT firstArraySlice = 0,\n        UINT arraySize = -1 )\n    {\n        ViewDimension = viewDimension;\n        if (DXGI_FORMAT_UNKNOWN == format ||\n            (-1 == arraySize && D3D11_RTV_DIMENSION_TEXTURE1DARRAY == viewDimension))\n        {\n            D3D11_TEXTURE1D_DESC TexDesc;\n            pTex1D->GetDesc( &TexDesc );\n            if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format;\n            if (-1 == arraySize) arraySize = TexDesc.ArraySize - firstArraySlice;\n        }\n        Format = format;\n        switch (viewDimension)\n        {\n        case D3D11_RTV_DIMENSION_TEXTURE1D:\n            Texture1D.MipSlice = mipSlice;\n            break;\n        case D3D11_RTV_DIMENSION_TEXTURE1DARRAY:\n            Texture1DArray.MipSlice = mipSlice;\n            Texture1DArray.FirstArraySlice = firstArraySlice;\n            Texture1DArray.ArraySize = arraySize;\n            break;\n        default: break;\n        }\n    }\n    explicit CD3D11_RENDER_TARGET_VIEW_DESC(\n        __in ID3D11Texture2D* pTex2D,\n        D3D11_RTV_DIMENSION viewDimension,\n        DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\n        UINT mipSlice = 0,\n        UINT firstArraySlice = 0,\n        UINT arraySize = -1 )\n    {\n        ViewDimension = viewDimension;\n        if (DXGI_FORMAT_UNKNOWN == format || \n            (-1 == arraySize &&\n                (D3D11_RTV_DIMENSION_TEXTURE2DARRAY == viewDimension ||\n                D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY == viewDimension)))\n        {\n            D3D11_TEXTURE2D_DESC TexDesc;\n            pTex2D->GetDesc( &TexDesc );\n            if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format;\n            if (-1 == arraySize) arraySize = TexDesc.ArraySize - firstArraySlice;\n        }\n        Format = format;\n        switch (viewDimension)\n        {\n        case D3D11_RTV_DIMENSION_TEXTURE2D:\n            Texture2D.MipSlice = mipSlice;\n            break;\n        case D3D11_RTV_DIMENSION_TEXTURE2DARRAY:\n            Texture2DArray.MipSlice = mipSlice;\n            Texture2DArray.FirstArraySlice = firstArraySlice;\n            Texture2DArray.ArraySize = arraySize;\n            break;\n        case D3D11_RTV_DIMENSION_TEXTURE2DMS:\n            break;\n        case D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY:\n            Texture2DMSArray.FirstArraySlice = firstArraySlice;\n            Texture2DMSArray.ArraySize = arraySize;\n            break;\n        default: break;\n        }\n    }\n    explicit CD3D11_RENDER_TARGET_VIEW_DESC(\n        __in ID3D11Texture3D* pTex3D,\n        DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\n        UINT mipSlice = 0,\n        UINT firstWSlice = 0,\n        UINT wSize = -1 )\n    {\n        ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D;\n        if (DXGI_FORMAT_UNKNOWN == format || -1 == wSize)\n        {\n            D3D11_TEXTURE3D_DESC TexDesc;\n            pTex3D->GetDesc( &TexDesc );\n            if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format;\n            if (-1 == wSize) wSize = TexDesc.Depth - firstWSlice;\n        }\n        Format = format;\n        Texture3D.MipSlice = mipSlice;\n        Texture3D.FirstWSlice = firstWSlice;\n        Texture3D.WSize = wSize;\n    }\n    ~CD3D11_RENDER_TARGET_VIEW_DESC() {}\n    operator const D3D11_RENDER_TARGET_VIEW_DESC&() const { return *this; }\n};\nextern \"C\"{\n#endif\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0011_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0011_v0_0_s_ifspec;\n\n#ifndef __ID3D11RenderTargetView_INTERFACE_DEFINED__\n#define __ID3D11RenderTargetView_INTERFACE_DEFINED__\n\n/* interface ID3D11RenderTargetView */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11RenderTargetView;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"dfdba067-0b8d-4865-875b-d7b4516cc164\")\n    ID3D11RenderTargetView : public ID3D11View\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D11_RENDER_TARGET_VIEW_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11RenderTargetViewVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11RenderTargetView * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11RenderTargetView * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11RenderTargetView * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11RenderTargetView * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11RenderTargetView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11RenderTargetView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11RenderTargetView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetResource )( \n            ID3D11RenderTargetView * This,\n            /* [annotation] */ \n            __out  ID3D11Resource **ppResource);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D11RenderTargetView * This,\n            /* [annotation] */ \n            __out  D3D11_RENDER_TARGET_VIEW_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D11RenderTargetViewVtbl;\n\n    interface ID3D11RenderTargetView\n    {\n        CONST_VTBL struct ID3D11RenderTargetViewVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11RenderTargetView_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11RenderTargetView_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11RenderTargetView_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11RenderTargetView_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11RenderTargetView_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11RenderTargetView_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11RenderTargetView_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11RenderTargetView_GetResource(This,ppResource)\t\\\n    ( (This)->lpVtbl -> GetResource(This,ppResource) ) \n\n\n#define ID3D11RenderTargetView_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11RenderTargetView_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0012 */\n/* [local] */ \n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_VIEWPORT : public D3D11_VIEWPORT\n{\n    CD3D11_VIEWPORT()\n    {}\n    explicit CD3D11_VIEWPORT( const D3D11_VIEWPORT& o ) :\n        D3D11_VIEWPORT( o )\n    {}\n    explicit CD3D11_VIEWPORT(\n        FLOAT topLeftX,\n        FLOAT topLeftY,\n        FLOAT width,\n        FLOAT height,\n        FLOAT minDepth = D3D11_MIN_DEPTH,\n        FLOAT maxDepth = D3D11_MAX_DEPTH )\n    {\n        TopLeftX = topLeftX;\n        TopLeftY = topLeftY;\n        Width = width;\n        Height = height;\n        MinDepth = minDepth;\n        MaxDepth = maxDepth;\n    }\n    explicit CD3D11_VIEWPORT(\n        __in ID3D11Buffer*,\n        __in ID3D11RenderTargetView* pRTView,\n        FLOAT topLeftX = 0.0f,\n        FLOAT minDepth = D3D11_MIN_DEPTH,\n        FLOAT maxDepth = D3D11_MAX_DEPTH )\n    {\n        D3D11_RENDER_TARGET_VIEW_DESC RTVDesc;\n        pRTView->GetDesc( &RTVDesc );\n        UINT NumElements = 0;\n        switch (RTVDesc.ViewDimension)\n        {\n        case D3D11_RTV_DIMENSION_BUFFER:\n            NumElements = RTVDesc.Buffer.NumElements;\n            break;\n        default: break;\n        }\n        TopLeftX = topLeftX;\n        TopLeftY = 0.0f;\n        Width = NumElements - topLeftX;\n        Height = 1.0f;\n        MinDepth = minDepth;\n        MaxDepth = maxDepth;\n    }\n    explicit CD3D11_VIEWPORT(\n        __in ID3D11Texture1D* pTex1D,\n        __in ID3D11RenderTargetView* pRTView,\n        FLOAT topLeftX = 0.0f,\n        FLOAT minDepth = D3D11_MIN_DEPTH,\n        FLOAT maxDepth = D3D11_MAX_DEPTH )\n    {\n        D3D11_TEXTURE1D_DESC TexDesc;\n        pTex1D->GetDesc( &TexDesc );\n        D3D11_RENDER_TARGET_VIEW_DESC RTVDesc;\n        pRTView->GetDesc( &RTVDesc );\n        UINT MipSlice = 0;\n        switch (RTVDesc.ViewDimension)\n        {\n        case D3D11_RTV_DIMENSION_TEXTURE1D:\n            MipSlice = RTVDesc.Texture1D.MipSlice;\n            break;\n        case D3D11_RTV_DIMENSION_TEXTURE1DARRAY:\n            MipSlice = RTVDesc.Texture1DArray.MipSlice;\n            break;\n        default: break;\n        }\n        const UINT SubResourceWidth = TexDesc.Width / (UINT( 1 ) << MipSlice);\n        TopLeftX = topLeftX;\n        TopLeftY = 0.0f;\n        Width = (SubResourceWidth ? SubResourceWidth : 1) - topLeftX;\n        Height = 1.0f;\n        MinDepth = minDepth;\n        MaxDepth = maxDepth;\n    }\n    explicit CD3D11_VIEWPORT(\n        __in ID3D11Texture2D* pTex2D,\n        __in ID3D11RenderTargetView* pRTView,\n        FLOAT topLeftX = 0.0f,\n        FLOAT topLeftY = 0.0f,\n        FLOAT minDepth = D3D11_MIN_DEPTH,\n        FLOAT maxDepth = D3D11_MAX_DEPTH )\n    {\n        D3D11_TEXTURE2D_DESC TexDesc;\n        pTex2D->GetDesc( &TexDesc );\n        D3D11_RENDER_TARGET_VIEW_DESC RTVDesc;\n        pRTView->GetDesc( &RTVDesc );\n        UINT MipSlice = 0;\n        switch (RTVDesc.ViewDimension)\n        {\n        case D3D11_RTV_DIMENSION_TEXTURE2D:\n            MipSlice = RTVDesc.Texture2D.MipSlice;\n            break;\n        case D3D11_RTV_DIMENSION_TEXTURE2DARRAY:\n            MipSlice = RTVDesc.Texture2DArray.MipSlice;\n            break;\n        case D3D11_RTV_DIMENSION_TEXTURE2DMS:\n        case D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY:\n            break;\n        default: break;\n        }\n        const UINT SubResourceWidth = TexDesc.Width / (UINT( 1 ) << MipSlice);\n        const UINT SubResourceHeight = TexDesc.Height / (UINT( 1 ) << MipSlice);\n        TopLeftX = topLeftX;\n        TopLeftY = topLeftY;\n        Width = (SubResourceWidth ? SubResourceWidth : 1) - topLeftX;\n        Height = (SubResourceHeight ? SubResourceHeight : 1) - topLeftY;\n        MinDepth = minDepth;\n        MaxDepth = maxDepth;\n    }\n    explicit CD3D11_VIEWPORT(\n        __in ID3D11Texture3D* pTex3D,\n        __in ID3D11RenderTargetView* pRTView,\n        FLOAT topLeftX = 0.0f,\n        FLOAT topLeftY = 0.0f,\n        FLOAT minDepth = D3D11_MIN_DEPTH,\n        FLOAT maxDepth = D3D11_MAX_DEPTH )\n    {\n        D3D11_TEXTURE3D_DESC TexDesc;\n        pTex3D->GetDesc( &TexDesc );\n        D3D11_RENDER_TARGET_VIEW_DESC RTVDesc;\n        pRTView->GetDesc( &RTVDesc );\n        UINT MipSlice = 0;\n        switch (RTVDesc.ViewDimension)\n        {\n        case D3D11_RTV_DIMENSION_TEXTURE3D:\n            MipSlice = RTVDesc.Texture3D.MipSlice;\n            break;\n        default: break;\n        }\n        const UINT SubResourceWidth = TexDesc.Width / (UINT( 1 ) << MipSlice);\n        const UINT SubResourceHeight = TexDesc.Height / (UINT( 1 ) << MipSlice);\n        TopLeftX = topLeftX;\n        TopLeftY = topLeftY;\n        Width = (SubResourceWidth ? SubResourceWidth : 1) - topLeftX;\n        Height = (SubResourceHeight ? SubResourceHeight : 1) - topLeftY;\n        MinDepth = minDepth;\n        MaxDepth = maxDepth;\n    }\n    ~CD3D11_VIEWPORT() {}\n    operator const D3D11_VIEWPORT&() const { return *this; }\n};\nextern \"C\"{\n#endif\ntypedef struct D3D11_TEX1D_DSV\n    {\n    UINT MipSlice;\n    } \tD3D11_TEX1D_DSV;\n\ntypedef struct D3D11_TEX1D_ARRAY_DSV\n    {\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D11_TEX1D_ARRAY_DSV;\n\ntypedef struct D3D11_TEX2D_DSV\n    {\n    UINT MipSlice;\n    } \tD3D11_TEX2D_DSV;\n\ntypedef struct D3D11_TEX2D_ARRAY_DSV\n    {\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D11_TEX2D_ARRAY_DSV;\n\ntypedef struct D3D11_TEX2DMS_DSV\n    {\n    UINT UnusedField_NothingToDefine;\n    } \tD3D11_TEX2DMS_DSV;\n\ntypedef struct D3D11_TEX2DMS_ARRAY_DSV\n    {\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D11_TEX2DMS_ARRAY_DSV;\n\ntypedef \nenum D3D11_DSV_FLAG\n    {\tD3D11_DSV_READ_ONLY_DEPTH\t= 0x1L,\n\tD3D11_DSV_READ_ONLY_STENCIL\t= 0x2L\n    } \tD3D11_DSV_FLAG;\n\ntypedef struct D3D11_DEPTH_STENCIL_VIEW_DESC\n    {\n    DXGI_FORMAT Format;\n    D3D11_DSV_DIMENSION ViewDimension;\n    UINT Flags;\n    union \n        {\n        D3D11_TEX1D_DSV Texture1D;\n        D3D11_TEX1D_ARRAY_DSV Texture1DArray;\n        D3D11_TEX2D_DSV Texture2D;\n        D3D11_TEX2D_ARRAY_DSV Texture2DArray;\n        D3D11_TEX2DMS_DSV Texture2DMS;\n        D3D11_TEX2DMS_ARRAY_DSV Texture2DMSArray;\n        } \t;\n    } \tD3D11_DEPTH_STENCIL_VIEW_DESC;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_DEPTH_STENCIL_VIEW_DESC : public D3D11_DEPTH_STENCIL_VIEW_DESC\n{\n    CD3D11_DEPTH_STENCIL_VIEW_DESC()\n    {}\n    explicit CD3D11_DEPTH_STENCIL_VIEW_DESC( const D3D11_DEPTH_STENCIL_VIEW_DESC& o ) :\n        D3D11_DEPTH_STENCIL_VIEW_DESC( o )\n    {}\n    explicit CD3D11_DEPTH_STENCIL_VIEW_DESC(\n        D3D11_DSV_DIMENSION viewDimension,\n        DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\n        UINT mipSlice = 0,\n        UINT firstArraySlice = 0,\n        UINT arraySize = -1,\n        UINT flags = 0 )\n    {\n        Format = format;\n        ViewDimension = viewDimension;\n        Flags = flags;\n        switch (viewDimension)\n        {\n        case D3D11_DSV_DIMENSION_TEXTURE1D:\n            Texture1D.MipSlice = mipSlice;\n            break;\n        case D3D11_DSV_DIMENSION_TEXTURE1DARRAY:\n            Texture1DArray.MipSlice = mipSlice;\n            Texture1DArray.FirstArraySlice = firstArraySlice;\n            Texture1DArray.ArraySize = arraySize;\n            break;\n        case D3D11_DSV_DIMENSION_TEXTURE2D:\n            Texture2D.MipSlice = mipSlice;\n            break;\n        case D3D11_DSV_DIMENSION_TEXTURE2DARRAY:\n            Texture2DArray.MipSlice = mipSlice;\n            Texture2DArray.FirstArraySlice = firstArraySlice;\n            Texture2DArray.ArraySize = arraySize;\n            break;\n        case D3D11_DSV_DIMENSION_TEXTURE2DMS:\n            break;\n        case D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY:\n            Texture2DMSArray.FirstArraySlice = firstArraySlice;\n            Texture2DMSArray.ArraySize = arraySize;\n            break;\n        default: break;\n        }\n    }\n    explicit CD3D11_DEPTH_STENCIL_VIEW_DESC(\n        __in ID3D11Texture1D* pTex1D,\n        D3D11_DSV_DIMENSION viewDimension,\n        DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\n        UINT mipSlice = 0,\n        UINT firstArraySlice = 0,\n        UINT arraySize = -1,\n        UINT flags = 0 )\n    {\n        ViewDimension = viewDimension;\n        Flags = flags;\n        if (DXGI_FORMAT_UNKNOWN == format ||\n            (-1 == arraySize && D3D11_DSV_DIMENSION_TEXTURE1DARRAY == viewDimension))\n        {\n            D3D11_TEXTURE1D_DESC TexDesc;\n            pTex1D->GetDesc( &TexDesc );\n            if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format;\n            if (-1 == arraySize) arraySize = TexDesc.ArraySize - firstArraySlice;\n        }\n        Format = format;\n        switch (viewDimension)\n        {\n        case D3D11_DSV_DIMENSION_TEXTURE1D:\n            Texture1D.MipSlice = mipSlice;\n            break;\n        case D3D11_DSV_DIMENSION_TEXTURE1DARRAY:\n            Texture1DArray.MipSlice = mipSlice;\n            Texture1DArray.FirstArraySlice = firstArraySlice;\n            Texture1DArray.ArraySize = arraySize;\n            break;\n        default: break;\n        }\n    }\n    explicit CD3D11_DEPTH_STENCIL_VIEW_DESC(\n        __in ID3D11Texture2D* pTex2D,\n        D3D11_DSV_DIMENSION viewDimension,\n        DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\n        UINT mipSlice = 0,\n        UINT firstArraySlice = 0,\n        UINT arraySize = -1,\n        UINT flags = 0 )\n    {\n        ViewDimension = viewDimension;\n        Flags = flags;\n        if (DXGI_FORMAT_UNKNOWN == format || \n            (-1 == arraySize &&\n                (D3D11_DSV_DIMENSION_TEXTURE2DARRAY == viewDimension ||\n                D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY == viewDimension)))\n        {\n            D3D11_TEXTURE2D_DESC TexDesc;\n            pTex2D->GetDesc( &TexDesc );\n            if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format;\n            if (-1 == arraySize) arraySize = TexDesc.ArraySize - firstArraySlice;\n        }\n        Format = format;\n        switch (viewDimension)\n        {\n        case D3D11_DSV_DIMENSION_TEXTURE2D:\n            Texture2D.MipSlice = mipSlice;\n            break;\n        case D3D11_DSV_DIMENSION_TEXTURE2DARRAY:\n            Texture2DArray.MipSlice = mipSlice;\n            Texture2DArray.FirstArraySlice = firstArraySlice;\n            Texture2DArray.ArraySize = arraySize;\n            break;\n        case D3D11_DSV_DIMENSION_TEXTURE2DMS:\n            break;\n        case D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY:\n            Texture2DMSArray.FirstArraySlice = firstArraySlice;\n            Texture2DMSArray.ArraySize = arraySize;\n            break;\n        default: break;\n        }\n    }\n    ~CD3D11_DEPTH_STENCIL_VIEW_DESC() {}\n    operator const D3D11_DEPTH_STENCIL_VIEW_DESC&() const { return *this; }\n};\nextern \"C\"{\n#endif\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0012_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0012_v0_0_s_ifspec;\n\n#ifndef __ID3D11DepthStencilView_INTERFACE_DEFINED__\n#define __ID3D11DepthStencilView_INTERFACE_DEFINED__\n\n/* interface ID3D11DepthStencilView */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11DepthStencilView;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9fdac92a-1876-48c3-afad-25b94f84a9b6\")\n    ID3D11DepthStencilView : public ID3D11View\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11DepthStencilViewVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11DepthStencilView * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11DepthStencilView * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11DepthStencilView * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11DepthStencilView * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11DepthStencilView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11DepthStencilView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11DepthStencilView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetResource )( \n            ID3D11DepthStencilView * This,\n            /* [annotation] */ \n            __out  ID3D11Resource **ppResource);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D11DepthStencilView * This,\n            /* [annotation] */ \n            __out  D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D11DepthStencilViewVtbl;\n\n    interface ID3D11DepthStencilView\n    {\n        CONST_VTBL struct ID3D11DepthStencilViewVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11DepthStencilView_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11DepthStencilView_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11DepthStencilView_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11DepthStencilView_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11DepthStencilView_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11DepthStencilView_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11DepthStencilView_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11DepthStencilView_GetResource(This,ppResource)\t\\\n    ( (This)->lpVtbl -> GetResource(This,ppResource) ) \n\n\n#define ID3D11DepthStencilView_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11DepthStencilView_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0013 */\n/* [local] */ \n\ntypedef \nenum D3D11_BUFFER_UAV_FLAG\n    {\tD3D11_BUFFER_UAV_FLAG_RAW\t= 0x1,\n\tD3D11_BUFFER_UAV_FLAG_APPEND\t= 0x2,\n\tD3D11_BUFFER_UAV_FLAG_COUNTER\t= 0x4\n    } \tD3D11_BUFFER_UAV_FLAG;\n\ntypedef struct D3D11_BUFFER_UAV\n    {\n    UINT FirstElement;\n    UINT NumElements;\n    UINT Flags;\n    } \tD3D11_BUFFER_UAV;\n\ntypedef struct D3D11_TEX1D_UAV\n    {\n    UINT MipSlice;\n    } \tD3D11_TEX1D_UAV;\n\ntypedef struct D3D11_TEX1D_ARRAY_UAV\n    {\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D11_TEX1D_ARRAY_UAV;\n\ntypedef struct D3D11_TEX2D_UAV\n    {\n    UINT MipSlice;\n    } \tD3D11_TEX2D_UAV;\n\ntypedef struct D3D11_TEX2D_ARRAY_UAV\n    {\n    UINT MipSlice;\n    UINT FirstArraySlice;\n    UINT ArraySize;\n    } \tD3D11_TEX2D_ARRAY_UAV;\n\ntypedef struct D3D11_TEX3D_UAV\n    {\n    UINT MipSlice;\n    UINT FirstWSlice;\n    UINT WSize;\n    } \tD3D11_TEX3D_UAV;\n\ntypedef struct D3D11_UNORDERED_ACCESS_VIEW_DESC\n    {\n    DXGI_FORMAT Format;\n    D3D11_UAV_DIMENSION ViewDimension;\n    union \n        {\n        D3D11_BUFFER_UAV Buffer;\n        D3D11_TEX1D_UAV Texture1D;\n        D3D11_TEX1D_ARRAY_UAV Texture1DArray;\n        D3D11_TEX2D_UAV Texture2D;\n        D3D11_TEX2D_ARRAY_UAV Texture2DArray;\n        D3D11_TEX3D_UAV Texture3D;\n        } \t;\n    } \tD3D11_UNORDERED_ACCESS_VIEW_DESC;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_UNORDERED_ACCESS_VIEW_DESC : public D3D11_UNORDERED_ACCESS_VIEW_DESC\n{\n    CD3D11_UNORDERED_ACCESS_VIEW_DESC()\n    {}\n    explicit CD3D11_UNORDERED_ACCESS_VIEW_DESC( const D3D11_UNORDERED_ACCESS_VIEW_DESC& o ) :\n        D3D11_UNORDERED_ACCESS_VIEW_DESC( o )\n    {}\n    explicit CD3D11_UNORDERED_ACCESS_VIEW_DESC(\n        D3D11_UAV_DIMENSION viewDimension,\n        DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\n        UINT mipSlice = 0, // FirstElement for BUFFER\n        UINT firstArraySlice = 0, // NumElements for BUFFER, FirstWSlice for TEXTURE3D\n        UINT arraySize = -1, // WSize for TEXTURE3D\n        UINT flags = 0 ) // BUFFER only\n    {\n        Format = format;\n        ViewDimension = viewDimension;\n        switch (viewDimension)\n        {\n        case D3D11_UAV_DIMENSION_BUFFER:\n            Buffer.FirstElement = mipSlice;\n            Buffer.NumElements = firstArraySlice;\n            Buffer.Flags = flags;\n            break;\n        case D3D11_UAV_DIMENSION_TEXTURE1D:\n            Texture1D.MipSlice = mipSlice;\n            break;\n        case D3D11_UAV_DIMENSION_TEXTURE1DARRAY:\n            Texture1DArray.MipSlice = mipSlice;\n            Texture1DArray.FirstArraySlice = firstArraySlice;\n            Texture1DArray.ArraySize = arraySize;\n            break;\n        case D3D11_UAV_DIMENSION_TEXTURE2D:\n            Texture2D.MipSlice = mipSlice;\n            break;\n        case D3D11_UAV_DIMENSION_TEXTURE2DARRAY:\n            Texture2DArray.MipSlice = mipSlice;\n            Texture2DArray.FirstArraySlice = firstArraySlice;\n            Texture2DArray.ArraySize = arraySize;\n            break;\n        case D3D11_UAV_DIMENSION_TEXTURE3D:\n            Texture3D.MipSlice = mipSlice;\n            Texture3D.FirstWSlice = firstArraySlice;\n            Texture3D.WSize = arraySize;\n            break;\n        default: break;\n        }\n    }\n    explicit CD3D11_UNORDERED_ACCESS_VIEW_DESC(\n        __in ID3D11Buffer*,\n        DXGI_FORMAT format,\n        UINT firstElement,\n        UINT numElements,\n        UINT flags = 0 )\n    {\n        Format = format;\n        ViewDimension = D3D11_UAV_DIMENSION_BUFFER;\n        Buffer.FirstElement = firstElement;\n        Buffer.NumElements = numElements;\n        Buffer.Flags = flags;\n    }\n    explicit CD3D11_UNORDERED_ACCESS_VIEW_DESC(\n        __in ID3D11Texture1D* pTex1D,\n        D3D11_UAV_DIMENSION viewDimension,\n        DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\n        UINT mipSlice = 0,\n        UINT firstArraySlice = 0,\n        UINT arraySize = -1 )\n    {\n        ViewDimension = viewDimension;\n        if (DXGI_FORMAT_UNKNOWN == format ||\n            (-1 == arraySize && D3D11_UAV_DIMENSION_TEXTURE1DARRAY == viewDimension))\n        {\n            D3D11_TEXTURE1D_DESC TexDesc;\n            pTex1D->GetDesc( &TexDesc );\n            if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format;\n            if (-1 == arraySize) arraySize = TexDesc.ArraySize - firstArraySlice;\n        }\n        Format = format;\n        switch (viewDimension)\n        {\n        case D3D11_UAV_DIMENSION_TEXTURE1D:\n            Texture1D.MipSlice = mipSlice;\n            break;\n        case D3D11_UAV_DIMENSION_TEXTURE1DARRAY:\n            Texture1DArray.MipSlice = mipSlice;\n            Texture1DArray.FirstArraySlice = firstArraySlice;\n            Texture1DArray.ArraySize = arraySize;\n            break;\n        default: break;\n        }\n    }\n    explicit CD3D11_UNORDERED_ACCESS_VIEW_DESC(\n        __in ID3D11Texture2D* pTex2D,\n        D3D11_UAV_DIMENSION viewDimension,\n        DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\n        UINT mipSlice = 0,\n        UINT firstArraySlice = 0,\n        UINT arraySize = -1 )\n    {\n        ViewDimension = viewDimension;\n        if (DXGI_FORMAT_UNKNOWN == format || \n            (-1 == arraySize && D3D11_UAV_DIMENSION_TEXTURE2DARRAY == viewDimension))\n        {\n            D3D11_TEXTURE2D_DESC TexDesc;\n            pTex2D->GetDesc( &TexDesc );\n            if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format;\n            if (-1 == arraySize) arraySize = TexDesc.ArraySize - firstArraySlice;\n        }\n        Format = format;\n        switch (viewDimension)\n        {\n        case D3D11_UAV_DIMENSION_TEXTURE2D:\n            Texture2D.MipSlice = mipSlice;\n            break;\n        case D3D11_UAV_DIMENSION_TEXTURE2DARRAY:\n            Texture2DArray.MipSlice = mipSlice;\n            Texture2DArray.FirstArraySlice = firstArraySlice;\n            Texture2DArray.ArraySize = arraySize;\n            break;\n        default: break;\n        }\n    }\n    explicit CD3D11_UNORDERED_ACCESS_VIEW_DESC(\n        __in ID3D11Texture3D* pTex3D,\n        DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN,\n        UINT mipSlice = 0,\n        UINT firstWSlice = 0,\n        UINT wSize = -1 )\n    {\n        ViewDimension = D3D11_UAV_DIMENSION_TEXTURE3D;\n        if (DXGI_FORMAT_UNKNOWN == format || -1 == wSize)\n        {\n            D3D11_TEXTURE3D_DESC TexDesc;\n            pTex3D->GetDesc( &TexDesc );\n            if (DXGI_FORMAT_UNKNOWN == format) format = TexDesc.Format;\n            if (-1 == wSize) wSize = TexDesc.Depth - firstWSlice;\n        }\n        Format = format;\n        Texture3D.MipSlice = mipSlice;\n        Texture3D.FirstWSlice = firstWSlice;\n        Texture3D.WSize = wSize;\n    }\n    ~CD3D11_UNORDERED_ACCESS_VIEW_DESC() {}\n    operator const D3D11_UNORDERED_ACCESS_VIEW_DESC&() const { return *this; }\n};\nextern \"C\"{\n#endif\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0013_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0013_v0_0_s_ifspec;\n\n#ifndef __ID3D11UnorderedAccessView_INTERFACE_DEFINED__\n#define __ID3D11UnorderedAccessView_INTERFACE_DEFINED__\n\n/* interface ID3D11UnorderedAccessView */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11UnorderedAccessView;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"28acf509-7f5c-48f6-8611-f316010a6380\")\n    ID3D11UnorderedAccessView : public ID3D11View\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11UnorderedAccessViewVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11UnorderedAccessView * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11UnorderedAccessView * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11UnorderedAccessView * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11UnorderedAccessView * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11UnorderedAccessView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11UnorderedAccessView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11UnorderedAccessView * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetResource )( \n            ID3D11UnorderedAccessView * This,\n            /* [annotation] */ \n            __out  ID3D11Resource **ppResource);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D11UnorderedAccessView * This,\n            /* [annotation] */ \n            __out  D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D11UnorderedAccessViewVtbl;\n\n    interface ID3D11UnorderedAccessView\n    {\n        CONST_VTBL struct ID3D11UnorderedAccessViewVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11UnorderedAccessView_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11UnorderedAccessView_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11UnorderedAccessView_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11UnorderedAccessView_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11UnorderedAccessView_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11UnorderedAccessView_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11UnorderedAccessView_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11UnorderedAccessView_GetResource(This,ppResource)\t\\\n    ( (This)->lpVtbl -> GetResource(This,ppResource) ) \n\n\n#define ID3D11UnorderedAccessView_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11UnorderedAccessView_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D11VertexShader_INTERFACE_DEFINED__\n#define __ID3D11VertexShader_INTERFACE_DEFINED__\n\n/* interface ID3D11VertexShader */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11VertexShader;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"3b301d64-d678-4289-8897-22f8928b72f3\")\n    ID3D11VertexShader : public ID3D11DeviceChild\n    {\n    public:\n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11VertexShaderVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11VertexShader * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11VertexShader * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11VertexShader * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11VertexShader * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11VertexShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11VertexShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11VertexShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        END_INTERFACE\n    } ID3D11VertexShaderVtbl;\n\n    interface ID3D11VertexShader\n    {\n        CONST_VTBL struct ID3D11VertexShaderVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11VertexShader_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11VertexShader_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11VertexShader_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11VertexShader_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11VertexShader_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11VertexShader_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11VertexShader_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11VertexShader_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D11HullShader_INTERFACE_DEFINED__\n#define __ID3D11HullShader_INTERFACE_DEFINED__\n\n/* interface ID3D11HullShader */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11HullShader;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"8e5c6061-628a-4c8e-8264-bbe45cb3d5dd\")\n    ID3D11HullShader : public ID3D11DeviceChild\n    {\n    public:\n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11HullShaderVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11HullShader * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11HullShader * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11HullShader * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11HullShader * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11HullShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11HullShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11HullShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        END_INTERFACE\n    } ID3D11HullShaderVtbl;\n\n    interface ID3D11HullShader\n    {\n        CONST_VTBL struct ID3D11HullShaderVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11HullShader_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11HullShader_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11HullShader_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11HullShader_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11HullShader_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11HullShader_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11HullShader_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11HullShader_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D11DomainShader_INTERFACE_DEFINED__\n#define __ID3D11DomainShader_INTERFACE_DEFINED__\n\n/* interface ID3D11DomainShader */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11DomainShader;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"f582c508-0f36-490c-9977-31eece268cfa\")\n    ID3D11DomainShader : public ID3D11DeviceChild\n    {\n    public:\n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11DomainShaderVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11DomainShader * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11DomainShader * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11DomainShader * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11DomainShader * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11DomainShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11DomainShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11DomainShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        END_INTERFACE\n    } ID3D11DomainShaderVtbl;\n\n    interface ID3D11DomainShader\n    {\n        CONST_VTBL struct ID3D11DomainShaderVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11DomainShader_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11DomainShader_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11DomainShader_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11DomainShader_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11DomainShader_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11DomainShader_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11DomainShader_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11DomainShader_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D11GeometryShader_INTERFACE_DEFINED__\n#define __ID3D11GeometryShader_INTERFACE_DEFINED__\n\n/* interface ID3D11GeometryShader */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11GeometryShader;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"38325b96-effb-4022-ba02-2e795b70275c\")\n    ID3D11GeometryShader : public ID3D11DeviceChild\n    {\n    public:\n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11GeometryShaderVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11GeometryShader * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11GeometryShader * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11GeometryShader * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11GeometryShader * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11GeometryShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11GeometryShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11GeometryShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        END_INTERFACE\n    } ID3D11GeometryShaderVtbl;\n\n    interface ID3D11GeometryShader\n    {\n        CONST_VTBL struct ID3D11GeometryShaderVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11GeometryShader_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11GeometryShader_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11GeometryShader_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11GeometryShader_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11GeometryShader_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11GeometryShader_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11GeometryShader_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11GeometryShader_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D11PixelShader_INTERFACE_DEFINED__\n#define __ID3D11PixelShader_INTERFACE_DEFINED__\n\n/* interface ID3D11PixelShader */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11PixelShader;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"ea82e40d-51dc-4f33-93d4-db7c9125ae8c\")\n    ID3D11PixelShader : public ID3D11DeviceChild\n    {\n    public:\n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11PixelShaderVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11PixelShader * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11PixelShader * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11PixelShader * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11PixelShader * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11PixelShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11PixelShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11PixelShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        END_INTERFACE\n    } ID3D11PixelShaderVtbl;\n\n    interface ID3D11PixelShader\n    {\n        CONST_VTBL struct ID3D11PixelShaderVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11PixelShader_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11PixelShader_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11PixelShader_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11PixelShader_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11PixelShader_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11PixelShader_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11PixelShader_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11PixelShader_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D11ComputeShader_INTERFACE_DEFINED__\n#define __ID3D11ComputeShader_INTERFACE_DEFINED__\n\n/* interface ID3D11ComputeShader */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11ComputeShader;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"4f5b196e-c2bd-495e-bd01-1fded38e4969\")\n    ID3D11ComputeShader : public ID3D11DeviceChild\n    {\n    public:\n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11ComputeShaderVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11ComputeShader * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11ComputeShader * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11ComputeShader * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11ComputeShader * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11ComputeShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11ComputeShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11ComputeShader * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        END_INTERFACE\n    } ID3D11ComputeShaderVtbl;\n\n    interface ID3D11ComputeShader\n    {\n        CONST_VTBL struct ID3D11ComputeShaderVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11ComputeShader_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11ComputeShader_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11ComputeShader_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11ComputeShader_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11ComputeShader_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11ComputeShader_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11ComputeShader_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11ComputeShader_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D11InputLayout_INTERFACE_DEFINED__\n#define __ID3D11InputLayout_INTERFACE_DEFINED__\n\n/* interface ID3D11InputLayout */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11InputLayout;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"e4819ddc-4cf0-4025-bd26-5de82a3e07b7\")\n    ID3D11InputLayout : public ID3D11DeviceChild\n    {\n    public:\n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11InputLayoutVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11InputLayout * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11InputLayout * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11InputLayout * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11InputLayout * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11InputLayout * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11InputLayout * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11InputLayout * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        END_INTERFACE\n    } ID3D11InputLayoutVtbl;\n\n    interface ID3D11InputLayout\n    {\n        CONST_VTBL struct ID3D11InputLayoutVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11InputLayout_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11InputLayout_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11InputLayout_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11InputLayout_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11InputLayout_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11InputLayout_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11InputLayout_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11InputLayout_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0021 */\n/* [local] */ \n\ntypedef \nenum D3D11_FILTER\n    {\tD3D11_FILTER_MIN_MAG_MIP_POINT\t= 0,\n\tD3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR\t= 0x1,\n\tD3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT\t= 0x4,\n\tD3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR\t= 0x5,\n\tD3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT\t= 0x10,\n\tD3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR\t= 0x11,\n\tD3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT\t= 0x14,\n\tD3D11_FILTER_MIN_MAG_MIP_LINEAR\t= 0x15,\n\tD3D11_FILTER_ANISOTROPIC\t= 0x55,\n\tD3D11_FILTER_COMPARISON_MIN_MAG_MIP_POINT\t= 0x80,\n\tD3D11_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR\t= 0x81,\n\tD3D11_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT\t= 0x84,\n\tD3D11_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR\t= 0x85,\n\tD3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT\t= 0x90,\n\tD3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR\t= 0x91,\n\tD3D11_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT\t= 0x94,\n\tD3D11_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR\t= 0x95,\n\tD3D11_FILTER_COMPARISON_ANISOTROPIC\t= 0xd5\n    } \tD3D11_FILTER;\n\ntypedef \nenum D3D11_FILTER_TYPE\n    {\tD3D11_FILTER_TYPE_POINT\t= 0,\n\tD3D11_FILTER_TYPE_LINEAR\t= 1\n    } \tD3D11_FILTER_TYPE;\n\n#define\tD3D11_FILTER_TYPE_MASK\t( 0x3 )\n\n#define\tD3D11_MIN_FILTER_SHIFT\t( 4 )\n\n#define\tD3D11_MAG_FILTER_SHIFT\t( 2 )\n\n#define\tD3D11_MIP_FILTER_SHIFT\t( 0 )\n\n#define\tD3D11_COMPARISON_FILTERING_BIT\t( 0x80 )\n\n#define\tD3D11_ANISOTROPIC_FILTERING_BIT\t( 0x40 )\n\n#define D3D11_ENCODE_BASIC_FILTER( min, mag, mip, bComparison )                                           \\\n                                   ( ( D3D11_FILTER ) (                                                   \\\n                                   ( ( bComparison ) ? D3D11_COMPARISON_FILTERING_BIT : 0 ) |             \\\n                                   ( ( ( min ) & D3D11_FILTER_TYPE_MASK ) << D3D11_MIN_FILTER_SHIFT ) |   \\\n                                   ( ( ( mag ) & D3D11_FILTER_TYPE_MASK ) << D3D11_MAG_FILTER_SHIFT ) |   \\\n                                   ( ( ( mip ) & D3D11_FILTER_TYPE_MASK ) << D3D11_MIP_FILTER_SHIFT ) ) )   \n#define D3D11_ENCODE_ANISOTROPIC_FILTER( bComparison )                                                \\\n                                         ( ( D3D11_FILTER ) (                                         \\\n                                         D3D11_ANISOTROPIC_FILTERING_BIT |                            \\\n                                         D3D11_ENCODE_BASIC_FILTER( D3D11_FILTER_TYPE_LINEAR,         \\\n                                                                    D3D11_FILTER_TYPE_LINEAR,         \\\n                                                                    D3D11_FILTER_TYPE_LINEAR,         \\\n                                                                    bComparison ) ) )                   \n#define D3D11_DECODE_MIN_FILTER( d3d11Filter )                                                              \\\n                                 ( ( D3D11_FILTER_TYPE )                                                    \\\n                                 ( ( ( d3d11Filter ) >> D3D11_MIN_FILTER_SHIFT ) & D3D11_FILTER_TYPE_MASK ) ) \n#define D3D11_DECODE_MAG_FILTER( d3d11Filter )                                                              \\\n                                 ( ( D3D11_FILTER_TYPE )                                                    \\\n                                 ( ( ( d3d11Filter ) >> D3D11_MAG_FILTER_SHIFT ) & D3D11_FILTER_TYPE_MASK ) ) \n#define D3D11_DECODE_MIP_FILTER( d3d11Filter )                                                              \\\n                                 ( ( D3D11_FILTER_TYPE )                                                    \\\n                                 ( ( ( d3d11Filter ) >> D3D11_MIP_FILTER_SHIFT ) & D3D11_FILTER_TYPE_MASK ) ) \n#define D3D11_DECODE_IS_COMPARISON_FILTER( d3d11Filter )                                                    \\\n                                 ( ( d3d11Filter ) & D3D11_COMPARISON_FILTERING_BIT )                         \n#define D3D11_DECODE_IS_ANISOTROPIC_FILTER( d3d11Filter )                                               \\\n                            ( ( ( d3d11Filter ) & D3D11_ANISOTROPIC_FILTERING_BIT ) &&                  \\\n                            ( D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MIN_FILTER( d3d11Filter ) ) &&   \\\n                            ( D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MAG_FILTER( d3d11Filter ) ) &&   \\\n                            ( D3D11_FILTER_TYPE_LINEAR == D3D11_DECODE_MIP_FILTER( d3d11Filter ) ) )      \ntypedef \nenum D3D11_TEXTURE_ADDRESS_MODE\n    {\tD3D11_TEXTURE_ADDRESS_WRAP\t= 1,\n\tD3D11_TEXTURE_ADDRESS_MIRROR\t= 2,\n\tD3D11_TEXTURE_ADDRESS_CLAMP\t= 3,\n\tD3D11_TEXTURE_ADDRESS_BORDER\t= 4,\n\tD3D11_TEXTURE_ADDRESS_MIRROR_ONCE\t= 5\n    } \tD3D11_TEXTURE_ADDRESS_MODE;\n\ntypedef struct D3D11_SAMPLER_DESC\n    {\n    D3D11_FILTER Filter;\n    D3D11_TEXTURE_ADDRESS_MODE AddressU;\n    D3D11_TEXTURE_ADDRESS_MODE AddressV;\n    D3D11_TEXTURE_ADDRESS_MODE AddressW;\n    FLOAT MipLODBias;\n    UINT MaxAnisotropy;\n    D3D11_COMPARISON_FUNC ComparisonFunc;\n    FLOAT BorderColor[ 4 ];\n    FLOAT MinLOD;\n    FLOAT MaxLOD;\n    } \tD3D11_SAMPLER_DESC;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_SAMPLER_DESC : public D3D11_SAMPLER_DESC\n{\n    CD3D11_SAMPLER_DESC()\n    {}\n    explicit CD3D11_SAMPLER_DESC( const D3D11_SAMPLER_DESC& o ) :\n        D3D11_SAMPLER_DESC( o )\n    {}\n    explicit CD3D11_SAMPLER_DESC( CD3D11_DEFAULT )\n    {\n        Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;\n        AddressU = D3D11_TEXTURE_ADDRESS_CLAMP;\n        AddressV = D3D11_TEXTURE_ADDRESS_CLAMP;\n        AddressW = D3D11_TEXTURE_ADDRESS_CLAMP;\n        MipLODBias = 0;\n        MaxAnisotropy = 1;\n        ComparisonFunc = D3D11_COMPARISON_NEVER;\n        BorderColor[ 0 ] = 1.0f;\n        BorderColor[ 1 ] = 1.0f;\n        BorderColor[ 2 ] = 1.0f;\n        BorderColor[ 3 ] = 1.0f;\n        MinLOD = -3.402823466e+38F; // -FLT_MAX\n        MaxLOD = 3.402823466e+38F; // FLT_MAX\n    }\n    explicit CD3D11_SAMPLER_DESC(\n        D3D11_FILTER filter,\n        D3D11_TEXTURE_ADDRESS_MODE addressU,\n        D3D11_TEXTURE_ADDRESS_MODE addressV,\n        D3D11_TEXTURE_ADDRESS_MODE addressW,\n        FLOAT mipLODBias,\n        UINT maxAnisotropy,\n        D3D11_COMPARISON_FUNC comparisonFunc,\n        __in_ecount_opt( 4 ) const FLOAT* borderColor, // RGBA\n        FLOAT minLOD,\n        FLOAT maxLOD )\n    {\n        Filter = filter;\n        AddressU = addressU;\n        AddressV = addressV;\n        AddressW = addressW;\n        MipLODBias = mipLODBias;\n        MaxAnisotropy = maxAnisotropy;\n        ComparisonFunc = comparisonFunc;\n        const float defaultColor[ 4 ] = { 1.0f, 1.0f, 1.0f, 1.0f };\n        if (!borderColor) borderColor = defaultColor;\n        BorderColor[ 0 ] = borderColor[ 0 ];\n        BorderColor[ 1 ] = borderColor[ 1 ];\n        BorderColor[ 2 ] = borderColor[ 2 ];\n        BorderColor[ 3 ] = borderColor[ 3 ];\n        MinLOD = minLOD;\n        MaxLOD = maxLOD;\n    }\n    ~CD3D11_SAMPLER_DESC() {}\n    operator const D3D11_SAMPLER_DESC&() const { return *this; }\n};\nextern \"C\"{\n#endif\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0021_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0021_v0_0_s_ifspec;\n\n#ifndef __ID3D11SamplerState_INTERFACE_DEFINED__\n#define __ID3D11SamplerState_INTERFACE_DEFINED__\n\n/* interface ID3D11SamplerState */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11SamplerState;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"da6fea51-564c-4487-9810-f0d0f9b4e3a5\")\n    ID3D11SamplerState : public ID3D11DeviceChild\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D11_SAMPLER_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11SamplerStateVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11SamplerState * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11SamplerState * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11SamplerState * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11SamplerState * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11SamplerState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11SamplerState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11SamplerState * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D11SamplerState * This,\n            /* [annotation] */ \n            __out  D3D11_SAMPLER_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D11SamplerStateVtbl;\n\n    interface ID3D11SamplerState\n    {\n        CONST_VTBL struct ID3D11SamplerStateVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11SamplerState_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11SamplerState_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11SamplerState_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11SamplerState_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11SamplerState_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11SamplerState_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11SamplerState_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11SamplerState_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11SamplerState_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0022 */\n/* [local] */ \n\ntypedef \nenum D3D11_FORMAT_SUPPORT\n    {\tD3D11_FORMAT_SUPPORT_BUFFER\t= 0x1,\n\tD3D11_FORMAT_SUPPORT_IA_VERTEX_BUFFER\t= 0x2,\n\tD3D11_FORMAT_SUPPORT_IA_INDEX_BUFFER\t= 0x4,\n\tD3D11_FORMAT_SUPPORT_SO_BUFFER\t= 0x8,\n\tD3D11_FORMAT_SUPPORT_TEXTURE1D\t= 0x10,\n\tD3D11_FORMAT_SUPPORT_TEXTURE2D\t= 0x20,\n\tD3D11_FORMAT_SUPPORT_TEXTURE3D\t= 0x40,\n\tD3D11_FORMAT_SUPPORT_TEXTURECUBE\t= 0x80,\n\tD3D11_FORMAT_SUPPORT_SHADER_LOAD\t= 0x100,\n\tD3D11_FORMAT_SUPPORT_SHADER_SAMPLE\t= 0x200,\n\tD3D11_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON\t= 0x400,\n\tD3D11_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT\t= 0x800,\n\tD3D11_FORMAT_SUPPORT_MIP\t= 0x1000,\n\tD3D11_FORMAT_SUPPORT_MIP_AUTOGEN\t= 0x2000,\n\tD3D11_FORMAT_SUPPORT_RENDER_TARGET\t= 0x4000,\n\tD3D11_FORMAT_SUPPORT_BLENDABLE\t= 0x8000,\n\tD3D11_FORMAT_SUPPORT_DEPTH_STENCIL\t= 0x10000,\n\tD3D11_FORMAT_SUPPORT_CPU_LOCKABLE\t= 0x20000,\n\tD3D11_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE\t= 0x40000,\n\tD3D11_FORMAT_SUPPORT_DISPLAY\t= 0x80000,\n\tD3D11_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT\t= 0x100000,\n\tD3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET\t= 0x200000,\n\tD3D11_FORMAT_SUPPORT_MULTISAMPLE_LOAD\t= 0x400000,\n\tD3D11_FORMAT_SUPPORT_SHADER_GATHER\t= 0x800000,\n\tD3D11_FORMAT_SUPPORT_BACK_BUFFER_CAST\t= 0x1000000,\n\tD3D11_FORMAT_SUPPORT_TYPED_UNORDERED_ACCESS_VIEW\t= 0x2000000,\n\tD3D11_FORMAT_SUPPORT_SHADER_GATHER_COMPARISON\t= 0x4000000\n    } \tD3D11_FORMAT_SUPPORT;\n\ntypedef \nenum D3D11_FORMAT_SUPPORT2\n    {\tD3D11_FORMAT_SUPPORT2_UAV_ATOMIC_ADD\t= 0x1,\n\tD3D11_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS\t= 0x2,\n\tD3D11_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE\t= 0x4,\n\tD3D11_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE\t= 0x8,\n\tD3D11_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX\t= 0x10,\n\tD3D11_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX\t= 0x20,\n\tD3D11_FORMAT_SUPPORT2_UAV_TYPED_LOAD\t= 0x40,\n\tD3D11_FORMAT_SUPPORT2_UAV_TYPED_STORE\t= 0x80\n    } \tD3D11_FORMAT_SUPPORT2;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0022_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0022_v0_0_s_ifspec;\n\n#ifndef __ID3D11Asynchronous_INTERFACE_DEFINED__\n#define __ID3D11Asynchronous_INTERFACE_DEFINED__\n\n/* interface ID3D11Asynchronous */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11Asynchronous;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"4b35d0cd-1e15-4258-9c98-1b1333f6dd3b\")\n    ID3D11Asynchronous : public ID3D11DeviceChild\n    {\n    public:\n        virtual UINT STDMETHODCALLTYPE GetDataSize( void) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11AsynchronousVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11Asynchronous * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11Asynchronous * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11Asynchronous * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11Asynchronous * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11Asynchronous * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11Asynchronous * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11Asynchronous * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        UINT ( STDMETHODCALLTYPE *GetDataSize )( \n            ID3D11Asynchronous * This);\n        \n        END_INTERFACE\n    } ID3D11AsynchronousVtbl;\n\n    interface ID3D11Asynchronous\n    {\n        CONST_VTBL struct ID3D11AsynchronousVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11Asynchronous_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11Asynchronous_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11Asynchronous_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11Asynchronous_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11Asynchronous_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11Asynchronous_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11Asynchronous_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11Asynchronous_GetDataSize(This)\t\\\n    ( (This)->lpVtbl -> GetDataSize(This) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11Asynchronous_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0023 */\n/* [local] */ \n\ntypedef \nenum D3D11_ASYNC_GETDATA_FLAG\n    {\tD3D11_ASYNC_GETDATA_DONOTFLUSH\t= 0x1\n    } \tD3D11_ASYNC_GETDATA_FLAG;\n\ntypedef \nenum D3D11_QUERY\n    {\tD3D11_QUERY_EVENT\t= 0,\n\tD3D11_QUERY_OCCLUSION\t= ( D3D11_QUERY_EVENT + 1 ) ,\n\tD3D11_QUERY_TIMESTAMP\t= ( D3D11_QUERY_OCCLUSION + 1 ) ,\n\tD3D11_QUERY_TIMESTAMP_DISJOINT\t= ( D3D11_QUERY_TIMESTAMP + 1 ) ,\n\tD3D11_QUERY_PIPELINE_STATISTICS\t= ( D3D11_QUERY_TIMESTAMP_DISJOINT + 1 ) ,\n\tD3D11_QUERY_OCCLUSION_PREDICATE\t= ( D3D11_QUERY_PIPELINE_STATISTICS + 1 ) ,\n\tD3D11_QUERY_SO_STATISTICS\t= ( D3D11_QUERY_OCCLUSION_PREDICATE + 1 ) ,\n\tD3D11_QUERY_SO_OVERFLOW_PREDICATE\t= ( D3D11_QUERY_SO_STATISTICS + 1 ) ,\n\tD3D11_QUERY_SO_STATISTICS_STREAM0\t= ( D3D11_QUERY_SO_OVERFLOW_PREDICATE + 1 ) ,\n\tD3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0\t= ( D3D11_QUERY_SO_STATISTICS_STREAM0 + 1 ) ,\n\tD3D11_QUERY_SO_STATISTICS_STREAM1\t= ( D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0 + 1 ) ,\n\tD3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1\t= ( D3D11_QUERY_SO_STATISTICS_STREAM1 + 1 ) ,\n\tD3D11_QUERY_SO_STATISTICS_STREAM2\t= ( D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1 + 1 ) ,\n\tD3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2\t= ( D3D11_QUERY_SO_STATISTICS_STREAM2 + 1 ) ,\n\tD3D11_QUERY_SO_STATISTICS_STREAM3\t= ( D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2 + 1 ) ,\n\tD3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM3\t= ( D3D11_QUERY_SO_STATISTICS_STREAM3 + 1 ) \n    } \tD3D11_QUERY;\n\ntypedef \nenum D3D11_QUERY_MISC_FLAG\n    {\tD3D11_QUERY_MISC_PREDICATEHINT\t= 0x1\n    } \tD3D11_QUERY_MISC_FLAG;\n\ntypedef struct D3D11_QUERY_DESC\n    {\n    D3D11_QUERY Query;\n    UINT MiscFlags;\n    } \tD3D11_QUERY_DESC;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_QUERY_DESC : public D3D11_QUERY_DESC\n{\n    CD3D11_QUERY_DESC()\n    {}\n    explicit CD3D11_QUERY_DESC( const D3D11_QUERY_DESC& o ) :\n        D3D11_QUERY_DESC( o )\n    {}\n    explicit CD3D11_QUERY_DESC(\n        D3D11_QUERY query,\n        UINT miscFlags = 0 )\n    {\n        Query = query;\n        MiscFlags = miscFlags;\n    }\n    ~CD3D11_QUERY_DESC() {}\n    operator const D3D11_QUERY_DESC&() const { return *this; }\n};\nextern \"C\"{\n#endif\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0023_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0023_v0_0_s_ifspec;\n\n#ifndef __ID3D11Query_INTERFACE_DEFINED__\n#define __ID3D11Query_INTERFACE_DEFINED__\n\n/* interface ID3D11Query */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11Query;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"d6c00747-87b7-425e-b84d-44d108560afd\")\n    ID3D11Query : public ID3D11Asynchronous\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D11_QUERY_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11QueryVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11Query * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11Query * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11Query * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11Query * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11Query * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11Query * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11Query * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        UINT ( STDMETHODCALLTYPE *GetDataSize )( \n            ID3D11Query * This);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D11Query * This,\n            /* [annotation] */ \n            __out  D3D11_QUERY_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D11QueryVtbl;\n\n    interface ID3D11Query\n    {\n        CONST_VTBL struct ID3D11QueryVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11Query_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11Query_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11Query_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11Query_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11Query_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11Query_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11Query_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11Query_GetDataSize(This)\t\\\n    ( (This)->lpVtbl -> GetDataSize(This) ) \n\n\n#define ID3D11Query_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11Query_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D11Predicate_INTERFACE_DEFINED__\n#define __ID3D11Predicate_INTERFACE_DEFINED__\n\n/* interface ID3D11Predicate */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11Predicate;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9eb576dd-9f77-4d86-81aa-8bab5fe490e2\")\n    ID3D11Predicate : public ID3D11Query\n    {\n    public:\n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11PredicateVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11Predicate * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11Predicate * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11Predicate * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11Predicate * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11Predicate * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11Predicate * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11Predicate * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        UINT ( STDMETHODCALLTYPE *GetDataSize )( \n            ID3D11Predicate * This);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D11Predicate * This,\n            /* [annotation] */ \n            __out  D3D11_QUERY_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D11PredicateVtbl;\n\n    interface ID3D11Predicate\n    {\n        CONST_VTBL struct ID3D11PredicateVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11Predicate_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11Predicate_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11Predicate_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11Predicate_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11Predicate_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11Predicate_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11Predicate_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11Predicate_GetDataSize(This)\t\\\n    ( (This)->lpVtbl -> GetDataSize(This) ) \n\n\n#define ID3D11Predicate_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11Predicate_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0025 */\n/* [local] */ \n\ntypedef struct D3D11_QUERY_DATA_TIMESTAMP_DISJOINT\n    {\n    UINT64 Frequency;\n    BOOL Disjoint;\n    } \tD3D11_QUERY_DATA_TIMESTAMP_DISJOINT;\n\ntypedef struct D3D11_QUERY_DATA_PIPELINE_STATISTICS\n    {\n    UINT64 IAVertices;\n    UINT64 IAPrimitives;\n    UINT64 VSInvocations;\n    UINT64 GSInvocations;\n    UINT64 GSPrimitives;\n    UINT64 CInvocations;\n    UINT64 CPrimitives;\n    UINT64 PSInvocations;\n    UINT64 HSInvocations;\n    UINT64 DSInvocations;\n    UINT64 CSInvocations;\n    } \tD3D11_QUERY_DATA_PIPELINE_STATISTICS;\n\ntypedef struct D3D11_QUERY_DATA_SO_STATISTICS\n    {\n    UINT64 NumPrimitivesWritten;\n    UINT64 PrimitivesStorageNeeded;\n    } \tD3D11_QUERY_DATA_SO_STATISTICS;\n\ntypedef \nenum D3D11_COUNTER\n    {\tD3D11_COUNTER_DEVICE_DEPENDENT_0\t= 0x40000000\n    } \tD3D11_COUNTER;\n\ntypedef \nenum D3D11_COUNTER_TYPE\n    {\tD3D11_COUNTER_TYPE_FLOAT32\t= 0,\n\tD3D11_COUNTER_TYPE_UINT16\t= ( D3D11_COUNTER_TYPE_FLOAT32 + 1 ) ,\n\tD3D11_COUNTER_TYPE_UINT32\t= ( D3D11_COUNTER_TYPE_UINT16 + 1 ) ,\n\tD3D11_COUNTER_TYPE_UINT64\t= ( D3D11_COUNTER_TYPE_UINT32 + 1 ) \n    } \tD3D11_COUNTER_TYPE;\n\ntypedef struct D3D11_COUNTER_DESC\n    {\n    D3D11_COUNTER Counter;\n    UINT MiscFlags;\n    } \tD3D11_COUNTER_DESC;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\nstruct CD3D11_COUNTER_DESC : public D3D11_COUNTER_DESC\n{\n    CD3D11_COUNTER_DESC()\n    {}\n    explicit CD3D11_COUNTER_DESC( const D3D11_COUNTER_DESC& o ) :\n        D3D11_COUNTER_DESC( o )\n    {}\n    explicit CD3D11_COUNTER_DESC(\n        D3D11_COUNTER counter,\n        UINT miscFlags = 0 )\n    {\n        Counter = counter;\n        MiscFlags = miscFlags;\n    }\n    ~CD3D11_COUNTER_DESC() {}\n    operator const D3D11_COUNTER_DESC&() const { return *this; }\n};\nextern \"C\"{\n#endif\ntypedef struct D3D11_COUNTER_INFO\n    {\n    D3D11_COUNTER LastDeviceDependentCounter;\n    UINT NumSimultaneousCounters;\n    UINT8 NumDetectableParallelUnits;\n    } \tD3D11_COUNTER_INFO;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0025_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0025_v0_0_s_ifspec;\n\n#ifndef __ID3D11Counter_INTERFACE_DEFINED__\n#define __ID3D11Counter_INTERFACE_DEFINED__\n\n/* interface ID3D11Counter */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11Counter;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"6e8c49fb-a371-4770-b440-29086022b741\")\n    ID3D11Counter : public ID3D11Asynchronous\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D11_COUNTER_DESC *pDesc) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11CounterVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11Counter * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11Counter * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11Counter * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11Counter * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11Counter * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11Counter * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11Counter * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        UINT ( STDMETHODCALLTYPE *GetDataSize )( \n            ID3D11Counter * This);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D11Counter * This,\n            /* [annotation] */ \n            __out  D3D11_COUNTER_DESC *pDesc);\n        \n        END_INTERFACE\n    } ID3D11CounterVtbl;\n\n    interface ID3D11Counter\n    {\n        CONST_VTBL struct ID3D11CounterVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11Counter_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11Counter_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11Counter_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11Counter_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11Counter_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11Counter_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11Counter_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11Counter_GetDataSize(This)\t\\\n    ( (This)->lpVtbl -> GetDataSize(This) ) \n\n\n#define ID3D11Counter_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11Counter_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0026 */\n/* [local] */ \n\ntypedef \nenum D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS\n    {\tD3D11_STANDARD_MULTISAMPLE_PATTERN\t= 0xffffffff,\n\tD3D11_CENTER_MULTISAMPLE_PATTERN\t= 0xfffffffe\n    } \tD3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS;\n\ntypedef \nenum D3D11_DEVICE_CONTEXT_TYPE\n    {\tD3D11_DEVICE_CONTEXT_IMMEDIATE\t= 0,\n\tD3D11_DEVICE_CONTEXT_DEFERRED\t= ( D3D11_DEVICE_CONTEXT_IMMEDIATE + 1 ) \n    } \tD3D11_DEVICE_CONTEXT_TYPE;\n\ntypedef struct D3D11_CLASS_INSTANCE_DESC\n    {\n    UINT InstanceId;\n    UINT InstanceIndex;\n    UINT TypeId;\n    UINT ConstantBuffer;\n    UINT BaseConstantBufferOffset;\n    UINT BaseTexture;\n    UINT BaseSampler;\n    BOOL Created;\n    } \tD3D11_CLASS_INSTANCE_DESC;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0026_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0026_v0_0_s_ifspec;\n\n#ifndef __ID3D11ClassInstance_INTERFACE_DEFINED__\n#define __ID3D11ClassInstance_INTERFACE_DEFINED__\n\n/* interface ID3D11ClassInstance */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11ClassInstance;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"a6cd7faa-b0b7-4a2f-9436-8662a65797cb\")\n    ID3D11ClassInstance : public ID3D11DeviceChild\n    {\n    public:\n        virtual void STDMETHODCALLTYPE GetClassLinkage( \n            /* [annotation] */ \n            __out  ID3D11ClassLinkage **ppLinkage) = 0;\n        \n        virtual void STDMETHODCALLTYPE GetDesc( \n            /* [annotation] */ \n            __out  D3D11_CLASS_INSTANCE_DESC *pDesc) = 0;\n        \n        virtual void STDMETHODCALLTYPE GetInstanceName( \n            /* [annotation] */ \n            __out_ecount_opt(*pBufferLength)  LPSTR pInstanceName,\n            /* [annotation] */ \n            __inout  SIZE_T *pBufferLength) = 0;\n        \n        virtual void STDMETHODCALLTYPE GetTypeName( \n            /* [annotation] */ \n            __out_ecount_opt(*pBufferLength)  LPSTR pTypeName,\n            /* [annotation] */ \n            __inout  SIZE_T *pBufferLength) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11ClassInstanceVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11ClassInstance * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11ClassInstance * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11ClassInstance * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11ClassInstance * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11ClassInstance * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11ClassInstance * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11ClassInstance * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *GetClassLinkage )( \n            ID3D11ClassInstance * This,\n            /* [annotation] */ \n            __out  ID3D11ClassLinkage **ppLinkage);\n        \n        void ( STDMETHODCALLTYPE *GetDesc )( \n            ID3D11ClassInstance * This,\n            /* [annotation] */ \n            __out  D3D11_CLASS_INSTANCE_DESC *pDesc);\n        \n        void ( STDMETHODCALLTYPE *GetInstanceName )( \n            ID3D11ClassInstance * This,\n            /* [annotation] */ \n            __out_ecount_opt(*pBufferLength)  LPSTR pInstanceName,\n            /* [annotation] */ \n            __inout  SIZE_T *pBufferLength);\n        \n        void ( STDMETHODCALLTYPE *GetTypeName )( \n            ID3D11ClassInstance * This,\n            /* [annotation] */ \n            __out_ecount_opt(*pBufferLength)  LPSTR pTypeName,\n            /* [annotation] */ \n            __inout  SIZE_T *pBufferLength);\n        \n        END_INTERFACE\n    } ID3D11ClassInstanceVtbl;\n\n    interface ID3D11ClassInstance\n    {\n        CONST_VTBL struct ID3D11ClassInstanceVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11ClassInstance_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11ClassInstance_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11ClassInstance_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11ClassInstance_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11ClassInstance_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11ClassInstance_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11ClassInstance_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11ClassInstance_GetClassLinkage(This,ppLinkage)\t\\\n    ( (This)->lpVtbl -> GetClassLinkage(This,ppLinkage) ) \n\n#define ID3D11ClassInstance_GetDesc(This,pDesc)\t\\\n    ( (This)->lpVtbl -> GetDesc(This,pDesc) ) \n\n#define ID3D11ClassInstance_GetInstanceName(This,pInstanceName,pBufferLength)\t\\\n    ( (This)->lpVtbl -> GetInstanceName(This,pInstanceName,pBufferLength) ) \n\n#define ID3D11ClassInstance_GetTypeName(This,pTypeName,pBufferLength)\t\\\n    ( (This)->lpVtbl -> GetTypeName(This,pTypeName,pBufferLength) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11ClassInstance_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D11ClassLinkage_INTERFACE_DEFINED__\n#define __ID3D11ClassLinkage_INTERFACE_DEFINED__\n\n/* interface ID3D11ClassLinkage */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11ClassLinkage;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"ddf57cba-9543-46e4-a12b-f207a0fe7fed\")\n    ID3D11ClassLinkage : public ID3D11DeviceChild\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE GetClassInstance( \n            /* [annotation] */ \n            __in  LPCSTR pClassInstanceName,\n            /* [annotation] */ \n            __in  UINT InstanceIndex,\n            /* [annotation] */ \n            __out  ID3D11ClassInstance **ppInstance) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateClassInstance( \n            /* [annotation] */ \n            __in  LPCSTR pClassTypeName,\n            /* [annotation] */ \n            __in  UINT ConstantBufferOffset,\n            /* [annotation] */ \n            __in  UINT ConstantVectorOffset,\n            /* [annotation] */ \n            __in  UINT TextureOffset,\n            /* [annotation] */ \n            __in  UINT SamplerOffset,\n            /* [annotation] */ \n            __out  ID3D11ClassInstance **ppInstance) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11ClassLinkageVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11ClassLinkage * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11ClassLinkage * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11ClassLinkage * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11ClassLinkage * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11ClassLinkage * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11ClassLinkage * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11ClassLinkage * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetClassInstance )( \n            ID3D11ClassLinkage * This,\n            /* [annotation] */ \n            __in  LPCSTR pClassInstanceName,\n            /* [annotation] */ \n            __in  UINT InstanceIndex,\n            /* [annotation] */ \n            __out  ID3D11ClassInstance **ppInstance);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateClassInstance )( \n            ID3D11ClassLinkage * This,\n            /* [annotation] */ \n            __in  LPCSTR pClassTypeName,\n            /* [annotation] */ \n            __in  UINT ConstantBufferOffset,\n            /* [annotation] */ \n            __in  UINT ConstantVectorOffset,\n            /* [annotation] */ \n            __in  UINT TextureOffset,\n            /* [annotation] */ \n            __in  UINT SamplerOffset,\n            /* [annotation] */ \n            __out  ID3D11ClassInstance **ppInstance);\n        \n        END_INTERFACE\n    } ID3D11ClassLinkageVtbl;\n\n    interface ID3D11ClassLinkage\n    {\n        CONST_VTBL struct ID3D11ClassLinkageVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11ClassLinkage_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11ClassLinkage_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11ClassLinkage_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11ClassLinkage_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11ClassLinkage_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11ClassLinkage_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11ClassLinkage_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11ClassLinkage_GetClassInstance(This,pClassInstanceName,InstanceIndex,ppInstance)\t\\\n    ( (This)->lpVtbl -> GetClassInstance(This,pClassInstanceName,InstanceIndex,ppInstance) ) \n\n#define ID3D11ClassLinkage_CreateClassInstance(This,pClassTypeName,ConstantBufferOffset,ConstantVectorOffset,TextureOffset,SamplerOffset,ppInstance)\t\\\n    ( (This)->lpVtbl -> CreateClassInstance(This,pClassTypeName,ConstantBufferOffset,ConstantVectorOffset,TextureOffset,SamplerOffset,ppInstance) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11ClassLinkage_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D11CommandList_INTERFACE_DEFINED__\n#define __ID3D11CommandList_INTERFACE_DEFINED__\n\n/* interface ID3D11CommandList */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11CommandList;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"a24bc4d1-769e-43f7-8013-98ff566c18e2\")\n    ID3D11CommandList : public ID3D11DeviceChild\n    {\n    public:\n        virtual UINT STDMETHODCALLTYPE GetContextFlags( void) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11CommandListVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11CommandList * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11CommandList * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11CommandList * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11CommandList * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11CommandList * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11CommandList * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11CommandList * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        UINT ( STDMETHODCALLTYPE *GetContextFlags )( \n            ID3D11CommandList * This);\n        \n        END_INTERFACE\n    } ID3D11CommandListVtbl;\n\n    interface ID3D11CommandList\n    {\n        CONST_VTBL struct ID3D11CommandListVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11CommandList_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11CommandList_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11CommandList_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11CommandList_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11CommandList_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11CommandList_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11CommandList_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11CommandList_GetContextFlags(This)\t\\\n    ( (This)->lpVtbl -> GetContextFlags(This) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11CommandList_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0029 */\n/* [local] */ \n\ntypedef \nenum D3D11_FEATURE\n    {\tD3D11_FEATURE_THREADING\t= 0,\n\tD3D11_FEATURE_DOUBLES\t= ( D3D11_FEATURE_THREADING + 1 ) ,\n\tD3D11_FEATURE_FORMAT_SUPPORT\t= ( D3D11_FEATURE_DOUBLES + 1 ) ,\n\tD3D11_FEATURE_FORMAT_SUPPORT2\t= ( D3D11_FEATURE_FORMAT_SUPPORT + 1 ) ,\n\tD3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS\t= ( D3D11_FEATURE_FORMAT_SUPPORT2 + 1 ) \n    } \tD3D11_FEATURE;\n\ntypedef struct D3D11_FEATURE_DATA_THREADING\n    {\n    BOOL DriverConcurrentCreates;\n    BOOL DriverCommandLists;\n    } \tD3D11_FEATURE_DATA_THREADING;\n\ntypedef struct D3D11_FEATURE_DATA_DOUBLES\n    {\n    BOOL DoublePrecisionFloatShaderOps;\n    } \tD3D11_FEATURE_DATA_DOUBLES;\n\ntypedef struct D3D11_FEATURE_DATA_FORMAT_SUPPORT\n    {\n    DXGI_FORMAT InFormat;\n    UINT OutFormatSupport;\n    } \tD3D11_FEATURE_DATA_FORMAT_SUPPORT;\n\ntypedef struct D3D11_FEATURE_DATA_FORMAT_SUPPORT2\n    {\n    DXGI_FORMAT InFormat;\n    UINT OutFormatSupport2;\n    } \tD3D11_FEATURE_DATA_FORMAT_SUPPORT2;\n\ntypedef struct D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS\n    {\n    BOOL ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x;\n    } \tD3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0029_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0029_v0_0_s_ifspec;\n\n#ifndef __ID3D11DeviceContext_INTERFACE_DEFINED__\n#define __ID3D11DeviceContext_INTERFACE_DEFINED__\n\n/* interface ID3D11DeviceContext */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11DeviceContext;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"c0bfa96c-e089-44fb-8eaf-26f8796190da\")\n    ID3D11DeviceContext : public ID3D11DeviceChild\n    {\n    public:\n        virtual void STDMETHODCALLTYPE VSSetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D11Buffer *const *ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE PSSetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D11ShaderResourceView *const *ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE PSSetShader( \n            /* [annotation] */ \n            __in_opt  ID3D11PixelShader *pPixelShader,\n            /* [annotation] */ \n            __in_ecount_opt(NumClassInstances)  ID3D11ClassInstance *const *ppClassInstances,\n            UINT NumClassInstances) = 0;\n        \n        virtual void STDMETHODCALLTYPE PSSetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D11SamplerState *const *ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE VSSetShader( \n            /* [annotation] */ \n            __in_opt  ID3D11VertexShader *pVertexShader,\n            /* [annotation] */ \n            __in_ecount_opt(NumClassInstances)  ID3D11ClassInstance *const *ppClassInstances,\n            UINT NumClassInstances) = 0;\n        \n        virtual void STDMETHODCALLTYPE DrawIndexed( \n            /* [annotation] */ \n            __in  UINT IndexCount,\n            /* [annotation] */ \n            __in  UINT StartIndexLocation,\n            /* [annotation] */ \n            __in  INT BaseVertexLocation) = 0;\n        \n        virtual void STDMETHODCALLTYPE Draw( \n            /* [annotation] */ \n            __in  UINT VertexCount,\n            /* [annotation] */ \n            __in  UINT StartVertexLocation) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE Map( \n            /* [annotation] */ \n            __in  ID3D11Resource *pResource,\n            /* [annotation] */ \n            __in  UINT Subresource,\n            /* [annotation] */ \n            __in  D3D11_MAP MapType,\n            /* [annotation] */ \n            __in  UINT MapFlags,\n            /* [annotation] */ \n            __out  D3D11_MAPPED_SUBRESOURCE *pMappedResource) = 0;\n        \n        virtual void STDMETHODCALLTYPE Unmap( \n            /* [annotation] */ \n            __in  ID3D11Resource *pResource,\n            /* [annotation] */ \n            __in  UINT Subresource) = 0;\n        \n        virtual void STDMETHODCALLTYPE PSSetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D11Buffer *const *ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE IASetInputLayout( \n            /* [annotation] */ \n            __in_opt  ID3D11InputLayout *pInputLayout) = 0;\n        \n        virtual void STDMETHODCALLTYPE IASetVertexBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D11Buffer *const *ppVertexBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  const UINT *pStrides,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  const UINT *pOffsets) = 0;\n        \n        virtual void STDMETHODCALLTYPE IASetIndexBuffer( \n            /* [annotation] */ \n            __in_opt  ID3D11Buffer *pIndexBuffer,\n            /* [annotation] */ \n            __in  DXGI_FORMAT Format,\n            /* [annotation] */ \n            __in  UINT Offset) = 0;\n        \n        virtual void STDMETHODCALLTYPE DrawIndexedInstanced( \n            /* [annotation] */ \n            __in  UINT IndexCountPerInstance,\n            /* [annotation] */ \n            __in  UINT InstanceCount,\n            /* [annotation] */ \n            __in  UINT StartIndexLocation,\n            /* [annotation] */ \n            __in  INT BaseVertexLocation,\n            /* [annotation] */ \n            __in  UINT StartInstanceLocation) = 0;\n        \n        virtual void STDMETHODCALLTYPE DrawInstanced( \n            /* [annotation] */ \n            __in  UINT VertexCountPerInstance,\n            /* [annotation] */ \n            __in  UINT InstanceCount,\n            /* [annotation] */ \n            __in  UINT StartVertexLocation,\n            /* [annotation] */ \n            __in  UINT StartInstanceLocation) = 0;\n        \n        virtual void STDMETHODCALLTYPE GSSetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D11Buffer *const *ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE GSSetShader( \n            /* [annotation] */ \n            __in_opt  ID3D11GeometryShader *pShader,\n            /* [annotation] */ \n            __in_ecount_opt(NumClassInstances)  ID3D11ClassInstance *const *ppClassInstances,\n            UINT NumClassInstances) = 0;\n        \n        virtual void STDMETHODCALLTYPE IASetPrimitiveTopology( \n            /* [annotation] */ \n            __in  D3D11_PRIMITIVE_TOPOLOGY Topology) = 0;\n        \n        virtual void STDMETHODCALLTYPE VSSetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D11ShaderResourceView *const *ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE VSSetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D11SamplerState *const *ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE Begin( \n            /* [annotation] */ \n            __in  ID3D11Asynchronous *pAsync) = 0;\n        \n        virtual void STDMETHODCALLTYPE End( \n            /* [annotation] */ \n            __in  ID3D11Asynchronous *pAsync) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetData( \n            /* [annotation] */ \n            __in  ID3D11Asynchronous *pAsync,\n            /* [annotation] */ \n            __out_bcount_opt( DataSize )  void *pData,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in  UINT GetDataFlags) = 0;\n        \n        virtual void STDMETHODCALLTYPE SetPredication( \n            /* [annotation] */ \n            __in_opt  ID3D11Predicate *pPredicate,\n            /* [annotation] */ \n            __in  BOOL PredicateValue) = 0;\n        \n        virtual void STDMETHODCALLTYPE GSSetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D11ShaderResourceView *const *ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE GSSetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D11SamplerState *const *ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE OMSetRenderTargets( \n            /* [annotation] */ \n            __in_range( 0, D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount_opt(NumViews)  ID3D11RenderTargetView *const *ppRenderTargetViews,\n            /* [annotation] */ \n            __in_opt  ID3D11DepthStencilView *pDepthStencilView) = 0;\n        \n        virtual void STDMETHODCALLTYPE OMSetRenderTargetsAndUnorderedAccessViews( \n            /* [annotation] */ \n            __in  UINT NumRTVs,\n            /* [annotation] */ \n            __in_ecount_opt(NumRTVs)  ID3D11RenderTargetView *const *ppRenderTargetViews,\n            /* [annotation] */ \n            __in_opt  ID3D11DepthStencilView *pDepthStencilView,\n            /* [annotation] */ \n            __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - 1 )  UINT UAVStartSlot,\n            /* [annotation] */ \n            __in  UINT NumUAVs,\n            /* [annotation] */ \n            __in_ecount_opt(NumUAVs)  ID3D11UnorderedAccessView *const *ppUnorderedAccessViews,\n            /* [annotation] */ \n            __in_ecount_opt(NumUAVs)  const UINT *pUAVInitialCounts) = 0;\n        \n        virtual void STDMETHODCALLTYPE OMSetBlendState( \n            /* [annotation] */ \n            __in_opt  ID3D11BlendState *pBlendState,\n            /* [annotation] */ \n            __in_opt  const FLOAT BlendFactor[ 4 ],\n            /* [annotation] */ \n            __in  UINT SampleMask) = 0;\n        \n        virtual void STDMETHODCALLTYPE OMSetDepthStencilState( \n            /* [annotation] */ \n            __in_opt  ID3D11DepthStencilState *pDepthStencilState,\n            /* [annotation] */ \n            __in  UINT StencilRef) = 0;\n        \n        virtual void STDMETHODCALLTYPE SOSetTargets( \n            /* [annotation] */ \n            __in_range( 0, D3D11_SO_BUFFER_SLOT_COUNT)  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount_opt(NumBuffers)  ID3D11Buffer *const *ppSOTargets,\n            /* [annotation] */ \n            __in_ecount_opt(NumBuffers)  const UINT *pOffsets) = 0;\n        \n        virtual void STDMETHODCALLTYPE DrawAuto( void) = 0;\n        \n        virtual void STDMETHODCALLTYPE DrawIndexedInstancedIndirect( \n            /* [annotation] */ \n            __in  ID3D11Buffer *pBufferForArgs,\n            /* [annotation] */ \n            __in  UINT AlignedByteOffsetForArgs) = 0;\n        \n        virtual void STDMETHODCALLTYPE DrawInstancedIndirect( \n            /* [annotation] */ \n            __in  ID3D11Buffer *pBufferForArgs,\n            /* [annotation] */ \n            __in  UINT AlignedByteOffsetForArgs) = 0;\n        \n        virtual void STDMETHODCALLTYPE Dispatch( \n            /* [annotation] */ \n            __in  UINT ThreadGroupCountX,\n            /* [annotation] */ \n            __in  UINT ThreadGroupCountY,\n            /* [annotation] */ \n            __in  UINT ThreadGroupCountZ) = 0;\n        \n        virtual void STDMETHODCALLTYPE DispatchIndirect( \n            /* [annotation] */ \n            __in  ID3D11Buffer *pBufferForArgs,\n            /* [annotation] */ \n            __in  UINT AlignedByteOffsetForArgs) = 0;\n        \n        virtual void STDMETHODCALLTYPE RSSetState( \n            /* [annotation] */ \n            __in_opt  ID3D11RasterizerState *pRasterizerState) = 0;\n        \n        virtual void STDMETHODCALLTYPE RSSetViewports( \n            /* [annotation] */ \n            __in_range(0, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,\n            /* [annotation] */ \n            __in_ecount_opt(NumViewports)  const D3D11_VIEWPORT *pViewports) = 0;\n        \n        virtual void STDMETHODCALLTYPE RSSetScissorRects( \n            /* [annotation] */ \n            __in_range(0, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,\n            /* [annotation] */ \n            __in_ecount_opt(NumRects)  const D3D11_RECT *pRects) = 0;\n        \n        virtual void STDMETHODCALLTYPE CopySubresourceRegion( \n            /* [annotation] */ \n            __in  ID3D11Resource *pDstResource,\n            /* [annotation] */ \n            __in  UINT DstSubresource,\n            /* [annotation] */ \n            __in  UINT DstX,\n            /* [annotation] */ \n            __in  UINT DstY,\n            /* [annotation] */ \n            __in  UINT DstZ,\n            /* [annotation] */ \n            __in  ID3D11Resource *pSrcResource,\n            /* [annotation] */ \n            __in  UINT SrcSubresource,\n            /* [annotation] */ \n            __in_opt  const D3D11_BOX *pSrcBox) = 0;\n        \n        virtual void STDMETHODCALLTYPE CopyResource( \n            /* [annotation] */ \n            __in  ID3D11Resource *pDstResource,\n            /* [annotation] */ \n            __in  ID3D11Resource *pSrcResource) = 0;\n        \n        virtual void STDMETHODCALLTYPE UpdateSubresource( \n            /* [annotation] */ \n            __in  ID3D11Resource *pDstResource,\n            /* [annotation] */ \n            __in  UINT DstSubresource,\n            /* [annotation] */ \n            __in_opt  const D3D11_BOX *pDstBox,\n            /* [annotation] */ \n            __in  const void *pSrcData,\n            /* [annotation] */ \n            __in  UINT SrcRowPitch,\n            /* [annotation] */ \n            __in  UINT SrcDepthPitch) = 0;\n        \n        virtual void STDMETHODCALLTYPE CopyStructureCount( \n            /* [annotation] */ \n            __in  ID3D11Buffer *pDstBuffer,\n            /* [annotation] */ \n            __in  UINT DstAlignedByteOffset,\n            /* [annotation] */ \n            __in  ID3D11UnorderedAccessView *pSrcView) = 0;\n        \n        virtual void STDMETHODCALLTYPE ClearRenderTargetView( \n            /* [annotation] */ \n            __in  ID3D11RenderTargetView *pRenderTargetView,\n            /* [annotation] */ \n            __in  const FLOAT ColorRGBA[ 4 ]) = 0;\n        \n        virtual void STDMETHODCALLTYPE ClearUnorderedAccessViewUint( \n            /* [annotation] */ \n            __in  ID3D11UnorderedAccessView *pUnorderedAccessView,\n            /* [annotation] */ \n            __in  const UINT Values[ 4 ]) = 0;\n        \n        virtual void STDMETHODCALLTYPE ClearUnorderedAccessViewFloat( \n            /* [annotation] */ \n            __in  ID3D11UnorderedAccessView *pUnorderedAccessView,\n            /* [annotation] */ \n            __in  const FLOAT Values[ 4 ]) = 0;\n        \n        virtual void STDMETHODCALLTYPE ClearDepthStencilView( \n            /* [annotation] */ \n            __in  ID3D11DepthStencilView *pDepthStencilView,\n            /* [annotation] */ \n            __in  UINT ClearFlags,\n            /* [annotation] */ \n            __in  FLOAT Depth,\n            /* [annotation] */ \n            __in  UINT8 Stencil) = 0;\n        \n        virtual void STDMETHODCALLTYPE GenerateMips( \n            /* [annotation] */ \n            __in  ID3D11ShaderResourceView *pShaderResourceView) = 0;\n        \n        virtual void STDMETHODCALLTYPE SetResourceMinLOD( \n            /* [annotation] */ \n            __in  ID3D11Resource *pResource,\n            FLOAT MinLOD) = 0;\n        \n        virtual FLOAT STDMETHODCALLTYPE GetResourceMinLOD( \n            /* [annotation] */ \n            __in  ID3D11Resource *pResource) = 0;\n        \n        virtual void STDMETHODCALLTYPE ResolveSubresource( \n            /* [annotation] */ \n            __in  ID3D11Resource *pDstResource,\n            /* [annotation] */ \n            __in  UINT DstSubresource,\n            /* [annotation] */ \n            __in  ID3D11Resource *pSrcResource,\n            /* [annotation] */ \n            __in  UINT SrcSubresource,\n            /* [annotation] */ \n            __in  DXGI_FORMAT Format) = 0;\n        \n        virtual void STDMETHODCALLTYPE ExecuteCommandList( \n            /* [annotation] */ \n            __in  ID3D11CommandList *pCommandList,\n            BOOL RestoreContextState) = 0;\n        \n        virtual void STDMETHODCALLTYPE HSSetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D11ShaderResourceView *const *ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE HSSetShader( \n            /* [annotation] */ \n            __in_opt  ID3D11HullShader *pHullShader,\n            /* [annotation] */ \n            __in_ecount_opt(NumClassInstances)  ID3D11ClassInstance *const *ppClassInstances,\n            UINT NumClassInstances) = 0;\n        \n        virtual void STDMETHODCALLTYPE HSSetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D11SamplerState *const *ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE HSSetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D11Buffer *const *ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE DSSetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D11ShaderResourceView *const *ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE DSSetShader( \n            /* [annotation] */ \n            __in_opt  ID3D11DomainShader *pDomainShader,\n            /* [annotation] */ \n            __in_ecount_opt(NumClassInstances)  ID3D11ClassInstance *const *ppClassInstances,\n            UINT NumClassInstances) = 0;\n        \n        virtual void STDMETHODCALLTYPE DSSetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D11SamplerState *const *ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE DSSetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D11Buffer *const *ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE CSSetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D11ShaderResourceView *const *ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE CSSetUnorderedAccessViews( \n            /* [annotation] */ \n            __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - StartSlot )  UINT NumUAVs,\n            /* [annotation] */ \n            __in_ecount(NumUAVs)  ID3D11UnorderedAccessView *const *ppUnorderedAccessViews,\n            /* [annotation] */ \n            __in_ecount(NumUAVs)  const UINT *pUAVInitialCounts) = 0;\n        \n        virtual void STDMETHODCALLTYPE CSSetShader( \n            /* [annotation] */ \n            __in_opt  ID3D11ComputeShader *pComputeShader,\n            /* [annotation] */ \n            __in_ecount_opt(NumClassInstances)  ID3D11ClassInstance *const *ppClassInstances,\n            UINT NumClassInstances) = 0;\n        \n        virtual void STDMETHODCALLTYPE CSSetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D11SamplerState *const *ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE CSSetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D11Buffer *const *ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE VSGetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D11Buffer **ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE PSGetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D11ShaderResourceView **ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE PSGetShader( \n            /* [annotation] */ \n            __out  ID3D11PixelShader **ppPixelShader,\n            /* [annotation] */ \n            __out_ecount_opt(*pNumClassInstances)  ID3D11ClassInstance **ppClassInstances,\n            /* [annotation] */ \n            __inout_opt  UINT *pNumClassInstances) = 0;\n        \n        virtual void STDMETHODCALLTYPE PSGetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D11SamplerState **ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE VSGetShader( \n            /* [annotation] */ \n            __out  ID3D11VertexShader **ppVertexShader,\n            /* [annotation] */ \n            __out_ecount_opt(*pNumClassInstances)  ID3D11ClassInstance **ppClassInstances,\n            /* [annotation] */ \n            __inout_opt  UINT *pNumClassInstances) = 0;\n        \n        virtual void STDMETHODCALLTYPE PSGetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D11Buffer **ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE IAGetInputLayout( \n            /* [annotation] */ \n            __out  ID3D11InputLayout **ppInputLayout) = 0;\n        \n        virtual void STDMETHODCALLTYPE IAGetVertexBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  ID3D11Buffer **ppVertexBuffers,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  UINT *pStrides,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  UINT *pOffsets) = 0;\n        \n        virtual void STDMETHODCALLTYPE IAGetIndexBuffer( \n            /* [annotation] */ \n            __out_opt  ID3D11Buffer **pIndexBuffer,\n            /* [annotation] */ \n            __out_opt  DXGI_FORMAT *Format,\n            /* [annotation] */ \n            __out_opt  UINT *Offset) = 0;\n        \n        virtual void STDMETHODCALLTYPE GSGetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D11Buffer **ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE GSGetShader( \n            /* [annotation] */ \n            __out  ID3D11GeometryShader **ppGeometryShader,\n            /* [annotation] */ \n            __out_ecount_opt(*pNumClassInstances)  ID3D11ClassInstance **ppClassInstances,\n            /* [annotation] */ \n            __inout_opt  UINT *pNumClassInstances) = 0;\n        \n        virtual void STDMETHODCALLTYPE IAGetPrimitiveTopology( \n            /* [annotation] */ \n            __out  D3D11_PRIMITIVE_TOPOLOGY *pTopology) = 0;\n        \n        virtual void STDMETHODCALLTYPE VSGetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D11ShaderResourceView **ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE VSGetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D11SamplerState **ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE GetPredication( \n            /* [annotation] */ \n            __out_opt  ID3D11Predicate **ppPredicate,\n            /* [annotation] */ \n            __out_opt  BOOL *pPredicateValue) = 0;\n        \n        virtual void STDMETHODCALLTYPE GSGetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D11ShaderResourceView **ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE GSGetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D11SamplerState **ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE OMGetRenderTargets( \n            /* [annotation] */ \n            __in_range( 0, D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount_opt(NumViews)  ID3D11RenderTargetView **ppRenderTargetViews,\n            /* [annotation] */ \n            __out_opt  ID3D11DepthStencilView **ppDepthStencilView) = 0;\n        \n        virtual void STDMETHODCALLTYPE OMGetRenderTargetsAndUnorderedAccessViews( \n            /* [annotation] */ \n            __in_range( 0, D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT )  UINT NumRTVs,\n            /* [annotation] */ \n            __out_ecount_opt(NumRTVs)  ID3D11RenderTargetView **ppRenderTargetViews,\n            /* [annotation] */ \n            __out_opt  ID3D11DepthStencilView **ppDepthStencilView,\n            /* [annotation] */ \n            __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - 1 )  UINT UAVStartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - UAVStartSlot )  UINT NumUAVs,\n            /* [annotation] */ \n            __out_ecount_opt(NumUAVs)  ID3D11UnorderedAccessView **ppUnorderedAccessViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE OMGetBlendState( \n            /* [annotation] */ \n            __out_opt  ID3D11BlendState **ppBlendState,\n            /* [annotation] */ \n            __out_opt  FLOAT BlendFactor[ 4 ],\n            /* [annotation] */ \n            __out_opt  UINT *pSampleMask) = 0;\n        \n        virtual void STDMETHODCALLTYPE OMGetDepthStencilState( \n            /* [annotation] */ \n            __out_opt  ID3D11DepthStencilState **ppDepthStencilState,\n            /* [annotation] */ \n            __out_opt  UINT *pStencilRef) = 0;\n        \n        virtual void STDMETHODCALLTYPE SOGetTargets( \n            /* [annotation] */ \n            __in_range( 0, D3D11_SO_BUFFER_SLOT_COUNT )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D11Buffer **ppSOTargets) = 0;\n        \n        virtual void STDMETHODCALLTYPE RSGetState( \n            /* [annotation] */ \n            __out  ID3D11RasterizerState **ppRasterizerState) = 0;\n        \n        virtual void STDMETHODCALLTYPE RSGetViewports( \n            /* [annotation] */ \n            __inout /*_range(0, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/   UINT *pNumViewports,\n            /* [annotation] */ \n            __out_ecount_opt(*pNumViewports)  D3D11_VIEWPORT *pViewports) = 0;\n        \n        virtual void STDMETHODCALLTYPE RSGetScissorRects( \n            /* [annotation] */ \n            __inout /*_range(0, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/   UINT *pNumRects,\n            /* [annotation] */ \n            __out_ecount_opt(*pNumRects)  D3D11_RECT *pRects) = 0;\n        \n        virtual void STDMETHODCALLTYPE HSGetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D11ShaderResourceView **ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE HSGetShader( \n            /* [annotation] */ \n            __out  ID3D11HullShader **ppHullShader,\n            /* [annotation] */ \n            __out_ecount_opt(*pNumClassInstances)  ID3D11ClassInstance **ppClassInstances,\n            /* [annotation] */ \n            __inout_opt  UINT *pNumClassInstances) = 0;\n        \n        virtual void STDMETHODCALLTYPE HSGetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D11SamplerState **ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE HSGetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D11Buffer **ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE DSGetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D11ShaderResourceView **ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE DSGetShader( \n            /* [annotation] */ \n            __out  ID3D11DomainShader **ppDomainShader,\n            /* [annotation] */ \n            __out_ecount_opt(*pNumClassInstances)  ID3D11ClassInstance **ppClassInstances,\n            /* [annotation] */ \n            __inout_opt  UINT *pNumClassInstances) = 0;\n        \n        virtual void STDMETHODCALLTYPE DSGetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D11SamplerState **ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE DSGetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D11Buffer **ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE CSGetShaderResources( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D11ShaderResourceView **ppShaderResourceViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE CSGetUnorderedAccessViews( \n            /* [annotation] */ \n            __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - StartSlot )  UINT NumUAVs,\n            /* [annotation] */ \n            __out_ecount(NumUAVs)  ID3D11UnorderedAccessView **ppUnorderedAccessViews) = 0;\n        \n        virtual void STDMETHODCALLTYPE CSGetShader( \n            /* [annotation] */ \n            __out  ID3D11ComputeShader **ppComputeShader,\n            /* [annotation] */ \n            __out_ecount_opt(*pNumClassInstances)  ID3D11ClassInstance **ppClassInstances,\n            /* [annotation] */ \n            __inout_opt  UINT *pNumClassInstances) = 0;\n        \n        virtual void STDMETHODCALLTYPE CSGetSamplers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D11SamplerState **ppSamplers) = 0;\n        \n        virtual void STDMETHODCALLTYPE CSGetConstantBuffers( \n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D11Buffer **ppConstantBuffers) = 0;\n        \n        virtual void STDMETHODCALLTYPE ClearState( void) = 0;\n        \n        virtual void STDMETHODCALLTYPE Flush( void) = 0;\n        \n        virtual D3D11_DEVICE_CONTEXT_TYPE STDMETHODCALLTYPE GetType( void) = 0;\n        \n        virtual UINT STDMETHODCALLTYPE GetContextFlags( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE FinishCommandList( \n            BOOL RestoreDeferredContextState,\n            /* [annotation] */ \n            __out_opt  ID3D11CommandList **ppCommandList) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11DeviceContextVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11DeviceContext * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11DeviceContext * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11DeviceContext * This);\n        \n        void ( STDMETHODCALLTYPE *GetDevice )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __out  ID3D11Device **ppDevice);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt( *pDataSize )  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt( DataSize )  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        void ( STDMETHODCALLTYPE *VSSetConstantBuffers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D11Buffer *const *ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *PSSetShaderResources )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D11ShaderResourceView *const *ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *PSSetShader )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_opt  ID3D11PixelShader *pPixelShader,\n            /* [annotation] */ \n            __in_ecount_opt(NumClassInstances)  ID3D11ClassInstance *const *ppClassInstances,\n            UINT NumClassInstances);\n        \n        void ( STDMETHODCALLTYPE *PSSetSamplers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D11SamplerState *const *ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *VSSetShader )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_opt  ID3D11VertexShader *pVertexShader,\n            /* [annotation] */ \n            __in_ecount_opt(NumClassInstances)  ID3D11ClassInstance *const *ppClassInstances,\n            UINT NumClassInstances);\n        \n        void ( STDMETHODCALLTYPE *DrawIndexed )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  UINT IndexCount,\n            /* [annotation] */ \n            __in  UINT StartIndexLocation,\n            /* [annotation] */ \n            __in  INT BaseVertexLocation);\n        \n        void ( STDMETHODCALLTYPE *Draw )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  UINT VertexCount,\n            /* [annotation] */ \n            __in  UINT StartVertexLocation);\n        \n        HRESULT ( STDMETHODCALLTYPE *Map )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11Resource *pResource,\n            /* [annotation] */ \n            __in  UINT Subresource,\n            /* [annotation] */ \n            __in  D3D11_MAP MapType,\n            /* [annotation] */ \n            __in  UINT MapFlags,\n            /* [annotation] */ \n            __out  D3D11_MAPPED_SUBRESOURCE *pMappedResource);\n        \n        void ( STDMETHODCALLTYPE *Unmap )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11Resource *pResource,\n            /* [annotation] */ \n            __in  UINT Subresource);\n        \n        void ( STDMETHODCALLTYPE *PSSetConstantBuffers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D11Buffer *const *ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *IASetInputLayout )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_opt  ID3D11InputLayout *pInputLayout);\n        \n        void ( STDMETHODCALLTYPE *IASetVertexBuffers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D11Buffer *const *ppVertexBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  const UINT *pStrides,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  const UINT *pOffsets);\n        \n        void ( STDMETHODCALLTYPE *IASetIndexBuffer )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_opt  ID3D11Buffer *pIndexBuffer,\n            /* [annotation] */ \n            __in  DXGI_FORMAT Format,\n            /* [annotation] */ \n            __in  UINT Offset);\n        \n        void ( STDMETHODCALLTYPE *DrawIndexedInstanced )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  UINT IndexCountPerInstance,\n            /* [annotation] */ \n            __in  UINT InstanceCount,\n            /* [annotation] */ \n            __in  UINT StartIndexLocation,\n            /* [annotation] */ \n            __in  INT BaseVertexLocation,\n            /* [annotation] */ \n            __in  UINT StartInstanceLocation);\n        \n        void ( STDMETHODCALLTYPE *DrawInstanced )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  UINT VertexCountPerInstance,\n            /* [annotation] */ \n            __in  UINT InstanceCount,\n            /* [annotation] */ \n            __in  UINT StartVertexLocation,\n            /* [annotation] */ \n            __in  UINT StartInstanceLocation);\n        \n        void ( STDMETHODCALLTYPE *GSSetConstantBuffers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D11Buffer *const *ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *GSSetShader )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_opt  ID3D11GeometryShader *pShader,\n            /* [annotation] */ \n            __in_ecount_opt(NumClassInstances)  ID3D11ClassInstance *const *ppClassInstances,\n            UINT NumClassInstances);\n        \n        void ( STDMETHODCALLTYPE *IASetPrimitiveTopology )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  D3D11_PRIMITIVE_TOPOLOGY Topology);\n        \n        void ( STDMETHODCALLTYPE *VSSetShaderResources )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D11ShaderResourceView *const *ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *VSSetSamplers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D11SamplerState *const *ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *Begin )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11Asynchronous *pAsync);\n        \n        void ( STDMETHODCALLTYPE *End )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11Asynchronous *pAsync);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetData )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11Asynchronous *pAsync,\n            /* [annotation] */ \n            __out_bcount_opt( DataSize )  void *pData,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in  UINT GetDataFlags);\n        \n        void ( STDMETHODCALLTYPE *SetPredication )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_opt  ID3D11Predicate *pPredicate,\n            /* [annotation] */ \n            __in  BOOL PredicateValue);\n        \n        void ( STDMETHODCALLTYPE *GSSetShaderResources )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D11ShaderResourceView *const *ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *GSSetSamplers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D11SamplerState *const *ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *OMSetRenderTargets )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount_opt(NumViews)  ID3D11RenderTargetView *const *ppRenderTargetViews,\n            /* [annotation] */ \n            __in_opt  ID3D11DepthStencilView *pDepthStencilView);\n        \n        void ( STDMETHODCALLTYPE *OMSetRenderTargetsAndUnorderedAccessViews )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  UINT NumRTVs,\n            /* [annotation] */ \n            __in_ecount_opt(NumRTVs)  ID3D11RenderTargetView *const *ppRenderTargetViews,\n            /* [annotation] */ \n            __in_opt  ID3D11DepthStencilView *pDepthStencilView,\n            /* [annotation] */ \n            __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - 1 )  UINT UAVStartSlot,\n            /* [annotation] */ \n            __in  UINT NumUAVs,\n            /* [annotation] */ \n            __in_ecount_opt(NumUAVs)  ID3D11UnorderedAccessView *const *ppUnorderedAccessViews,\n            /* [annotation] */ \n            __in_ecount_opt(NumUAVs)  const UINT *pUAVInitialCounts);\n        \n        void ( STDMETHODCALLTYPE *OMSetBlendState )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_opt  ID3D11BlendState *pBlendState,\n            /* [annotation] */ \n            __in_opt  const FLOAT BlendFactor[ 4 ],\n            /* [annotation] */ \n            __in  UINT SampleMask);\n        \n        void ( STDMETHODCALLTYPE *OMSetDepthStencilState )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_opt  ID3D11DepthStencilState *pDepthStencilState,\n            /* [annotation] */ \n            __in  UINT StencilRef);\n        \n        void ( STDMETHODCALLTYPE *SOSetTargets )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_SO_BUFFER_SLOT_COUNT)  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount_opt(NumBuffers)  ID3D11Buffer *const *ppSOTargets,\n            /* [annotation] */ \n            __in_ecount_opt(NumBuffers)  const UINT *pOffsets);\n        \n        void ( STDMETHODCALLTYPE *DrawAuto )( \n            ID3D11DeviceContext * This);\n        \n        void ( STDMETHODCALLTYPE *DrawIndexedInstancedIndirect )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11Buffer *pBufferForArgs,\n            /* [annotation] */ \n            __in  UINT AlignedByteOffsetForArgs);\n        \n        void ( STDMETHODCALLTYPE *DrawInstancedIndirect )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11Buffer *pBufferForArgs,\n            /* [annotation] */ \n            __in  UINT AlignedByteOffsetForArgs);\n        \n        void ( STDMETHODCALLTYPE *Dispatch )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  UINT ThreadGroupCountX,\n            /* [annotation] */ \n            __in  UINT ThreadGroupCountY,\n            /* [annotation] */ \n            __in  UINT ThreadGroupCountZ);\n        \n        void ( STDMETHODCALLTYPE *DispatchIndirect )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11Buffer *pBufferForArgs,\n            /* [annotation] */ \n            __in  UINT AlignedByteOffsetForArgs);\n        \n        void ( STDMETHODCALLTYPE *RSSetState )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_opt  ID3D11RasterizerState *pRasterizerState);\n        \n        void ( STDMETHODCALLTYPE *RSSetViewports )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range(0, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumViewports,\n            /* [annotation] */ \n            __in_ecount_opt(NumViewports)  const D3D11_VIEWPORT *pViewports);\n        \n        void ( STDMETHODCALLTYPE *RSSetScissorRects )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range(0, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE)  UINT NumRects,\n            /* [annotation] */ \n            __in_ecount_opt(NumRects)  const D3D11_RECT *pRects);\n        \n        void ( STDMETHODCALLTYPE *CopySubresourceRegion )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11Resource *pDstResource,\n            /* [annotation] */ \n            __in  UINT DstSubresource,\n            /* [annotation] */ \n            __in  UINT DstX,\n            /* [annotation] */ \n            __in  UINT DstY,\n            /* [annotation] */ \n            __in  UINT DstZ,\n            /* [annotation] */ \n            __in  ID3D11Resource *pSrcResource,\n            /* [annotation] */ \n            __in  UINT SrcSubresource,\n            /* [annotation] */ \n            __in_opt  const D3D11_BOX *pSrcBox);\n        \n        void ( STDMETHODCALLTYPE *CopyResource )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11Resource *pDstResource,\n            /* [annotation] */ \n            __in  ID3D11Resource *pSrcResource);\n        \n        void ( STDMETHODCALLTYPE *UpdateSubresource )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11Resource *pDstResource,\n            /* [annotation] */ \n            __in  UINT DstSubresource,\n            /* [annotation] */ \n            __in_opt  const D3D11_BOX *pDstBox,\n            /* [annotation] */ \n            __in  const void *pSrcData,\n            /* [annotation] */ \n            __in  UINT SrcRowPitch,\n            /* [annotation] */ \n            __in  UINT SrcDepthPitch);\n        \n        void ( STDMETHODCALLTYPE *CopyStructureCount )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11Buffer *pDstBuffer,\n            /* [annotation] */ \n            __in  UINT DstAlignedByteOffset,\n            /* [annotation] */ \n            __in  ID3D11UnorderedAccessView *pSrcView);\n        \n        void ( STDMETHODCALLTYPE *ClearRenderTargetView )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11RenderTargetView *pRenderTargetView,\n            /* [annotation] */ \n            __in  const FLOAT ColorRGBA[ 4 ]);\n        \n        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewUint )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11UnorderedAccessView *pUnorderedAccessView,\n            /* [annotation] */ \n            __in  const UINT Values[ 4 ]);\n        \n        void ( STDMETHODCALLTYPE *ClearUnorderedAccessViewFloat )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11UnorderedAccessView *pUnorderedAccessView,\n            /* [annotation] */ \n            __in  const FLOAT Values[ 4 ]);\n        \n        void ( STDMETHODCALLTYPE *ClearDepthStencilView )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11DepthStencilView *pDepthStencilView,\n            /* [annotation] */ \n            __in  UINT ClearFlags,\n            /* [annotation] */ \n            __in  FLOAT Depth,\n            /* [annotation] */ \n            __in  UINT8 Stencil);\n        \n        void ( STDMETHODCALLTYPE *GenerateMips )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11ShaderResourceView *pShaderResourceView);\n        \n        void ( STDMETHODCALLTYPE *SetResourceMinLOD )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11Resource *pResource,\n            FLOAT MinLOD);\n        \n        FLOAT ( STDMETHODCALLTYPE *GetResourceMinLOD )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11Resource *pResource);\n        \n        void ( STDMETHODCALLTYPE *ResolveSubresource )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11Resource *pDstResource,\n            /* [annotation] */ \n            __in  UINT DstSubresource,\n            /* [annotation] */ \n            __in  ID3D11Resource *pSrcResource,\n            /* [annotation] */ \n            __in  UINT SrcSubresource,\n            /* [annotation] */ \n            __in  DXGI_FORMAT Format);\n        \n        void ( STDMETHODCALLTYPE *ExecuteCommandList )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in  ID3D11CommandList *pCommandList,\n            BOOL RestoreContextState);\n        \n        void ( STDMETHODCALLTYPE *HSSetShaderResources )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D11ShaderResourceView *const *ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *HSSetShader )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_opt  ID3D11HullShader *pHullShader,\n            /* [annotation] */ \n            __in_ecount_opt(NumClassInstances)  ID3D11ClassInstance *const *ppClassInstances,\n            UINT NumClassInstances);\n        \n        void ( STDMETHODCALLTYPE *HSSetSamplers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D11SamplerState *const *ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *HSSetConstantBuffers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D11Buffer *const *ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *DSSetShaderResources )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D11ShaderResourceView *const *ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *DSSetShader )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_opt  ID3D11DomainShader *pDomainShader,\n            /* [annotation] */ \n            __in_ecount_opt(NumClassInstances)  ID3D11ClassInstance *const *ppClassInstances,\n            UINT NumClassInstances);\n        \n        void ( STDMETHODCALLTYPE *DSSetSamplers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D11SamplerState *const *ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *DSSetConstantBuffers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D11Buffer *const *ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *CSSetShaderResources )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __in_ecount(NumViews)  ID3D11ShaderResourceView *const *ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *CSSetUnorderedAccessViews )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - StartSlot )  UINT NumUAVs,\n            /* [annotation] */ \n            __in_ecount(NumUAVs)  ID3D11UnorderedAccessView *const *ppUnorderedAccessViews,\n            /* [annotation] */ \n            __in_ecount(NumUAVs)  const UINT *pUAVInitialCounts);\n        \n        void ( STDMETHODCALLTYPE *CSSetShader )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_opt  ID3D11ComputeShader *pComputeShader,\n            /* [annotation] */ \n            __in_ecount_opt(NumClassInstances)  ID3D11ClassInstance *const *ppClassInstances,\n            UINT NumClassInstances);\n        \n        void ( STDMETHODCALLTYPE *CSSetSamplers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __in_ecount(NumSamplers)  ID3D11SamplerState *const *ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *CSSetConstantBuffers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __in_ecount(NumBuffers)  ID3D11Buffer *const *ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *VSGetConstantBuffers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D11Buffer **ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *PSGetShaderResources )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D11ShaderResourceView **ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *PSGetShader )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __out  ID3D11PixelShader **ppPixelShader,\n            /* [annotation] */ \n            __out_ecount_opt(*pNumClassInstances)  ID3D11ClassInstance **ppClassInstances,\n            /* [annotation] */ \n            __inout_opt  UINT *pNumClassInstances);\n        \n        void ( STDMETHODCALLTYPE *PSGetSamplers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D11SamplerState **ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *VSGetShader )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __out  ID3D11VertexShader **ppVertexShader,\n            /* [annotation] */ \n            __out_ecount_opt(*pNumClassInstances)  ID3D11ClassInstance **ppClassInstances,\n            /* [annotation] */ \n            __inout_opt  UINT *pNumClassInstances);\n        \n        void ( STDMETHODCALLTYPE *PSGetConstantBuffers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D11Buffer **ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *IAGetInputLayout )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __out  ID3D11InputLayout **ppInputLayout);\n        \n        void ( STDMETHODCALLTYPE *IAGetVertexBuffers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  ID3D11Buffer **ppVertexBuffers,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  UINT *pStrides,\n            /* [annotation] */ \n            __out_ecount_opt(NumBuffers)  UINT *pOffsets);\n        \n        void ( STDMETHODCALLTYPE *IAGetIndexBuffer )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __out_opt  ID3D11Buffer **pIndexBuffer,\n            /* [annotation] */ \n            __out_opt  DXGI_FORMAT *Format,\n            /* [annotation] */ \n            __out_opt  UINT *Offset);\n        \n        void ( STDMETHODCALLTYPE *GSGetConstantBuffers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D11Buffer **ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *GSGetShader )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __out  ID3D11GeometryShader **ppGeometryShader,\n            /* [annotation] */ \n            __out_ecount_opt(*pNumClassInstances)  ID3D11ClassInstance **ppClassInstances,\n            /* [annotation] */ \n            __inout_opt  UINT *pNumClassInstances);\n        \n        void ( STDMETHODCALLTYPE *IAGetPrimitiveTopology )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __out  D3D11_PRIMITIVE_TOPOLOGY *pTopology);\n        \n        void ( STDMETHODCALLTYPE *VSGetShaderResources )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D11ShaderResourceView **ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *VSGetSamplers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D11SamplerState **ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *GetPredication )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __out_opt  ID3D11Predicate **ppPredicate,\n            /* [annotation] */ \n            __out_opt  BOOL *pPredicateValue);\n        \n        void ( STDMETHODCALLTYPE *GSGetShaderResources )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D11ShaderResourceView **ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *GSGetSamplers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D11SamplerState **ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *OMGetRenderTargets )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount_opt(NumViews)  ID3D11RenderTargetView **ppRenderTargetViews,\n            /* [annotation] */ \n            __out_opt  ID3D11DepthStencilView **ppDepthStencilView);\n        \n        void ( STDMETHODCALLTYPE *OMGetRenderTargetsAndUnorderedAccessViews )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT )  UINT NumRTVs,\n            /* [annotation] */ \n            __out_ecount_opt(NumRTVs)  ID3D11RenderTargetView **ppRenderTargetViews,\n            /* [annotation] */ \n            __out_opt  ID3D11DepthStencilView **ppDepthStencilView,\n            /* [annotation] */ \n            __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - 1 )  UINT UAVStartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - UAVStartSlot )  UINT NumUAVs,\n            /* [annotation] */ \n            __out_ecount_opt(NumUAVs)  ID3D11UnorderedAccessView **ppUnorderedAccessViews);\n        \n        void ( STDMETHODCALLTYPE *OMGetBlendState )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __out_opt  ID3D11BlendState **ppBlendState,\n            /* [annotation] */ \n            __out_opt  FLOAT BlendFactor[ 4 ],\n            /* [annotation] */ \n            __out_opt  UINT *pSampleMask);\n        \n        void ( STDMETHODCALLTYPE *OMGetDepthStencilState )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __out_opt  ID3D11DepthStencilState **ppDepthStencilState,\n            /* [annotation] */ \n            __out_opt  UINT *pStencilRef);\n        \n        void ( STDMETHODCALLTYPE *SOGetTargets )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_SO_BUFFER_SLOT_COUNT )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D11Buffer **ppSOTargets);\n        \n        void ( STDMETHODCALLTYPE *RSGetState )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __out  ID3D11RasterizerState **ppRasterizerState);\n        \n        void ( STDMETHODCALLTYPE *RSGetViewports )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __inout /*_range(0, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/   UINT *pNumViewports,\n            /* [annotation] */ \n            __out_ecount_opt(*pNumViewports)  D3D11_VIEWPORT *pViewports);\n        \n        void ( STDMETHODCALLTYPE *RSGetScissorRects )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __inout /*_range(0, D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE )*/   UINT *pNumRects,\n            /* [annotation] */ \n            __out_ecount_opt(*pNumRects)  D3D11_RECT *pRects);\n        \n        void ( STDMETHODCALLTYPE *HSGetShaderResources )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D11ShaderResourceView **ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *HSGetShader )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __out  ID3D11HullShader **ppHullShader,\n            /* [annotation] */ \n            __out_ecount_opt(*pNumClassInstances)  ID3D11ClassInstance **ppClassInstances,\n            /* [annotation] */ \n            __inout_opt  UINT *pNumClassInstances);\n        \n        void ( STDMETHODCALLTYPE *HSGetSamplers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D11SamplerState **ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *HSGetConstantBuffers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D11Buffer **ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *DSGetShaderResources )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D11ShaderResourceView **ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *DSGetShader )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __out  ID3D11DomainShader **ppDomainShader,\n            /* [annotation] */ \n            __out_ecount_opt(*pNumClassInstances)  ID3D11ClassInstance **ppClassInstances,\n            /* [annotation] */ \n            __inout_opt  UINT *pNumClassInstances);\n        \n        void ( STDMETHODCALLTYPE *DSGetSamplers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D11SamplerState **ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *DSGetConstantBuffers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D11Buffer **ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *CSGetShaderResources )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot )  UINT NumViews,\n            /* [annotation] */ \n            __out_ecount(NumViews)  ID3D11ShaderResourceView **ppShaderResourceViews);\n        \n        void ( STDMETHODCALLTYPE *CSGetUnorderedAccessViews )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_PS_CS_UAV_REGISTER_COUNT - StartSlot )  UINT NumUAVs,\n            /* [annotation] */ \n            __out_ecount(NumUAVs)  ID3D11UnorderedAccessView **ppUnorderedAccessViews);\n        \n        void ( STDMETHODCALLTYPE *CSGetShader )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __out  ID3D11ComputeShader **ppComputeShader,\n            /* [annotation] */ \n            __out_ecount_opt(*pNumClassInstances)  ID3D11ClassInstance **ppClassInstances,\n            /* [annotation] */ \n            __inout_opt  UINT *pNumClassInstances);\n        \n        void ( STDMETHODCALLTYPE *CSGetSamplers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot )  UINT NumSamplers,\n            /* [annotation] */ \n            __out_ecount(NumSamplers)  ID3D11SamplerState **ppSamplers);\n        \n        void ( STDMETHODCALLTYPE *CSGetConstantBuffers )( \n            ID3D11DeviceContext * This,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1 )  UINT StartSlot,\n            /* [annotation] */ \n            __in_range( 0, D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot )  UINT NumBuffers,\n            /* [annotation] */ \n            __out_ecount(NumBuffers)  ID3D11Buffer **ppConstantBuffers);\n        \n        void ( STDMETHODCALLTYPE *ClearState )( \n            ID3D11DeviceContext * This);\n        \n        void ( STDMETHODCALLTYPE *Flush )( \n            ID3D11DeviceContext * This);\n        \n        D3D11_DEVICE_CONTEXT_TYPE ( STDMETHODCALLTYPE *GetType )( \n            ID3D11DeviceContext * This);\n        \n        UINT ( STDMETHODCALLTYPE *GetContextFlags )( \n            ID3D11DeviceContext * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *FinishCommandList )( \n            ID3D11DeviceContext * This,\n            BOOL RestoreDeferredContextState,\n            /* [annotation] */ \n            __out_opt  ID3D11CommandList **ppCommandList);\n        \n        END_INTERFACE\n    } ID3D11DeviceContextVtbl;\n\n    interface ID3D11DeviceContext\n    {\n        CONST_VTBL struct ID3D11DeviceContextVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11DeviceContext_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11DeviceContext_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11DeviceContext_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11DeviceContext_GetDevice(This,ppDevice)\t\\\n    ( (This)->lpVtbl -> GetDevice(This,ppDevice) ) \n\n#define ID3D11DeviceContext_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11DeviceContext_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11DeviceContext_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n\n#define ID3D11DeviceContext_VSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> VSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D11DeviceContext_PSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> PSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D11DeviceContext_PSSetShader(This,pPixelShader,ppClassInstances,NumClassInstances)\t\\\n    ( (This)->lpVtbl -> PSSetShader(This,pPixelShader,ppClassInstances,NumClassInstances) ) \n\n#define ID3D11DeviceContext_PSSetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> PSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D11DeviceContext_VSSetShader(This,pVertexShader,ppClassInstances,NumClassInstances)\t\\\n    ( (This)->lpVtbl -> VSSetShader(This,pVertexShader,ppClassInstances,NumClassInstances) ) \n\n#define ID3D11DeviceContext_DrawIndexed(This,IndexCount,StartIndexLocation,BaseVertexLocation)\t\\\n    ( (This)->lpVtbl -> DrawIndexed(This,IndexCount,StartIndexLocation,BaseVertexLocation) ) \n\n#define ID3D11DeviceContext_Draw(This,VertexCount,StartVertexLocation)\t\\\n    ( (This)->lpVtbl -> Draw(This,VertexCount,StartVertexLocation) ) \n\n#define ID3D11DeviceContext_Map(This,pResource,Subresource,MapType,MapFlags,pMappedResource)\t\\\n    ( (This)->lpVtbl -> Map(This,pResource,Subresource,MapType,MapFlags,pMappedResource) ) \n\n#define ID3D11DeviceContext_Unmap(This,pResource,Subresource)\t\\\n    ( (This)->lpVtbl -> Unmap(This,pResource,Subresource) ) \n\n#define ID3D11DeviceContext_PSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> PSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D11DeviceContext_IASetInputLayout(This,pInputLayout)\t\\\n    ( (This)->lpVtbl -> IASetInputLayout(This,pInputLayout) ) \n\n#define ID3D11DeviceContext_IASetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets)\t\\\n    ( (This)->lpVtbl -> IASetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) ) \n\n#define ID3D11DeviceContext_IASetIndexBuffer(This,pIndexBuffer,Format,Offset)\t\\\n    ( (This)->lpVtbl -> IASetIndexBuffer(This,pIndexBuffer,Format,Offset) ) \n\n#define ID3D11DeviceContext_DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation)\t\\\n    ( (This)->lpVtbl -> DrawIndexedInstanced(This,IndexCountPerInstance,InstanceCount,StartIndexLocation,BaseVertexLocation,StartInstanceLocation) ) \n\n#define ID3D11DeviceContext_DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation)\t\\\n    ( (This)->lpVtbl -> DrawInstanced(This,VertexCountPerInstance,InstanceCount,StartVertexLocation,StartInstanceLocation) ) \n\n#define ID3D11DeviceContext_GSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> GSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D11DeviceContext_GSSetShader(This,pShader,ppClassInstances,NumClassInstances)\t\\\n    ( (This)->lpVtbl -> GSSetShader(This,pShader,ppClassInstances,NumClassInstances) ) \n\n#define ID3D11DeviceContext_IASetPrimitiveTopology(This,Topology)\t\\\n    ( (This)->lpVtbl -> IASetPrimitiveTopology(This,Topology) ) \n\n#define ID3D11DeviceContext_VSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> VSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D11DeviceContext_VSSetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> VSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D11DeviceContext_Begin(This,pAsync)\t\\\n    ( (This)->lpVtbl -> Begin(This,pAsync) ) \n\n#define ID3D11DeviceContext_End(This,pAsync)\t\\\n    ( (This)->lpVtbl -> End(This,pAsync) ) \n\n#define ID3D11DeviceContext_GetData(This,pAsync,pData,DataSize,GetDataFlags)\t\\\n    ( (This)->lpVtbl -> GetData(This,pAsync,pData,DataSize,GetDataFlags) ) \n\n#define ID3D11DeviceContext_SetPredication(This,pPredicate,PredicateValue)\t\\\n    ( (This)->lpVtbl -> SetPredication(This,pPredicate,PredicateValue) ) \n\n#define ID3D11DeviceContext_GSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> GSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D11DeviceContext_GSSetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> GSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D11DeviceContext_OMSetRenderTargets(This,NumViews,ppRenderTargetViews,pDepthStencilView)\t\\\n    ( (This)->lpVtbl -> OMSetRenderTargets(This,NumViews,ppRenderTargetViews,pDepthStencilView) ) \n\n#define ID3D11DeviceContext_OMSetRenderTargetsAndUnorderedAccessViews(This,NumRTVs,ppRenderTargetViews,pDepthStencilView,UAVStartSlot,NumUAVs,ppUnorderedAccessViews,pUAVInitialCounts)\t\\\n    ( (This)->lpVtbl -> OMSetRenderTargetsAndUnorderedAccessViews(This,NumRTVs,ppRenderTargetViews,pDepthStencilView,UAVStartSlot,NumUAVs,ppUnorderedAccessViews,pUAVInitialCounts) ) \n\n#define ID3D11DeviceContext_OMSetBlendState(This,pBlendState,BlendFactor,SampleMask)\t\\\n    ( (This)->lpVtbl -> OMSetBlendState(This,pBlendState,BlendFactor,SampleMask) ) \n\n#define ID3D11DeviceContext_OMSetDepthStencilState(This,pDepthStencilState,StencilRef)\t\\\n    ( (This)->lpVtbl -> OMSetDepthStencilState(This,pDepthStencilState,StencilRef) ) \n\n#define ID3D11DeviceContext_SOSetTargets(This,NumBuffers,ppSOTargets,pOffsets)\t\\\n    ( (This)->lpVtbl -> SOSetTargets(This,NumBuffers,ppSOTargets,pOffsets) ) \n\n#define ID3D11DeviceContext_DrawAuto(This)\t\\\n    ( (This)->lpVtbl -> DrawAuto(This) ) \n\n#define ID3D11DeviceContext_DrawIndexedInstancedIndirect(This,pBufferForArgs,AlignedByteOffsetForArgs)\t\\\n    ( (This)->lpVtbl -> DrawIndexedInstancedIndirect(This,pBufferForArgs,AlignedByteOffsetForArgs) ) \n\n#define ID3D11DeviceContext_DrawInstancedIndirect(This,pBufferForArgs,AlignedByteOffsetForArgs)\t\\\n    ( (This)->lpVtbl -> DrawInstancedIndirect(This,pBufferForArgs,AlignedByteOffsetForArgs) ) \n\n#define ID3D11DeviceContext_Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ)\t\\\n    ( (This)->lpVtbl -> Dispatch(This,ThreadGroupCountX,ThreadGroupCountY,ThreadGroupCountZ) ) \n\n#define ID3D11DeviceContext_DispatchIndirect(This,pBufferForArgs,AlignedByteOffsetForArgs)\t\\\n    ( (This)->lpVtbl -> DispatchIndirect(This,pBufferForArgs,AlignedByteOffsetForArgs) ) \n\n#define ID3D11DeviceContext_RSSetState(This,pRasterizerState)\t\\\n    ( (This)->lpVtbl -> RSSetState(This,pRasterizerState) ) \n\n#define ID3D11DeviceContext_RSSetViewports(This,NumViewports,pViewports)\t\\\n    ( (This)->lpVtbl -> RSSetViewports(This,NumViewports,pViewports) ) \n\n#define ID3D11DeviceContext_RSSetScissorRects(This,NumRects,pRects)\t\\\n    ( (This)->lpVtbl -> RSSetScissorRects(This,NumRects,pRects) ) \n\n#define ID3D11DeviceContext_CopySubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,DstZ,pSrcResource,SrcSubresource,pSrcBox)\t\\\n    ( (This)->lpVtbl -> CopySubresourceRegion(This,pDstResource,DstSubresource,DstX,DstY,DstZ,pSrcResource,SrcSubresource,pSrcBox) ) \n\n#define ID3D11DeviceContext_CopyResource(This,pDstResource,pSrcResource)\t\\\n    ( (This)->lpVtbl -> CopyResource(This,pDstResource,pSrcResource) ) \n\n#define ID3D11DeviceContext_UpdateSubresource(This,pDstResource,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch)\t\\\n    ( (This)->lpVtbl -> UpdateSubresource(This,pDstResource,DstSubresource,pDstBox,pSrcData,SrcRowPitch,SrcDepthPitch) ) \n\n#define ID3D11DeviceContext_CopyStructureCount(This,pDstBuffer,DstAlignedByteOffset,pSrcView)\t\\\n    ( (This)->lpVtbl -> CopyStructureCount(This,pDstBuffer,DstAlignedByteOffset,pSrcView) ) \n\n#define ID3D11DeviceContext_ClearRenderTargetView(This,pRenderTargetView,ColorRGBA)\t\\\n    ( (This)->lpVtbl -> ClearRenderTargetView(This,pRenderTargetView,ColorRGBA) ) \n\n#define ID3D11DeviceContext_ClearUnorderedAccessViewUint(This,pUnorderedAccessView,Values)\t\\\n    ( (This)->lpVtbl -> ClearUnorderedAccessViewUint(This,pUnorderedAccessView,Values) ) \n\n#define ID3D11DeviceContext_ClearUnorderedAccessViewFloat(This,pUnorderedAccessView,Values)\t\\\n    ( (This)->lpVtbl -> ClearUnorderedAccessViewFloat(This,pUnorderedAccessView,Values) ) \n\n#define ID3D11DeviceContext_ClearDepthStencilView(This,pDepthStencilView,ClearFlags,Depth,Stencil)\t\\\n    ( (This)->lpVtbl -> ClearDepthStencilView(This,pDepthStencilView,ClearFlags,Depth,Stencil) ) \n\n#define ID3D11DeviceContext_GenerateMips(This,pShaderResourceView)\t\\\n    ( (This)->lpVtbl -> GenerateMips(This,pShaderResourceView) ) \n\n#define ID3D11DeviceContext_SetResourceMinLOD(This,pResource,MinLOD)\t\\\n    ( (This)->lpVtbl -> SetResourceMinLOD(This,pResource,MinLOD) ) \n\n#define ID3D11DeviceContext_GetResourceMinLOD(This,pResource)\t\\\n    ( (This)->lpVtbl -> GetResourceMinLOD(This,pResource) ) \n\n#define ID3D11DeviceContext_ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format)\t\\\n    ( (This)->lpVtbl -> ResolveSubresource(This,pDstResource,DstSubresource,pSrcResource,SrcSubresource,Format) ) \n\n#define ID3D11DeviceContext_ExecuteCommandList(This,pCommandList,RestoreContextState)\t\\\n    ( (This)->lpVtbl -> ExecuteCommandList(This,pCommandList,RestoreContextState) ) \n\n#define ID3D11DeviceContext_HSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> HSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D11DeviceContext_HSSetShader(This,pHullShader,ppClassInstances,NumClassInstances)\t\\\n    ( (This)->lpVtbl -> HSSetShader(This,pHullShader,ppClassInstances,NumClassInstances) ) \n\n#define ID3D11DeviceContext_HSSetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> HSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D11DeviceContext_HSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> HSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D11DeviceContext_DSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> DSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D11DeviceContext_DSSetShader(This,pDomainShader,ppClassInstances,NumClassInstances)\t\\\n    ( (This)->lpVtbl -> DSSetShader(This,pDomainShader,ppClassInstances,NumClassInstances) ) \n\n#define ID3D11DeviceContext_DSSetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> DSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D11DeviceContext_DSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> DSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D11DeviceContext_CSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> CSSetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D11DeviceContext_CSSetUnorderedAccessViews(This,StartSlot,NumUAVs,ppUnorderedAccessViews,pUAVInitialCounts)\t\\\n    ( (This)->lpVtbl -> CSSetUnorderedAccessViews(This,StartSlot,NumUAVs,ppUnorderedAccessViews,pUAVInitialCounts) ) \n\n#define ID3D11DeviceContext_CSSetShader(This,pComputeShader,ppClassInstances,NumClassInstances)\t\\\n    ( (This)->lpVtbl -> CSSetShader(This,pComputeShader,ppClassInstances,NumClassInstances) ) \n\n#define ID3D11DeviceContext_CSSetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> CSSetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D11DeviceContext_CSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> CSSetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D11DeviceContext_VSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> VSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D11DeviceContext_PSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> PSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D11DeviceContext_PSGetShader(This,ppPixelShader,ppClassInstances,pNumClassInstances)\t\\\n    ( (This)->lpVtbl -> PSGetShader(This,ppPixelShader,ppClassInstances,pNumClassInstances) ) \n\n#define ID3D11DeviceContext_PSGetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> PSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D11DeviceContext_VSGetShader(This,ppVertexShader,ppClassInstances,pNumClassInstances)\t\\\n    ( (This)->lpVtbl -> VSGetShader(This,ppVertexShader,ppClassInstances,pNumClassInstances) ) \n\n#define ID3D11DeviceContext_PSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> PSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D11DeviceContext_IAGetInputLayout(This,ppInputLayout)\t\\\n    ( (This)->lpVtbl -> IAGetInputLayout(This,ppInputLayout) ) \n\n#define ID3D11DeviceContext_IAGetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets)\t\\\n    ( (This)->lpVtbl -> IAGetVertexBuffers(This,StartSlot,NumBuffers,ppVertexBuffers,pStrides,pOffsets) ) \n\n#define ID3D11DeviceContext_IAGetIndexBuffer(This,pIndexBuffer,Format,Offset)\t\\\n    ( (This)->lpVtbl -> IAGetIndexBuffer(This,pIndexBuffer,Format,Offset) ) \n\n#define ID3D11DeviceContext_GSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> GSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D11DeviceContext_GSGetShader(This,ppGeometryShader,ppClassInstances,pNumClassInstances)\t\\\n    ( (This)->lpVtbl -> GSGetShader(This,ppGeometryShader,ppClassInstances,pNumClassInstances) ) \n\n#define ID3D11DeviceContext_IAGetPrimitiveTopology(This,pTopology)\t\\\n    ( (This)->lpVtbl -> IAGetPrimitiveTopology(This,pTopology) ) \n\n#define ID3D11DeviceContext_VSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> VSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D11DeviceContext_VSGetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> VSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D11DeviceContext_GetPredication(This,ppPredicate,pPredicateValue)\t\\\n    ( (This)->lpVtbl -> GetPredication(This,ppPredicate,pPredicateValue) ) \n\n#define ID3D11DeviceContext_GSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> GSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D11DeviceContext_GSGetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> GSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D11DeviceContext_OMGetRenderTargets(This,NumViews,ppRenderTargetViews,ppDepthStencilView)\t\\\n    ( (This)->lpVtbl -> OMGetRenderTargets(This,NumViews,ppRenderTargetViews,ppDepthStencilView) ) \n\n#define ID3D11DeviceContext_OMGetRenderTargetsAndUnorderedAccessViews(This,NumRTVs,ppRenderTargetViews,ppDepthStencilView,UAVStartSlot,NumUAVs,ppUnorderedAccessViews)\t\\\n    ( (This)->lpVtbl -> OMGetRenderTargetsAndUnorderedAccessViews(This,NumRTVs,ppRenderTargetViews,ppDepthStencilView,UAVStartSlot,NumUAVs,ppUnorderedAccessViews) ) \n\n#define ID3D11DeviceContext_OMGetBlendState(This,ppBlendState,BlendFactor,pSampleMask)\t\\\n    ( (This)->lpVtbl -> OMGetBlendState(This,ppBlendState,BlendFactor,pSampleMask) ) \n\n#define ID3D11DeviceContext_OMGetDepthStencilState(This,ppDepthStencilState,pStencilRef)\t\\\n    ( (This)->lpVtbl -> OMGetDepthStencilState(This,ppDepthStencilState,pStencilRef) ) \n\n#define ID3D11DeviceContext_SOGetTargets(This,NumBuffers,ppSOTargets)\t\\\n    ( (This)->lpVtbl -> SOGetTargets(This,NumBuffers,ppSOTargets) ) \n\n#define ID3D11DeviceContext_RSGetState(This,ppRasterizerState)\t\\\n    ( (This)->lpVtbl -> RSGetState(This,ppRasterizerState) ) \n\n#define ID3D11DeviceContext_RSGetViewports(This,pNumViewports,pViewports)\t\\\n    ( (This)->lpVtbl -> RSGetViewports(This,pNumViewports,pViewports) ) \n\n#define ID3D11DeviceContext_RSGetScissorRects(This,pNumRects,pRects)\t\\\n    ( (This)->lpVtbl -> RSGetScissorRects(This,pNumRects,pRects) ) \n\n#define ID3D11DeviceContext_HSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> HSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D11DeviceContext_HSGetShader(This,ppHullShader,ppClassInstances,pNumClassInstances)\t\\\n    ( (This)->lpVtbl -> HSGetShader(This,ppHullShader,ppClassInstances,pNumClassInstances) ) \n\n#define ID3D11DeviceContext_HSGetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> HSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D11DeviceContext_HSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> HSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D11DeviceContext_DSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> DSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D11DeviceContext_DSGetShader(This,ppDomainShader,ppClassInstances,pNumClassInstances)\t\\\n    ( (This)->lpVtbl -> DSGetShader(This,ppDomainShader,ppClassInstances,pNumClassInstances) ) \n\n#define ID3D11DeviceContext_DSGetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> DSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D11DeviceContext_DSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> DSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D11DeviceContext_CSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews)\t\\\n    ( (This)->lpVtbl -> CSGetShaderResources(This,StartSlot,NumViews,ppShaderResourceViews) ) \n\n#define ID3D11DeviceContext_CSGetUnorderedAccessViews(This,StartSlot,NumUAVs,ppUnorderedAccessViews)\t\\\n    ( (This)->lpVtbl -> CSGetUnorderedAccessViews(This,StartSlot,NumUAVs,ppUnorderedAccessViews) ) \n\n#define ID3D11DeviceContext_CSGetShader(This,ppComputeShader,ppClassInstances,pNumClassInstances)\t\\\n    ( (This)->lpVtbl -> CSGetShader(This,ppComputeShader,ppClassInstances,pNumClassInstances) ) \n\n#define ID3D11DeviceContext_CSGetSamplers(This,StartSlot,NumSamplers,ppSamplers)\t\\\n    ( (This)->lpVtbl -> CSGetSamplers(This,StartSlot,NumSamplers,ppSamplers) ) \n\n#define ID3D11DeviceContext_CSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers)\t\\\n    ( (This)->lpVtbl -> CSGetConstantBuffers(This,StartSlot,NumBuffers,ppConstantBuffers) ) \n\n#define ID3D11DeviceContext_ClearState(This)\t\\\n    ( (This)->lpVtbl -> ClearState(This) ) \n\n#define ID3D11DeviceContext_Flush(This)\t\\\n    ( (This)->lpVtbl -> Flush(This) ) \n\n#define ID3D11DeviceContext_GetType(This)\t\\\n    ( (This)->lpVtbl -> GetType(This) ) \n\n#define ID3D11DeviceContext_GetContextFlags(This)\t\\\n    ( (This)->lpVtbl -> GetContextFlags(This) ) \n\n#define ID3D11DeviceContext_FinishCommandList(This,RestoreDeferredContextState,ppCommandList)\t\\\n    ( (This)->lpVtbl -> FinishCommandList(This,RestoreDeferredContextState,ppCommandList) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11DeviceContext_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D11Device_INTERFACE_DEFINED__\n#define __ID3D11Device_INTERFACE_DEFINED__\n\n/* interface ID3D11Device */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11Device;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"db6f6ddb-ac77-4e88-8253-819df9bbf140\")\n    ID3D11Device : public IUnknown\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE CreateBuffer( \n            /* [annotation] */ \n            __in  const D3D11_BUFFER_DESC *pDesc,\n            /* [annotation] */ \n            __in_opt  const D3D11_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out_opt  ID3D11Buffer **ppBuffer) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateTexture1D( \n            /* [annotation] */ \n            __in  const D3D11_TEXTURE1D_DESC *pDesc,\n            /* [annotation] */ \n            __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize)  const D3D11_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out_opt  ID3D11Texture1D **ppTexture1D) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateTexture2D( \n            /* [annotation] */ \n            __in  const D3D11_TEXTURE2D_DESC *pDesc,\n            /* [annotation] */ \n            __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize)  const D3D11_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out_opt  ID3D11Texture2D **ppTexture2D) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateTexture3D( \n            /* [annotation] */ \n            __in  const D3D11_TEXTURE3D_DESC *pDesc,\n            /* [annotation] */ \n            __in_xcount_opt(pDesc->MipLevels)  const D3D11_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out_opt  ID3D11Texture3D **ppTexture3D) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateShaderResourceView( \n            /* [annotation] */ \n            __in  ID3D11Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11ShaderResourceView **ppSRView) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateUnorderedAccessView( \n            /* [annotation] */ \n            __in  ID3D11Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11UnorderedAccessView **ppUAView) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateRenderTargetView( \n            /* [annotation] */ \n            __in  ID3D11Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D11_RENDER_TARGET_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11RenderTargetView **ppRTView) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilView( \n            /* [annotation] */ \n            __in  ID3D11Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11DepthStencilView **ppDepthStencilView) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateInputLayout( \n            /* [annotation] */ \n            __in_ecount(NumElements)  const D3D11_INPUT_ELEMENT_DESC *pInputElementDescs,\n            /* [annotation] */ \n            __in_range( 0, D3D11_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT )  UINT NumElements,\n            /* [annotation] */ \n            __in  const void *pShaderBytecodeWithInputSignature,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __out_opt  ID3D11InputLayout **ppInputLayout) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateVertexShader( \n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_opt  ID3D11ClassLinkage *pClassLinkage,\n            /* [annotation] */ \n            __out_opt  ID3D11VertexShader **ppVertexShader) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateGeometryShader( \n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_opt  ID3D11ClassLinkage *pClassLinkage,\n            /* [annotation] */ \n            __out_opt  ID3D11GeometryShader **ppGeometryShader) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateGeometryShaderWithStreamOutput( \n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_ecount_opt(NumEntries)  const D3D11_SO_DECLARATION_ENTRY *pSODeclaration,\n            /* [annotation] */ \n            __in_range( 0, D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT )  UINT NumEntries,\n            /* [annotation] */ \n            __in_ecount_opt(NumStrides)  const UINT *pBufferStrides,\n            /* [annotation] */ \n            __in_range( 0, D3D11_SO_BUFFER_SLOT_COUNT )  UINT NumStrides,\n            /* [annotation] */ \n            __in  UINT RasterizedStream,\n            /* [annotation] */ \n            __in_opt  ID3D11ClassLinkage *pClassLinkage,\n            /* [annotation] */ \n            __out_opt  ID3D11GeometryShader **ppGeometryShader) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreatePixelShader( \n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_opt  ID3D11ClassLinkage *pClassLinkage,\n            /* [annotation] */ \n            __out_opt  ID3D11PixelShader **ppPixelShader) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateHullShader( \n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_opt  ID3D11ClassLinkage *pClassLinkage,\n            /* [annotation] */ \n            __out_opt  ID3D11HullShader **ppHullShader) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateDomainShader( \n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_opt  ID3D11ClassLinkage *pClassLinkage,\n            /* [annotation] */ \n            __out_opt  ID3D11DomainShader **ppDomainShader) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateComputeShader( \n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_opt  ID3D11ClassLinkage *pClassLinkage,\n            /* [annotation] */ \n            __out_opt  ID3D11ComputeShader **ppComputeShader) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateClassLinkage( \n            /* [annotation] */ \n            __out  ID3D11ClassLinkage **ppLinkage) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateBlendState( \n            /* [annotation] */ \n            __in  const D3D11_BLEND_DESC *pBlendStateDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11BlendState **ppBlendState) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilState( \n            /* [annotation] */ \n            __in  const D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11DepthStencilState **ppDepthStencilState) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateRasterizerState( \n            /* [annotation] */ \n            __in  const D3D11_RASTERIZER_DESC *pRasterizerDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11RasterizerState **ppRasterizerState) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateSamplerState( \n            /* [annotation] */ \n            __in  const D3D11_SAMPLER_DESC *pSamplerDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11SamplerState **ppSamplerState) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateQuery( \n            /* [annotation] */ \n            __in  const D3D11_QUERY_DESC *pQueryDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11Query **ppQuery) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreatePredicate( \n            /* [annotation] */ \n            __in  const D3D11_QUERY_DESC *pPredicateDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11Predicate **ppPredicate) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateCounter( \n            /* [annotation] */ \n            __in  const D3D11_COUNTER_DESC *pCounterDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11Counter **ppCounter) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateDeferredContext( \n            UINT ContextFlags,\n            /* [annotation] */ \n            __out_opt  ID3D11DeviceContext **ppDeferredContext) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE OpenSharedResource( \n            /* [annotation] */ \n            __in  HANDLE hResource,\n            /* [annotation] */ \n            __in  REFIID ReturnedInterface,\n            /* [annotation] */ \n            __out_opt  void **ppResource) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CheckFormatSupport( \n            /* [annotation] */ \n            __in  DXGI_FORMAT Format,\n            /* [annotation] */ \n            __out  UINT *pFormatSupport) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CheckMultisampleQualityLevels( \n            /* [annotation] */ \n            __in  DXGI_FORMAT Format,\n            /* [annotation] */ \n            __in  UINT SampleCount,\n            /* [annotation] */ \n            __out  UINT *pNumQualityLevels) = 0;\n        \n        virtual void STDMETHODCALLTYPE CheckCounterInfo( \n            /* [annotation] */ \n            __out  D3D11_COUNTER_INFO *pCounterInfo) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CheckCounter( \n            /* [annotation] */ \n            __in  const D3D11_COUNTER_DESC *pDesc,\n            /* [annotation] */ \n            __out  D3D11_COUNTER_TYPE *pType,\n            /* [annotation] */ \n            __out  UINT *pActiveCounters,\n            /* [annotation] */ \n            __out_ecount_opt(*pNameLength)  LPSTR szName,\n            /* [annotation] */ \n            __inout_opt  UINT *pNameLength,\n            /* [annotation] */ \n            __out_ecount_opt(*pUnitsLength)  LPSTR szUnits,\n            /* [annotation] */ \n            __inout_opt  UINT *pUnitsLength,\n            /* [annotation] */ \n            __out_ecount_opt(*pDescriptionLength)  LPSTR szDescription,\n            /* [annotation] */ \n            __inout_opt  UINT *pDescriptionLength) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CheckFeatureSupport( \n            D3D11_FEATURE Feature,\n            /* [annotation] */ \n            __out_bcount(FeatureSupportDataSize)  void *pFeatureSupportData,\n            UINT FeatureSupportDataSize) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetPrivateData( \n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetPrivateData( \n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface( \n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData) = 0;\n        \n        virtual D3D_FEATURE_LEVEL STDMETHODCALLTYPE GetFeatureLevel( void) = 0;\n        \n        virtual UINT STDMETHODCALLTYPE GetCreationFlags( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetDeviceRemovedReason( void) = 0;\n        \n        virtual void STDMETHODCALLTYPE GetImmediateContext( \n            /* [annotation] */ \n            __out  ID3D11DeviceContext **ppImmediateContext) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetExceptionMode( \n            UINT RaiseFlags) = 0;\n        \n        virtual UINT STDMETHODCALLTYPE GetExceptionMode( void) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11DeviceVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11Device * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11Device * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11Device * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateBuffer )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const D3D11_BUFFER_DESC *pDesc,\n            /* [annotation] */ \n            __in_opt  const D3D11_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out_opt  ID3D11Buffer **ppBuffer);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateTexture1D )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const D3D11_TEXTURE1D_DESC *pDesc,\n            /* [annotation] */ \n            __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize)  const D3D11_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out_opt  ID3D11Texture1D **ppTexture1D);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateTexture2D )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const D3D11_TEXTURE2D_DESC *pDesc,\n            /* [annotation] */ \n            __in_xcount_opt(pDesc->MipLevels * pDesc->ArraySize)  const D3D11_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out_opt  ID3D11Texture2D **ppTexture2D);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateTexture3D )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const D3D11_TEXTURE3D_DESC *pDesc,\n            /* [annotation] */ \n            __in_xcount_opt(pDesc->MipLevels)  const D3D11_SUBRESOURCE_DATA *pInitialData,\n            /* [annotation] */ \n            __out_opt  ID3D11Texture3D **ppTexture3D);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateShaderResourceView )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  ID3D11Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D11_SHADER_RESOURCE_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11ShaderResourceView **ppSRView);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateUnorderedAccessView )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  ID3D11Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D11_UNORDERED_ACCESS_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11UnorderedAccessView **ppUAView);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateRenderTargetView )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  ID3D11Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D11_RENDER_TARGET_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11RenderTargetView **ppRTView);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateDepthStencilView )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  ID3D11Resource *pResource,\n            /* [annotation] */ \n            __in_opt  const D3D11_DEPTH_STENCIL_VIEW_DESC *pDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11DepthStencilView **ppDepthStencilView);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateInputLayout )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in_ecount(NumElements)  const D3D11_INPUT_ELEMENT_DESC *pInputElementDescs,\n            /* [annotation] */ \n            __in_range( 0, D3D11_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT )  UINT NumElements,\n            /* [annotation] */ \n            __in  const void *pShaderBytecodeWithInputSignature,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __out_opt  ID3D11InputLayout **ppInputLayout);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateVertexShader )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_opt  ID3D11ClassLinkage *pClassLinkage,\n            /* [annotation] */ \n            __out_opt  ID3D11VertexShader **ppVertexShader);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateGeometryShader )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_opt  ID3D11ClassLinkage *pClassLinkage,\n            /* [annotation] */ \n            __out_opt  ID3D11GeometryShader **ppGeometryShader);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateGeometryShaderWithStreamOutput )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_ecount_opt(NumEntries)  const D3D11_SO_DECLARATION_ENTRY *pSODeclaration,\n            /* [annotation] */ \n            __in_range( 0, D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT )  UINT NumEntries,\n            /* [annotation] */ \n            __in_ecount_opt(NumStrides)  const UINT *pBufferStrides,\n            /* [annotation] */ \n            __in_range( 0, D3D11_SO_BUFFER_SLOT_COUNT )  UINT NumStrides,\n            /* [annotation] */ \n            __in  UINT RasterizedStream,\n            /* [annotation] */ \n            __in_opt  ID3D11ClassLinkage *pClassLinkage,\n            /* [annotation] */ \n            __out_opt  ID3D11GeometryShader **ppGeometryShader);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreatePixelShader )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_opt  ID3D11ClassLinkage *pClassLinkage,\n            /* [annotation] */ \n            __out_opt  ID3D11PixelShader **ppPixelShader);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateHullShader )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_opt  ID3D11ClassLinkage *pClassLinkage,\n            /* [annotation] */ \n            __out_opt  ID3D11HullShader **ppHullShader);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateDomainShader )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_opt  ID3D11ClassLinkage *pClassLinkage,\n            /* [annotation] */ \n            __out_opt  ID3D11DomainShader **ppDomainShader);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateComputeShader )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const void *pShaderBytecode,\n            /* [annotation] */ \n            __in  SIZE_T BytecodeLength,\n            /* [annotation] */ \n            __in_opt  ID3D11ClassLinkage *pClassLinkage,\n            /* [annotation] */ \n            __out_opt  ID3D11ComputeShader **ppComputeShader);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateClassLinkage )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __out  ID3D11ClassLinkage **ppLinkage);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateBlendState )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const D3D11_BLEND_DESC *pBlendStateDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11BlendState **ppBlendState);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateDepthStencilState )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11DepthStencilState **ppDepthStencilState);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateRasterizerState )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const D3D11_RASTERIZER_DESC *pRasterizerDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11RasterizerState **ppRasterizerState);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateSamplerState )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const D3D11_SAMPLER_DESC *pSamplerDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11SamplerState **ppSamplerState);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateQuery )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const D3D11_QUERY_DESC *pQueryDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11Query **ppQuery);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreatePredicate )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const D3D11_QUERY_DESC *pPredicateDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11Predicate **ppPredicate);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateCounter )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const D3D11_COUNTER_DESC *pCounterDesc,\n            /* [annotation] */ \n            __out_opt  ID3D11Counter **ppCounter);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateDeferredContext )( \n            ID3D11Device * This,\n            UINT ContextFlags,\n            /* [annotation] */ \n            __out_opt  ID3D11DeviceContext **ppDeferredContext);\n        \n        HRESULT ( STDMETHODCALLTYPE *OpenSharedResource )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  HANDLE hResource,\n            /* [annotation] */ \n            __in  REFIID ReturnedInterface,\n            /* [annotation] */ \n            __out_opt  void **ppResource);\n        \n        HRESULT ( STDMETHODCALLTYPE *CheckFormatSupport )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  DXGI_FORMAT Format,\n            /* [annotation] */ \n            __out  UINT *pFormatSupport);\n        \n        HRESULT ( STDMETHODCALLTYPE *CheckMultisampleQualityLevels )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  DXGI_FORMAT Format,\n            /* [annotation] */ \n            __in  UINT SampleCount,\n            /* [annotation] */ \n            __out  UINT *pNumQualityLevels);\n        \n        void ( STDMETHODCALLTYPE *CheckCounterInfo )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __out  D3D11_COUNTER_INFO *pCounterInfo);\n        \n        HRESULT ( STDMETHODCALLTYPE *CheckCounter )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  const D3D11_COUNTER_DESC *pDesc,\n            /* [annotation] */ \n            __out  D3D11_COUNTER_TYPE *pType,\n            /* [annotation] */ \n            __out  UINT *pActiveCounters,\n            /* [annotation] */ \n            __out_ecount_opt(*pNameLength)  LPSTR szName,\n            /* [annotation] */ \n            __inout_opt  UINT *pNameLength,\n            /* [annotation] */ \n            __out_ecount_opt(*pUnitsLength)  LPSTR szUnits,\n            /* [annotation] */ \n            __inout_opt  UINT *pUnitsLength,\n            /* [annotation] */ \n            __out_ecount_opt(*pDescriptionLength)  LPSTR szDescription,\n            /* [annotation] */ \n            __inout_opt  UINT *pDescriptionLength);\n        \n        HRESULT ( STDMETHODCALLTYPE *CheckFeatureSupport )( \n            ID3D11Device * This,\n            D3D11_FEATURE Feature,\n            /* [annotation] */ \n            __out_bcount(FeatureSupportDataSize)  void *pFeatureSupportData,\n            UINT FeatureSupportDataSize);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPrivateData )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __inout  UINT *pDataSize,\n            /* [annotation] */ \n            __out_bcount_opt(*pDataSize)  void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateData )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in  UINT DataSize,\n            /* [annotation] */ \n            __in_bcount_opt(DataSize)  const void *pData);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPrivateDataInterface )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __in  REFGUID guid,\n            /* [annotation] */ \n            __in_opt  const IUnknown *pData);\n        \n        D3D_FEATURE_LEVEL ( STDMETHODCALLTYPE *GetFeatureLevel )( \n            ID3D11Device * This);\n        \n        UINT ( STDMETHODCALLTYPE *GetCreationFlags )( \n            ID3D11Device * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetDeviceRemovedReason )( \n            ID3D11Device * This);\n        \n        void ( STDMETHODCALLTYPE *GetImmediateContext )( \n            ID3D11Device * This,\n            /* [annotation] */ \n            __out  ID3D11DeviceContext **ppImmediateContext);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetExceptionMode )( \n            ID3D11Device * This,\n            UINT RaiseFlags);\n        \n        UINT ( STDMETHODCALLTYPE *GetExceptionMode )( \n            ID3D11Device * This);\n        \n        END_INTERFACE\n    } ID3D11DeviceVtbl;\n\n    interface ID3D11Device\n    {\n        CONST_VTBL struct ID3D11DeviceVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11Device_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11Device_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11Device_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11Device_CreateBuffer(This,pDesc,pInitialData,ppBuffer)\t\\\n    ( (This)->lpVtbl -> CreateBuffer(This,pDesc,pInitialData,ppBuffer) ) \n\n#define ID3D11Device_CreateTexture1D(This,pDesc,pInitialData,ppTexture1D)\t\\\n    ( (This)->lpVtbl -> CreateTexture1D(This,pDesc,pInitialData,ppTexture1D) ) \n\n#define ID3D11Device_CreateTexture2D(This,pDesc,pInitialData,ppTexture2D)\t\\\n    ( (This)->lpVtbl -> CreateTexture2D(This,pDesc,pInitialData,ppTexture2D) ) \n\n#define ID3D11Device_CreateTexture3D(This,pDesc,pInitialData,ppTexture3D)\t\\\n    ( (This)->lpVtbl -> CreateTexture3D(This,pDesc,pInitialData,ppTexture3D) ) \n\n#define ID3D11Device_CreateShaderResourceView(This,pResource,pDesc,ppSRView)\t\\\n    ( (This)->lpVtbl -> CreateShaderResourceView(This,pResource,pDesc,ppSRView) ) \n\n#define ID3D11Device_CreateUnorderedAccessView(This,pResource,pDesc,ppUAView)\t\\\n    ( (This)->lpVtbl -> CreateUnorderedAccessView(This,pResource,pDesc,ppUAView) ) \n\n#define ID3D11Device_CreateRenderTargetView(This,pResource,pDesc,ppRTView)\t\\\n    ( (This)->lpVtbl -> CreateRenderTargetView(This,pResource,pDesc,ppRTView) ) \n\n#define ID3D11Device_CreateDepthStencilView(This,pResource,pDesc,ppDepthStencilView)\t\\\n    ( (This)->lpVtbl -> CreateDepthStencilView(This,pResource,pDesc,ppDepthStencilView) ) \n\n#define ID3D11Device_CreateInputLayout(This,pInputElementDescs,NumElements,pShaderBytecodeWithInputSignature,BytecodeLength,ppInputLayout)\t\\\n    ( (This)->lpVtbl -> CreateInputLayout(This,pInputElementDescs,NumElements,pShaderBytecodeWithInputSignature,BytecodeLength,ppInputLayout) ) \n\n#define ID3D11Device_CreateVertexShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppVertexShader)\t\\\n    ( (This)->lpVtbl -> CreateVertexShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppVertexShader) ) \n\n#define ID3D11Device_CreateGeometryShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppGeometryShader)\t\\\n    ( (This)->lpVtbl -> CreateGeometryShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppGeometryShader) ) \n\n#define ID3D11Device_CreateGeometryShaderWithStreamOutput(This,pShaderBytecode,BytecodeLength,pSODeclaration,NumEntries,pBufferStrides,NumStrides,RasterizedStream,pClassLinkage,ppGeometryShader)\t\\\n    ( (This)->lpVtbl -> CreateGeometryShaderWithStreamOutput(This,pShaderBytecode,BytecodeLength,pSODeclaration,NumEntries,pBufferStrides,NumStrides,RasterizedStream,pClassLinkage,ppGeometryShader) ) \n\n#define ID3D11Device_CreatePixelShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppPixelShader)\t\\\n    ( (This)->lpVtbl -> CreatePixelShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppPixelShader) ) \n\n#define ID3D11Device_CreateHullShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppHullShader)\t\\\n    ( (This)->lpVtbl -> CreateHullShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppHullShader) ) \n\n#define ID3D11Device_CreateDomainShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppDomainShader)\t\\\n    ( (This)->lpVtbl -> CreateDomainShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppDomainShader) ) \n\n#define ID3D11Device_CreateComputeShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppComputeShader)\t\\\n    ( (This)->lpVtbl -> CreateComputeShader(This,pShaderBytecode,BytecodeLength,pClassLinkage,ppComputeShader) ) \n\n#define ID3D11Device_CreateClassLinkage(This,ppLinkage)\t\\\n    ( (This)->lpVtbl -> CreateClassLinkage(This,ppLinkage) ) \n\n#define ID3D11Device_CreateBlendState(This,pBlendStateDesc,ppBlendState)\t\\\n    ( (This)->lpVtbl -> CreateBlendState(This,pBlendStateDesc,ppBlendState) ) \n\n#define ID3D11Device_CreateDepthStencilState(This,pDepthStencilDesc,ppDepthStencilState)\t\\\n    ( (This)->lpVtbl -> CreateDepthStencilState(This,pDepthStencilDesc,ppDepthStencilState) ) \n\n#define ID3D11Device_CreateRasterizerState(This,pRasterizerDesc,ppRasterizerState)\t\\\n    ( (This)->lpVtbl -> CreateRasterizerState(This,pRasterizerDesc,ppRasterizerState) ) \n\n#define ID3D11Device_CreateSamplerState(This,pSamplerDesc,ppSamplerState)\t\\\n    ( (This)->lpVtbl -> CreateSamplerState(This,pSamplerDesc,ppSamplerState) ) \n\n#define ID3D11Device_CreateQuery(This,pQueryDesc,ppQuery)\t\\\n    ( (This)->lpVtbl -> CreateQuery(This,pQueryDesc,ppQuery) ) \n\n#define ID3D11Device_CreatePredicate(This,pPredicateDesc,ppPredicate)\t\\\n    ( (This)->lpVtbl -> CreatePredicate(This,pPredicateDesc,ppPredicate) ) \n\n#define ID3D11Device_CreateCounter(This,pCounterDesc,ppCounter)\t\\\n    ( (This)->lpVtbl -> CreateCounter(This,pCounterDesc,ppCounter) ) \n\n#define ID3D11Device_CreateDeferredContext(This,ContextFlags,ppDeferredContext)\t\\\n    ( (This)->lpVtbl -> CreateDeferredContext(This,ContextFlags,ppDeferredContext) ) \n\n#define ID3D11Device_OpenSharedResource(This,hResource,ReturnedInterface,ppResource)\t\\\n    ( (This)->lpVtbl -> OpenSharedResource(This,hResource,ReturnedInterface,ppResource) ) \n\n#define ID3D11Device_CheckFormatSupport(This,Format,pFormatSupport)\t\\\n    ( (This)->lpVtbl -> CheckFormatSupport(This,Format,pFormatSupport) ) \n\n#define ID3D11Device_CheckMultisampleQualityLevels(This,Format,SampleCount,pNumQualityLevels)\t\\\n    ( (This)->lpVtbl -> CheckMultisampleQualityLevels(This,Format,SampleCount,pNumQualityLevels) ) \n\n#define ID3D11Device_CheckCounterInfo(This,pCounterInfo)\t\\\n    ( (This)->lpVtbl -> CheckCounterInfo(This,pCounterInfo) ) \n\n#define ID3D11Device_CheckCounter(This,pDesc,pType,pActiveCounters,szName,pNameLength,szUnits,pUnitsLength,szDescription,pDescriptionLength)\t\\\n    ( (This)->lpVtbl -> CheckCounter(This,pDesc,pType,pActiveCounters,szName,pNameLength,szUnits,pUnitsLength,szDescription,pDescriptionLength) ) \n\n#define ID3D11Device_CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize)\t\\\n    ( (This)->lpVtbl -> CheckFeatureSupport(This,Feature,pFeatureSupportData,FeatureSupportDataSize) ) \n\n#define ID3D11Device_GetPrivateData(This,guid,pDataSize,pData)\t\\\n    ( (This)->lpVtbl -> GetPrivateData(This,guid,pDataSize,pData) ) \n\n#define ID3D11Device_SetPrivateData(This,guid,DataSize,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateData(This,guid,DataSize,pData) ) \n\n#define ID3D11Device_SetPrivateDataInterface(This,guid,pData)\t\\\n    ( (This)->lpVtbl -> SetPrivateDataInterface(This,guid,pData) ) \n\n#define ID3D11Device_GetFeatureLevel(This)\t\\\n    ( (This)->lpVtbl -> GetFeatureLevel(This) ) \n\n#define ID3D11Device_GetCreationFlags(This)\t\\\n    ( (This)->lpVtbl -> GetCreationFlags(This) ) \n\n#define ID3D11Device_GetDeviceRemovedReason(This)\t\\\n    ( (This)->lpVtbl -> GetDeviceRemovedReason(This) ) \n\n#define ID3D11Device_GetImmediateContext(This,ppImmediateContext)\t\\\n    ( (This)->lpVtbl -> GetImmediateContext(This,ppImmediateContext) ) \n\n#define ID3D11Device_SetExceptionMode(This,RaiseFlags)\t\\\n    ( (This)->lpVtbl -> SetExceptionMode(This,RaiseFlags) ) \n\n#define ID3D11Device_GetExceptionMode(This)\t\\\n    ( (This)->lpVtbl -> GetExceptionMode(This) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11Device_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11_0000_0031 */\n/* [local] */ \n\ntypedef \nenum D3D11_CREATE_DEVICE_FLAG\n    {\tD3D11_CREATE_DEVICE_SINGLETHREADED\t= 0x1,\n\tD3D11_CREATE_DEVICE_DEBUG\t= 0x2,\n\tD3D11_CREATE_DEVICE_SWITCH_TO_REF\t= 0x4,\n\tD3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS\t= 0x8,\n\tD3D11_CREATE_DEVICE_BGRA_SUPPORT\t= 0x20\n    } \tD3D11_CREATE_DEVICE_FLAG;\n\n#define\tD3D11_SDK_VERSION\t( 7 )\n\n#include \"d3d10_1.h\"\n#if !defined( D3D11_IGNORE_SDK_LAYERS ) \n#include \"d3d11sdklayers.h\" \n#endif \n#include \"d3d10misc.h\" \n#include \"d3d10shader.h\" \n#include \"d3d10effect.h\" \n#include \"d3d10_1shader.h\" \n\n///////////////////////////////////////////////////////////////////////////\n// D3D11CreateDevice\n// ------------------\n//\n// pAdapter\n//      If NULL, D3D11CreateDevice will choose the primary adapter and\n//      create a new instance from a temporarily created IDXGIFactory.\n//      If non-NULL, D3D11CreateDevice will register the appropriate\n//      device, if necessary (via IDXGIAdapter::RegisterDrver), before\n//      creating the device.\n// DriverType\n//      Specifies the driver type to be created: hardware, reference or\n//      null.\n// Software\n//      HMODULE of a DLL implementing a software rasterizer. Must be NULL for\n//      non-Software driver types.\n// Flags\n//      Any of those documented for D3D11CreateDeviceAndSwapChain.\n// pFeatureLevels\n//      Any of those documented for D3D11CreateDeviceAndSwapChain.\n// FeatureLevels\n//      Size of feature levels array.\n// SDKVersion\n//      SDK version. Use the D3D11_SDK_VERSION macro.\n// ppDevice\n//      Pointer to returned interface. May be NULL.\n// pFeatureLevel\n//      Pointer to returned feature level. May be NULL.\n// ppImmediateContext\n//      Pointer to returned interface. May be NULL.\n//\n// Return Values\n//  Any of those documented for \n//          CreateDXGIFactory1\n//          IDXGIFactory::EnumAdapters\n//          IDXGIAdapter::RegisterDriver\n//          D3D11CreateDevice\n//\n///////////////////////////////////////////////////////////////////////////\ntypedef HRESULT (WINAPI* PFN_D3D11_CREATE_DEVICE)( __in_opt IDXGIAdapter*, \n    D3D_DRIVER_TYPE, HMODULE, UINT, \n    __in_ecount_opt( FeatureLevels ) CONST D3D_FEATURE_LEVEL*, \n    UINT FeatureLevels, UINT, __out_opt ID3D11Device**, \n    __out_opt D3D_FEATURE_LEVEL*, __out_opt ID3D11DeviceContext** );\n\nHRESULT WINAPI D3D11CreateDevice(\n    __in_opt IDXGIAdapter* pAdapter,\n    D3D_DRIVER_TYPE DriverType,\n    HMODULE Software,\n    UINT Flags,\n    __in_ecount_opt( FeatureLevels ) CONST D3D_FEATURE_LEVEL* pFeatureLevels,\n    UINT FeatureLevels,\n    UINT SDKVersion,\n    __out_opt ID3D11Device** ppDevice,\n    __out_opt D3D_FEATURE_LEVEL* pFeatureLevel,\n    __out_opt ID3D11DeviceContext** ppImmediateContext );\n\n///////////////////////////////////////////////////////////////////////////\n// D3D11CreateDeviceAndSwapChain\n// ------------------------------\n//\n// ppAdapter\n//      If NULL, D3D11CreateDevice will choose the primary adapter and \n//      create a new instance from a temporarily created IDXGIFactory.\n//      If non-NULL, D3D11CreateDevice will register the appropriate\n//      device, if necessary (via IDXGIAdapter::RegisterDrver), before\n//      creating the device.\n// DriverType\n//      Specifies the driver type to be created: hardware, reference or\n//      null.\n// Software\n//      HMODULE of a DLL implementing a software rasterizer. Must be NULL for\n//      non-Software driver types.\n// Flags\n//      Any of those documented for D3D11CreateDevice.\n// pFeatureLevels\n//      Array of any of the following:\n//          D3D_FEATURE_LEVEL_11_0\n//          D3D_FEATURE_LEVEL_10_1\n//          D3D_FEATURE_LEVEL_10_0\n//          D3D_FEATURE_LEVEL_9_3\n//          D3D_FEATURE_LEVEL_9_2\n//          D3D_FEATURE_LEVEL_9_1\n//      Order indicates sequence in which instantiation will be attempted. If\n//      NULL, then the implied order is the same as previously listed (i.e. \n//      prefer most features available). \n// FeatureLevels\n//      Size of feature levels array.\n// SDKVersion\n//      SDK version. Use the D3D11_SDK_VERSION macro.\n// pSwapChainDesc\n//      Swap chain description, may be NULL.\n// ppSwapChain\n//      Pointer to returned interface. May be NULL.\n// ppDevice\n//      Pointer to returned interface. May be NULL.\n// pFeatureLevel\n//      Pointer to returned feature level. May be NULL.\n// ppImmediateContext\n//      Pointer to returned interface. May be NULL.\n//\n// Return Values\n//  Any of those documented for \n//          CreateDXGIFactory1\n//          IDXGIFactory::EnumAdapters\n//          IDXGIAdapter::RegisterDriver\n//          D3D11CreateDevice\n//          IDXGIFactory::CreateSwapChain\n//\n///////////////////////////////////////////////////////////////////////////\ntypedef HRESULT (WINAPI* PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN)( __in_opt IDXGIAdapter*, \n    D3D_DRIVER_TYPE, HMODULE, UINT, \n    __in_ecount_opt( FeatureLevels ) CONST D3D_FEATURE_LEVEL*, \n    UINT FeatureLevels, UINT, __in_opt CONST DXGI_SWAP_CHAIN_DESC*, \n    __out_opt IDXGISwapChain**, __out_opt ID3D11Device**, \n    __out_opt D3D_FEATURE_LEVEL*, __out_opt ID3D11DeviceContext** );\n\nHRESULT WINAPI D3D11CreateDeviceAndSwapChain(\n    __in_opt IDXGIAdapter* pAdapter,\n    D3D_DRIVER_TYPE DriverType,\n    HMODULE Software,\n    UINT Flags,\n    __in_ecount_opt( FeatureLevels ) CONST D3D_FEATURE_LEVEL* pFeatureLevels,\n    UINT FeatureLevels,\n    UINT SDKVersion,\n    __in_opt CONST DXGI_SWAP_CHAIN_DESC* pSwapChainDesc,\n    __out_opt IDXGISwapChain** ppSwapChain,\n    __out_opt ID3D11Device** ppDevice,\n    __out_opt D3D_FEATURE_LEVEL* pFeatureLevel,\n    __out_opt ID3D11DeviceContext** ppImmediateContext );\n\nDEFINE_GUID(IID_ID3D11DeviceChild,0x1841e5c8,0x16b0,0x489b,0xbc,0xc8,0x44,0xcf,0xb0,0xd5,0xde,0xae);\nDEFINE_GUID(IID_ID3D11DepthStencilState,0x03823efb,0x8d8f,0x4e1c,0x9a,0xa2,0xf6,0x4b,0xb2,0xcb,0xfd,0xf1);\nDEFINE_GUID(IID_ID3D11BlendState,0x75b68faa,0x347d,0x4159,0x8f,0x45,0xa0,0x64,0x0f,0x01,0xcd,0x9a);\nDEFINE_GUID(IID_ID3D11RasterizerState,0x9bb4ab81,0xab1a,0x4d8f,0xb5,0x06,0xfc,0x04,0x20,0x0b,0x6e,0xe7);\nDEFINE_GUID(IID_ID3D11Resource,0xdc8e63f3,0xd12b,0x4952,0xb4,0x7b,0x5e,0x45,0x02,0x6a,0x86,0x2d);\nDEFINE_GUID(IID_ID3D11Buffer,0x48570b85,0xd1ee,0x4fcd,0xa2,0x50,0xeb,0x35,0x07,0x22,0xb0,0x37);\nDEFINE_GUID(IID_ID3D11Texture1D,0xf8fb5c27,0xc6b3,0x4f75,0xa4,0xc8,0x43,0x9a,0xf2,0xef,0x56,0x4c);\nDEFINE_GUID(IID_ID3D11Texture2D,0x6f15aaf2,0xd208,0x4e89,0x9a,0xb4,0x48,0x95,0x35,0xd3,0x4f,0x9c);\nDEFINE_GUID(IID_ID3D11Texture3D,0x037e866e,0xf56d,0x4357,0xa8,0xaf,0x9d,0xab,0xbe,0x6e,0x25,0x0e);\nDEFINE_GUID(IID_ID3D11View,0x839d1216,0xbb2e,0x412b,0xb7,0xf4,0xa9,0xdb,0xeb,0xe0,0x8e,0xd1);\nDEFINE_GUID(IID_ID3D11ShaderResourceView,0xb0e06fe0,0x8192,0x4e1a,0xb1,0xca,0x36,0xd7,0x41,0x47,0x10,0xb2);\nDEFINE_GUID(IID_ID3D11RenderTargetView,0xdfdba067,0x0b8d,0x4865,0x87,0x5b,0xd7,0xb4,0x51,0x6c,0xc1,0x64);\nDEFINE_GUID(IID_ID3D11DepthStencilView,0x9fdac92a,0x1876,0x48c3,0xaf,0xad,0x25,0xb9,0x4f,0x84,0xa9,0xb6);\nDEFINE_GUID(IID_ID3D11UnorderedAccessView,0x28acf509,0x7f5c,0x48f6,0x86,0x11,0xf3,0x16,0x01,0x0a,0x63,0x80);\nDEFINE_GUID(IID_ID3D11VertexShader,0x3b301d64,0xd678,0x4289,0x88,0x97,0x22,0xf8,0x92,0x8b,0x72,0xf3);\nDEFINE_GUID(IID_ID3D11HullShader,0x8e5c6061,0x628a,0x4c8e,0x82,0x64,0xbb,0xe4,0x5c,0xb3,0xd5,0xdd);\nDEFINE_GUID(IID_ID3D11DomainShader,0xf582c508,0x0f36,0x490c,0x99,0x77,0x31,0xee,0xce,0x26,0x8c,0xfa);\nDEFINE_GUID(IID_ID3D11GeometryShader,0x38325b96,0xeffb,0x4022,0xba,0x02,0x2e,0x79,0x5b,0x70,0x27,0x5c);\nDEFINE_GUID(IID_ID3D11PixelShader,0xea82e40d,0x51dc,0x4f33,0x93,0xd4,0xdb,0x7c,0x91,0x25,0xae,0x8c);\nDEFINE_GUID(IID_ID3D11ComputeShader,0x4f5b196e,0xc2bd,0x495e,0xbd,0x01,0x1f,0xde,0xd3,0x8e,0x49,0x69);\nDEFINE_GUID(IID_ID3D11InputLayout,0xe4819ddc,0x4cf0,0x4025,0xbd,0x26,0x5d,0xe8,0x2a,0x3e,0x07,0xb7);\nDEFINE_GUID(IID_ID3D11SamplerState,0xda6fea51,0x564c,0x4487,0x98,0x10,0xf0,0xd0,0xf9,0xb4,0xe3,0xa5);\nDEFINE_GUID(IID_ID3D11Asynchronous,0x4b35d0cd,0x1e15,0x4258,0x9c,0x98,0x1b,0x13,0x33,0xf6,0xdd,0x3b);\nDEFINE_GUID(IID_ID3D11Query,0xd6c00747,0x87b7,0x425e,0xb8,0x4d,0x44,0xd1,0x08,0x56,0x0a,0xfd);\nDEFINE_GUID(IID_ID3D11Predicate,0x9eb576dd,0x9f77,0x4d86,0x81,0xaa,0x8b,0xab,0x5f,0xe4,0x90,0xe2);\nDEFINE_GUID(IID_ID3D11Counter,0x6e8c49fb,0xa371,0x4770,0xb4,0x40,0x29,0x08,0x60,0x22,0xb7,0x41);\nDEFINE_GUID(IID_ID3D11ClassInstance,0xa6cd7faa,0xb0b7,0x4a2f,0x94,0x36,0x86,0x62,0xa6,0x57,0x97,0xcb);\nDEFINE_GUID(IID_ID3D11ClassLinkage,0xddf57cba,0x9543,0x46e4,0xa1,0x2b,0xf2,0x07,0xa0,0xfe,0x7f,0xed);\nDEFINE_GUID(IID_ID3D11CommandList,0xa24bc4d1,0x769e,0x43f7,0x80,0x13,0x98,0xff,0x56,0x6c,0x18,0xe2);\nDEFINE_GUID(IID_ID3D11DeviceContext,0xc0bfa96c,0xe089,0x44fb,0x8e,0xaf,0x26,0xf8,0x79,0x61,0x90,0xda);\nDEFINE_GUID(IID_ID3D11Device,0xdb6f6ddb,0xac77,0x4e88,0x82,0x53,0x81,0x9d,0xf9,0xbb,0xf1,0x40);\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0031_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11_0000_0031_v0_0_s_ifspec;\n\n/* Additional Prototypes for ALL interfaces */\n\n/* end of Additional Prototypes */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n\n"
  },
  {
    "path": "Include/D3D11SDKLayers.h",
    "content": "\n\n/* this ALWAYS GENERATED file contains the definitions for the interfaces */\n\n\n /* File created by MIDL compiler version 7.00.0555 */\n/* Compiler settings for d3d11sdklayers.idl:\n    Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555 \n    protocol : all , ms_ext, c_ext, robust\n    error checks: allocation ref bounds_check enum stub_data \n    VC __declspec() decoration level: \n         __declspec(uuid()), __declspec(selectany), __declspec(novtable)\n         DECLSPEC_UUID(), MIDL_INTERFACE()\n*/\n/* @@MIDL_FILE_HEADING(  ) */\n\n#pragma warning( disable: 4049 )  /* more than 64k source lines */\n\n\n/* verify that the <rpcndr.h> version is high enough to compile this file*/\n#ifndef __REQUIRED_RPCNDR_H_VERSION__\n#define __REQUIRED_RPCNDR_H_VERSION__ 475\n#endif\n\n/* verify that the <rpcsal.h> version is high enough to compile this file*/\n#ifndef __REQUIRED_RPCSAL_H_VERSION__\n#define __REQUIRED_RPCSAL_H_VERSION__ 100\n#endif\n\n#include \"rpc.h\"\n#include \"rpcndr.h\"\n\n#ifndef __RPCNDR_H_VERSION__\n#error this stub requires an updated version of <rpcndr.h>\n#endif // __RPCNDR_H_VERSION__\n\n#ifndef COM_NO_WINDOWS_H\n#include \"windows.h\"\n#include \"ole2.h\"\n#endif /*COM_NO_WINDOWS_H*/\n\n#ifndef __d3d11sdklayers_h__\n#define __d3d11sdklayers_h__\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n#pragma once\n#endif\n\n/* Forward Declarations */ \n\n#ifndef __ID3D11Debug_FWD_DEFINED__\n#define __ID3D11Debug_FWD_DEFINED__\ntypedef interface ID3D11Debug ID3D11Debug;\n#endif \t/* __ID3D11Debug_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11SwitchToRef_FWD_DEFINED__\n#define __ID3D11SwitchToRef_FWD_DEFINED__\ntypedef interface ID3D11SwitchToRef ID3D11SwitchToRef;\n#endif \t/* __ID3D11SwitchToRef_FWD_DEFINED__ */\n\n\n#ifndef __ID3D11InfoQueue_FWD_DEFINED__\n#define __ID3D11InfoQueue_FWD_DEFINED__\ntypedef interface ID3D11InfoQueue ID3D11InfoQueue;\n#endif \t/* __ID3D11InfoQueue_FWD_DEFINED__ */\n\n\n/* header files for imported files */\n#include \"oaidl.h\"\n#include \"ocidl.h\"\n#include \"d3d11.h\"\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif \n\n\n/* interface __MIDL_itf_d3d11sdklayers_0000_0000 */\n/* [local] */ \n\n#define\tD3D11_SDK_LAYERS_VERSION\t( 1 )\n\n#define\tD3D11_DEBUG_FEATURE_FLUSH_PER_RENDER_OP\t( 0x1 )\n\n#define\tD3D11_DEBUG_FEATURE_FINISH_PER_RENDER_OP\t( 0x2 )\n\n#define\tD3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP\t( 0x4 )\n\ntypedef \nenum D3D11_RLDO_FLAGS\n    {\tD3D11_RLDO_SUMMARY\t= 0x1,\n\tD3D11_RLDO_DETAIL\t= 0x2\n    } \tD3D11_RLDO_FLAGS;\n\n#if !defined( D3D11_NO_HELPERS ) && defined( __cplusplus )\n}\ninline D3D11_RLDO_FLAGS operator~( D3D11_RLDO_FLAGS a )\n{ return D3D11_RLDO_FLAGS( ~UINT( a ) ); }\ninline D3D11_RLDO_FLAGS operator&( D3D11_RLDO_FLAGS a, D3D11_RLDO_FLAGS b )\n{ return D3D11_RLDO_FLAGS( UINT( a ) & UINT( b ) ); }\ninline D3D11_RLDO_FLAGS operator|( D3D11_RLDO_FLAGS a, D3D11_RLDO_FLAGS b )\n{ return D3D11_RLDO_FLAGS( UINT( a ) | UINT( b ) ); }\ninline D3D11_RLDO_FLAGS operator^( D3D11_RLDO_FLAGS a, D3D11_RLDO_FLAGS b )\n{ return D3D11_RLDO_FLAGS( UINT( a ) ^ UINT( b ) ); }\ninline D3D11_RLDO_FLAGS& operator&=( D3D11_RLDO_FLAGS& a, D3D11_RLDO_FLAGS b )\n{ a = a & b; return a; }\ninline D3D11_RLDO_FLAGS& operator|=( D3D11_RLDO_FLAGS& a, D3D11_RLDO_FLAGS b )\n{ a = a | b; return a; }\ninline D3D11_RLDO_FLAGS& operator^=( D3D11_RLDO_FLAGS& a, D3D11_RLDO_FLAGS b )\n{ a = a ^ b; return a; }\nextern \"C\"{\n#endif\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11sdklayers_0000_0000_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11sdklayers_0000_0000_v0_0_s_ifspec;\n\n#ifndef __ID3D11Debug_INTERFACE_DEFINED__\n#define __ID3D11Debug_INTERFACE_DEFINED__\n\n/* interface ID3D11Debug */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11Debug;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"79cf2233-7536-4948-9d36-1e4692dc5760\")\n    ID3D11Debug : public IUnknown\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE SetFeatureMask( \n            UINT Mask) = 0;\n        \n        virtual UINT STDMETHODCALLTYPE GetFeatureMask( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetPresentPerRenderOpDelay( \n            UINT Milliseconds) = 0;\n        \n        virtual UINT STDMETHODCALLTYPE GetPresentPerRenderOpDelay( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetSwapChain( \n            /* [annotation] */ \n            __in_opt  IDXGISwapChain *pSwapChain) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetSwapChain( \n            /* [annotation] */ \n            __out  IDXGISwapChain **ppSwapChain) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE ValidateContext( \n            /* [annotation] */ \n            __in  ID3D11DeviceContext *pContext) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE ReportLiveDeviceObjects( \n            D3D11_RLDO_FLAGS Flags) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE ValidateContextForDispatch( \n            /* [annotation] */ \n            __in  ID3D11DeviceContext *pContext) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11DebugVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11Debug * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11Debug * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11Debug * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetFeatureMask )( \n            ID3D11Debug * This,\n            UINT Mask);\n        \n        UINT ( STDMETHODCALLTYPE *GetFeatureMask )( \n            ID3D11Debug * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPresentPerRenderOpDelay )( \n            ID3D11Debug * This,\n            UINT Milliseconds);\n        \n        UINT ( STDMETHODCALLTYPE *GetPresentPerRenderOpDelay )( \n            ID3D11Debug * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetSwapChain )( \n            ID3D11Debug * This,\n            /* [annotation] */ \n            __in_opt  IDXGISwapChain *pSwapChain);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetSwapChain )( \n            ID3D11Debug * This,\n            /* [annotation] */ \n            __out  IDXGISwapChain **ppSwapChain);\n        \n        HRESULT ( STDMETHODCALLTYPE *ValidateContext )( \n            ID3D11Debug * This,\n            /* [annotation] */ \n            __in  ID3D11DeviceContext *pContext);\n        \n        HRESULT ( STDMETHODCALLTYPE *ReportLiveDeviceObjects )( \n            ID3D11Debug * This,\n            D3D11_RLDO_FLAGS Flags);\n        \n        HRESULT ( STDMETHODCALLTYPE *ValidateContextForDispatch )( \n            ID3D11Debug * This,\n            /* [annotation] */ \n            __in  ID3D11DeviceContext *pContext);\n        \n        END_INTERFACE\n    } ID3D11DebugVtbl;\n\n    interface ID3D11Debug\n    {\n        CONST_VTBL struct ID3D11DebugVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11Debug_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11Debug_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11Debug_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11Debug_SetFeatureMask(This,Mask)\t\\\n    ( (This)->lpVtbl -> SetFeatureMask(This,Mask) ) \n\n#define ID3D11Debug_GetFeatureMask(This)\t\\\n    ( (This)->lpVtbl -> GetFeatureMask(This) ) \n\n#define ID3D11Debug_SetPresentPerRenderOpDelay(This,Milliseconds)\t\\\n    ( (This)->lpVtbl -> SetPresentPerRenderOpDelay(This,Milliseconds) ) \n\n#define ID3D11Debug_GetPresentPerRenderOpDelay(This)\t\\\n    ( (This)->lpVtbl -> GetPresentPerRenderOpDelay(This) ) \n\n#define ID3D11Debug_SetSwapChain(This,pSwapChain)\t\\\n    ( (This)->lpVtbl -> SetSwapChain(This,pSwapChain) ) \n\n#define ID3D11Debug_GetSwapChain(This,ppSwapChain)\t\\\n    ( (This)->lpVtbl -> GetSwapChain(This,ppSwapChain) ) \n\n#define ID3D11Debug_ValidateContext(This,pContext)\t\\\n    ( (This)->lpVtbl -> ValidateContext(This,pContext) ) \n\n#define ID3D11Debug_ReportLiveDeviceObjects(This,Flags)\t\\\n    ( (This)->lpVtbl -> ReportLiveDeviceObjects(This,Flags) ) \n\n#define ID3D11Debug_ValidateContextForDispatch(This,pContext)\t\\\n    ( (This)->lpVtbl -> ValidateContextForDispatch(This,pContext) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11Debug_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D11SwitchToRef_INTERFACE_DEFINED__\n#define __ID3D11SwitchToRef_INTERFACE_DEFINED__\n\n/* interface ID3D11SwitchToRef */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11SwitchToRef;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"1ef337e3-58e7-4f83-a692-db221f5ed47e\")\n    ID3D11SwitchToRef : public IUnknown\n    {\n    public:\n        virtual BOOL STDMETHODCALLTYPE SetUseRef( \n            BOOL UseRef) = 0;\n        \n        virtual BOOL STDMETHODCALLTYPE GetUseRef( void) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11SwitchToRefVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11SwitchToRef * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11SwitchToRef * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11SwitchToRef * This);\n        \n        BOOL ( STDMETHODCALLTYPE *SetUseRef )( \n            ID3D11SwitchToRef * This,\n            BOOL UseRef);\n        \n        BOOL ( STDMETHODCALLTYPE *GetUseRef )( \n            ID3D11SwitchToRef * This);\n        \n        END_INTERFACE\n    } ID3D11SwitchToRefVtbl;\n\n    interface ID3D11SwitchToRef\n    {\n        CONST_VTBL struct ID3D11SwitchToRefVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11SwitchToRef_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11SwitchToRef_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11SwitchToRef_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11SwitchToRef_SetUseRef(This,UseRef)\t\\\n    ( (This)->lpVtbl -> SetUseRef(This,UseRef) ) \n\n#define ID3D11SwitchToRef_GetUseRef(This)\t\\\n    ( (This)->lpVtbl -> GetUseRef(This) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11SwitchToRef_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11sdklayers_0000_0002 */\n/* [local] */ \n\ntypedef \nenum D3D11_MESSAGE_CATEGORY\n    {\tD3D11_MESSAGE_CATEGORY_APPLICATION_DEFINED\t= 0,\n\tD3D11_MESSAGE_CATEGORY_MISCELLANEOUS\t= ( D3D11_MESSAGE_CATEGORY_APPLICATION_DEFINED + 1 ) ,\n\tD3D11_MESSAGE_CATEGORY_INITIALIZATION\t= ( D3D11_MESSAGE_CATEGORY_MISCELLANEOUS + 1 ) ,\n\tD3D11_MESSAGE_CATEGORY_CLEANUP\t= ( D3D11_MESSAGE_CATEGORY_INITIALIZATION + 1 ) ,\n\tD3D11_MESSAGE_CATEGORY_COMPILATION\t= ( D3D11_MESSAGE_CATEGORY_CLEANUP + 1 ) ,\n\tD3D11_MESSAGE_CATEGORY_STATE_CREATION\t= ( D3D11_MESSAGE_CATEGORY_COMPILATION + 1 ) ,\n\tD3D11_MESSAGE_CATEGORY_STATE_SETTING\t= ( D3D11_MESSAGE_CATEGORY_STATE_CREATION + 1 ) ,\n\tD3D11_MESSAGE_CATEGORY_STATE_GETTING\t= ( D3D11_MESSAGE_CATEGORY_STATE_SETTING + 1 ) ,\n\tD3D11_MESSAGE_CATEGORY_RESOURCE_MANIPULATION\t= ( D3D11_MESSAGE_CATEGORY_STATE_GETTING + 1 ) ,\n\tD3D11_MESSAGE_CATEGORY_EXECUTION\t= ( D3D11_MESSAGE_CATEGORY_RESOURCE_MANIPULATION + 1 ) \n    } \tD3D11_MESSAGE_CATEGORY;\n\ntypedef \nenum D3D11_MESSAGE_SEVERITY\n    {\tD3D11_MESSAGE_SEVERITY_CORRUPTION\t= 0,\n\tD3D11_MESSAGE_SEVERITY_ERROR\t= ( D3D11_MESSAGE_SEVERITY_CORRUPTION + 1 ) ,\n\tD3D11_MESSAGE_SEVERITY_WARNING\t= ( D3D11_MESSAGE_SEVERITY_ERROR + 1 ) ,\n\tD3D11_MESSAGE_SEVERITY_INFO\t= ( D3D11_MESSAGE_SEVERITY_WARNING + 1 ) \n    } \tD3D11_MESSAGE_SEVERITY;\n\ntypedef \nenum D3D11_MESSAGE_ID\n    {\tD3D11_MESSAGE_ID_UNKNOWN\t= 0,\n\tD3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD\t= ( D3D11_MESSAGE_ID_UNKNOWN + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD\t= ( D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD\t= ( D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD\t= ( D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD\t= ( D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD\t= ( D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD\t= ( D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD\t= ( D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD\t= ( D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD\t= ( D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_STRING_FROM_APPLICATION\t= ( D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_THIS\t= ( D3D11_MESSAGE_ID_STRING_FROM_APPLICATION + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_PARAMETER1\t= ( D3D11_MESSAGE_ID_CORRUPTED_THIS + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_PARAMETER2\t= ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER1 + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_PARAMETER3\t= ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER2 + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_PARAMETER4\t= ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER3 + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_PARAMETER5\t= ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER4 + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_PARAMETER6\t= ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER5 + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_PARAMETER7\t= ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER6 + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_PARAMETER8\t= ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER7 + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_PARAMETER9\t= ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER8 + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_PARAMETER10\t= ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER9 + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_PARAMETER11\t= ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER10 + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_PARAMETER12\t= ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER11 + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_PARAMETER13\t= ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER12 + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_PARAMETER14\t= ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER13 + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_PARAMETER15\t= ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER14 + 1 ) ,\n\tD3D11_MESSAGE_ID_CORRUPTED_MULTITHREADING\t= ( D3D11_MESSAGE_ID_CORRUPTED_PARAMETER15 + 1 ) ,\n\tD3D11_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY\t= ( D3D11_MESSAGE_ID_CORRUPTED_MULTITHREADING + 1 ) ,\n\tD3D11_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY + 1 ) ,\n\tD3D11_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_GETPRIVATEDATA_MOREDATA\t= ( D3D11_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA\t= ( D3D11_MESSAGE_ID_GETPRIVATEDATA_MOREDATA + 1 ) ,\n\tD3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN\t= ( D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA + 1 ) ,\n\tD3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS\t= ( D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN + 1 ) ,\n\tD3D11_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS\t= ( D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY\t= ( D3D11_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT\t= ( D3D11_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_NULLDESC\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_NULLDESC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_NULLDESC\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_NULLDESC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT\t= ( D3D11_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_NULLDESC\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_NULLDESC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT\t= ( D3D11_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_NULLDESC\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_NULLDESC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT\t= ( D3D11_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC\t= ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT\t= ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS\t= ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE\t= ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS\t= ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN\t= ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN\t= ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT\t= ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT\t= ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC\t= ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT\t= ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS\t= ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE\t= ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS\t= ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN\t= ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN\t= ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT\t= ( D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE\t= ( D3D11_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE\t= ( D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY\t= ( D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE\t= ( D3D11_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE\t= ( D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE\t= ( D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE\t= ( D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP\t= ( D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS\t= ( D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS\t= ( D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC\t= ( D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK\t= ( D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND\t= ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP\t= ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA\t= ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA\t= ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA\t= ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK\t= ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS\t= ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC\t= ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER\t= ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS\t= ( D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG\t= ( D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC\t= ( D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED\t= ( D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED\t= ( D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED + 1 ) ,\n\tD3D11_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER\t= ( D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE\t= ( D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE + 1 ) ,\n\tD3D11_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER\t= ( D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID\t= ( D3D11_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE\t= ( D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED\t= ( D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED + 1 ) ,\n\tD3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER\t= ( D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER\t= ( D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER\t= ( D3D11_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED\t= ( D3D11_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED + 1 ) ,\n\tD3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER\t= ( D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT\t= ( D3D11_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR\t= ( D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT + 1 ) ,\n\tD3D11_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH\t= ( D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR + 1 ) ,\n\tD3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH\t= ( D3D11_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH + 1 ) ,\n\tD3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID\t= ( D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY\t= ( D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID\t= ( D3D11_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE\t= ( D3D11_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID + 1 ) ,\n\tD3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE\t= ( D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX\t= ( D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE\t= ( D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX + 1 ) ,\n\tD3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE\t= ( D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE\t= ( D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE + 1 ) ,\n\tD3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE\t= ( D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE + 1 ) ,\n\tD3D11_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE\t= ( D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE\t= ( D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE + 1 ) ,\n\tD3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE\t= ( D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE + 1 ) ,\n\tD3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX\t= ( D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE\t= ( D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID\t= ( D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID\t= ( D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID\t= ( D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID\t= ( D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID\t= ( D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID + 1 ) ,\n\tD3D11_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE\t= ( D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID + 1 ) ,\n\tD3D11_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS\t= ( D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE + 1 ) ,\n\tD3D11_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED\t= ( D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN\t= ( D3D11_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED + 1 ) ,\n\tD3D11_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED\t= ( D3D11_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE\t= ( D3D11_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE\t= ( D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS\t= ( D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED\t= ( D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN\t= ( D3D11_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE\t= ( D3D11_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED\t= ( D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE\t= ( D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE\t= ( D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS\t= ( D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED\t= ( D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN\t= ( D3D11_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE\t= ( D3D11_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED\t= ( D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE\t= ( D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE\t= ( D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS\t= ( D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED\t= ( D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN\t= ( D3D11_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE\t= ( D3D11_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED\t= ( D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED\t= ( D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED + 1 ) ,\n\tD3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED\t= ( D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED + 1 ) ,\n\tD3D11_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS\t= ( D3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED + 1 ) ,\n\tD3D11_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN\t= ( D3D11_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN\t= ( D3D11_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE\t= ( D3D11_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_REF_THREADING_MODE\t= ( D3D11_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE + 1 ) ,\n\tD3D11_MESSAGE_ID_REF_UMDRIVER_EXCEPTION\t= ( D3D11_MESSAGE_ID_REF_THREADING_MODE + 1 ) ,\n\tD3D11_MESSAGE_ID_REF_KMDRIVER_EXCEPTION\t= ( D3D11_MESSAGE_ID_REF_UMDRIVER_EXCEPTION + 1 ) ,\n\tD3D11_MESSAGE_ID_REF_HARDWARE_EXCEPTION\t= ( D3D11_MESSAGE_ID_REF_KMDRIVER_EXCEPTION + 1 ) ,\n\tD3D11_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE\t= ( D3D11_MESSAGE_ID_REF_HARDWARE_EXCEPTION + 1 ) ,\n\tD3D11_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER\t= ( D3D11_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE + 1 ) ,\n\tD3D11_MESSAGE_ID_REF_OUT_OF_MEMORY\t= ( D3D11_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_REF_INFO\t= ( D3D11_MESSAGE_ID_REF_OUT_OF_MEMORY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW\t= ( D3D11_MESSAGE_ID_REF_INFO + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW\t= ( D3D11_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW\t= ( D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW\t= ( D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW\t= ( D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET\t= ( D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX\t= ( D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE\t= ( D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK\t= ( D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE\t= ( D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS\t= ( D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET\t= ( D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0 + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT\t= ( D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT\t= ( D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN\t= ( D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN\t= ( D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN\t= ( D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET\t= ( D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC + 1 ) ,\n\tD3D11_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW\t= ( D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS\t= ( D3D11_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH\t= ( D3D11_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY\t= ( D3D11_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN\t= ( D3D11_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN\t= ( D3D11_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER\t= ( D3D11_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED\t= ( D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER\t= ( D3D11_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN\t= ( D3D11_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN\t= ( D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATECOUNTER_NULLDESC\t= ( D3D11_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER\t= ( D3D11_MESSAGE_ID_CREATECOUNTER_NULLDESC + 1 ) ,\n\tD3D11_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER\t= ( D3D11_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER + 1 ) ,\n\tD3D11_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE\t= ( D3D11_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + 1 ) ,\n\tD3D11_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE + 1 ) ,\n\tD3D11_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION\t= ( D3D11_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_QUERY_BEGIN_DUPLICATE\t= ( D3D11_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION + 1 ) ,\n\tD3D11_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS\t= ( D3D11_MESSAGE_ID_QUERY_BEGIN_DUPLICATE + 1 ) ,\n\tD3D11_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION\t= ( D3D11_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS + 1 ) ,\n\tD3D11_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS\t= ( D3D11_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION + 1 ) ,\n\tD3D11_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN\t= ( D3D11_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS + 1 ) ,\n\tD3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE\t= ( D3D11_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN + 1 ) ,\n\tD3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS\t= ( D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE + 1 ) ,\n\tD3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL\t= ( D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH\t= ( D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE\t= ( D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT\t= ( D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT + 1 ) ,\n\tD3D11_MESSAGE_ID_D3D10_MESSAGES_END\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_D3D10L9_MESSAGES_START\t= 0x100000,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED\t= ( D3D11_MESSAGE_ID_D3D10L9_MESSAGES_START + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT\t= ( D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY + 1 ) ,\n\tD3D11_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE + 1 ) ,\n\tD3D11_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS\t= ( D3D11_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS\t= ( D3D11_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS\t= ( D3D11_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND\t= ( D3D11_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D\t= ( D3D11_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE\t= ( D3D11_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE\t= ( D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE + 1 ) ,\n\tD3D11_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS\t= ( D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS\t= ( D3D11_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS + 1 ) ,\n\tD3D11_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX\t= ( D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS\t= ( D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS\t= ( D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY\t= ( D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS + 1 ) ,\n\tD3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK\t= ( D3D11_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY + 1 ) ,\n\tD3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK\t= ( D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT\t= ( D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE\t= ( D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE\t= ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE + 1 ) ,\n\tD3D11_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE\t= ( D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD\t= ( D3D11_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL\t= ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES\t= ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET\t= ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER\t= ( D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE\t= ( D3D11_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE\t= ( D3D11_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE\t= ( D3D11_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS\t= ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT\t= ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS\t= ( D3D11_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES\t= ( D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED\t= ( D3D11_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES + 1 ) ,\n\tD3D11_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED\t= ( D3D11_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED + 1 ) ,\n\tD3D11_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED\t= ( D3D11_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED\t= ( D3D11_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED\t= ( D3D11_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND\t= ( D3D11_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND\t= ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED\t= ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE\t= ( D3D11_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE + 1 ) ,\n\tD3D11_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3\t= ( D3D11_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3 + 1 ) ,\n\tD3D11_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO\t= ( D3D11_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION\t= ( D3D11_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED\t= ( D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR\t= ( D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA\t= ( D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP\t= ( D3D11_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED\t= ( D3D11_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP + 1 ) ,\n\tD3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT\t= ( D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_D3D10L9_MESSAGES_END\t= ( D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT + 1 ) ,\n\tD3D11_MESSAGE_ID_D3D11_MESSAGES_START\t= 0x200000,\n\tD3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFLAGS\t= ( D3D11_MESSAGE_ID_D3D11_MESSAGES_START + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDCLASSLINKAGE\t= ( D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE\t= ( D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDCLASSLINKAGE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTREAMS\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTREAMS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTREAMS\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCLASSLINKAGE\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTREAMS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDCLASSLINKAGE\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCLASSLINKAGE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_COMMANDLISTFLAGS\t= ( D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDCLASSLINKAGE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_SINGLETHREADED\t= ( D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_COMMANDLISTFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALIDARG_RETURN\t= ( D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_SINGLETHREADED + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_CALL_RETURN\t= ( D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALIDARG_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_OUTOFMEMORY_RETURN\t= ( D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_CALL_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_FINISHDISPLAYLIST_ONIMMEDIATECONTEXT\t= ( D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_FINISHDISPLAYLIST_OUTOFMEMORY_RETURN\t= ( D3D11_MESSAGE_ID_FINISHDISPLAYLIST_ONIMMEDIATECONTEXT + 1 ) ,\n\tD3D11_MESSAGE_ID_FINISHDISPLAYLIST_INVALID_CALL_RETURN\t= ( D3D11_MESSAGE_ID_FINISHDISPLAYLIST_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM\t= ( D3D11_MESSAGE_ID_FINISHDISPLAYLIST_INVALID_CALL_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_HAZARD\t= ( D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_HAZARD\t= ( D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_HSSETSHADERRESOURCES_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_HSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCALL\t= ( D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEHULLSHADER_OUTOFMEMORY\t= ( D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCALL + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERBYTECODE\t= ( D3D11_MESSAGE_ID_CREATEHULLSHADER_OUTOFMEMORY + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERTYPE\t= ( D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERBYTECODE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCLASSLINKAGE\t= ( D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERTYPE + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCLASSLINKAGE + 1 ) ,\n\tD3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFER\t= ( D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_HSSETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_HSGETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_HSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_HSGETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_HSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_HSGETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_HSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_HAZARD\t= ( D3D11_MESSAGE_ID_DEVICE_HSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_HAZARD\t= ( D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_DSSETSHADERRESOURCES_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_DSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCALL\t= ( D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDOMAINSHADER_OUTOFMEMORY\t= ( D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCALL + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERBYTECODE\t= ( D3D11_MESSAGE_ID_CREATEDOMAINSHADER_OUTOFMEMORY + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERTYPE\t= ( D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERBYTECODE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCLASSLINKAGE\t= ( D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERTYPE + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCLASSLINKAGE + 1 ) ,\n\tD3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFER\t= ( D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DSSETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DSGETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_DSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DSGETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_DSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DSGETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_DSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_HS_XOR_DS_MISMATCH\t= ( D3D11_MESSAGE_ID_DEVICE_DSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEFERRED_CONTEXT_REMOVAL_PROCESS_AT_FAULT\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_HS_XOR_DS_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_INVALID_ARG_BUFFER\t= ( D3D11_MESSAGE_ID_DEFERRED_CONTEXT_REMOVAL_PROCESS_AT_FAULT + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_UNALIGNED\t= ( D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_INVALID_ARG_BUFFER + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_OVERFLOW\t= ( D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_UNALIGNED + 1 ) ,\n\tD3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDMAPTYPE\t= ( D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_OVERFLOW + 1 ) ,\n\tD3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDSUBRESOURCE\t= ( D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDMAPTYPE + 1 ) ,\n\tD3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDFLAGS\t= ( D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDSUBRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_RESOURCE_MAP_ALREADYMAPPED\t= ( D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_RESOURCE_MAP_DEVICEREMOVED_RETURN\t= ( D3D11_MESSAGE_ID_RESOURCE_MAP_ALREADYMAPPED + 1 ) ,\n\tD3D11_MESSAGE_ID_RESOURCE_MAP_OUTOFMEMORY_RETURN\t= ( D3D11_MESSAGE_ID_RESOURCE_MAP_DEVICEREMOVED_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_RESOURCE_MAP_WITHOUT_INITIAL_DISCARD\t= ( D3D11_MESSAGE_ID_RESOURCE_MAP_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_RESOURCE_UNMAP_INVALIDSUBRESOURCE\t= ( D3D11_MESSAGE_ID_RESOURCE_MAP_WITHOUT_INITIAL_DISCARD + 1 ) ,\n\tD3D11_MESSAGE_ID_RESOURCE_UNMAP_NOTMAPPED\t= ( D3D11_MESSAGE_ID_RESOURCE_UNMAP_INVALIDSUBRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_RASTERIZING_CONTROL_POINTS\t= ( D3D11_MESSAGE_ID_RESOURCE_UNMAP_NOTMAPPED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_RASTERIZING_CONTROL_POINTS + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_SIGNATURE_MISMATCH\t= ( D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_SIGNATURE_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_CONTROL_POINT_COUNT_MISMATCH\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_TESSELLATOR_DOMAIN_MISMATCH\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_CONTROL_POINT_COUNT_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_CONTEXT\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_TESSELLATOR_DOMAIN_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_CONTEXT\t= ( D3D11_MESSAGE_ID_CREATE_CONTEXT + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_CONTEXT\t= ( D3D11_MESSAGE_ID_LIVE_CONTEXT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_BUFFER\t= ( D3D11_MESSAGE_ID_DESTROY_CONTEXT + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_BUFFER\t= ( D3D11_MESSAGE_ID_CREATE_BUFFER + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_BUFFER\t= ( D3D11_MESSAGE_ID_LIVE_BUFFER + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_TEXTURE1D\t= ( D3D11_MESSAGE_ID_DESTROY_BUFFER + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_TEXTURE1D\t= ( D3D11_MESSAGE_ID_CREATE_TEXTURE1D + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_TEXTURE1D\t= ( D3D11_MESSAGE_ID_LIVE_TEXTURE1D + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_TEXTURE2D\t= ( D3D11_MESSAGE_ID_DESTROY_TEXTURE1D + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_TEXTURE2D\t= ( D3D11_MESSAGE_ID_CREATE_TEXTURE2D + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_TEXTURE2D\t= ( D3D11_MESSAGE_ID_LIVE_TEXTURE2D + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_TEXTURE3D\t= ( D3D11_MESSAGE_ID_DESTROY_TEXTURE2D + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_TEXTURE3D\t= ( D3D11_MESSAGE_ID_CREATE_TEXTURE3D + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_TEXTURE3D\t= ( D3D11_MESSAGE_ID_LIVE_TEXTURE3D + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_SHADERRESOURCEVIEW\t= ( D3D11_MESSAGE_ID_DESTROY_TEXTURE3D + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW\t= ( D3D11_MESSAGE_ID_CREATE_SHADERRESOURCEVIEW + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_SHADERRESOURCEVIEW\t= ( D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_RENDERTARGETVIEW\t= ( D3D11_MESSAGE_ID_DESTROY_SHADERRESOURCEVIEW + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW\t= ( D3D11_MESSAGE_ID_CREATE_RENDERTARGETVIEW + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_RENDERTARGETVIEW\t= ( D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_DEPTHSTENCILVIEW\t= ( D3D11_MESSAGE_ID_DESTROY_RENDERTARGETVIEW + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW\t= ( D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILVIEW + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILVIEW\t= ( D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_VERTEXSHADER\t= ( D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILVIEW + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_VERTEXSHADER\t= ( D3D11_MESSAGE_ID_CREATE_VERTEXSHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_VERTEXSHADER\t= ( D3D11_MESSAGE_ID_LIVE_VERTEXSHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_HULLSHADER\t= ( D3D11_MESSAGE_ID_DESTROY_VERTEXSHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_HULLSHADER\t= ( D3D11_MESSAGE_ID_CREATE_HULLSHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_HULLSHADER\t= ( D3D11_MESSAGE_ID_LIVE_HULLSHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_DOMAINSHADER\t= ( D3D11_MESSAGE_ID_DESTROY_HULLSHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_DOMAINSHADER\t= ( D3D11_MESSAGE_ID_CREATE_DOMAINSHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_DOMAINSHADER\t= ( D3D11_MESSAGE_ID_LIVE_DOMAINSHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_GEOMETRYSHADER\t= ( D3D11_MESSAGE_ID_DESTROY_DOMAINSHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER\t= ( D3D11_MESSAGE_ID_CREATE_GEOMETRYSHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_GEOMETRYSHADER\t= ( D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_PIXELSHADER\t= ( D3D11_MESSAGE_ID_DESTROY_GEOMETRYSHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_PIXELSHADER\t= ( D3D11_MESSAGE_ID_CREATE_PIXELSHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_PIXELSHADER\t= ( D3D11_MESSAGE_ID_LIVE_PIXELSHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_INPUTLAYOUT\t= ( D3D11_MESSAGE_ID_DESTROY_PIXELSHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_INPUTLAYOUT\t= ( D3D11_MESSAGE_ID_CREATE_INPUTLAYOUT + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_INPUTLAYOUT\t= ( D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_SAMPLER\t= ( D3D11_MESSAGE_ID_DESTROY_INPUTLAYOUT + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_SAMPLER\t= ( D3D11_MESSAGE_ID_CREATE_SAMPLER + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_SAMPLER\t= ( D3D11_MESSAGE_ID_LIVE_SAMPLER + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_BLENDSTATE\t= ( D3D11_MESSAGE_ID_DESTROY_SAMPLER + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_BLENDSTATE\t= ( D3D11_MESSAGE_ID_CREATE_BLENDSTATE + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_BLENDSTATE\t= ( D3D11_MESSAGE_ID_LIVE_BLENDSTATE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_DEPTHSTENCILSTATE\t= ( D3D11_MESSAGE_ID_DESTROY_BLENDSTATE + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE\t= ( D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILSTATE + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILSTATE\t= ( D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_RASTERIZERSTATE\t= ( D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILSTATE + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE\t= ( D3D11_MESSAGE_ID_CREATE_RASTERIZERSTATE + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_RASTERIZERSTATE\t= ( D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_QUERY\t= ( D3D11_MESSAGE_ID_DESTROY_RASTERIZERSTATE + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_QUERY\t= ( D3D11_MESSAGE_ID_CREATE_QUERY + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_QUERY\t= ( D3D11_MESSAGE_ID_LIVE_QUERY + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_PREDICATE\t= ( D3D11_MESSAGE_ID_DESTROY_QUERY + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_PREDICATE\t= ( D3D11_MESSAGE_ID_CREATE_PREDICATE + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_PREDICATE\t= ( D3D11_MESSAGE_ID_LIVE_PREDICATE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_COUNTER\t= ( D3D11_MESSAGE_ID_DESTROY_PREDICATE + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_COUNTER\t= ( D3D11_MESSAGE_ID_CREATE_COUNTER + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_COUNTER\t= ( D3D11_MESSAGE_ID_LIVE_COUNTER + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_COMMANDLIST\t= ( D3D11_MESSAGE_ID_DESTROY_COUNTER + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_COMMANDLIST\t= ( D3D11_MESSAGE_ID_CREATE_COMMANDLIST + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_COMMANDLIST\t= ( D3D11_MESSAGE_ID_LIVE_COMMANDLIST + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_CLASSINSTANCE\t= ( D3D11_MESSAGE_ID_DESTROY_COMMANDLIST + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_CLASSINSTANCE\t= ( D3D11_MESSAGE_ID_CREATE_CLASSINSTANCE + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_CLASSINSTANCE\t= ( D3D11_MESSAGE_ID_LIVE_CLASSINSTANCE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_CLASSLINKAGE\t= ( D3D11_MESSAGE_ID_DESTROY_CLASSINSTANCE + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_CLASSLINKAGE\t= ( D3D11_MESSAGE_ID_CREATE_CLASSLINKAGE + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_CLASSLINKAGE\t= ( D3D11_MESSAGE_ID_LIVE_CLASSLINKAGE + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_DEVICE\t= ( D3D11_MESSAGE_ID_DESTROY_CLASSLINKAGE + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY\t= ( D3D11_MESSAGE_ID_LIVE_DEVICE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_COMPUTESHADER\t= ( D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_COMPUTESHADER\t= ( D3D11_MESSAGE_ID_CREATE_COMPUTESHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_COMPUTESHADER\t= ( D3D11_MESSAGE_ID_LIVE_COMPUTESHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATE_UNORDEREDACCESSVIEW\t= ( D3D11_MESSAGE_ID_DESTROY_COMPUTESHADER + 1 ) ,\n\tD3D11_MESSAGE_ID_LIVE_UNORDEREDACCESSVIEW\t= ( D3D11_MESSAGE_ID_CREATE_UNORDEREDACCESSVIEW + 1 ) ,\n\tD3D11_MESSAGE_ID_DESTROY_UNORDEREDACCESSVIEW\t= ( D3D11_MESSAGE_ID_LIVE_UNORDEREDACCESSVIEW + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACES_FEATURELEVEL\t= ( D3D11_MESSAGE_ID_DESTROY_UNORDEREDACCESSVIEW + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACE_COUNT_MISMATCH\t= ( D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACES_FEATURELEVEL + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE\t= ( D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACE_COUNT_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_INDEX\t= ( D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_TYPE\t= ( D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_INDEX + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_DATA\t= ( D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_TYPE + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SETSHADER_UNBOUND_INSTANCE_DATA\t= ( D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_DATA + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SETSHADER_INSTANCE_DATA_BINDINGS\t= ( D3D11_MESSAGE_ID_DEVICE_SETSHADER_UNBOUND_INSTANCE_DATA + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CREATESHADER_CLASSLINKAGE_FULL\t= ( D3D11_MESSAGE_ID_DEVICE_SETSHADER_INSTANCE_DATA_BINDINGS + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_UNRECOGNIZED_FEATURE\t= ( D3D11_MESSAGE_ID_DEVICE_CREATESHADER_CLASSLINKAGE_FULL + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE\t= ( D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_UNRECOGNIZED_FEATURE + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_INVALIDARG_RETURN\t= ( D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_HAZARD\t= ( D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_INVALIDARG_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_HAZARD\t= ( D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_CSSETSHADERRESOURCES_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_CSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCALL\t= ( D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATECOMPUTESHADER_OUTOFMEMORY\t= ( D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCALL + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERBYTECODE\t= ( D3D11_MESSAGE_ID_CREATECOMPUTESHADER_OUTOFMEMORY + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERTYPE\t= ( D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERBYTECODE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCLASSLINKAGE\t= ( D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERTYPE + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCLASSLINKAGE + 1 ) ,\n\tD3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFER\t= ( D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CSSETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CSGETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_CSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CSGETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_CSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CSGETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_CSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_CSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSTRUCTURESTRIDE\t= ( D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFLAGS\t= ( D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSTRUCTURESTRIDE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE\t= ( D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDESC\t= ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT\t= ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDESC + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS\t= ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT\t= ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_HAZARD\t= ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_OVERLAPPING_OLD_SLOTS\t= ( D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NO_OP\t= ( D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_OVERLAPPING_OLD_SLOTS + 1 ) ,\n\tD3D11_MESSAGE_ID_CSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NO_OP + 1 ) ,\n\tD3D11_MESSAGE_ID_PSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_CSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDARG_RETURN\t= ( D3D11_MESSAGE_ID_PSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_OUTOFMEMORY_RETURN\t= ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDARG_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_TOOMANYOBJECTS\t= ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_HAZARD\t= ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_TOOMANYOBJECTS + 1 ) ,\n\tD3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_DENORMFLUSH\t= ( D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_HAZARD + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSS_VIEWS_EMPTY\t= ( D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_DENORMFLUSH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CSGETUNORDEREDACCESSS_VIEWS_EMPTY\t= ( D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSS_VIEWS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS\t= ( D3D11_MESSAGE_ID_DEVICE_CSGETUNORDEREDACCESSS_VIEWS_EMPTY + 1 ) ,\n\tD3D11_MESSAGE_ID_CREATESHADERRESESOURCEVIEW_TOOMANYOBJECTS\t= ( D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_INVALID_ARG_BUFFER\t= ( D3D11_MESSAGE_ID_CREATESHADERRESESOURCEVIEW_TOOMANYOBJECTS + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_UNALIGNED\t= ( D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_INVALID_ARG_BUFFER + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_OVERFLOW\t= ( D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_UNALIGNED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDCONTEXT\t= ( D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_OVERFLOW + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDRESOURCE\t= ( D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDCONTEXT + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDMINLOD\t= ( D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDCONTEXT\t= ( D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDMINLOD + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDRESOURCE\t= ( D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDCONTEXT + 1 ) ,\n\tD3D11_MESSAGE_ID_OMSETDEPTHSTENCIL_UNBINDDELETINGOBJECT\t= ( D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDRESOURCE + 1 ) ,\n\tD3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DEPTH_READONLY\t= ( D3D11_MESSAGE_ID_OMSETDEPTHSTENCIL_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_STENCIL_READONLY\t= ( D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DEPTH_READONLY + 1 ) ,\n\tD3D11_MESSAGE_ID_CHECKFEATURESUPPORT_FORMAT_DEPRECATED\t= ( D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_STENCIL_READONLY + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RETURN_TYPE_MISMATCH\t= ( D3D11_MESSAGE_ID_CHECKFEATURESUPPORT_FORMAT_DEPRECATED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RETURN_TYPE_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DRAW_UNORDEREDACCESSVIEW_RENDERTARGETVIEW_OVERLAP\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_DIMENSION_MISMATCH\t= ( D3D11_MESSAGE_ID_DEVICE_DRAW_UNORDEREDACCESSVIEW_RENDERTARGETVIEW_OVERLAP + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_APPEND_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_DIMENSION_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMICS_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_APPEND_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_STRUCTURE_STRIDE_MISMATCH\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMICS_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_BUFFER_TYPE_MISMATCH\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_STRUCTURE_STRIDE_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RAW_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_BUFFER_TYPE_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_LD_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RAW_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_STORE_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_LD_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_ADD_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_STORE_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_BITWISE_OPS_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_ADD_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_CMPSTORE_CMPEXCHANGE_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_BITWISE_OPS_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_EXCHANGE_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_CMPSTORE_CMPEXCHANGE_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_SIGNED_MINMAX_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_EXCHANGE_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_UNSIGNED_MINMAX_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_SIGNED_MINMAX_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DISPATCH_BOUND_RESOURCE_MAPPED\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_UNSIGNED_MINMAX_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_OVERFLOW\t= ( D3D11_MESSAGE_ID_DEVICE_DISPATCH_BOUND_RESOURCE_MAPPED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_ZERO\t= ( D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_OVERFLOW + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_STRUCTURE_STRIDE_MISMATCH\t= ( D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_ZERO + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_BUFFER_TYPE_MISMATCH\t= ( D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_STRUCTURE_STRIDE_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_RAW_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_BUFFER_TYPE_MISMATCH + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DISPATCH_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_RAW_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_DEVICE_DISPATCH_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDOFFSET\t= ( D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_LARGEOFFSET\t= ( D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDOFFSET + 1 ) ,\n\tD3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDDESTINATIONSTATE\t= ( D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_LARGEOFFSET + 1 ) ,\n\tD3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDSOURCESTATE\t= ( D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDDESTINATIONSTATE + 1 ) ,\n\tD3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_NOT_SUPPORTED\t= ( D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDSOURCESTATE + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDVIEW\t= ( D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_NOT_SUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDOFFSET\t= ( D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDVIEW + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_TOOMANYVIEWS\t= ( D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDOFFSET + 1 ) ,\n\tD3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_INVALIDFORMAT\t= ( D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_TOOMANYVIEWS + 1 ) ,\n\tD3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_COUNTER_UNSUPPORTED\t= ( D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_INVALIDFORMAT + 1 ) ,\n\tD3D11_MESSAGE_ID_REF_WARNING\t= ( D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_COUNTER_UNSUPPORTED + 1 ) ,\n\tD3D11_MESSAGE_ID_D3D11_MESSAGES_END\t= ( D3D11_MESSAGE_ID_REF_WARNING + 1 ) \n    } \tD3D11_MESSAGE_ID;\n\ntypedef struct D3D11_MESSAGE\n    {\n    D3D11_MESSAGE_CATEGORY Category;\n    D3D11_MESSAGE_SEVERITY Severity;\n    D3D11_MESSAGE_ID ID;\n    const char *pDescription;\n    SIZE_T DescriptionByteLength;\n    } \tD3D11_MESSAGE;\n\ntypedef struct D3D11_INFO_QUEUE_FILTER_DESC\n    {\n    UINT NumCategories;\n    D3D11_MESSAGE_CATEGORY *pCategoryList;\n    UINT NumSeverities;\n    D3D11_MESSAGE_SEVERITY *pSeverityList;\n    UINT NumIDs;\n    D3D11_MESSAGE_ID *pIDList;\n    } \tD3D11_INFO_QUEUE_FILTER_DESC;\n\ntypedef struct D3D11_INFO_QUEUE_FILTER\n    {\n    D3D11_INFO_QUEUE_FILTER_DESC AllowList;\n    D3D11_INFO_QUEUE_FILTER_DESC DenyList;\n    } \tD3D11_INFO_QUEUE_FILTER;\n\n#define D3D11_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT 1024\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11sdklayers_0000_0002_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11sdklayers_0000_0002_v0_0_s_ifspec;\n\n#ifndef __ID3D11InfoQueue_INTERFACE_DEFINED__\n#define __ID3D11InfoQueue_INTERFACE_DEFINED__\n\n/* interface ID3D11InfoQueue */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D11InfoQueue;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"6543dbb6-1b48-42f5-ab82-e97ec74326f6\")\n    ID3D11InfoQueue : public IUnknown\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE SetMessageCountLimit( \n            /* [annotation] */ \n            __in  UINT64 MessageCountLimit) = 0;\n        \n        virtual void STDMETHODCALLTYPE ClearStoredMessages( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetMessage( \n            /* [annotation] */ \n            __in  UINT64 MessageIndex,\n            /* [annotation] */ \n            __out_bcount_opt(*pMessageByteLength)  D3D11_MESSAGE *pMessage,\n            /* [annotation] */ \n            __inout  SIZE_T *pMessageByteLength) = 0;\n        \n        virtual UINT64 STDMETHODCALLTYPE GetNumMessagesAllowedByStorageFilter( void) = 0;\n        \n        virtual UINT64 STDMETHODCALLTYPE GetNumMessagesDeniedByStorageFilter( void) = 0;\n        \n        virtual UINT64 STDMETHODCALLTYPE GetNumStoredMessages( void) = 0;\n        \n        virtual UINT64 STDMETHODCALLTYPE GetNumStoredMessagesAllowedByRetrievalFilter( void) = 0;\n        \n        virtual UINT64 STDMETHODCALLTYPE GetNumMessagesDiscardedByMessageCountLimit( void) = 0;\n        \n        virtual UINT64 STDMETHODCALLTYPE GetMessageCountLimit( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE AddStorageFilterEntries( \n            /* [annotation] */ \n            __in  D3D11_INFO_QUEUE_FILTER *pFilter) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetStorageFilter( \n            /* [annotation] */ \n            __out_bcount_opt(*pFilterByteLength)  D3D11_INFO_QUEUE_FILTER *pFilter,\n            /* [annotation] */ \n            __inout  SIZE_T *pFilterByteLength) = 0;\n        \n        virtual void STDMETHODCALLTYPE ClearStorageFilter( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE PushEmptyStorageFilter( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE PushCopyOfStorageFilter( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE PushStorageFilter( \n            /* [annotation] */ \n            __in  D3D11_INFO_QUEUE_FILTER *pFilter) = 0;\n        \n        virtual void STDMETHODCALLTYPE PopStorageFilter( void) = 0;\n        \n        virtual UINT STDMETHODCALLTYPE GetStorageFilterStackSize( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE AddRetrievalFilterEntries( \n            /* [annotation] */ \n            __in  D3D11_INFO_QUEUE_FILTER *pFilter) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetRetrievalFilter( \n            /* [annotation] */ \n            __out_bcount_opt(*pFilterByteLength)  D3D11_INFO_QUEUE_FILTER *pFilter,\n            /* [annotation] */ \n            __inout  SIZE_T *pFilterByteLength) = 0;\n        \n        virtual void STDMETHODCALLTYPE ClearRetrievalFilter( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE PushEmptyRetrievalFilter( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE PushCopyOfRetrievalFilter( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE PushRetrievalFilter( \n            /* [annotation] */ \n            __in  D3D11_INFO_QUEUE_FILTER *pFilter) = 0;\n        \n        virtual void STDMETHODCALLTYPE PopRetrievalFilter( void) = 0;\n        \n        virtual UINT STDMETHODCALLTYPE GetRetrievalFilterStackSize( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE AddMessage( \n            /* [annotation] */ \n            __in  D3D11_MESSAGE_CATEGORY Category,\n            /* [annotation] */ \n            __in  D3D11_MESSAGE_SEVERITY Severity,\n            /* [annotation] */ \n            __in  D3D11_MESSAGE_ID ID,\n            /* [annotation] */ \n            __in  LPCSTR pDescription) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE AddApplicationMessage( \n            /* [annotation] */ \n            __in  D3D11_MESSAGE_SEVERITY Severity,\n            /* [annotation] */ \n            __in  LPCSTR pDescription) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetBreakOnCategory( \n            /* [annotation] */ \n            __in  D3D11_MESSAGE_CATEGORY Category,\n            /* [annotation] */ \n            __in  BOOL bEnable) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetBreakOnSeverity( \n            /* [annotation] */ \n            __in  D3D11_MESSAGE_SEVERITY Severity,\n            /* [annotation] */ \n            __in  BOOL bEnable) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetBreakOnID( \n            /* [annotation] */ \n            __in  D3D11_MESSAGE_ID ID,\n            /* [annotation] */ \n            __in  BOOL bEnable) = 0;\n        \n        virtual BOOL STDMETHODCALLTYPE GetBreakOnCategory( \n            /* [annotation] */ \n            __in  D3D11_MESSAGE_CATEGORY Category) = 0;\n        \n        virtual BOOL STDMETHODCALLTYPE GetBreakOnSeverity( \n            /* [annotation] */ \n            __in  D3D11_MESSAGE_SEVERITY Severity) = 0;\n        \n        virtual BOOL STDMETHODCALLTYPE GetBreakOnID( \n            /* [annotation] */ \n            __in  D3D11_MESSAGE_ID ID) = 0;\n        \n        virtual void STDMETHODCALLTYPE SetMuteDebugOutput( \n            /* [annotation] */ \n            __in  BOOL bMute) = 0;\n        \n        virtual BOOL STDMETHODCALLTYPE GetMuteDebugOutput( void) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D11InfoQueueVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D11InfoQueue * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D11InfoQueue * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D11InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetMessageCountLimit )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __in  UINT64 MessageCountLimit);\n        \n        void ( STDMETHODCALLTYPE *ClearStoredMessages )( \n            ID3D11InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetMessage )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __in  UINT64 MessageIndex,\n            /* [annotation] */ \n            __out_bcount_opt(*pMessageByteLength)  D3D11_MESSAGE *pMessage,\n            /* [annotation] */ \n            __inout  SIZE_T *pMessageByteLength);\n        \n        UINT64 ( STDMETHODCALLTYPE *GetNumMessagesAllowedByStorageFilter )( \n            ID3D11InfoQueue * This);\n        \n        UINT64 ( STDMETHODCALLTYPE *GetNumMessagesDeniedByStorageFilter )( \n            ID3D11InfoQueue * This);\n        \n        UINT64 ( STDMETHODCALLTYPE *GetNumStoredMessages )( \n            ID3D11InfoQueue * This);\n        \n        UINT64 ( STDMETHODCALLTYPE *GetNumStoredMessagesAllowedByRetrievalFilter )( \n            ID3D11InfoQueue * This);\n        \n        UINT64 ( STDMETHODCALLTYPE *GetNumMessagesDiscardedByMessageCountLimit )( \n            ID3D11InfoQueue * This);\n        \n        UINT64 ( STDMETHODCALLTYPE *GetMessageCountLimit )( \n            ID3D11InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *AddStorageFilterEntries )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D11_INFO_QUEUE_FILTER *pFilter);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetStorageFilter )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __out_bcount_opt(*pFilterByteLength)  D3D11_INFO_QUEUE_FILTER *pFilter,\n            /* [annotation] */ \n            __inout  SIZE_T *pFilterByteLength);\n        \n        void ( STDMETHODCALLTYPE *ClearStorageFilter )( \n            ID3D11InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *PushEmptyStorageFilter )( \n            ID3D11InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *PushCopyOfStorageFilter )( \n            ID3D11InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *PushStorageFilter )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D11_INFO_QUEUE_FILTER *pFilter);\n        \n        void ( STDMETHODCALLTYPE *PopStorageFilter )( \n            ID3D11InfoQueue * This);\n        \n        UINT ( STDMETHODCALLTYPE *GetStorageFilterStackSize )( \n            ID3D11InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *AddRetrievalFilterEntries )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D11_INFO_QUEUE_FILTER *pFilter);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetRetrievalFilter )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __out_bcount_opt(*pFilterByteLength)  D3D11_INFO_QUEUE_FILTER *pFilter,\n            /* [annotation] */ \n            __inout  SIZE_T *pFilterByteLength);\n        \n        void ( STDMETHODCALLTYPE *ClearRetrievalFilter )( \n            ID3D11InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *PushEmptyRetrievalFilter )( \n            ID3D11InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *PushCopyOfRetrievalFilter )( \n            ID3D11InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *PushRetrievalFilter )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D11_INFO_QUEUE_FILTER *pFilter);\n        \n        void ( STDMETHODCALLTYPE *PopRetrievalFilter )( \n            ID3D11InfoQueue * This);\n        \n        UINT ( STDMETHODCALLTYPE *GetRetrievalFilterStackSize )( \n            ID3D11InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *AddMessage )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D11_MESSAGE_CATEGORY Category,\n            /* [annotation] */ \n            __in  D3D11_MESSAGE_SEVERITY Severity,\n            /* [annotation] */ \n            __in  D3D11_MESSAGE_ID ID,\n            /* [annotation] */ \n            __in  LPCSTR pDescription);\n        \n        HRESULT ( STDMETHODCALLTYPE *AddApplicationMessage )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D11_MESSAGE_SEVERITY Severity,\n            /* [annotation] */ \n            __in  LPCSTR pDescription);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetBreakOnCategory )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D11_MESSAGE_CATEGORY Category,\n            /* [annotation] */ \n            __in  BOOL bEnable);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetBreakOnSeverity )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D11_MESSAGE_SEVERITY Severity,\n            /* [annotation] */ \n            __in  BOOL bEnable);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetBreakOnID )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D11_MESSAGE_ID ID,\n            /* [annotation] */ \n            __in  BOOL bEnable);\n        \n        BOOL ( STDMETHODCALLTYPE *GetBreakOnCategory )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D11_MESSAGE_CATEGORY Category);\n        \n        BOOL ( STDMETHODCALLTYPE *GetBreakOnSeverity )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D11_MESSAGE_SEVERITY Severity);\n        \n        BOOL ( STDMETHODCALLTYPE *GetBreakOnID )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D11_MESSAGE_ID ID);\n        \n        void ( STDMETHODCALLTYPE *SetMuteDebugOutput )( \n            ID3D11InfoQueue * This,\n            /* [annotation] */ \n            __in  BOOL bMute);\n        \n        BOOL ( STDMETHODCALLTYPE *GetMuteDebugOutput )( \n            ID3D11InfoQueue * This);\n        \n        END_INTERFACE\n    } ID3D11InfoQueueVtbl;\n\n    interface ID3D11InfoQueue\n    {\n        CONST_VTBL struct ID3D11InfoQueueVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D11InfoQueue_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D11InfoQueue_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D11InfoQueue_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D11InfoQueue_SetMessageCountLimit(This,MessageCountLimit)\t\\\n    ( (This)->lpVtbl -> SetMessageCountLimit(This,MessageCountLimit) ) \n\n#define ID3D11InfoQueue_ClearStoredMessages(This)\t\\\n    ( (This)->lpVtbl -> ClearStoredMessages(This) ) \n\n#define ID3D11InfoQueue_GetMessage(This,MessageIndex,pMessage,pMessageByteLength)\t\\\n    ( (This)->lpVtbl -> GetMessage(This,MessageIndex,pMessage,pMessageByteLength) ) \n\n#define ID3D11InfoQueue_GetNumMessagesAllowedByStorageFilter(This)\t\\\n    ( (This)->lpVtbl -> GetNumMessagesAllowedByStorageFilter(This) ) \n\n#define ID3D11InfoQueue_GetNumMessagesDeniedByStorageFilter(This)\t\\\n    ( (This)->lpVtbl -> GetNumMessagesDeniedByStorageFilter(This) ) \n\n#define ID3D11InfoQueue_GetNumStoredMessages(This)\t\\\n    ( (This)->lpVtbl -> GetNumStoredMessages(This) ) \n\n#define ID3D11InfoQueue_GetNumStoredMessagesAllowedByRetrievalFilter(This)\t\\\n    ( (This)->lpVtbl -> GetNumStoredMessagesAllowedByRetrievalFilter(This) ) \n\n#define ID3D11InfoQueue_GetNumMessagesDiscardedByMessageCountLimit(This)\t\\\n    ( (This)->lpVtbl -> GetNumMessagesDiscardedByMessageCountLimit(This) ) \n\n#define ID3D11InfoQueue_GetMessageCountLimit(This)\t\\\n    ( (This)->lpVtbl -> GetMessageCountLimit(This) ) \n\n#define ID3D11InfoQueue_AddStorageFilterEntries(This,pFilter)\t\\\n    ( (This)->lpVtbl -> AddStorageFilterEntries(This,pFilter) ) \n\n#define ID3D11InfoQueue_GetStorageFilter(This,pFilter,pFilterByteLength)\t\\\n    ( (This)->lpVtbl -> GetStorageFilter(This,pFilter,pFilterByteLength) ) \n\n#define ID3D11InfoQueue_ClearStorageFilter(This)\t\\\n    ( (This)->lpVtbl -> ClearStorageFilter(This) ) \n\n#define ID3D11InfoQueue_PushEmptyStorageFilter(This)\t\\\n    ( (This)->lpVtbl -> PushEmptyStorageFilter(This) ) \n\n#define ID3D11InfoQueue_PushCopyOfStorageFilter(This)\t\\\n    ( (This)->lpVtbl -> PushCopyOfStorageFilter(This) ) \n\n#define ID3D11InfoQueue_PushStorageFilter(This,pFilter)\t\\\n    ( (This)->lpVtbl -> PushStorageFilter(This,pFilter) ) \n\n#define ID3D11InfoQueue_PopStorageFilter(This)\t\\\n    ( (This)->lpVtbl -> PopStorageFilter(This) ) \n\n#define ID3D11InfoQueue_GetStorageFilterStackSize(This)\t\\\n    ( (This)->lpVtbl -> GetStorageFilterStackSize(This) ) \n\n#define ID3D11InfoQueue_AddRetrievalFilterEntries(This,pFilter)\t\\\n    ( (This)->lpVtbl -> AddRetrievalFilterEntries(This,pFilter) ) \n\n#define ID3D11InfoQueue_GetRetrievalFilter(This,pFilter,pFilterByteLength)\t\\\n    ( (This)->lpVtbl -> GetRetrievalFilter(This,pFilter,pFilterByteLength) ) \n\n#define ID3D11InfoQueue_ClearRetrievalFilter(This)\t\\\n    ( (This)->lpVtbl -> ClearRetrievalFilter(This) ) \n\n#define ID3D11InfoQueue_PushEmptyRetrievalFilter(This)\t\\\n    ( (This)->lpVtbl -> PushEmptyRetrievalFilter(This) ) \n\n#define ID3D11InfoQueue_PushCopyOfRetrievalFilter(This)\t\\\n    ( (This)->lpVtbl -> PushCopyOfRetrievalFilter(This) ) \n\n#define ID3D11InfoQueue_PushRetrievalFilter(This,pFilter)\t\\\n    ( (This)->lpVtbl -> PushRetrievalFilter(This,pFilter) ) \n\n#define ID3D11InfoQueue_PopRetrievalFilter(This)\t\\\n    ( (This)->lpVtbl -> PopRetrievalFilter(This) ) \n\n#define ID3D11InfoQueue_GetRetrievalFilterStackSize(This)\t\\\n    ( (This)->lpVtbl -> GetRetrievalFilterStackSize(This) ) \n\n#define ID3D11InfoQueue_AddMessage(This,Category,Severity,ID,pDescription)\t\\\n    ( (This)->lpVtbl -> AddMessage(This,Category,Severity,ID,pDescription) ) \n\n#define ID3D11InfoQueue_AddApplicationMessage(This,Severity,pDescription)\t\\\n    ( (This)->lpVtbl -> AddApplicationMessage(This,Severity,pDescription) ) \n\n#define ID3D11InfoQueue_SetBreakOnCategory(This,Category,bEnable)\t\\\n    ( (This)->lpVtbl -> SetBreakOnCategory(This,Category,bEnable) ) \n\n#define ID3D11InfoQueue_SetBreakOnSeverity(This,Severity,bEnable)\t\\\n    ( (This)->lpVtbl -> SetBreakOnSeverity(This,Severity,bEnable) ) \n\n#define ID3D11InfoQueue_SetBreakOnID(This,ID,bEnable)\t\\\n    ( (This)->lpVtbl -> SetBreakOnID(This,ID,bEnable) ) \n\n#define ID3D11InfoQueue_GetBreakOnCategory(This,Category)\t\\\n    ( (This)->lpVtbl -> GetBreakOnCategory(This,Category) ) \n\n#define ID3D11InfoQueue_GetBreakOnSeverity(This,Severity)\t\\\n    ( (This)->lpVtbl -> GetBreakOnSeverity(This,Severity) ) \n\n#define ID3D11InfoQueue_GetBreakOnID(This,ID)\t\\\n    ( (This)->lpVtbl -> GetBreakOnID(This,ID) ) \n\n#define ID3D11InfoQueue_SetMuteDebugOutput(This,bMute)\t\\\n    ( (This)->lpVtbl -> SetMuteDebugOutput(This,bMute) ) \n\n#define ID3D11InfoQueue_GetMuteDebugOutput(This)\t\\\n    ( (This)->lpVtbl -> GetMuteDebugOutput(This) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D11InfoQueue_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d11sdklayers_0000_0003 */\n/* [local] */ \n\n#define D3D11_REGKEY_PATH __TEXT(\"Software\\\\Microsoft\\\\Direct3D\")\n#define D3D11_MUTE_DEBUG_OUTPUT __TEXT(\"MuteDebugOutput\")\n#define D3D11_ENABLE_BREAK_ON_MESSAGE __TEXT(\"EnableBreakOnMessage\")\n#define D3D11_INFOQUEUE_STORAGE_FILTER_OVERRIDE __TEXT(\"InfoQueueStorageFilterOverride\")\n#define D3D11_MUTE_CATEGORY __TEXT(\"Mute_CATEGORY_%s\")\n#define D3D11_MUTE_SEVERITY __TEXT(\"Mute_SEVERITY_%s\")\n#define D3D11_MUTE_ID_STRING __TEXT(\"Mute_ID_%s\")\n#define D3D11_MUTE_ID_DECIMAL __TEXT(\"Mute_ID_%d\")\n#define D3D11_UNMUTE_SEVERITY_INFO __TEXT(\"Unmute_SEVERITY_INFO\")\n#define D3D11_BREAKON_CATEGORY __TEXT(\"BreakOn_CATEGORY_%s\")\n#define D3D11_BREAKON_SEVERITY __TEXT(\"BreakOn_SEVERITY_%s\")\n#define D3D11_BREAKON_ID_STRING __TEXT(\"BreakOn_ID_%s\")\n#define D3D11_BREAKON_ID_DECIMAL __TEXT(\"BreakOn_ID_%d\")\n#define D3D11_APPSIZE_STRING __TEXT(\"Size\")\n#define D3D11_APPNAME_STRING __TEXT(\"Name\")\nDEFINE_GUID(IID_ID3D11Debug,0x79cf2233,0x7536,0x4948,0x9d,0x36,0x1e,0x46,0x92,0xdc,0x57,0x60);\nDEFINE_GUID(IID_ID3D11SwitchToRef,0x1ef337e3,0x58e7,0x4f83,0xa6,0x92,0xdb,0x22,0x1f,0x5e,0xd4,0x7e);\nDEFINE_GUID(IID_ID3D11InfoQueue,0x6543dbb6,0x1b48,0x42f5,0xab,0x82,0xe9,0x7e,0xc7,0x43,0x26,0xf6);\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d11sdklayers_0000_0003_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d11sdklayers_0000_0003_v0_0_s_ifspec;\n\n/* Additional Prototypes for ALL interfaces */\n\n/* end of Additional Prototypes */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n\n"
  },
  {
    "path": "Include/D3D11Shader.h",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n//  Copyright (c) Microsoft Corporation.  All rights reserved.\n//\n//  File:       D3D11Shader.h\n//  Content:    D3D11 Shader Types and APIs\n//\n//////////////////////////////////////////////////////////////////////////////\n\n#ifndef __D3D11SHADER_H__\n#define __D3D11SHADER_H__\n\n#include \"d3dcommon.h\"\n\n\ntypedef enum D3D11_SHADER_VERSION_TYPE\n{\n    D3D11_SHVER_PIXEL_SHADER    = 0,\n    D3D11_SHVER_VERTEX_SHADER   = 1,\n    D3D11_SHVER_GEOMETRY_SHADER = 2,\n    \n    // D3D11 Shaders\n    D3D11_SHVER_HULL_SHADER     = 3,\n    D3D11_SHVER_DOMAIN_SHADER   = 4,\n    D3D11_SHVER_COMPUTE_SHADER  = 5,\n} D3D11_SHADER_VERSION_TYPE;\n\n#define D3D11_SHVER_GET_TYPE(_Version) \\\n    (((_Version) >> 16) & 0xffff)\n#define D3D11_SHVER_GET_MAJOR(_Version) \\\n    (((_Version) >> 4) & 0xf)\n#define D3D11_SHVER_GET_MINOR(_Version) \\\n    (((_Version) >> 0) & 0xf)\n\ntypedef D3D_RESOURCE_RETURN_TYPE D3D11_RESOURCE_RETURN_TYPE;\n\ntypedef D3D_CBUFFER_TYPE D3D11_CBUFFER_TYPE;\n\n\ntypedef struct _D3D11_SIGNATURE_PARAMETER_DESC\n{\n    LPCSTR                      SemanticName;   // Name of the semantic\n    UINT                        SemanticIndex;  // Index of the semantic\n    UINT                        Register;       // Number of member variables\n    D3D_NAME                    SystemValueType;// A predefined system value, or D3D_NAME_UNDEFINED if not applicable\n    D3D_REGISTER_COMPONENT_TYPE ComponentType;// Scalar type (e.g. uint, float, etc.)\n    BYTE                        Mask;           // Mask to indicate which components of the register\n                                                // are used (combination of D3D10_COMPONENT_MASK values)\n    BYTE                        ReadWriteMask;  // Mask to indicate whether a given component is \n                                                // never written (if this is an output signature) or\n                                                // always read (if this is an input signature).\n                                                // (combination of D3D10_COMPONENT_MASK values)\n    UINT Stream;                                // Stream index\n} D3D11_SIGNATURE_PARAMETER_DESC;\n\ntypedef struct _D3D11_SHADER_BUFFER_DESC\n{\n    LPCSTR                  Name;           // Name of the constant buffer\n    D3D_CBUFFER_TYPE        Type;           // Indicates type of buffer content\n    UINT                    Variables;      // Number of member variables\n    UINT                    Size;           // Size of CB (in bytes)\n    UINT                    uFlags;         // Buffer description flags\n} D3D11_SHADER_BUFFER_DESC;\n\ntypedef struct _D3D11_SHADER_VARIABLE_DESC\n{\n    LPCSTR                  Name;           // Name of the variable\n    UINT                    StartOffset;    // Offset in constant buffer's backing store\n    UINT                    Size;           // Size of variable (in bytes)\n    UINT                    uFlags;         // Variable flags\n    LPVOID                  DefaultValue;   // Raw pointer to default value\n    UINT                    StartTexture;   // First texture index (or -1 if no textures used)\n    UINT                    TextureSize;    // Number of texture slots possibly used.\n    UINT                    StartSampler;   // First sampler index (or -1 if no textures used)\n    UINT                    SamplerSize;    // Number of sampler slots possibly used.\n} D3D11_SHADER_VARIABLE_DESC;\n\ntypedef struct _D3D11_SHADER_TYPE_DESC\n{\n    D3D_SHADER_VARIABLE_CLASS   Class;          // Variable class (e.g. object, matrix, etc.)\n    D3D_SHADER_VARIABLE_TYPE    Type;           // Variable type (e.g. float, sampler, etc.)\n    UINT                        Rows;           // Number of rows (for matrices, 1 for other numeric, 0 if not applicable)\n    UINT                        Columns;        // Number of columns (for vectors & matrices, 1 for other numeric, 0 if not applicable)\n    UINT                        Elements;       // Number of elements (0 if not an array)\n    UINT                        Members;        // Number of members (0 if not a structure)\n    UINT                        Offset;         // Offset from the start of structure (0 if not a structure member)\n    LPCSTR                      Name;           // Name of type, can be NULL\n} D3D11_SHADER_TYPE_DESC;\n\ntypedef D3D_TESSELLATOR_DOMAIN D3D11_TESSELLATOR_DOMAIN;\n\ntypedef D3D_TESSELLATOR_PARTITIONING D3D11_TESSELLATOR_PARTITIONING;\n\ntypedef D3D_TESSELLATOR_OUTPUT_PRIMITIVE D3D11_TESSELLATOR_OUTPUT_PRIMITIVE;\n\ntypedef struct _D3D11_SHADER_DESC\n{\n    UINT                    Version;                     // Shader version\n    LPCSTR                  Creator;                     // Creator string\n    UINT                    Flags;                       // Shader compilation/parse flags\n    \n    UINT                    ConstantBuffers;             // Number of constant buffers\n    UINT                    BoundResources;              // Number of bound resources\n    UINT                    InputParameters;             // Number of parameters in the input signature\n    UINT                    OutputParameters;            // Number of parameters in the output signature\n\n    UINT                    InstructionCount;            // Number of emitted instructions\n    UINT                    TempRegisterCount;           // Number of temporary registers used \n    UINT                    TempArrayCount;              // Number of temporary arrays used\n    UINT                    DefCount;                    // Number of constant defines \n    UINT                    DclCount;                    // Number of declarations (input + output)\n    UINT                    TextureNormalInstructions;   // Number of non-categorized texture instructions\n    UINT                    TextureLoadInstructions;     // Number of texture load instructions\n    UINT                    TextureCompInstructions;     // Number of texture comparison instructions\n    UINT                    TextureBiasInstructions;     // Number of texture bias instructions\n    UINT                    TextureGradientInstructions; // Number of texture gradient instructions\n    UINT                    FloatInstructionCount;       // Number of floating point arithmetic instructions used\n    UINT                    IntInstructionCount;         // Number of signed integer arithmetic instructions used\n    UINT                    UintInstructionCount;        // Number of unsigned integer arithmetic instructions used\n    UINT                    StaticFlowControlCount;      // Number of static flow control instructions used\n    UINT                    DynamicFlowControlCount;     // Number of dynamic flow control instructions used\n    UINT                    MacroInstructionCount;       // Number of macro instructions used\n    UINT                    ArrayInstructionCount;       // Number of array instructions used\n    UINT                    CutInstructionCount;         // Number of cut instructions used\n    UINT                    EmitInstructionCount;        // Number of emit instructions used\n    D3D_PRIMITIVE_TOPOLOGY   GSOutputTopology;           // Geometry shader output topology\n    UINT                    GSMaxOutputVertexCount;      // Geometry shader maximum output vertex count\n    D3D_PRIMITIVE           InputPrimitive;              // GS/HS input primitive\n    UINT                    PatchConstantParameters;     // Number of parameters in the patch constant signature\n    UINT                    cGSInstanceCount;            // Number of Geometry shader instances\n    UINT                    cControlPoints;              // Number of control points in the HS->DS stage\n    D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive;  // Primitive output by the tessellator\n    D3D_TESSELLATOR_PARTITIONING HSPartitioning;         // Partitioning mode of the tessellator\n    D3D_TESSELLATOR_DOMAIN  TessellatorDomain;           // Domain of the tessellator (quad, tri, isoline)\n    // instruction counts\n    UINT cBarrierInstructions;                           // Number of barrier instructions in a compute shader\n    UINT cInterlockedInstructions;                       // Number of interlocked instructions\n    UINT cTextureStoreInstructions;                      // Number of texture writes\n} D3D11_SHADER_DESC;\n\ntypedef struct _D3D11_SHADER_INPUT_BIND_DESC\n{\n    LPCSTR                      Name;           // Name of the resource\n    D3D_SHADER_INPUT_TYPE       Type;           // Type of resource (e.g. texture, cbuffer, etc.)\n    UINT                        BindPoint;      // Starting bind point\n    UINT                        BindCount;      // Number of contiguous bind points (for arrays)\n    \n    UINT                        uFlags;         // Input binding flags\n    D3D_RESOURCE_RETURN_TYPE    ReturnType;     // Return type (if texture)\n    D3D_SRV_DIMENSION           Dimension;      // Dimension (if texture)\n    UINT                        NumSamples;     // Number of samples (0 if not MS texture)\n} D3D11_SHADER_INPUT_BIND_DESC;\n\n\n//////////////////////////////////////////////////////////////////////////////\n// Interfaces ////////////////////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\ntypedef interface ID3D11ShaderReflectionType ID3D11ShaderReflectionType;\ntypedef interface ID3D11ShaderReflectionType *LPD3D11SHADERREFLECTIONTYPE;\n\ntypedef interface ID3D11ShaderReflectionVariable ID3D11ShaderReflectionVariable;\ntypedef interface ID3D11ShaderReflectionVariable *LPD3D11SHADERREFLECTIONVARIABLE;\n\ntypedef interface ID3D11ShaderReflectionConstantBuffer ID3D11ShaderReflectionConstantBuffer;\ntypedef interface ID3D11ShaderReflectionConstantBuffer *LPD3D11SHADERREFLECTIONCONSTANTBUFFER;\n\ntypedef interface ID3D11ShaderReflection ID3D11ShaderReflection;\ntypedef interface ID3D11ShaderReflection *LPD3D11SHADERREFLECTION;\n\n// {6E6FFA6A-9BAE-4613-A51E-91652D508C21}\nDEFINE_GUID(IID_ID3D11ShaderReflectionType, \n0x6e6ffa6a, 0x9bae, 0x4613, 0xa5, 0x1e, 0x91, 0x65, 0x2d, 0x50, 0x8c, 0x21);\n\n#undef INTERFACE\n#define INTERFACE ID3D11ShaderReflectionType\n\nDECLARE_INTERFACE(ID3D11ShaderReflectionType)\n{\n    STDMETHOD(GetDesc)(THIS_ __out D3D11_SHADER_TYPE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D11ShaderReflectionType*, GetMemberTypeByIndex)(THIS_ __in UINT Index) PURE;\n    STDMETHOD_(ID3D11ShaderReflectionType*, GetMemberTypeByName)(THIS_ __in LPCSTR Name) PURE;\n    STDMETHOD_(LPCSTR, GetMemberTypeName)(THIS_ __in UINT Index) PURE;\n\n    STDMETHOD(IsEqual)(THIS_ __in ID3D11ShaderReflectionType* pType) PURE;\n    STDMETHOD_(ID3D11ShaderReflectionType*, GetSubType)(THIS) PURE;\n    STDMETHOD_(ID3D11ShaderReflectionType*, GetBaseClass)(THIS) PURE;\n    STDMETHOD_(UINT, GetNumInterfaces)(THIS) PURE;\n    STDMETHOD_(ID3D11ShaderReflectionType*, GetInterfaceByIndex)(THIS_ __in UINT uIndex) PURE;\n    STDMETHOD(IsOfType)(THIS_ __in ID3D11ShaderReflectionType* pType) PURE;\n    STDMETHOD(ImplementsInterface)(THIS_ __in ID3D11ShaderReflectionType* pBase) PURE;\n};\n\n// {51F23923-F3E5-4BD1-91CB-606177D8DB4C}\nDEFINE_GUID(IID_ID3D11ShaderReflectionVariable, \n0x51f23923, 0xf3e5, 0x4bd1, 0x91, 0xcb, 0x60, 0x61, 0x77, 0xd8, 0xdb, 0x4c);\n\n#undef INTERFACE\n#define INTERFACE ID3D11ShaderReflectionVariable\n\nDECLARE_INTERFACE(ID3D11ShaderReflectionVariable)\n{\n    STDMETHOD(GetDesc)(THIS_ __out D3D11_SHADER_VARIABLE_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D11ShaderReflectionType*, GetType)(THIS) PURE;\n    STDMETHOD_(ID3D11ShaderReflectionConstantBuffer*, GetBuffer)(THIS) PURE;\n\n    STDMETHOD_(UINT, GetInterfaceSlot)(THIS_ __in UINT uArrayIndex) PURE;\n};\n\n// {EB62D63D-93DD-4318-8AE8-C6F83AD371B8}\nDEFINE_GUID(IID_ID3D11ShaderReflectionConstantBuffer, \n0xeb62d63d, 0x93dd, 0x4318, 0x8a, 0xe8, 0xc6, 0xf8, 0x3a, 0xd3, 0x71, 0xb8);\n\n#undef INTERFACE\n#define INTERFACE ID3D11ShaderReflectionConstantBuffer\n\nDECLARE_INTERFACE(ID3D11ShaderReflectionConstantBuffer)\n{\n    STDMETHOD(GetDesc)(THIS_ D3D11_SHADER_BUFFER_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D11ShaderReflectionVariable*, GetVariableByIndex)(THIS_ __in UINT Index) PURE;\n    STDMETHOD_(ID3D11ShaderReflectionVariable*, GetVariableByName)(THIS_ __in LPCSTR Name) PURE;\n};\n\n// The ID3D11ShaderReflection IID may change from SDK version to SDK version\n// if the reflection API changes.  This prevents new code with the new API\n// from working with an old binary.  Recompiling with the new header\n// will pick up the new IID.\n\n// 0a233719-3960-4578-9d7c-203b8b1d9cc1\nDEFINE_GUID(IID_ID3D11ShaderReflection, \n0x0a233719, 0x3960, 0x4578, 0x9d, 0x7c, 0x20, 0x3b, 0x8b, 0x1d, 0x9c, 0xc1);\n\n#undef INTERFACE\n#define INTERFACE ID3D11ShaderReflection\n\nDECLARE_INTERFACE_(ID3D11ShaderReflection, IUnknown)\n{\n    STDMETHOD(QueryInterface)(THIS_ __in REFIID iid,\n                              __out LPVOID *ppv) PURE;\n    STDMETHOD_(ULONG, AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG, Release)(THIS) PURE;\n\n    STDMETHOD(GetDesc)(THIS_ __out D3D11_SHADER_DESC *pDesc) PURE;\n    \n    STDMETHOD_(ID3D11ShaderReflectionConstantBuffer*, GetConstantBufferByIndex)(THIS_ __in UINT Index) PURE;\n    STDMETHOD_(ID3D11ShaderReflectionConstantBuffer*, GetConstantBufferByName)(THIS_ __in LPCSTR Name) PURE;\n    \n    STDMETHOD(GetResourceBindingDesc)(THIS_ __in UINT ResourceIndex,\n                                      __out D3D11_SHADER_INPUT_BIND_DESC *pDesc) PURE;\n    \n    STDMETHOD(GetInputParameterDesc)(THIS_ __in UINT ParameterIndex,\n                                     __out D3D11_SIGNATURE_PARAMETER_DESC *pDesc) PURE;\n    STDMETHOD(GetOutputParameterDesc)(THIS_ __in UINT ParameterIndex,\n                                      __out D3D11_SIGNATURE_PARAMETER_DESC *pDesc) PURE;\n    STDMETHOD(GetPatchConstantParameterDesc)(THIS_ __in UINT ParameterIndex,\n                                             __out D3D11_SIGNATURE_PARAMETER_DESC *pDesc) PURE;\n\n    STDMETHOD_(ID3D11ShaderReflectionVariable*, GetVariableByName)(THIS_ __in LPCSTR Name) PURE;\n\n    STDMETHOD(GetResourceBindingDescByName)(THIS_ __in LPCSTR Name,\n                                            __out D3D11_SHADER_INPUT_BIND_DESC *pDesc) PURE;\n\n    STDMETHOD_(UINT, GetMovInstructionCount)(THIS) PURE;\n    STDMETHOD_(UINT, GetMovcInstructionCount)(THIS) PURE;\n    STDMETHOD_(UINT, GetConversionInstructionCount)(THIS) PURE;\n    STDMETHOD_(UINT, GetBitwiseInstructionCount)(THIS) PURE;\n    \n    STDMETHOD_(D3D_PRIMITIVE, GetGSInputPrimitive)(THIS) PURE;\n    STDMETHOD_(BOOL, IsSampleFrequencyShader)(THIS) PURE;\n\n    STDMETHOD_(UINT, GetNumInterfaceSlots)(THIS) PURE;\n    STDMETHOD(GetMinFeatureLevel)(THIS_ __out enum D3D_FEATURE_LEVEL* pLevel) PURE;\n\n    STDMETHOD_(UINT, GetThreadGroupSize)(THIS_\n                                         __out_opt UINT* pSizeX,\n                                         __out_opt UINT* pSizeY,\n                                         __out_opt UINT* pSizeZ) PURE;\n};\n\n//////////////////////////////////////////////////////////////////////////////\n// APIs //////////////////////////////////////////////////////////////////////\n//////////////////////////////////////////////////////////////////////////////\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif //__cplusplus\n\n#ifdef __cplusplus\n}\n#endif //__cplusplus\n    \n#endif //__D3D11SHADER_H__\n\n"
  },
  {
    "path": "Include/D3Dcommon.h",
    "content": "\n\n/* this ALWAYS GENERATED file contains the definitions for the interfaces */\n\n\n /* File created by MIDL compiler version 7.00.0555 */\n/* @@MIDL_FILE_HEADING(  ) */\n\n#pragma warning( disable: 4049 )  /* more than 64k source lines */\n\n\n/* verify that the <rpcndr.h> version is high enough to compile this file*/\n#ifndef __REQUIRED_RPCNDR_H_VERSION__\n#define __REQUIRED_RPCNDR_H_VERSION__ 475\n#endif\n\n/* verify that the <rpcsal.h> version is high enough to compile this file*/\n#ifndef __REQUIRED_RPCSAL_H_VERSION__\n#define __REQUIRED_RPCSAL_H_VERSION__ 100\n#endif\n\n#include \"rpc.h\"\n#include \"rpcndr.h\"\n\n#ifndef __RPCNDR_H_VERSION__\n#error this stub requires an updated version of <rpcndr.h>\n#endif // __RPCNDR_H_VERSION__\n\n#ifndef COM_NO_WINDOWS_H\n#include \"windows.h\"\n#include \"ole2.h\"\n#endif /*COM_NO_WINDOWS_H*/\n\n#ifndef __d3dcommon_h__\n#define __d3dcommon_h__\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n#pragma once\n#endif\n\n/* Forward Declarations */ \n\n#ifndef __ID3D10Blob_FWD_DEFINED__\n#define __ID3D10Blob_FWD_DEFINED__\ntypedef interface ID3D10Blob ID3D10Blob;\n#endif \t/* __ID3D10Blob_FWD_DEFINED__ */\n\n\n/* header files for imported files */\n#include \"oaidl.h\"\n#include \"ocidl.h\"\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif \n\n\n/* interface __MIDL_itf_d3dcommon_0000_0000 */\n/* [local] */ \n\ntypedef \nenum D3D_DRIVER_TYPE\n    {\tD3D_DRIVER_TYPE_UNKNOWN\t= 0,\n\tD3D_DRIVER_TYPE_HARDWARE\t= ( D3D_DRIVER_TYPE_UNKNOWN + 1 ) ,\n\tD3D_DRIVER_TYPE_REFERENCE\t= ( D3D_DRIVER_TYPE_HARDWARE + 1 ) ,\n\tD3D_DRIVER_TYPE_NULL\t= ( D3D_DRIVER_TYPE_REFERENCE + 1 ) ,\n\tD3D_DRIVER_TYPE_SOFTWARE\t= ( D3D_DRIVER_TYPE_NULL + 1 ) ,\n\tD3D_DRIVER_TYPE_WARP\t= ( D3D_DRIVER_TYPE_SOFTWARE + 1 ) \n    } \tD3D_DRIVER_TYPE;\n\ntypedef \nenum D3D_FEATURE_LEVEL\n    {\tD3D_FEATURE_LEVEL_9_1\t= 0x9100,\n\tD3D_FEATURE_LEVEL_9_2\t= 0x9200,\n\tD3D_FEATURE_LEVEL_9_3\t= 0x9300,\n\tD3D_FEATURE_LEVEL_10_0\t= 0xa000,\n\tD3D_FEATURE_LEVEL_10_1\t= 0xa100,\n\tD3D_FEATURE_LEVEL_11_0\t= 0xb000\n    } \tD3D_FEATURE_LEVEL;\n\ntypedef \nenum D3D_PRIMITIVE_TOPOLOGY\n    {\tD3D_PRIMITIVE_TOPOLOGY_UNDEFINED\t= 0,\n\tD3D_PRIMITIVE_TOPOLOGY_POINTLIST\t= 1,\n\tD3D_PRIMITIVE_TOPOLOGY_LINELIST\t= 2,\n\tD3D_PRIMITIVE_TOPOLOGY_LINESTRIP\t= 3,\n\tD3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST\t= 4,\n\tD3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP\t= 5,\n\tD3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ\t= 10,\n\tD3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ\t= 11,\n\tD3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ\t= 12,\n\tD3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ\t= 13,\n\tD3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST\t= 33,\n\tD3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST\t= 34,\n\tD3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST\t= 35,\n\tD3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST\t= 36,\n\tD3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST\t= 37,\n\tD3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST\t= 38,\n\tD3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST\t= 39,\n\tD3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST\t= 40,\n\tD3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST\t= 41,\n\tD3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST\t= 42,\n\tD3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST\t= 43,\n\tD3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST\t= 44,\n\tD3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST\t= 45,\n\tD3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST\t= 46,\n\tD3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST\t= 47,\n\tD3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST\t= 48,\n\tD3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST\t= 49,\n\tD3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST\t= 50,\n\tD3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST\t= 51,\n\tD3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST\t= 52,\n\tD3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST\t= 53,\n\tD3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST\t= 54,\n\tD3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST\t= 55,\n\tD3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST\t= 56,\n\tD3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST\t= 57,\n\tD3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST\t= 58,\n\tD3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST\t= 59,\n\tD3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST\t= 60,\n\tD3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST\t= 61,\n\tD3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST\t= 62,\n\tD3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST\t= 63,\n\tD3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST\t= 64,\n\tD3D10_PRIMITIVE_TOPOLOGY_UNDEFINED\t= D3D_PRIMITIVE_TOPOLOGY_UNDEFINED,\n\tD3D10_PRIMITIVE_TOPOLOGY_POINTLIST\t= D3D_PRIMITIVE_TOPOLOGY_POINTLIST,\n\tD3D10_PRIMITIVE_TOPOLOGY_LINELIST\t= D3D_PRIMITIVE_TOPOLOGY_LINELIST,\n\tD3D10_PRIMITIVE_TOPOLOGY_LINESTRIP\t= D3D_PRIMITIVE_TOPOLOGY_LINESTRIP,\n\tD3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST\t= D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST,\n\tD3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP\t= D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP,\n\tD3D10_PRIMITIVE_TOPOLOGY_LINELIST_ADJ\t= D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ,\n\tD3D10_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ\t= D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ,\n\tD3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ\t= D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ,\n\tD3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ\t= D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ,\n\tD3D11_PRIMITIVE_TOPOLOGY_UNDEFINED\t= D3D_PRIMITIVE_TOPOLOGY_UNDEFINED,\n\tD3D11_PRIMITIVE_TOPOLOGY_POINTLIST\t= D3D_PRIMITIVE_TOPOLOGY_POINTLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_LINELIST\t= D3D_PRIMITIVE_TOPOLOGY_LINELIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_LINESTRIP\t= D3D_PRIMITIVE_TOPOLOGY_LINESTRIP,\n\tD3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST\t= D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP\t= D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP,\n\tD3D11_PRIMITIVE_TOPOLOGY_LINELIST_ADJ\t= D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ,\n\tD3D11_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ\t= D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ,\n\tD3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ\t= D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ,\n\tD3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ\t= D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ,\n\tD3D11_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST,\n\tD3D11_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST\t= D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST\n    } \tD3D_PRIMITIVE_TOPOLOGY;\n\ntypedef \nenum D3D_PRIMITIVE\n    {\tD3D_PRIMITIVE_UNDEFINED\t= 0,\n\tD3D_PRIMITIVE_POINT\t= 1,\n\tD3D_PRIMITIVE_LINE\t= 2,\n\tD3D_PRIMITIVE_TRIANGLE\t= 3,\n\tD3D_PRIMITIVE_LINE_ADJ\t= 6,\n\tD3D_PRIMITIVE_TRIANGLE_ADJ\t= 7,\n\tD3D_PRIMITIVE_1_CONTROL_POINT_PATCH\t= 8,\n\tD3D_PRIMITIVE_2_CONTROL_POINT_PATCH\t= 9,\n\tD3D_PRIMITIVE_3_CONTROL_POINT_PATCH\t= 10,\n\tD3D_PRIMITIVE_4_CONTROL_POINT_PATCH\t= 11,\n\tD3D_PRIMITIVE_5_CONTROL_POINT_PATCH\t= 12,\n\tD3D_PRIMITIVE_6_CONTROL_POINT_PATCH\t= 13,\n\tD3D_PRIMITIVE_7_CONTROL_POINT_PATCH\t= 14,\n\tD3D_PRIMITIVE_8_CONTROL_POINT_PATCH\t= 15,\n\tD3D_PRIMITIVE_9_CONTROL_POINT_PATCH\t= 16,\n\tD3D_PRIMITIVE_10_CONTROL_POINT_PATCH\t= 17,\n\tD3D_PRIMITIVE_11_CONTROL_POINT_PATCH\t= 18,\n\tD3D_PRIMITIVE_12_CONTROL_POINT_PATCH\t= 19,\n\tD3D_PRIMITIVE_13_CONTROL_POINT_PATCH\t= 20,\n\tD3D_PRIMITIVE_14_CONTROL_POINT_PATCH\t= 21,\n\tD3D_PRIMITIVE_15_CONTROL_POINT_PATCH\t= 22,\n\tD3D_PRIMITIVE_16_CONTROL_POINT_PATCH\t= 23,\n\tD3D_PRIMITIVE_17_CONTROL_POINT_PATCH\t= 24,\n\tD3D_PRIMITIVE_18_CONTROL_POINT_PATCH\t= 25,\n\tD3D_PRIMITIVE_19_CONTROL_POINT_PATCH\t= 26,\n\tD3D_PRIMITIVE_20_CONTROL_POINT_PATCH\t= 28,\n\tD3D_PRIMITIVE_21_CONTROL_POINT_PATCH\t= 29,\n\tD3D_PRIMITIVE_22_CONTROL_POINT_PATCH\t= 30,\n\tD3D_PRIMITIVE_23_CONTROL_POINT_PATCH\t= 31,\n\tD3D_PRIMITIVE_24_CONTROL_POINT_PATCH\t= 32,\n\tD3D_PRIMITIVE_25_CONTROL_POINT_PATCH\t= 33,\n\tD3D_PRIMITIVE_26_CONTROL_POINT_PATCH\t= 34,\n\tD3D_PRIMITIVE_27_CONTROL_POINT_PATCH\t= 35,\n\tD3D_PRIMITIVE_28_CONTROL_POINT_PATCH\t= 36,\n\tD3D_PRIMITIVE_29_CONTROL_POINT_PATCH\t= 37,\n\tD3D_PRIMITIVE_30_CONTROL_POINT_PATCH\t= 38,\n\tD3D_PRIMITIVE_31_CONTROL_POINT_PATCH\t= 39,\n\tD3D_PRIMITIVE_32_CONTROL_POINT_PATCH\t= 40,\n\tD3D10_PRIMITIVE_UNDEFINED\t= D3D_PRIMITIVE_UNDEFINED,\n\tD3D10_PRIMITIVE_POINT\t= D3D_PRIMITIVE_POINT,\n\tD3D10_PRIMITIVE_LINE\t= D3D_PRIMITIVE_LINE,\n\tD3D10_PRIMITIVE_TRIANGLE\t= D3D_PRIMITIVE_TRIANGLE,\n\tD3D10_PRIMITIVE_LINE_ADJ\t= D3D_PRIMITIVE_LINE_ADJ,\n\tD3D10_PRIMITIVE_TRIANGLE_ADJ\t= D3D_PRIMITIVE_TRIANGLE_ADJ,\n\tD3D11_PRIMITIVE_UNDEFINED\t= D3D_PRIMITIVE_UNDEFINED,\n\tD3D11_PRIMITIVE_POINT\t= D3D_PRIMITIVE_POINT,\n\tD3D11_PRIMITIVE_LINE\t= D3D_PRIMITIVE_LINE,\n\tD3D11_PRIMITIVE_TRIANGLE\t= D3D_PRIMITIVE_TRIANGLE,\n\tD3D11_PRIMITIVE_LINE_ADJ\t= D3D_PRIMITIVE_LINE_ADJ,\n\tD3D11_PRIMITIVE_TRIANGLE_ADJ\t= D3D_PRIMITIVE_TRIANGLE_ADJ,\n\tD3D11_PRIMITIVE_1_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_1_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_2_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_2_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_3_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_3_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_4_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_4_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_5_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_5_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_6_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_6_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_7_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_7_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_8_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_8_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_9_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_9_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_10_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_10_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_11_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_11_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_12_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_12_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_13_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_13_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_14_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_14_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_15_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_15_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_16_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_16_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_17_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_17_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_18_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_18_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_19_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_19_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_20_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_20_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_21_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_21_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_22_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_22_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_23_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_23_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_24_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_24_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_25_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_25_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_26_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_26_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_27_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_27_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_28_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_28_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_29_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_29_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_30_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_30_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_31_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_31_CONTROL_POINT_PATCH,\n\tD3D11_PRIMITIVE_32_CONTROL_POINT_PATCH\t= D3D_PRIMITIVE_32_CONTROL_POINT_PATCH\n    } \tD3D_PRIMITIVE;\n\ntypedef \nenum D3D_SRV_DIMENSION\n    {\tD3D_SRV_DIMENSION_UNKNOWN\t= 0,\n\tD3D_SRV_DIMENSION_BUFFER\t= 1,\n\tD3D_SRV_DIMENSION_TEXTURE1D\t= 2,\n\tD3D_SRV_DIMENSION_TEXTURE1DARRAY\t= 3,\n\tD3D_SRV_DIMENSION_TEXTURE2D\t= 4,\n\tD3D_SRV_DIMENSION_TEXTURE2DARRAY\t= 5,\n\tD3D_SRV_DIMENSION_TEXTURE2DMS\t= 6,\n\tD3D_SRV_DIMENSION_TEXTURE2DMSARRAY\t= 7,\n\tD3D_SRV_DIMENSION_TEXTURE3D\t= 8,\n\tD3D_SRV_DIMENSION_TEXTURECUBE\t= 9,\n\tD3D_SRV_DIMENSION_TEXTURECUBEARRAY\t= 10,\n\tD3D_SRV_DIMENSION_BUFFEREX\t= 11,\n\tD3D10_SRV_DIMENSION_UNKNOWN\t= D3D_SRV_DIMENSION_UNKNOWN,\n\tD3D10_SRV_DIMENSION_BUFFER\t= D3D_SRV_DIMENSION_BUFFER,\n\tD3D10_SRV_DIMENSION_TEXTURE1D\t= D3D_SRV_DIMENSION_TEXTURE1D,\n\tD3D10_SRV_DIMENSION_TEXTURE1DARRAY\t= D3D_SRV_DIMENSION_TEXTURE1DARRAY,\n\tD3D10_SRV_DIMENSION_TEXTURE2D\t= D3D_SRV_DIMENSION_TEXTURE2D,\n\tD3D10_SRV_DIMENSION_TEXTURE2DARRAY\t= D3D_SRV_DIMENSION_TEXTURE2DARRAY,\n\tD3D10_SRV_DIMENSION_TEXTURE2DMS\t= D3D_SRV_DIMENSION_TEXTURE2DMS,\n\tD3D10_SRV_DIMENSION_TEXTURE2DMSARRAY\t= D3D_SRV_DIMENSION_TEXTURE2DMSARRAY,\n\tD3D10_SRV_DIMENSION_TEXTURE3D\t= D3D_SRV_DIMENSION_TEXTURE3D,\n\tD3D10_SRV_DIMENSION_TEXTURECUBE\t= D3D_SRV_DIMENSION_TEXTURECUBE,\n\tD3D10_1_SRV_DIMENSION_UNKNOWN\t= D3D_SRV_DIMENSION_UNKNOWN,\n\tD3D10_1_SRV_DIMENSION_BUFFER\t= D3D_SRV_DIMENSION_BUFFER,\n\tD3D10_1_SRV_DIMENSION_TEXTURE1D\t= D3D_SRV_DIMENSION_TEXTURE1D,\n\tD3D10_1_SRV_DIMENSION_TEXTURE1DARRAY\t= D3D_SRV_DIMENSION_TEXTURE1DARRAY,\n\tD3D10_1_SRV_DIMENSION_TEXTURE2D\t= D3D_SRV_DIMENSION_TEXTURE2D,\n\tD3D10_1_SRV_DIMENSION_TEXTURE2DARRAY\t= D3D_SRV_DIMENSION_TEXTURE2DARRAY,\n\tD3D10_1_SRV_DIMENSION_TEXTURE2DMS\t= D3D_SRV_DIMENSION_TEXTURE2DMS,\n\tD3D10_1_SRV_DIMENSION_TEXTURE2DMSARRAY\t= D3D_SRV_DIMENSION_TEXTURE2DMSARRAY,\n\tD3D10_1_SRV_DIMENSION_TEXTURE3D\t= D3D_SRV_DIMENSION_TEXTURE3D,\n\tD3D10_1_SRV_DIMENSION_TEXTURECUBE\t= D3D_SRV_DIMENSION_TEXTURECUBE,\n\tD3D10_1_SRV_DIMENSION_TEXTURECUBEARRAY\t= D3D_SRV_DIMENSION_TEXTURECUBEARRAY,\n\tD3D11_SRV_DIMENSION_UNKNOWN\t= D3D_SRV_DIMENSION_UNKNOWN,\n\tD3D11_SRV_DIMENSION_BUFFER\t= D3D_SRV_DIMENSION_BUFFER,\n\tD3D11_SRV_DIMENSION_TEXTURE1D\t= D3D_SRV_DIMENSION_TEXTURE1D,\n\tD3D11_SRV_DIMENSION_TEXTURE1DARRAY\t= D3D_SRV_DIMENSION_TEXTURE1DARRAY,\n\tD3D11_SRV_DIMENSION_TEXTURE2D\t= D3D_SRV_DIMENSION_TEXTURE2D,\n\tD3D11_SRV_DIMENSION_TEXTURE2DARRAY\t= D3D_SRV_DIMENSION_TEXTURE2DARRAY,\n\tD3D11_SRV_DIMENSION_TEXTURE2DMS\t= D3D_SRV_DIMENSION_TEXTURE2DMS,\n\tD3D11_SRV_DIMENSION_TEXTURE2DMSARRAY\t= D3D_SRV_DIMENSION_TEXTURE2DMSARRAY,\n\tD3D11_SRV_DIMENSION_TEXTURE3D\t= D3D_SRV_DIMENSION_TEXTURE3D,\n\tD3D11_SRV_DIMENSION_TEXTURECUBE\t= D3D_SRV_DIMENSION_TEXTURECUBE,\n\tD3D11_SRV_DIMENSION_TEXTURECUBEARRAY\t= D3D_SRV_DIMENSION_TEXTURECUBEARRAY,\n\tD3D11_SRV_DIMENSION_BUFFEREX\t= D3D_SRV_DIMENSION_BUFFEREX\n    } \tD3D_SRV_DIMENSION;\n\ntypedef struct _D3D_SHADER_MACRO\n    {\n    LPCSTR Name;\n    LPCSTR Definition;\n    } \tD3D_SHADER_MACRO;\n\ntypedef struct _D3D_SHADER_MACRO *LPD3D_SHADER_MACRO;\n\nDEFINE_GUID(IID_ID3D10Blob, 0x8ba5fb08, 0x5195, 0x40e2, 0xac, 0x58, 0xd, 0x98, 0x9c, 0x3a, 0x1, 0x2);\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3dcommon_0000_0000_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3dcommon_0000_0000_v0_0_s_ifspec;\n\n#ifndef __ID3D10Blob_INTERFACE_DEFINED__\n#define __ID3D10Blob_INTERFACE_DEFINED__\n\n/* interface ID3D10Blob */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10Blob;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"8BA5FB08-5195-40e2-AC58-0D989C3A0102\")\n    ID3D10Blob : public IUnknown\n    {\n    public:\n        virtual LPVOID STDMETHODCALLTYPE GetBufferPointer( void) = 0;\n        \n        virtual SIZE_T STDMETHODCALLTYPE GetBufferSize( void) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10BlobVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10Blob * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10Blob * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10Blob * This);\n        \n        LPVOID ( STDMETHODCALLTYPE *GetBufferPointer )( \n            ID3D10Blob * This);\n        \n        SIZE_T ( STDMETHODCALLTYPE *GetBufferSize )( \n            ID3D10Blob * This);\n        \n        END_INTERFACE\n    } ID3D10BlobVtbl;\n\n    interface ID3D10Blob\n    {\n        CONST_VTBL struct ID3D10BlobVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10Blob_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10Blob_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10Blob_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10Blob_GetBufferPointer(This)\t\\\n    ( (This)->lpVtbl -> GetBufferPointer(This) ) \n\n#define ID3D10Blob_GetBufferSize(This)\t\\\n    ( (This)->lpVtbl -> GetBufferSize(This) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10Blob_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3dcommon_0000_0001 */\n/* [local] */ \n\ntypedef interface ID3D10Blob* LPD3D10BLOB;\ntypedef ID3D10Blob ID3DBlob;\ntypedef ID3DBlob* LPD3DBLOB;\n#define IID_ID3DBlob IID_ID3D10Blob\ntypedef \nenum _D3D_INCLUDE_TYPE\n    {\tD3D_INCLUDE_LOCAL\t= 0,\n\tD3D_INCLUDE_SYSTEM\t= ( D3D_INCLUDE_LOCAL + 1 ) ,\n\tD3D10_INCLUDE_LOCAL\t= D3D_INCLUDE_LOCAL,\n\tD3D10_INCLUDE_SYSTEM\t= D3D_INCLUDE_SYSTEM,\n\tD3D_INCLUDE_FORCE_DWORD\t= 0x7fffffff\n    } \tD3D_INCLUDE_TYPE;\n\ntypedef interface ID3DInclude ID3DInclude;\n#undef INTERFACE\n#define INTERFACE ID3DInclude\nDECLARE_INTERFACE(ID3DInclude)\n{\n    STDMETHOD(Open)(THIS_ D3D_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes) PURE;\n    STDMETHOD(Close)(THIS_ LPCVOID pData) PURE;\n};\ntypedef ID3DInclude* LPD3DINCLUDE;\ntypedef \nenum _D3D_SHADER_VARIABLE_CLASS\n    {\tD3D_SVC_SCALAR\t= 0,\n\tD3D_SVC_VECTOR\t= ( D3D_SVC_SCALAR + 1 ) ,\n\tD3D_SVC_MATRIX_ROWS\t= ( D3D_SVC_VECTOR + 1 ) ,\n\tD3D_SVC_MATRIX_COLUMNS\t= ( D3D_SVC_MATRIX_ROWS + 1 ) ,\n\tD3D_SVC_OBJECT\t= ( D3D_SVC_MATRIX_COLUMNS + 1 ) ,\n\tD3D_SVC_STRUCT\t= ( D3D_SVC_OBJECT + 1 ) ,\n\tD3D_SVC_INTERFACE_CLASS\t= ( D3D_SVC_STRUCT + 1 ) ,\n\tD3D_SVC_INTERFACE_POINTER\t= ( D3D_SVC_INTERFACE_CLASS + 1 ) ,\n\tD3D10_SVC_SCALAR\t= D3D_SVC_SCALAR,\n\tD3D10_SVC_VECTOR\t= D3D_SVC_VECTOR,\n\tD3D10_SVC_MATRIX_ROWS\t= D3D_SVC_MATRIX_ROWS,\n\tD3D10_SVC_MATRIX_COLUMNS\t= D3D_SVC_MATRIX_COLUMNS,\n\tD3D10_SVC_OBJECT\t= D3D_SVC_OBJECT,\n\tD3D10_SVC_STRUCT\t= D3D_SVC_STRUCT,\n\tD3D11_SVC_INTERFACE_CLASS\t= D3D_SVC_INTERFACE_CLASS,\n\tD3D11_SVC_INTERFACE_POINTER\t= D3D_SVC_INTERFACE_POINTER,\n\tD3D_SVC_FORCE_DWORD\t= 0x7fffffff\n    } \tD3D_SHADER_VARIABLE_CLASS;\n\ntypedef \nenum _D3D_SHADER_VARIABLE_FLAGS\n    {\tD3D_SVF_USERPACKED\t= 1,\n\tD3D_SVF_USED\t= 2,\n\tD3D_SVF_INTERFACE_POINTER\t= 4,\n\tD3D_SVF_INTERFACE_PARAMETER\t= 8,\n\tD3D10_SVF_USERPACKED\t= D3D_SVF_USERPACKED,\n\tD3D10_SVF_USED\t= D3D_SVF_USED,\n\tD3D11_SVF_INTERFACE_POINTER\t= D3D_SVF_INTERFACE_POINTER,\n\tD3D11_SVF_INTERFACE_PARAMETER\t= D3D_SVF_INTERFACE_PARAMETER,\n\tD3D_SVF_FORCE_DWORD\t= 0x7fffffff\n    } \tD3D_SHADER_VARIABLE_FLAGS;\n\ntypedef \nenum _D3D_SHADER_VARIABLE_TYPE\n    {\tD3D_SVT_VOID\t= 0,\n\tD3D_SVT_BOOL\t= 1,\n\tD3D_SVT_INT\t= 2,\n\tD3D_SVT_FLOAT\t= 3,\n\tD3D_SVT_STRING\t= 4,\n\tD3D_SVT_TEXTURE\t= 5,\n\tD3D_SVT_TEXTURE1D\t= 6,\n\tD3D_SVT_TEXTURE2D\t= 7,\n\tD3D_SVT_TEXTURE3D\t= 8,\n\tD3D_SVT_TEXTURECUBE\t= 9,\n\tD3D_SVT_SAMPLER\t= 10,\n\tD3D_SVT_SAMPLER1D\t= 11,\n\tD3D_SVT_SAMPLER2D\t= 12,\n\tD3D_SVT_SAMPLER3D\t= 13,\n\tD3D_SVT_SAMPLERCUBE\t= 14,\n\tD3D_SVT_PIXELSHADER\t= 15,\n\tD3D_SVT_VERTEXSHADER\t= 16,\n\tD3D_SVT_PIXELFRAGMENT\t= 17,\n\tD3D_SVT_VERTEXFRAGMENT\t= 18,\n\tD3D_SVT_UINT\t= 19,\n\tD3D_SVT_UINT8\t= 20,\n\tD3D_SVT_GEOMETRYSHADER\t= 21,\n\tD3D_SVT_RASTERIZER\t= 22,\n\tD3D_SVT_DEPTHSTENCIL\t= 23,\n\tD3D_SVT_BLEND\t= 24,\n\tD3D_SVT_BUFFER\t= 25,\n\tD3D_SVT_CBUFFER\t= 26,\n\tD3D_SVT_TBUFFER\t= 27,\n\tD3D_SVT_TEXTURE1DARRAY\t= 28,\n\tD3D_SVT_TEXTURE2DARRAY\t= 29,\n\tD3D_SVT_RENDERTARGETVIEW\t= 30,\n\tD3D_SVT_DEPTHSTENCILVIEW\t= 31,\n\tD3D_SVT_TEXTURE2DMS\t= 32,\n\tD3D_SVT_TEXTURE2DMSARRAY\t= 33,\n\tD3D_SVT_TEXTURECUBEARRAY\t= 34,\n\tD3D_SVT_HULLSHADER\t= 35,\n\tD3D_SVT_DOMAINSHADER\t= 36,\n\tD3D_SVT_INTERFACE_POINTER\t= 37,\n\tD3D_SVT_COMPUTESHADER\t= 38,\n\tD3D_SVT_DOUBLE\t= 39,\n\tD3D_SVT_RWTEXTURE1D\t= 40,\n\tD3D_SVT_RWTEXTURE1DARRAY\t= 41,\n\tD3D_SVT_RWTEXTURE2D\t= 42,\n\tD3D_SVT_RWTEXTURE2DARRAY\t= 43,\n\tD3D_SVT_RWTEXTURE3D\t= 44,\n\tD3D_SVT_RWBUFFER\t= 45,\n\tD3D_SVT_BYTEADDRESS_BUFFER\t= 46,\n\tD3D_SVT_RWBYTEADDRESS_BUFFER\t= 47,\n\tD3D_SVT_STRUCTURED_BUFFER\t= 48,\n\tD3D_SVT_RWSTRUCTURED_BUFFER\t= 49,\n\tD3D_SVT_APPEND_STRUCTURED_BUFFER\t= 50,\n\tD3D_SVT_CONSUME_STRUCTURED_BUFFER\t= 51,\n\tD3D10_SVT_VOID\t= D3D_SVT_VOID,\n\tD3D10_SVT_BOOL\t= D3D_SVT_BOOL,\n\tD3D10_SVT_INT\t= D3D_SVT_INT,\n\tD3D10_SVT_FLOAT\t= D3D_SVT_FLOAT,\n\tD3D10_SVT_STRING\t= D3D_SVT_STRING,\n\tD3D10_SVT_TEXTURE\t= D3D_SVT_TEXTURE,\n\tD3D10_SVT_TEXTURE1D\t= D3D_SVT_TEXTURE1D,\n\tD3D10_SVT_TEXTURE2D\t= D3D_SVT_TEXTURE2D,\n\tD3D10_SVT_TEXTURE3D\t= D3D_SVT_TEXTURE3D,\n\tD3D10_SVT_TEXTURECUBE\t= D3D_SVT_TEXTURECUBE,\n\tD3D10_SVT_SAMPLER\t= D3D_SVT_SAMPLER,\n\tD3D10_SVT_SAMPLER1D\t= D3D_SVT_SAMPLER1D,\n\tD3D10_SVT_SAMPLER2D\t= D3D_SVT_SAMPLER2D,\n\tD3D10_SVT_SAMPLER3D\t= D3D_SVT_SAMPLER3D,\n\tD3D10_SVT_SAMPLERCUBE\t= D3D_SVT_SAMPLERCUBE,\n\tD3D10_SVT_PIXELSHADER\t= D3D_SVT_PIXELSHADER,\n\tD3D10_SVT_VERTEXSHADER\t= D3D_SVT_VERTEXSHADER,\n\tD3D10_SVT_PIXELFRAGMENT\t= D3D_SVT_PIXELFRAGMENT,\n\tD3D10_SVT_VERTEXFRAGMENT\t= D3D_SVT_VERTEXFRAGMENT,\n\tD3D10_SVT_UINT\t= D3D_SVT_UINT,\n\tD3D10_SVT_UINT8\t= D3D_SVT_UINT8,\n\tD3D10_SVT_GEOMETRYSHADER\t= D3D_SVT_GEOMETRYSHADER,\n\tD3D10_SVT_RASTERIZER\t= D3D_SVT_RASTERIZER,\n\tD3D10_SVT_DEPTHSTENCIL\t= D3D_SVT_DEPTHSTENCIL,\n\tD3D10_SVT_BLEND\t= D3D_SVT_BLEND,\n\tD3D10_SVT_BUFFER\t= D3D_SVT_BUFFER,\n\tD3D10_SVT_CBUFFER\t= D3D_SVT_CBUFFER,\n\tD3D10_SVT_TBUFFER\t= D3D_SVT_TBUFFER,\n\tD3D10_SVT_TEXTURE1DARRAY\t= D3D_SVT_TEXTURE1DARRAY,\n\tD3D10_SVT_TEXTURE2DARRAY\t= D3D_SVT_TEXTURE2DARRAY,\n\tD3D10_SVT_RENDERTARGETVIEW\t= D3D_SVT_RENDERTARGETVIEW,\n\tD3D10_SVT_DEPTHSTENCILVIEW\t= D3D_SVT_DEPTHSTENCILVIEW,\n\tD3D10_SVT_TEXTURE2DMS\t= D3D_SVT_TEXTURE2DMS,\n\tD3D10_SVT_TEXTURE2DMSARRAY\t= D3D_SVT_TEXTURE2DMSARRAY,\n\tD3D10_SVT_TEXTURECUBEARRAY\t= D3D_SVT_TEXTURECUBEARRAY,\n\tD3D11_SVT_HULLSHADER\t= D3D_SVT_HULLSHADER,\n\tD3D11_SVT_DOMAINSHADER\t= D3D_SVT_DOMAINSHADER,\n\tD3D11_SVT_INTERFACE_POINTER\t= D3D_SVT_INTERFACE_POINTER,\n\tD3D11_SVT_COMPUTESHADER\t= D3D_SVT_COMPUTESHADER,\n\tD3D11_SVT_DOUBLE\t= D3D_SVT_DOUBLE,\n\tD3D11_SVT_RWTEXTURE1D\t= D3D_SVT_RWTEXTURE1D,\n\tD3D11_SVT_RWTEXTURE1DARRAY\t= D3D_SVT_RWTEXTURE1DARRAY,\n\tD3D11_SVT_RWTEXTURE2D\t= D3D_SVT_RWTEXTURE2D,\n\tD3D11_SVT_RWTEXTURE2DARRAY\t= D3D_SVT_RWTEXTURE2DARRAY,\n\tD3D11_SVT_RWTEXTURE3D\t= D3D_SVT_RWTEXTURE3D,\n\tD3D11_SVT_RWBUFFER\t= D3D_SVT_RWBUFFER,\n\tD3D11_SVT_BYTEADDRESS_BUFFER\t= D3D_SVT_BYTEADDRESS_BUFFER,\n\tD3D11_SVT_RWBYTEADDRESS_BUFFER\t= D3D_SVT_RWBYTEADDRESS_BUFFER,\n\tD3D11_SVT_STRUCTURED_BUFFER\t= D3D_SVT_STRUCTURED_BUFFER,\n\tD3D11_SVT_RWSTRUCTURED_BUFFER\t= D3D_SVT_RWSTRUCTURED_BUFFER,\n\tD3D11_SVT_APPEND_STRUCTURED_BUFFER\t= D3D_SVT_APPEND_STRUCTURED_BUFFER,\n\tD3D11_SVT_CONSUME_STRUCTURED_BUFFER\t= D3D_SVT_CONSUME_STRUCTURED_BUFFER,\n\tD3D_SVT_FORCE_DWORD\t= 0x7fffffff\n    } \tD3D_SHADER_VARIABLE_TYPE;\n\ntypedef \nenum _D3D_SHADER_INPUT_FLAGS\n    {\tD3D_SIF_USERPACKED\t= 1,\n\tD3D_SIF_COMPARISON_SAMPLER\t= 2,\n\tD3D_SIF_TEXTURE_COMPONENT_0\t= 4,\n\tD3D_SIF_TEXTURE_COMPONENT_1\t= 8,\n\tD3D_SIF_TEXTURE_COMPONENTS\t= 12,\n\tD3D10_SIF_USERPACKED\t= D3D_SIF_USERPACKED,\n\tD3D10_SIF_COMPARISON_SAMPLER\t= D3D_SIF_COMPARISON_SAMPLER,\n\tD3D10_SIF_TEXTURE_COMPONENT_0\t= D3D_SIF_TEXTURE_COMPONENT_0,\n\tD3D10_SIF_TEXTURE_COMPONENT_1\t= D3D_SIF_TEXTURE_COMPONENT_1,\n\tD3D10_SIF_TEXTURE_COMPONENTS\t= D3D_SIF_TEXTURE_COMPONENTS,\n\tD3D_SIF_FORCE_DWORD\t= 0x7fffffff\n    } \tD3D_SHADER_INPUT_FLAGS;\n\ntypedef \nenum _D3D_SHADER_INPUT_TYPE\n    {\tD3D_SIT_CBUFFER\t= 0,\n\tD3D_SIT_TBUFFER\t= ( D3D_SIT_CBUFFER + 1 ) ,\n\tD3D_SIT_TEXTURE\t= ( D3D_SIT_TBUFFER + 1 ) ,\n\tD3D_SIT_SAMPLER\t= ( D3D_SIT_TEXTURE + 1 ) ,\n\tD3D_SIT_UAV_RWTYPED\t= ( D3D_SIT_SAMPLER + 1 ) ,\n\tD3D_SIT_STRUCTURED\t= ( D3D_SIT_UAV_RWTYPED + 1 ) ,\n\tD3D_SIT_UAV_RWSTRUCTURED\t= ( D3D_SIT_STRUCTURED + 1 ) ,\n\tD3D_SIT_BYTEADDRESS\t= ( D3D_SIT_UAV_RWSTRUCTURED + 1 ) ,\n\tD3D_SIT_UAV_RWBYTEADDRESS\t= ( D3D_SIT_BYTEADDRESS + 1 ) ,\n\tD3D_SIT_UAV_APPEND_STRUCTURED\t= ( D3D_SIT_UAV_RWBYTEADDRESS + 1 ) ,\n\tD3D_SIT_UAV_CONSUME_STRUCTURED\t= ( D3D_SIT_UAV_APPEND_STRUCTURED + 1 ) ,\n\tD3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER\t= ( D3D_SIT_UAV_CONSUME_STRUCTURED + 1 ) ,\n\tD3D10_SIT_CBUFFER\t= D3D_SIT_CBUFFER,\n\tD3D10_SIT_TBUFFER\t= D3D_SIT_TBUFFER,\n\tD3D10_SIT_TEXTURE\t= D3D_SIT_TEXTURE,\n\tD3D10_SIT_SAMPLER\t= D3D_SIT_SAMPLER,\n\tD3D11_SIT_UAV_RWTYPED\t= D3D_SIT_UAV_RWTYPED,\n\tD3D11_SIT_STRUCTURED\t= D3D_SIT_STRUCTURED,\n\tD3D11_SIT_UAV_RWSTRUCTURED\t= D3D_SIT_UAV_RWSTRUCTURED,\n\tD3D11_SIT_BYTEADDRESS\t= D3D_SIT_BYTEADDRESS,\n\tD3D11_SIT_UAV_RWBYTEADDRESS\t= D3D_SIT_UAV_RWBYTEADDRESS,\n\tD3D11_SIT_UAV_APPEND_STRUCTURED\t= D3D_SIT_UAV_APPEND_STRUCTURED,\n\tD3D11_SIT_UAV_CONSUME_STRUCTURED\t= D3D_SIT_UAV_CONSUME_STRUCTURED,\n\tD3D11_SIT_UAV_RWSTRUCTURED_WITH_COUNTER\t= D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER\n    } \tD3D_SHADER_INPUT_TYPE;\n\ntypedef \nenum _D3D_SHADER_CBUFFER_FLAGS\n    {\tD3D_CBF_USERPACKED\t= 1,\n\tD3D10_CBF_USERPACKED\t= D3D_CBF_USERPACKED,\n\tD3D_CBF_FORCE_DWORD\t= 0x7fffffff\n    } \tD3D_SHADER_CBUFFER_FLAGS;\n\ntypedef \nenum _D3D_CBUFFER_TYPE\n    {\tD3D_CT_CBUFFER\t= 0,\n\tD3D_CT_TBUFFER\t= ( D3D_CT_CBUFFER + 1 ) ,\n\tD3D_CT_INTERFACE_POINTERS\t= ( D3D_CT_TBUFFER + 1 ) ,\n\tD3D_CT_RESOURCE_BIND_INFO\t= ( D3D_CT_INTERFACE_POINTERS + 1 ) ,\n\tD3D10_CT_CBUFFER\t= D3D_CT_CBUFFER,\n\tD3D10_CT_TBUFFER\t= D3D_CT_TBUFFER,\n\tD3D11_CT_CBUFFER\t= D3D_CT_CBUFFER,\n\tD3D11_CT_TBUFFER\t= D3D_CT_TBUFFER,\n\tD3D11_CT_INTERFACE_POINTERS\t= D3D_CT_INTERFACE_POINTERS,\n\tD3D11_CT_RESOURCE_BIND_INFO\t= D3D_CT_RESOURCE_BIND_INFO\n    } \tD3D_CBUFFER_TYPE;\n\ntypedef \nenum D3D_NAME\n    {\tD3D_NAME_UNDEFINED\t= 0,\n\tD3D_NAME_POSITION\t= 1,\n\tD3D_NAME_CLIP_DISTANCE\t= 2,\n\tD3D_NAME_CULL_DISTANCE\t= 3,\n\tD3D_NAME_RENDER_TARGET_ARRAY_INDEX\t= 4,\n\tD3D_NAME_VIEWPORT_ARRAY_INDEX\t= 5,\n\tD3D_NAME_VERTEX_ID\t= 6,\n\tD3D_NAME_PRIMITIVE_ID\t= 7,\n\tD3D_NAME_INSTANCE_ID\t= 8,\n\tD3D_NAME_IS_FRONT_FACE\t= 9,\n\tD3D_NAME_SAMPLE_INDEX\t= 10,\n\tD3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR\t= 11,\n\tD3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR\t= 12,\n\tD3D_NAME_FINAL_TRI_EDGE_TESSFACTOR\t= 13,\n\tD3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR\t= 14,\n\tD3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR\t= 15,\n\tD3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR\t= 16,\n\tD3D_NAME_TARGET\t= 64,\n\tD3D_NAME_DEPTH\t= 65,\n\tD3D_NAME_COVERAGE\t= 66,\n\tD3D_NAME_DEPTH_GREATER_EQUAL\t= 67,\n\tD3D_NAME_DEPTH_LESS_EQUAL\t= 68,\n\tD3D10_NAME_UNDEFINED\t= D3D_NAME_UNDEFINED,\n\tD3D10_NAME_POSITION\t= D3D_NAME_POSITION,\n\tD3D10_NAME_CLIP_DISTANCE\t= D3D_NAME_CLIP_DISTANCE,\n\tD3D10_NAME_CULL_DISTANCE\t= D3D_NAME_CULL_DISTANCE,\n\tD3D10_NAME_RENDER_TARGET_ARRAY_INDEX\t= D3D_NAME_RENDER_TARGET_ARRAY_INDEX,\n\tD3D10_NAME_VIEWPORT_ARRAY_INDEX\t= D3D_NAME_VIEWPORT_ARRAY_INDEX,\n\tD3D10_NAME_VERTEX_ID\t= D3D_NAME_VERTEX_ID,\n\tD3D10_NAME_PRIMITIVE_ID\t= D3D_NAME_PRIMITIVE_ID,\n\tD3D10_NAME_INSTANCE_ID\t= D3D_NAME_INSTANCE_ID,\n\tD3D10_NAME_IS_FRONT_FACE\t= D3D_NAME_IS_FRONT_FACE,\n\tD3D10_NAME_SAMPLE_INDEX\t= D3D_NAME_SAMPLE_INDEX,\n\tD3D10_NAME_TARGET\t= D3D_NAME_TARGET,\n\tD3D10_NAME_DEPTH\t= D3D_NAME_DEPTH,\n\tD3D10_NAME_COVERAGE\t= D3D_NAME_COVERAGE,\n\tD3D11_NAME_FINAL_QUAD_EDGE_TESSFACTOR\t= D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR,\n\tD3D11_NAME_FINAL_QUAD_INSIDE_TESSFACTOR\t= D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR,\n\tD3D11_NAME_FINAL_TRI_EDGE_TESSFACTOR\t= D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR,\n\tD3D11_NAME_FINAL_TRI_INSIDE_TESSFACTOR\t= D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR,\n\tD3D11_NAME_FINAL_LINE_DETAIL_TESSFACTOR\t= D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR,\n\tD3D11_NAME_FINAL_LINE_DENSITY_TESSFACTOR\t= D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR,\n\tD3D11_NAME_DEPTH_GREATER_EQUAL\t= D3D_NAME_DEPTH_GREATER_EQUAL,\n\tD3D11_NAME_DEPTH_LESS_EQUAL\t= D3D_NAME_DEPTH_LESS_EQUAL\n    } \tD3D_NAME;\n\ntypedef \nenum D3D_RESOURCE_RETURN_TYPE\n    {\tD3D_RETURN_TYPE_UNORM\t= 1,\n\tD3D_RETURN_TYPE_SNORM\t= 2,\n\tD3D_RETURN_TYPE_SINT\t= 3,\n\tD3D_RETURN_TYPE_UINT\t= 4,\n\tD3D_RETURN_TYPE_FLOAT\t= 5,\n\tD3D_RETURN_TYPE_MIXED\t= 6,\n\tD3D_RETURN_TYPE_DOUBLE\t= 7,\n\tD3D_RETURN_TYPE_CONTINUED\t= 8,\n\tD3D10_RETURN_TYPE_UNORM\t= D3D_RETURN_TYPE_UNORM,\n\tD3D10_RETURN_TYPE_SNORM\t= D3D_RETURN_TYPE_SNORM,\n\tD3D10_RETURN_TYPE_SINT\t= D3D_RETURN_TYPE_SINT,\n\tD3D10_RETURN_TYPE_UINT\t= D3D_RETURN_TYPE_UINT,\n\tD3D10_RETURN_TYPE_FLOAT\t= D3D_RETURN_TYPE_FLOAT,\n\tD3D10_RETURN_TYPE_MIXED\t= D3D_RETURN_TYPE_MIXED,\n\tD3D11_RETURN_TYPE_UNORM\t= D3D_RETURN_TYPE_UNORM,\n\tD3D11_RETURN_TYPE_SNORM\t= D3D_RETURN_TYPE_SNORM,\n\tD3D11_RETURN_TYPE_SINT\t= D3D_RETURN_TYPE_SINT,\n\tD3D11_RETURN_TYPE_UINT\t= D3D_RETURN_TYPE_UINT,\n\tD3D11_RETURN_TYPE_FLOAT\t= D3D_RETURN_TYPE_FLOAT,\n\tD3D11_RETURN_TYPE_MIXED\t= D3D_RETURN_TYPE_MIXED,\n\tD3D11_RETURN_TYPE_DOUBLE\t= D3D_RETURN_TYPE_DOUBLE,\n\tD3D11_RETURN_TYPE_CONTINUED\t= D3D_RETURN_TYPE_CONTINUED\n    } \tD3D_RESOURCE_RETURN_TYPE;\n\ntypedef \nenum D3D_REGISTER_COMPONENT_TYPE\n    {\tD3D_REGISTER_COMPONENT_UNKNOWN\t= 0,\n\tD3D_REGISTER_COMPONENT_UINT32\t= 1,\n\tD3D_REGISTER_COMPONENT_SINT32\t= 2,\n\tD3D_REGISTER_COMPONENT_FLOAT32\t= 3,\n\tD3D10_REGISTER_COMPONENT_UNKNOWN\t= D3D_REGISTER_COMPONENT_UNKNOWN,\n\tD3D10_REGISTER_COMPONENT_UINT32\t= D3D_REGISTER_COMPONENT_UINT32,\n\tD3D10_REGISTER_COMPONENT_SINT32\t= D3D_REGISTER_COMPONENT_SINT32,\n\tD3D10_REGISTER_COMPONENT_FLOAT32\t= D3D_REGISTER_COMPONENT_FLOAT32\n    } \tD3D_REGISTER_COMPONENT_TYPE;\n\ntypedef \nenum D3D_TESSELLATOR_DOMAIN\n    {\tD3D_TESSELLATOR_DOMAIN_UNDEFINED\t= 0,\n\tD3D_TESSELLATOR_DOMAIN_ISOLINE\t= 1,\n\tD3D_TESSELLATOR_DOMAIN_TRI\t= 2,\n\tD3D_TESSELLATOR_DOMAIN_QUAD\t= 3,\n\tD3D11_TESSELLATOR_DOMAIN_UNDEFINED\t= D3D_TESSELLATOR_DOMAIN_UNDEFINED,\n\tD3D11_TESSELLATOR_DOMAIN_ISOLINE\t= D3D_TESSELLATOR_DOMAIN_ISOLINE,\n\tD3D11_TESSELLATOR_DOMAIN_TRI\t= D3D_TESSELLATOR_DOMAIN_TRI,\n\tD3D11_TESSELLATOR_DOMAIN_QUAD\t= D3D_TESSELLATOR_DOMAIN_QUAD\n    } \tD3D_TESSELLATOR_DOMAIN;\n\ntypedef \nenum D3D_TESSELLATOR_PARTITIONING\n    {\tD3D_TESSELLATOR_PARTITIONING_UNDEFINED\t= 0,\n\tD3D_TESSELLATOR_PARTITIONING_INTEGER\t= 1,\n\tD3D_TESSELLATOR_PARTITIONING_POW2\t= 2,\n\tD3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD\t= 3,\n\tD3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN\t= 4,\n\tD3D11_TESSELLATOR_PARTITIONING_UNDEFINED\t= D3D_TESSELLATOR_PARTITIONING_UNDEFINED,\n\tD3D11_TESSELLATOR_PARTITIONING_INTEGER\t= D3D_TESSELLATOR_PARTITIONING_INTEGER,\n\tD3D11_TESSELLATOR_PARTITIONING_POW2\t= D3D_TESSELLATOR_PARTITIONING_POW2,\n\tD3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD\t= D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD,\n\tD3D11_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN\t= D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN\n    } \tD3D_TESSELLATOR_PARTITIONING;\n\ntypedef \nenum D3D_TESSELLATOR_OUTPUT_PRIMITIVE\n    {\tD3D_TESSELLATOR_OUTPUT_UNDEFINED\t= 0,\n\tD3D_TESSELLATOR_OUTPUT_POINT\t= 1,\n\tD3D_TESSELLATOR_OUTPUT_LINE\t= 2,\n\tD3D_TESSELLATOR_OUTPUT_TRIANGLE_CW\t= 3,\n\tD3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW\t= 4,\n\tD3D11_TESSELLATOR_OUTPUT_UNDEFINED\t= D3D_TESSELLATOR_OUTPUT_UNDEFINED,\n\tD3D11_TESSELLATOR_OUTPUT_POINT\t= D3D_TESSELLATOR_OUTPUT_POINT,\n\tD3D11_TESSELLATOR_OUTPUT_LINE\t= D3D_TESSELLATOR_OUTPUT_LINE,\n\tD3D11_TESSELLATOR_OUTPUT_TRIANGLE_CW\t= D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW,\n\tD3D11_TESSELLATOR_OUTPUT_TRIANGLE_CCW\t= D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW\n    } \tD3D_TESSELLATOR_OUTPUT_PRIMITIVE;\n\nDEFINE_GUID(WKPDID_D3DDebugObjectName,0x429b8c22,0x9188,0x4b0c,0x87,0x42,0xac,0xb0,0xbf,0x85,0xc2,0x00);\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3dcommon_0000_0001_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3dcommon_0000_0001_v0_0_s_ifspec;\n\n/* Additional Prototypes for ALL interfaces */\n\n/* end of Additional Prototypes */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n\n"
  },
  {
    "path": "Include/DShow.h",
    "content": "//------------------------------------------------------------------------------\n// File: DShow.h\n//\n// Desc: DirectShow top-level include file\n//\n// Copyright (c) 2000-2001, Microsoft Corporation.  All rights reserved.\n//------------------------------------------------------------------------------\n\n#ifndef __DSHOW_INCLUDED__\n#define __DSHOW_INCLUDED__\n\n///////////////////////////////////////////////////////////////////////////\n// Set up constants & pragmas for the compiler\n///////////////////////////////////////////////////////////////////////////\n#ifdef  _MSC_VER\n// disable some level-4 warnings, use #pragma warning(default:###) to re-enable\n#pragma warning(disable:4100) // warning C4100: unreferenced formal parameter\n#pragma warning(disable:4201) // warning C4201: nonstandard extension used : nameless struct/union\n#pragma warning(disable:4511) // warning C4511: copy constructor could not be generated\n#pragma warning(disable:4512) // warning C4512: assignment operator could not be generated\n#pragma warning(disable:4514) // warning C4514: \"unreferenced inline function has been removed\"\n\n#if _MSC_VER>=1100\n#define AM_NOVTABLE __declspec(novtable)\n#else\n#define AM_NOVTABLE\n#endif\n#endif  // MSC_VER\n\n///////////////////////////////////////////////////////////////////////////\n// Include standard Windows files\n///////////////////////////////////////////////////////////////////////////\n#include <windows.h>\n#include <windowsx.h>\n#include <olectl.h>\n#include <ddraw.h>\n#include <mmsystem.h>\n\n#ifndef NO_DSHOW_STRSAFE\n#define NO_SHLWAPI_STRFCNS\n#include <strsafe.h>  \n#endif\n\n#ifndef NUMELMS\n   #define NUMELMS(aa) (sizeof(aa)/sizeof((aa)[0]))\n#endif\n\n///////////////////////////////////////////////////////////////////////////\n// Include DirectShow include files\n///////////////////////////////////////////////////////////////////////////\n#include <strmif.h>     // Generated IDL header file for streams interfaces\n#include <amvideo.h>    // ActiveMovie video interfaces and definitions\n\n#ifdef DSHOW_USE_AMAUDIO\n#include <amaudio.h>    // ActiveMovie audio interfaces and definitions\n#endif\n\n#include <control.h>    // generated from control.odl\n#include <evcode.h>     // event code definitions\n#include <uuids.h>      // declaration of type GUIDs and well-known clsids\n#include <errors.h>     // HRESULT status and error definitions\n#include <edevdefs.h>   // External device control interface defines\n#include <audevcod.h>   // audio filter device error event codes\n#include <dvdevcod.h>   // DVD error event codes\n\n///////////////////////////////////////////////////////////////////////////\n// Define OLE Automation constants\n///////////////////////////////////////////////////////////////////////////\n#ifndef OATRUE\n#define OATRUE (-1)\n#endif // OATRUE\n#ifndef OAFALSE\n#define OAFALSE (0)\n#endif // OAFALSE\n\n///////////////////////////////////////////////////////////////////////////\n// Define Win64 interfaces if not already defined\n///////////////////////////////////////////////////////////////////////////\n\n// InterlockedExchangePointer\n#ifndef InterlockedExchangePointer\n#define InterlockedExchangePointer(Target, Value) \\\n   (PVOID)InterlockedExchange((PLONG)(Target), (LONG)(Value))\n#endif \n\n\n#endif // __DSHOW_INCLUDED__\n"
  },
  {
    "path": "Include/FXDLL.H",
    "content": "/*\n** Copyright (c) 1995, 1996, 3Dfx Interactive, Inc.\n** All Rights Reserved.\n**\n** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.;\n** the contents of this file may not be disclosed to third parties, copied or\n** duplicated in any form, in whole or in part, without the prior written\n** permission of 3Dfx Interactive, Inc.\n**\n** RESTRICTED RIGHTS LEGEND:\n** Use, duplication or disclosure by the Government is subject to restrictions\n** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data\n** and Computer Software clause at DFARS 252.227-7013, and/or in similar or\n** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished  -\n** rights reserved under the Copyright Laws of the United States.\n**\n** $Revision: 9 $\n** $Date: 7/24/98 1:37p $\n*/\n/* preprocessor defines for libraries to support DLL creation */\n\n/* in header file, use FX_ENTRY return-type FX_CALL function-name ( ... ) */\n/* in source file, use FX_EXPORT return-type FX_CSTYLE function-name (... ) */\n\n/* in source file, set FX_DLL_DEFINITION, include this file, then include\n   header file for library. */\n\n/* we need to use two macros per declaration/definition because MSVC\n   requires __stdcall and __declspec( dllexport ) be in different parts\n   of the prototype! */\n\n/* I use two sets in case we need to control declarations and definitions\n   differently.  If it turns out we don't, it should be easy to do a search\n   and replace to eliminate one set */\n\n/* NOTE: this header file may be included more than once, and FX_DLL_DEFINITION\n   may have changed, so we do not protect this with an #fndef __FXDLL_H__\n   statement like we normally would. */\n\n\n#ifdef FX_ENTRY\n#undef FX_ENTRY\n#endif\n\n#ifdef FX_CALL\n#undef FX_CALL\n#endif\n\n#ifdef FX_EXPORT\n#undef FX_EXPORT\n#endif\n\n#ifdef FX_CSTYLE\n#undef FX_CSTYLE\n#endif\n\n#if defined(FX_DLL_DEFINITION)\n  #if defined(FX_DLL_ENABLE)\n    #if defined(__MSC__)\n      #ifndef KERNEL\n        #define FX_ENTRY __declspec( dllexport )\n        #define FX_EXPORT __declspec( dllexport )\n      #else\n        #define FX_ENTRY\n        #define FX_EXPORT\n     #endif /* #ifndef KERNEL */\n     #define FX_CALL __stdcall\n     #define FX_CSTYLE __stdcall\n\n    #elif defined(__WATCOMC__)\n      #define FX_ENTRY\n      #define FX_CALL __stdcall __export\n\n      #define FX_EXPORT\n      #define FX_CSTYLE __stdcall __export\n\n    #else /* compiler */\n      #error define FX_ENTRY,FX_CALL & FX_EXPORT,FX_CSTYLE for your compiler\n    #endif /* compiler */\n\n  #else /* FX_DLL_ENABLE */\n    #define FX_ENTRY\n    #define FX_CALL __stdcall\n\n    #define FX_EXPORT\n    #define FX_CSTYLE __stdcall\n  #endif /* FX_DLL_ENABLE */\n\n#else /* FX_DLL_DEFINITION */\n  #define FX_ENTRY extern\n  #define FX_CALL __stdcall\n#endif /* FX_DLL_DEFINITION */\n\n/*\n * We don't want any of this DLL junk for DJGPP or UNIX\n * so undo what is done above.\n */\n#if defined(__DJGPP__) || defined(__unix__)\n  #ifdef FX_CALL\n    #undef FX_CALL\n  #endif\n\n  #ifdef FX_CSTYLE\n    #undef FX_CSTYLE\n  #endif\n\n  #ifdef FX_EXPORT\n    #undef FX_EXPORT\n  #endif\n\n  #ifdef FX_ENTRY\n    #undef FX_ENTRY\n  #endif\n\n  #define FX_CALL\n  #define FX_CSTYLE \n  #define FX_EXPORT\n  #define FX_ENTRY \n#endif\n\n#if defined (MSVC16)\n  #undef FX_CALL\n  #define FX_CALL\n#endif\n\n"
  },
  {
    "path": "Include/FXGLOB.H",
    "content": "/*\n** Copyright (c) 1995, 3Dfx Interactive, Inc.\n** All Rights Reserved.\n**\n** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.;\n** the contents of this file may not be disclosed to third parties, copied or\n** duplicated in any form, in whole or in part, without the prior written\n** permission of 3Dfx Interactive, Inc.\n**\n** RESTRICTED RIGHTS LEGEND:\n** Use, duplication or disclosure by the Government is subject to restrictions\n** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data\n** and Computer Software clause at DFARS 252.227-7013, and/or in similar or\n** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished  -\n** rights reserved under the Copyright Laws of the United States.\n**\n** $ Revision: $\n** $ Date: $\n**\n*/\n\n\n#ifndef _FXGLOB_H_\n#define _FXGLOB_H_\n\n\nvoid fxGlobify( int *argc, char ***argv );\n\n\n#endif\n"
  },
  {
    "path": "Include/FXOS.H",
    "content": "/*\n** Copyright (c) 1995, 3Dfx Interactive, Inc.\n** All Rights Reserved.\n**\n** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.;\n** the contents of this file may not be disclosed to third parties, copied or\n** duplicated in any form, in whole or in part, without the prior written\n** permission of 3Dfx Interactive, Inc.\n**\n** RESTRICTED RIGHTS LEGEND:\n** Use, duplication or disclosure by the Government is subject to restrictions\n** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data\n** and Computer Software clause at DFARS 252.227-7013, and/or in similar or\n** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished  -\n** rights reserved under the Copyright Laws of the United States.\n**\n** $ Revision: $\n** $ Date: $\n**\n*/\n\n\n#ifndef _FXOS_H_\n#define _FXOS_H_\n\n#include <stdio.h>\n\n#   ifdef __cplusplus\nextern \"C\" {\n#   endif\n\n#   ifdef WIN32\nvoid sleep(int secs);\n#define gethostname fxGethostname\n\nint gethostname(char *name, int namelen);\n\n#   endif\n\nfloat fxTime(void);\nfloat timer(int flag);\n\nFILE *fxFopenPath(const char *filename, const char *mode,\n\t\t\t\t\tconst char *path, const char **pprefix);\n\n#   ifdef __cplusplus\n}\n#   endif\n\n#endif\n"
  },
  {
    "path": "Include/MinHook.h",
    "content": "/*\n *  MinHook - The Minimalistic API Hooking Library for x64/x86\n *  Copyright (C) 2009-2014 Tsuda Kageyu.\n *  All rights reserved.\n *\n *  Redistribution and use in source and binary forms, with or without\n *  modification, are permitted provided that the following conditions\n *  are met:\n *\n *   1. Redistributions of source code must retain the above copyright\n *      notice, this list of conditions and the following disclaimer.\n *   2. Redistributions in binary form must reproduce the above copyright\n *      notice, this list of conditions and the following disclaimer in the\n *      documentation and/or other materials provided with the distribution.\n *\n *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n *  \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\n *  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n *  PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER\n *  OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#pragma once\n\n#if !(defined _M_IX86) && !(defined _M_X64)\n    #error MinHook supports only x86 and x64 systems.\n#endif\n\n#include <Windows.h>\n\n// MinHook Error Codes.\ntypedef enum MH_STATUS\n{\n    // Unknown error. Should not be returned.\n    MH_UNKNOWN = -1,\n\n    // Successful.\n    MH_OK = 0,\n\n    // MinHook is already initialized.\n    MH_ERROR_ALREADY_INITIALIZED,\n\n    // MinHook is not initialized yet, or already uninitialized.\n    MH_ERROR_NOT_INITIALIZED,\n\n    // The hook for the specified target function is already created.\n    MH_ERROR_ALREADY_CREATED,\n\n    // The hook for the specified target function is not created yet.\n    MH_ERROR_NOT_CREATED,\n\n    // The hook for the specified target function is already enabled.\n    MH_ERROR_ENABLED,\n\n    // The hook for the specified target function is not enabled yet, or already\n    // disabled.\n    MH_ERROR_DISABLED,\n\n    // The specified pointer is invalid. It points the address of non-allocated\n    // and/or non-executable region.\n    MH_ERROR_NOT_EXECUTABLE,\n\n    // The specified target function cannot be hooked.\n    MH_ERROR_UNSUPPORTED_FUNCTION,\n\n    // Failed to allocate memory.\n    MH_ERROR_MEMORY_ALLOC,\n\n    // Failed to change the memory protection.\n    MH_ERROR_MEMORY_PROTECT\n}\nMH_STATUS;\n\n// Can be passed as a parameter to MH_EnableHook, MH_DisableHook,\n// MH_QueueEnableHook or MH_QueueDisableHook.\n#define MH_ALL_HOOKS NULL\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n    // Initialize the MinHook library. You must call this function EXACTLY ONCE\n    // at the beginning of your program.\n    MH_STATUS WINAPI MH_Initialize(VOID);\n\n    // Uninitialize the MinHook library. You must call this function EXACTLY\n    // ONCE at the end of your program.\n    MH_STATUS WINAPI MH_Uninitialize(VOID);\n\n    // Creates a Hook for the specified target function, in disabled state.\n    // Parameters:\n    //   pTarget    [in]  A pointer to the target function, which will be\n    //                    overridden by the detour function.\n    //   pDetour    [in]  A pointer to the detour function, which will override\n    //                    the target function.\n    //   ppOriginal [out] A pointer to the trampoline function, which will be\n    //                    used to call the original target function.\n    //                    This parameter can be NULL.\n    MH_STATUS WINAPI MH_CreateHook(LPVOID pTarget, LPVOID pDetour, LPVOID *ppOriginal);\n\n    // Removes an already created hook.\n    // Parameters:\n    //   pTarget [in] A pointer to the target function.\n    MH_STATUS WINAPI MH_RemoveHook(LPVOID pTarget);\n\n    // Enables an already created hook.\n    // Parameters:\n    //   pTarget [in] A pointer to the target function.\n    //                If this parameter is MH_ALL_HOOKS, all created hooks are\n    //                enabled in one go.\n    MH_STATUS WINAPI MH_EnableHook(LPVOID pTarget);\n\n    // Disables an already created hook.\n    // Parameters:\n    //   pTarget [in] A pointer to the target function.\n    //                If this parameter is MH_ALL_HOOKS, all created hooks are\n    //                disabled in one go.\n    MH_STATUS WINAPI MH_DisableHook(LPVOID pTarget);\n\n    // Queues to enable an already created hook.\n    // Parameters:\n    //   pTarget [in] A pointer to the target function.\n    //                If this parameter is MH_ALL_HOOKS, all created hooks are\n    //                queued to be enabled.\n    MH_STATUS WINAPI MH_QueueEnableHook(LPVOID pTarget);\n\n    // Queues to disable an already created hook.\n    // Parameters:\n    //   pTarget [in] A pointer to the target function.\n    //                If this parameter is MH_ALL_HOOKS, all created hooks are\n    //                queued to be disabled.\n    MH_STATUS WINAPI MH_QueueDisableHook(LPVOID pTarget);\n\n    // Applies all queued changes in one go.\n    MH_STATUS WINAPI MH_ApplyQueued(VOID);\n\n#ifdef __cplusplus\n}\n#endif\n\n"
  },
  {
    "path": "Include/SST1VID.H",
    "content": "/*\n** Copyright (c) 1995, 3Dfx Interactive, Inc.\n** All Rights Reserved.\n**\n** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.;\n** the contents of this file may not be disclosed to third parties, copied or\n** duplicated in any form, in whole or in part, without the prior written\n** permission of 3Dfx Interactive, Inc.\n**\n** RESTRICTED RIGHTS LEGEND:\n** Use, duplication or disclosure by the Government is subject to restrictions\n** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data\n** and Computer Software clause at DFARS 252.227-7013, and/or in similar or\n** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -\n** rights reserved under the Copyright Laws of the United States.\n**\n** $Header: /devel/cvg/incsrc/SST1VID.H 6     7/24/98 1:41p Hohn $\n** $Log: /devel/cvg/incsrc/SST1VID.H $\n** \n** 6     7/24/98 1:41p Hohn\n** \n** 5     3/10/98 2:33p Psmith\n** separating cvg tree from h3/h4 trees\n * \n * 4     9/09/97 7:35p Sellers\n * Added 400x300 resolution\n * \n * 3     8/24/97 9:31a Sellers\n * moved new video timing to sst1vid.h\n * redefined 1600x1280 to be 1600x1200\n * \n * 2     6/05/97 11:14p Pgj\n * \n * 5     7/24/96 3:43p Sellers\n * added 512x384 @ 60 Hz for arcade monitors\n * added 512x256 @ 60 Hz for arcade monitors\n * \n * 4     7/18/96 10:58a Sellers\n * fixed FT and TF clock delay values for lower frequencies with\n * .5/.5 combos\n * \n * 3     6/18/96 6:54p Sellers\n * added sst1InitShutdownSli() to fix Glide Splash screen problems with\n * SLI\n * \n * 2     6/13/96 7:45p Sellers\n * added \"voodoo.ini\" support\n * added DirectX support\n * misc cleanup\n * \n * 2     6/11/96 1:43p Sellers\n * added support for 60, 75, 85, and 120 Hz refresh rates for \"most\"\n * resolutions\n * \n * 1     5/08/96 5:43p Paik\n * Video definitions\n*/\n#ifndef __SST1VID_H__\n#define __SST1VID_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Video defines */\n\ntypedef FxI32 GrScreenRefresh_t;\n#define GR_REFRESH_60Hz   0x0\n#define GR_REFRESH_70Hz   0x1\n#define GR_REFRESH_72Hz   0x2\n#define GR_REFRESH_75Hz   0x3\n#define GR_REFRESH_80Hz   0x4\n#define GR_REFRESH_90Hz   0x5\n#define GR_REFRESH_100Hz  0x6\n#define GR_REFRESH_85Hz   0x7\n#define GR_REFRESH_120Hz  0x8\n#define GR_REFRESH_NONE   0xff\n\ntypedef FxI32 GrScreenResolution_t;\n#define GR_RESOLUTION_320x200   0x0\n#define GR_RESOLUTION_320x240   0x1\n#define GR_RESOLUTION_400x256   0x2\n#define GR_RESOLUTION_512x384   0x3\n#define GR_RESOLUTION_640x200   0x4\n#define GR_RESOLUTION_640x350   0x5\n#define GR_RESOLUTION_640x400   0x6\n#define GR_RESOLUTION_640x480   0x7\n#define GR_RESOLUTION_800x600   0x8\n#define GR_RESOLUTION_960x720   0x9\n#define GR_RESOLUTION_856x480   0xa\n#define GR_RESOLUTION_512x256   0xb\n#define GR_RESOLUTION_1024x768  0xC\n#define GR_RESOLUTION_1280x1024 0xD\n#define GR_RESOLUTION_1600x1200 0xE\n#define GR_RESOLUTION_400x300   0xF\n#define GR_RESOLUTION_NONE      0xff\n\n#ifdef GR_RESOLUTION_MAX\n#undef GR_RESOLUTION_MAX\n#endif\n#ifdef GR_RESOLUTION_MIN\n#undef GR_RESOLUTION_MIN\n#endif\n#define GR_RESOLUTION_MIN       GR_RESOLUTION_320x200\n#define GR_RESOLUTION_MAX       GR_RESOLUTION_1600x1200\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __SST1VID_H__ */\n"
  },
  {
    "path": "Include/TlHelp32.h",
    "content": "/*****************************************************************************\\\n*                                                                             *\n* tlhelp32.h -  WIN32 tool help functions, types, and definitions             *\n*                                                                             *\n* Version 1.0                                                                 *\n*                                                                             *\n* NOTE: windows.h/winbase.h must be #included first                           *\n*                                                                             *\n* Copyright (c) Microsoft Corp.  All rights reserved.                         *\n*                                                                             *\n\\*****************************************************************************/\n\n#ifndef _INC_TOOLHELP32\n#define _INC_TOOLHELP32\n\n#if _MSC_VER > 1000\n#pragma once\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {            /* Assume C declarations for C++ */\n#endif  /* __cplusplus */\n\n#define MAX_MODULE_NAME32 255\n\n/****** Shapshot function **********************************************/\n\nHANDLE\nWINAPI\nCreateToolhelp32Snapshot(\n    DWORD dwFlags,\n    DWORD th32ProcessID\n    );\n\n//\n// The th32ProcessID argument is only used if TH32CS_SNAPHEAPLIST or\n// TH32CS_SNAPMODULE is specified. th32ProcessID == 0 means the current\n// process.\n//\n// NOTE that all of the snapshots are global except for the heap and module\n//      lists which are process specific. To enumerate the heap or module\n//      state for all WIN32 processes call with TH32CS_SNAPALL and the\n//      current process. Then for each process in the TH32CS_SNAPPROCESS\n//      list that isn't the current process, do a call with just\n//      TH32CS_SNAPHEAPLIST and/or TH32CS_SNAPMODULE.\n//\n// dwFlags\n//\n#define TH32CS_SNAPHEAPLIST 0x00000001\n#define TH32CS_SNAPPROCESS  0x00000002\n#define TH32CS_SNAPTHREAD   0x00000004\n#define TH32CS_SNAPMODULE   0x00000008\n#define TH32CS_SNAPMODULE32 0x00000010\n#define TH32CS_SNAPALL      (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)\n#define TH32CS_INHERIT      0x80000000\n//\n// Use CloseHandle to destroy the snapshot\n//\n\n/****** heap walking ***************************************************/\n\ntypedef struct tagHEAPLIST32\n{\n    SIZE_T dwSize;\n    DWORD  th32ProcessID;   // owning process\n    ULONG_PTR  th32HeapID;      // heap (in owning process's context!)\n    DWORD  dwFlags;\n} HEAPLIST32;\ntypedef HEAPLIST32 *  PHEAPLIST32;\ntypedef HEAPLIST32 *  LPHEAPLIST32;\n//\n// dwFlags\n//\n#define HF32_DEFAULT      1  // process's default heap\n#define HF32_SHARED       2  // is shared heap\n\nBOOL\nWINAPI\nHeap32ListFirst(\n    HANDLE hSnapshot,\n    LPHEAPLIST32 lphl\n    );\n\nBOOL\nWINAPI\nHeap32ListNext(\n    HANDLE hSnapshot,\n    LPHEAPLIST32 lphl\n    );\n\ntypedef struct tagHEAPENTRY32\n{\n    SIZE_T dwSize;\n    HANDLE hHandle;     // Handle of this heap block\n    ULONG_PTR dwAddress;   // Linear address of start of block\n    SIZE_T dwBlockSize; // Size of block in bytes\n    DWORD  dwFlags;\n    DWORD  dwLockCount;\n    DWORD  dwResvd;\n    DWORD  th32ProcessID;   // owning process\n    ULONG_PTR  th32HeapID;      // heap block is in\n} HEAPENTRY32;\ntypedef HEAPENTRY32 *  PHEAPENTRY32;\ntypedef HEAPENTRY32 *  LPHEAPENTRY32;\n//\n// dwFlags\n//\n#define LF32_FIXED    0x00000001\n#define LF32_FREE     0x00000002\n#define LF32_MOVEABLE 0x00000004\n\nBOOL\nWINAPI\nHeap32First(\n    LPHEAPENTRY32 lphe,\n    DWORD th32ProcessID,\n    ULONG_PTR th32HeapID\n    );\n\nBOOL\nWINAPI\nHeap32Next(\n    LPHEAPENTRY32 lphe\n    );\n\nBOOL\nWINAPI\nToolhelp32ReadProcessMemory(\n    DWORD   th32ProcessID,\n    LPCVOID lpBaseAddress,\n    LPVOID  lpBuffer,\n    SIZE_T  cbRead,\n    SIZE_T *lpNumberOfBytesRead\n    );\n\n/***** Process walking *************************************************/\n\ntypedef struct tagPROCESSENTRY32W\n{\n    DWORD   dwSize;\n    DWORD   cntUsage;\n    DWORD   th32ProcessID;          // this process\n    ULONG_PTR th32DefaultHeapID;\n    DWORD   th32ModuleID;           // associated exe\n    DWORD   cntThreads;\n    DWORD   th32ParentProcessID;    // this process's parent process\n    LONG    pcPriClassBase;         // Base priority of process's threads\n    DWORD   dwFlags;\n    WCHAR   szExeFile[MAX_PATH];    // Path\n} PROCESSENTRY32W;\ntypedef PROCESSENTRY32W *  PPROCESSENTRY32W;\ntypedef PROCESSENTRY32W *  LPPROCESSENTRY32W;\n\nBOOL\nWINAPI\nProcess32FirstW(\n    HANDLE hSnapshot,\n    LPPROCESSENTRY32W lppe\n    );\n\nBOOL\nWINAPI\nProcess32NextW(\n    HANDLE hSnapshot,\n    LPPROCESSENTRY32W lppe\n    );\n\ntypedef struct tagPROCESSENTRY32\n{\n    DWORD   dwSize;\n    DWORD   cntUsage;\n    DWORD   th32ProcessID;          // this process\n    ULONG_PTR th32DefaultHeapID;\n    DWORD   th32ModuleID;           // associated exe\n    DWORD   cntThreads;\n    DWORD   th32ParentProcessID;    // this process's parent process\n    LONG    pcPriClassBase;         // Base priority of process's threads\n    DWORD   dwFlags;\n    CHAR    szExeFile[MAX_PATH];    // Path\n} PROCESSENTRY32;\ntypedef PROCESSENTRY32 *  PPROCESSENTRY32;\ntypedef PROCESSENTRY32 *  LPPROCESSENTRY32;\n\nBOOL\nWINAPI\nProcess32First(\n    HANDLE hSnapshot,\n    LPPROCESSENTRY32 lppe\n    );\n\nBOOL\nWINAPI\nProcess32Next(\n    HANDLE hSnapshot,\n    LPPROCESSENTRY32 lppe\n    );\n\n#ifdef UNICODE\n#define Process32First Process32FirstW\n#define Process32Next Process32NextW\n#define PROCESSENTRY32 PROCESSENTRY32W\n#define PPROCESSENTRY32 PPROCESSENTRY32W\n#define LPPROCESSENTRY32 LPPROCESSENTRY32W\n#endif  // !UNICODE\n\n/***** Thread walking **************************************************/\n\ntypedef struct tagTHREADENTRY32\n{\n    DWORD   dwSize;\n    DWORD   cntUsage;\n    DWORD   th32ThreadID;       // this thread\n    DWORD   th32OwnerProcessID; // Process this thread is associated with\n    LONG    tpBasePri;\n    LONG    tpDeltaPri;\n    DWORD   dwFlags;\n} THREADENTRY32;\ntypedef THREADENTRY32 *  PTHREADENTRY32;\ntypedef THREADENTRY32 *  LPTHREADENTRY32;\n\nBOOL\nWINAPI\nThread32First(\n    HANDLE hSnapshot,\n    LPTHREADENTRY32 lpte\n    );\n\nBOOL\nWINAPI\nThread32Next(\n    HANDLE hSnapshot,\n    LPTHREADENTRY32 lpte\n    );\n\n/***** Module walking *************************************************/\n\ntypedef struct tagMODULEENTRY32W\n{\n    DWORD   dwSize;\n    DWORD   th32ModuleID;       // This module\n    DWORD   th32ProcessID;      // owning process\n    DWORD   GlblcntUsage;       // Global usage count on the module\n    DWORD   ProccntUsage;       // Module usage count in th32ProcessID's context\n    BYTE  * modBaseAddr;        // Base address of module in th32ProcessID's context\n    DWORD   modBaseSize;        // Size in bytes of module starting at modBaseAddr\n    HMODULE hModule;            // The hModule of this module in th32ProcessID's context\n    WCHAR   szModule[MAX_MODULE_NAME32 + 1];\n    WCHAR   szExePath[MAX_PATH];\n} MODULEENTRY32W;\ntypedef MODULEENTRY32W *  PMODULEENTRY32W;\ntypedef MODULEENTRY32W *  LPMODULEENTRY32W;\n\nBOOL\nWINAPI\nModule32FirstW(\n    HANDLE hSnapshot,\n    LPMODULEENTRY32W lpme\n    );\n\nBOOL\nWINAPI\nModule32NextW(\n    HANDLE hSnapshot,\n    LPMODULEENTRY32W lpme\n    );\n\n\ntypedef struct tagMODULEENTRY32\n{\n    DWORD   dwSize;\n    DWORD   th32ModuleID;       // This module\n    DWORD   th32ProcessID;      // owning process\n    DWORD   GlblcntUsage;       // Global usage count on the module\n    DWORD   ProccntUsage;       // Module usage count in th32ProcessID's context\n    BYTE  * modBaseAddr;        // Base address of module in th32ProcessID's context\n    DWORD   modBaseSize;        // Size in bytes of module starting at modBaseAddr\n    HMODULE hModule;            // The hModule of this module in th32ProcessID's context\n    char    szModule[MAX_MODULE_NAME32 + 1];\n    char    szExePath[MAX_PATH];\n} MODULEENTRY32;\ntypedef MODULEENTRY32 *  PMODULEENTRY32;\ntypedef MODULEENTRY32 *  LPMODULEENTRY32;\n\n//\n// NOTE CAREFULLY that the modBaseAddr and hModule fields are valid ONLY\n// in th32ProcessID's process context.\n//\n\nBOOL\nWINAPI\nModule32First(\n    HANDLE hSnapshot,\n    LPMODULEENTRY32 lpme\n    );\n\nBOOL\nWINAPI\nModule32Next(\n    HANDLE hSnapshot,\n    LPMODULEENTRY32 lpme\n    );\n\n#ifdef UNICODE\n#define Module32First Module32FirstW\n#define Module32Next Module32NextW\n#define MODULEENTRY32 MODULEENTRY32W\n#define PMODULEENTRY32 PMODULEENTRY32W\n#define LPMODULEENTRY32 LPMODULEENTRY32W\n#endif  // !UNICODE\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif // _INC_TOOLHELP32\n\n"
  },
  {
    "path": "Include/Vfw.h",
    "content": "#ifndef _VFW_H\n#define _VFW_H\n#if __GNUC__ >= 3\n#pragma GCC system_header\n#endif\n\n#ifndef _WINDOWS_H\n#include <windows.h>\n#endif\n#ifndef _MMSYSTEM_H\n#include <mmsystem.h>\n#endif\n#if !defined  (_OLE2_H) && !defined (__OBJC__)\n#include <ole2.h>\n#endif\n\n#define VFWAPI WINAPI\n#define VFWAPIV WINAPIV\n\n#include <pshpack8.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#define\tICERR_OK\t0\n#define\tICERR_DONTDRAW\t1\n#define\tICERR_NEWPALETTE\t2\n#define\tICERR_GOTOKEYFRAME\t3\n#define\tICERR_STOPDRAWING\t4\n#define\tICERR_UNSUPPORTED\t-1\n#define\tICERR_BADFORMAT\t-2\n#define\tICERR_MEMORY\t-3\n#define\tICERR_INTERNAL\t-4\n#define\tICERR_BADFLAGS\t-5\n#define\tICERR_BADPARAM\t-6\n#define\tICERR_BADSIZE\t-7\n#define\tICERR_BADHANDLE\t-8\n#define\tICERR_CANTUPDATE\t-9\n#define\tICERR_ABORT\t-10\n#define\tICERR_ERROR\t-100\n#define\tICERR_BADBITDEPTH\t-200\n#define\tICERR_BADIMAGESIZE\t-201\n#define\tICERR_CUSTOM\t-400\n#define ICCOMPRESSFRAMES_PADDING\t0x01\n#define\tICM_USER\t(DRV_USER+0x0000)\n#define\tICM_RESERVED_LOW\t(DRV_USER+0x1000)\n#define\tICM_RESERVED_HIGH\t(DRV_USER+0x2000)\n#define\tICM_RESERVED\tICM_RESERVED_LOW\n#define\tICM_GETSTATE\t(ICM_RESERVED+0)\n#define\tICM_SETSTATE\t(ICM_RESERVED+1)\n#define\tICM_GETINFO\t(ICM_RESERVED+2)\n#define\tICM_CONFIGURE\t(ICM_RESERVED+10)\n#define\tICM_ABOUT\t(ICM_RESERVED+11)\n#define\tICM_GETDEFAULTQUALITY\t(ICM_RESERVED+30)\n#define\tICM_GETQUALITY\t(ICM_RESERVED+31)\n#define\tICM_SETQUALITY\t(ICM_RESERVED+32)\n#define\tICM_SET\t(ICM_RESERVED+40)\n#define\tICM_GET\t(ICM_RESERVED+41)\n#define ICM_FRAMERATE\tmmioFOURCC('F','r','m','R')\n#define ICM_KEYFRAMERATE\tmmioFOURCC('K','e','y','R')\n#define\tICM_COMPRESS_GET_FORMAT\t(ICM_USER+4)\n#define\tICM_COMPRESS_GET_SIZE\t(ICM_USER+5)\n#define\tICM_COMPRESS_QUERY\t(ICM_USER+6)\n#define\tICM_COMPRESS_BEGIN\t(ICM_USER+7)\n#define\tICM_COMPRESS\t(ICM_USER+8)\n#define\tICM_COMPRESS_END\t(ICM_USER+9)\n#define\tICM_DECOMPRESS_GET_FORMAT\t(ICM_USER+10)\n#define\tICM_DECOMPRESS_QUERY\t(ICM_USER+11)\n#define\tICM_DECOMPRESS_BEGIN\t(ICM_USER+12)\n#define\tICM_DECOMPRESS\t(ICM_USER+13)\n#define\tICM_DECOMPRESS_END\t(ICM_USER+14)\n#define\tICM_DECOMPRESS_SET_PALETTE\t(ICM_USER+29)\n#define\tICM_DECOMPRESS_GET_PALETTE\t(ICM_USER+30)\n#define\tICM_DRAW_QUERY\t(ICM_USER+31)\n#define\tICM_DRAW_BEGIN\t(ICM_USER+15)\n#define\tICM_DRAW_GET_PALETTE\t(ICM_USER+16)\n#define\tICM_DRAW_START\t(ICM_USER+18)\n#define\tICM_DRAW_STOP\t(ICM_USER+19)\n#define\tICM_DRAW_END\t(ICM_USER+21)\n#define\tICM_DRAW_GETTIME\t(ICM_USER+32)\n#define\tICM_DRAW\t(ICM_USER+33)\n#define\tICM_DRAW_WINDOW\t(ICM_USER+34)\n#define\tICM_DRAW_SETTIME\t(ICM_USER+35)\n#define\tICM_DRAW_REALIZE\t(ICM_USER+36)\n#define\tICM_DRAW_FLUSH\t(ICM_USER+37)\n#define\tICM_DRAW_RENDERBUFFER\t(ICM_USER+38)\n#define\tICM_DRAW_START_PLAY\t(ICM_USER+39)\n#define\tICM_DRAW_STOP_PLAY\t(ICM_USER+40)\n#define\tICM_DRAW_SUGGESTFORMAT\t(ICM_USER+50)\n#define\tICM_DRAW_CHANGEPALETTE\t(ICM_USER+51)\n#define\tICM_GETBUFFERSWANTED\t(ICM_USER+41)\n#define\tICM_GETDEFAULTKEYFRAMERATE\t(ICM_USER+42)\n#define\tICM_DECOMPRESSEX_BEGIN\t(ICM_USER+60)\n#define\tICM_DECOMPRESSEX_QUERY\t(ICM_USER+61)\n#define\tICM_DECOMPRESSEX\t(ICM_USER+62)\n#define\tICM_DECOMPRESSEX_END\t(ICM_USER+63)\n#define\tICM_COMPRESS_FRAMES_INFO\t(ICM_USER+70)\n#define\tICM_SET_STATUS_PROC\t(ICM_USER+72)\n#define ICMF_CONFIGURE_QUERY\t0x01\n#define ICCOMPRESS_KEYFRAME\t0x01\n#define ICSTATUS_START\t0\n#define ICSTATUS_STATUS\t1\n#define ICSTATUS_END\t2\n#define ICSTATUS_ERROR\t3\n#define ICSTATUS_YIELD\t4\n#define\tICMODE_COMPRESS\t1\n#define\tICMODE_DECOMPRESS\t2\n#define\tICMODE_FASTDECOMPRESS\t3\n#define\tICMODE_QUERY\t4\n#define\tICMODE_FASTCOMPRESS\t5\n#define\tICMODE_DRAW\t8\n#define ICQUALITY_LOW\t0\n#define ICQUALITY_HIGH\t10000\n#define ICQUALITY_DEFAULT\t-1\n#define\tVIDCF_QUALITY\t0x01\n#define\tVIDCF_CRUNCH\t0x02\n#define\tVIDCF_TEMPORAL\t0x04\n#define\tVIDCF_COMPRESSFRAMES\t0x08\n#define\tVIDCF_DRAW\t0x10\n#define\tVIDCF_FASTTEMPORALC\t0x20\n#define\tVIDCF_FASTTEMPORALD\t0x80\n#define\tVIDCF_QUALITYTIME\t0x40\n#define\tVIDCF_FASTTEMPORAL\t(VIDCF_FASTTEMPORALC|VIDCF_FASTTEMPORALD)\n#define ICMF_ABOUT_QUERY\t0x01\n#define ICDECOMPRESS_HURRYUP\t0x80000000\n#define ICDECOMPRESS_UPDATE\t0x40000000\n#define ICDECOMPRESS_PREROLL\t0x20000000\n#define ICDECOMPRESS_NULLFRAME\t0x10000000\n#define ICDECOMPRESS_NOTKEYFRAME\t0x8000000\n#define ICDRAW_QUERY\t0x01L\n#define ICDRAW_FULLSCREEN\t0x02L\n#define ICDRAW_HDC\t0x04L\n#define ICDRAW_ANIMATE\t0x08L\n#define ICDRAW_CONTINUE\t0x10L\n#define ICDRAW_MEMORYDC\t0x20L\n#define ICDRAW_UPDATING\t0x40L\n#define ICDRAW_RENDER\t0x80L\n#define ICDRAW_BUFFER\t0x100L\n#define ICINSTALL_UNICODE\t0x8000\n#define ICINSTALL_FUNCTION\t0x01\n#define ICINSTALL_DRIVER\t0x02\n#define ICINSTALL_HDRV\t0x04\n#define ICINSTALL_DRIVERW\t0x8002\n#define ICDRAW_HURRYUP\t0x80000000L\n#define ICDRAW_UPDATE\t0x40000000L\n#define ICDRAW_PREROLL\t0x20000000L\n#define ICDRAW_NULLFRAME\t0x10000000L\n#define ICDRAW_NOTKEYFRAME\t0x8000000L\n#define ICMF_COMPVARS_VALID\t0x01\n#define ICMF_CHOOSE_KEYFRAME\t0x01\n#define ICMF_CHOOSE_DATARATE\t0x02\n#define ICMF_CHOOSE_PREVIEW\t0x04\n#define ICMF_CHOOSE_ALLCOMPRESSORS\t0x08\n#define ICTYPE_VIDEO\tmmioFOURCC('v','i','d','c')\n#define ICTYPE_AUDIO\tmmioFOURCC('a','u','d','c')\n#define formtypeAVI\tmmioFOURCC('A','V','I',' ')\n#define listtypeAVIHEADER\tmmioFOURCC('h','d','r','l')\n#define ckidAVIMAINHDR\tmmioFOURCC('a','v','i','h')\n#define listtypeSTREAMHEADER\tmmioFOURCC('s','t','r','l')\n#define ckidSTREAMHEADER\tmmioFOURCC('s','t','r','h')\n#define ckidSTREAMFORMAT\tmmioFOURCC('s','t','r','f')\n#define ckidSTREAMHANDLERDATA\tmmioFOURCC('s','t','r','d')\n#define ckidSTREAMNAME\tmmioFOURCC('s','t','r','n')\n#define listtypeAVIMOVIE\tmmioFOURCC('m','o','v','i')\n#define listtypeAVIRECORD\tmmioFOURCC('r','e','c',' ')\n#define ckidAVINEWINDEX\tmmioFOURCC('i', 'd', 'x', '1')\n#define streamtypeANY\t0UL\n#define streamtypeVIDEO\tmmioFOURCC('v','i','d','s')\n#define streamtypeAUDIO\tmmioFOURCC('a','u','d','s')\n#define streamtypeMIDI\tmmioFOURCC('m','i','d','s')\n#define streamtypeTEXT\tmmioFOURCC('t','x','t','s')\n#define cktypeDIBbits\taviTWOCC('d','b')\n#define cktypeDIBcompressed\taviTWOCC('d','c')\n#define cktypePALchange\taviTWOCC('p','c')\n#define cktypeWAVEbytes\taviTWOCC('w','b')\n#define ckidAVIPADDING\tmmioFOURCC('J','U','N','K')\n#define FromHex(n) (((n)>='A')?((n)+10-'A'):((n)-'0'))\n#define StreamFromFOURCC(fcc) ((WORD)((FromHex(LOBYTE(LOWORD(fcc)))<<4)+(FromHex(HIBYTE(LOWORD(fcc))))))\n#define TWOCCFromFOURCC(fcc) HIWORD(fcc)\n#define ToHex(n) ((BYTE)(((n)>9)?((n)-10+'A'):((n)+'0')))\n#define MAKEAVICKID(tcc, stream) MAKELONG((ToHex((stream)&0x0f)<<8)|(ToHex(((stream)&0xf0)>>4)),tcc)\n#define AVIF_HASINDEX\t0x10\n#define AVIF_MUSTUSEINDEX\t0x20\n#define AVIF_ISINTERLEAVED\t0x100\n#define AVIF_TRUSTCKTYPE\t0x800\n#define AVIF_WASCAPTUREFILE\t0x10000\n#define AVIF_COPYRIGHTED\t0x20000\n#define AVI_HEADERSIZE\t2048\n#define AVISF_DISABLED\t0x01\n#define AVISF_VIDEO_PALCHANGES\t0x10000\n#define AVIIF_LIST\t0x01\n#define AVIIF_TWOCC\t0x02\n#define AVIIF_KEYFRAME\t0x10\n#define AVIIF_NOTIME\t0x100\n#define AVIIF_COMPUSE\t0xfff0000\n#define AVIIF_KEYFRAME\t0x10\n#define\tAVIGETFRAMEF_BESTDISPLAYFMT\t1\n#define AVISTREAMINFO_DISABLED\t0x01\n#define AVISTREAMINFO_FORMATCHANGES\t0x10000\n#define AVIFILEINFO_HASINDEX\t0x10\n#define AVIFILEINFO_MUSTUSEINDEX\t0x20\n#define AVIFILEINFO_ISINTERLEAVED\t0x100\n#define AVIFILEINFO_TRUSTCKTYPE\t0x800\n#define AVIFILEINFO_WASCAPTUREFILE\t0x10000\n#define AVIFILEINFO_COPYRIGHTED\t0x20000\n#define AVIFILECAPS_CANREAD\t0x01\n#define AVIFILECAPS_CANWRITE\t0x02\n#define AVIFILECAPS_ALLKEYFRAMES\t0x10\n#define AVIFILECAPS_NOCOMPRESSION\t0x20\n#define AVICOMPRESSF_INTERLEAVE\t0x01\n#define AVICOMPRESSF_DATARATE\t0x02\n#define AVICOMPRESSF_KEYFRAMES\t0x04\n#define AVICOMPRESSF_VALID\t0x08\n#define FIND_DIR\t0x0000000fL\n#define FIND_NEXT\t0x00000001L\n#define FIND_PREV\t0x00000004L\n#define FIND_FROM_START\t0x00000008L\n#define FIND_TYPE\t0x000000f0L\n#define FIND_KEY\t0x00000010L\n#define FIND_ANY\t0x00000020L\n#define FIND_FORMAT\t0x00000040L\n#define FIND_RET\t0x0000f000L\n#define FIND_POS\t0x00000000L\n#define FIND_LENGTH\t0x00001000L\n#define FIND_OFFSET\t0x00002000L\n#define FIND_SIZE\t0x00003000L\n#define FIND_INDEX\t0x00004000L\n#define AVIERR_OK\t0\n#define MAKE_AVIERR(e)\tMAKE_SCODE(SEVERITY_ERROR,FACILITY_ITF,0x4000+e)\n#define AVIERR_UNSUPPORTED\tMAKE_AVIERR(101)\n#define AVIERR_BADFORMAT\tMAKE_AVIERR(102)\n#define AVIERR_MEMORY\tMAKE_AVIERR(103)\n#define AVIERR_INTERNAL\tMAKE_AVIERR(104)\n#define AVIERR_BADFLAGS\tMAKE_AVIERR(105)\n#define AVIERR_BADPARAM\tMAKE_AVIERR(106)\n#define AVIERR_BADSIZE\tMAKE_AVIERR(107)\n#define AVIERR_BADHANDLE\tMAKE_AVIERR(108)\n#define AVIERR_FILEREAD\tMAKE_AVIERR(109)\n#define AVIERR_FILEWRITE\tMAKE_AVIERR(110)\n#define AVIERR_FILEOPEN\tMAKE_AVIERR(111)\n#define AVIERR_COMPRESSOR\tMAKE_AVIERR(112)\n#define AVIERR_NOCOMPRESSOR\tMAKE_AVIERR(113)\n#define AVIERR_READONLY\tMAKE_AVIERR(114)\n#define AVIERR_NODATA\tMAKE_AVIERR(115)\n#define AVIERR_BUFFERTOOSMALL\tMAKE_AVIERR(116)\n#define AVIERR_CANTCOMPRESS\tMAKE_AVIERR(117)\n#define AVIERR_USERABORT\tMAKE_AVIERR(198)\n#define AVIERR_ERROR\tMAKE_AVIERR(199)\n#define MCIWNDOPENF_NEW\t0x0001\n#define MCIWNDF_NOAUTOSIZEWINDOW\t0x0001\n#define MCIWNDF_NOPLAYBAR\t0x0002\n#define MCIWNDF_NOAUTOSIZEMOVIE\t0x0004\n#define MCIWNDF_NOMENU\t0x0008\n#define MCIWNDF_SHOWNAME\t0x0010\n#define MCIWNDF_SHOWPOS\t0x0020\n#define MCIWNDF_SHOWMODE\t0x0040\n#define MCIWNDF_SHOWALL\t0x0070\n#define MCIWNDF_NOTIFYMODE\t0x0100\n#define MCIWNDF_NOTIFYPOS\t0x0200\n#define MCIWNDF_NOTIFYSIZE\t0x0400\n#define MCIWNDF_NOTIFYERROR\t0x1000\n#define MCIWNDF_NOTIFYALL\t0x1F00\n#define MCIWNDF_NOTIFYANSI\t0x0080\n#define MCIWNDF_NOTIFYMEDIAA\t0x0880\n#define MCIWNDF_NOTIFYMEDIAW\t0x0800\n#define MCIWNDF_RECORD\t0x2000\n#define MCIWNDF_NOERRORDLG\t0x4000\n#define MCIWNDF_NOOPEN\t0x8000\n#define MCIWNDM_GETDEVICEID\t(WM_USER + 100)\n#define MCIWNDM_GETSTART\t(WM_USER + 103)\n#define MCIWNDM_GETLENGTH\t(WM_USER + 104)\n#define MCIWNDM_GETEND\t(WM_USER + 105)\n#define MCIWNDM_EJECT\t(WM_USER + 107)\n#define MCIWNDM_SETZOOM\t(WM_USER + 108)\n#define MCIWNDM_GETZOOM\t(WM_USER + 109)\n#define MCIWNDM_SETVOLUME\t(WM_USER + 110)\n#define MCIWNDM_GETVOLUME\t(WM_USER + 111)\n#define MCIWNDM_SETSPEED\t(WM_USER + 112)\n#define MCIWNDM_GETSPEED\t(WM_USER + 113)\n#define MCIWNDM_SETREPEAT\t(WM_USER + 114)\n#define MCIWNDM_GETREPEAT\t(WM_USER + 115)\n#define MCIWNDM_REALIZE\t(WM_USER + 118)\n#define MCIWNDM_VALIDATEMEDIA\t(WM_USER + 121)\n#define MCIWNDM_PLAYFROM\t(WM_USER + 122)\n#define MCIWNDM_PLAYTO\t(WM_USER + 123)\n#define MCIWNDM_GETPALETTE\t(WM_USER + 126)\n#define MCIWNDM_SETPALETTE\t(WM_USER + 127)\n#define MCIWNDM_SETTIMERS\t(WM_USER + 129)\n#define MCIWNDM_SETACTIVETIMER\t(WM_USER + 130)\n#define MCIWNDM_SETINACTIVETIMER\t(WM_USER + 131)\n#define MCIWNDM_GETACTIVETIMER\t(WM_USER + 132)\n#define MCIWNDM_GETINACTIVETIMER\t(WM_USER + 133)\n#define MCIWNDM_CHANGESTYLES\t(WM_USER + 135)\n#define MCIWNDM_GETSTYLES\t(WM_USER + 136)\n#define MCIWNDM_GETALIAS\t(WM_USER + 137)\n#define MCIWNDM_PLAYREVERSE\t(WM_USER + 139)\n#define MCIWNDM_GET_SOURCE\t(WM_USER + 140)\n#define MCIWNDM_PUT_SOURCE\t(WM_USER + 141)\n#define MCIWNDM_GET_DEST\t(WM_USER + 142)\n#define MCIWNDM_PUT_DEST\t(WM_USER + 143)\n#define MCIWNDM_CAN_PLAY\t(WM_USER + 144)\n#define MCIWNDM_CAN_WINDOW\t(WM_USER + 145)\n#define MCIWNDM_CAN_RECORD\t(WM_USER + 146)\n#define MCIWNDM_CAN_SAVE\t(WM_USER + 147)\n#define MCIWNDM_CAN_EJECT\t(WM_USER + 148)\n#define MCIWNDM_CAN_CONFIG\t(WM_USER + 149)\n#define MCIWNDM_PALETTEKICK\t(WM_USER + 150)\n#define MCIWNDM_OPENINTERFACE\t(WM_USER + 151)\n#define MCIWNDM_SETOWNER\t(WM_USER + 152)\n#define MCIWNDM_SENDSTRINGA\t(WM_USER + 101)\n#define MCIWNDM_GETPOSITIONA\t(WM_USER + 102)\n#define MCIWNDM_GETMODEA\t(WM_USER + 106)\n#define MCIWNDM_SETTIMEFORMATA\t(WM_USER + 119)\n#define MCIWNDM_GETTIMEFORMATA\t(WM_USER + 120)\n#define MCIWNDM_GETFILENAMEA\t(WM_USER + 124)\n#define MCIWNDM_GETDEVICEA\t(WM_USER + 125)\n#define MCIWNDM_GETERRORA\t(WM_USER + 128)\n#define MCIWNDM_NEWA\t(WM_USER + 134)\n#define MCIWNDM_RETURNSTRINGA\t(WM_USER + 138)\n#define MCIWNDM_OPENA\t(WM_USER + 153)\n#define MCIWNDM_SENDSTRINGW\t(WM_USER + 201)\n#define MCIWNDM_GETPOSITIONW\t(WM_USER + 202)\n#define MCIWNDM_GETMODEW\t(WM_USER + 206)\n#define MCIWNDM_SETTIMEFORMATW\t(WM_USER + 219)\n#define MCIWNDM_GETTIMEFORMATW\t(WM_USER + 220)\n#define MCIWNDM_GETFILENAMEW\t(WM_USER + 224)\n#define MCIWNDM_GETDEVICEW\t(WM_USER + 225)\n#define MCIWNDM_GETERRORW\t(WM_USER + 228)\n#define MCIWNDM_NEWW\t(WM_USER + 234)\n#define MCIWNDM_RETURNSTRINGW\t(WM_USER + 238)\n#define MCIWNDM_OPENW\t(WM_USER + 252)\n#define MCIWNDM_NOTIFYMODE\t(WM_USER + 200)\n#define MCIWNDM_NOTIFYPOS\t(WM_USER + 201)\n#define MCIWNDM_NOTIFYSIZE\t(WM_USER + 202)\n#define MCIWNDM_NOTIFYMEDIA\t(WM_USER + 203)\n#define MCIWNDM_NOTIFYERROR\t(WM_USER + 205)\n#define MCIWND_START\t-1\n#define MCIWND_END\t-2\n#define DDF_UPDATE\t0x02\n#define DDF_SAME_HDC\t0x04\n#define DDF_SAME_DRAW\t0x08\n#define DDF_DONTDRAW\t0x10\n#define DDF_ANIMATE\t0x20\n#define DDF_BUFFER\t0x40\n#define DDF_JUSTDRAWIT\t0x80\n#define DDF_FULLSCREEN\t0x100\n#define DDF_BACKGROUNDPAL\t0x200\n#define DDF_NOTKEYFRAME\t0x400\n#define DDF_HURRYUP\t0x800\n#define DDF_HALFTONE\t0x1000\n#define DDF_PREROLL\tDDF_DONTDRAW\n#define DDF_SAME_DIB\tDDF_SAME_DRAW\n#define DDF_SAME_SIZE\tDDF_SAME_DRAW\n#define PD_CAN_DRAW_DIB\t0x01\n#define PD_CAN_STRETCHDIB\t0x02\n#define PD_STRETCHDIB_1_1_OK\t0x04\n#define PD_STRETCHDIB_1_2_OK\t0x08\n#define PD_STRETCHDIB_1_N_OK\t0x10\n#ifndef mmioFOURCC\n#define mmioFOURCC(c0,c1,c2,c3) ((DWORD)(BYTE)(c0)|((DWORD)(BYTE)(c1)<<8)|((DWORD)(BYTE)(c2)<<16)|((DWORD)(BYTE)(c3)<<24))\n#endif\n#ifndef aviTWOCC\n#define aviTWOCC(ch0,ch1) ((WORD)(BYTE)(ch0)|((WORD)(BYTE)(ch1)<<8))\n#endif\n\n#ifndef RC_INVOKED\nDECLARE_HANDLE(HIC);\nDECLARE_HANDLE(HDRAWDIB);\ntypedef WORD TWOCC;\ntypedef BOOL (CALLBACK *AVISAVECALLBACK)(INT);\ntypedef struct {\n\tDWORD dwSize;\n\tDWORD fccType;\n\tDWORD fccHandler;\n\tDWORD dwVersion;\n\tDWORD dwFlags;\n\tLRESULT dwError;\n\tLPVOID pV1Reserved;\n\tLPVOID pV2Reserved;\n\tDWORD dnDevNode;\n} ICOPEN,*LPICOPEN;\ntypedef struct {\n\tDWORD dwFlags;\n\tLPBITMAPINFOHEADER lpbiOutput;\n\tLPVOID lpOutput;\n\tLPBITMAPINFOHEADER lpbiInput;\n\tLPVOID lpInput;\n\tLPDWORD lpckid;\n\tLPDWORD lpdwFlags;\n\tLONG lFrameNum;\n\tDWORD dwFrameSize;\n\tDWORD dwQuality;\n\tLPBITMAPINFOHEADER lpbiPrev;\n\tLPVOID lpPrev;\n} ICCOMPRESS;\ntypedef struct {\n\tDWORD dwFlags;\n\tLPBITMAPINFOHEADER lpbiOutput;\n\tLPARAM lOutput;\n\tLPBITMAPINFOHEADER lpbiInput;\n\tLPARAM lInput;\n\tLONG lStartFrame;\n\tLONG lFrameCount;\n\tLONG lQuality;\n\tLONG lDataRate;\n\tLONG lKeyRate;\n\tDWORD dwRate;\n\tDWORD dwScale;\n\tDWORD dwOverheadPerFrame;\n\tDWORD dwReserved2;\n\tLONG (CALLBACK *GetData)(LPARAM,LONG,LPVOID,LONG);\n\tLONG (CALLBACK *PutData)(LPARAM,LONG,LPVOID,LONG);\n} ICCOMPRESSFRAMES;\ntypedef struct {\n\tDWORD dwFlags;\n\tLPARAM lParam;\n\tLONG (CALLBACK *Status)(LPARAM,UINT,LONG);\n} ICSETSTATUSPROC;\ntypedef struct {\n\tDWORD dwSize;\n\tDWORD fccType;\n\tDWORD fccHandler;\n\tDWORD dwFlags;\n\tDWORD dwVersion;\n\tDWORD dwVersionICM;\n\tWCHAR szName[16];\n\tWCHAR szDescription[128];\n\tWCHAR szDriver[128];\n} ICINFO;\ntypedef struct {\n\tDWORD dwFlags;\n\tLPBITMAPINFOHEADER lpbiInput;\n\tLPVOID lpInput;\n\tLPBITMAPINFOHEADER lpbiOutput;\n\tLPVOID lpOutput;\n\tDWORD ckid;\n} ICDECOMPRESS;\ntypedef struct {\n\tDWORD dwFlags;\n\tLPBITMAPINFOHEADER lpbiSrc;\n\tLPVOID lpSrc;\n\tLPBITMAPINFOHEADER lpbiDst;\n\tLPVOID lpDst;\n\tINT xDst;\n\tINT yDst;\n\tINT dxDst;\n\tINT dyDst;\n\tINT xSrc;\n\tINT ySrc;\n\tINT dxSrc;\n\tINT dySrc;\n} ICDECOMPRESSEX;\ntypedef struct {\n\tDWORD dwFlags;\n\tLPBITMAPINFOHEADER lpbiIn;\n\tLPBITMAPINFOHEADER lpbiSuggest;\n\tINT dxSrc;\n\tINT dySrc;\n\tINT dxDst;\n\tINT dyDst;\n\tHIC hicDecompressor;\n} ICDRAWSUGGEST;\ntypedef struct {\n\tDWORD dwFlags;\n\tINT iStart;\n\tINT iLen;\n\tLPPALETTEENTRY lppe;\n} ICPALETTE;\ntypedef struct {\n\tDWORD dwFlags;\n\tHPALETTE hpal;\n\tHWND hwnd;\n\tHDC hdc;\n\tINT xDst;\n\tINT yDst;\n\tINT dxDst;\n\tINT dyDst;\n\tLPBITMAPINFOHEADER lpbi;\n\tINT xSrc;\n\tINT ySrc;\n\tINT dxSrc;\n\tINT dySrc;\n\tDWORD dwRate;\n\tDWORD dwScale;\n} ICDRAWBEGIN;\ntypedef struct {\n\tDWORD dwFlags;\n\tLPVOID lpFormat;\n\tLPVOID lpData;\n\tDWORD cbData;\n\tLONG lTime;\n} ICDRAW;\ntypedef struct {\n\tLONG cbSize;\n\tDWORD dwFlags;\n\tHIC hic;\n\tDWORD fccType;\n\tDWORD fccHandler;\n\tLPBITMAPINFO lpbiIn;\n\tLPBITMAPINFO lpbiOut;\n\tLPVOID lpBitsOut;\n\tLPVOID lpBitsPrev;\n\tLONG lFrame;\n\tLONG lKey;\n\tLONG lDataRate;\n\tLONG lQ;\n\tLONG lKeyCount;\n\tLPVOID lpState;\n\tLONG cbState;\n} COMPVARS, *PCOMPVARS;\ntypedef struct _MainAVIHeader\n{\n\tDWORD dwMicroSecPerFrame;\n\tDWORD dwMaxBytesPerSec;\n\tDWORD dwPaddingGranularity;\n\tDWORD dwFlags;\n\tDWORD dwTotalFrames;\n\tDWORD dwInitialFrames;\n\tDWORD dwStreams;\n\tDWORD dwSuggestedBufferSize;\n\tDWORD dwWidth;\n\tDWORD dwHeight;\n\tDWORD dwReserved[4];\n} MainAVIHeader;\ntypedef struct {\n\tFOURCC fccType;\n\tFOURCC fccHandler;\n\tDWORD dwFlags;\n\tWORD wPriority;\n\tWORD wLanguage;\n\tDWORD dwInitialFrames;\n\tDWORD dwScale;\n\tDWORD dwRate;\n\tDWORD dwStart;\n\tDWORD dwLength;\n\tDWORD dwSuggestedBufferSize;\n\tDWORD dwQuality;\n\tDWORD dwSampleSize;\n\tRECT rcFrame;\n} AVIStreamHeader;\ntypedef struct _AVIINDEXENTRY {\n\tDWORD ckid;\n\tDWORD dwFlags;\n\tDWORD dwChunkOffset;\n\tDWORD dwChunkLength;\n} AVIINDEXENTRY;\ntypedef struct _AVIPALCHANGE {\n\tBYTE bFirstEntry;\n\tBYTE bNumEntries;\n\tWORD wFlags;\n\tPALETTEENTRY peNew[1];\n} AVIPALCHANGE;\ntypedef struct _AVISTREAMINFOA {\n\tDWORD fccType;\n\tDWORD fccHandler;\n\tDWORD dwFlags;\n\tDWORD dwCaps;\n\tWORD wPriority;\n\tWORD wLanguage;\n\tDWORD dwScale;\n\tDWORD dwRate;\n\tDWORD dwStart;\n\tDWORD dwLength;\n\tDWORD dwInitialFrames;\n\tDWORD dwSuggestedBufferSize;\n\tDWORD dwQuality;\n\tDWORD dwSampleSize;\n\tRECT rcFrame;\n\tDWORD dwEditCount;\n\tDWORD dwFormatChangeCount;\n\tCHAR szName[64];\n} AVISTREAMINFOA, * LPAVISTREAMINFOA, *PAVISTREAMINFOA;\ntypedef struct _AVISTREAMINFOW {\n\tDWORD fccType;\n\tDWORD fccHandler;\n\tDWORD dwFlags;\n\tDWORD dwCaps;\n\tWORD wPriority;\n\tWORD wLanguage;\n\tDWORD dwScale;\n\tDWORD dwRate;\n\tDWORD dwStart;\n\tDWORD dwLength;\n\tDWORD dwInitialFrames;\n\tDWORD dwSuggestedBufferSize;\n\tDWORD dwQuality;\n\tDWORD dwSampleSize;\n\tRECT rcFrame;\n\tDWORD dwEditCount;\n\tDWORD dwFormatChangeCount;\n\tWCHAR szName[64];\n} AVISTREAMINFOW, * LPAVISTREAMINFOW, *PAVISTREAMINFOW;\ntypedef struct _AVIFILEINFOW {\n\tDWORD dwMaxBytesPerSec;\n\tDWORD dwFlags;\n\tDWORD dwCaps;\n\tDWORD dwStreams;\n\tDWORD dwSuggestedBufferSize;\n\tDWORD dwWidth;\n\tDWORD dwHeight;\n\tDWORD dwScale;\n\tDWORD dwRate;\n\tDWORD dwLength;\n\tDWORD dwEditCount;\n\tWCHAR szFileType[64];\n} AVIFILEINFOW, *LPAVIFILEINFOW, *PAVIFILEINFOW;\ntypedef struct _AVIFILEINFOA {\n\tDWORD dwMaxBytesPerSec;\n\tDWORD dwFlags;\n\tDWORD dwCaps;\n\tDWORD dwStreams;\n\tDWORD dwSuggestedBufferSize;\n\tDWORD dwWidth;\n\tDWORD dwHeight;\n\tDWORD dwScale;\n\tDWORD dwRate;\n\tDWORD dwLength;\n\tDWORD dwEditCount;\n\tCHAR szFileType[64];\n} AVIFILEINFOA, *LPAVIFILEINFOA, *PAVIFILEINFOA;\ntypedef struct _AVICOMPRESSOPTIONS {\n\tDWORD fccType;\n\tDWORD fccHandler;\n\tDWORD dwKeyFrameEvery;\n\tDWORD dwQuality;\n\tDWORD dwBytesPerSecond;\n\tDWORD dwFlags;\n\tLPVOID lpFormat;\n\tDWORD cbFormat;\n\tLPVOID lpParms;\n\tDWORD cbParms;\n\tDWORD dwInterleaveEvery;\n} AVICOMPRESSOPTIONS, *LPAVICOMPRESSOPTIONS,*PAVICOMPRESSOPTIONS;\n\n#if !defined (__OBJC__)\n#define DEFINE_AVIGUID(name,l,w1,w2) DEFINE_GUID(name,l,w1,w2,0xC0,0,0,0,0,0,0,0x46)\nDEFINE_AVIGUID(IID_IAVIFile,0x00020020,0,0);\nDEFINE_AVIGUID(IID_IAVIStream,0x00020021,0,0);\nDEFINE_AVIGUID(IID_IAVIStreaming,0x00020022,0,0);\nDEFINE_AVIGUID(IID_IGetFrame,0x00020023,0,0);\nDEFINE_AVIGUID(IID_IAVIEditStream,0x00020024,0,0);\nDEFINE_AVIGUID(CLSID_AVIFile,0x00020000,0,0);\n\n#undef INTERFACE\n#define INTERFACE IAVIStream\nDECLARE_INTERFACE_(IAVIStream, IUnknown)\n{\n\tSTDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;\n\tSTDMETHOD_(ULONG,AddRef)(THIS) PURE;\n\tSTDMETHOD_(ULONG,Release)(THIS) PURE;\n\tSTDMETHOD(Create)(THIS_ LPARAM,LPARAM) PURE;\n\tSTDMETHOD(Info)(THIS_ AVISTREAMINFOW*,LONG) PURE;\n\tSTDMETHOD_(LONG,FindSample)(THIS_ LONG,LONG) PURE;\n\tSTDMETHOD(ReadFormat)(THIS_ LONG,LPVOID,LONG*) PURE;\n\tSTDMETHOD(SetFormat)(THIS_ LONG,LPVOID,LONG) PURE;\n\tSTDMETHOD(Read)(THIS_ LONG,LONG,LPVOID,LONG,LONG*,LONG*) PURE;\n\tSTDMETHOD(Write)(THIS_ LONG,LONG,LPVOID,LONG,DWORD,LONG*,LONG*) PURE;\n\tSTDMETHOD(Delete)(THIS_ LONG,LONG) PURE;\n\tSTDMETHOD(ReadData)(THIS_ DWORD,LPVOID,LONG*) PURE;\n\tSTDMETHOD(WriteData)(THIS_ DWORD,LPVOID,LONG) PURE;\n\tSTDMETHOD(SetInfo)(THIS_ AVISTREAMINFOW*,LONG) PURE;\n};\ntypedef IAVIStream *PAVISTREAM;\n\n#undef INTERFACE\n#define INTERFACE IAVIStreaming\nDECLARE_INTERFACE_(IAVIStreaming, IUnknown)\n{\n\tSTDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;\n\tSTDMETHOD_(ULONG,AddRef)(THIS) PURE;\n\tSTDMETHOD_(ULONG,Release)(THIS) PURE;\n\tSTDMETHOD(Begin)(THIS_ LONG,LONG,LONG) PURE;\t \n\tSTDMETHOD(End)(THIS) PURE;\n};\ntypedef IAVIStreaming *PAVISTREAMING;\n\n#undef INTERFACE\n#define INTERFACE IAVIEditStream\nDECLARE_INTERFACE_(IAVIEditStream, IUnknown)\n{\n\tSTDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;\n\tSTDMETHOD_(ULONG,AddRef)(THIS) PURE;\n\tSTDMETHOD_(ULONG,Release)(THIS) PURE;\n\tSTDMETHOD(Cut)(THIS_ LONG*,LONG*,PAVISTREAM*) PURE;\n\tSTDMETHOD(Copy)(THIS_ LONG*,LONG*,PAVISTREAM*) PURE;\n\tSTDMETHOD(Paste)(THIS_ LONG*,LONG*,PAVISTREAM,LONG,LONG) PURE;\n\tSTDMETHOD(Clone)(THIS_ PAVISTREAM*) PURE;\n\tSTDMETHOD(SetInfo)(THIS_ LPAVISTREAMINFOW,LONG) PURE;\n};\ntypedef IAVIEditStream *PAVIEDITSTREAM;\n\n#undef INTERFACE\n#define INTERFACE IAVIFile\nDECLARE_INTERFACE_(IAVIFile, IUnknown)\n{\n\tSTDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;\n\tSTDMETHOD_(ULONG,AddRef)(THIS) PURE;\n\tSTDMETHOD_(ULONG,Release)(THIS) PURE;\n\tSTDMETHOD(Info)(THIS_ AVIFILEINFOW*,LONG) PURE;\n\tSTDMETHOD(GetStream)(THIS_ PAVISTREAM*,DWORD,LONG) PURE;\n\tSTDMETHOD(CreateStream)(THIS_ PAVISTREAM*,AVISTREAMINFOW*) PURE;\n\tSTDMETHOD(WriteData)(THIS_ DWORD,LPVOID,LONG) PURE;\n\tSTDMETHOD(ReadData)(THIS_ DWORD,LPVOID,LONG*) PURE;\n\tSTDMETHOD(EndRecord)(THIS) PURE;\n\tSTDMETHOD(DeleteStream)(THIS_ DWORD,LONG) PURE;\n};\ntypedef IAVIFile *PAVIFILE;\n\n#undef INTERFACE\n#define INTERFACE IGetFrame\nDECLARE_INTERFACE_(IGetFrame, IUnknown)\n{\n\tSTDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;\n\tSTDMETHOD_(ULONG,AddRef)(THIS) PURE;\n\tSTDMETHOD_(ULONG,Release)(THIS) PURE;\n\tSTDMETHOD_(LPVOID,GetFrame)(THIS_ LONG) PURE;\n\tSTDMETHOD(Begin)(THIS_ LONG,LONG,LONG) PURE;\n\tSTDMETHOD(End)(THIS) PURE;\n\tSTDMETHOD(SetFormat)(THIS_ LPBITMAPINFOHEADER,LPVOID,INT,INT,INT,INT) PURE;\n};\ntypedef IGetFrame *PGETFRAME;\n#endif /* !defined (__OBJC__) */\n\nDWORD VFWAPI VideoForWindowsVersion(VOID);\nLONG VFWAPI InitVFW(VOID);\nLONG VFWAPI TermVFW(VOID);\nDWORD VFWAPIV ICCompress(HIC,DWORD,LPBITMAPINFOHEADER,LPVOID,LPBITMAPINFOHEADER,LPVOID,LPDWORD,LPDWORD,LONG,DWORD,DWORD,LPBITMAPINFOHEADER,LPVOID);\nDWORD VFWAPIV ICDecompress(HIC,DWORD,LPBITMAPINFOHEADER,LPVOID,LPBITMAPINFOHEADER,LPVOID);\nLRESULT\tVFWAPI ICSendMessage(HIC,UINT,DWORD,DWORD);\nHANDLE VFWAPI ICImageCompress(HIC,UINT,LPBITMAPINFO,LPVOID,LPBITMAPINFO,LONG,LONG*);\nHANDLE VFWAPI ICImageDecompress(HIC,UINT,LPBITMAPINFO,LPVOID,LPBITMAPINFO);\nBOOL VFWAPI ICInfo(DWORD,DWORD,ICINFO*);\nBOOL VFWAPI ICInstall(DWORD,DWORD,LPARAM,LPSTR,UINT);\nBOOL VFWAPI ICRemove(DWORD,DWORD,UINT);\nLRESULT VFWAPI ICGetInfo(HIC,ICINFO*,DWORD);\nHIC VFWAPI ICOpen(DWORD,DWORD,UINT);\nHIC VFWAPI ICOpenFunction(DWORD,DWORD,UINT,FARPROC);\nLRESULT VFWAPI ICClose(HIC hic);\nHIC VFWAPI ICLocate(DWORD,DWORD,LPBITMAPINFOHEADER,LPBITMAPINFOHEADER,WORD);\nHIC VFWAPI ICGetDisplayFormat(HIC,LPBITMAPINFOHEADER,LPBITMAPINFOHEADER,INT,INT,INT);\nDWORD VFWAPIV ICDrawBegin(HIC,DWORD,HPALETTE,HWND,HDC,INT,INT,INT,INT,LPBITMAPINFOHEADER,INT,INT,INT,INT,DWORD,DWORD);\nDWORD VFWAPIV ICDraw(HIC,DWORD,LPVOID,LPVOID,DWORD,LONG);\nBOOL VFWAPI ICCompressorChoose(HWND,UINT,LPVOID,LPVOID,PCOMPVARS,LPSTR);\nBOOL VFWAPI ICSeqCompressFrameStart(PCOMPVARS,LPBITMAPINFO);\nvoid VFWAPI ICSeqCompressFrameEnd(PCOMPVARS);\nLPVOID VFWAPI ICSeqCompressFrame(PCOMPVARS,UINT,LPVOID,BOOL*,LONG*);\nvoid VFWAPI ICCompressorFree(PCOMPVARS);\n#if !defined (__OBJC__)\nULONG WINAPI AVIStreamAddRef(PAVISTREAM);\nULONG WINAPI AVIStreamRelease(PAVISTREAM);\nHRESULT WINAPI AVIStreamCreate(PAVISTREAM*,LONG,LONG,CLSID*);\nHRESULT WINAPI AVIStreamInfoA(PAVISTREAM,AVISTREAMINFOA*,LONG);\nHRESULT WINAPI AVIStreamInfoW(PAVISTREAM,AVISTREAMINFOW*,LONG);\nHRESULT WINAPI AVIStreamFindSample(PAVISTREAM,LONG,DWORD);\nHRESULT WINAPI AVIStreamReadFormat(PAVISTREAM,LONG,LPVOID,LONG*);\nHRESULT WINAPI AVIStreamSetFormat(PAVISTREAM,LONG,LPVOID,LONG);\nHRESULT WINAPI AVIStreamRead(PAVISTREAM,LONG,LONG,LPVOID,LONG,LONG*,LONG*);\nHRESULT WINAPI AVIStreamWrite(PAVISTREAM,LONG,LONG,LPVOID,LONG,DWORD,LONG*,LONG*);\nHRESULT WINAPI AVIStreamReadData(PAVISTREAM,DWORD,LPVOID,LONG*);\nHRESULT WINAPI AVIStreamWriteData(PAVISTREAM,DWORD,LPVOID,LONG);\nPGETFRAME WINAPI AVIStreamGetFrameOpen(PAVISTREAM,LPBITMAPINFOHEADER);\nLPVOID WINAPI AVIStreamGetFrame(PGETFRAME,LONG);\nHRESULT WINAPI AVIStreamGetFrameClose(PGETFRAME);\nHRESULT WINAPI AVIMakeCompressedStream(PAVISTREAM*,PAVISTREAM,AVICOMPRESSOPTIONS*,CLSID*);\nHRESULT WINAPI AVIMakeFileFromStreams(PAVIFILE*,INT,PAVISTREAM*);\nHRESULT WINAPI AVIStreamOpenFromFileA(PAVISTREAM*,LPCSTR,DWORD,LONG,UINT,CLSID*);\nHRESULT WINAPI AVIStreamOpenFromFileW(PAVISTREAM*,LPCWSTR,DWORD,LONG,UINT,CLSID*);\nHRESULT WINAPI AVIBuildFilterA(LPSTR,LONG,BOOL);\nHRESULT WINAPI AVIBuildFilterW(LPWSTR,LONG,BOOL);\nBOOL WINAPI AVISaveOptions(HWND,UINT,INT,PAVISTREAM*,LPAVICOMPRESSOPTIONS*);\nHRESULT WINAPI AVISaveOptionsFree(INT,LPAVICOMPRESSOPTIONS*);\nHRESULT WINAPI AVISaveVA(LPCSTR,CLSID*,AVISAVECALLBACK,INT,PAVISTREAM*,LPAVICOMPRESSOPTIONS*);\nHRESULT WINAPI AVISaveVW(LPCWSTR,CLSID*,AVISAVECALLBACK,INT,PAVISTREAM*,LPAVICOMPRESSOPTIONS*);\nLONG WINAPI AVIStreamStart(PAVISTREAM);\nLONG WINAPI AVIStreamLength(PAVISTREAM);\nLONG WINAPI AVIStreamSampleToTime(PAVISTREAM,LONG);\nLONG WINAPI AVIStreamTimeToSample(PAVISTREAM,LONG);\nHRESULT WINAPI CreateEditableStream(PAVISTREAM*,PAVISTREAM);\nHRESULT WINAPI EditStreamClone(PAVISTREAM,PAVISTREAM*);\nHRESULT WINAPI EditStreamCopy(PAVISTREAM,LONG*,LONG*,PAVISTREAM*);\nHRESULT WINAPI EditStreamCut(PAVISTREAM,LONG*,LONG*,PAVISTREAM*);\nHRESULT WINAPI EditStreamPaste(PAVISTREAM,LONG*,LONG*,PAVISTREAM,LONG,LONG);\nHRESULT WINAPI EditStreamSetInfoA(PAVISTREAM,LPAVISTREAMINFOA,LONG);\nHRESULT WINAPI EditStreamSetInfoW(PAVISTREAM,LPAVISTREAMINFOW,LONG);\nHRESULT WINAPI EditStreamSetNameA(PAVISTREAM,LPCSTR);\nHRESULT WINAPI EditStreamSetNameW(PAVISTREAM,LPCWSTR);\nHRESULT WINAPI CreateEditableStream(PAVISTREAM*,PAVISTREAM);\nHRESULT WINAPI EditStreamClone(PAVISTREAM,PAVISTREAM*);\nHRESULT WINAPI EditStreamCopy(PAVISTREAM,LONG*,LONG*,PAVISTREAM*);\nHRESULT WINAPI EditStreamCut(PAVISTREAM,LONG*,LONG*,PAVISTREAM*);\nHRESULT WINAPI EditStreamPaste(PAVISTREAM,LONG*,LONG*,PAVISTREAM,LONG,LONG);\nHRESULT WINAPI EditStreamSetInfoA(PAVISTREAM,LPAVISTREAMINFOA,LONG);\nHRESULT WINAPI EditStreamSetInfoW(PAVISTREAM,LPAVISTREAMINFOW,LONG);\nHRESULT WINAPI EditStreamSetNameA(PAVISTREAM,LPCSTR);\nHRESULT WINAPI EditStreamSetNameW(PAVISTREAM,LPCWSTR);\nVOID WINAPI AVIFileInit(void);\nVOID WINAPI AVIFileExit(void);\nHRESULT WINAPI AVIFileOpenA(PAVIFILE*,LPCSTR,UINT,LPCLSID);\nHRESULT WINAPI AVIFileOpenW(PAVIFILE*,LPCWSTR,UINT,LPCLSID);\nULONG WINAPI AVIFileAddRef(PAVIFILE);\nULONG WINAPI AVIFileRelease(PAVIFILE);\nHRESULT WINAPI AVIFileInfoA(PAVIFILE,PAVIFILEINFOA,LONG);\nHRESULT WINAPI AVIFileInfoW(PAVIFILE,PAVIFILEINFOW,LONG);\nHRESULT WINAPI AVIFileGetStream(PAVIFILE,PAVISTREAM*,DWORD,LONG);\nHRESULT WINAPI AVIFileCreateStreamA(PAVIFILE,PAVISTREAM*,AVISTREAMINFOA*);\nHRESULT WINAPI AVIFileCreateStreamW(PAVIFILE,PAVISTREAM*,AVISTREAMINFOW*);\nHRESULT WINAPI AVIFileWriteData(PAVIFILE,DWORD,LPVOID,LONG);\nHRESULT WINAPI AVIFileReadData(PAVIFILE,DWORD,LPVOID,LPLONG);\nHRESULT WINAPI AVIFileEndRecord(PAVIFILE);\nHRESULT WINAPI AVIClearClipboard(VOID);\nHRESULT WINAPI AVIGetFromClipboard(PAVIFILE*);\nHRESULT WINAPI AVIPutFileOnClipboard(PAVIFILE);\n#endif /* __OBJC__ */\n#ifdef OFN_READONLY\nBOOL WINAPI GetOpenFileNamePreviewA(LPOPENFILENAMEA);\nBOOL WINAPI GetOpenFileNamePreviewW(LPOPENFILENAMEW);\nBOOL WINAPI GetSaveFileNamePreviewA(LPOPENFILENAMEA);\nBOOL WINAPI GetSaveFileNamePreviewW(LPOPENFILENAMEW);\n#endif\nHWND VFWAPIV MCIWndCreateA(HWND,HINSTANCE,DWORD,LPCSTR);\nHWND VFWAPIV MCIWndCreateW(HWND,HINSTANCE,DWORD,LPCWSTR);\nHDRAWDIB VFWAPI DrawDibOpen(VOID);\nUINT VFWAPI DrawDibRealize(HDRAWDIB,HDC,BOOL);\nBOOL VFWAPI DrawDibBegin(HDRAWDIB,HDC,INT,INT,LPBITMAPINFOHEADER,INT,INT,UINT);\nBOOL VFWAPI DrawDibDraw(HDRAWDIB,HDC,INT,INT,INT,INT,LPBITMAPINFOHEADER,LPVOID,INT,INT,INT,INT,UINT);\nBOOL VFWAPI DrawDibSetPalette(HDRAWDIB,HPALETTE);\nHPALETTE VFWAPI DrawDibGetPalette(HDRAWDIB);\nBOOL VFWAPI DrawDibChangePalette(HDRAWDIB,int,int,LPPALETTEENTRY);\nLPVOID VFWAPI DrawDibGetBuffer(HDRAWDIB,LPBITMAPINFOHEADER,DWORD,DWORD);\nBOOL VFWAPI DrawDibStart(HDRAWDIB,DWORD);\nBOOL VFWAPI DrawDibStop(HDRAWDIB);\nBOOL VFWAPI DrawDibEnd(HDRAWDIB);\nBOOL VFWAPI DrawDibClose(HDRAWDIB);\nDWORD VFWAPI DrawDibProfileDisplay(LPBITMAPINFOHEADER);\n\n#define ICCompressGetFormat(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_GET_FORMAT,(DWORD)(lpbiInput),(DWORD)(lpbiOutput))\n#define ICCompressGetFormatSize(hic,lpbi) ICCompressGetFormat(hic,lpbi,NULL)\n#define ICCompressBegin(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_BEGIN,(DWORD)(lpbiInput),(DWORD)(lpbiOutput))\n#define ICCompressGetSize(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_GET_SIZE,(DWORD)(lpbiInput),(DWORD)(lpbiOutput))\n#define ICCompressQuery(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_COMPRESS_QUERY,(DWORD)(lpbiInput),(DWORD)(lpbiOutput))\n#define ICCompressEnd(hic) ICSendMessage(hic,ICM_COMPRESS_END,0,0)\n#define ICQueryAbout(hic) (ICSendMessage(hic,ICM_ABOUT,(DWORD)-1,ICMF_ABOUT_QUERY)==ICERR_OK)\n#define ICAbout(hic,hwnd) ICSendMessage(hic,ICM_ABOUT,(DWORD)(hwnd),0)\n#define ICQueryConfigure(hic) (ICSendMessage(hic,ICM_CONFIGURE,(DWORD)-1,ICMF_CONFIGURE_QUERY)==ICERR_OK)\n#define ICConfigure(hic,hwnd) ICSendMessage(hic,ICM_CONFIGURE,(DWORD)(hwnd),0)\n#define ICDecompressBegin(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_DECOMPRESS_BEGIN,(DWORD)(lpbiInput),(DWORD)(lpbiOutput))\n#define ICDecompressQuery(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_DECOMPRESS_QUERY,(DWORD)(lpbiInput),(DWORD)(lpbiOutput))\n#define ICDecompressGetFormat(hic,lpbiInput,lpbiOutput) (LONG)ICSendMessage(hic,ICM_DECOMPRESS_GET_FORMAT,(DWORD)(lpbiInput),(DWORD)(lpbiOutput))\n#define ICDecompressGetFormatSize(hic,lpbi) ICDecompressGetFormat(hic, lpbi, NULL)\n#define ICDecompressGetPalette(hic,lpbiInput,lpbiOutput) ICSendMessage(hic,ICM_DECOMPRESS_GET_PALETTE,(DWORD)(lpbiInput),(DWORD)(lpbiOutput))\n#define ICDecompressSetPalette(hic,lpbiPalette) ICSendMessage(hic,ICM_DECOMPRESS_SET_PALETTE,(DWORD)(lpbiPalette),0)\n#define ICDecompressEnd(hic) ICSendMessage(hic,ICM_DECOMPRESS_END,0,0)\n#define ICDecompressExEnd(hic) ICSendMessage(hic,ICM_DECOMPRESSEX_END,0,0)\n#define ICDecompressOpen(fccType,fccHandler,lpbiIn,lpbiOut) ICLocate(fccType,fccHandler,lpbiIn,lpbiOut,ICMODE_DECOMPRESS)\n#define ICDrawOpen(fccType,fccHandler,lpbiIn) ICLocate(fccType,fccHandler,lpbiIn,NULL,ICMODE_DRAW)\n#define ICGetState(hic,pv,cb) ICSendMessage(hic,ICM_GETSTATE,(DWORD)(pv),(DWORD)(cb))\n#define ICSetState(hic,pv,cb) ICSendMessage(hic,ICM_SETSTATE,(DWORD)(pv),(DWORD)(cb))\n#define ICGetStateSize(hic) ICGetState(hic,NULL,0)\n#define ICDrawWindow(hic,prc) ICSendMessage(hic,ICM_DRAW_WINDOW,(DWORD)(prc),sizeof(RECT))\n#define ICDrawQuery(hic,lpbiInput) ICSendMessage(hic,ICM_DRAW_QUERY,(DWORD)(lpbiInput),0)\n#define ICDrawChangePalette(hic,lpbiInput) ICSendMessage(hic,ICM_DRAW_CHANGEPALETTE,(DWORD)(lpbiInput),0)\n#define ICGetBuffersWanted(hic,lpdwBuffers) ICSendMessage(hic,ICM_GETBUFFERSWANTED,(DWORD)(lpdwBuffers),0)\n#define ICDrawEnd(hic) ICSendMessage(hic,ICM_DRAW_END,0,0)\n#define ICDrawStart(hic) ICSendMessage(hic,ICM_DRAW_START,0,0)\n#define ICDrawStartPlay(hic,lFrom,lTo) ICSendMessage(hic,ICM_DRAW_START_PLAY,(DWORD)(lFrom),(DWORD)(lTo))\n#define ICDrawStop(hic) ICSendMessage(hic,ICM_DRAW_STOP,0,0)\n#define ICDrawStopPlay(hic) ICSendMessage(hic,ICM_DRAW_STOP_PLAY,0,0)\n#define ICDrawGetTime(hic,lplTime) ICSendMessage(hic,ICM_DRAW_GETTIME,(DWORD)(lplTime),0)\n#define ICDrawSetTime(hic,lTime) ICSendMessage(hic,ICM_DRAW_SETTIME,(DWORD)lTime,0)\n#define ICDrawRealize(hic,hdc,fBackground) ICSendMessage(hic,ICM_DRAW_REALIZE,(DWORD)(hdc),(DWORD)(fBackground))\n#define ICDrawFlush(hic) ICSendMessage(hic,ICM_DRAW_FLUSH,0,0)\n#define ICDrawRenderBuffer(hic) ICSendMessage(hic,ICM_DRAW_RENDERBUFFER,0,0)\n#define AVIFileClose(pavi) AVIFileRelease(pavi)\n#define AVIStreamClose(pavi) AVIStreamRelease(pavi);\n#define AVIStreamEnd(pavi) (AVIStreamStart(pavi)+AVIStreamLength(pavi))\n#define AVIStreamEndTime(pavi) AVIStreamSampleToTime(pavi,AVIStreamEnd(pavi))\n#define AVIStreamFormatSize(pavi,lPos,plSize) AVIStreamReadFormat(pavi,lPos,NULL,plSize)\n#define AVIStreamLengthTime(pavi) AVIStreamSampleToTime(pavi,AVIStreamLength(pavi))\n#define AVIStreamSampleSize(pavi,pos,psize) AVIStreamRead(pavi,pos,1,NULL,0,psize,NULL)\n#define AVIStreamSampleToSample(pavi1,pavi2,samp2) AVIStreamTimeToSample(pavi1,AVIStreamSampleToTime(pavi2,samp2))\n#define AVIStreamStartTime(pavi) AVIStreamSampleToTime(pavi,AVIStreamStart(pavi))\n#define AVIStreamNextSample(pavi,pos) AVIStreamFindSample(pavi,pos+1,FIND_NEXT|FIND_ANY)\n#define AVIStreamPrevSample(pavi,pos) AVIStreamFindSample(pavi,pos-1,FIND_PREV|FIND_ANY)\n#define AVIStreamNearestSample(pavi, pos) AVIStreamFindSample(pavi,pos,FIND_PREV|FIND_ANY)\n#define AVStreamNextKeyFrame(pavi,pos) AVIStreamFindSample(pavi,pos+1,FIND_NEXT|FIND_KEY)\n#define AVStreamPrevKeyFrame(pavi,pos) AVIStreamFindSample(pavi,pos-1,FIND_NEXT|FIND_KEY)\n#define AVIStreamNearestKeyFrame(pavi,pos) AVIStreamFindSample(pavi,pos,FIND_PREV|FIND_KEY)\n#define AVIStreamIsKeyFrame(pavi, pos) (AVIStreamNearestKeyFrame(pavi,pos) == pos)\n#ifdef __cplusplus\n#define MCIWndSM ::SendMessage\n#else\n#define MCIWndSM SendMessage\n#endif\n#define MCIWndCanPlay(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_PLAY,0,0)\n#define MCIWndCanRecord(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_RECORD,0,0)\n#define MCIWndCanSave(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_SAVE,0,0)\n#define MCIWndCanWindow(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_WINDOW,0,0)\n#define MCIWndCanEject(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_EJECT,0,0)\n#define MCIWndCanConfig(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_CAN_CONFIG,0,0)\n#define MCIWndPaletteKick(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_PALETTEKICK,0,0)\n#define MCIWndSave(hWnd,szFile) (LONG)MCIWndSM(hWnd,MCI_SAVE,0,(LPARAM)(LPVOID)(szFile))\n#define MCIWndSaveDialog(hWnd) MCIWndSave(hWnd,-1)\n#define MCIWndNew(hWnd,lp) (LONG)MCIWndSM(hWnd,MCIWNDM_NEW,0,(LPARAM)(LPVOID)(lp))\n#define MCIWndRecord(hWnd) (LONG)MCIWndSM(hWnd,MCI_RECORD,0,0)\n#define MCIWndOpen(hWnd,sz,f) (LONG)MCIWndSM(hWnd,MCIWNDM_OPEN,(WPARAM)(UINT)(f),(LPARAM)(LPVOID)(sz))\n#define MCIWndOpenDialog(hWnd) MCIWndOpen(hWnd,-1,0)\n#define MCIWndClose(hWnd) (LONG)MCIWndSM(hWnd,MCI_CLOSE,0,0)\n#define MCIWndPlay(hWnd) (LONG)MCIWndSM(hWnd,MCI_PLAY,0,0)\n#define MCIWndStop(hWnd) (LONG)MCIWndSM(hWnd,MCI_STOP,0,0)\n#define MCIWndPause(hWnd) (LONG)MCIWndSM(hWnd,MCI_PAUSE,0,0)\n#define MCIWndResume(hWnd) (LONG)MCIWndSM(hWnd,MCI_RESUME,0,0)\n#define MCIWndSeek(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCI_SEEK,0,(LPARAM)(LONG)(lPos))\n#define MCIWndEject(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_EJECT,0,0)\n#define MCIWndHome(hWnd) MCIWndSeek(hWnd,MCIWND_START)\n#define MCIWndEnd(hWnd) MCIWndSeek(hWnd,MCIWND_END)\n#define MCIWndGetSource(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_GET_SOURCE,0,(LPARAM)(LPRECT)(prc))\n#define MCIWndPutSource(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_SOURCE,0,(LPARAM)(LPRECT)(prc))\n#define MCIWndGetDest(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_GET_DEST,0,(LPARAM)(LPRECT)(prc))\n#define MCIWndPutDest(hWnd,prc) (LONG)MCIWndSM(hWnd,MCIWNDM_PUT_DEST,0,(LPARAM)(LPRECT)(prc))\n#define MCIWndPlayReverse(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYREVERSE,0,0)\n#define MCIWndPlayFrom(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYFROM,0,(LPARAM)(LONG)(lPos))\n#define MCIWndPlayTo(hWnd,lPos) (LONG)MCIWndSM(hWnd,MCIWNDM_PLAYTO,  0,(LPARAM)(LONG)(lPos))\n#define MCIWndPlayFromTo(hWnd,lStart,lEnd) (MCIWndSeek(hWnd,lStart),MCIWndPlayTo(hWnd,lEnd))\n#define MCIWndGetDeviceID(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETDEVICEID,0,0)\n#define MCIWndGetAlias(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETALIAS,0,0)\n#define MCIWndGetMode(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETMODE,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))\n#define MCIWndGetPosition(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,0,0)\n#define MCIWndGetPositionString(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETPOSITION,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))\n#define MCIWndGetStart(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETSTART,0,0)\n#define MCIWndGetLength(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETLENGTH,0,0)\n#define MCIWndGetEnd(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETEND,0,0)\n#define MCIWndStep(hWnd,n) (LONG)MCIWndSM(hWnd,MCI_STEP,0,(LPARAM)(long)(n))\n#define MCIWndDestroy(hWnd) (VOID)MCIWndSM(hWnd,WM_CLOSE,0,0)\n#define MCIWndSetZoom(hWnd,iZoom) (VOID)MCIWndSM(hWnd,MCIWNDM_SETZOOM,0,(LPARAM)(UINT)(iZoom))\n#define MCIWndGetZoom(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETZOOM,0,0)\n#define MCIWndSetVolume(hWnd,iVol) (LONG)MCIWndSM(hWnd,MCIWNDM_SETVOLUME,0,(LPARAM)(UINT)(iVol))\n#define MCIWndGetVolume(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETVOLUME,0,0)\n#define MCIWndSetSpeed(hWnd,iSpeed) (LONG)MCIWndSM(hWnd,MCIWNDM_SETSPEED,0,(LPARAM)(UINT)(iSpeed))\n#define MCIWndGetSpeed(hWnd) (LONG)MCIWndSM(hWnd,MCIWNDM_GETSPEED,0,0)\n#define MCIWndSetTimeFormat(hWnd,lp) (LONG)MCIWndSM(hWnd,MCIWNDM_SETTIMEFORMAT,0,(LPARAM)(LPTSTR)(lp))\n#define MCIWndGetTimeFormat(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETTIMEFORMAT,(WPARAM)(UINT)(len),(LPARAM)(LPTSTR)(lp))\n#define MCIWndValidateMedia(hWnd) (VOID)MCIWndSM(hWnd,MCIWNDM_VALIDATEMEDIA,0,0)\n#define MCIWndSetRepeat(hWnd,f) (void)MCIWndSM(hWnd,MCIWNDM_SETREPEAT,0,(LPARAM)(BOOL)(f))\n#define MCIWndGetRepeat(hWnd) (BOOL)MCIWndSM(hWnd,MCIWNDM_GETREPEAT,0,0)\n#define MCIWndUseFrames(hWnd) MCIWndSetTimeFormat(hWnd,TEXT(\"frames\"))\n#define MCIWndUseTime(hWnd) MCIWndSetTimeFormat(hWnd,TEXT(\"ms\"))\n#define MCIWndSetActiveTimer(hWnd,active) (VOID)MCIWndSM(hWnd,MCIWNDM_SETACTIVETIMER,(WPARAM)(UINT)(active),0L)\n#define MCIWndSetInactiveTimer(hWnd,inactive) (VOID)MCIWndSM(hWnd,MCIWNDM_SETINACTIVETIMER,(WPARAM)(UINT)(inactive),0L)\n#define MCIWndSetTimers(hWnd,active,inactive) (VOID)MCIWndSM(hWnd,MCIWNDM_SETTIMERS,(WPARAM)(UINT)(active),(LPARAM)(UINT)(inactive))\n#define MCIWndGetActiveTimer(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETACTIVETIMER,0,0L);\n#define MCIWndGetInactiveTimer(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETINACTIVETIMER,0,0L);\n#define MCIWndRealize(hWnd,fBkgnd) (LONG)MCIWndSM(hWnd,MCIWNDM_REALIZE,(WPARAM)(BOOL)(fBkgnd),0)\n#define MCIWndSendString(hWnd,sz) (LONG)MCIWndSM(hWnd,MCIWNDM_SENDSTRING,0,(LPARAM)(LPTSTR)(sz))\n#define MCIWndReturnString(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_RETURNSTRING,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))\n#define MCIWndGetError(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETERROR,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))\n#define MCIWndGetPalette(hWnd) (HPALETTE)MCIWndSM(hWnd,MCIWNDM_GETPALETTE,0,0)\n#define MCIWndSetPalette(hWnd,hpal) (LONG)MCIWndSM(hWnd,MCIWNDM_SETPALETTE,(WPARAM)(HPALETTE)(hpal),0)\n#define MCIWndGetFileName(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETFILENAME,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))\n#define MCIWndGetDevice(hWnd,lp,len) (LONG)MCIWndSM(hWnd,MCIWNDM_GETDEVICE,(WPARAM)(UINT)(len),(LPARAM)(LPVOID)(lp))\n#define MCIWndGetStyles(hWnd) (UINT)MCIWndSM(hWnd,MCIWNDM_GETSTYLES,0,0L)\n#define MCIWndChangeStyles(hWnd,mask,value) (LONG)MCIWndSM(hWnd,MCIWNDM_CHANGESTYLES,(WPARAM)(UINT)(mask),(LPARAM)(LONG)(value))\n#define MCIWndOpenInterface(hWnd,pUnk) (LONG)MCIWndSM(hWnd,MCIWNDM_OPENINTERFACE,0,(LPARAM)(LPUNKNOWN)(pUnk))\n#define MCIWndSetOwner(hWnd,hWndP) (LONG)MCIWndSM(hWnd,MCIWNDM_SETOWNER,(WPARAM)(hWndP),0)\n#define DrawDibUpdate(hdd,hdc,x,y) DrawDibDraw(hdd,hdc,x,y,0,0,NULL,NULL,0,0,0,0,DDF_UPDATE)\nstatic __inline DWORD\nICGetDefaultQuality(HIC hic)\n{\n   DWORD dwICValue;\n   ICSendMessage(hic, ICM_GETDEFAULTQUALITY, (DWORD)(LPVOID)&dwICValue, sizeof(DWORD));\n   return dwICValue;\n}\nstatic __inline DWORD\nICGetDefaultKeyFrameRate(HIC hic)\n{\n   DWORD dwICValue;\n   ICSendMessage(hic, ICM_GETDEFAULTKEYFRAMERATE, (DWORD)(LPVOID)&dwICValue, sizeof(DWORD));\n   return dwICValue;\n}\nstatic __inline LRESULT\nICDrawSuggestFormat(HIC hic,LPBITMAPINFOHEADER lpbiIn,LPBITMAPINFOHEADER lpbiOut,INT dxSrc,INT dySrc,INT dxDst,INT dyDst,HIC hicDecomp)\n{\n\tICDRAWSUGGEST ic;\n\tic.lpbiIn = lpbiIn;\n\tic.lpbiSuggest = lpbiOut;\n\tic.dxSrc = dxSrc;\n\tic.dySrc = dySrc;\n\tic.dxDst = dxDst;\n\tic.dyDst = dyDst;\n\tic.hicDecompressor = hicDecomp;\n\treturn ICSendMessage(hic,ICM_DRAW_SUGGESTFORMAT,(DWORD)&ic,sizeof(ic));\n}\nstatic __inline LRESULT\nICSetStatusProc(HIC hic,DWORD dwFlags,LRESULT lParam,LONG (CALLBACK *fpfnStatus)(LPARAM,UINT,LONG))\n{\n\tICSETSTATUSPROC ic;\n\tic.dwFlags = dwFlags;\n\tic.lParam = lParam;\n\tic.Status = fpfnStatus;\n\treturn ICSendMessage(hic,ICM_SET_STATUS_PROC,(DWORD)&ic,sizeof(ic));\n}\nstatic __inline LRESULT \nICDecompressEx(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,INT xSrc,INT ySrc,INT dxSrc,INT dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,INT xDst,INT yDst,INT dxDst,INT dyDst)\n{\n\tICDECOMPRESSEX ic;\n\tic.dwFlags = dwFlags;\n\tic.lpbiSrc = lpbiSrc;\n\tic.lpSrc = lpSrc;\n\tic.xSrc = xSrc;\n\tic.ySrc = ySrc;\n\tic.dxSrc = dxSrc;\n\tic.dySrc = dySrc;\n\tic.lpbiDst = lpbiDst;\n\tic.lpDst = lpDst;\n\tic.xDst = xDst;\n\tic.yDst = yDst;\n\tic.dxDst = dxDst;\n\tic.dyDst = dyDst;\n\treturn ICSendMessage(hic,ICM_DECOMPRESSEX,(DWORD)&ic,sizeof(ic));\n}\nstatic __inline LRESULT\nICDecompressExBegin(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,INT xSrc,INT ySrc,INT dxSrc,INT dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,INT xDst,INT yDst,INT dxDst,INT dyDst)\n{\n\tICDECOMPRESSEX ic;\n\tic.dwFlags = dwFlags;\n\tic.lpbiSrc = lpbiSrc;\n\tic.lpSrc = lpSrc;\n\tic.xSrc = xSrc;\n\tic.ySrc = ySrc;\n\tic.dxSrc = dxSrc;\n\tic.dySrc = dySrc;\n\tic.lpbiDst = lpbiDst;\n\tic.lpDst = lpDst;\n\tic.xDst = xDst;\n\tic.yDst = yDst;\n\tic.dxDst = dxDst;\n\tic.dyDst = dyDst;\n\treturn ICSendMessage(hic,ICM_DECOMPRESSEX_BEGIN,(DWORD)&ic,sizeof(ic));\n}\nstatic __inline LRESULT\nICDecompressExQuery(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiSrc,LPVOID lpSrc,INT xSrc,INT ySrc,INT dxSrc,INT dySrc,LPBITMAPINFOHEADER lpbiDst,LPVOID lpDst,INT xDst,INT yDst,INT dxDst,INT dyDst)\n{\n\tICDECOMPRESSEX ic;\n\tic.dwFlags = dwFlags;\n\tic.lpbiSrc = lpbiSrc;\n\tic.lpSrc = lpSrc;\n\tic.xSrc = xSrc;\n\tic.ySrc = ySrc;\n\tic.dxSrc = dxSrc;\n\tic.dySrc = dySrc;\n\tic.lpbiDst = lpbiDst;\n\tic.lpDst = lpDst;\n\tic.xDst = xDst;\n\tic.yDst = yDst;\n\tic.dxDst = dxDst;\n\tic.dyDst = dyDst;\n\treturn ICSendMessage(hic,ICM_DECOMPRESSEX_QUERY,(DWORD)&ic,sizeof(ic));\n}\n\n/* AVICAP32 exports */\nHWND VFWAPI capCreateCaptureWindowA (LPCSTR,DWORD,int,int,int,int,HWND,int);\nHWND VFWAPI capCreateCaptureWindowW (LPCWSTR,DWORD,int,int,int,int,HWND,int);\nBOOL VFWAPI capGetDriverDescriptionA (UINT,LPSTR,int,LPSTR,int);\nBOOL VFWAPI capGetDriverDescriptionW (UINT,LPWSTR,int,LPWSTR,int);\n\n#ifdef UNICODE\n#define AVISTREAMINFO AVISTREAMINFOW\n#define LPAVISTREAMINFO LPAVISTREAMINFOW\n#define PAVISTREAMINFO PAVISTREAMINFOW\n#define AVIFILEINFO AVIFILEINFOW\n#define PAVIFILEINFO PAVIFILEINFOW\n#define LPAVIFILEINFO LPAVIFILEINFOW\n#define AVIStreamInfo AVIStreamInfoW\n#define AVIStreamOpenFromFile AVIStreamOpenFromFileW\n#define AVIBuildFilter AVIBuildFilterW\n#define AVISaveV AVISaveVW\n#define EditStreamSetInfo EditStreamSetInfoW\n#define EditStreamSetName EditStreamSetNameW\n#define AVIFileOpen AVIFileOpenW\n#define AVIFileInfo AVIFileInfoW\n#define AVIFileCreateStream AVIFileCreateStreamW\n#define GetOpenFileNamePreview GetOpenFileNamePreviewW\n#define GetSaveFileNamePreview GetSaveFileNamePreviewW\n#define MCIWndCreate MCIWndCreateW\n#define MCIWNDF_NOTIFYMEDIA MCIWNDF_NOTIFYMEDIAW\n#define MCIWNDM_SENDSTRING MCIWNDM_SENDSTRINGW\n#define MCIWNDM_GETPOSITION MCIWNDM_GETPOSITIONW\n#define MCIWNDM_GETMODE MCIWNDM_GETMODEW\n#define MCIWNDM_SETTIMEFORMAT MCIWNDM_SETTIMEFORMATW\n#define MCIWNDM_GETTIMEFORMAT MCIWNDM_GETTIMEFORMATW\n#define MCIWNDM_GETFILENAME MCIWNDM_GETFILENAMEW\n#define MCIWNDM_GETDEVICE MCIWNDM_GETDEVICEW\n#define MCIWNDM_GETERROR MCIWNDM_GETERRORW\n#define MCIWNDM_NEW MCIWNDM_NEWW\n#define MCIWNDM_RETURNSTRING MCIWNDM_RETURNSTRINGW\n#define MCIWNDM_OPEN MCIWNDM_OPENW\n\n#define capCreateCaptureWindow  capCreateCaptureWindowW\n#define capGetDriverDescription capGetDriverDescriptionW\n\n#else\n#define AVISTREAMINFO AVISTREAMINFOA\n#define LPAVISTREAMINFO LPAVISTREAMINFOA\n#define PAVISTREAMINFO PAVISTREAMINFOA\n#define AVIFILEINFO AVIFILEINFOA\n#define PAVIFILEINFO PAVIFILEINFOA\n#define LPAVIFILEINFO LPAVIFILEINFOA\n#define AVIStreamInfo AVIStreamInfoA\n#define AVIStreamOpenFromFile AVIStreamOpenFromFileA\n#define AVIBuildFilter AVIBuildFilterA\n#define AVISaveV AVISaveVA\n#define EditStreamSetInfo EditStreamSetInfoA\n#define EditStreamSetName EditStreamSetNameA\n#define AVIFileOpen AVIFileOpenA\n#define AVIFileInfo AVIFileInfoA\n#define AVIFileCreateStream AVIFileCreateStreamA\n#define GetOpenFileNamePreview GetOpenFileNamePreviewA\n#define GetSaveFileNamePreview GetSaveFileNamePreviewA\n#define MCIWndCreate MCIWndCreateA\n#define MCIWNDF_NOTIFYMEDIA MCIWNDF_NOTIFYMEDIAA\n#define MCIWNDM_SENDSTRING MCIWNDM_SENDSTRINGA\n#define MCIWNDM_GETPOSITION MCIWNDM_GETPOSITIONA\n#define MCIWNDM_GETMODE MCIWNDM_GETMODEA\n#define MCIWNDM_SETTIMEFORMAT MCIWNDM_SETTIMEFORMATA\n#define MCIWNDM_GETTIMEFORMAT MCIWNDM_GETTIMEFORMATA\n#define MCIWNDM_GETFILENAME MCIWNDM_GETFILENAMEA\n#define MCIWNDM_GETDEVICE MCIWNDM_GETDEVICEA\n#define MCIWNDM_GETERROR MCIWNDM_GETERRORA\n#define MCIWNDM_NEW MCIWNDM_NEWA\n#define MCIWNDM_RETURNSTRING MCIWNDM_RETURNSTRINGA\n#define MCIWNDM_OPEN MCIWNDM_OPENA\n\n#define capCreateCaptureWindow  capCreateCaptureWindowA\n#define capGetDriverDescription capGetDriverDescriptionA\n\n#endif\n\n#endif /* RC_INVOKED */\n\n#ifdef __cplusplus\n}\n#endif\n#include <poppack.h>\n#endif /* _VFW_H */\n"
  },
  {
    "path": "Include/amstream.h",
    "content": "\n\n/* this ALWAYS GENERATED file contains the definitions for the interfaces */\n\n\n /* File created by MIDL compiler version 6.00.0366 */\n/* Compiler settings for amstream.idl:\n    Oicf, W1, Zp8, env=Win32 (32b run)\n    protocol : dce , ms_ext, c_ext, robust\n    error checks: allocation ref bounds_check enum stub_data \n    VC __declspec() decoration level: \n         __declspec(uuid()), __declspec(selectany), __declspec(novtable)\n         DECLSPEC_UUID(), MIDL_INTERFACE()\n*/\n//@@MIDL_FILE_HEADING(  )\n\n#pragma warning( disable: 4049 )  /* more than 64k source lines */\n\n\n/* verify that the <rpcndr.h> version is high enough to compile this file*/\n#ifndef __REQUIRED_RPCNDR_H_VERSION__\n#define __REQUIRED_RPCNDR_H_VERSION__ 475\n#endif\n\n#include \"rpc.h\"\n#include \"rpcndr.h\"\n\n#ifndef __RPCNDR_H_VERSION__\n#error this stub requires an updated version of <rpcndr.h>\n#endif // __RPCNDR_H_VERSION__\n\n#ifndef COM_NO_WINDOWS_H\n#include \"windows.h\"\n#include \"ole2.h\"\n#endif /*COM_NO_WINDOWS_H*/\n\n#ifndef __amstream_h__\n#define __amstream_h__\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n#pragma once\n#endif\n\n/* Forward Declarations */ \n\n#ifndef __IDirectShowStream_FWD_DEFINED__\n#define __IDirectShowStream_FWD_DEFINED__\ntypedef interface IDirectShowStream IDirectShowStream;\n#endif \t/* __IDirectShowStream_FWD_DEFINED__ */\n\n\n#ifndef __IAMMultiMediaStream_FWD_DEFINED__\n#define __IAMMultiMediaStream_FWD_DEFINED__\ntypedef interface IAMMultiMediaStream IAMMultiMediaStream;\n#endif \t/* __IAMMultiMediaStream_FWD_DEFINED__ */\n\n\n#ifndef __IAMMediaStream_FWD_DEFINED__\n#define __IAMMediaStream_FWD_DEFINED__\ntypedef interface IAMMediaStream IAMMediaStream;\n#endif \t/* __IAMMediaStream_FWD_DEFINED__ */\n\n\n#ifndef __IMediaStreamFilter_FWD_DEFINED__\n#define __IMediaStreamFilter_FWD_DEFINED__\ntypedef interface IMediaStreamFilter IMediaStreamFilter;\n#endif \t/* __IMediaStreamFilter_FWD_DEFINED__ */\n\n\n#ifndef __IDirectDrawMediaSampleAllocator_FWD_DEFINED__\n#define __IDirectDrawMediaSampleAllocator_FWD_DEFINED__\ntypedef interface IDirectDrawMediaSampleAllocator IDirectDrawMediaSampleAllocator;\n#endif \t/* __IDirectDrawMediaSampleAllocator_FWD_DEFINED__ */\n\n\n#ifndef __IDirectDrawMediaSample_FWD_DEFINED__\n#define __IDirectDrawMediaSample_FWD_DEFINED__\ntypedef interface IDirectDrawMediaSample IDirectDrawMediaSample;\n#endif \t/* __IDirectDrawMediaSample_FWD_DEFINED__ */\n\n\n#ifndef __IAMMediaTypeStream_FWD_DEFINED__\n#define __IAMMediaTypeStream_FWD_DEFINED__\ntypedef interface IAMMediaTypeStream IAMMediaTypeStream;\n#endif \t/* __IAMMediaTypeStream_FWD_DEFINED__ */\n\n\n#ifndef __IAMMediaTypeSample_FWD_DEFINED__\n#define __IAMMediaTypeSample_FWD_DEFINED__\ntypedef interface IAMMediaTypeSample IAMMediaTypeSample;\n#endif \t/* __IAMMediaTypeSample_FWD_DEFINED__ */\n\n\n#ifndef __AMMultiMediaStream_FWD_DEFINED__\n#define __AMMultiMediaStream_FWD_DEFINED__\n\n#ifdef __cplusplus\ntypedef class AMMultiMediaStream AMMultiMediaStream;\n#else\ntypedef struct AMMultiMediaStream AMMultiMediaStream;\n#endif /* __cplusplus */\n\n#endif \t/* __AMMultiMediaStream_FWD_DEFINED__ */\n\n\n/* header files for imported files */\n#include \"unknwn.h\"\n#include \"mmstream.h\"\n#include \"strmif.h\"\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif \n\nvoid * __RPC_USER MIDL_user_allocate(size_t);\nvoid __RPC_USER MIDL_user_free( void * ); \n\n/* interface __MIDL_itf_amstream_0000 */\n/* [local] */ \n\n#include <ddraw.h>\n#include <mmsystem.h>\n#include <mmstream.h>\n#include <ddstream.h>\n#include <austream.h>\n\n\n\n\n\n\n\n\nenum __MIDL___MIDL_itf_amstream_0000_0001\n    {\tAMMSF_NOGRAPHTHREAD\t= 0x1\n    } ;\n\nenum __MIDL___MIDL_itf_amstream_0000_0002\n    {\tAMMSF_ADDDEFAULTRENDERER\t= 0x1,\n\tAMMSF_CREATEPEER\t= 0x2,\n\tAMMSF_STOPIFNOSAMPLES\t= 0x4,\n\tAMMSF_NOSTALL\t= 0x8\n    } ;\n\nenum __MIDL___MIDL_itf_amstream_0000_0003\n    {\tAMMSF_RENDERTYPEMASK\t= 0x3,\n\tAMMSF_RENDERTOEXISTING\t= 0,\n\tAMMSF_RENDERALLSTREAMS\t= 0x1,\n\tAMMSF_NORENDER\t= 0x2,\n\tAMMSF_NOCLOCK\t= 0x4,\n\tAMMSF_RUN\t= 0x8\n    } ;\ntypedef /* [public][public][public][public][public][v1_enum] */ \nenum __MIDL___MIDL_itf_amstream_0000_0004\n    {\tDisabled\t= 0,\n\tReadData\t= 1,\n\tRenderData\t= 2\n    } \tOUTPUT_STATE;\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_amstream_0000_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_amstream_0000_v0_0_s_ifspec;\n\n#ifndef __IDirectShowStream_INTERFACE_DEFINED__\n#define __IDirectShowStream_INTERFACE_DEFINED__\n\n/* interface IDirectShowStream */\n/* [unique][helpstring][dual][uuid][object] */ \n\n\nEXTERN_C const IID IID_IDirectShowStream;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"7DB01C96-C0C3-11d0-8FF1-00C04FD9189D\")\n    IDirectShowStream : public IDispatch\n    {\n    public:\n        virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_FileName( \n            /* [retval][out] */ BSTR *pVal) = 0;\n        \n        virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_FileName( \n            /* [in] */ BSTR newVal) = 0;\n        \n        virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Video( \n            /* [retval][out] */ OUTPUT_STATE *pVal) = 0;\n        \n        virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_Video( \n            /* [in] */ OUTPUT_STATE newVal) = 0;\n        \n        virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Audio( \n            /* [retval][out] */ OUTPUT_STATE *pVal) = 0;\n        \n        virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_Audio( \n            /* [in] */ OUTPUT_STATE newVal) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct IDirectShowStreamVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            IDirectShowStream * This,\n            /* [in] */ REFIID riid,\n            /* [iid_is][out] */ void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            IDirectShowStream * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            IDirectShowStream * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( \n            IDirectShowStream * This,\n            /* [out] */ UINT *pctinfo);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( \n            IDirectShowStream * This,\n            /* [in] */ UINT iTInfo,\n            /* [in] */ LCID lcid,\n            /* [out] */ ITypeInfo **ppTInfo);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( \n            IDirectShowStream * This,\n            /* [in] */ REFIID riid,\n            /* [size_is][in] */ LPOLESTR *rgszNames,\n            /* [in] */ UINT cNames,\n            /* [in] */ LCID lcid,\n            /* [size_is][out] */ DISPID *rgDispId);\n        \n        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( \n            IDirectShowStream * This,\n            /* [in] */ DISPID dispIdMember,\n            /* [in] */ REFIID riid,\n            /* [in] */ LCID lcid,\n            /* [in] */ WORD wFlags,\n            /* [out][in] */ DISPPARAMS *pDispParams,\n            /* [out] */ VARIANT *pVarResult,\n            /* [out] */ EXCEPINFO *pExcepInfo,\n            /* [out] */ UINT *puArgErr);\n        \n        /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_FileName )( \n            IDirectShowStream * This,\n            /* [retval][out] */ BSTR *pVal);\n        \n        /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_FileName )( \n            IDirectShowStream * This,\n            /* [in] */ BSTR newVal);\n        \n        /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Video )( \n            IDirectShowStream * This,\n            /* [retval][out] */ OUTPUT_STATE *pVal);\n        \n        /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Video )( \n            IDirectShowStream * This,\n            /* [in] */ OUTPUT_STATE newVal);\n        \n        /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Audio )( \n            IDirectShowStream * This,\n            /* [retval][out] */ OUTPUT_STATE *pVal);\n        \n        /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Audio )( \n            IDirectShowStream * This,\n            /* [in] */ OUTPUT_STATE newVal);\n        \n        END_INTERFACE\n    } IDirectShowStreamVtbl;\n\n    interface IDirectShowStream\n    {\n        CONST_VTBL struct IDirectShowStreamVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define IDirectShowStream_QueryInterface(This,riid,ppvObject)\t\\\n    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)\n\n#define IDirectShowStream_AddRef(This)\t\\\n    (This)->lpVtbl -> AddRef(This)\n\n#define IDirectShowStream_Release(This)\t\\\n    (This)->lpVtbl -> Release(This)\n\n\n#define IDirectShowStream_GetTypeInfoCount(This,pctinfo)\t\\\n    (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)\n\n#define IDirectShowStream_GetTypeInfo(This,iTInfo,lcid,ppTInfo)\t\\\n    (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)\n\n#define IDirectShowStream_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\t\\\n    (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)\n\n#define IDirectShowStream_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\t\\\n    (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)\n\n\n#define IDirectShowStream_get_FileName(This,pVal)\t\\\n    (This)->lpVtbl -> get_FileName(This,pVal)\n\n#define IDirectShowStream_put_FileName(This,newVal)\t\\\n    (This)->lpVtbl -> put_FileName(This,newVal)\n\n#define IDirectShowStream_get_Video(This,pVal)\t\\\n    (This)->lpVtbl -> get_Video(This,pVal)\n\n#define IDirectShowStream_put_Video(This,newVal)\t\\\n    (This)->lpVtbl -> put_Video(This,newVal)\n\n#define IDirectShowStream_get_Audio(This,pVal)\t\\\n    (This)->lpVtbl -> get_Audio(This,pVal)\n\n#define IDirectShowStream_put_Audio(This,newVal)\t\\\n    (This)->lpVtbl -> put_Audio(This,newVal)\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IDirectShowStream_get_FileName_Proxy( \n    IDirectShowStream * This,\n    /* [retval][out] */ BSTR *pVal);\n\n\nvoid __RPC_STUB IDirectShowStream_get_FileName_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\n/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IDirectShowStream_put_FileName_Proxy( \n    IDirectShowStream * This,\n    /* [in] */ BSTR newVal);\n\n\nvoid __RPC_STUB IDirectShowStream_put_FileName_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\n/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IDirectShowStream_get_Video_Proxy( \n    IDirectShowStream * This,\n    /* [retval][out] */ OUTPUT_STATE *pVal);\n\n\nvoid __RPC_STUB IDirectShowStream_get_Video_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\n/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IDirectShowStream_put_Video_Proxy( \n    IDirectShowStream * This,\n    /* [in] */ OUTPUT_STATE newVal);\n\n\nvoid __RPC_STUB IDirectShowStream_put_Video_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\n/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IDirectShowStream_get_Audio_Proxy( \n    IDirectShowStream * This,\n    /* [retval][out] */ OUTPUT_STATE *pVal);\n\n\nvoid __RPC_STUB IDirectShowStream_get_Audio_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\n/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IDirectShowStream_put_Audio_Proxy( \n    IDirectShowStream * This,\n    /* [in] */ OUTPUT_STATE newVal);\n\n\nvoid __RPC_STUB IDirectShowStream_put_Audio_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\n\n#endif \t/* __IDirectShowStream_INTERFACE_DEFINED__ */\n\n\n#ifndef __IAMMultiMediaStream_INTERFACE_DEFINED__\n#define __IAMMultiMediaStream_INTERFACE_DEFINED__\n\n/* interface IAMMultiMediaStream */\n/* [unique][uuid][object] */ \n\n\nEXTERN_C const IID IID_IAMMultiMediaStream;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"BEBE595C-9A6F-11d0-8FDE-00C04FD9189D\")\n    IAMMultiMediaStream : public IMultiMediaStream\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE Initialize( \n            /* [in] */ STREAM_TYPE StreamType,\n            /* [in] */ DWORD dwFlags,\n            /* [in] */ IGraphBuilder *pFilterGraph) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetFilterGraph( \n            /* [out] */ IGraphBuilder **ppGraphBuilder) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetFilter( \n            /* [out] */ IMediaStreamFilter **ppFilter) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE AddMediaStream( \n            /* [in] */ IUnknown *pStreamObject,\n            /* [in] */ const MSPID *PurposeId,\n            /* [in] */ DWORD dwFlags,\n            /* [out] */ IMediaStream **ppNewStream) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE OpenFile( \n            /* [in] */ LPCWSTR pszFileName,\n            /* [in] */ DWORD dwFlags) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE OpenMoniker( \n            /* [in] */ IBindCtx *pCtx,\n            /* [in] */ IMoniker *pMoniker,\n            /* [in] */ DWORD dwFlags) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE Render( \n            /* [in] */ DWORD dwFlags) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct IAMMultiMediaStreamVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            IAMMultiMediaStream * This,\n            /* [in] */ REFIID riid,\n            /* [iid_is][out] */ void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            IAMMultiMediaStream * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            IAMMultiMediaStream * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetInformation )( \n            IAMMultiMediaStream * This,\n            /* [out] */ DWORD *pdwFlags,\n            /* [out] */ STREAM_TYPE *pStreamType);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetMediaStream )( \n            IAMMultiMediaStream * This,\n            /* [in] */ REFMSPID idPurpose,\n            /* [out] */ IMediaStream **ppMediaStream);\n        \n        HRESULT ( STDMETHODCALLTYPE *EnumMediaStreams )( \n            IAMMultiMediaStream * This,\n            /* [in] */ long Index,\n            /* [out] */ IMediaStream **ppMediaStream);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetState )( \n            IAMMultiMediaStream * This,\n            /* [out] */ STREAM_STATE *pCurrentState);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetState )( \n            IAMMultiMediaStream * This,\n            /* [in] */ STREAM_STATE NewState);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetTime )( \n            IAMMultiMediaStream * This,\n            /* [out] */ STREAM_TIME *pCurrentTime);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetDuration )( \n            IAMMultiMediaStream * This,\n            /* [out] */ STREAM_TIME *pDuration);\n        \n        HRESULT ( STDMETHODCALLTYPE *Seek )( \n            IAMMultiMediaStream * This,\n            /* [in] */ STREAM_TIME SeekTime);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetEndOfStreamEventHandle )( \n            IAMMultiMediaStream * This,\n            /* [out] */ HANDLE *phEOS);\n        \n        HRESULT ( STDMETHODCALLTYPE *Initialize )( \n            IAMMultiMediaStream * This,\n            /* [in] */ STREAM_TYPE StreamType,\n            /* [in] */ DWORD dwFlags,\n            /* [in] */ IGraphBuilder *pFilterGraph);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetFilterGraph )( \n            IAMMultiMediaStream * This,\n            /* [out] */ IGraphBuilder **ppGraphBuilder);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetFilter )( \n            IAMMultiMediaStream * This,\n            /* [out] */ IMediaStreamFilter **ppFilter);\n        \n        HRESULT ( STDMETHODCALLTYPE *AddMediaStream )( \n            IAMMultiMediaStream * This,\n            /* [in] */ IUnknown *pStreamObject,\n            /* [in] */ const MSPID *PurposeId,\n            /* [in] */ DWORD dwFlags,\n            /* [out] */ IMediaStream **ppNewStream);\n        \n        HRESULT ( STDMETHODCALLTYPE *OpenFile )( \n            IAMMultiMediaStream * This,\n            /* [in] */ LPCWSTR pszFileName,\n            /* [in] */ DWORD dwFlags);\n        \n        HRESULT ( STDMETHODCALLTYPE *OpenMoniker )( \n            IAMMultiMediaStream * This,\n            /* [in] */ IBindCtx *pCtx,\n            /* [in] */ IMoniker *pMoniker,\n            /* [in] */ DWORD dwFlags);\n        \n        HRESULT ( STDMETHODCALLTYPE *Render )( \n            IAMMultiMediaStream * This,\n            /* [in] */ DWORD dwFlags);\n        \n        END_INTERFACE\n    } IAMMultiMediaStreamVtbl;\n\n    interface IAMMultiMediaStream\n    {\n        CONST_VTBL struct IAMMultiMediaStreamVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define IAMMultiMediaStream_QueryInterface(This,riid,ppvObject)\t\\\n    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)\n\n#define IAMMultiMediaStream_AddRef(This)\t\\\n    (This)->lpVtbl -> AddRef(This)\n\n#define IAMMultiMediaStream_Release(This)\t\\\n    (This)->lpVtbl -> Release(This)\n\n\n#define IAMMultiMediaStream_GetInformation(This,pdwFlags,pStreamType)\t\\\n    (This)->lpVtbl -> GetInformation(This,pdwFlags,pStreamType)\n\n#define IAMMultiMediaStream_GetMediaStream(This,idPurpose,ppMediaStream)\t\\\n    (This)->lpVtbl -> GetMediaStream(This,idPurpose,ppMediaStream)\n\n#define IAMMultiMediaStream_EnumMediaStreams(This,Index,ppMediaStream)\t\\\n    (This)->lpVtbl -> EnumMediaStreams(This,Index,ppMediaStream)\n\n#define IAMMultiMediaStream_GetState(This,pCurrentState)\t\\\n    (This)->lpVtbl -> GetState(This,pCurrentState)\n\n#define IAMMultiMediaStream_SetState(This,NewState)\t\\\n    (This)->lpVtbl -> SetState(This,NewState)\n\n#define IAMMultiMediaStream_GetTime(This,pCurrentTime)\t\\\n    (This)->lpVtbl -> GetTime(This,pCurrentTime)\n\n#define IAMMultiMediaStream_GetDuration(This,pDuration)\t\\\n    (This)->lpVtbl -> GetDuration(This,pDuration)\n\n#define IAMMultiMediaStream_Seek(This,SeekTime)\t\\\n    (This)->lpVtbl -> Seek(This,SeekTime)\n\n#define IAMMultiMediaStream_GetEndOfStreamEventHandle(This,phEOS)\t\\\n    (This)->lpVtbl -> GetEndOfStreamEventHandle(This,phEOS)\n\n\n#define IAMMultiMediaStream_Initialize(This,StreamType,dwFlags,pFilterGraph)\t\\\n    (This)->lpVtbl -> Initialize(This,StreamType,dwFlags,pFilterGraph)\n\n#define IAMMultiMediaStream_GetFilterGraph(This,ppGraphBuilder)\t\\\n    (This)->lpVtbl -> GetFilterGraph(This,ppGraphBuilder)\n\n#define IAMMultiMediaStream_GetFilter(This,ppFilter)\t\\\n    (This)->lpVtbl -> GetFilter(This,ppFilter)\n\n#define IAMMultiMediaStream_AddMediaStream(This,pStreamObject,PurposeId,dwFlags,ppNewStream)\t\\\n    (This)->lpVtbl -> AddMediaStream(This,pStreamObject,PurposeId,dwFlags,ppNewStream)\n\n#define IAMMultiMediaStream_OpenFile(This,pszFileName,dwFlags)\t\\\n    (This)->lpVtbl -> OpenFile(This,pszFileName,dwFlags)\n\n#define IAMMultiMediaStream_OpenMoniker(This,pCtx,pMoniker,dwFlags)\t\\\n    (This)->lpVtbl -> OpenMoniker(This,pCtx,pMoniker,dwFlags)\n\n#define IAMMultiMediaStream_Render(This,dwFlags)\t\\\n    (This)->lpVtbl -> Render(This,dwFlags)\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\nHRESULT STDMETHODCALLTYPE IAMMultiMediaStream_Initialize_Proxy( \n    IAMMultiMediaStream * This,\n    /* [in] */ STREAM_TYPE StreamType,\n    /* [in] */ DWORD dwFlags,\n    /* [in] */ IGraphBuilder *pFilterGraph);\n\n\nvoid __RPC_STUB IAMMultiMediaStream_Initialize_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMultiMediaStream_GetFilterGraph_Proxy( \n    IAMMultiMediaStream * This,\n    /* [out] */ IGraphBuilder **ppGraphBuilder);\n\n\nvoid __RPC_STUB IAMMultiMediaStream_GetFilterGraph_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMultiMediaStream_GetFilter_Proxy( \n    IAMMultiMediaStream * This,\n    /* [out] */ IMediaStreamFilter **ppFilter);\n\n\nvoid __RPC_STUB IAMMultiMediaStream_GetFilter_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMultiMediaStream_AddMediaStream_Proxy( \n    IAMMultiMediaStream * This,\n    /* [in] */ IUnknown *pStreamObject,\n    /* [in] */ const MSPID *PurposeId,\n    /* [in] */ DWORD dwFlags,\n    /* [out] */ IMediaStream **ppNewStream);\n\n\nvoid __RPC_STUB IAMMultiMediaStream_AddMediaStream_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMultiMediaStream_OpenFile_Proxy( \n    IAMMultiMediaStream * This,\n    /* [in] */ LPCWSTR pszFileName,\n    /* [in] */ DWORD dwFlags);\n\n\nvoid __RPC_STUB IAMMultiMediaStream_OpenFile_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMultiMediaStream_OpenMoniker_Proxy( \n    IAMMultiMediaStream * This,\n    /* [in] */ IBindCtx *pCtx,\n    /* [in] */ IMoniker *pMoniker,\n    /* [in] */ DWORD dwFlags);\n\n\nvoid __RPC_STUB IAMMultiMediaStream_OpenMoniker_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMultiMediaStream_Render_Proxy( \n    IAMMultiMediaStream * This,\n    /* [in] */ DWORD dwFlags);\n\n\nvoid __RPC_STUB IAMMultiMediaStream_Render_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\n\n#endif \t/* __IAMMultiMediaStream_INTERFACE_DEFINED__ */\n\n\n#ifndef __IAMMediaStream_INTERFACE_DEFINED__\n#define __IAMMediaStream_INTERFACE_DEFINED__\n\n/* interface IAMMediaStream */\n/* [unique][uuid][object] */ \n\n\nEXTERN_C const IID IID_IAMMediaStream;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"BEBE595D-9A6F-11d0-8FDE-00C04FD9189D\")\n    IAMMediaStream : public IMediaStream\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE Initialize( \n            /* [in] */ IUnknown *pSourceObject,\n            /* [in] */ DWORD dwFlags,\n            /* [in] */ REFMSPID PurposeId,\n            /* [in] */ const STREAM_TYPE StreamType) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetState( \n            /* [in] */ FILTER_STATE State) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE JoinAMMultiMediaStream( \n            /* [in] */ IAMMultiMediaStream *pAMMultiMediaStream) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE JoinFilter( \n            /* [in] */ IMediaStreamFilter *pMediaStreamFilter) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE JoinFilterGraph( \n            /* [in] */ IFilterGraph *pFilterGraph) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct IAMMediaStreamVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            IAMMediaStream * This,\n            /* [in] */ REFIID riid,\n            /* [iid_is][out] */ void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            IAMMediaStream * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            IAMMediaStream * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetMultiMediaStream )( \n            IAMMediaStream * This,\n            /* [out] */ IMultiMediaStream **ppMultiMediaStream);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetInformation )( \n            IAMMediaStream * This,\n            /* [out] */ MSPID *pPurposeId,\n            /* [out] */ STREAM_TYPE *pType);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetSameFormat )( \n            IAMMediaStream * This,\n            /* [in] */ IMediaStream *pStreamThatHasDesiredFormat,\n            /* [in] */ DWORD dwFlags);\n        \n        HRESULT ( STDMETHODCALLTYPE *AllocateSample )( \n            IAMMediaStream * This,\n            /* [in] */ DWORD dwFlags,\n            /* [out] */ IStreamSample **ppSample);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateSharedSample )( \n            IAMMediaStream * This,\n            /* [in] */ IStreamSample *pExistingSample,\n            /* [in] */ DWORD dwFlags,\n            /* [out] */ IStreamSample **ppNewSample);\n        \n        HRESULT ( STDMETHODCALLTYPE *SendEndOfStream )( \n            IAMMediaStream * This,\n            DWORD dwFlags);\n        \n        HRESULT ( STDMETHODCALLTYPE *Initialize )( \n            IAMMediaStream * This,\n            /* [in] */ IUnknown *pSourceObject,\n            /* [in] */ DWORD dwFlags,\n            /* [in] */ REFMSPID PurposeId,\n            /* [in] */ const STREAM_TYPE StreamType);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetState )( \n            IAMMediaStream * This,\n            /* [in] */ FILTER_STATE State);\n        \n        HRESULT ( STDMETHODCALLTYPE *JoinAMMultiMediaStream )( \n            IAMMediaStream * This,\n            /* [in] */ IAMMultiMediaStream *pAMMultiMediaStream);\n        \n        HRESULT ( STDMETHODCALLTYPE *JoinFilter )( \n            IAMMediaStream * This,\n            /* [in] */ IMediaStreamFilter *pMediaStreamFilter);\n        \n        HRESULT ( STDMETHODCALLTYPE *JoinFilterGraph )( \n            IAMMediaStream * This,\n            /* [in] */ IFilterGraph *pFilterGraph);\n        \n        END_INTERFACE\n    } IAMMediaStreamVtbl;\n\n    interface IAMMediaStream\n    {\n        CONST_VTBL struct IAMMediaStreamVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define IAMMediaStream_QueryInterface(This,riid,ppvObject)\t\\\n    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)\n\n#define IAMMediaStream_AddRef(This)\t\\\n    (This)->lpVtbl -> AddRef(This)\n\n#define IAMMediaStream_Release(This)\t\\\n    (This)->lpVtbl -> Release(This)\n\n\n#define IAMMediaStream_GetMultiMediaStream(This,ppMultiMediaStream)\t\\\n    (This)->lpVtbl -> GetMultiMediaStream(This,ppMultiMediaStream)\n\n#define IAMMediaStream_GetInformation(This,pPurposeId,pType)\t\\\n    (This)->lpVtbl -> GetInformation(This,pPurposeId,pType)\n\n#define IAMMediaStream_SetSameFormat(This,pStreamThatHasDesiredFormat,dwFlags)\t\\\n    (This)->lpVtbl -> SetSameFormat(This,pStreamThatHasDesiredFormat,dwFlags)\n\n#define IAMMediaStream_AllocateSample(This,dwFlags,ppSample)\t\\\n    (This)->lpVtbl -> AllocateSample(This,dwFlags,ppSample)\n\n#define IAMMediaStream_CreateSharedSample(This,pExistingSample,dwFlags,ppNewSample)\t\\\n    (This)->lpVtbl -> CreateSharedSample(This,pExistingSample,dwFlags,ppNewSample)\n\n#define IAMMediaStream_SendEndOfStream(This,dwFlags)\t\\\n    (This)->lpVtbl -> SendEndOfStream(This,dwFlags)\n\n\n#define IAMMediaStream_Initialize(This,pSourceObject,dwFlags,PurposeId,StreamType)\t\\\n    (This)->lpVtbl -> Initialize(This,pSourceObject,dwFlags,PurposeId,StreamType)\n\n#define IAMMediaStream_SetState(This,State)\t\\\n    (This)->lpVtbl -> SetState(This,State)\n\n#define IAMMediaStream_JoinAMMultiMediaStream(This,pAMMultiMediaStream)\t\\\n    (This)->lpVtbl -> JoinAMMultiMediaStream(This,pAMMultiMediaStream)\n\n#define IAMMediaStream_JoinFilter(This,pMediaStreamFilter)\t\\\n    (This)->lpVtbl -> JoinFilter(This,pMediaStreamFilter)\n\n#define IAMMediaStream_JoinFilterGraph(This,pFilterGraph)\t\\\n    (This)->lpVtbl -> JoinFilterGraph(This,pFilterGraph)\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaStream_Initialize_Proxy( \n    IAMMediaStream * This,\n    /* [in] */ IUnknown *pSourceObject,\n    /* [in] */ DWORD dwFlags,\n    /* [in] */ REFMSPID PurposeId,\n    /* [in] */ const STREAM_TYPE StreamType);\n\n\nvoid __RPC_STUB IAMMediaStream_Initialize_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaStream_SetState_Proxy( \n    IAMMediaStream * This,\n    /* [in] */ FILTER_STATE State);\n\n\nvoid __RPC_STUB IAMMediaStream_SetState_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaStream_JoinAMMultiMediaStream_Proxy( \n    IAMMediaStream * This,\n    /* [in] */ IAMMultiMediaStream *pAMMultiMediaStream);\n\n\nvoid __RPC_STUB IAMMediaStream_JoinAMMultiMediaStream_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaStream_JoinFilter_Proxy( \n    IAMMediaStream * This,\n    /* [in] */ IMediaStreamFilter *pMediaStreamFilter);\n\n\nvoid __RPC_STUB IAMMediaStream_JoinFilter_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaStream_JoinFilterGraph_Proxy( \n    IAMMediaStream * This,\n    /* [in] */ IFilterGraph *pFilterGraph);\n\n\nvoid __RPC_STUB IAMMediaStream_JoinFilterGraph_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\n\n#endif \t/* __IAMMediaStream_INTERFACE_DEFINED__ */\n\n\n#ifndef __IMediaStreamFilter_INTERFACE_DEFINED__\n#define __IMediaStreamFilter_INTERFACE_DEFINED__\n\n/* interface IMediaStreamFilter */\n/* [unique][uuid][local][object] */ \n\n\nEXTERN_C const IID IID_IMediaStreamFilter;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"BEBE595E-9A6F-11d0-8FDE-00C04FD9189D\")\n    IMediaStreamFilter : public IBaseFilter\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE AddMediaStream( \n            /* [in] */ IAMMediaStream *pAMMediaStream) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetMediaStream( \n            /* [in] */ REFMSPID idPurpose,\n            /* [out] */ IMediaStream **ppMediaStream) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE EnumMediaStreams( \n            /* [in] */ long Index,\n            /* [out] */ IMediaStream **ppMediaStream) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SupportSeeking( \n            /* [in] */ BOOL bRenderer) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE ReferenceTimeToStreamTime( \n            /* [out][in] */ REFERENCE_TIME *pTime) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetCurrentStreamTime( \n            /* [out] */ REFERENCE_TIME *pCurrentStreamTime) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE WaitUntil( \n            /* [in] */ REFERENCE_TIME WaitStreamTime) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE Flush( \n            /* [in] */ BOOL bCancelEOS) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE EndOfStream( void) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct IMediaStreamFilterVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            IMediaStreamFilter * This,\n            /* [in] */ REFIID riid,\n            /* [iid_is][out] */ void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            IMediaStreamFilter * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            IMediaStreamFilter * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetClassID )( \n            IMediaStreamFilter * This,\n            /* [out] */ CLSID *pClassID);\n        \n        HRESULT ( STDMETHODCALLTYPE *Stop )( \n            IMediaStreamFilter * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *Pause )( \n            IMediaStreamFilter * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *Run )( \n            IMediaStreamFilter * This,\n            REFERENCE_TIME tStart);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetState )( \n            IMediaStreamFilter * This,\n            /* [in] */ DWORD dwMilliSecsTimeout,\n            /* [out] */ FILTER_STATE *State);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetSyncSource )( \n            IMediaStreamFilter * This,\n            /* [in] */ IReferenceClock *pClock);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetSyncSource )( \n            IMediaStreamFilter * This,\n            /* [out] */ IReferenceClock **pClock);\n        \n        HRESULT ( STDMETHODCALLTYPE *EnumPins )( \n            IMediaStreamFilter * This,\n            /* [out] */ IEnumPins **ppEnum);\n        \n        HRESULT ( STDMETHODCALLTYPE *FindPin )( \n            IMediaStreamFilter * This,\n            /* [string][in] */ LPCWSTR Id,\n            /* [out] */ IPin **ppPin);\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryFilterInfo )( \n            IMediaStreamFilter * This,\n            /* [out] */ FILTER_INFO *pInfo);\n        \n        HRESULT ( STDMETHODCALLTYPE *JoinFilterGraph )( \n            IMediaStreamFilter * This,\n            /* [in] */ IFilterGraph *pGraph,\n            /* [string][in] */ LPCWSTR pName);\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryVendorInfo )( \n            IMediaStreamFilter * This,\n            /* [string][out] */ LPWSTR *pVendorInfo);\n        \n        HRESULT ( STDMETHODCALLTYPE *AddMediaStream )( \n            IMediaStreamFilter * This,\n            /* [in] */ IAMMediaStream *pAMMediaStream);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetMediaStream )( \n            IMediaStreamFilter * This,\n            /* [in] */ REFMSPID idPurpose,\n            /* [out] */ IMediaStream **ppMediaStream);\n        \n        HRESULT ( STDMETHODCALLTYPE *EnumMediaStreams )( \n            IMediaStreamFilter * This,\n            /* [in] */ long Index,\n            /* [out] */ IMediaStream **ppMediaStream);\n        \n        HRESULT ( STDMETHODCALLTYPE *SupportSeeking )( \n            IMediaStreamFilter * This,\n            /* [in] */ BOOL bRenderer);\n        \n        HRESULT ( STDMETHODCALLTYPE *ReferenceTimeToStreamTime )( \n            IMediaStreamFilter * This,\n            /* [out][in] */ REFERENCE_TIME *pTime);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetCurrentStreamTime )( \n            IMediaStreamFilter * This,\n            /* [out] */ REFERENCE_TIME *pCurrentStreamTime);\n        \n        HRESULT ( STDMETHODCALLTYPE *WaitUntil )( \n            IMediaStreamFilter * This,\n            /* [in] */ REFERENCE_TIME WaitStreamTime);\n        \n        HRESULT ( STDMETHODCALLTYPE *Flush )( \n            IMediaStreamFilter * This,\n            /* [in] */ BOOL bCancelEOS);\n        \n        HRESULT ( STDMETHODCALLTYPE *EndOfStream )( \n            IMediaStreamFilter * This);\n        \n        END_INTERFACE\n    } IMediaStreamFilterVtbl;\n\n    interface IMediaStreamFilter\n    {\n        CONST_VTBL struct IMediaStreamFilterVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define IMediaStreamFilter_QueryInterface(This,riid,ppvObject)\t\\\n    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)\n\n#define IMediaStreamFilter_AddRef(This)\t\\\n    (This)->lpVtbl -> AddRef(This)\n\n#define IMediaStreamFilter_Release(This)\t\\\n    (This)->lpVtbl -> Release(This)\n\n\n#define IMediaStreamFilter_GetClassID(This,pClassID)\t\\\n    (This)->lpVtbl -> GetClassID(This,pClassID)\n\n\n#define IMediaStreamFilter_Stop(This)\t\\\n    (This)->lpVtbl -> Stop(This)\n\n#define IMediaStreamFilter_Pause(This)\t\\\n    (This)->lpVtbl -> Pause(This)\n\n#define IMediaStreamFilter_Run(This,tStart)\t\\\n    (This)->lpVtbl -> Run(This,tStart)\n\n#define IMediaStreamFilter_GetState(This,dwMilliSecsTimeout,State)\t\\\n    (This)->lpVtbl -> GetState(This,dwMilliSecsTimeout,State)\n\n#define IMediaStreamFilter_SetSyncSource(This,pClock)\t\\\n    (This)->lpVtbl -> SetSyncSource(This,pClock)\n\n#define IMediaStreamFilter_GetSyncSource(This,pClock)\t\\\n    (This)->lpVtbl -> GetSyncSource(This,pClock)\n\n\n#define IMediaStreamFilter_EnumPins(This,ppEnum)\t\\\n    (This)->lpVtbl -> EnumPins(This,ppEnum)\n\n#define IMediaStreamFilter_FindPin(This,Id,ppPin)\t\\\n    (This)->lpVtbl -> FindPin(This,Id,ppPin)\n\n#define IMediaStreamFilter_QueryFilterInfo(This,pInfo)\t\\\n    (This)->lpVtbl -> QueryFilterInfo(This,pInfo)\n\n#define IMediaStreamFilter_JoinFilterGraph(This,pGraph,pName)\t\\\n    (This)->lpVtbl -> JoinFilterGraph(This,pGraph,pName)\n\n#define IMediaStreamFilter_QueryVendorInfo(This,pVendorInfo)\t\\\n    (This)->lpVtbl -> QueryVendorInfo(This,pVendorInfo)\n\n\n#define IMediaStreamFilter_AddMediaStream(This,pAMMediaStream)\t\\\n    (This)->lpVtbl -> AddMediaStream(This,pAMMediaStream)\n\n#define IMediaStreamFilter_GetMediaStream(This,idPurpose,ppMediaStream)\t\\\n    (This)->lpVtbl -> GetMediaStream(This,idPurpose,ppMediaStream)\n\n#define IMediaStreamFilter_EnumMediaStreams(This,Index,ppMediaStream)\t\\\n    (This)->lpVtbl -> EnumMediaStreams(This,Index,ppMediaStream)\n\n#define IMediaStreamFilter_SupportSeeking(This,bRenderer)\t\\\n    (This)->lpVtbl -> SupportSeeking(This,bRenderer)\n\n#define IMediaStreamFilter_ReferenceTimeToStreamTime(This,pTime)\t\\\n    (This)->lpVtbl -> ReferenceTimeToStreamTime(This,pTime)\n\n#define IMediaStreamFilter_GetCurrentStreamTime(This,pCurrentStreamTime)\t\\\n    (This)->lpVtbl -> GetCurrentStreamTime(This,pCurrentStreamTime)\n\n#define IMediaStreamFilter_WaitUntil(This,WaitStreamTime)\t\\\n    (This)->lpVtbl -> WaitUntil(This,WaitStreamTime)\n\n#define IMediaStreamFilter_Flush(This,bCancelEOS)\t\\\n    (This)->lpVtbl -> Flush(This,bCancelEOS)\n\n#define IMediaStreamFilter_EndOfStream(This)\t\\\n    (This)->lpVtbl -> EndOfStream(This)\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\nHRESULT STDMETHODCALLTYPE IMediaStreamFilter_AddMediaStream_Proxy( \n    IMediaStreamFilter * This,\n    /* [in] */ IAMMediaStream *pAMMediaStream);\n\n\nvoid __RPC_STUB IMediaStreamFilter_AddMediaStream_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IMediaStreamFilter_GetMediaStream_Proxy( \n    IMediaStreamFilter * This,\n    /* [in] */ REFMSPID idPurpose,\n    /* [out] */ IMediaStream **ppMediaStream);\n\n\nvoid __RPC_STUB IMediaStreamFilter_GetMediaStream_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IMediaStreamFilter_EnumMediaStreams_Proxy( \n    IMediaStreamFilter * This,\n    /* [in] */ long Index,\n    /* [out] */ IMediaStream **ppMediaStream);\n\n\nvoid __RPC_STUB IMediaStreamFilter_EnumMediaStreams_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IMediaStreamFilter_SupportSeeking_Proxy( \n    IMediaStreamFilter * This,\n    /* [in] */ BOOL bRenderer);\n\n\nvoid __RPC_STUB IMediaStreamFilter_SupportSeeking_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IMediaStreamFilter_ReferenceTimeToStreamTime_Proxy( \n    IMediaStreamFilter * This,\n    /* [out][in] */ REFERENCE_TIME *pTime);\n\n\nvoid __RPC_STUB IMediaStreamFilter_ReferenceTimeToStreamTime_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IMediaStreamFilter_GetCurrentStreamTime_Proxy( \n    IMediaStreamFilter * This,\n    /* [out] */ REFERENCE_TIME *pCurrentStreamTime);\n\n\nvoid __RPC_STUB IMediaStreamFilter_GetCurrentStreamTime_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IMediaStreamFilter_WaitUntil_Proxy( \n    IMediaStreamFilter * This,\n    /* [in] */ REFERENCE_TIME WaitStreamTime);\n\n\nvoid __RPC_STUB IMediaStreamFilter_WaitUntil_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IMediaStreamFilter_Flush_Proxy( \n    IMediaStreamFilter * This,\n    /* [in] */ BOOL bCancelEOS);\n\n\nvoid __RPC_STUB IMediaStreamFilter_Flush_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IMediaStreamFilter_EndOfStream_Proxy( \n    IMediaStreamFilter * This);\n\n\nvoid __RPC_STUB IMediaStreamFilter_EndOfStream_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\n\n#endif \t/* __IMediaStreamFilter_INTERFACE_DEFINED__ */\n\n\n#ifndef __IDirectDrawMediaSampleAllocator_INTERFACE_DEFINED__\n#define __IDirectDrawMediaSampleAllocator_INTERFACE_DEFINED__\n\n/* interface IDirectDrawMediaSampleAllocator */\n/* [unique][uuid][local][object] */ \n\n\nEXTERN_C const IID IID_IDirectDrawMediaSampleAllocator;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"AB6B4AFC-F6E4-11d0-900D-00C04FD9189D\")\n    IDirectDrawMediaSampleAllocator : public IUnknown\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE GetDirectDraw( \n            IDirectDraw **ppDirectDraw) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct IDirectDrawMediaSampleAllocatorVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            IDirectDrawMediaSampleAllocator * This,\n            /* [in] */ REFIID riid,\n            /* [iid_is][out] */ void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            IDirectDrawMediaSampleAllocator * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            IDirectDrawMediaSampleAllocator * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetDirectDraw )( \n            IDirectDrawMediaSampleAllocator * This,\n            IDirectDraw **ppDirectDraw);\n        \n        END_INTERFACE\n    } IDirectDrawMediaSampleAllocatorVtbl;\n\n    interface IDirectDrawMediaSampleAllocator\n    {\n        CONST_VTBL struct IDirectDrawMediaSampleAllocatorVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define IDirectDrawMediaSampleAllocator_QueryInterface(This,riid,ppvObject)\t\\\n    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)\n\n#define IDirectDrawMediaSampleAllocator_AddRef(This)\t\\\n    (This)->lpVtbl -> AddRef(This)\n\n#define IDirectDrawMediaSampleAllocator_Release(This)\t\\\n    (This)->lpVtbl -> Release(This)\n\n\n#define IDirectDrawMediaSampleAllocator_GetDirectDraw(This,ppDirectDraw)\t\\\n    (This)->lpVtbl -> GetDirectDraw(This,ppDirectDraw)\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\nHRESULT STDMETHODCALLTYPE IDirectDrawMediaSampleAllocator_GetDirectDraw_Proxy( \n    IDirectDrawMediaSampleAllocator * This,\n    IDirectDraw **ppDirectDraw);\n\n\nvoid __RPC_STUB IDirectDrawMediaSampleAllocator_GetDirectDraw_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\n\n#endif \t/* __IDirectDrawMediaSampleAllocator_INTERFACE_DEFINED__ */\n\n\n#ifndef __IDirectDrawMediaSample_INTERFACE_DEFINED__\n#define __IDirectDrawMediaSample_INTERFACE_DEFINED__\n\n/* interface IDirectDrawMediaSample */\n/* [unique][uuid][local][object] */ \n\n\nEXTERN_C const IID IID_IDirectDrawMediaSample;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"AB6B4AFE-F6E4-11d0-900D-00C04FD9189D\")\n    IDirectDrawMediaSample : public IUnknown\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE GetSurfaceAndReleaseLock( \n            /* [out] */ IDirectDrawSurface **ppDirectDrawSurface,\n            /* [out] */ RECT *pRect) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE LockMediaSamplePointer( void) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct IDirectDrawMediaSampleVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            IDirectDrawMediaSample * This,\n            /* [in] */ REFIID riid,\n            /* [iid_is][out] */ void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            IDirectDrawMediaSample * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            IDirectDrawMediaSample * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetSurfaceAndReleaseLock )( \n            IDirectDrawMediaSample * This,\n            /* [out] */ IDirectDrawSurface **ppDirectDrawSurface,\n            /* [out] */ RECT *pRect);\n        \n        HRESULT ( STDMETHODCALLTYPE *LockMediaSamplePointer )( \n            IDirectDrawMediaSample * This);\n        \n        END_INTERFACE\n    } IDirectDrawMediaSampleVtbl;\n\n    interface IDirectDrawMediaSample\n    {\n        CONST_VTBL struct IDirectDrawMediaSampleVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define IDirectDrawMediaSample_QueryInterface(This,riid,ppvObject)\t\\\n    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)\n\n#define IDirectDrawMediaSample_AddRef(This)\t\\\n    (This)->lpVtbl -> AddRef(This)\n\n#define IDirectDrawMediaSample_Release(This)\t\\\n    (This)->lpVtbl -> Release(This)\n\n\n#define IDirectDrawMediaSample_GetSurfaceAndReleaseLock(This,ppDirectDrawSurface,pRect)\t\\\n    (This)->lpVtbl -> GetSurfaceAndReleaseLock(This,ppDirectDrawSurface,pRect)\n\n#define IDirectDrawMediaSample_LockMediaSamplePointer(This)\t\\\n    (This)->lpVtbl -> LockMediaSamplePointer(This)\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\nHRESULT STDMETHODCALLTYPE IDirectDrawMediaSample_GetSurfaceAndReleaseLock_Proxy( \n    IDirectDrawMediaSample * This,\n    /* [out] */ IDirectDrawSurface **ppDirectDrawSurface,\n    /* [out] */ RECT *pRect);\n\n\nvoid __RPC_STUB IDirectDrawMediaSample_GetSurfaceAndReleaseLock_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IDirectDrawMediaSample_LockMediaSamplePointer_Proxy( \n    IDirectDrawMediaSample * This);\n\n\nvoid __RPC_STUB IDirectDrawMediaSample_LockMediaSamplePointer_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\n\n#endif \t/* __IDirectDrawMediaSample_INTERFACE_DEFINED__ */\n\n\n#ifndef __IAMMediaTypeStream_INTERFACE_DEFINED__\n#define __IAMMediaTypeStream_INTERFACE_DEFINED__\n\n/* interface IAMMediaTypeStream */\n/* [unique][uuid][local][object] */ \n\n\nEXTERN_C const IID IID_IAMMediaTypeStream;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"AB6B4AFA-F6E4-11d0-900D-00C04FD9189D\")\n    IAMMediaTypeStream : public IMediaStream\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE GetFormat( \n            /* [out] */ AM_MEDIA_TYPE *pMediaType,\n            /* [in] */ DWORD dwFlags) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetFormat( \n            /* [in] */ AM_MEDIA_TYPE *pMediaType,\n            /* [in] */ DWORD dwFlags) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE CreateSample( \n            /* [in] */ long lSampleSize,\n            /* [in] */ BYTE *pbBuffer,\n            /* [in] */ DWORD dwFlags,\n            /* [in] */ IUnknown *pUnkOuter,\n            /* [out] */ IAMMediaTypeSample **ppAMMediaTypeSample) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetStreamAllocatorRequirements( \n            /* [out] */ ALLOCATOR_PROPERTIES *pProps) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetStreamAllocatorRequirements( \n            /* [in] */ ALLOCATOR_PROPERTIES *pProps) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct IAMMediaTypeStreamVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            IAMMediaTypeStream * This,\n            /* [in] */ REFIID riid,\n            /* [iid_is][out] */ void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            IAMMediaTypeStream * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            IAMMediaTypeStream * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetMultiMediaStream )( \n            IAMMediaTypeStream * This,\n            /* [out] */ IMultiMediaStream **ppMultiMediaStream);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetInformation )( \n            IAMMediaTypeStream * This,\n            /* [out] */ MSPID *pPurposeId,\n            /* [out] */ STREAM_TYPE *pType);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetSameFormat )( \n            IAMMediaTypeStream * This,\n            /* [in] */ IMediaStream *pStreamThatHasDesiredFormat,\n            /* [in] */ DWORD dwFlags);\n        \n        HRESULT ( STDMETHODCALLTYPE *AllocateSample )( \n            IAMMediaTypeStream * This,\n            /* [in] */ DWORD dwFlags,\n            /* [out] */ IStreamSample **ppSample);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateSharedSample )( \n            IAMMediaTypeStream * This,\n            /* [in] */ IStreamSample *pExistingSample,\n            /* [in] */ DWORD dwFlags,\n            /* [out] */ IStreamSample **ppNewSample);\n        \n        HRESULT ( STDMETHODCALLTYPE *SendEndOfStream )( \n            IAMMediaTypeStream * This,\n            DWORD dwFlags);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetFormat )( \n            IAMMediaTypeStream * This,\n            /* [out] */ AM_MEDIA_TYPE *pMediaType,\n            /* [in] */ DWORD dwFlags);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetFormat )( \n            IAMMediaTypeStream * This,\n            /* [in] */ AM_MEDIA_TYPE *pMediaType,\n            /* [in] */ DWORD dwFlags);\n        \n        HRESULT ( STDMETHODCALLTYPE *CreateSample )( \n            IAMMediaTypeStream * This,\n            /* [in] */ long lSampleSize,\n            /* [in] */ BYTE *pbBuffer,\n            /* [in] */ DWORD dwFlags,\n            /* [in] */ IUnknown *pUnkOuter,\n            /* [out] */ IAMMediaTypeSample **ppAMMediaTypeSample);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetStreamAllocatorRequirements )( \n            IAMMediaTypeStream * This,\n            /* [out] */ ALLOCATOR_PROPERTIES *pProps);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetStreamAllocatorRequirements )( \n            IAMMediaTypeStream * This,\n            /* [in] */ ALLOCATOR_PROPERTIES *pProps);\n        \n        END_INTERFACE\n    } IAMMediaTypeStreamVtbl;\n\n    interface IAMMediaTypeStream\n    {\n        CONST_VTBL struct IAMMediaTypeStreamVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define IAMMediaTypeStream_QueryInterface(This,riid,ppvObject)\t\\\n    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)\n\n#define IAMMediaTypeStream_AddRef(This)\t\\\n    (This)->lpVtbl -> AddRef(This)\n\n#define IAMMediaTypeStream_Release(This)\t\\\n    (This)->lpVtbl -> Release(This)\n\n\n#define IAMMediaTypeStream_GetMultiMediaStream(This,ppMultiMediaStream)\t\\\n    (This)->lpVtbl -> GetMultiMediaStream(This,ppMultiMediaStream)\n\n#define IAMMediaTypeStream_GetInformation(This,pPurposeId,pType)\t\\\n    (This)->lpVtbl -> GetInformation(This,pPurposeId,pType)\n\n#define IAMMediaTypeStream_SetSameFormat(This,pStreamThatHasDesiredFormat,dwFlags)\t\\\n    (This)->lpVtbl -> SetSameFormat(This,pStreamThatHasDesiredFormat,dwFlags)\n\n#define IAMMediaTypeStream_AllocateSample(This,dwFlags,ppSample)\t\\\n    (This)->lpVtbl -> AllocateSample(This,dwFlags,ppSample)\n\n#define IAMMediaTypeStream_CreateSharedSample(This,pExistingSample,dwFlags,ppNewSample)\t\\\n    (This)->lpVtbl -> CreateSharedSample(This,pExistingSample,dwFlags,ppNewSample)\n\n#define IAMMediaTypeStream_SendEndOfStream(This,dwFlags)\t\\\n    (This)->lpVtbl -> SendEndOfStream(This,dwFlags)\n\n\n#define IAMMediaTypeStream_GetFormat(This,pMediaType,dwFlags)\t\\\n    (This)->lpVtbl -> GetFormat(This,pMediaType,dwFlags)\n\n#define IAMMediaTypeStream_SetFormat(This,pMediaType,dwFlags)\t\\\n    (This)->lpVtbl -> SetFormat(This,pMediaType,dwFlags)\n\n#define IAMMediaTypeStream_CreateSample(This,lSampleSize,pbBuffer,dwFlags,pUnkOuter,ppAMMediaTypeSample)\t\\\n    (This)->lpVtbl -> CreateSample(This,lSampleSize,pbBuffer,dwFlags,pUnkOuter,ppAMMediaTypeSample)\n\n#define IAMMediaTypeStream_GetStreamAllocatorRequirements(This,pProps)\t\\\n    (This)->lpVtbl -> GetStreamAllocatorRequirements(This,pProps)\n\n#define IAMMediaTypeStream_SetStreamAllocatorRequirements(This,pProps)\t\\\n    (This)->lpVtbl -> SetStreamAllocatorRequirements(This,pProps)\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeStream_GetFormat_Proxy( \n    IAMMediaTypeStream * This,\n    /* [out] */ AM_MEDIA_TYPE *pMediaType,\n    /* [in] */ DWORD dwFlags);\n\n\nvoid __RPC_STUB IAMMediaTypeStream_GetFormat_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeStream_SetFormat_Proxy( \n    IAMMediaTypeStream * This,\n    /* [in] */ AM_MEDIA_TYPE *pMediaType,\n    /* [in] */ DWORD dwFlags);\n\n\nvoid __RPC_STUB IAMMediaTypeStream_SetFormat_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeStream_CreateSample_Proxy( \n    IAMMediaTypeStream * This,\n    /* [in] */ long lSampleSize,\n    /* [in] */ BYTE *pbBuffer,\n    /* [in] */ DWORD dwFlags,\n    /* [in] */ IUnknown *pUnkOuter,\n    /* [out] */ IAMMediaTypeSample **ppAMMediaTypeSample);\n\n\nvoid __RPC_STUB IAMMediaTypeStream_CreateSample_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeStream_GetStreamAllocatorRequirements_Proxy( \n    IAMMediaTypeStream * This,\n    /* [out] */ ALLOCATOR_PROPERTIES *pProps);\n\n\nvoid __RPC_STUB IAMMediaTypeStream_GetStreamAllocatorRequirements_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeStream_SetStreamAllocatorRequirements_Proxy( \n    IAMMediaTypeStream * This,\n    /* [in] */ ALLOCATOR_PROPERTIES *pProps);\n\n\nvoid __RPC_STUB IAMMediaTypeStream_SetStreamAllocatorRequirements_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\n\n#endif \t/* __IAMMediaTypeStream_INTERFACE_DEFINED__ */\n\n\n#ifndef __IAMMediaTypeSample_INTERFACE_DEFINED__\n#define __IAMMediaTypeSample_INTERFACE_DEFINED__\n\n/* interface IAMMediaTypeSample */\n/* [unique][uuid][local][object] */ \n\n\nEXTERN_C const IID IID_IAMMediaTypeSample;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"AB6B4AFB-F6E4-11d0-900D-00C04FD9189D\")\n    IAMMediaTypeSample : public IStreamSample\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE SetPointer( \n            /* [in] */ BYTE *pBuffer,\n            /* [in] */ long lSize) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetPointer( \n            /* [out] */ BYTE **ppBuffer) = 0;\n        \n        virtual long STDMETHODCALLTYPE GetSize( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetTime( \n            /* [out] */ REFERENCE_TIME *pTimeStart,\n            /* [out] */ REFERENCE_TIME *pTimeEnd) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetTime( \n            /* [in] */ REFERENCE_TIME *pTimeStart,\n            /* [in] */ REFERENCE_TIME *pTimeEnd) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE IsSyncPoint( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetSyncPoint( \n            BOOL bIsSyncPoint) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE IsPreroll( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetPreroll( \n            BOOL bIsPreroll) = 0;\n        \n        virtual long STDMETHODCALLTYPE GetActualDataLength( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetActualDataLength( \n            long __MIDL_0020) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetMediaType( \n            AM_MEDIA_TYPE **ppMediaType) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetMediaType( \n            AM_MEDIA_TYPE *pMediaType) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE IsDiscontinuity( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetDiscontinuity( \n            BOOL bDiscontinuity) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetMediaTime( \n            /* [out] */ LONGLONG *pTimeStart,\n            /* [out] */ LONGLONG *pTimeEnd) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetMediaTime( \n            /* [in] */ LONGLONG *pTimeStart,\n            /* [in] */ LONGLONG *pTimeEnd) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct IAMMediaTypeSampleVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            IAMMediaTypeSample * This,\n            /* [in] */ REFIID riid,\n            /* [iid_is][out] */ void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            IAMMediaTypeSample * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            IAMMediaTypeSample * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetMediaStream )( \n            IAMMediaTypeSample * This,\n            /* [in] */ IMediaStream **ppMediaStream);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetSampleTimes )( \n            IAMMediaTypeSample * This,\n            /* [out] */ STREAM_TIME *pStartTime,\n            /* [out] */ STREAM_TIME *pEndTime,\n            /* [out] */ STREAM_TIME *pCurrentTime);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetSampleTimes )( \n            IAMMediaTypeSample * This,\n            /* [in] */ const STREAM_TIME *pStartTime,\n            /* [in] */ const STREAM_TIME *pEndTime);\n        \n        HRESULT ( STDMETHODCALLTYPE *Update )( \n            IAMMediaTypeSample * This,\n            /* [in] */ DWORD dwFlags,\n            /* [in] */ HANDLE hEvent,\n            /* [in] */ PAPCFUNC pfnAPC,\n            /* [in] */ DWORD_PTR dwAPCData);\n        \n        HRESULT ( STDMETHODCALLTYPE *CompletionStatus )( \n            IAMMediaTypeSample * This,\n            /* [in] */ DWORD dwFlags,\n            /* [in] */ DWORD dwMilliseconds);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPointer )( \n            IAMMediaTypeSample * This,\n            /* [in] */ BYTE *pBuffer,\n            /* [in] */ long lSize);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetPointer )( \n            IAMMediaTypeSample * This,\n            /* [out] */ BYTE **ppBuffer);\n        \n        long ( STDMETHODCALLTYPE *GetSize )( \n            IAMMediaTypeSample * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetTime )( \n            IAMMediaTypeSample * This,\n            /* [out] */ REFERENCE_TIME *pTimeStart,\n            /* [out] */ REFERENCE_TIME *pTimeEnd);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetTime )( \n            IAMMediaTypeSample * This,\n            /* [in] */ REFERENCE_TIME *pTimeStart,\n            /* [in] */ REFERENCE_TIME *pTimeEnd);\n        \n        HRESULT ( STDMETHODCALLTYPE *IsSyncPoint )( \n            IAMMediaTypeSample * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetSyncPoint )( \n            IAMMediaTypeSample * This,\n            BOOL bIsSyncPoint);\n        \n        HRESULT ( STDMETHODCALLTYPE *IsPreroll )( \n            IAMMediaTypeSample * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPreroll )( \n            IAMMediaTypeSample * This,\n            BOOL bIsPreroll);\n        \n        long ( STDMETHODCALLTYPE *GetActualDataLength )( \n            IAMMediaTypeSample * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetActualDataLength )( \n            IAMMediaTypeSample * This,\n            long __MIDL_0020);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetMediaType )( \n            IAMMediaTypeSample * This,\n            AM_MEDIA_TYPE **ppMediaType);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetMediaType )( \n            IAMMediaTypeSample * This,\n            AM_MEDIA_TYPE *pMediaType);\n        \n        HRESULT ( STDMETHODCALLTYPE *IsDiscontinuity )( \n            IAMMediaTypeSample * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetDiscontinuity )( \n            IAMMediaTypeSample * This,\n            BOOL bDiscontinuity);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetMediaTime )( \n            IAMMediaTypeSample * This,\n            /* [out] */ LONGLONG *pTimeStart,\n            /* [out] */ LONGLONG *pTimeEnd);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetMediaTime )( \n            IAMMediaTypeSample * This,\n            /* [in] */ LONGLONG *pTimeStart,\n            /* [in] */ LONGLONG *pTimeEnd);\n        \n        END_INTERFACE\n    } IAMMediaTypeSampleVtbl;\n\n    interface IAMMediaTypeSample\n    {\n        CONST_VTBL struct IAMMediaTypeSampleVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define IAMMediaTypeSample_QueryInterface(This,riid,ppvObject)\t\\\n    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)\n\n#define IAMMediaTypeSample_AddRef(This)\t\\\n    (This)->lpVtbl -> AddRef(This)\n\n#define IAMMediaTypeSample_Release(This)\t\\\n    (This)->lpVtbl -> Release(This)\n\n\n#define IAMMediaTypeSample_GetMediaStream(This,ppMediaStream)\t\\\n    (This)->lpVtbl -> GetMediaStream(This,ppMediaStream)\n\n#define IAMMediaTypeSample_GetSampleTimes(This,pStartTime,pEndTime,pCurrentTime)\t\\\n    (This)->lpVtbl -> GetSampleTimes(This,pStartTime,pEndTime,pCurrentTime)\n\n#define IAMMediaTypeSample_SetSampleTimes(This,pStartTime,pEndTime)\t\\\n    (This)->lpVtbl -> SetSampleTimes(This,pStartTime,pEndTime)\n\n#define IAMMediaTypeSample_Update(This,dwFlags,hEvent,pfnAPC,dwAPCData)\t\\\n    (This)->lpVtbl -> Update(This,dwFlags,hEvent,pfnAPC,dwAPCData)\n\n#define IAMMediaTypeSample_CompletionStatus(This,dwFlags,dwMilliseconds)\t\\\n    (This)->lpVtbl -> CompletionStatus(This,dwFlags,dwMilliseconds)\n\n\n#define IAMMediaTypeSample_SetPointer(This,pBuffer,lSize)\t\\\n    (This)->lpVtbl -> SetPointer(This,pBuffer,lSize)\n\n#define IAMMediaTypeSample_GetPointer(This,ppBuffer)\t\\\n    (This)->lpVtbl -> GetPointer(This,ppBuffer)\n\n#define IAMMediaTypeSample_GetSize(This)\t\\\n    (This)->lpVtbl -> GetSize(This)\n\n#define IAMMediaTypeSample_GetTime(This,pTimeStart,pTimeEnd)\t\\\n    (This)->lpVtbl -> GetTime(This,pTimeStart,pTimeEnd)\n\n#define IAMMediaTypeSample_SetTime(This,pTimeStart,pTimeEnd)\t\\\n    (This)->lpVtbl -> SetTime(This,pTimeStart,pTimeEnd)\n\n#define IAMMediaTypeSample_IsSyncPoint(This)\t\\\n    (This)->lpVtbl -> IsSyncPoint(This)\n\n#define IAMMediaTypeSample_SetSyncPoint(This,bIsSyncPoint)\t\\\n    (This)->lpVtbl -> SetSyncPoint(This,bIsSyncPoint)\n\n#define IAMMediaTypeSample_IsPreroll(This)\t\\\n    (This)->lpVtbl -> IsPreroll(This)\n\n#define IAMMediaTypeSample_SetPreroll(This,bIsPreroll)\t\\\n    (This)->lpVtbl -> SetPreroll(This,bIsPreroll)\n\n#define IAMMediaTypeSample_GetActualDataLength(This)\t\\\n    (This)->lpVtbl -> GetActualDataLength(This)\n\n#define IAMMediaTypeSample_SetActualDataLength(This,__MIDL_0020)\t\\\n    (This)->lpVtbl -> SetActualDataLength(This,__MIDL_0020)\n\n#define IAMMediaTypeSample_GetMediaType(This,ppMediaType)\t\\\n    (This)->lpVtbl -> GetMediaType(This,ppMediaType)\n\n#define IAMMediaTypeSample_SetMediaType(This,pMediaType)\t\\\n    (This)->lpVtbl -> SetMediaType(This,pMediaType)\n\n#define IAMMediaTypeSample_IsDiscontinuity(This)\t\\\n    (This)->lpVtbl -> IsDiscontinuity(This)\n\n#define IAMMediaTypeSample_SetDiscontinuity(This,bDiscontinuity)\t\\\n    (This)->lpVtbl -> SetDiscontinuity(This,bDiscontinuity)\n\n#define IAMMediaTypeSample_GetMediaTime(This,pTimeStart,pTimeEnd)\t\\\n    (This)->lpVtbl -> GetMediaTime(This,pTimeStart,pTimeEnd)\n\n#define IAMMediaTypeSample_SetMediaTime(This,pTimeStart,pTimeEnd)\t\\\n    (This)->lpVtbl -> SetMediaTime(This,pTimeStart,pTimeEnd)\n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeSample_SetPointer_Proxy( \n    IAMMediaTypeSample * This,\n    /* [in] */ BYTE *pBuffer,\n    /* [in] */ long lSize);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_SetPointer_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeSample_GetPointer_Proxy( \n    IAMMediaTypeSample * This,\n    /* [out] */ BYTE **ppBuffer);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_GetPointer_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nlong STDMETHODCALLTYPE IAMMediaTypeSample_GetSize_Proxy( \n    IAMMediaTypeSample * This);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_GetSize_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeSample_GetTime_Proxy( \n    IAMMediaTypeSample * This,\n    /* [out] */ REFERENCE_TIME *pTimeStart,\n    /* [out] */ REFERENCE_TIME *pTimeEnd);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_GetTime_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeSample_SetTime_Proxy( \n    IAMMediaTypeSample * This,\n    /* [in] */ REFERENCE_TIME *pTimeStart,\n    /* [in] */ REFERENCE_TIME *pTimeEnd);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_SetTime_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeSample_IsSyncPoint_Proxy( \n    IAMMediaTypeSample * This);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_IsSyncPoint_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeSample_SetSyncPoint_Proxy( \n    IAMMediaTypeSample * This,\n    BOOL bIsSyncPoint);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_SetSyncPoint_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeSample_IsPreroll_Proxy( \n    IAMMediaTypeSample * This);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_IsPreroll_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeSample_SetPreroll_Proxy( \n    IAMMediaTypeSample * This,\n    BOOL bIsPreroll);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_SetPreroll_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nlong STDMETHODCALLTYPE IAMMediaTypeSample_GetActualDataLength_Proxy( \n    IAMMediaTypeSample * This);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_GetActualDataLength_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeSample_SetActualDataLength_Proxy( \n    IAMMediaTypeSample * This,\n    long __MIDL_0020);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_SetActualDataLength_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeSample_GetMediaType_Proxy( \n    IAMMediaTypeSample * This,\n    AM_MEDIA_TYPE **ppMediaType);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_GetMediaType_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeSample_SetMediaType_Proxy( \n    IAMMediaTypeSample * This,\n    AM_MEDIA_TYPE *pMediaType);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_SetMediaType_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeSample_IsDiscontinuity_Proxy( \n    IAMMediaTypeSample * This);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_IsDiscontinuity_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeSample_SetDiscontinuity_Proxy( \n    IAMMediaTypeSample * This,\n    BOOL bDiscontinuity);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_SetDiscontinuity_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeSample_GetMediaTime_Proxy( \n    IAMMediaTypeSample * This,\n    /* [out] */ LONGLONG *pTimeStart,\n    /* [out] */ LONGLONG *pTimeEnd);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_GetMediaTime_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\nHRESULT STDMETHODCALLTYPE IAMMediaTypeSample_SetMediaTime_Proxy( \n    IAMMediaTypeSample * This,\n    /* [in] */ LONGLONG *pTimeStart,\n    /* [in] */ LONGLONG *pTimeEnd);\n\n\nvoid __RPC_STUB IAMMediaTypeSample_SetMediaTime_Stub(\n    IRpcStubBuffer *This,\n    IRpcChannelBuffer *_pRpcChannelBuffer,\n    PRPC_MESSAGE _pRpcMessage,\n    DWORD *_pdwStubPhase);\n\n\n\n#endif \t/* __IAMMediaTypeSample_INTERFACE_DEFINED__ */\n\n\n\n#ifndef __DirectShowStreamLib_LIBRARY_DEFINED__\n#define __DirectShowStreamLib_LIBRARY_DEFINED__\n\n/* library DirectShowStreamLib */\n/* [helpstring][version][uuid] */ \n\n\nEXTERN_C const IID LIBID_DirectShowStreamLib;\n\nEXTERN_C const CLSID CLSID_AMMultiMediaStream;\n\n#ifdef __cplusplus\n\nclass DECLSPEC_UUID(\"49c47ce5-9ba4-11d0-8212-00c04fc32c45\")\nAMMultiMediaStream;\n#endif\n#endif /* __DirectShowStreamLib_LIBRARY_DEFINED__ */\n\n/* interface __MIDL_itf_amstream_0428 */\n/* [local] */ \n\n#ifndef __cplusplus\nEXTERN_C const CLSID CLSID_AMMultiMediaStream;\n#endif\nDEFINE_GUID(CLSID_AMDirectDrawStream, /* 49c47ce4-9ba4-11d0-8212-00c04fc32c45 */\n0x49c47ce4, 0x9ba4, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);\nDEFINE_GUID(CLSID_AMAudioStream, /* 8496e040-af4c-11d0-8212-00c04fc32c45 */\n0x8496e040, 0xaf4c, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);\nDEFINE_GUID(CLSID_AMAudioData, /* f2468580-af8a-11d0-8212-00c04fc32c45 */\n0xf2468580, 0xaf8a, 0x11d0, 0x82, 0x12, 0x00, 0xc0, 0x4f, 0xc3, 0x2c, 0x45);\nDEFINE_GUID(CLSID_AMMediaTypeStream, /* CF0F2F7C-F7BF-11d0-900D-00C04FD9189D */\n0xcf0f2f7c, 0xf7bf, 0x11d0, 0x90, 0xd, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);\n\n\nextern RPC_IF_HANDLE __MIDL_itf_amstream_0428_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_amstream_0428_v0_0_s_ifspec;\n\n/* Additional Prototypes for ALL interfaces */\n\nunsigned long             __RPC_USER  BSTR_UserSize(     unsigned long *, unsigned long            , BSTR * ); \nunsigned char * __RPC_USER  BSTR_UserMarshal(  unsigned long *, unsigned char *, BSTR * ); \nunsigned char * __RPC_USER  BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); \nvoid                      __RPC_USER  BSTR_UserFree(     unsigned long *, BSTR * ); \n\n/* end of Additional Prototypes */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n\n"
  },
  {
    "path": "Include/d3d.h",
    "content": "/*==========================================================================;\n *\n *  Copyright (C) Microsoft Corporation.  All Rights Reserved.\n *\n *  File:   d3d.h\n *  Content:    Direct3D include file\n *\n ****************************************************************************/\n\n#ifndef _D3D_H_\n#define _D3D_H_\n\n#ifndef DIRECT3D_VERSION\n#define DIRECT3D_VERSION         0x0700\n#endif\n\n// include this file content only if compiling for <=DX7 interfaces\n#if(DIRECT3D_VERSION < 0x0800)\n\n\n#include <stdlib.h>\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n\n#define D3DAPI WINAPI\n\n/*\n * Interface IID's\n */\n#if defined( _WIN32 ) && !defined( _NO_COM)\nDEFINE_GUID( IID_IDirect3D,             0x3BBA0080,0x2421,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56 );\n#if(DIRECT3D_VERSION >= 0x0500)\nDEFINE_GUID( IID_IDirect3D2,            0x6aae1ec1,0x662a,0x11d0,0x88,0x9d,0x00,0xaa,0x00,0xbb,0xb7,0x6a);\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n#if(DIRECT3D_VERSION >= 0x0600)\nDEFINE_GUID( IID_IDirect3D3,            0xbb223240,0xe72b,0x11d0,0xa9,0xb4,0x00,0xaa,0x00,0xc0,0x99,0x3e);\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n#if(DIRECT3D_VERSION >= 0x0700)\nDEFINE_GUID( IID_IDirect3D7,            0xf5049e77,0x4861,0x11d2,0xa4,0x7,0x0,0xa0,0xc9,0x6,0x29,0xa8);\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n#if(DIRECT3D_VERSION >= 0x0500)\nDEFINE_GUID( IID_IDirect3DRampDevice,   0xF2086B20,0x259F,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56 );\nDEFINE_GUID( IID_IDirect3DRGBDevice,    0xA4665C60,0x2673,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56 );\nDEFINE_GUID( IID_IDirect3DHALDevice,    0x84E63dE0,0x46AA,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E );\nDEFINE_GUID( IID_IDirect3DMMXDevice,    0x881949a1,0xd6f3,0x11d0,0x89,0xab,0x00,0xa0,0xc9,0x05,0x41,0x29 );\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#if(DIRECT3D_VERSION >= 0x0600)\nDEFINE_GUID( IID_IDirect3DRefDevice,    0x50936643, 0x13e9, 0x11d1, 0x89, 0xaa, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29);\nDEFINE_GUID( IID_IDirect3DNullDevice, 0x8767df22, 0xbacc, 0x11d1, 0x89, 0x69, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n#if(DIRECT3D_VERSION >= 0x0700)\nDEFINE_GUID( IID_IDirect3DTnLHalDevice, 0xf5049e78, 0x4861, 0x11d2, 0xa4, 0x7, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n/*\n * Internal Guid to distinguish requested MMX from MMX being used as an RGB rasterizer\n */\n\nDEFINE_GUID( IID_IDirect3DDevice,       0x64108800,0x957d,0X11d0,0x89,0xab,0x00,0xa0,0xc9,0x05,0x41,0x29 );\n#if(DIRECT3D_VERSION >= 0x0500)\nDEFINE_GUID( IID_IDirect3DDevice2,  0x93281501, 0x8cf8, 0x11d0, 0x89, 0xab, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29);\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n#if(DIRECT3D_VERSION >= 0x0600)\nDEFINE_GUID( IID_IDirect3DDevice3,  0xb0ab3b60, 0x33d7, 0x11d1, 0xa9, 0x81, 0x0, 0xc0, 0x4f, 0xd7, 0xb1, 0x74);\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n#if(DIRECT3D_VERSION >= 0x0700)\nDEFINE_GUID( IID_IDirect3DDevice7,  0xf5049e79, 0x4861, 0x11d2, 0xa4, 0x7, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\nDEFINE_GUID( IID_IDirect3DTexture,      0x2CDCD9E0,0x25A0,0x11CF,0xA3,0x1A,0x00,0xAA,0x00,0xB9,0x33,0x56 );\n#if(DIRECT3D_VERSION >= 0x0500)\nDEFINE_GUID( IID_IDirect3DTexture2, 0x93281502, 0x8cf8, 0x11d0, 0x89, 0xab, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29);\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\nDEFINE_GUID( IID_IDirect3DLight,        0x4417C142,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E );\n\nDEFINE_GUID( IID_IDirect3DMaterial,     0x4417C144,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E );\n#if(DIRECT3D_VERSION >= 0x0500)\nDEFINE_GUID( IID_IDirect3DMaterial2,    0x93281503, 0x8cf8, 0x11d0, 0x89, 0xab, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29);\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n#if(DIRECT3D_VERSION >= 0x0600)\nDEFINE_GUID( IID_IDirect3DMaterial3,    0xca9c46f4, 0xd3c5, 0x11d1, 0xb7, 0x5a, 0x0, 0x60, 0x8, 0x52, 0xb3, 0x12);\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\nDEFINE_GUID( IID_IDirect3DExecuteBuffer,0x4417C145,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E );\nDEFINE_GUID( IID_IDirect3DViewport,     0x4417C146,0x33AD,0x11CF,0x81,0x6F,0x00,0x00,0xC0,0x20,0x15,0x6E );\n#if(DIRECT3D_VERSION >= 0x0500)\nDEFINE_GUID( IID_IDirect3DViewport2,    0x93281500, 0x8cf8, 0x11d0, 0x89, 0xab, 0x0, 0xa0, 0xc9, 0x5, 0x41, 0x29);\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n#if(DIRECT3D_VERSION >= 0x0600)\nDEFINE_GUID( IID_IDirect3DViewport3,    0xb0ab3b61, 0x33d7, 0x11d1, 0xa9, 0x81, 0x0, 0xc0, 0x4f, 0xd7, 0xb1, 0x74);\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n#if(DIRECT3D_VERSION >= 0x0600)\nDEFINE_GUID( IID_IDirect3DVertexBuffer, 0x7a503555, 0x4a83, 0x11d1, 0xa5, 0xdb, 0x0, 0xa0, 0xc9, 0x3, 0x67, 0xf8);\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n#if(DIRECT3D_VERSION >= 0x0700)\nDEFINE_GUID( IID_IDirect3DVertexBuffer7, 0xf5049e7d, 0x4861, 0x11d2, 0xa4, 0x7, 0x0, 0xa0, 0xc9, 0x6, 0x29, 0xa8);\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n#endif\n\n#ifdef __cplusplus\nstruct IDirect3D;\nstruct IDirect3DDevice;\nstruct IDirect3DLight;\nstruct IDirect3DMaterial;\nstruct IDirect3DExecuteBuffer;\nstruct IDirect3DTexture;\nstruct IDirect3DViewport;\ntypedef struct IDirect3D            *LPDIRECT3D;\ntypedef struct IDirect3DDevice      *LPDIRECT3DDEVICE;\ntypedef struct IDirect3DExecuteBuffer   *LPDIRECT3DEXECUTEBUFFER;\ntypedef struct IDirect3DLight       *LPDIRECT3DLIGHT;\ntypedef struct IDirect3DMaterial    *LPDIRECT3DMATERIAL;\ntypedef struct IDirect3DTexture     *LPDIRECT3DTEXTURE;\ntypedef struct IDirect3DViewport    *LPDIRECT3DVIEWPORT;\n\n#if(DIRECT3D_VERSION >= 0x0500)\nstruct IDirect3D2;\nstruct IDirect3DDevice2;\nstruct IDirect3DMaterial2;\nstruct IDirect3DTexture2;\nstruct IDirect3DViewport2;\ntypedef struct IDirect3D2           *LPDIRECT3D2;\ntypedef struct IDirect3DDevice2     *LPDIRECT3DDEVICE2;\ntypedef struct IDirect3DMaterial2   *LPDIRECT3DMATERIAL2;\ntypedef struct IDirect3DTexture2    *LPDIRECT3DTEXTURE2;\ntypedef struct IDirect3DViewport2   *LPDIRECT3DVIEWPORT2;\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#if(DIRECT3D_VERSION >= 0x0600)\nstruct IDirect3D3;\nstruct IDirect3DDevice3;\nstruct IDirect3DMaterial3;\nstruct IDirect3DViewport3;\nstruct IDirect3DVertexBuffer;\ntypedef struct IDirect3D3            *LPDIRECT3D3;\ntypedef struct IDirect3DDevice3      *LPDIRECT3DDEVICE3;\ntypedef struct IDirect3DMaterial3    *LPDIRECT3DMATERIAL3;\ntypedef struct IDirect3DViewport3    *LPDIRECT3DVIEWPORT3;\ntypedef struct IDirect3DVertexBuffer *LPDIRECT3DVERTEXBUFFER;\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n#if(DIRECT3D_VERSION >= 0x0700)\nstruct IDirect3D7;\nstruct IDirect3DDevice7;\nstruct IDirect3DVertexBuffer7;\ntypedef struct IDirect3D7             *LPDIRECT3D7;\ntypedef struct IDirect3DDevice7       *LPDIRECT3DDEVICE7;\ntypedef struct IDirect3DVertexBuffer7 *LPDIRECT3DVERTEXBUFFER7;\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n#else\n\ntypedef struct IDirect3D        *LPDIRECT3D;\ntypedef struct IDirect3DDevice      *LPDIRECT3DDEVICE;\ntypedef struct IDirect3DExecuteBuffer   *LPDIRECT3DEXECUTEBUFFER;\ntypedef struct IDirect3DLight       *LPDIRECT3DLIGHT;\ntypedef struct IDirect3DMaterial    *LPDIRECT3DMATERIAL;\ntypedef struct IDirect3DTexture     *LPDIRECT3DTEXTURE;\ntypedef struct IDirect3DViewport    *LPDIRECT3DVIEWPORT;\n\n#if(DIRECT3D_VERSION >= 0x0500)\ntypedef struct IDirect3D2           *LPDIRECT3D2;\ntypedef struct IDirect3DDevice2     *LPDIRECT3DDEVICE2;\ntypedef struct IDirect3DMaterial2   *LPDIRECT3DMATERIAL2;\ntypedef struct IDirect3DTexture2    *LPDIRECT3DTEXTURE2;\ntypedef struct IDirect3DViewport2   *LPDIRECT3DVIEWPORT2;\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#if(DIRECT3D_VERSION >= 0x0600)\ntypedef struct IDirect3D3            *LPDIRECT3D3;\ntypedef struct IDirect3DDevice3      *LPDIRECT3DDEVICE3;\ntypedef struct IDirect3DMaterial3    *LPDIRECT3DMATERIAL3;\ntypedef struct IDirect3DViewport3    *LPDIRECT3DVIEWPORT3;\ntypedef struct IDirect3DVertexBuffer *LPDIRECT3DVERTEXBUFFER;\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n#if(DIRECT3D_VERSION >= 0x0700)\ntypedef struct IDirect3D7             *LPDIRECT3D7;\ntypedef struct IDirect3DDevice7       *LPDIRECT3DDEVICE7;\ntypedef struct IDirect3DVertexBuffer7 *LPDIRECT3DVERTEXBUFFER7;\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n#endif\n\n#include \"d3dtypes.h\"\n#include \"d3dcaps.h\"\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n * Direct3D interfaces\n */\n#undef INTERFACE\n#define INTERFACE IDirect3D\n\nDECLARE_INTERFACE_(IDirect3D, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3D methods ***/\n    STDMETHOD(Initialize)(THIS_ REFCLSID) PURE;\n    STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK,LPVOID) PURE;\n    STDMETHOD(CreateLight)(THIS_ LPDIRECT3DLIGHT*,IUnknown*) PURE;\n    STDMETHOD(CreateMaterial)(THIS_ LPDIRECT3DMATERIAL*,IUnknown*) PURE;\n    STDMETHOD(CreateViewport)(THIS_ LPDIRECT3DVIEWPORT*,IUnknown*) PURE;\n    STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH,LPD3DFINDDEVICERESULT) PURE;\n};\n\ntypedef struct IDirect3D *LPDIRECT3D;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3D_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3D_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3D_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)\n#define IDirect3D_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b)\n#define IDirect3D_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b)\n#define IDirect3D_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)\n#define IDirect3D_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)\n#define IDirect3D_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b)\n#else\n#define IDirect3D_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3D_AddRef(p) (p)->AddRef()\n#define IDirect3D_Release(p) (p)->Release()\n#define IDirect3D_Initialize(p,a) (p)->Initialize(a)\n#define IDirect3D_EnumDevices(p,a,b) (p)->EnumDevices(a,b)\n#define IDirect3D_CreateLight(p,a,b) (p)->CreateLight(a,b)\n#define IDirect3D_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b)\n#define IDirect3D_CreateViewport(p,a,b) (p)->CreateViewport(a,b)\n#define IDirect3D_FindDevice(p,a,b) (p)->FindDevice(a,b)\n#endif\n\n#if(DIRECT3D_VERSION >= 0x0500)\n#undef INTERFACE\n#define INTERFACE IDirect3D2\n\nDECLARE_INTERFACE_(IDirect3D2, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3D2 methods ***/\n    STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK,LPVOID) PURE;\n    STDMETHOD(CreateLight)(THIS_ LPDIRECT3DLIGHT*,IUnknown*) PURE;\n    STDMETHOD(CreateMaterial)(THIS_ LPDIRECT3DMATERIAL2*,IUnknown*) PURE;\n    STDMETHOD(CreateViewport)(THIS_ LPDIRECT3DVIEWPORT2*,IUnknown*) PURE;\n    STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH,LPD3DFINDDEVICERESULT) PURE;\n    STDMETHOD(CreateDevice)(THIS_ REFCLSID,LPDIRECTDRAWSURFACE,LPDIRECT3DDEVICE2*) PURE;\n};\n\ntypedef struct IDirect3D2 *LPDIRECT3D2;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3D2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D2_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3D2_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3D2_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b)\n#define IDirect3D2_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b)\n#define IDirect3D2_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)\n#define IDirect3D2_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)\n#define IDirect3D2_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b)\n#define IDirect3D2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)\n#else\n#define IDirect3D2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3D2_AddRef(p) (p)->AddRef()\n#define IDirect3D2_Release(p) (p)->Release()\n#define IDirect3D2_EnumDevices(p,a,b) (p)->EnumDevices(a,b)\n#define IDirect3D2_CreateLight(p,a,b) (p)->CreateLight(a,b)\n#define IDirect3D2_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b)\n#define IDirect3D2_CreateViewport(p,a,b) (p)->CreateViewport(a,b)\n#define IDirect3D2_FindDevice(p,a,b) (p)->FindDevice(a,b)\n#define IDirect3D2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#if(DIRECT3D_VERSION >= 0x0600)\n#undef INTERFACE\n#define INTERFACE IDirect3D3\n\nDECLARE_INTERFACE_(IDirect3D3, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3D3 methods ***/\n    STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK,LPVOID) PURE;\n    STDMETHOD(CreateLight)(THIS_ LPDIRECT3DLIGHT*,LPUNKNOWN) PURE;\n    STDMETHOD(CreateMaterial)(THIS_ LPDIRECT3DMATERIAL3*,LPUNKNOWN) PURE;\n    STDMETHOD(CreateViewport)(THIS_ LPDIRECT3DVIEWPORT3*,LPUNKNOWN) PURE;\n    STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH,LPD3DFINDDEVICERESULT) PURE;\n    STDMETHOD(CreateDevice)(THIS_ REFCLSID,LPDIRECTDRAWSURFACE4,LPDIRECT3DDEVICE3*,LPUNKNOWN) PURE;\n    STDMETHOD(CreateVertexBuffer)(THIS_ LPD3DVERTEXBUFFERDESC,LPDIRECT3DVERTEXBUFFER*,DWORD,LPUNKNOWN) PURE;\n    STDMETHOD(EnumZBufferFormats)(THIS_ REFCLSID,LPD3DENUMPIXELFORMATSCALLBACK,LPVOID) PURE;\n    STDMETHOD(EvictManagedTextures)(THIS) PURE;\n};\n\ntypedef struct IDirect3D3 *LPDIRECT3D3;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3D3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D3_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3D3_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3D3_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b)\n#define IDirect3D3_CreateLight(p,a,b) (p)->lpVtbl->CreateLight(p,a,b)\n#define IDirect3D3_CreateMaterial(p,a,b) (p)->lpVtbl->CreateMaterial(p,a,b)\n#define IDirect3D3_CreateViewport(p,a,b) (p)->lpVtbl->CreateViewport(p,a,b)\n#define IDirect3D3_FindDevice(p,a,b) (p)->lpVtbl->FindDevice(p,a,b)\n#define IDirect3D3_CreateDevice(p,a,b,c,d) (p)->lpVtbl->CreateDevice(p,a,b,c,d)\n#define IDirect3D3_CreateVertexBuffer(p,a,b,c,d) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d)\n#define IDirect3D3_EnumZBufferFormats(p,a,b,c) (p)->lpVtbl->EnumZBufferFormats(p,a,b,c)\n#define IDirect3D3_EvictManagedTextures(p) (p)->lpVtbl->EvictManagedTextures(p)\n#else\n#define IDirect3D3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3D3_AddRef(p) (p)->AddRef()\n#define IDirect3D3_Release(p) (p)->Release()\n#define IDirect3D3_EnumDevices(p,a,b) (p)->EnumDevices(a,b)\n#define IDirect3D3_CreateLight(p,a,b) (p)->CreateLight(a,b)\n#define IDirect3D3_CreateMaterial(p,a,b) (p)->CreateMaterial(a,b)\n#define IDirect3D3_CreateViewport(p,a,b) (p)->CreateViewport(a,b)\n#define IDirect3D3_FindDevice(p,a,b) (p)->FindDevice(a,b)\n#define IDirect3D3_CreateDevice(p,a,b,c,d) (p)->CreateDevice(a,b,c,d)\n#define IDirect3D3_CreateVertexBuffer(p,a,b,c,d) (p)->CreateVertexBuffer(a,b,c,d)\n#define IDirect3D3_EnumZBufferFormats(p,a,b,c) (p)->EnumZBufferFormats(a,b,c)\n#define IDirect3D3_EvictManagedTextures(p) (p)->EvictManagedTextures()\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n#if(DIRECT3D_VERSION >= 0x0700)\n#undef INTERFACE\n#define INTERFACE IDirect3D7\n\nDECLARE_INTERFACE_(IDirect3D7, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3D7 methods ***/\n    STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK7,LPVOID) PURE;\n    STDMETHOD(CreateDevice)(THIS_ REFCLSID,LPDIRECTDRAWSURFACE7,LPDIRECT3DDEVICE7*) PURE;\n    STDMETHOD(CreateVertexBuffer)(THIS_ LPD3DVERTEXBUFFERDESC,LPDIRECT3DVERTEXBUFFER7*,DWORD) PURE;\n    STDMETHOD(EnumZBufferFormats)(THIS_ REFCLSID,LPD3DENUMPIXELFORMATSCALLBACK,LPVOID) PURE;\n    STDMETHOD(EvictManagedTextures)(THIS) PURE;\n};\n\ntypedef struct IDirect3D7 *LPDIRECT3D7;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3D7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D7_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3D7_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3D7_EnumDevices(p,a,b) (p)->lpVtbl->EnumDevices(p,a,b)\n#define IDirect3D7_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)\n#define IDirect3D7_CreateVertexBuffer(p,a,b,c) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c)\n#define IDirect3D7_EnumZBufferFormats(p,a,b,c) (p)->lpVtbl->EnumZBufferFormats(p,a,b,c)\n#define IDirect3D7_EvictManagedTextures(p) (p)->lpVtbl->EvictManagedTextures(p)\n#else\n#define IDirect3D7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3D7_AddRef(p) (p)->AddRef()\n#define IDirect3D7_Release(p) (p)->Release()\n#define IDirect3D7_EnumDevices(p,a,b) (p)->EnumDevices(a,b)\n#define IDirect3D7_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)\n#define IDirect3D7_CreateVertexBuffer(p,a,b,c) (p)->CreateVertexBuffer(a,b,c)\n#define IDirect3D7_EnumZBufferFormats(p,a,b,c) (p)->EnumZBufferFormats(a,b,c)\n#define IDirect3D7_EvictManagedTextures(p) (p)->EvictManagedTextures()\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n/*\n * Direct3D Device interfaces\n */\n#undef INTERFACE\n#define INTERFACE IDirect3DDevice\n\nDECLARE_INTERFACE_(IDirect3DDevice, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DDevice methods ***/\n    STDMETHOD(Initialize)(THIS_ LPDIRECT3D,LPGUID,LPD3DDEVICEDESC) PURE;\n    STDMETHOD(GetCaps)(THIS_ LPD3DDEVICEDESC,LPD3DDEVICEDESC) PURE;\n    STDMETHOD(SwapTextureHandles)(THIS_ LPDIRECT3DTEXTURE,LPDIRECT3DTEXTURE) PURE;\n    STDMETHOD(CreateExecuteBuffer)(THIS_ LPD3DEXECUTEBUFFERDESC,LPDIRECT3DEXECUTEBUFFER*,IUnknown*) PURE;\n    STDMETHOD(GetStats)(THIS_ LPD3DSTATS) PURE;\n    STDMETHOD(Execute)(THIS_ LPDIRECT3DEXECUTEBUFFER,LPDIRECT3DVIEWPORT,DWORD) PURE;\n    STDMETHOD(AddViewport)(THIS_ LPDIRECT3DVIEWPORT) PURE;\n    STDMETHOD(DeleteViewport)(THIS_ LPDIRECT3DVIEWPORT) PURE;\n    STDMETHOD(NextViewport)(THIS_ LPDIRECT3DVIEWPORT,LPDIRECT3DVIEWPORT*,DWORD) PURE;\n    STDMETHOD(Pick)(THIS_ LPDIRECT3DEXECUTEBUFFER,LPDIRECT3DVIEWPORT,DWORD,LPD3DRECT) PURE;\n    STDMETHOD(GetPickRecords)(THIS_ LPDWORD,LPD3DPICKRECORD) PURE;\n    STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK,LPVOID) PURE;\n    STDMETHOD(CreateMatrix)(THIS_ LPD3DMATRIXHANDLE) PURE;\n    STDMETHOD(SetMatrix)(THIS_ D3DMATRIXHANDLE,const LPD3DMATRIX) PURE;\n    STDMETHOD(GetMatrix)(THIS_ D3DMATRIXHANDLE,LPD3DMATRIX) PURE;\n    STDMETHOD(DeleteMatrix)(THIS_ D3DMATRIXHANDLE) PURE;\n    STDMETHOD(BeginScene)(THIS) PURE;\n    STDMETHOD(EndScene)(THIS) PURE;\n    STDMETHOD(GetDirect3D)(THIS_ LPDIRECT3D*) PURE;\n};\n\ntypedef struct IDirect3DDevice *LPDIRECT3DDEVICE;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DDevice_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DDevice_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DDevice_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)\n#define IDirect3DDevice_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)\n#define IDirect3DDevice_SwapTextureHandles(p,a,b) (p)->lpVtbl->SwapTextureHandles(p,a,b)\n#define IDirect3DDevice_CreateExecuteBuffer(p,a,b,c) (p)->lpVtbl->CreateExecuteBuffer(p,a,b,c)\n#define IDirect3DDevice_GetStats(p,a) (p)->lpVtbl->GetStats(p,a)\n#define IDirect3DDevice_Execute(p,a,b,c) (p)->lpVtbl->Execute(p,a,b,c)\n#define IDirect3DDevice_AddViewport(p,a) (p)->lpVtbl->AddViewport(p,a)\n#define IDirect3DDevice_DeleteViewport(p,a) (p)->lpVtbl->DeleteViewport(p,a)\n#define IDirect3DDevice_NextViewport(p,a,b,c) (p)->lpVtbl->NextViewport(p,a,b,c)\n#define IDirect3DDevice_Pick(p,a,b,c,d) (p)->lpVtbl->Pick(p,a,b,c,d)\n#define IDirect3DDevice_GetPickRecords(p,a,b) (p)->lpVtbl->GetPickRecords(p,a,b)\n#define IDirect3DDevice_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b)\n#define IDirect3DDevice_CreateMatrix(p,a) (p)->lpVtbl->CreateMatrix(p,a)\n#define IDirect3DDevice_SetMatrix(p,a,b) (p)->lpVtbl->SetMatrix(p,a,b)\n#define IDirect3DDevice_GetMatrix(p,a,b) (p)->lpVtbl->GetMatrix(p,a,b)\n#define IDirect3DDevice_DeleteMatrix(p,a) (p)->lpVtbl->DeleteMatrix(p,a)\n#define IDirect3DDevice_BeginScene(p) (p)->lpVtbl->BeginScene(p)\n#define IDirect3DDevice_EndScene(p) (p)->lpVtbl->EndScene(p)\n#define IDirect3DDevice_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)\n#else\n#define IDirect3DDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DDevice_AddRef(p) (p)->AddRef()\n#define IDirect3DDevice_Release(p) (p)->Release()\n#define IDirect3DDevice_Initialize(p,a,b,c) (p)->Initialize(a,b,c)\n#define IDirect3DDevice_GetCaps(p,a,b) (p)->GetCaps(a,b)\n#define IDirect3DDevice_SwapTextureHandles(p,a,b) (p)->SwapTextureHandles(a,b)\n#define IDirect3DDevice_CreateExecuteBuffer(p,a,b,c) (p)->CreateExecuteBuffer(a,b,c)\n#define IDirect3DDevice_GetStats(p,a) (p)->GetStats(a)\n#define IDirect3DDevice_Execute(p,a,b,c) (p)->Execute(a,b,c)\n#define IDirect3DDevice_AddViewport(p,a) (p)->AddViewport(a)\n#define IDirect3DDevice_DeleteViewport(p,a) (p)->DeleteViewport(a)\n#define IDirect3DDevice_NextViewport(p,a,b,c) (p)->NextViewport(a,b,c)\n#define IDirect3DDevice_Pick(p,a,b,c,d) (p)->Pick(a,b,c,d)\n#define IDirect3DDevice_GetPickRecords(p,a,b) (p)->GetPickRecords(a,b)\n#define IDirect3DDevice_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b)\n#define IDirect3DDevice_CreateMatrix(p,a) (p)->CreateMatrix(a)\n#define IDirect3DDevice_SetMatrix(p,a,b) (p)->SetMatrix(a,b)\n#define IDirect3DDevice_GetMatrix(p,a,b) (p)->GetMatrix(a,b)\n#define IDirect3DDevice_DeleteMatrix(p,a) (p)->DeleteMatrix(a)\n#define IDirect3DDevice_BeginScene(p) (p)->BeginScene()\n#define IDirect3DDevice_EndScene(p) (p)->EndScene()\n#define IDirect3DDevice_GetDirect3D(p,a) (p)->GetDirect3D(a)\n#endif\n\n#if(DIRECT3D_VERSION >= 0x0500)\n#undef INTERFACE\n#define INTERFACE IDirect3DDevice2\n\nDECLARE_INTERFACE_(IDirect3DDevice2, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DDevice2 methods ***/\n    STDMETHOD(GetCaps)(THIS_ LPD3DDEVICEDESC,LPD3DDEVICEDESC) PURE;\n    STDMETHOD(SwapTextureHandles)(THIS_ LPDIRECT3DTEXTURE2,LPDIRECT3DTEXTURE2) PURE;\n    STDMETHOD(GetStats)(THIS_ LPD3DSTATS) PURE;\n    STDMETHOD(AddViewport)(THIS_ LPDIRECT3DVIEWPORT2) PURE;\n    STDMETHOD(DeleteViewport)(THIS_ LPDIRECT3DVIEWPORT2) PURE;\n    STDMETHOD(NextViewport)(THIS_ LPDIRECT3DVIEWPORT2,LPDIRECT3DVIEWPORT2*,DWORD) PURE;\n    STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMTEXTUREFORMATSCALLBACK,LPVOID) PURE;\n    STDMETHOD(BeginScene)(THIS) PURE;\n    STDMETHOD(EndScene)(THIS) PURE;\n    STDMETHOD(GetDirect3D)(THIS_ LPDIRECT3D2*) PURE;\n    STDMETHOD(SetCurrentViewport)(THIS_ LPDIRECT3DVIEWPORT2) PURE;\n    STDMETHOD(GetCurrentViewport)(THIS_ LPDIRECT3DVIEWPORT2 *) PURE;\n    STDMETHOD(SetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE,DWORD) PURE;\n    STDMETHOD(GetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE *) PURE;\n    STDMETHOD(Begin)(THIS_ D3DPRIMITIVETYPE,D3DVERTEXTYPE,DWORD) PURE;\n    STDMETHOD(BeginIndexed)(THIS_ D3DPRIMITIVETYPE,D3DVERTEXTYPE,LPVOID,DWORD,DWORD) PURE;\n    STDMETHOD(Vertex)(THIS_ LPVOID) PURE;\n    STDMETHOD(Index)(THIS_ WORD) PURE;\n    STDMETHOD(End)(THIS_ DWORD) PURE;\n    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE,LPDWORD) PURE;\n    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE,DWORD) PURE;\n    STDMETHOD(GetLightState)(THIS_ D3DLIGHTSTATETYPE,LPDWORD) PURE;\n    STDMETHOD(SetLightState)(THIS_ D3DLIGHTSTATETYPE,DWORD) PURE;\n    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;\n    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;\n    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;\n    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE,D3DVERTEXTYPE,LPVOID,DWORD,DWORD) PURE;\n    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,D3DVERTEXTYPE,LPVOID,DWORD,LPWORD,DWORD,DWORD) PURE;\n    STDMETHOD(SetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE;\n    STDMETHOD(GetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE;\n};\n\ntypedef struct IDirect3DDevice2 *LPDIRECT3DDEVICE2;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DDevice2_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DDevice2_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DDevice2_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)\n#define IDirect3DDevice2_SwapTextureHandles(p,a,b) (p)->lpVtbl->SwapTextureHandles(p,a,b)\n#define IDirect3DDevice2_GetStats(p,a) (p)->lpVtbl->GetStats(p,a)\n#define IDirect3DDevice2_AddViewport(p,a) (p)->lpVtbl->AddViewport(p,a)\n#define IDirect3DDevice2_DeleteViewport(p,a) (p)->lpVtbl->DeleteViewport(p,a)\n#define IDirect3DDevice2_NextViewport(p,a,b,c) (p)->lpVtbl->NextViewport(p,a,b,c)\n#define IDirect3DDevice2_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b)\n#define IDirect3DDevice2_BeginScene(p) (p)->lpVtbl->BeginScene(p)\n#define IDirect3DDevice2_EndScene(p) (p)->lpVtbl->EndScene(p)\n#define IDirect3DDevice2_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)\n#define IDirect3DDevice2_SetCurrentViewport(p,a) (p)->lpVtbl->SetCurrentViewport(p,a)\n#define IDirect3DDevice2_GetCurrentViewport(p,a) (p)->lpVtbl->GetCurrentViewport(p,a)\n#define IDirect3DDevice2_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)\n#define IDirect3DDevice2_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a)\n#define IDirect3DDevice2_Begin(p,a,b,c) (p)->lpVtbl->Begin(p,a,b,c)\n#define IDirect3DDevice2_BeginIndexed(p,a,b,c,d,e) (p)->lpVtbl->BeginIndexed(p,a,b,c,d,e)\n#define IDirect3DDevice2_Vertex(p,a) (p)->lpVtbl->Vertex(p,a)\n#define IDirect3DDevice2_Index(p,a) (p)->lpVtbl->Index(p,a)\n#define IDirect3DDevice2_End(p,a) (p)->lpVtbl->End(p,a)\n#define IDirect3DDevice2_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)\n#define IDirect3DDevice2_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)\n#define IDirect3DDevice2_GetLightState(p,a,b) (p)->lpVtbl->GetLightState(p,a,b)\n#define IDirect3DDevice2_SetLightState(p,a,b) (p)->lpVtbl->SetLightState(p,a,b)\n#define IDirect3DDevice2_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)\n#define IDirect3DDevice2_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)\n#define IDirect3DDevice2_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)\n#define IDirect3DDevice2_DrawPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e)\n#define IDirect3DDevice2_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice2_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)\n#define IDirect3DDevice2_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)\n#else\n#define IDirect3DDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DDevice2_AddRef(p) (p)->AddRef()\n#define IDirect3DDevice2_Release(p) (p)->Release()\n#define IDirect3DDevice2_GetCaps(p,a,b) (p)->GetCaps(a,b)\n#define IDirect3DDevice2_SwapTextureHandles(p,a,b) (p)->SwapTextureHandles(a,b)\n#define IDirect3DDevice2_GetStats(p,a) (p)->GetStats(a)\n#define IDirect3DDevice2_AddViewport(p,a) (p)->AddViewport(a)\n#define IDirect3DDevice2_DeleteViewport(p,a) (p)->DeleteViewport(a)\n#define IDirect3DDevice2_NextViewport(p,a,b,c) (p)->NextViewport(a,b,c)\n#define IDirect3DDevice2_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b)\n#define IDirect3DDevice2_BeginScene(p) (p)->BeginScene()\n#define IDirect3DDevice2_EndScene(p) (p)->EndScene()\n#define IDirect3DDevice2_GetDirect3D(p,a) (p)->GetDirect3D(a)\n#define IDirect3DDevice2_SetCurrentViewport(p,a) (p)->SetCurrentViewport(a)\n#define IDirect3DDevice2_GetCurrentViewport(p,a) (p)->GetCurrentViewport(a)\n#define IDirect3DDevice2_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)\n#define IDirect3DDevice2_GetRenderTarget(p,a) (p)->GetRenderTarget(a)\n#define IDirect3DDevice2_Begin(p,a,b,c) (p)->Begin(a,b,c)\n#define IDirect3DDevice2_BeginIndexed(p,a,b,c,d,e) (p)->BeginIndexed(a,b,c,d,e)\n#define IDirect3DDevice2_Vertex(p,a) (p)->Vertex(a)\n#define IDirect3DDevice2_Index(p,a) (p)->Index(a)\n#define IDirect3DDevice2_End(p,a) (p)->End(a)\n#define IDirect3DDevice2_GetRenderState(p,a,b) (p)->GetRenderState(a,b)\n#define IDirect3DDevice2_SetRenderState(p,a,b) (p)->SetRenderState(a,b)\n#define IDirect3DDevice2_GetLightState(p,a,b) (p)->GetLightState(a,b)\n#define IDirect3DDevice2_SetLightState(p,a,b) (p)->SetLightState(a,b)\n#define IDirect3DDevice2_SetTransform(p,a,b) (p)->SetTransform(a,b)\n#define IDirect3DDevice2_GetTransform(p,a,b) (p)->GetTransform(a,b)\n#define IDirect3DDevice2_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)\n#define IDirect3DDevice2_DrawPrimitive(p,a,b,c,d,e) (p)->DrawPrimitive(a,b,c,d,e)\n#define IDirect3DDevice2_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g)\n#define IDirect3DDevice2_SetClipStatus(p,a) (p)->SetClipStatus(a)\n#define IDirect3DDevice2_GetClipStatus(p,a) (p)->GetClipStatus(a)\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#if(DIRECT3D_VERSION >= 0x0600)\n#undef INTERFACE\n#define INTERFACE IDirect3DDevice3\n\nDECLARE_INTERFACE_(IDirect3DDevice3, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DDevice3 methods ***/\n    STDMETHOD(GetCaps)(THIS_ LPD3DDEVICEDESC,LPD3DDEVICEDESC) PURE;\n    STDMETHOD(GetStats)(THIS_ LPD3DSTATS) PURE;\n    STDMETHOD(AddViewport)(THIS_ LPDIRECT3DVIEWPORT3) PURE;\n    STDMETHOD(DeleteViewport)(THIS_ LPDIRECT3DVIEWPORT3) PURE;\n    STDMETHOD(NextViewport)(THIS_ LPDIRECT3DVIEWPORT3,LPDIRECT3DVIEWPORT3*,DWORD) PURE;\n    STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMPIXELFORMATSCALLBACK,LPVOID) PURE;\n    STDMETHOD(BeginScene)(THIS) PURE;\n    STDMETHOD(EndScene)(THIS) PURE;\n    STDMETHOD(GetDirect3D)(THIS_ LPDIRECT3D3*) PURE;\n    STDMETHOD(SetCurrentViewport)(THIS_ LPDIRECT3DVIEWPORT3) PURE;\n    STDMETHOD(GetCurrentViewport)(THIS_ LPDIRECT3DVIEWPORT3 *) PURE;\n    STDMETHOD(SetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE4,DWORD) PURE;\n    STDMETHOD(GetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE4 *) PURE;\n    STDMETHOD(Begin)(THIS_ D3DPRIMITIVETYPE,DWORD,DWORD) PURE;\n    STDMETHOD(BeginIndexed)(THIS_ D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,DWORD) PURE;\n    STDMETHOD(Vertex)(THIS_ LPVOID) PURE;\n    STDMETHOD(Index)(THIS_ WORD) PURE;\n    STDMETHOD(End)(THIS_ DWORD) PURE;\n    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE,LPDWORD) PURE;\n    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE,DWORD) PURE;\n    STDMETHOD(GetLightState)(THIS_ D3DLIGHTSTATETYPE,LPDWORD) PURE;\n    STDMETHOD(SetLightState)(THIS_ D3DLIGHTSTATETYPE,DWORD) PURE;\n    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;\n    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;\n    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;\n    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,DWORD) PURE;\n    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,LPWORD,DWORD,DWORD) PURE;\n    STDMETHOD(SetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE;\n    STDMETHOD(GetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE;\n    STDMETHOD(DrawPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,DWORD) PURE;\n    STDMETHOD(DrawIndexedPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,LPWORD,DWORD,DWORD) PURE;\n    STDMETHOD(DrawPrimitiveVB)(THIS_ D3DPRIMITIVETYPE,LPDIRECT3DVERTEXBUFFER,DWORD,DWORD,DWORD) PURE;\n    STDMETHOD(DrawIndexedPrimitiveVB)(THIS_ D3DPRIMITIVETYPE,LPDIRECT3DVERTEXBUFFER,LPWORD,DWORD,DWORD) PURE;\n    STDMETHOD(ComputeSphereVisibility)(THIS_ LPD3DVECTOR,LPD3DVALUE,DWORD,DWORD,LPDWORD) PURE;\n    STDMETHOD(GetTexture)(THIS_ DWORD,LPDIRECT3DTEXTURE2 *) PURE;\n    STDMETHOD(SetTexture)(THIS_ DWORD,LPDIRECT3DTEXTURE2) PURE;\n    STDMETHOD(GetTextureStageState)(THIS_ DWORD,D3DTEXTURESTAGESTATETYPE,LPDWORD) PURE;\n    STDMETHOD(SetTextureStageState)(THIS_ DWORD,D3DTEXTURESTAGESTATETYPE,DWORD) PURE;\n    STDMETHOD(ValidateDevice)(THIS_ LPDWORD) PURE;\n};\n\ntypedef struct IDirect3DDevice3 *LPDIRECT3DDEVICE3;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DDevice3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DDevice3_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DDevice3_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DDevice3_GetCaps(p,a,b) (p)->lpVtbl->GetCaps(p,a,b)\n#define IDirect3DDevice3_GetStats(p,a) (p)->lpVtbl->GetStats(p,a)\n#define IDirect3DDevice3_AddViewport(p,a) (p)->lpVtbl->AddViewport(p,a)\n#define IDirect3DDevice3_DeleteViewport(p,a) (p)->lpVtbl->DeleteViewport(p,a)\n#define IDirect3DDevice3_NextViewport(p,a,b,c) (p)->lpVtbl->NextViewport(p,a,b,c)\n#define IDirect3DDevice3_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b)\n#define IDirect3DDevice3_BeginScene(p) (p)->lpVtbl->BeginScene(p)\n#define IDirect3DDevice3_EndScene(p) (p)->lpVtbl->EndScene(p)\n#define IDirect3DDevice3_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)\n#define IDirect3DDevice3_SetCurrentViewport(p,a) (p)->lpVtbl->SetCurrentViewport(p,a)\n#define IDirect3DDevice3_GetCurrentViewport(p,a) (p)->lpVtbl->GetCurrentViewport(p,a)\n#define IDirect3DDevice3_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)\n#define IDirect3DDevice3_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a)\n#define IDirect3DDevice3_Begin(p,a,b,c) (p)->lpVtbl->Begin(p,a,b,c)\n#define IDirect3DDevice3_BeginIndexed(p,a,b,c,d,e) (p)->lpVtbl->BeginIndexed(p,a,b,c,d,e)\n#define IDirect3DDevice3_Vertex(p,a) (p)->lpVtbl->Vertex(p,a)\n#define IDirect3DDevice3_Index(p,a) (p)->lpVtbl->Index(p,a)\n#define IDirect3DDevice3_End(p,a) (p)->lpVtbl->End(p,a)\n#define IDirect3DDevice3_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)\n#define IDirect3DDevice3_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)\n#define IDirect3DDevice3_GetLightState(p,a,b) (p)->lpVtbl->GetLightState(p,a,b)\n#define IDirect3DDevice3_SetLightState(p,a,b) (p)->lpVtbl->SetLightState(p,a,b)\n#define IDirect3DDevice3_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)\n#define IDirect3DDevice3_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)\n#define IDirect3DDevice3_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)\n#define IDirect3DDevice3_DrawPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e)\n#define IDirect3DDevice3_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice3_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)\n#define IDirect3DDevice3_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)\n#define IDirect3DDevice3_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveStrided(p,a,b,c,d,e)\n#define IDirect3DDevice3_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice3_DrawPrimitiveVB(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveVB(p,a,b,c,d,e)\n#define IDirect3DDevice3_DrawIndexedPrimitiveVB(p,a,b,c,d,e) (p)->lpVtbl->DrawIndexedPrimitiveVB(p,a,b,c,d,e)\n#define IDirect3DDevice3_ComputeSphereVisibility(p,a,b,c,d,e) (p)->lpVtbl->ComputeSphereVisibility(p,a,b,c,d,e)\n#define IDirect3DDevice3_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b)\n#define IDirect3DDevice3_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b)\n#define IDirect3DDevice3_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c)\n#define IDirect3DDevice3_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c)\n#define IDirect3DDevice3_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a)\n#else\n#define IDirect3DDevice3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DDevice3_AddRef(p) (p)->AddRef()\n#define IDirect3DDevice3_Release(p) (p)->Release()\n#define IDirect3DDevice3_GetCaps(p,a,b) (p)->GetCaps(a,b)\n#define IDirect3DDevice3_GetStats(p,a) (p)->GetStats(a)\n#define IDirect3DDevice3_AddViewport(p,a) (p)->AddViewport(a)\n#define IDirect3DDevice3_DeleteViewport(p,a) (p)->DeleteViewport(a)\n#define IDirect3DDevice3_NextViewport(p,a,b,c) (p)->NextViewport(a,b,c)\n#define IDirect3DDevice3_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b)\n#define IDirect3DDevice3_BeginScene(p) (p)->BeginScene()\n#define IDirect3DDevice3_EndScene(p) (p)->EndScene()\n#define IDirect3DDevice3_GetDirect3D(p,a) (p)->GetDirect3D(a)\n#define IDirect3DDevice3_SetCurrentViewport(p,a) (p)->SetCurrentViewport(a)\n#define IDirect3DDevice3_GetCurrentViewport(p,a) (p)->GetCurrentViewport(a)\n#define IDirect3DDevice3_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)\n#define IDirect3DDevice3_GetRenderTarget(p,a) (p)->GetRenderTarget(a)\n#define IDirect3DDevice3_Begin(p,a,b,c) (p)->Begin(a,b,c)\n#define IDirect3DDevice3_BeginIndexed(p,a,b,c,d,e) (p)->BeginIndexed(a,b,c,d,e)\n#define IDirect3DDevice3_Vertex(p,a) (p)->Vertex(a)\n#define IDirect3DDevice3_Index(p,a) (p)->Index(a)\n#define IDirect3DDevice3_End(p,a) (p)->End(a)\n#define IDirect3DDevice3_GetRenderState(p,a,b) (p)->GetRenderState(a,b)\n#define IDirect3DDevice3_SetRenderState(p,a,b) (p)->SetRenderState(a,b)\n#define IDirect3DDevice3_GetLightState(p,a,b) (p)->GetLightState(a,b)\n#define IDirect3DDevice3_SetLightState(p,a,b) (p)->SetLightState(a,b)\n#define IDirect3DDevice3_SetTransform(p,a,b) (p)->SetTransform(a,b)\n#define IDirect3DDevice3_GetTransform(p,a,b) (p)->GetTransform(a,b)\n#define IDirect3DDevice3_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)\n#define IDirect3DDevice3_DrawPrimitive(p,a,b,c,d,e) (p)->DrawPrimitive(a,b,c,d,e)\n#define IDirect3DDevice3_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g)\n#define IDirect3DDevice3_SetClipStatus(p,a) (p)->SetClipStatus(a)\n#define IDirect3DDevice3_GetClipStatus(p,a) (p)->GetClipStatus(a)\n#define IDirect3DDevice3_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->DrawPrimitiveStrided(a,b,c,d,e)\n#define IDirect3DDevice3_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveStrided(a,b,c,d,e,f,g)\n#define IDirect3DDevice3_DrawPrimitiveVB(p,a,b,c,d,e) (p)->DrawPrimitiveVB(a,b,c,d,e)\n#define IDirect3DDevice3_DrawIndexedPrimitiveVB(p,a,b,c,d,e) (p)->DrawIndexedPrimitiveVB(a,b,c,d,e)\n#define IDirect3DDevice3_ComputeSphereVisibility(p,a,b,c,d,e) (p)->ComputeSphereVisibility(a,b,c,d,e)\n#define IDirect3DDevice3_GetTexture(p,a,b) (p)->GetTexture(a,b)\n#define IDirect3DDevice3_SetTexture(p,a,b) (p)->SetTexture(a,b)\n#define IDirect3DDevice3_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c)\n#define IDirect3DDevice3_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c)\n#define IDirect3DDevice3_ValidateDevice(p,a) (p)->ValidateDevice(a)\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n#if(DIRECT3D_VERSION >= 0x0700)\n#undef INTERFACE\n#define INTERFACE IDirect3DDevice7\n\nDECLARE_INTERFACE_(IDirect3DDevice7, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DDevice7 methods ***/\n    STDMETHOD(GetCaps)(THIS_ LPD3DDEVICEDESC7) PURE;\n    STDMETHOD(EnumTextureFormats)(THIS_ LPD3DENUMPIXELFORMATSCALLBACK,LPVOID) PURE;\n    STDMETHOD(BeginScene)(THIS) PURE;\n    STDMETHOD(EndScene)(THIS) PURE;\n    STDMETHOD(GetDirect3D)(THIS_ LPDIRECT3D7*) PURE;\n    STDMETHOD(SetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE7,DWORD) PURE;\n    STDMETHOD(GetRenderTarget)(THIS_ LPDIRECTDRAWSURFACE7 *) PURE;\n    STDMETHOD(Clear)(THIS_ DWORD,LPD3DRECT,DWORD,D3DCOLOR,D3DVALUE,DWORD) PURE;\n    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;\n    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;\n    STDMETHOD(SetViewport)(THIS_ LPD3DVIEWPORT7) PURE;\n    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,LPD3DMATRIX) PURE;\n    STDMETHOD(GetViewport)(THIS_ LPD3DVIEWPORT7) PURE;\n    STDMETHOD(SetMaterial)(THIS_ LPD3DMATERIAL7) PURE;\n    STDMETHOD(GetMaterial)(THIS_ LPD3DMATERIAL7) PURE;\n    STDMETHOD(SetLight)(THIS_ DWORD,LPD3DLIGHT7) PURE;\n    STDMETHOD(GetLight)(THIS_ DWORD,LPD3DLIGHT7) PURE;\n    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE,DWORD) PURE;\n    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE,LPDWORD) PURE;\n    STDMETHOD(BeginStateBlock)(THIS) PURE;\n    STDMETHOD(EndStateBlock)(THIS_ LPDWORD) PURE;\n    STDMETHOD(PreLoad)(THIS_ LPDIRECTDRAWSURFACE7) PURE;\n    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,DWORD) PURE;\n    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,DWORD,LPVOID,DWORD,LPWORD,DWORD,DWORD) PURE;\n    STDMETHOD(SetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE;\n    STDMETHOD(GetClipStatus)(THIS_ LPD3DCLIPSTATUS) PURE;\n    STDMETHOD(DrawPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,DWORD) PURE;\n    STDMETHOD(DrawIndexedPrimitiveStrided)(THIS_ D3DPRIMITIVETYPE,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,LPWORD,DWORD,DWORD) PURE;\n    STDMETHOD(DrawPrimitiveVB)(THIS_ D3DPRIMITIVETYPE,LPDIRECT3DVERTEXBUFFER7,DWORD,DWORD,DWORD) PURE;\n    STDMETHOD(DrawIndexedPrimitiveVB)(THIS_ D3DPRIMITIVETYPE,LPDIRECT3DVERTEXBUFFER7,DWORD,DWORD,LPWORD,DWORD,DWORD) PURE;\n    STDMETHOD(ComputeSphereVisibility)(THIS_ LPD3DVECTOR,LPD3DVALUE,DWORD,DWORD,LPDWORD) PURE;\n    STDMETHOD(GetTexture)(THIS_ DWORD,LPDIRECTDRAWSURFACE7 *) PURE;\n    STDMETHOD(SetTexture)(THIS_ DWORD,LPDIRECTDRAWSURFACE7) PURE;\n    STDMETHOD(GetTextureStageState)(THIS_ DWORD,D3DTEXTURESTAGESTATETYPE,LPDWORD) PURE;\n    STDMETHOD(SetTextureStageState)(THIS_ DWORD,D3DTEXTURESTAGESTATETYPE,DWORD) PURE;\n    STDMETHOD(ValidateDevice)(THIS_ LPDWORD) PURE;\n    STDMETHOD(ApplyStateBlock)(THIS_ DWORD) PURE;\n    STDMETHOD(CaptureStateBlock)(THIS_ DWORD) PURE;\n    STDMETHOD(DeleteStateBlock)(THIS_ DWORD) PURE;\n    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE,LPDWORD) PURE;\n    STDMETHOD(Load)(THIS_ LPDIRECTDRAWSURFACE7,LPPOINT,LPDIRECTDRAWSURFACE7,LPRECT,DWORD) PURE;\n    STDMETHOD(LightEnable)(THIS_ DWORD,BOOL) PURE;\n    STDMETHOD(GetLightEnable)(THIS_ DWORD,BOOL*) PURE;\n    STDMETHOD(SetClipPlane)(THIS_ DWORD,D3DVALUE*) PURE;\n    STDMETHOD(GetClipPlane)(THIS_ DWORD,D3DVALUE*) PURE;\n    STDMETHOD(GetInfo)(THIS_ DWORD,LPVOID,DWORD) PURE;\n};\n\ntypedef struct IDirect3DDevice7 *LPDIRECT3DDEVICE7;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DDevice7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DDevice7_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DDevice7_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DDevice7_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)\n#define IDirect3DDevice7_EnumTextureFormats(p,a,b) (p)->lpVtbl->EnumTextureFormats(p,a,b)\n#define IDirect3DDevice7_BeginScene(p) (p)->lpVtbl->BeginScene(p)\n#define IDirect3DDevice7_EndScene(p) (p)->lpVtbl->EndScene(p)\n#define IDirect3DDevice7_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)\n#define IDirect3DDevice7_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)\n#define IDirect3DDevice7_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a)\n#define IDirect3DDevice7_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f)\n#define IDirect3DDevice7_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)\n#define IDirect3DDevice7_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)\n#define IDirect3DDevice7_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)\n#define IDirect3DDevice7_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)\n#define IDirect3DDevice7_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)\n#define IDirect3DDevice7_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DDevice7_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)\n#define IDirect3DDevice7_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b)\n#define IDirect3DDevice7_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b)\n#define IDirect3DDevice7_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)\n#define IDirect3DDevice7_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)\n#define IDirect3DDevice7_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p)\n#define IDirect3DDevice7_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a)\n#define IDirect3DDevice7_PreLoad(p,a) (p)->lpVtbl->PreLoad(p,a)\n#define IDirect3DDevice7_DrawPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitive(p,a,b,c,d,e)\n#define IDirect3DDevice7_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice7_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)\n#define IDirect3DDevice7_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)\n#define IDirect3DDevice7_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveStrided(p,a,b,c,d,e)\n#define IDirect3DDevice7_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice7_DrawPrimitiveVB(p,a,b,c,d,e) (p)->lpVtbl->DrawPrimitiveVB(p,a,b,c,d,e)\n#define IDirect3DDevice7_DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g) (p)->lpVtbl->DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice7_ComputeSphereVisibility(p,a,b,c,d,e) (p)->lpVtbl->ComputeSphereVisibility(p,a,b,c,d,e)\n#define IDirect3DDevice7_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b)\n#define IDirect3DDevice7_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b)\n#define IDirect3DDevice7_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c)\n#define IDirect3DDevice7_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c)\n#define IDirect3DDevice7_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a)\n#define IDirect3DDevice7_ApplyStateBlock(p,a) (p)->lpVtbl->ApplyStateBlock(p,a)\n#define IDirect3DDevice7_CaptureStateBlock(p,a) (p)->lpVtbl->CaptureStateBlock(p,a)\n#define IDirect3DDevice7_DeleteStateBlock(p,a) (p)->lpVtbl->DeleteStateBlock(p,a)\n#define IDirect3DDevice7_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b)\n#define IDirect3DDevice7_Load(p,a,b,c,d,e) (p)->lpVtbl->Load(p,a,b,c,d,e)\n#define IDirect3DDevice7_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b)\n#define IDirect3DDevice7_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b)\n#define IDirect3DDevice7_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b)\n#define IDirect3DDevice7_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b)\n#define IDirect3DDevice7_GetInfo(p,a,b,c) (p)->lpVtbl->GetInfo(p,a,b,c)\n#else\n#define IDirect3DDevice7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DDevice7_AddRef(p) (p)->AddRef()\n#define IDirect3DDevice7_Release(p) (p)->Release()\n#define IDirect3DDevice7_GetCaps(p,a) (p)->GetCaps(a)\n#define IDirect3DDevice7_EnumTextureFormats(p,a,b) (p)->EnumTextureFormats(a,b)\n#define IDirect3DDevice7_BeginScene(p) (p)->BeginScene()\n#define IDirect3DDevice7_EndScene(p) (p)->EndScene()\n#define IDirect3DDevice7_GetDirect3D(p,a) (p)->GetDirect3D(a)\n#define IDirect3DDevice7_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)\n#define IDirect3DDevice7_GetRenderTarget(p,a) (p)->GetRenderTarget(a)\n#define IDirect3DDevice7_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f)\n#define IDirect3DDevice7_SetTransform(p,a,b) (p)->SetTransform(a,b)\n#define IDirect3DDevice7_GetTransform(p,a,b) (p)->GetTransform(a,b)\n#define IDirect3DDevice7_SetViewport(p,a) (p)->SetViewport(a)\n#define IDirect3DDevice7_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)\n#define IDirect3DDevice7_GetViewport(p,a) (p)->GetViewport(a)\n#define IDirect3DDevice7_SetMaterial(p,a) (p)->SetMaterial(a)\n#define IDirect3DDevice7_GetMaterial(p,a) (p)->GetMaterial(a)\n#define IDirect3DDevice7_SetLight(p,a,b) (p)->SetLight(a,b)\n#define IDirect3DDevice7_GetLight(p,a,b) (p)->GetLight(a,b)\n#define IDirect3DDevice7_SetRenderState(p,a,b) (p)->SetRenderState(a,b)\n#define IDirect3DDevice7_GetRenderState(p,a,b) (p)->GetRenderState(a,b)\n#define IDirect3DDevice7_BeginStateBlock(p) (p)->BeginStateBlock()\n#define IDirect3DDevice7_EndStateBlock(p,a) (p)->EndStateBlock(a)\n#define IDirect3DDevice7_PreLoad(p,a) (p)->PreLoad(a)\n#define IDirect3DDevice7_DrawPrimitive(p,a,b,c,d,e) (p)->DrawPrimitive(a,b,c,d,e)\n#define IDirect3DDevice7_DrawIndexedPrimitive(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitive(a,b,c,d,e,f,g)\n#define IDirect3DDevice7_SetClipStatus(p,a) (p)->SetClipStatus(a)\n#define IDirect3DDevice7_GetClipStatus(p,a) (p)->GetClipStatus(a)\n#define IDirect3DDevice7_DrawPrimitiveStrided(p,a,b,c,d,e) (p)->DrawPrimitiveStrided(a,b,c,d,e)\n#define IDirect3DDevice7_DrawIndexedPrimitiveStrided(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveStrided(a,b,c,d,e,f,g)\n#define IDirect3DDevice7_DrawPrimitiveVB(p,a,b,c,d,e) (p)->DrawPrimitiveVB(a,b,c,d,e)\n#define IDirect3DDevice7_DrawIndexedPrimitiveVB(p,a,b,c,d,e,f,g) (p)->DrawIndexedPrimitiveVB(a,b,c,d,e,f,g)\n#define IDirect3DDevice7_ComputeSphereVisibility(p,a,b,c,d,e) (p)->ComputeSphereVisibility(a,b,c,d,e)\n#define IDirect3DDevice7_GetTexture(p,a,b) (p)->GetTexture(a,b)\n#define IDirect3DDevice7_SetTexture(p,a,b) (p)->SetTexture(a,b)\n#define IDirect3DDevice7_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c)\n#define IDirect3DDevice7_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c)\n#define IDirect3DDevice7_ValidateDevice(p,a) (p)->ValidateDevice(a)\n#define IDirect3DDevice7_ApplyStateBlock(p,a) (p)->ApplyStateBlock(a)\n#define IDirect3DDevice7_CaptureStateBlock(p,a) (p)->CaptureStateBlock(a)\n#define IDirect3DDevice7_DeleteStateBlock(p,a) (p)->DeleteStateBlock(a)\n#define IDirect3DDevice7_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b)\n#define IDirect3DDevice7_Load(p,a,b,c,d,e) (p)->Load(a,b,c,d,e)\n#define IDirect3DDevice7_LightEnable(p,a,b) (p)->LightEnable(a,b)\n#define IDirect3DDevice7_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b)\n#define IDirect3DDevice7_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b)\n#define IDirect3DDevice7_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b)\n#define IDirect3DDevice7_GetInfo(p,a,b,c) (p)->GetInfo(a,b,c)\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n/*\n * Execute Buffer interface\n */\n#undef INTERFACE\n#define INTERFACE IDirect3DExecuteBuffer\n\nDECLARE_INTERFACE_(IDirect3DExecuteBuffer, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DExecuteBuffer methods ***/\n    STDMETHOD(Initialize)(THIS_ LPDIRECT3DDEVICE,LPD3DEXECUTEBUFFERDESC) PURE;\n    STDMETHOD(Lock)(THIS_ LPD3DEXECUTEBUFFERDESC) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(SetExecuteData)(THIS_ LPD3DEXECUTEDATA) PURE;\n    STDMETHOD(GetExecuteData)(THIS_ LPD3DEXECUTEDATA) PURE;\n    STDMETHOD(Validate)(THIS_ LPDWORD,LPD3DVALIDATECALLBACK,LPVOID,DWORD) PURE;\n    STDMETHOD(Optimize)(THIS_ DWORD) PURE;\n};\n\ntypedef struct IDirect3DExecuteBuffer *LPDIRECT3DEXECUTEBUFFER;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DExecuteBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DExecuteBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DExecuteBuffer_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DExecuteBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)\n#define IDirect3DExecuteBuffer_Lock(p,a) (p)->lpVtbl->Lock(p,a)\n#define IDirect3DExecuteBuffer_Unlock(p) (p)->lpVtbl->Unlock(p)\n#define IDirect3DExecuteBuffer_SetExecuteData(p,a) (p)->lpVtbl->SetExecuteData(p,a)\n#define IDirect3DExecuteBuffer_GetExecuteData(p,a) (p)->lpVtbl->GetExecuteData(p,a)\n#define IDirect3DExecuteBuffer_Validate(p,a,b,c,d) (p)->lpVtbl->Validate(p,a,b,c,d)\n#define IDirect3DExecuteBuffer_Optimize(p,a) (p)->lpVtbl->Optimize(p,a)\n#else\n#define IDirect3DExecuteBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DExecuteBuffer_AddRef(p) (p)->AddRef()\n#define IDirect3DExecuteBuffer_Release(p) (p)->Release()\n#define IDirect3DExecuteBuffer_Initialize(p,a,b) (p)->Initialize(a,b)\n#define IDirect3DExecuteBuffer_Lock(p,a) (p)->Lock(a)\n#define IDirect3DExecuteBuffer_Unlock(p) (p)->Unlock()\n#define IDirect3DExecuteBuffer_SetExecuteData(p,a) (p)->SetExecuteData(a)\n#define IDirect3DExecuteBuffer_GetExecuteData(p,a) (p)->GetExecuteData(a)\n#define IDirect3DExecuteBuffer_Validate(p,a,b,c,d) (p)->Validate(a,b,c,d)\n#define IDirect3DExecuteBuffer_Optimize(p,a) (p)->Optimize(a)\n#endif\n\n/*\n * Light interfaces\n */\n#undef INTERFACE\n#define INTERFACE IDirect3DLight\n\nDECLARE_INTERFACE_(IDirect3DLight, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DLight methods ***/\n    STDMETHOD(Initialize)(THIS_ LPDIRECT3D) PURE;\n    STDMETHOD(SetLight)(THIS_ LPD3DLIGHT) PURE;\n    STDMETHOD(GetLight)(THIS_ LPD3DLIGHT) PURE;\n};\n\ntypedef struct IDirect3DLight *LPDIRECT3DLIGHT;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DLight_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DLight_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DLight_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DLight_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)\n#define IDirect3DLight_SetLight(p,a) (p)->lpVtbl->SetLight(p,a)\n#define IDirect3DLight_GetLight(p,a) (p)->lpVtbl->GetLight(p,a)\n#else\n#define IDirect3DLight_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DLight_AddRef(p) (p)->AddRef()\n#define IDirect3DLight_Release(p) (p)->Release()\n#define IDirect3DLight_Initialize(p,a) (p)->Initialize(a)\n#define IDirect3DLight_SetLight(p,a) (p)->SetLight(a)\n#define IDirect3DLight_GetLight(p,a) (p)->GetLight(a)\n#endif\n\n/*\n * Material interfaces\n */\n#undef INTERFACE\n#define INTERFACE IDirect3DMaterial\n\nDECLARE_INTERFACE_(IDirect3DMaterial, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DMaterial methods ***/\n    STDMETHOD(Initialize)(THIS_ LPDIRECT3D) PURE;\n    STDMETHOD(SetMaterial)(THIS_ LPD3DMATERIAL) PURE;\n    STDMETHOD(GetMaterial)(THIS_ LPD3DMATERIAL) PURE;\n    STDMETHOD(GetHandle)(THIS_ LPDIRECT3DDEVICE,LPD3DMATERIALHANDLE) PURE;\n    STDMETHOD(Reserve)(THIS) PURE;\n    STDMETHOD(Unreserve)(THIS) PURE;\n};\n\ntypedef struct IDirect3DMaterial *LPDIRECT3DMATERIAL;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DMaterial_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DMaterial_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DMaterial_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DMaterial_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)\n#define IDirect3DMaterial_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DMaterial_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)\n#define IDirect3DMaterial_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)\n#define IDirect3DMaterial_Reserve(p) (p)->lpVtbl->Reserve(p)\n#define IDirect3DMaterial_Unreserve(p) (p)->lpVtbl->Unreserve(p)\n#else\n#define IDirect3DMaterial_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DMaterial_AddRef(p) (p)->AddRef()\n#define IDirect3DMaterial_Release(p) (p)->Release()\n#define IDirect3DMaterial_Initialize(p,a) (p)->Initialize(a)\n#define IDirect3DMaterial_SetMaterial(p,a) (p)->SetMaterial(a)\n#define IDirect3DMaterial_GetMaterial(p,a) (p)->GetMaterial(a)\n#define IDirect3DMaterial_GetHandle(p,a,b) (p)->GetHandle(a,b)\n#define IDirect3DMaterial_Reserve(p) (p)->Reserve()\n#define IDirect3DMaterial_Unreserve(p) (p)->Unreserve()\n#endif\n\n#if(DIRECT3D_VERSION >= 0x0500)\n#undef INTERFACE\n#define INTERFACE IDirect3DMaterial2\n\nDECLARE_INTERFACE_(IDirect3DMaterial2, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DMaterial2 methods ***/\n    STDMETHOD(SetMaterial)(THIS_ LPD3DMATERIAL) PURE;\n    STDMETHOD(GetMaterial)(THIS_ LPD3DMATERIAL) PURE;\n    STDMETHOD(GetHandle)(THIS_ LPDIRECT3DDEVICE2,LPD3DMATERIALHANDLE) PURE;\n};\n\ntypedef struct IDirect3DMaterial2 *LPDIRECT3DMATERIAL2;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DMaterial2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DMaterial2_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DMaterial2_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DMaterial2_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DMaterial2_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)\n#define IDirect3DMaterial2_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)\n#else\n#define IDirect3DMaterial2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DMaterial2_AddRef(p) (p)->AddRef()\n#define IDirect3DMaterial2_Release(p) (p)->Release()\n#define IDirect3DMaterial2_SetMaterial(p,a) (p)->SetMaterial(a)\n#define IDirect3DMaterial2_GetMaterial(p,a) (p)->GetMaterial(a)\n#define IDirect3DMaterial2_GetHandle(p,a,b) (p)->GetHandle(a,b)\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#if(DIRECT3D_VERSION >= 0x0600)\n#undef INTERFACE\n#define INTERFACE IDirect3DMaterial3\n\nDECLARE_INTERFACE_(IDirect3DMaterial3, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DMaterial3 methods ***/\n    STDMETHOD(SetMaterial)(THIS_ LPD3DMATERIAL) PURE;\n    STDMETHOD(GetMaterial)(THIS_ LPD3DMATERIAL) PURE;\n    STDMETHOD(GetHandle)(THIS_ LPDIRECT3DDEVICE3,LPD3DMATERIALHANDLE) PURE;\n};\n\ntypedef struct IDirect3DMaterial3 *LPDIRECT3DMATERIAL3;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DMaterial3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DMaterial3_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DMaterial3_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DMaterial3_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DMaterial3_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)\n#define IDirect3DMaterial3_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)\n#else\n#define IDirect3DMaterial3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DMaterial3_AddRef(p) (p)->AddRef()\n#define IDirect3DMaterial3_Release(p) (p)->Release()\n#define IDirect3DMaterial3_SetMaterial(p,a) (p)->SetMaterial(a)\n#define IDirect3DMaterial3_GetMaterial(p,a) (p)->GetMaterial(a)\n#define IDirect3DMaterial3_GetHandle(p,a,b) (p)->GetHandle(a,b)\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n/*\n * Texture interfaces\n */\n#undef INTERFACE\n#define INTERFACE IDirect3DTexture\n\nDECLARE_INTERFACE_(IDirect3DTexture, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DTexture methods ***/\n    STDMETHOD(Initialize)(THIS_ LPDIRECT3DDEVICE,LPDIRECTDRAWSURFACE) PURE;\n    STDMETHOD(GetHandle)(THIS_ LPDIRECT3DDEVICE,LPD3DTEXTUREHANDLE) PURE;\n    STDMETHOD(PaletteChanged)(THIS_ DWORD,DWORD) PURE;\n    STDMETHOD(Load)(THIS_ LPDIRECT3DTEXTURE) PURE;\n    STDMETHOD(Unload)(THIS) PURE;\n};\n\ntypedef struct IDirect3DTexture *LPDIRECT3DTEXTURE;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DTexture_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DTexture_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DTexture_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DTexture_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)\n#define IDirect3DTexture_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)\n#define IDirect3DTexture_PaletteChanged(p,a,b) (p)->lpVtbl->PaletteChanged(p,a,b)\n#define IDirect3DTexture_Load(p,a) (p)->lpVtbl->Load(p,a)\n#define IDirect3DTexture_Unload(p) (p)->lpVtbl->Unload(p)\n#else\n#define IDirect3DTexture_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DTexture_AddRef(p) (p)->AddRef()\n#define IDirect3DTexture_Release(p) (p)->Release()\n#define IDirect3DTexture_Initialize(p,a,b) (p)->Initialize(a,b)\n#define IDirect3DTexture_GetHandle(p,a,b) (p)->GetHandle(a,b)\n#define IDirect3DTexture_PaletteChanged(p,a,b) (p)->PaletteChanged(a,b)\n#define IDirect3DTexture_Load(p,a) (p)->Load(a)\n#define IDirect3DTexture_Unload(p) (p)->Unload()\n#endif\n\n#if(DIRECT3D_VERSION >= 0x0500)\n#undef INTERFACE\n#define INTERFACE IDirect3DTexture2\n\nDECLARE_INTERFACE_(IDirect3DTexture2, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DTexture2 methods ***/\n    STDMETHOD(GetHandle)(THIS_ LPDIRECT3DDEVICE2,LPD3DTEXTUREHANDLE) PURE;\n    STDMETHOD(PaletteChanged)(THIS_ DWORD,DWORD) PURE;\n    STDMETHOD(Load)(THIS_ LPDIRECT3DTEXTURE2) PURE;\n};\n\ntypedef struct IDirect3DTexture2 *LPDIRECT3DTEXTURE2;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DTexture2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DTexture2_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DTexture2_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DTexture2_GetHandle(p,a,b) (p)->lpVtbl->GetHandle(p,a,b)\n#define IDirect3DTexture2_PaletteChanged(p,a,b) (p)->lpVtbl->PaletteChanged(p,a,b)\n#define IDirect3DTexture2_Load(p,a) (p)->lpVtbl->Load(p,a)\n#else\n#define IDirect3DTexture2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DTexture2_AddRef(p) (p)->AddRef()\n#define IDirect3DTexture2_Release(p) (p)->Release()\n#define IDirect3DTexture2_GetHandle(p,a,b) (p)->GetHandle(a,b)\n#define IDirect3DTexture2_PaletteChanged(p,a,b) (p)->PaletteChanged(a,b)\n#define IDirect3DTexture2_Load(p,a) (p)->Load(a)\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n/*\n * Viewport interfaces\n */\n#undef INTERFACE\n#define INTERFACE IDirect3DViewport\n\nDECLARE_INTERFACE_(IDirect3DViewport, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DViewport methods ***/\n    STDMETHOD(Initialize)(THIS_ LPDIRECT3D) PURE;\n    STDMETHOD(GetViewport)(THIS_ LPD3DVIEWPORT) PURE;\n    STDMETHOD(SetViewport)(THIS_ LPD3DVIEWPORT) PURE;\n    STDMETHOD(TransformVertices)(THIS_ DWORD,LPD3DTRANSFORMDATA,DWORD,LPDWORD) PURE;\n    STDMETHOD(LightElements)(THIS_ DWORD,LPD3DLIGHTDATA) PURE;\n    STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE) PURE;\n    STDMETHOD(GetBackground)(THIS_ LPD3DMATERIALHANDLE,LPBOOL) PURE;\n    STDMETHOD(SetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE;\n    STDMETHOD(GetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE*,LPBOOL) PURE;\n    STDMETHOD(Clear)(THIS_ DWORD,LPD3DRECT,DWORD) PURE;\n    STDMETHOD(AddLight)(THIS_ LPDIRECT3DLIGHT) PURE;\n    STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DLIGHT) PURE;\n    STDMETHOD(NextLight)(THIS_ LPDIRECT3DLIGHT,LPDIRECT3DLIGHT*,DWORD) PURE;\n};\n\ntypedef struct IDirect3DViewport *LPDIRECT3DVIEWPORT;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DViewport_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DViewport_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DViewport_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DViewport_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)\n#define IDirect3DViewport_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)\n#define IDirect3DViewport_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)\n#define IDirect3DViewport_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d)\n#define IDirect3DViewport_LightElements(p,a,b) (p)->lpVtbl->LightElements(p,a,b)\n#define IDirect3DViewport_SetBackground(p,a) (p)->lpVtbl->SetBackground(p,a)\n#define IDirect3DViewport_GetBackground(p,a,b) (p)->lpVtbl->GetBackground(p,a,b)\n#define IDirect3DViewport_SetBackgroundDepth(p,a) (p)->lpVtbl->SetBackgroundDepth(p,a)\n#define IDirect3DViewport_GetBackgroundDepth(p,a,b) (p)->lpVtbl->GetBackgroundDepth(p,a,b)\n#define IDirect3DViewport_Clear(p,a,b,c) (p)->lpVtbl->Clear(p,a,b,c)\n#define IDirect3DViewport_AddLight(p,a) (p)->lpVtbl->AddLight(p,a)\n#define IDirect3DViewport_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a)\n#define IDirect3DViewport_NextLight(p,a,b,c) (p)->lpVtbl->NextLight(p,a,b,c)\n#else\n#define IDirect3DViewport_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DViewport_AddRef(p) (p)->AddRef()\n#define IDirect3DViewport_Release(p) (p)->Release()\n#define IDirect3DViewport_Initialize(p,a) (p)->Initialize(a)\n#define IDirect3DViewport_GetViewport(p,a) (p)->GetViewport(a)\n#define IDirect3DViewport_SetViewport(p,a) (p)->SetViewport(a)\n#define IDirect3DViewport_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d)\n#define IDirect3DViewport_LightElements(p,a,b) (p)->LightElements(a,b)\n#define IDirect3DViewport_SetBackground(p,a) (p)->SetBackground(a)\n#define IDirect3DViewport_GetBackground(p,a,b) (p)->GetBackground(a,b)\n#define IDirect3DViewport_SetBackgroundDepth(p,a) (p)->SetBackgroundDepth(a)\n#define IDirect3DViewport_GetBackgroundDepth(p,a,b) (p)->GetBackgroundDepth(a,b)\n#define IDirect3DViewport_Clear(p,a,b,c) (p)->Clear(a,b,c)\n#define IDirect3DViewport_AddLight(p,a) (p)->AddLight(a)\n#define IDirect3DViewport_DeleteLight(p,a) (p)->DeleteLight(a)\n#define IDirect3DViewport_NextLight(p,a,b,c) (p)->NextLight(a,b,c)\n#endif\n\n#if(DIRECT3D_VERSION >= 0x0500)\n#undef INTERFACE\n#define INTERFACE IDirect3DViewport2\n\nDECLARE_INTERFACE_(IDirect3DViewport2, IDirect3DViewport)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DViewport methods ***/\n    STDMETHOD(Initialize)(THIS_ LPDIRECT3D) PURE;\n    STDMETHOD(GetViewport)(THIS_ LPD3DVIEWPORT) PURE;\n    STDMETHOD(SetViewport)(THIS_ LPD3DVIEWPORT) PURE;\n    STDMETHOD(TransformVertices)(THIS_ DWORD,LPD3DTRANSFORMDATA,DWORD,LPDWORD) PURE;\n    STDMETHOD(LightElements)(THIS_ DWORD,LPD3DLIGHTDATA) PURE;\n    STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE) PURE;\n    STDMETHOD(GetBackground)(THIS_ LPD3DMATERIALHANDLE,LPBOOL) PURE;\n    STDMETHOD(SetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE;\n    STDMETHOD(GetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE*,LPBOOL) PURE;\n    STDMETHOD(Clear)(THIS_ DWORD,LPD3DRECT,DWORD) PURE;\n    STDMETHOD(AddLight)(THIS_ LPDIRECT3DLIGHT) PURE;\n    STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DLIGHT) PURE;\n    STDMETHOD(NextLight)(THIS_ LPDIRECT3DLIGHT,LPDIRECT3DLIGHT*,DWORD) PURE;\n    STDMETHOD(GetViewport2)(THIS_ LPD3DVIEWPORT2) PURE;\n    STDMETHOD(SetViewport2)(THIS_ LPD3DVIEWPORT2) PURE;\n};\n\ntypedef struct IDirect3DViewport2 *LPDIRECT3DVIEWPORT2;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DViewport2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DViewport2_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DViewport2_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DViewport2_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)\n#define IDirect3DViewport2_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)\n#define IDirect3DViewport2_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)\n#define IDirect3DViewport2_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d)\n#define IDirect3DViewport2_LightElements(p,a,b) (p)->lpVtbl->LightElements(p,a,b)\n#define IDirect3DViewport2_SetBackground(p,a) (p)->lpVtbl->SetBackground(p,a)\n#define IDirect3DViewport2_GetBackground(p,a,b) (p)->lpVtbl->GetBackground(p,a,b)\n#define IDirect3DViewport2_SetBackgroundDepth(p,a) (p)->lpVtbl->SetBackgroundDepth(p,a)\n#define IDirect3DViewport2_GetBackgroundDepth(p,a,b) (p)->lpVtbl->GetBackgroundDepth(p,a,b)\n#define IDirect3DViewport2_Clear(p,a,b,c) (p)->lpVtbl->Clear(p,a,b,c)\n#define IDirect3DViewport2_AddLight(p,a) (p)->lpVtbl->AddLight(p,a)\n#define IDirect3DViewport2_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a)\n#define IDirect3DViewport2_NextLight(p,a,b,c) (p)->lpVtbl->NextLight(p,a,b,c)\n#define IDirect3DViewport2_GetViewport2(p,a) (p)->lpVtbl->GetViewport2(p,a)\n#define IDirect3DViewport2_SetViewport2(p,a) (p)->lpVtbl->SetViewport2(p,a)\n#else\n#define IDirect3DViewport2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DViewport2_AddRef(p) (p)->AddRef()\n#define IDirect3DViewport2_Release(p) (p)->Release()\n#define IDirect3DViewport2_Initialize(p,a) (p)->Initialize(a)\n#define IDirect3DViewport2_GetViewport(p,a) (p)->GetViewport(a)\n#define IDirect3DViewport2_SetViewport(p,a) (p)->SetViewport(a)\n#define IDirect3DViewport2_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d)\n#define IDirect3DViewport2_LightElements(p,a,b) (p)->LightElements(a,b)\n#define IDirect3DViewport2_SetBackground(p,a) (p)->SetBackground(a)\n#define IDirect3DViewport2_GetBackground(p,a,b) (p)->GetBackground(a,b)\n#define IDirect3DViewport2_SetBackgroundDepth(p,a) (p)->SetBackgroundDepth(a)\n#define IDirect3DViewport2_GetBackgroundDepth(p,a,b) (p)->GetBackgroundDepth(a,b)\n#define IDirect3DViewport2_Clear(p,a,b,c) (p)->Clear(a,b,c)\n#define IDirect3DViewport2_AddLight(p,a) (p)->AddLight(a)\n#define IDirect3DViewport2_DeleteLight(p,a) (p)->DeleteLight(a)\n#define IDirect3DViewport2_NextLight(p,a,b,c) (p)->NextLight(a,b,c)\n#define IDirect3DViewport2_GetViewport2(p,a) (p)->GetViewport2(a)\n#define IDirect3DViewport2_SetViewport2(p,a) (p)->SetViewport2(a)\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#if(DIRECT3D_VERSION >= 0x0600)\n\n#undef INTERFACE\n#define INTERFACE IDirect3DViewport3\n\nDECLARE_INTERFACE_(IDirect3DViewport3, IDirect3DViewport2)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DViewport2 methods ***/\n    STDMETHOD(Initialize)(THIS_ LPDIRECT3D) PURE;\n    STDMETHOD(GetViewport)(THIS_ LPD3DVIEWPORT) PURE;\n    STDMETHOD(SetViewport)(THIS_ LPD3DVIEWPORT) PURE;\n    STDMETHOD(TransformVertices)(THIS_ DWORD,LPD3DTRANSFORMDATA,DWORD,LPDWORD) PURE;\n    STDMETHOD(LightElements)(THIS_ DWORD,LPD3DLIGHTDATA) PURE;\n    STDMETHOD(SetBackground)(THIS_ D3DMATERIALHANDLE) PURE;\n    STDMETHOD(GetBackground)(THIS_ LPD3DMATERIALHANDLE,LPBOOL) PURE;\n    STDMETHOD(SetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE) PURE;\n    STDMETHOD(GetBackgroundDepth)(THIS_ LPDIRECTDRAWSURFACE*,LPBOOL) PURE;\n    STDMETHOD(Clear)(THIS_ DWORD,LPD3DRECT,DWORD) PURE;\n    STDMETHOD(AddLight)(THIS_ LPDIRECT3DLIGHT) PURE;\n    STDMETHOD(DeleteLight)(THIS_ LPDIRECT3DLIGHT) PURE;\n    STDMETHOD(NextLight)(THIS_ LPDIRECT3DLIGHT,LPDIRECT3DLIGHT*,DWORD) PURE;\n    STDMETHOD(GetViewport2)(THIS_ LPD3DVIEWPORT2) PURE;\n    STDMETHOD(SetViewport2)(THIS_ LPD3DVIEWPORT2) PURE;\n    STDMETHOD(SetBackgroundDepth2)(THIS_ LPDIRECTDRAWSURFACE4) PURE;\n    STDMETHOD(GetBackgroundDepth2)(THIS_ LPDIRECTDRAWSURFACE4*,LPBOOL) PURE;\n    STDMETHOD(Clear2)(THIS_ DWORD,LPD3DRECT,DWORD,D3DCOLOR,D3DVALUE,DWORD) PURE;\n};\n\ntypedef struct IDirect3DViewport3 *LPDIRECT3DVIEWPORT3;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DViewport3_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DViewport3_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DViewport3_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DViewport3_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)\n#define IDirect3DViewport3_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)\n#define IDirect3DViewport3_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)\n#define IDirect3DViewport3_TransformVertices(p,a,b,c,d) (p)->lpVtbl->TransformVertices(p,a,b,c,d)\n#define IDirect3DViewport3_LightElements(p,a,b) (p)->lpVtbl->LightElements(p,a,b)\n#define IDirect3DViewport3_SetBackground(p,a) (p)->lpVtbl->SetBackground(p,a)\n#define IDirect3DViewport3_GetBackground(p,a,b) (p)->lpVtbl->GetBackground(p,a,b)\n#define IDirect3DViewport3_SetBackgroundDepth(p,a) (p)->lpVtbl->SetBackgroundDepth(p,a)\n#define IDirect3DViewport3_GetBackgroundDepth(p,a,b) (p)->lpVtbl->GetBackgroundDepth(p,a,b)\n#define IDirect3DViewport3_Clear(p,a,b,c) (p)->lpVtbl->Clear(p,a,b,c)\n#define IDirect3DViewport3_AddLight(p,a) (p)->lpVtbl->AddLight(p,a)\n#define IDirect3DViewport3_DeleteLight(p,a) (p)->lpVtbl->DeleteLight(p,a)\n#define IDirect3DViewport3_NextLight(p,a,b,c) (p)->lpVtbl->NextLight(p,a,b,c)\n#define IDirect3DViewport3_GetViewport2(p,a) (p)->lpVtbl->GetViewport2(p,a)\n#define IDirect3DViewport3_SetViewport2(p,a) (p)->lpVtbl->SetViewport2(p,a)\n#define IDirect3DViewport3_SetBackgroundDepth2(p,a) (p)->lpVtbl->SetBackgroundDepth2(p,a)\n#define IDirect3DViewport3_GetBackgroundDepth2(p,a,b) (p)->lpVtbl->GetBackgroundDepth2(p,a,b)\n#define IDirect3DViewport3_Clear2(p,a,b,c,d,e,f) (p)->lpVtbl->Clear2(p,a,b,c,d,e,f)\n#else\n#define IDirect3DViewport3_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DViewport3_AddRef(p) (p)->AddRef()\n#define IDirect3DViewport3_Release(p) (p)->Release()\n#define IDirect3DViewport3_Initialize(p,a) (p)->Initialize(a)\n#define IDirect3DViewport3_GetViewport(p,a) (p)->GetViewport(a)\n#define IDirect3DViewport3_SetViewport(p,a) (p)->SetViewport(a)\n#define IDirect3DViewport3_TransformVertices(p,a,b,c,d) (p)->TransformVertices(a,b,c,d)\n#define IDirect3DViewport3_LightElements(p,a,b) (p)->LightElements(a,b)\n#define IDirect3DViewport3_SetBackground(p,a) (p)->SetBackground(a)\n#define IDirect3DViewport3_GetBackground(p,a,b) (p)->GetBackground(a,b)\n#define IDirect3DViewport3_SetBackgroundDepth(p,a) (p)->SetBackgroundDepth(a)\n#define IDirect3DViewport3_GetBackgroundDepth(p,a,b) (p)->GetBackgroundDepth(a,b)\n#define IDirect3DViewport3_Clear(p,a,b,c) (p)->Clear(a,b,c)\n#define IDirect3DViewport3_AddLight(p,a) (p)->AddLight(a)\n#define IDirect3DViewport3_DeleteLight(p,a) (p)->DeleteLight(a)\n#define IDirect3DViewport3_NextLight(p,a,b,c) (p)->NextLight(a,b,c)\n#define IDirect3DViewport3_GetViewport2(p,a) (p)->GetViewport2(a)\n#define IDirect3DViewport3_SetViewport2(p,a) (p)->SetViewport2(a)\n#define IDirect3DViewport3_SetBackgroundDepth2(p,a) (p)->SetBackgroundDepth2(a)\n#define IDirect3DViewport3_GetBackgroundDepth2(p,a,b) (p)->GetBackgroundDepth2(a,b)\n#define IDirect3DViewport3_Clear2(p,a,b,c,d,e,f) (p)->Clear2(a,b,c,d,e,f)\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n#if(DIRECT3D_VERSION >= 0x0600)\n#undef INTERFACE\n#define INTERFACE IDirect3DVertexBuffer\n\nDECLARE_INTERFACE_(IDirect3DVertexBuffer, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DVertexBuffer methods ***/\n    STDMETHOD(Lock)(THIS_ DWORD,LPVOID*,LPDWORD) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(ProcessVertices)(THIS_ DWORD,DWORD,DWORD,LPDIRECT3DVERTEXBUFFER,DWORD,LPDIRECT3DDEVICE3,DWORD) PURE;\n    STDMETHOD(GetVertexBufferDesc)(THIS_ LPD3DVERTEXBUFFERDESC) PURE;\n    STDMETHOD(Optimize)(THIS_ LPDIRECT3DDEVICE3,DWORD) PURE;\n};\n\ntypedef struct IDirect3DVertexBuffer *LPDIRECT3DVERTEXBUFFER;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DVertexBuffer_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVertexBuffer_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DVertexBuffer_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DVertexBuffer_Lock(p,a,b,c) (p)->lpVtbl->Lock(p,a,b,c)\n#define IDirect3DVertexBuffer_Unlock(p) (p)->lpVtbl->Unlock(p)\n#define IDirect3DVertexBuffer_ProcessVertices(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f,g)\n#define IDirect3DVertexBuffer_GetVertexBufferDesc(p,a) (p)->lpVtbl->GetVertexBufferDesc(p,a)\n#define IDirect3DVertexBuffer_Optimize(p,a,b) (p)->lpVtbl->Optimize(p,a,b)\n#else\n#define IDirect3DVertexBuffer_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DVertexBuffer_AddRef(p) (p)->AddRef()\n#define IDirect3DVertexBuffer_Release(p) (p)->Release()\n#define IDirect3DVertexBuffer_Lock(p,a,b,c) (p)->Lock(a,b,c)\n#define IDirect3DVertexBuffer_Unlock(p) (p)->Unlock()\n#define IDirect3DVertexBuffer_ProcessVertices(p,a,b,c,d,e,f,g) (p)->ProcessVertices(a,b,c,d,e,f,g)\n#define IDirect3DVertexBuffer_GetVertexBufferDesc(p,a) (p)->GetVertexBufferDesc(a)\n#define IDirect3DVertexBuffer_Optimize(p,a,b) (p)->Optimize(a,b)\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n#if(DIRECT3D_VERSION >= 0x0700)\n#undef INTERFACE\n#define INTERFACE IDirect3DVertexBuffer7\n\nDECLARE_INTERFACE_(IDirect3DVertexBuffer7, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DVertexBuffer7 methods ***/\n    STDMETHOD(Lock)(THIS_ DWORD,LPVOID*,LPDWORD) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(ProcessVertices)(THIS_ DWORD,DWORD,DWORD,LPDIRECT3DVERTEXBUFFER7,DWORD,LPDIRECT3DDEVICE7,DWORD) PURE;\n    STDMETHOD(GetVertexBufferDesc)(THIS_ LPD3DVERTEXBUFFERDESC) PURE;\n    STDMETHOD(Optimize)(THIS_ LPDIRECT3DDEVICE7,DWORD) PURE;\n    STDMETHOD(ProcessVerticesStrided)(THIS_ DWORD,DWORD,DWORD,LPD3DDRAWPRIMITIVESTRIDEDDATA,DWORD,LPDIRECT3DDEVICE7,DWORD) PURE;\n};\n\ntypedef struct IDirect3DVertexBuffer7 *LPDIRECT3DVERTEXBUFFER7;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DVertexBuffer7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVertexBuffer7_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DVertexBuffer7_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DVertexBuffer7_Lock(p,a,b,c) (p)->lpVtbl->Lock(p,a,b,c)\n#define IDirect3DVertexBuffer7_Unlock(p) (p)->lpVtbl->Unlock(p)\n#define IDirect3DVertexBuffer7_ProcessVertices(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f,g)\n#define IDirect3DVertexBuffer7_GetVertexBufferDesc(p,a) (p)->lpVtbl->GetVertexBufferDesc(p,a)\n#define IDirect3DVertexBuffer7_Optimize(p,a,b) (p)->lpVtbl->Optimize(p,a,b)\n#define IDirect3DVertexBuffer7_ProcessVerticesStrided(p,a,b,c,d,e,f,g) (p)->lpVtbl->ProcessVerticesStrided(p,a,b,c,d,e,f,g)\n#else\n#define IDirect3DVertexBuffer7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DVertexBuffer7_AddRef(p) (p)->AddRef()\n#define IDirect3DVertexBuffer7_Release(p) (p)->Release()\n#define IDirect3DVertexBuffer7_Lock(p,a,b,c) (p)->Lock(a,b,c)\n#define IDirect3DVertexBuffer7_Unlock(p) (p)->Unlock()\n#define IDirect3DVertexBuffer7_ProcessVertices(p,a,b,c,d,e,f,g) (p)->ProcessVertices(a,b,c,d,e,f,g)\n#define IDirect3DVertexBuffer7_GetVertexBufferDesc(p,a) (p)->GetVertexBufferDesc(a)\n#define IDirect3DVertexBuffer7_Optimize(p,a,b) (p)->Optimize(a,b)\n#define IDirect3DVertexBuffer7_ProcessVerticesStrided(p,a,b,c,d,e,f,g) (p)->ProcessVerticesStrided(a,b,c,d,e,f,g)\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n#if(DIRECT3D_VERSION >= 0x0500)\n/****************************************************************************\n *\n * Flags for IDirect3DDevice::NextViewport\n *\n ****************************************************************************/\n\n/*\n * Return the next viewport\n */\n#define D3DNEXT_NEXT    0x00000001l\n\n/*\n * Return the first viewport\n */\n#define D3DNEXT_HEAD    0x00000002l\n\n/*\n * Return the last viewport\n */\n#define D3DNEXT_TAIL    0x00000004l\n\n\n/****************************************************************************\n *\n * Flags for DrawPrimitive/DrawIndexedPrimitive\n *   Also valid for Begin/BeginIndexed\n *   Also valid for VertexBuffer::CreateVertexBuffer\n ****************************************************************************/\n\n/*\n * Wait until the device is ready to draw the primitive\n * This will cause DP to not return DDERR_WASSTILLDRAWING\n */\n#define D3DDP_WAIT                  0x00000001l\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#if (DIRECT3D_VERSION == 0x0500)\n/*\n * Hint that it is acceptable to render the primitive out of order.\n */\n#define D3DDP_OUTOFORDER            0x00000002l\n#endif\n\n\n#if(DIRECT3D_VERSION >= 0x0500)\n/*\n * Hint that the primitives have been clipped by the application.\n */\n#define D3DDP_DONOTCLIP             0x00000004l\n\n/*\n * Hint that the extents need not be updated.\n */\n#define D3DDP_DONOTUPDATEEXTENTS    0x00000008l\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#if(DIRECT3D_VERSION >= 0x0600)\n\n/*\n * Hint that the lighting should not be applied on vertices.\n */\n\n#define D3DDP_DONOTLIGHT            0x00000010l\n\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n/*\n * Direct3D Errors\n * DirectDraw error codes are used when errors not specified here.\n */\n#define D3D_OK              DD_OK\n#define D3DERR_BADMAJORVERSION      MAKE_DDHRESULT(700)\n#define D3DERR_BADMINORVERSION      MAKE_DDHRESULT(701)\n\n#if(DIRECT3D_VERSION >= 0x0500)\n/*\n * An invalid device was requested by the application.\n */\n#define D3DERR_INVALID_DEVICE   MAKE_DDHRESULT(705)\n#define D3DERR_INITFAILED       MAKE_DDHRESULT(706)\n\n/*\n * SetRenderTarget attempted on a device that was\n * QI'd off the render target.\n */\n#define D3DERR_DEVICEAGGREGATED MAKE_DDHRESULT(707)\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#define D3DERR_EXECUTE_CREATE_FAILED    MAKE_DDHRESULT(710)\n#define D3DERR_EXECUTE_DESTROY_FAILED   MAKE_DDHRESULT(711)\n#define D3DERR_EXECUTE_LOCK_FAILED  MAKE_DDHRESULT(712)\n#define D3DERR_EXECUTE_UNLOCK_FAILED    MAKE_DDHRESULT(713)\n#define D3DERR_EXECUTE_LOCKED       MAKE_DDHRESULT(714)\n#define D3DERR_EXECUTE_NOT_LOCKED   MAKE_DDHRESULT(715)\n\n#define D3DERR_EXECUTE_FAILED       MAKE_DDHRESULT(716)\n#define D3DERR_EXECUTE_CLIPPED_FAILED   MAKE_DDHRESULT(717)\n\n#define D3DERR_TEXTURE_NO_SUPPORT   MAKE_DDHRESULT(720)\n#define D3DERR_TEXTURE_CREATE_FAILED    MAKE_DDHRESULT(721)\n#define D3DERR_TEXTURE_DESTROY_FAILED   MAKE_DDHRESULT(722)\n#define D3DERR_TEXTURE_LOCK_FAILED  MAKE_DDHRESULT(723)\n#define D3DERR_TEXTURE_UNLOCK_FAILED    MAKE_DDHRESULT(724)\n#define D3DERR_TEXTURE_LOAD_FAILED  MAKE_DDHRESULT(725)\n#define D3DERR_TEXTURE_SWAP_FAILED  MAKE_DDHRESULT(726)\n#define D3DERR_TEXTURE_LOCKED       MAKE_DDHRESULT(727)\n#define D3DERR_TEXTURE_NOT_LOCKED   MAKE_DDHRESULT(728)\n#define D3DERR_TEXTURE_GETSURF_FAILED   MAKE_DDHRESULT(729)\n\n#define D3DERR_MATRIX_CREATE_FAILED MAKE_DDHRESULT(730)\n#define D3DERR_MATRIX_DESTROY_FAILED    MAKE_DDHRESULT(731)\n#define D3DERR_MATRIX_SETDATA_FAILED    MAKE_DDHRESULT(732)\n#define D3DERR_MATRIX_GETDATA_FAILED    MAKE_DDHRESULT(733)\n#define D3DERR_SETVIEWPORTDATA_FAILED   MAKE_DDHRESULT(734)\n\n#if(DIRECT3D_VERSION >= 0x0500)\n#define D3DERR_INVALIDCURRENTVIEWPORT   MAKE_DDHRESULT(735)\n#define D3DERR_INVALIDPRIMITIVETYPE     MAKE_DDHRESULT(736)\n#define D3DERR_INVALIDVERTEXTYPE        MAKE_DDHRESULT(737)\n#define D3DERR_TEXTURE_BADSIZE          MAKE_DDHRESULT(738)\n#define D3DERR_INVALIDRAMPTEXTURE       MAKE_DDHRESULT(739)\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#define D3DERR_MATERIAL_CREATE_FAILED   MAKE_DDHRESULT(740)\n#define D3DERR_MATERIAL_DESTROY_FAILED  MAKE_DDHRESULT(741)\n#define D3DERR_MATERIAL_SETDATA_FAILED  MAKE_DDHRESULT(742)\n#define D3DERR_MATERIAL_GETDATA_FAILED  MAKE_DDHRESULT(743)\n\n#if(DIRECT3D_VERSION >= 0x0500)\n#define D3DERR_INVALIDPALETTE           MAKE_DDHRESULT(744)\n\n#define D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY MAKE_DDHRESULT(745)\n#define D3DERR_ZBUFF_NEEDS_VIDEOMEMORY  MAKE_DDHRESULT(746)\n#define D3DERR_SURFACENOTINVIDMEM       MAKE_DDHRESULT(747)\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#define D3DERR_LIGHT_SET_FAILED     MAKE_DDHRESULT(750)\n#if(DIRECT3D_VERSION >= 0x0500)\n#define D3DERR_LIGHTHASVIEWPORT     MAKE_DDHRESULT(751)\n#define D3DERR_LIGHTNOTINTHISVIEWPORT           MAKE_DDHRESULT(752)\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#define D3DERR_SCENE_IN_SCENE       MAKE_DDHRESULT(760)\n#define D3DERR_SCENE_NOT_IN_SCENE   MAKE_DDHRESULT(761)\n#define D3DERR_SCENE_BEGIN_FAILED   MAKE_DDHRESULT(762)\n#define D3DERR_SCENE_END_FAILED     MAKE_DDHRESULT(763)\n\n#if(DIRECT3D_VERSION >= 0x0500)\n#define D3DERR_INBEGIN                  MAKE_DDHRESULT(770)\n#define D3DERR_NOTINBEGIN               MAKE_DDHRESULT(771)\n#define D3DERR_NOVIEWPORTS              MAKE_DDHRESULT(772)\n#define D3DERR_VIEWPORTDATANOTSET       MAKE_DDHRESULT(773)\n#define D3DERR_VIEWPORTHASNODEVICE      MAKE_DDHRESULT(774)\n#define D3DERR_NOCURRENTVIEWPORT        MAKE_DDHRESULT(775)\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#if(DIRECT3D_VERSION >= 0x0600)\n#define D3DERR_INVALIDVERTEXFORMAT              MAKE_DDHRESULT(2048)\n\n/*\n * Attempted to CreateTexture on a surface that had a color key\n */\n#define D3DERR_COLORKEYATTACHED                 MAKE_DDHRESULT(2050)\n\n#define D3DERR_VERTEXBUFFEROPTIMIZED            MAKE_DDHRESULT(2060)\n#define D3DERR_VBUF_CREATE_FAILED               MAKE_DDHRESULT(2061)\n#define D3DERR_VERTEXBUFFERLOCKED               MAKE_DDHRESULT(2062)\n#define D3DERR_VERTEXBUFFERUNLOCKFAILED         MAKE_DDHRESULT(2063)\n\n#define D3DERR_ZBUFFER_NOTPRESENT               MAKE_DDHRESULT(2070)\n#define D3DERR_STENCILBUFFER_NOTPRESENT         MAKE_DDHRESULT(2071)\n\n#define D3DERR_WRONGTEXTUREFORMAT               MAKE_DDHRESULT(2072)\n#define D3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_DDHRESULT(2073)\n#define D3DERR_UNSUPPORTEDCOLORARG              MAKE_DDHRESULT(2074)\n#define D3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_DDHRESULT(2075)\n#define D3DERR_UNSUPPORTEDALPHAARG              MAKE_DDHRESULT(2076)\n#define D3DERR_TOOMANYOPERATIONS                MAKE_DDHRESULT(2077)\n#define D3DERR_CONFLICTINGTEXTUREFILTER         MAKE_DDHRESULT(2078)\n#define D3DERR_UNSUPPORTEDFACTORVALUE           MAKE_DDHRESULT(2079)\n#define D3DERR_CONFLICTINGRENDERSTATE           MAKE_DDHRESULT(2081)\n#define D3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_DDHRESULT(2082)\n#define D3DERR_TOOMANYPRIMITIVES                MAKE_DDHRESULT(2083)\n#define D3DERR_INVALIDMATRIX                    MAKE_DDHRESULT(2084)\n#define D3DERR_TOOMANYVERTICES                  MAKE_DDHRESULT(2085)\n#define D3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_DDHRESULT(2086)\n\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n#if(DIRECT3D_VERSION >= 0x0700)\n#define D3DERR_INVALIDSTATEBLOCK        MAKE_DDHRESULT(2100)\n#define D3DERR_INBEGINSTATEBLOCK        MAKE_DDHRESULT(2101)\n#define D3DERR_NOTINBEGINSTATEBLOCK     MAKE_DDHRESULT(2102)\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n\n#ifdef __cplusplus\n};\n#endif\n\n#endif /* (DIRECT3D_VERSION < 0x0800) */\n#endif /* _D3D_H_ */\n\n"
  },
  {
    "path": "Include/d3d10misc.h",
    "content": "//////////////////////////////////////////////////////////////////////////////\n//\n//  Copyright (c) Microsoft Corporation.  All rights reserved.\n//\n//  File:       D3D10Misc.h\n//  Content:    D3D10 Device Creation APIs\n//\n//////////////////////////////////////////////////////////////////////////////\n\n#ifndef __D3D10MISC_H__\n#define __D3D10MISC_H__\n\n#include \"d3d10.h\"\n\n// ID3D10Blob has been made version-neutral and moved to d3dcommon.h.\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif //__cplusplus\n\n///////////////////////////////////////////////////////////////////////////\n// D3D10_DRIVER_TYPE\n// ----------------\n//\n// This identifier is used to determine the implementation of Direct3D10\n// to be used.\n//\n// Pass one of these values to D3D10CreateDevice\n//\n///////////////////////////////////////////////////////////////////////////\ntypedef enum D3D10_DRIVER_TYPE\n{\n    D3D10_DRIVER_TYPE_HARDWARE  = 0,\n    D3D10_DRIVER_TYPE_REFERENCE = 1,\n    D3D10_DRIVER_TYPE_NULL      = 2,\n    D3D10_DRIVER_TYPE_SOFTWARE  = 3,\n    D3D10_DRIVER_TYPE_WARP      = 5,\n} D3D10_DRIVER_TYPE;\n\nDEFINE_GUID(GUID_DeviceType, \n0xd722fb4d, 0x7a68, 0x437a, 0xb2, 0x0c, 0x58, 0x04, 0xee, 0x24, 0x94, 0xa6);\n\n///////////////////////////////////////////////////////////////////////////\n// D3D10CreateDevice\n// ------------------\n//\n// pAdapter\n//      If NULL, D3D10CreateDevice will choose the primary adapter and \n//      create a new instance from a temporarily created IDXGIFactory.\n//      If non-NULL, D3D10CreateDevice will register the appropriate \n//      device, if necessary (via IDXGIAdapter::RegisterDrver), before \n//      creating the device.\n// DriverType\n//      Specifies the driver type to be created: hardware, reference or \n//      null.\n// Software\n//      HMODULE of a DLL implementing a software rasterizer. Must be NULL for\n//      non-Software driver types.\n// Flags\n//      Any of those documented for D3D10CreateDevice.\n// SDKVersion\n//      SDK version. Use the D3D10_SDK_VERSION macro.\n// ppDevice\n//      Pointer to returned interface.\n//\n// Return Values\n//  Any of those documented for \n//          CreateDXGIFactory\n//          IDXGIFactory::EnumAdapters\n//          IDXGIAdapter::RegisterDriver\n//          D3D10CreateDevice\n//      \n///////////////////////////////////////////////////////////////////////////\nHRESULT WINAPI D3D10CreateDevice(\n    IDXGIAdapter *pAdapter,\n    D3D10_DRIVER_TYPE DriverType,\n    HMODULE Software,\n    UINT Flags,\n    UINT SDKVersion,\n    ID3D10Device **ppDevice);\n\n///////////////////////////////////////////////////////////////////////////\n// D3D10CreateDeviceAndSwapChain\n// ------------------------------\n//\n// ppAdapter\n//      If NULL, D3D10CreateDevice will choose the primary adapter and \n//      create a new instance from a temporarily created IDXGIFactory.\n//      If non-NULL, D3D10CreateDevice will register the appropriate \n//      device, if necessary (via IDXGIAdapter::RegisterDrver), before \n//      creating the device.\n// DriverType\n//      Specifies the driver type to be created: hardware, reference or \n//      null.\n// Software\n//      HMODULE of a DLL implementing a software rasterizer. Must be NULL for\n//      non-Software driver types.\n// Flags\n//      Any of those documented for D3D10CreateDevice.\n// SDKVersion\n//      SDK version. Use the D3D10_SDK_VERSION macro.\n// pSwapChainDesc\n//      Swap chain description, may be NULL.\n// ppSwapChain\n//      Pointer to returned interface. May be NULL.\n// ppDevice\n//      Pointer to returned interface.\n//\n// Return Values\n//  Any of those documented for \n//          CreateDXGIFactory\n//          IDXGIFactory::EnumAdapters\n//          IDXGIAdapter::RegisterDriver\n//          D3D10CreateDevice\n//          IDXGIFactory::CreateSwapChain\n//      \n///////////////////////////////////////////////////////////////////////////\nHRESULT WINAPI D3D10CreateDeviceAndSwapChain(\n    IDXGIAdapter *pAdapter,\n    D3D10_DRIVER_TYPE DriverType,\n    HMODULE Software,\n    UINT Flags,\n    UINT SDKVersion,\n    DXGI_SWAP_CHAIN_DESC *pSwapChainDesc,\n    IDXGISwapChain **ppSwapChain,    \n    ID3D10Device **ppDevice);\n\n\n///////////////////////////////////////////////////////////////////////////\n// D3D10CreateBlob:\n// -----------------\n// Creates a Buffer of n Bytes\n//////////////////////////////////////////////////////////////////////////\n\nHRESULT WINAPI D3D10CreateBlob(SIZE_T NumBytes, LPD3D10BLOB *ppBuffer);\n\n#ifdef __cplusplus\n}\n#endif //__cplusplus\n\n#endif //__D3D10EFFECT_H__\n\n\n"
  },
  {
    "path": "Include/d3d10sdklayers.h",
    "content": "\n\n/* this ALWAYS GENERATED file contains the definitions for the interfaces */\n\n\n /* File created by MIDL compiler version 7.00.0555 */\n/* Compiler settings for d3d10sdklayers.idl:\n    Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555 \n    protocol : all , ms_ext, c_ext, robust\n    error checks: allocation ref bounds_check enum stub_data \n    VC __declspec() decoration level: \n         __declspec(uuid()), __declspec(selectany), __declspec(novtable)\n         DECLSPEC_UUID(), MIDL_INTERFACE()\n*/\n/* @@MIDL_FILE_HEADING(  ) */\n\n#pragma warning( disable: 4049 )  /* more than 64k source lines */\n\n\n/* verify that the <rpcndr.h> version is high enough to compile this file*/\n#ifndef __REQUIRED_RPCNDR_H_VERSION__\n#define __REQUIRED_RPCNDR_H_VERSION__ 475\n#endif\n\n/* verify that the <rpcsal.h> version is high enough to compile this file*/\n#ifndef __REQUIRED_RPCSAL_H_VERSION__\n#define __REQUIRED_RPCSAL_H_VERSION__ 100\n#endif\n\n#include \"rpc.h\"\n#include \"rpcndr.h\"\n\n#ifndef __RPCNDR_H_VERSION__\n#error this stub requires an updated version of <rpcndr.h>\n#endif // __RPCNDR_H_VERSION__\n\n#ifndef COM_NO_WINDOWS_H\n#include \"windows.h\"\n#include \"ole2.h\"\n#endif /*COM_NO_WINDOWS_H*/\n\n#ifndef __d3d10sdklayers_h__\n#define __d3d10sdklayers_h__\n\n#if defined(_MSC_VER) && (_MSC_VER >= 1020)\n#pragma once\n#endif\n\n/* Forward Declarations */ \n\n#ifndef __ID3D10Debug_FWD_DEFINED__\n#define __ID3D10Debug_FWD_DEFINED__\ntypedef interface ID3D10Debug ID3D10Debug;\n#endif \t/* __ID3D10Debug_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10SwitchToRef_FWD_DEFINED__\n#define __ID3D10SwitchToRef_FWD_DEFINED__\ntypedef interface ID3D10SwitchToRef ID3D10SwitchToRef;\n#endif \t/* __ID3D10SwitchToRef_FWD_DEFINED__ */\n\n\n#ifndef __ID3D10InfoQueue_FWD_DEFINED__\n#define __ID3D10InfoQueue_FWD_DEFINED__\ntypedef interface ID3D10InfoQueue ID3D10InfoQueue;\n#endif \t/* __ID3D10InfoQueue_FWD_DEFINED__ */\n\n\n/* header files for imported files */\n#include \"oaidl.h\"\n#include \"ocidl.h\"\n#include \"dxgi.h\"\n\n#ifdef __cplusplus\nextern \"C\"{\n#endif \n\n\n/* interface __MIDL_itf_d3d10sdklayers_0000_0000 */\n/* [local] */ \n\n#define\tD3D10_SDK_LAYERS_VERSION\t( 11 )\n\n#define\tD3D10_DEBUG_FEATURE_FLUSH_PER_RENDER_OP\t( 0x1 )\n\n#define\tD3D10_DEBUG_FEATURE_FINISH_PER_RENDER_OP\t( 0x2 )\n\n#define\tD3D10_DEBUG_FEATURE_PRESENT_PER_RENDER_OP\t( 0x4 )\n\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10sdklayers_0000_0000_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10sdklayers_0000_0000_v0_0_s_ifspec;\n\n#ifndef __ID3D10Debug_INTERFACE_DEFINED__\n#define __ID3D10Debug_INTERFACE_DEFINED__\n\n/* interface ID3D10Debug */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10Debug;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4E01-342C-4106-A19F-4F2704F689F0\")\n    ID3D10Debug : public IUnknown\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE SetFeatureMask( \n            UINT Mask) = 0;\n        \n        virtual UINT STDMETHODCALLTYPE GetFeatureMask( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetPresentPerRenderOpDelay( \n            UINT Milliseconds) = 0;\n        \n        virtual UINT STDMETHODCALLTYPE GetPresentPerRenderOpDelay( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetSwapChain( \n            /* [annotation] */ \n            __in_opt  IDXGISwapChain *pSwapChain) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetSwapChain( \n            /* [annotation] */ \n            __out  IDXGISwapChain **ppSwapChain) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE Validate( void) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10DebugVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10Debug * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10Debug * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10Debug * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetFeatureMask )( \n            ID3D10Debug * This,\n            UINT Mask);\n        \n        UINT ( STDMETHODCALLTYPE *GetFeatureMask )( \n            ID3D10Debug * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetPresentPerRenderOpDelay )( \n            ID3D10Debug * This,\n            UINT Milliseconds);\n        \n        UINT ( STDMETHODCALLTYPE *GetPresentPerRenderOpDelay )( \n            ID3D10Debug * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetSwapChain )( \n            ID3D10Debug * This,\n            /* [annotation] */ \n            __in_opt  IDXGISwapChain *pSwapChain);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetSwapChain )( \n            ID3D10Debug * This,\n            /* [annotation] */ \n            __out  IDXGISwapChain **ppSwapChain);\n        \n        HRESULT ( STDMETHODCALLTYPE *Validate )( \n            ID3D10Debug * This);\n        \n        END_INTERFACE\n    } ID3D10DebugVtbl;\n\n    interface ID3D10Debug\n    {\n        CONST_VTBL struct ID3D10DebugVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10Debug_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10Debug_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10Debug_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10Debug_SetFeatureMask(This,Mask)\t\\\n    ( (This)->lpVtbl -> SetFeatureMask(This,Mask) ) \n\n#define ID3D10Debug_GetFeatureMask(This)\t\\\n    ( (This)->lpVtbl -> GetFeatureMask(This) ) \n\n#define ID3D10Debug_SetPresentPerRenderOpDelay(This,Milliseconds)\t\\\n    ( (This)->lpVtbl -> SetPresentPerRenderOpDelay(This,Milliseconds) ) \n\n#define ID3D10Debug_GetPresentPerRenderOpDelay(This)\t\\\n    ( (This)->lpVtbl -> GetPresentPerRenderOpDelay(This) ) \n\n#define ID3D10Debug_SetSwapChain(This,pSwapChain)\t\\\n    ( (This)->lpVtbl -> SetSwapChain(This,pSwapChain) ) \n\n#define ID3D10Debug_GetSwapChain(This,ppSwapChain)\t\\\n    ( (This)->lpVtbl -> GetSwapChain(This,ppSwapChain) ) \n\n#define ID3D10Debug_Validate(This)\t\\\n    ( (This)->lpVtbl -> Validate(This) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10Debug_INTERFACE_DEFINED__ */\n\n\n#ifndef __ID3D10SwitchToRef_INTERFACE_DEFINED__\n#define __ID3D10SwitchToRef_INTERFACE_DEFINED__\n\n/* interface ID3D10SwitchToRef */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10SwitchToRef;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"9B7E4E02-342C-4106-A19F-4F2704F689F0\")\n    ID3D10SwitchToRef : public IUnknown\n    {\n    public:\n        virtual BOOL STDMETHODCALLTYPE SetUseRef( \n            BOOL UseRef) = 0;\n        \n        virtual BOOL STDMETHODCALLTYPE GetUseRef( void) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10SwitchToRefVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10SwitchToRef * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10SwitchToRef * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10SwitchToRef * This);\n        \n        BOOL ( STDMETHODCALLTYPE *SetUseRef )( \n            ID3D10SwitchToRef * This,\n            BOOL UseRef);\n        \n        BOOL ( STDMETHODCALLTYPE *GetUseRef )( \n            ID3D10SwitchToRef * This);\n        \n        END_INTERFACE\n    } ID3D10SwitchToRefVtbl;\n\n    interface ID3D10SwitchToRef\n    {\n        CONST_VTBL struct ID3D10SwitchToRefVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10SwitchToRef_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10SwitchToRef_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10SwitchToRef_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10SwitchToRef_SetUseRef(This,UseRef)\t\\\n    ( (This)->lpVtbl -> SetUseRef(This,UseRef) ) \n\n#define ID3D10SwitchToRef_GetUseRef(This)\t\\\n    ( (This)->lpVtbl -> GetUseRef(This) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10SwitchToRef_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10sdklayers_0000_0002 */\n/* [local] */ \n\ntypedef \nenum D3D10_MESSAGE_CATEGORY\n    {\tD3D10_MESSAGE_CATEGORY_APPLICATION_DEFINED\t= 0,\n\tD3D10_MESSAGE_CATEGORY_MISCELLANEOUS\t= ( D3D10_MESSAGE_CATEGORY_APPLICATION_DEFINED + 1 ) ,\n\tD3D10_MESSAGE_CATEGORY_INITIALIZATION\t= ( D3D10_MESSAGE_CATEGORY_MISCELLANEOUS + 1 ) ,\n\tD3D10_MESSAGE_CATEGORY_CLEANUP\t= ( D3D10_MESSAGE_CATEGORY_INITIALIZATION + 1 ) ,\n\tD3D10_MESSAGE_CATEGORY_COMPILATION\t= ( D3D10_MESSAGE_CATEGORY_CLEANUP + 1 ) ,\n\tD3D10_MESSAGE_CATEGORY_STATE_CREATION\t= ( D3D10_MESSAGE_CATEGORY_COMPILATION + 1 ) ,\n\tD3D10_MESSAGE_CATEGORY_STATE_SETTING\t= ( D3D10_MESSAGE_CATEGORY_STATE_CREATION + 1 ) ,\n\tD3D10_MESSAGE_CATEGORY_STATE_GETTING\t= ( D3D10_MESSAGE_CATEGORY_STATE_SETTING + 1 ) ,\n\tD3D10_MESSAGE_CATEGORY_RESOURCE_MANIPULATION\t= ( D3D10_MESSAGE_CATEGORY_STATE_GETTING + 1 ) ,\n\tD3D10_MESSAGE_CATEGORY_EXECUTION\t= ( D3D10_MESSAGE_CATEGORY_RESOURCE_MANIPULATION + 1 ) \n    } \tD3D10_MESSAGE_CATEGORY;\n\ntypedef \nenum D3D10_MESSAGE_SEVERITY\n    {\tD3D10_MESSAGE_SEVERITY_CORRUPTION\t= 0,\n\tD3D10_MESSAGE_SEVERITY_ERROR\t= ( D3D10_MESSAGE_SEVERITY_CORRUPTION + 1 ) ,\n\tD3D10_MESSAGE_SEVERITY_WARNING\t= ( D3D10_MESSAGE_SEVERITY_ERROR + 1 ) ,\n\tD3D10_MESSAGE_SEVERITY_INFO\t= ( D3D10_MESSAGE_SEVERITY_WARNING + 1 ) \n    } \tD3D10_MESSAGE_SEVERITY;\n\ntypedef \nenum D3D10_MESSAGE_ID\n    {\tD3D10_MESSAGE_ID_UNKNOWN\t= 0,\n\tD3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD\t= ( D3D10_MESSAGE_ID_UNKNOWN + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD\t= ( D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD\t= ( D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD\t= ( D3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD\t= ( D3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD\t= ( D3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD\t= ( D3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD\t= ( D3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD\t= ( D3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD\t= ( D3D10_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD + 1 ) ,\n\tD3D10_MESSAGE_ID_STRING_FROM_APPLICATION\t= ( D3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_THIS\t= ( D3D10_MESSAGE_ID_STRING_FROM_APPLICATION + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_PARAMETER1\t= ( D3D10_MESSAGE_ID_CORRUPTED_THIS + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_PARAMETER2\t= ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER1 + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_PARAMETER3\t= ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER2 + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_PARAMETER4\t= ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER3 + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_PARAMETER5\t= ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER4 + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_PARAMETER6\t= ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER5 + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_PARAMETER7\t= ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER6 + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_PARAMETER8\t= ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER7 + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_PARAMETER9\t= ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER8 + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_PARAMETER10\t= ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER9 + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_PARAMETER11\t= ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER10 + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_PARAMETER12\t= ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER11 + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_PARAMETER13\t= ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER12 + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_PARAMETER14\t= ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER13 + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_PARAMETER15\t= ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER14 + 1 ) ,\n\tD3D10_MESSAGE_ID_CORRUPTED_MULTITHREADING\t= ( D3D10_MESSAGE_ID_CORRUPTED_PARAMETER15 + 1 ) ,\n\tD3D10_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY\t= ( D3D10_MESSAGE_ID_CORRUPTED_MULTITHREADING + 1 ) ,\n\tD3D10_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY + 1 ) ,\n\tD3D10_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT\t= ( D3D10_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_GETPRIVATEDATA_MOREDATA\t= ( D3D10_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT + 1 ) ,\n\tD3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA\t= ( D3D10_MESSAGE_ID_GETPRIVATEDATA_MOREDATA + 1 ) ,\n\tD3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN\t= ( D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA + 1 ) ,\n\tD3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS\t= ( D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN + 1 ) ,\n\tD3D10_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS\t= ( D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY\t= ( D3D10_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT\t= ( D3D10_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_NULLDESC\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_NULLDESC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT\t= ( D3D10_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_NULLDESC\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_NULLDESC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT\t= ( D3D10_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_NULLDESC\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_NULLDESC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT\t= ( D3D10_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_NULLDESC\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_NULLDESC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT\t= ( D3D10_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC\t= ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT\t= ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS\t= ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE\t= ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS\t= ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN\t= ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN\t= ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT\t= ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT\t= ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC\t= ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT\t= ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS\t= ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE\t= ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS\t= ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN\t= ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN\t= ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT\t= ( D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE\t= ( D3D10_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE\t= ( D3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY\t= ( D3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE\t= ( D3D10_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE\t= ( D3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE\t= ( D3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE\t= ( D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP\t= ( D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS\t= ( D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS\t= ( D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC\t= ( D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK\t= ( D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND\t= ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP\t= ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA\t= ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA\t= ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA\t= ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK\t= ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS\t= ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC\t= ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER\t= ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS\t= ( D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG\t= ( D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC\t= ( D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED\t= ( D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED\t= ( D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED + 1 ) ,\n\tD3D10_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER\t= ( D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE\t= ( D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE + 1 ) ,\n\tD3D10_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER\t= ( D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID\t= ( D3D10_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE\t= ( D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED\t= ( D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED + 1 ) ,\n\tD3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER\t= ( D3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER\t= ( D3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER\t= ( D3D10_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED\t= ( D3D10_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED + 1 ) ,\n\tD3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER\t= ( D3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT\t= ( D3D10_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR\t= ( D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT + 1 ) ,\n\tD3D10_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH\t= ( D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR + 1 ) ,\n\tD3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH\t= ( D3D10_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH + 1 ) ,\n\tD3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID\t= ( D3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY\t= ( D3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY\t= ( D3D10_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID\t= ( D3D10_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY + 1 ) ,\n\tD3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE\t= ( D3D10_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID + 1 ) ,\n\tD3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE\t= ( D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX\t= ( D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE\t= ( D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX + 1 ) ,\n\tD3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE\t= ( D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE\t= ( D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE + 1 ) ,\n\tD3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE\t= ( D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE + 1 ) ,\n\tD3D10_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE\t= ( D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE\t= ( D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE + 1 ) ,\n\tD3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE\t= ( D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE + 1 ) ,\n\tD3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX\t= ( D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE\t= ( D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID\t= ( D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID\t= ( D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID\t= ( D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID\t= ( D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID\t= ( D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID + 1 ) ,\n\tD3D10_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE\t= ( D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID + 1 ) ,\n\tD3D10_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS\t= ( D3D10_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE + 1 ) ,\n\tD3D10_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED\t= ( D3D10_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN\t= ( D3D10_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED + 1 ) ,\n\tD3D10_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED\t= ( D3D10_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE\t= ( D3D10_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE\t= ( D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS\t= ( D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED\t= ( D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN\t= ( D3D10_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE\t= ( D3D10_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED\t= ( D3D10_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE\t= ( D3D10_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE\t= ( D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS\t= ( D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED\t= ( D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN\t= ( D3D10_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE\t= ( D3D10_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED\t= ( D3D10_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE\t= ( D3D10_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE\t= ( D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS\t= ( D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED\t= ( D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN\t= ( D3D10_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE\t= ( D3D10_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED\t= ( D3D10_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED\t= ( D3D10_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED + 1 ) ,\n\tD3D10_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED\t= ( D3D10_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED + 1 ) ,\n\tD3D10_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS\t= ( D3D10_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED + 1 ) ,\n\tD3D10_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN\t= ( D3D10_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN\t= ( D3D10_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE\t= ( D3D10_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_REF_THREADING_MODE\t= ( D3D10_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE + 1 ) ,\n\tD3D10_MESSAGE_ID_REF_UMDRIVER_EXCEPTION\t= ( D3D10_MESSAGE_ID_REF_THREADING_MODE + 1 ) ,\n\tD3D10_MESSAGE_ID_REF_KMDRIVER_EXCEPTION\t= ( D3D10_MESSAGE_ID_REF_UMDRIVER_EXCEPTION + 1 ) ,\n\tD3D10_MESSAGE_ID_REF_HARDWARE_EXCEPTION\t= ( D3D10_MESSAGE_ID_REF_KMDRIVER_EXCEPTION + 1 ) ,\n\tD3D10_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE\t= ( D3D10_MESSAGE_ID_REF_HARDWARE_EXCEPTION + 1 ) ,\n\tD3D10_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER\t= ( D3D10_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE + 1 ) ,\n\tD3D10_MESSAGE_ID_REF_OUT_OF_MEMORY\t= ( D3D10_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER + 1 ) ,\n\tD3D10_MESSAGE_ID_REF_INFO\t= ( D3D10_MESSAGE_ID_REF_OUT_OF_MEMORY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW\t= ( D3D10_MESSAGE_ID_REF_INFO + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW\t= ( D3D10_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW\t= ( D3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW\t= ( D3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW\t= ( D3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET\t= ( D3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX\t= ( D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE\t= ( D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK\t= ( D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE\t= ( D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS\t= ( D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET\t= ( D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0 + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT\t= ( D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT\t= ( D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN\t= ( D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN\t= ( D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN\t= ( D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET\t= ( D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH\t= ( D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC + 1 ) ,\n\tD3D10_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW\t= ( D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS\t= ( D3D10_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH\t= ( D3D10_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH + 1 ) ,\n\tD3D10_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH + 1 ) ,\n\tD3D10_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY\t= ( D3D10_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN\t= ( D3D10_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN\t= ( D3D10_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER\t= ( D3D10_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED\t= ( D3D10_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER\t= ( D3D10_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN\t= ( D3D10_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN\t= ( D3D10_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATECOUNTER_NULLDESC\t= ( D3D10_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN + 1 ) ,\n\tD3D10_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER\t= ( D3D10_MESSAGE_ID_CREATECOUNTER_NULLDESC + 1 ) ,\n\tD3D10_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER\t= ( D3D10_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER + 1 ) ,\n\tD3D10_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE\t= ( D3D10_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + 1 ) ,\n\tD3D10_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED\t= ( D3D10_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE + 1 ) ,\n\tD3D10_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION\t= ( D3D10_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_QUERY_BEGIN_DUPLICATE\t= ( D3D10_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION + 1 ) ,\n\tD3D10_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS\t= ( D3D10_MESSAGE_ID_QUERY_BEGIN_DUPLICATE + 1 ) ,\n\tD3D10_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION\t= ( D3D10_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS + 1 ) ,\n\tD3D10_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS\t= ( D3D10_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION + 1 ) ,\n\tD3D10_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN\t= ( D3D10_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS + 1 ) ,\n\tD3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE\t= ( D3D10_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN + 1 ) ,\n\tD3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS\t= ( D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE + 1 ) ,\n\tD3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL\t= ( D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH\t= ( D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE\t= ( D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT\t= ( D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT + 1 ) ,\n\tD3D10_MESSAGE_ID_D3D10_MESSAGES_END\t= ( D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH + 1 ) ,\n\tD3D10_MESSAGE_ID_D3D10L9_MESSAGES_START\t= 0x100000,\n\tD3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED\t= ( D3D10_MESSAGE_ID_D3D10L9_MESSAGES_START + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED\t= ( D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT\t= ( D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY + 1 ) ,\n\tD3D10_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE + 1 ) ,\n\tD3D10_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS\t= ( D3D10_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS\t= ( D3D10_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS\t= ( D3D10_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND\t= ( D3D10_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D\t= ( D3D10_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE\t= ( D3D10_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE\t= ( D3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE + 1 ) ,\n\tD3D10_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS\t= ( D3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS\t= ( D3D10_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS + 1 ) ,\n\tD3D10_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX\t= ( D3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS\t= ( D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED\t= ( D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS\t= ( D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY\t= ( D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS + 1 ) ,\n\tD3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK\t= ( D3D10_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY + 1 ) ,\n\tD3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK\t= ( D3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT\t= ( D3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE\t= ( D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE\t= ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE + 1 ) ,\n\tD3D10_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE\t= ( D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD\t= ( D3D10_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL\t= ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES\t= ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET\t= ( D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER\t= ( D3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE\t= ( D3D10_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE\t= ( D3D10_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE\t= ( D3D10_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS\t= ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT\t= ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS\t= ( D3D10_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES\t= ( D3D10_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED\t= ( D3D10_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES + 1 ) ,\n\tD3D10_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED\t= ( D3D10_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED + 1 ) ,\n\tD3D10_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED\t= ( D3D10_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED\t= ( D3D10_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED\t= ( D3D10_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND\t= ( D3D10_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND\t= ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED\t= ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE\t= ( D3D10_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE + 1 ) ,\n\tD3D10_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3\t= ( D3D10_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED\t= ( D3D10_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3 + 1 ) ,\n\tD3D10_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO\t= ( D3D10_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION\t= ( D3D10_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED\t= ( D3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION + 1 ) ,\n\tD3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR\t= ( D3D10_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA\t= ( D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP\t= ( D3D10_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA + 1 ) ,\n\tD3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED\t= ( D3D10_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP + 1 ) ,\n\tD3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT\t= ( D3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED + 1 ) ,\n\tD3D10_MESSAGE_ID_D3D10L9_MESSAGES_END\t= ( D3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT + 1 ) \n    } \tD3D10_MESSAGE_ID;\n\ntypedef struct D3D10_MESSAGE\n    {\n    D3D10_MESSAGE_CATEGORY Category;\n    D3D10_MESSAGE_SEVERITY Severity;\n    D3D10_MESSAGE_ID ID;\n    const char *pDescription;\n    SIZE_T DescriptionByteLength;\n    } \tD3D10_MESSAGE;\n\ntypedef struct D3D10_INFO_QUEUE_FILTER_DESC\n    {\n    UINT NumCategories;\n    D3D10_MESSAGE_CATEGORY *pCategoryList;\n    UINT NumSeverities;\n    D3D10_MESSAGE_SEVERITY *pSeverityList;\n    UINT NumIDs;\n    D3D10_MESSAGE_ID *pIDList;\n    } \tD3D10_INFO_QUEUE_FILTER_DESC;\n\ntypedef struct D3D10_INFO_QUEUE_FILTER\n    {\n    D3D10_INFO_QUEUE_FILTER_DESC AllowList;\n    D3D10_INFO_QUEUE_FILTER_DESC DenyList;\n    } \tD3D10_INFO_QUEUE_FILTER;\n\n#define D3D10_INFO_QUEUE_DEFAULT_MESSAGE_COUNT_LIMIT 1024\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10sdklayers_0000_0002_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10sdklayers_0000_0002_v0_0_s_ifspec;\n\n#ifndef __ID3D10InfoQueue_INTERFACE_DEFINED__\n#define __ID3D10InfoQueue_INTERFACE_DEFINED__\n\n/* interface ID3D10InfoQueue */\n/* [unique][local][object][uuid] */ \n\n\nEXTERN_C const IID IID_ID3D10InfoQueue;\n\n#if defined(__cplusplus) && !defined(CINTERFACE)\n    \n    MIDL_INTERFACE(\"1b940b17-2642-4d1f-ab1f-b99bad0c395f\")\n    ID3D10InfoQueue : public IUnknown\n    {\n    public:\n        virtual HRESULT STDMETHODCALLTYPE SetMessageCountLimit( \n            /* [annotation] */ \n            __in  UINT64 MessageCountLimit) = 0;\n        \n        virtual void STDMETHODCALLTYPE ClearStoredMessages( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetMessage( \n            /* [annotation] */ \n            __in  UINT64 MessageIndex,\n            /* [annotation] */ \n            __out_bcount_opt(*pMessageByteLength)  D3D10_MESSAGE *pMessage,\n            /* [annotation] */ \n            __inout  SIZE_T *pMessageByteLength) = 0;\n        \n        virtual UINT64 STDMETHODCALLTYPE GetNumMessagesAllowedByStorageFilter( void) = 0;\n        \n        virtual UINT64 STDMETHODCALLTYPE GetNumMessagesDeniedByStorageFilter( void) = 0;\n        \n        virtual UINT64 STDMETHODCALLTYPE GetNumStoredMessages( void) = 0;\n        \n        virtual UINT64 STDMETHODCALLTYPE GetNumStoredMessagesAllowedByRetrievalFilter( void) = 0;\n        \n        virtual UINT64 STDMETHODCALLTYPE GetNumMessagesDiscardedByMessageCountLimit( void) = 0;\n        \n        virtual UINT64 STDMETHODCALLTYPE GetMessageCountLimit( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE AddStorageFilterEntries( \n            /* [annotation] */ \n            __in  D3D10_INFO_QUEUE_FILTER *pFilter) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetStorageFilter( \n            /* [annotation] */ \n            __out_bcount_opt(*pFilterByteLength)  D3D10_INFO_QUEUE_FILTER *pFilter,\n            /* [annotation] */ \n            __inout  SIZE_T *pFilterByteLength) = 0;\n        \n        virtual void STDMETHODCALLTYPE ClearStorageFilter( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE PushEmptyStorageFilter( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE PushCopyOfStorageFilter( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE PushStorageFilter( \n            /* [annotation] */ \n            __in  D3D10_INFO_QUEUE_FILTER *pFilter) = 0;\n        \n        virtual void STDMETHODCALLTYPE PopStorageFilter( void) = 0;\n        \n        virtual UINT STDMETHODCALLTYPE GetStorageFilterStackSize( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE AddRetrievalFilterEntries( \n            /* [annotation] */ \n            __in  D3D10_INFO_QUEUE_FILTER *pFilter) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE GetRetrievalFilter( \n            /* [annotation] */ \n            __out_bcount_opt(*pFilterByteLength)  D3D10_INFO_QUEUE_FILTER *pFilter,\n            /* [annotation] */ \n            __inout  SIZE_T *pFilterByteLength) = 0;\n        \n        virtual void STDMETHODCALLTYPE ClearRetrievalFilter( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE PushEmptyRetrievalFilter( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE PushCopyOfRetrievalFilter( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE PushRetrievalFilter( \n            /* [annotation] */ \n            __in  D3D10_INFO_QUEUE_FILTER *pFilter) = 0;\n        \n        virtual void STDMETHODCALLTYPE PopRetrievalFilter( void) = 0;\n        \n        virtual UINT STDMETHODCALLTYPE GetRetrievalFilterStackSize( void) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE AddMessage( \n            /* [annotation] */ \n            __in  D3D10_MESSAGE_CATEGORY Category,\n            /* [annotation] */ \n            __in  D3D10_MESSAGE_SEVERITY Severity,\n            /* [annotation] */ \n            __in  D3D10_MESSAGE_ID ID,\n            /* [annotation] */ \n            __in  LPCSTR pDescription) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE AddApplicationMessage( \n            /* [annotation] */ \n            __in  D3D10_MESSAGE_SEVERITY Severity,\n            /* [annotation] */ \n            __in  LPCSTR pDescription) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetBreakOnCategory( \n            /* [annotation] */ \n            __in  D3D10_MESSAGE_CATEGORY Category,\n            /* [annotation] */ \n            __in  BOOL bEnable) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetBreakOnSeverity( \n            /* [annotation] */ \n            __in  D3D10_MESSAGE_SEVERITY Severity,\n            /* [annotation] */ \n            __in  BOOL bEnable) = 0;\n        \n        virtual HRESULT STDMETHODCALLTYPE SetBreakOnID( \n            /* [annotation] */ \n            __in  D3D10_MESSAGE_ID ID,\n            /* [annotation] */ \n            __in  BOOL bEnable) = 0;\n        \n        virtual BOOL STDMETHODCALLTYPE GetBreakOnCategory( \n            /* [annotation] */ \n            __in  D3D10_MESSAGE_CATEGORY Category) = 0;\n        \n        virtual BOOL STDMETHODCALLTYPE GetBreakOnSeverity( \n            /* [annotation] */ \n            __in  D3D10_MESSAGE_SEVERITY Severity) = 0;\n        \n        virtual BOOL STDMETHODCALLTYPE GetBreakOnID( \n            /* [annotation] */ \n            __in  D3D10_MESSAGE_ID ID) = 0;\n        \n        virtual void STDMETHODCALLTYPE SetMuteDebugOutput( \n            /* [annotation] */ \n            __in  BOOL bMute) = 0;\n        \n        virtual BOOL STDMETHODCALLTYPE GetMuteDebugOutput( void) = 0;\n        \n    };\n    \n#else \t/* C style interface */\n\n    typedef struct ID3D10InfoQueueVtbl\n    {\n        BEGIN_INTERFACE\n        \n        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( \n            ID3D10InfoQueue * This,\n            /* [in] */ REFIID riid,\n            /* [annotation][iid_is][out] */ \n            __RPC__deref_out  void **ppvObject);\n        \n        ULONG ( STDMETHODCALLTYPE *AddRef )( \n            ID3D10InfoQueue * This);\n        \n        ULONG ( STDMETHODCALLTYPE *Release )( \n            ID3D10InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetMessageCountLimit )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __in  UINT64 MessageCountLimit);\n        \n        void ( STDMETHODCALLTYPE *ClearStoredMessages )( \n            ID3D10InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetMessage )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __in  UINT64 MessageIndex,\n            /* [annotation] */ \n            __out_bcount_opt(*pMessageByteLength)  D3D10_MESSAGE *pMessage,\n            /* [annotation] */ \n            __inout  SIZE_T *pMessageByteLength);\n        \n        UINT64 ( STDMETHODCALLTYPE *GetNumMessagesAllowedByStorageFilter )( \n            ID3D10InfoQueue * This);\n        \n        UINT64 ( STDMETHODCALLTYPE *GetNumMessagesDeniedByStorageFilter )( \n            ID3D10InfoQueue * This);\n        \n        UINT64 ( STDMETHODCALLTYPE *GetNumStoredMessages )( \n            ID3D10InfoQueue * This);\n        \n        UINT64 ( STDMETHODCALLTYPE *GetNumStoredMessagesAllowedByRetrievalFilter )( \n            ID3D10InfoQueue * This);\n        \n        UINT64 ( STDMETHODCALLTYPE *GetNumMessagesDiscardedByMessageCountLimit )( \n            ID3D10InfoQueue * This);\n        \n        UINT64 ( STDMETHODCALLTYPE *GetMessageCountLimit )( \n            ID3D10InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *AddStorageFilterEntries )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D10_INFO_QUEUE_FILTER *pFilter);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetStorageFilter )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __out_bcount_opt(*pFilterByteLength)  D3D10_INFO_QUEUE_FILTER *pFilter,\n            /* [annotation] */ \n            __inout  SIZE_T *pFilterByteLength);\n        \n        void ( STDMETHODCALLTYPE *ClearStorageFilter )( \n            ID3D10InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *PushEmptyStorageFilter )( \n            ID3D10InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *PushCopyOfStorageFilter )( \n            ID3D10InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *PushStorageFilter )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D10_INFO_QUEUE_FILTER *pFilter);\n        \n        void ( STDMETHODCALLTYPE *PopStorageFilter )( \n            ID3D10InfoQueue * This);\n        \n        UINT ( STDMETHODCALLTYPE *GetStorageFilterStackSize )( \n            ID3D10InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *AddRetrievalFilterEntries )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D10_INFO_QUEUE_FILTER *pFilter);\n        \n        HRESULT ( STDMETHODCALLTYPE *GetRetrievalFilter )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __out_bcount_opt(*pFilterByteLength)  D3D10_INFO_QUEUE_FILTER *pFilter,\n            /* [annotation] */ \n            __inout  SIZE_T *pFilterByteLength);\n        \n        void ( STDMETHODCALLTYPE *ClearRetrievalFilter )( \n            ID3D10InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *PushEmptyRetrievalFilter )( \n            ID3D10InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *PushCopyOfRetrievalFilter )( \n            ID3D10InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *PushRetrievalFilter )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D10_INFO_QUEUE_FILTER *pFilter);\n        \n        void ( STDMETHODCALLTYPE *PopRetrievalFilter )( \n            ID3D10InfoQueue * This);\n        \n        UINT ( STDMETHODCALLTYPE *GetRetrievalFilterStackSize )( \n            ID3D10InfoQueue * This);\n        \n        HRESULT ( STDMETHODCALLTYPE *AddMessage )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D10_MESSAGE_CATEGORY Category,\n            /* [annotation] */ \n            __in  D3D10_MESSAGE_SEVERITY Severity,\n            /* [annotation] */ \n            __in  D3D10_MESSAGE_ID ID,\n            /* [annotation] */ \n            __in  LPCSTR pDescription);\n        \n        HRESULT ( STDMETHODCALLTYPE *AddApplicationMessage )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D10_MESSAGE_SEVERITY Severity,\n            /* [annotation] */ \n            __in  LPCSTR pDescription);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetBreakOnCategory )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D10_MESSAGE_CATEGORY Category,\n            /* [annotation] */ \n            __in  BOOL bEnable);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetBreakOnSeverity )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D10_MESSAGE_SEVERITY Severity,\n            /* [annotation] */ \n            __in  BOOL bEnable);\n        \n        HRESULT ( STDMETHODCALLTYPE *SetBreakOnID )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D10_MESSAGE_ID ID,\n            /* [annotation] */ \n            __in  BOOL bEnable);\n        \n        BOOL ( STDMETHODCALLTYPE *GetBreakOnCategory )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D10_MESSAGE_CATEGORY Category);\n        \n        BOOL ( STDMETHODCALLTYPE *GetBreakOnSeverity )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D10_MESSAGE_SEVERITY Severity);\n        \n        BOOL ( STDMETHODCALLTYPE *GetBreakOnID )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __in  D3D10_MESSAGE_ID ID);\n        \n        void ( STDMETHODCALLTYPE *SetMuteDebugOutput )( \n            ID3D10InfoQueue * This,\n            /* [annotation] */ \n            __in  BOOL bMute);\n        \n        BOOL ( STDMETHODCALLTYPE *GetMuteDebugOutput )( \n            ID3D10InfoQueue * This);\n        \n        END_INTERFACE\n    } ID3D10InfoQueueVtbl;\n\n    interface ID3D10InfoQueue\n    {\n        CONST_VTBL struct ID3D10InfoQueueVtbl *lpVtbl;\n    };\n\n    \n\n#ifdef COBJMACROS\n\n\n#define ID3D10InfoQueue_QueryInterface(This,riid,ppvObject)\t\\\n    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) \n\n#define ID3D10InfoQueue_AddRef(This)\t\\\n    ( (This)->lpVtbl -> AddRef(This) ) \n\n#define ID3D10InfoQueue_Release(This)\t\\\n    ( (This)->lpVtbl -> Release(This) ) \n\n\n#define ID3D10InfoQueue_SetMessageCountLimit(This,MessageCountLimit)\t\\\n    ( (This)->lpVtbl -> SetMessageCountLimit(This,MessageCountLimit) ) \n\n#define ID3D10InfoQueue_ClearStoredMessages(This)\t\\\n    ( (This)->lpVtbl -> ClearStoredMessages(This) ) \n\n#define ID3D10InfoQueue_GetMessage(This,MessageIndex,pMessage,pMessageByteLength)\t\\\n    ( (This)->lpVtbl -> GetMessage(This,MessageIndex,pMessage,pMessageByteLength) ) \n\n#define ID3D10InfoQueue_GetNumMessagesAllowedByStorageFilter(This)\t\\\n    ( (This)->lpVtbl -> GetNumMessagesAllowedByStorageFilter(This) ) \n\n#define ID3D10InfoQueue_GetNumMessagesDeniedByStorageFilter(This)\t\\\n    ( (This)->lpVtbl -> GetNumMessagesDeniedByStorageFilter(This) ) \n\n#define ID3D10InfoQueue_GetNumStoredMessages(This)\t\\\n    ( (This)->lpVtbl -> GetNumStoredMessages(This) ) \n\n#define ID3D10InfoQueue_GetNumStoredMessagesAllowedByRetrievalFilter(This)\t\\\n    ( (This)->lpVtbl -> GetNumStoredMessagesAllowedByRetrievalFilter(This) ) \n\n#define ID3D10InfoQueue_GetNumMessagesDiscardedByMessageCountLimit(This)\t\\\n    ( (This)->lpVtbl -> GetNumMessagesDiscardedByMessageCountLimit(This) ) \n\n#define ID3D10InfoQueue_GetMessageCountLimit(This)\t\\\n    ( (This)->lpVtbl -> GetMessageCountLimit(This) ) \n\n#define ID3D10InfoQueue_AddStorageFilterEntries(This,pFilter)\t\\\n    ( (This)->lpVtbl -> AddStorageFilterEntries(This,pFilter) ) \n\n#define ID3D10InfoQueue_GetStorageFilter(This,pFilter,pFilterByteLength)\t\\\n    ( (This)->lpVtbl -> GetStorageFilter(This,pFilter,pFilterByteLength) ) \n\n#define ID3D10InfoQueue_ClearStorageFilter(This)\t\\\n    ( (This)->lpVtbl -> ClearStorageFilter(This) ) \n\n#define ID3D10InfoQueue_PushEmptyStorageFilter(This)\t\\\n    ( (This)->lpVtbl -> PushEmptyStorageFilter(This) ) \n\n#define ID3D10InfoQueue_PushCopyOfStorageFilter(This)\t\\\n    ( (This)->lpVtbl -> PushCopyOfStorageFilter(This) ) \n\n#define ID3D10InfoQueue_PushStorageFilter(This,pFilter)\t\\\n    ( (This)->lpVtbl -> PushStorageFilter(This,pFilter) ) \n\n#define ID3D10InfoQueue_PopStorageFilter(This)\t\\\n    ( (This)->lpVtbl -> PopStorageFilter(This) ) \n\n#define ID3D10InfoQueue_GetStorageFilterStackSize(This)\t\\\n    ( (This)->lpVtbl -> GetStorageFilterStackSize(This) ) \n\n#define ID3D10InfoQueue_AddRetrievalFilterEntries(This,pFilter)\t\\\n    ( (This)->lpVtbl -> AddRetrievalFilterEntries(This,pFilter) ) \n\n#define ID3D10InfoQueue_GetRetrievalFilter(This,pFilter,pFilterByteLength)\t\\\n    ( (This)->lpVtbl -> GetRetrievalFilter(This,pFilter,pFilterByteLength) ) \n\n#define ID3D10InfoQueue_ClearRetrievalFilter(This)\t\\\n    ( (This)->lpVtbl -> ClearRetrievalFilter(This) ) \n\n#define ID3D10InfoQueue_PushEmptyRetrievalFilter(This)\t\\\n    ( (This)->lpVtbl -> PushEmptyRetrievalFilter(This) ) \n\n#define ID3D10InfoQueue_PushCopyOfRetrievalFilter(This)\t\\\n    ( (This)->lpVtbl -> PushCopyOfRetrievalFilter(This) ) \n\n#define ID3D10InfoQueue_PushRetrievalFilter(This,pFilter)\t\\\n    ( (This)->lpVtbl -> PushRetrievalFilter(This,pFilter) ) \n\n#define ID3D10InfoQueue_PopRetrievalFilter(This)\t\\\n    ( (This)->lpVtbl -> PopRetrievalFilter(This) ) \n\n#define ID3D10InfoQueue_GetRetrievalFilterStackSize(This)\t\\\n    ( (This)->lpVtbl -> GetRetrievalFilterStackSize(This) ) \n\n#define ID3D10InfoQueue_AddMessage(This,Category,Severity,ID,pDescription)\t\\\n    ( (This)->lpVtbl -> AddMessage(This,Category,Severity,ID,pDescription) ) \n\n#define ID3D10InfoQueue_AddApplicationMessage(This,Severity,pDescription)\t\\\n    ( (This)->lpVtbl -> AddApplicationMessage(This,Severity,pDescription) ) \n\n#define ID3D10InfoQueue_SetBreakOnCategory(This,Category,bEnable)\t\\\n    ( (This)->lpVtbl -> SetBreakOnCategory(This,Category,bEnable) ) \n\n#define ID3D10InfoQueue_SetBreakOnSeverity(This,Severity,bEnable)\t\\\n    ( (This)->lpVtbl -> SetBreakOnSeverity(This,Severity,bEnable) ) \n\n#define ID3D10InfoQueue_SetBreakOnID(This,ID,bEnable)\t\\\n    ( (This)->lpVtbl -> SetBreakOnID(This,ID,bEnable) ) \n\n#define ID3D10InfoQueue_GetBreakOnCategory(This,Category)\t\\\n    ( (This)->lpVtbl -> GetBreakOnCategory(This,Category) ) \n\n#define ID3D10InfoQueue_GetBreakOnSeverity(This,Severity)\t\\\n    ( (This)->lpVtbl -> GetBreakOnSeverity(This,Severity) ) \n\n#define ID3D10InfoQueue_GetBreakOnID(This,ID)\t\\\n    ( (This)->lpVtbl -> GetBreakOnID(This,ID) ) \n\n#define ID3D10InfoQueue_SetMuteDebugOutput(This,bMute)\t\\\n    ( (This)->lpVtbl -> SetMuteDebugOutput(This,bMute) ) \n\n#define ID3D10InfoQueue_GetMuteDebugOutput(This)\t\\\n    ( (This)->lpVtbl -> GetMuteDebugOutput(This) ) \n\n#endif /* COBJMACROS */\n\n\n#endif \t/* C style interface */\n\n\n\n\n#endif \t/* __ID3D10InfoQueue_INTERFACE_DEFINED__ */\n\n\n/* interface __MIDL_itf_d3d10sdklayers_0000_0003 */\n/* [local] */ \n\n#define D3D10_REGKEY_PATH __TEXT(\"Software\\\\Microsoft\\\\Direct3D\")\n#define D3D10_MUTE_DEBUG_OUTPUT __TEXT(\"MuteDebugOutput\")\n#define D3D10_ENABLE_BREAK_ON_MESSAGE __TEXT(\"EnableBreakOnMessage\")\n#define D3D10_INFOQUEUE_STORAGE_FILTER_OVERRIDE __TEXT(\"InfoQueueStorageFilterOverride\")\n#define D3D10_MUTE_CATEGORY __TEXT(\"Mute_CATEGORY_%s\")\n#define D3D10_MUTE_SEVERITY __TEXT(\"Mute_SEVERITY_%s\")\n#define D3D10_MUTE_ID_STRING __TEXT(\"Mute_ID_%s\")\n#define D3D10_MUTE_ID_DECIMAL __TEXT(\"Mute_ID_%d\")\n#define D3D10_UNMUTE_SEVERITY_INFO __TEXT(\"Unmute_SEVERITY_INFO\")\n#define D3D10_BREAKON_CATEGORY __TEXT(\"BreakOn_CATEGORY_%s\")\n#define D3D10_BREAKON_SEVERITY __TEXT(\"BreakOn_SEVERITY_%s\")\n#define D3D10_BREAKON_ID_STRING __TEXT(\"BreakOn_ID_%s\")\n#define D3D10_BREAKON_ID_DECIMAL __TEXT(\"BreakOn_ID_%d\")\n#define D3D10_APPSIZE_STRING __TEXT(\"Size\")\n#define D3D10_APPNAME_STRING __TEXT(\"Name\")\nDEFINE_GUID(IID_ID3D10Debug,0x9B7E4E01,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10SwitchToRef,0x9B7E4E02,0x342C,0x4106,0xA1,0x9F,0x4F,0x27,0x04,0xF6,0x89,0xF0);\nDEFINE_GUID(IID_ID3D10InfoQueue,0x1b940b17,0x2642,0x4d1f,0xab,0x1f,0xb9,0x9b,0xad,0x0c,0x39,0x5f);\n\n\nextern RPC_IF_HANDLE __MIDL_itf_d3d10sdklayers_0000_0003_v0_0_c_ifspec;\nextern RPC_IF_HANDLE __MIDL_itf_d3d10sdklayers_0000_0003_v0_0_s_ifspec;\n\n/* Additional Prototypes for ALL interfaces */\n\n/* end of Additional Prototypes */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n\n"
  },
  {
    "path": "Include/d3d8.h",
    "content": "/*==========================================================================;\n *\n *  Copyright (C) Microsoft Corporation.  All Rights Reserved.\n *\n *  File:   d3d8.h\n *  Content:    Direct3D include file\n *\n ****************************************************************************/\n\n#ifndef _D3D8_H_\n#define _D3D8_H_\n\n#ifndef DIRECT3D_VERSION\n#define DIRECT3D_VERSION         0x0800\n#endif  //DIRECT3D_VERSION\n\n// include this file content only if compiling for DX8 interfaces\n#if(DIRECT3D_VERSION >= 0x0800)\n\n\n/* This identifier is passed to Direct3DCreate8 in order to ensure that an\n * application was built against the correct header files. This number is\n * incremented whenever a header (or other) change would require applications\n * to be rebuilt. If the version doesn't match, Direct3DCreate8 will fail.\n * (The number itself has no meaning.)*/\n\n#define D3D_SDK_VERSION 220\n\n\n#include <stdlib.h>\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n\n#include <windows.h>\n\n#if !defined(HMONITOR_DECLARED) && (WINVER < 0x0500)\n    #define HMONITOR_DECLARED\n    DECLARE_HANDLE(HMONITOR);\n#endif\n\n#define D3DAPI WINAPI\n\n/*\n * Interface IID's\n */\n#if defined( _WIN32 ) && !defined( _NO_COM)\n\n/* IID_IDirect3D8 */\n/* {1DD9E8DA-1C77-4d40-B0CF-98FEFDFF9512} */\nDEFINE_GUID(IID_IDirect3D8, 0x1dd9e8da, 0x1c77, 0x4d40, 0xb0, 0xcf, 0x98, 0xfe, 0xfd, 0xff, 0x95, 0x12);\n\n/* IID_IDirect3DDevice8 */\n/* {7385E5DF-8FE8-41D5-86B6-D7B48547B6CF} */\nDEFINE_GUID(IID_IDirect3DDevice8, 0x7385e5df, 0x8fe8, 0x41d5, 0x86, 0xb6, 0xd7, 0xb4, 0x85, 0x47, 0xb6, 0xcf);\n\n/* IID_IDirect3DResource8 */\n/* {1B36BB7B-09B7-410a-B445-7D1430D7B33F} */\nDEFINE_GUID(IID_IDirect3DResource8, 0x1b36bb7b, 0x9b7, 0x410a, 0xb4, 0x45, 0x7d, 0x14, 0x30, 0xd7, 0xb3, 0x3f);\n\n/* IID_IDirect3DBaseTexture8 */\n/* {B4211CFA-51B9-4a9f-AB78-DB99B2BB678E} */\nDEFINE_GUID(IID_IDirect3DBaseTexture8, 0xb4211cfa, 0x51b9, 0x4a9f, 0xab, 0x78, 0xdb, 0x99, 0xb2, 0xbb, 0x67, 0x8e);\n\n/* IID_IDirect3DTexture8 */\n/* {E4CDD575-2866-4f01-B12E-7EECE1EC9358} */\nDEFINE_GUID(IID_IDirect3DTexture8, 0xe4cdd575, 0x2866, 0x4f01, 0xb1, 0x2e, 0x7e, 0xec, 0xe1, 0xec, 0x93, 0x58);\n\n/* IID_IDirect3DCubeTexture8 */\n/* {3EE5B968-2ACA-4c34-8BB5-7E0C3D19B750} */\nDEFINE_GUID(IID_IDirect3DCubeTexture8, 0x3ee5b968, 0x2aca, 0x4c34, 0x8b, 0xb5, 0x7e, 0x0c, 0x3d, 0x19, 0xb7, 0x50);\n\n/* IID_IDirect3DVolumeTexture8 */\n/* {4B8AAAFA-140F-42ba-9131-597EAFAA2EAD} */\nDEFINE_GUID(IID_IDirect3DVolumeTexture8, 0x4b8aaafa, 0x140f, 0x42ba, 0x91, 0x31, 0x59, 0x7e, 0xaf, 0xaa, 0x2e, 0xad);\n\n/* IID_IDirect3DVertexBuffer8 */\n/* {8AEEEAC7-05F9-44d4-B591-000B0DF1CB95} */\nDEFINE_GUID(IID_IDirect3DVertexBuffer8, 0x8aeeeac7, 0x05f9, 0x44d4, 0xb5, 0x91, 0x00, 0x0b, 0x0d, 0xf1, 0xcb, 0x95);\n\n/* IID_IDirect3DIndexBuffer8 */\n/* {0E689C9A-053D-44a0-9D92-DB0E3D750F86} */\nDEFINE_GUID(IID_IDirect3DIndexBuffer8, 0x0e689c9a, 0x053d, 0x44a0, 0x9d, 0x92, 0xdb, 0x0e, 0x3d, 0x75, 0x0f, 0x86);\n\n/* IID_IDirect3DSurface8 */\n/* {B96EEBCA-B326-4ea5-882F-2FF5BAE021DD} */\nDEFINE_GUID(IID_IDirect3DSurface8, 0xb96eebca, 0xb326, 0x4ea5, 0x88, 0x2f, 0x2f, 0xf5, 0xba, 0xe0, 0x21, 0xdd);\n\n/* IID_IDirect3DVolume8 */\n/* {BD7349F5-14F1-42e4-9C79-972380DB40C0} */\nDEFINE_GUID(IID_IDirect3DVolume8, 0xbd7349f5, 0x14f1, 0x42e4, 0x9c, 0x79, 0x97, 0x23, 0x80, 0xdb, 0x40, 0xc0);\n\n/* IID_IDirect3DSwapChain8 */\n/* {928C088B-76B9-4C6B-A536-A590853876CD} */\nDEFINE_GUID(IID_IDirect3DSwapChain8, 0x928c088b, 0x76b9, 0x4c6b, 0xa5, 0x36, 0xa5, 0x90, 0x85, 0x38, 0x76, 0xcd);\n\n#endif\n\n#ifdef __cplusplus\n\ninterface IDirect3D8;\ninterface IDirect3DDevice8;\n\ninterface IDirect3DResource8;\ninterface IDirect3DBaseTexture8;\ninterface IDirect3DTexture8;\ninterface IDirect3DVolumeTexture8;\ninterface IDirect3DCubeTexture8;\n\ninterface IDirect3DVertexBuffer8;\ninterface IDirect3DIndexBuffer8;\n\ninterface IDirect3DSurface8;\ninterface IDirect3DVolume8;\n\ninterface IDirect3DSwapChain8;\n\n#endif\n\n\ntypedef interface IDirect3D8                IDirect3D8;\ntypedef interface IDirect3DDevice8          IDirect3DDevice8;\ntypedef interface IDirect3DResource8        IDirect3DResource8;\ntypedef interface IDirect3DBaseTexture8     IDirect3DBaseTexture8;\ntypedef interface IDirect3DTexture8         IDirect3DTexture8;\ntypedef interface IDirect3DVolumeTexture8   IDirect3DVolumeTexture8;\ntypedef interface IDirect3DCubeTexture8     IDirect3DCubeTexture8;\ntypedef interface IDirect3DVertexBuffer8    IDirect3DVertexBuffer8;\ntypedef interface IDirect3DIndexBuffer8     IDirect3DIndexBuffer8;\ntypedef interface IDirect3DSurface8         IDirect3DSurface8;\ntypedef interface IDirect3DVolume8          IDirect3DVolume8;\ntypedef interface IDirect3DSwapChain8       IDirect3DSwapChain8;\n\n#include \"d3d8types.h\"\n#include \"d3d8caps.h\"\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n * DLL Function for creating a Direct3D8 object. This object supports\n * enumeration and allows the creation of Direct3DDevice8 objects.\n * Pass the value of the constant D3D_SDK_VERSION to this function, so\n * that the run-time can validate that your application was compiled\n * against the right headers.\n */\n\nIDirect3D8 * WINAPI Direct3DCreate8(UINT SDKVersion);\n\n\n/*\n * Direct3D interfaces\n */\n\n\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3D8\n\nDECLARE_INTERFACE_(IDirect3D8, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3D8 methods ***/\n    STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;\n    STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;\n    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter,DWORD Flags,D3DADAPTER_IDENTIFIER8* pIdentifier) PURE;\n    STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter) PURE;\n    STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter,UINT Mode,D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter,D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(CheckDeviceType)(THIS_ UINT Adapter,D3DDEVTYPE CheckType,D3DFORMAT DisplayFormat,D3DFORMAT BackBufferFormat,BOOL Windowed) PURE;\n    STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,DWORD Usage,D3DRESOURCETYPE RType,D3DFORMAT CheckFormat) PURE;\n    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SurfaceFormat,BOOL Windowed,D3DMULTISAMPLE_TYPE MultiSampleType) PURE;\n    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,D3DFORMAT RenderTargetFormat,D3DFORMAT DepthStencilFormat) PURE;\n    STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DCAPS8* pCaps) PURE;\n    STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;\n    STDMETHOD(CreateDevice)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DDevice8** ppReturnedDeviceInterface) PURE;\n};\n\ntypedef struct IDirect3D8 *LPDIRECT3D8, *PDIRECT3D8;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3D8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D8_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3D8_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3D8_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a)\n#define IDirect3D8_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p)\n#define IDirect3D8_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)\n#define IDirect3D8_GetAdapterModeCount(p,a) (p)->lpVtbl->GetAdapterModeCount(p,a)\n#define IDirect3D8_EnumAdapterModes(p,a,b,c) (p)->lpVtbl->EnumAdapterModes(p,a,b,c)\n#define IDirect3D8_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)\n#define IDirect3D8_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)\n#define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)\n#define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e)\n#define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)\n#define IDirect3D8_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c)\n#define IDirect3D8_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a)\n#define IDirect3D8_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)\n#else\n#define IDirect3D8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3D8_AddRef(p) (p)->AddRef()\n#define IDirect3D8_Release(p) (p)->Release()\n#define IDirect3D8_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a)\n#define IDirect3D8_GetAdapterCount(p) (p)->GetAdapterCount()\n#define IDirect3D8_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c)\n#define IDirect3D8_GetAdapterModeCount(p,a) (p)->GetAdapterModeCount(a)\n#define IDirect3D8_EnumAdapterModes(p,a,b,c) (p)->EnumAdapterModes(a,b,c)\n#define IDirect3D8_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b)\n#define IDirect3D8_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e)\n#define IDirect3D8_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f)\n#define IDirect3D8_CheckDeviceMultiSampleType(p,a,b,c,d,e) (p)->CheckDeviceMultiSampleType(a,b,c,d,e)\n#define IDirect3D8_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e)\n#define IDirect3D8_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c)\n#define IDirect3D8_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a)\n#define IDirect3D8_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f)\n#endif\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DDevice8\n\nDECLARE_INTERFACE_(IDirect3DDevice8, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DDevice8 methods ***/\n    STDMETHOD(TestCooperativeLevel)(THIS) PURE;\n    STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;\n    STDMETHOD(ResourceManagerDiscardBytes)(THIS_ DWORD Bytes) PURE;\n    STDMETHOD(GetDirect3D)(THIS_ IDirect3D8** ppD3D8) PURE;\n    STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS8* pCaps) PURE;\n    STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;\n    STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot,UINT YHotSpot,IDirect3DSurface8* pCursorBitmap) PURE;\n    STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y,DWORD Flags) PURE;\n    STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;\n    STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DSwapChain8** pSwapChain) PURE;\n    STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;\n    STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion) PURE;\n    STDMETHOD(GetBackBuffer)(THIS_ UINT BackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface8** ppBackBuffer) PURE;\n    STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS* pRasterStatus) PURE;\n    STDMETHOD_(void, SetGammaRamp)(THIS_ DWORD Flags,CONST D3DGAMMARAMP* pRamp) PURE;\n    STDMETHOD_(void, GetGammaRamp)(THIS_ D3DGAMMARAMP* pRamp) PURE;\n    STDMETHOD(CreateTexture)(THIS_ UINT Width,UINT Height,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DTexture8** ppTexture) PURE;\n    STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DVolumeTexture8** ppVolumeTexture) PURE;\n    STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DCubeTexture8** ppCubeTexture) PURE;\n    STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,IDirect3DVertexBuffer8** ppVertexBuffer) PURE;\n    STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DIndexBuffer8** ppIndexBuffer) PURE;\n    STDMETHOD(CreateRenderTarget)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,BOOL Lockable,IDirect3DSurface8** ppSurface) PURE;\n    STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,IDirect3DSurface8** ppSurface) PURE;\n    STDMETHOD(CreateImageSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,IDirect3DSurface8** ppSurface) PURE;\n    STDMETHOD(CopyRects)(THIS_ IDirect3DSurface8* pSourceSurface,CONST RECT* pSourceRectsArray,UINT cRects,IDirect3DSurface8* pDestinationSurface,CONST POINT* pDestPointsArray) PURE;\n    STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture8* pSourceTexture,IDirect3DBaseTexture8* pDestinationTexture) PURE;\n    STDMETHOD(GetFrontBuffer)(THIS_ IDirect3DSurface8* pDestSurface) PURE;\n    STDMETHOD(SetRenderTarget)(THIS_ IDirect3DSurface8* pRenderTarget,IDirect3DSurface8* pNewZStencil) PURE;\n    STDMETHOD(GetRenderTarget)(THIS_ IDirect3DSurface8** ppRenderTarget) PURE;\n    STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface8** ppZStencilSurface) PURE;\n    STDMETHOD(BeginScene)(THIS) PURE;\n    STDMETHOD(EndScene)(THIS) PURE;\n    STDMETHOD(Clear)(THIS_ DWORD Count,CONST D3DRECT* pRects,DWORD Flags,D3DCOLOR Color,float Z,DWORD Stencil) PURE;\n    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,CONST D3DMATRIX* pMatrix) PURE;\n    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,D3DMATRIX* pMatrix) PURE;\n    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,CONST D3DMATRIX*) PURE;\n    STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT8* pViewport) PURE;\n    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT8* pViewport) PURE;\n    STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL8* pMaterial) PURE;\n    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL8* pMaterial) PURE;\n    STDMETHOD(SetLight)(THIS_ DWORD Index,CONST D3DLIGHT8*) PURE;\n    STDMETHOD(GetLight)(THIS_ DWORD Index,D3DLIGHT8*) PURE;\n    STDMETHOD(LightEnable)(THIS_ DWORD Index,BOOL Enable) PURE;\n    STDMETHOD(GetLightEnable)(THIS_ DWORD Index,BOOL* pEnable) PURE;\n    STDMETHOD(SetClipPlane)(THIS_ DWORD Index,CONST float* pPlane) PURE;\n    STDMETHOD(GetClipPlane)(THIS_ DWORD Index,float* pPlane) PURE;\n    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD Value) PURE;\n    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD* pValue) PURE;\n    STDMETHOD(BeginStateBlock)(THIS) PURE;\n    STDMETHOD(EndStateBlock)(THIS_ DWORD* pToken) PURE;\n    STDMETHOD(ApplyStateBlock)(THIS_ DWORD Token) PURE;\n    STDMETHOD(CaptureStateBlock)(THIS_ DWORD Token) PURE;\n    STDMETHOD(DeleteStateBlock)(THIS_ DWORD Token) PURE;\n    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type,DWORD* pToken) PURE;\n    STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS8* pClipStatus) PURE;\n    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS8* pClipStatus) PURE;\n    STDMETHOD(GetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture8** ppTexture) PURE;\n    STDMETHOD(SetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture8* pTexture) PURE;\n    STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD* pValue) PURE;\n    STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD Value) PURE;\n    STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;\n    STDMETHOD(GetInfo)(THIS_ DWORD DevInfoID,void* pDevInfoStruct,DWORD DevInfoStructSize) PURE;\n    STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber,CONST PALETTEENTRY* pEntries) PURE;\n    STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;\n    STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;\n    STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;\n    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT StartVertex,UINT PrimitiveCount) PURE;\n    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,UINT minIndex,UINT NumVertices,UINT startIndex,UINT primCount) PURE;\n    STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT PrimitiveCount,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE;\n    STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT MinVertexIndex,UINT NumVertexIndices,UINT PrimitiveCount,CONST void* pIndexData,D3DFORMAT IndexDataFormat,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE;\n    STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,IDirect3DVertexBuffer8* pDestBuffer,DWORD Flags) PURE;\n    STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pDeclaration,CONST DWORD* pFunction,DWORD* pHandle,DWORD Usage) PURE;\n    STDMETHOD(SetVertexShader)(THIS_ DWORD Handle) PURE;\n    STDMETHOD(GetVertexShader)(THIS_ DWORD* pHandle) PURE;\n    STDMETHOD(DeleteVertexShader)(THIS_ DWORD Handle) PURE;\n    STDMETHOD(SetVertexShaderConstant)(THIS_ DWORD Register,CONST void* pConstantData,DWORD ConstantCount) PURE;\n    STDMETHOD(GetVertexShaderConstant)(THIS_ DWORD Register,void* pConstantData,DWORD ConstantCount) PURE;\n    STDMETHOD(GetVertexShaderDeclaration)(THIS_ DWORD Handle,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(GetVertexShaderFunction)(THIS_ DWORD Handle,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer8* pStreamData,UINT Stride) PURE;\n    STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer8** ppStreamData,UINT* pStride) PURE;\n    STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer8* pIndexData,UINT BaseVertexIndex) PURE;\n    STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer8** ppIndexData,UINT* pBaseVertexIndex) PURE;\n    STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction,DWORD* pHandle) PURE;\n    STDMETHOD(SetPixelShader)(THIS_ DWORD Handle) PURE;\n    STDMETHOD(GetPixelShader)(THIS_ DWORD* pHandle) PURE;\n    STDMETHOD(DeletePixelShader)(THIS_ DWORD Handle) PURE;\n    STDMETHOD(SetPixelShaderConstant)(THIS_ DWORD Register,CONST void* pConstantData,DWORD ConstantCount) PURE;\n    STDMETHOD(GetPixelShaderConstant)(THIS_ DWORD Register,void* pConstantData,DWORD ConstantCount) PURE;\n    STDMETHOD(GetPixelShaderFunction)(THIS_ DWORD Handle,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(DrawRectPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE;\n    STDMETHOD(DrawTriPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE;\n    STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;\n};\n\ntypedef struct IDirect3DDevice8 *LPDIRECT3DDEVICE8, *PDIRECT3DDEVICE8;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DDevice8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DDevice8_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DDevice8_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DDevice8_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p)\n#define IDirect3DDevice8_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p)\n#define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a) (p)->lpVtbl->ResourceManagerDiscardBytes(p,a)\n#define IDirect3DDevice8_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)\n#define IDirect3DDevice8_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a)\n#define IDirect3DDevice8_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a)\n#define IDirect3DDevice8_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a)\n#define IDirect3DDevice8_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c)\n#define IDirect3DDevice8_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c)\n#define IDirect3DDevice8_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a)\n#define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)\n#define IDirect3DDevice8_Reset(p,a) (p)->lpVtbl->Reset(p,a)\n#define IDirect3DDevice8_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d)\n#define IDirect3DDevice8_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c)\n#define IDirect3DDevice8_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a)\n#define IDirect3DDevice8_SetGammaRamp(p,a,b) (p)->lpVtbl->SetGammaRamp(p,a,b)\n#define IDirect3DDevice8_GetGammaRamp(p,a) (p)->lpVtbl->GetGammaRamp(p,a)\n#define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f)\n#define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e)\n#define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e)\n#define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f)\n#define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e)\n#define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d) (p)->lpVtbl->CreateImageSurface(p,a,b,c,d)\n#define IDirect3DDevice8_CopyRects(p,a,b,c,d,e) (p)->lpVtbl->CopyRects(p,a,b,c,d,e)\n#define IDirect3DDevice8_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b)\n#define IDirect3DDevice8_GetFrontBuffer(p,a) (p)->lpVtbl->GetFrontBuffer(p,a)\n#define IDirect3DDevice8_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)\n#define IDirect3DDevice8_GetRenderTarget(p,a) (p)->lpVtbl->GetRenderTarget(p,a)\n#define IDirect3DDevice8_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a)\n#define IDirect3DDevice8_BeginScene(p) (p)->lpVtbl->BeginScene(p)\n#define IDirect3DDevice8_EndScene(p) (p)->lpVtbl->EndScene(p)\n#define IDirect3DDevice8_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f)\n#define IDirect3DDevice8_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)\n#define IDirect3DDevice8_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)\n#define IDirect3DDevice8_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)\n#define IDirect3DDevice8_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)\n#define IDirect3DDevice8_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)\n#define IDirect3DDevice8_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DDevice8_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)\n#define IDirect3DDevice8_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b)\n#define IDirect3DDevice8_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b)\n#define IDirect3DDevice8_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b)\n#define IDirect3DDevice8_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b)\n#define IDirect3DDevice8_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b)\n#define IDirect3DDevice8_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b)\n#define IDirect3DDevice8_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)\n#define IDirect3DDevice8_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)\n#define IDirect3DDevice8_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p)\n#define IDirect3DDevice8_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a)\n#define IDirect3DDevice8_ApplyStateBlock(p,a) (p)->lpVtbl->ApplyStateBlock(p,a)\n#define IDirect3DDevice8_CaptureStateBlock(p,a) (p)->lpVtbl->CaptureStateBlock(p,a)\n#define IDirect3DDevice8_DeleteStateBlock(p,a) (p)->lpVtbl->DeleteStateBlock(p,a)\n#define IDirect3DDevice8_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b)\n#define IDirect3DDevice8_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)\n#define IDirect3DDevice8_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)\n#define IDirect3DDevice8_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b)\n#define IDirect3DDevice8_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b)\n#define IDirect3DDevice8_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c)\n#define IDirect3DDevice8_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c)\n#define IDirect3DDevice8_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a)\n#define IDirect3DDevice8_GetInfo(p,a,b,c) (p)->lpVtbl->GetInfo(p,a,b,c)\n#define IDirect3DDevice8_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b)\n#define IDirect3DDevice8_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b)\n#define IDirect3DDevice8_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a)\n#define IDirect3DDevice8_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a)\n#define IDirect3DDevice8_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c)\n#define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e)\n#define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)\n#define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e)\n#define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d) (p)->lpVtbl->CreateVertexShader(p,a,b,c,d)\n#define IDirect3DDevice8_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a)\n#define IDirect3DDevice8_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a)\n#define IDirect3DDevice8_DeleteVertexShader(p,a) (p)->lpVtbl->DeleteVertexShader(p,a)\n#define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstant(p,a,b,c)\n#define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstant(p,a,b,c)\n#define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c) (p)->lpVtbl->GetVertexShaderDeclaration(p,a,b,c)\n#define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c) (p)->lpVtbl->GetVertexShaderFunction(p,a,b,c)\n#define IDirect3DDevice8_SetStreamSource(p,a,b,c) (p)->lpVtbl->SetStreamSource(p,a,b,c)\n#define IDirect3DDevice8_GetStreamSource(p,a,b,c) (p)->lpVtbl->GetStreamSource(p,a,b,c)\n#define IDirect3DDevice8_SetIndices(p,a,b) (p)->lpVtbl->SetIndices(p,a,b)\n#define IDirect3DDevice8_GetIndices(p,a,b) (p)->lpVtbl->GetIndices(p,a,b)\n#define IDirect3DDevice8_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b)\n#define IDirect3DDevice8_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a)\n#define IDirect3DDevice8_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a)\n#define IDirect3DDevice8_DeletePixelShader(p,a) (p)->lpVtbl->DeletePixelShader(p,a)\n#define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstant(p,a,b,c)\n#define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstant(p,a,b,c)\n#define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c) (p)->lpVtbl->GetPixelShaderFunction(p,a,b,c)\n#define IDirect3DDevice8_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c)\n#define IDirect3DDevice8_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c)\n#define IDirect3DDevice8_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a)\n#else\n#define IDirect3DDevice8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DDevice8_AddRef(p) (p)->AddRef()\n#define IDirect3DDevice8_Release(p) (p)->Release()\n#define IDirect3DDevice8_TestCooperativeLevel(p) (p)->TestCooperativeLevel()\n#define IDirect3DDevice8_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem()\n#define IDirect3DDevice8_ResourceManagerDiscardBytes(p,a) (p)->ResourceManagerDiscardBytes(a)\n#define IDirect3DDevice8_GetDirect3D(p,a) (p)->GetDirect3D(a)\n#define IDirect3DDevice8_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a)\n#define IDirect3DDevice8_GetDisplayMode(p,a) (p)->GetDisplayMode(a)\n#define IDirect3DDevice8_GetCreationParameters(p,a) (p)->GetCreationParameters(a)\n#define IDirect3DDevice8_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c)\n#define IDirect3DDevice8_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c)\n#define IDirect3DDevice8_ShowCursor(p,a) (p)->ShowCursor(a)\n#define IDirect3DDevice8_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b)\n#define IDirect3DDevice8_Reset(p,a) (p)->Reset(a)\n#define IDirect3DDevice8_Present(p,a,b,c,d) (p)->Present(a,b,c,d)\n#define IDirect3DDevice8_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c)\n#define IDirect3DDevice8_GetRasterStatus(p,a) (p)->GetRasterStatus(a)\n#define IDirect3DDevice8_SetGammaRamp(p,a,b) (p)->SetGammaRamp(a,b)\n#define IDirect3DDevice8_GetGammaRamp(p,a) (p)->GetGammaRamp(a)\n#define IDirect3DDevice8_CreateTexture(p,a,b,c,d,e,f,g) (p)->CreateTexture(a,b,c,d,e,f,g)\n#define IDirect3DDevice8_CreateVolumeTexture(p,a,b,c,d,e,f,g,h) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice8_CreateCubeTexture(p,a,b,c,d,e,f) (p)->CreateCubeTexture(a,b,c,d,e,f)\n#define IDirect3DDevice8_CreateVertexBuffer(p,a,b,c,d,e) (p)->CreateVertexBuffer(a,b,c,d,e)\n#define IDirect3DDevice8_CreateIndexBuffer(p,a,b,c,d,e) (p)->CreateIndexBuffer(a,b,c,d,e)\n#define IDirect3DDevice8_CreateRenderTarget(p,a,b,c,d,e,f) (p)->CreateRenderTarget(a,b,c,d,e,f)\n#define IDirect3DDevice8_CreateDepthStencilSurface(p,a,b,c,d,e) (p)->CreateDepthStencilSurface(a,b,c,d,e)\n#define IDirect3DDevice8_CreateImageSurface(p,a,b,c,d) (p)->CreateImageSurface(a,b,c,d)\n#define IDirect3DDevice8_CopyRects(p,a,b,c,d,e) (p)->CopyRects(a,b,c,d,e)\n#define IDirect3DDevice8_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b)\n#define IDirect3DDevice8_GetFrontBuffer(p,a) (p)->GetFrontBuffer(a)\n#define IDirect3DDevice8_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)\n#define IDirect3DDevice8_GetRenderTarget(p,a) (p)->GetRenderTarget(a)\n#define IDirect3DDevice8_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a)\n#define IDirect3DDevice8_BeginScene(p) (p)->BeginScene()\n#define IDirect3DDevice8_EndScene(p) (p)->EndScene()\n#define IDirect3DDevice8_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f)\n#define IDirect3DDevice8_SetTransform(p,a,b) (p)->SetTransform(a,b)\n#define IDirect3DDevice8_GetTransform(p,a,b) (p)->GetTransform(a,b)\n#define IDirect3DDevice8_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)\n#define IDirect3DDevice8_SetViewport(p,a) (p)->SetViewport(a)\n#define IDirect3DDevice8_GetViewport(p,a) (p)->GetViewport(a)\n#define IDirect3DDevice8_SetMaterial(p,a) (p)->SetMaterial(a)\n#define IDirect3DDevice8_GetMaterial(p,a) (p)->GetMaterial(a)\n#define IDirect3DDevice8_SetLight(p,a,b) (p)->SetLight(a,b)\n#define IDirect3DDevice8_GetLight(p,a,b) (p)->GetLight(a,b)\n#define IDirect3DDevice8_LightEnable(p,a,b) (p)->LightEnable(a,b)\n#define IDirect3DDevice8_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b)\n#define IDirect3DDevice8_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b)\n#define IDirect3DDevice8_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b)\n#define IDirect3DDevice8_SetRenderState(p,a,b) (p)->SetRenderState(a,b)\n#define IDirect3DDevice8_GetRenderState(p,a,b) (p)->GetRenderState(a,b)\n#define IDirect3DDevice8_BeginStateBlock(p) (p)->BeginStateBlock()\n#define IDirect3DDevice8_EndStateBlock(p,a) (p)->EndStateBlock(a)\n#define IDirect3DDevice8_ApplyStateBlock(p,a) (p)->ApplyStateBlock(a)\n#define IDirect3DDevice8_CaptureStateBlock(p,a) (p)->CaptureStateBlock(a)\n#define IDirect3DDevice8_DeleteStateBlock(p,a) (p)->DeleteStateBlock(a)\n#define IDirect3DDevice8_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b)\n#define IDirect3DDevice8_SetClipStatus(p,a) (p)->SetClipStatus(a)\n#define IDirect3DDevice8_GetClipStatus(p,a) (p)->GetClipStatus(a)\n#define IDirect3DDevice8_GetTexture(p,a,b) (p)->GetTexture(a,b)\n#define IDirect3DDevice8_SetTexture(p,a,b) (p)->SetTexture(a,b)\n#define IDirect3DDevice8_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c)\n#define IDirect3DDevice8_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c)\n#define IDirect3DDevice8_ValidateDevice(p,a) (p)->ValidateDevice(a)\n#define IDirect3DDevice8_GetInfo(p,a,b,c) (p)->GetInfo(a,b,c)\n#define IDirect3DDevice8_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b)\n#define IDirect3DDevice8_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b)\n#define IDirect3DDevice8_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a)\n#define IDirect3DDevice8_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a)\n#define IDirect3DDevice8_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c)\n#define IDirect3DDevice8_DrawIndexedPrimitive(p,a,b,c,d,e) (p)->DrawIndexedPrimitive(a,b,c,d,e)\n#define IDirect3DDevice8_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d)\n#define IDirect3DDevice8_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice8_ProcessVertices(p,a,b,c,d,e) (p)->ProcessVertices(a,b,c,d,e)\n#define IDirect3DDevice8_CreateVertexShader(p,a,b,c,d) (p)->CreateVertexShader(a,b,c,d)\n#define IDirect3DDevice8_SetVertexShader(p,a) (p)->SetVertexShader(a)\n#define IDirect3DDevice8_GetVertexShader(p,a) (p)->GetVertexShader(a)\n#define IDirect3DDevice8_DeleteVertexShader(p,a) (p)->DeleteVertexShader(a)\n#define IDirect3DDevice8_SetVertexShaderConstant(p,a,b,c) (p)->SetVertexShaderConstant(a,b,c)\n#define IDirect3DDevice8_GetVertexShaderConstant(p,a,b,c) (p)->GetVertexShaderConstant(a,b,c)\n#define IDirect3DDevice8_GetVertexShaderDeclaration(p,a,b,c) (p)->GetVertexShaderDeclaration(a,b,c)\n#define IDirect3DDevice8_GetVertexShaderFunction(p,a,b,c) (p)->GetVertexShaderFunction(a,b,c)\n#define IDirect3DDevice8_SetStreamSource(p,a,b,c) (p)->SetStreamSource(a,b,c)\n#define IDirect3DDevice8_GetStreamSource(p,a,b,c) (p)->GetStreamSource(a,b,c)\n#define IDirect3DDevice8_SetIndices(p,a,b) (p)->SetIndices(a,b)\n#define IDirect3DDevice8_GetIndices(p,a,b) (p)->GetIndices(a,b)\n#define IDirect3DDevice8_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b)\n#define IDirect3DDevice8_SetPixelShader(p,a) (p)->SetPixelShader(a)\n#define IDirect3DDevice8_GetPixelShader(p,a) (p)->GetPixelShader(a)\n#define IDirect3DDevice8_DeletePixelShader(p,a) (p)->DeletePixelShader(a)\n#define IDirect3DDevice8_SetPixelShaderConstant(p,a,b,c) (p)->SetPixelShaderConstant(a,b,c)\n#define IDirect3DDevice8_GetPixelShaderConstant(p,a,b,c) (p)->GetPixelShaderConstant(a,b,c)\n#define IDirect3DDevice8_GetPixelShaderFunction(p,a,b,c) (p)->GetPixelShaderFunction(a,b,c)\n#define IDirect3DDevice8_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c)\n#define IDirect3DDevice8_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c)\n#define IDirect3DDevice8_DeletePatch(p,a) (p)->DeletePatch(a)\n#endif\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DSwapChain8\n\nDECLARE_INTERFACE_(IDirect3DSwapChain8, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DSwapChain8 methods ***/\n    STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion) PURE;\n    STDMETHOD(GetBackBuffer)(THIS_ UINT BackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface8** ppBackBuffer) PURE;\n};\n\ntypedef struct IDirect3DSwapChain8 *LPDIRECT3DSWAPCHAIN8, *PDIRECT3DSWAPCHAIN8;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DSwapChain8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DSwapChain8_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DSwapChain8_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DSwapChain8_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d)\n#define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c)\n#else\n#define IDirect3DSwapChain8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DSwapChain8_AddRef(p) (p)->AddRef()\n#define IDirect3DSwapChain8_Release(p) (p)->Release()\n#define IDirect3DSwapChain8_Present(p,a,b,c,d) (p)->Present(a,b,c,d)\n#define IDirect3DSwapChain8_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c)\n#endif\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DResource8\n\nDECLARE_INTERFACE_(IDirect3DResource8, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DResource8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n};\n\ntypedef struct IDirect3DResource8 *LPDIRECT3DRESOURCE8, *PDIRECT3DRESOURCE8;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DResource8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DResource8_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DResource8_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DResource8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DResource8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DResource8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DResource8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DResource8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DResource8_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DResource8_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DResource8_GetType(p) (p)->lpVtbl->GetType(p)\n#else\n#define IDirect3DResource8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DResource8_AddRef(p) (p)->AddRef()\n#define IDirect3DResource8_Release(p) (p)->Release()\n#define IDirect3DResource8_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DResource8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DResource8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DResource8_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DResource8_SetPriority(p,a) (p)->SetPriority(a)\n#define IDirect3DResource8_GetPriority(p) (p)->GetPriority()\n#define IDirect3DResource8_PreLoad(p) (p)->PreLoad()\n#define IDirect3DResource8_GetType(p) (p)->GetType()\n#endif\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DBaseTexture8\n\nDECLARE_INTERFACE_(IDirect3DBaseTexture8, IDirect3DResource8)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DResource8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;\n    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;\n};\n\ntypedef struct IDirect3DBaseTexture8 *LPDIRECT3DBASETEXTURE8, *PDIRECT3DBASETEXTURE8;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DBaseTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DBaseTexture8_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DBaseTexture8_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DBaseTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DBaseTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DBaseTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DBaseTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DBaseTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DBaseTexture8_GetType(p) (p)->lpVtbl->GetType(p)\n#define IDirect3DBaseTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DBaseTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p)\n#define IDirect3DBaseTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)\n#else\n#define IDirect3DBaseTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DBaseTexture8_AddRef(p) (p)->AddRef()\n#define IDirect3DBaseTexture8_Release(p) (p)->Release()\n#define IDirect3DBaseTexture8_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DBaseTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DBaseTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DBaseTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DBaseTexture8_SetPriority(p,a) (p)->SetPriority(a)\n#define IDirect3DBaseTexture8_GetPriority(p) (p)->GetPriority()\n#define IDirect3DBaseTexture8_PreLoad(p) (p)->PreLoad()\n#define IDirect3DBaseTexture8_GetType(p) (p)->GetType()\n#define IDirect3DBaseTexture8_SetLOD(p,a) (p)->SetLOD(a)\n#define IDirect3DBaseTexture8_GetLOD(p) (p)->GetLOD()\n#define IDirect3DBaseTexture8_GetLevelCount(p) (p)->GetLevelCount()\n#endif\n\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DTexture8\n\nDECLARE_INTERFACE_(IDirect3DTexture8, IDirect3DBaseTexture8)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DBaseTexture8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;\n    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;\n    STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC *pDesc) PURE;\n    STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level,IDirect3DSurface8** ppSurfaceLevel) PURE;\n    STDMETHOD(LockRect)(THIS_ UINT Level,D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags) PURE;\n    STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE;\n    STDMETHOD(AddDirtyRect)(THIS_ CONST RECT* pDirtyRect) PURE;\n};\n\ntypedef struct IDirect3DTexture8 *LPDIRECT3DTEXTURE8, *PDIRECT3DTEXTURE8;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DTexture8_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DTexture8_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DTexture8_GetType(p) (p)->lpVtbl->GetType(p)\n#define IDirect3DTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p)\n#define IDirect3DTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)\n#define IDirect3DTexture8_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)\n#define IDirect3DTexture8_GetSurfaceLevel(p,a,b) (p)->lpVtbl->GetSurfaceLevel(p,a,b)\n#define IDirect3DTexture8_LockRect(p,a,b,c,d) (p)->lpVtbl->LockRect(p,a,b,c,d)\n#define IDirect3DTexture8_UnlockRect(p,a) (p)->lpVtbl->UnlockRect(p,a)\n#define IDirect3DTexture8_AddDirtyRect(p,a) (p)->lpVtbl->AddDirtyRect(p,a)\n#else\n#define IDirect3DTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DTexture8_AddRef(p) (p)->AddRef()\n#define IDirect3DTexture8_Release(p) (p)->Release()\n#define IDirect3DTexture8_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DTexture8_SetPriority(p,a) (p)->SetPriority(a)\n#define IDirect3DTexture8_GetPriority(p) (p)->GetPriority()\n#define IDirect3DTexture8_PreLoad(p) (p)->PreLoad()\n#define IDirect3DTexture8_GetType(p) (p)->GetType()\n#define IDirect3DTexture8_SetLOD(p,a) (p)->SetLOD(a)\n#define IDirect3DTexture8_GetLOD(p) (p)->GetLOD()\n#define IDirect3DTexture8_GetLevelCount(p) (p)->GetLevelCount()\n#define IDirect3DTexture8_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)\n#define IDirect3DTexture8_GetSurfaceLevel(p,a,b) (p)->GetSurfaceLevel(a,b)\n#define IDirect3DTexture8_LockRect(p,a,b,c,d) (p)->LockRect(a,b,c,d)\n#define IDirect3DTexture8_UnlockRect(p,a) (p)->UnlockRect(a)\n#define IDirect3DTexture8_AddDirtyRect(p,a) (p)->AddDirtyRect(a)\n#endif\n\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DVolumeTexture8\n\nDECLARE_INTERFACE_(IDirect3DVolumeTexture8, IDirect3DBaseTexture8)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DBaseTexture8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;\n    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;\n    STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DVOLUME_DESC *pDesc) PURE;\n    STDMETHOD(GetVolumeLevel)(THIS_ UINT Level,IDirect3DVolume8** ppVolumeLevel) PURE;\n    STDMETHOD(LockBox)(THIS_ UINT Level,D3DLOCKED_BOX* pLockedVolume,CONST D3DBOX* pBox,DWORD Flags) PURE;\n    STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE;\n    STDMETHOD(AddDirtyBox)(THIS_ CONST D3DBOX* pDirtyBox) PURE;\n};\n\ntypedef struct IDirect3DVolumeTexture8 *LPDIRECT3DVOLUMETEXTURE8, *PDIRECT3DVOLUMETEXTURE8;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DVolumeTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVolumeTexture8_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DVolumeTexture8_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DVolumeTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DVolumeTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DVolumeTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DVolumeTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DVolumeTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DVolumeTexture8_GetType(p) (p)->lpVtbl->GetType(p)\n#define IDirect3DVolumeTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DVolumeTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p)\n#define IDirect3DVolumeTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)\n#define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)\n#define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b)\n#define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d)\n#define IDirect3DVolumeTexture8_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a)\n#define IDirect3DVolumeTexture8_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a)\n#else\n#define IDirect3DVolumeTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DVolumeTexture8_AddRef(p) (p)->AddRef()\n#define IDirect3DVolumeTexture8_Release(p) (p)->Release()\n#define IDirect3DVolumeTexture8_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DVolumeTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DVolumeTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DVolumeTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DVolumeTexture8_SetPriority(p,a) (p)->SetPriority(a)\n#define IDirect3DVolumeTexture8_GetPriority(p) (p)->GetPriority()\n#define IDirect3DVolumeTexture8_PreLoad(p) (p)->PreLoad()\n#define IDirect3DVolumeTexture8_GetType(p) (p)->GetType()\n#define IDirect3DVolumeTexture8_SetLOD(p,a) (p)->SetLOD(a)\n#define IDirect3DVolumeTexture8_GetLOD(p) (p)->GetLOD()\n#define IDirect3DVolumeTexture8_GetLevelCount(p) (p)->GetLevelCount()\n#define IDirect3DVolumeTexture8_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)\n#define IDirect3DVolumeTexture8_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b)\n#define IDirect3DVolumeTexture8_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d)\n#define IDirect3DVolumeTexture8_UnlockBox(p,a) (p)->UnlockBox(a)\n#define IDirect3DVolumeTexture8_AddDirtyBox(p,a) (p)->AddDirtyBox(a)\n#endif\n\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DCubeTexture8\n\nDECLARE_INTERFACE_(IDirect3DCubeTexture8, IDirect3DBaseTexture8)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DBaseTexture8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;\n    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;\n    STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC *pDesc) PURE;\n    STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level,IDirect3DSurface8** ppCubeMapSurface) PURE;\n    STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level,D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags) PURE;\n    STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level) PURE;\n    STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES FaceType,CONST RECT* pDirtyRect) PURE;\n};\n\ntypedef struct IDirect3DCubeTexture8 *LPDIRECT3DCUBETEXTURE8, *PDIRECT3DCUBETEXTURE8;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DCubeTexture8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DCubeTexture8_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DCubeTexture8_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DCubeTexture8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DCubeTexture8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DCubeTexture8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DCubeTexture8_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DCubeTexture8_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DCubeTexture8_GetType(p) (p)->lpVtbl->GetType(p)\n#define IDirect3DCubeTexture8_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DCubeTexture8_GetLOD(p) (p)->lpVtbl->GetLOD(p)\n#define IDirect3DCubeTexture8_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)\n#define IDirect3DCubeTexture8_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)\n#define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c) (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)\n#define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e) (p)->lpVtbl->LockRect(p,a,b,c,d,e)\n#define IDirect3DCubeTexture8_UnlockRect(p,a,b) (p)->lpVtbl->UnlockRect(p,a,b)\n#define IDirect3DCubeTexture8_AddDirtyRect(p,a,b) (p)->lpVtbl->AddDirtyRect(p,a,b)\n#else\n#define IDirect3DCubeTexture8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DCubeTexture8_AddRef(p) (p)->AddRef()\n#define IDirect3DCubeTexture8_Release(p) (p)->Release()\n#define IDirect3DCubeTexture8_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DCubeTexture8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DCubeTexture8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DCubeTexture8_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DCubeTexture8_SetPriority(p,a) (p)->SetPriority(a)\n#define IDirect3DCubeTexture8_GetPriority(p) (p)->GetPriority()\n#define IDirect3DCubeTexture8_PreLoad(p) (p)->PreLoad()\n#define IDirect3DCubeTexture8_GetType(p) (p)->GetType()\n#define IDirect3DCubeTexture8_SetLOD(p,a) (p)->SetLOD(a)\n#define IDirect3DCubeTexture8_GetLOD(p) (p)->GetLOD()\n#define IDirect3DCubeTexture8_GetLevelCount(p) (p)->GetLevelCount()\n#define IDirect3DCubeTexture8_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)\n#define IDirect3DCubeTexture8_GetCubeMapSurface(p,a,b,c) (p)->GetCubeMapSurface(a,b,c)\n#define IDirect3DCubeTexture8_LockRect(p,a,b,c,d,e) (p)->LockRect(a,b,c,d,e)\n#define IDirect3DCubeTexture8_UnlockRect(p,a,b) (p)->UnlockRect(a,b)\n#define IDirect3DCubeTexture8_AddDirtyRect(p,a,b) (p)->AddDirtyRect(a,b)\n#endif\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DVertexBuffer8\n\nDECLARE_INTERFACE_(IDirect3DVertexBuffer8, IDirect3DResource8)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DResource8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    STDMETHOD(Lock)(THIS_ UINT OffsetToLock,UINT SizeToLock,BYTE** ppbData,DWORD Flags) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC *pDesc) PURE;\n};\n\ntypedef struct IDirect3DVertexBuffer8 *LPDIRECT3DVERTEXBUFFER8, *PDIRECT3DVERTEXBUFFER8;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DVertexBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVertexBuffer8_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DVertexBuffer8_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DVertexBuffer8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DVertexBuffer8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DVertexBuffer8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DVertexBuffer8_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DVertexBuffer8_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DVertexBuffer8_GetType(p) (p)->lpVtbl->GetType(p)\n#define IDirect3DVertexBuffer8_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirect3DVertexBuffer8_Unlock(p) (p)->lpVtbl->Unlock(p)\n#define IDirect3DVertexBuffer8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)\n#else\n#define IDirect3DVertexBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DVertexBuffer8_AddRef(p) (p)->AddRef()\n#define IDirect3DVertexBuffer8_Release(p) (p)->Release()\n#define IDirect3DVertexBuffer8_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DVertexBuffer8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DVertexBuffer8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DVertexBuffer8_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DVertexBuffer8_SetPriority(p,a) (p)->SetPriority(a)\n#define IDirect3DVertexBuffer8_GetPriority(p) (p)->GetPriority()\n#define IDirect3DVertexBuffer8_PreLoad(p) (p)->PreLoad()\n#define IDirect3DVertexBuffer8_GetType(p) (p)->GetType()\n#define IDirect3DVertexBuffer8_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)\n#define IDirect3DVertexBuffer8_Unlock(p) (p)->Unlock()\n#define IDirect3DVertexBuffer8_GetDesc(p,a) (p)->GetDesc(a)\n#endif\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DIndexBuffer8\n\nDECLARE_INTERFACE_(IDirect3DIndexBuffer8, IDirect3DResource8)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DResource8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    STDMETHOD(Lock)(THIS_ UINT OffsetToLock,UINT SizeToLock,BYTE** ppbData,DWORD Flags) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC *pDesc) PURE;\n};\n\ntypedef struct IDirect3DIndexBuffer8 *LPDIRECT3DINDEXBUFFER8, *PDIRECT3DINDEXBUFFER8;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DIndexBuffer8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DIndexBuffer8_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DIndexBuffer8_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DIndexBuffer8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DIndexBuffer8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DIndexBuffer8_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DIndexBuffer8_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DIndexBuffer8_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DIndexBuffer8_GetType(p) (p)->lpVtbl->GetType(p)\n#define IDirect3DIndexBuffer8_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirect3DIndexBuffer8_Unlock(p) (p)->lpVtbl->Unlock(p)\n#define IDirect3DIndexBuffer8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)\n#else\n#define IDirect3DIndexBuffer8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DIndexBuffer8_AddRef(p) (p)->AddRef()\n#define IDirect3DIndexBuffer8_Release(p) (p)->Release()\n#define IDirect3DIndexBuffer8_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DIndexBuffer8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DIndexBuffer8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DIndexBuffer8_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DIndexBuffer8_SetPriority(p,a) (p)->SetPriority(a)\n#define IDirect3DIndexBuffer8_GetPriority(p) (p)->GetPriority()\n#define IDirect3DIndexBuffer8_PreLoad(p) (p)->PreLoad()\n#define IDirect3DIndexBuffer8_GetType(p) (p)->GetType()\n#define IDirect3DIndexBuffer8_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)\n#define IDirect3DIndexBuffer8_Unlock(p) (p)->Unlock()\n#define IDirect3DIndexBuffer8_GetDesc(p,a) (p)->GetDesc(a)\n#endif\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DSurface8\n\nDECLARE_INTERFACE_(IDirect3DSurface8, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DSurface8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD(GetContainer)(THIS_ REFIID riid,void** ppContainer) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC *pDesc) PURE;\n    STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags) PURE;\n    STDMETHOD(UnlockRect)(THIS) PURE;\n};\n\ntypedef struct IDirect3DSurface8 *LPDIRECT3DSURFACE8, *PDIRECT3DSURFACE8;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DSurface8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DSurface8_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DSurface8_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DSurface8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DSurface8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DSurface8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DSurface8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DSurface8_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b)\n#define IDirect3DSurface8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)\n#define IDirect3DSurface8_LockRect(p,a,b,c) (p)->lpVtbl->LockRect(p,a,b,c)\n#define IDirect3DSurface8_UnlockRect(p) (p)->lpVtbl->UnlockRect(p)\n#else\n#define IDirect3DSurface8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DSurface8_AddRef(p) (p)->AddRef()\n#define IDirect3DSurface8_Release(p) (p)->Release()\n#define IDirect3DSurface8_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DSurface8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DSurface8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DSurface8_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DSurface8_GetContainer(p,a,b) (p)->GetContainer(a,b)\n#define IDirect3DSurface8_GetDesc(p,a) (p)->GetDesc(a)\n#define IDirect3DSurface8_LockRect(p,a,b,c) (p)->LockRect(a,b,c)\n#define IDirect3DSurface8_UnlockRect(p) (p)->UnlockRect()\n#endif\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DVolume8\n\nDECLARE_INTERFACE_(IDirect3DVolume8, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DVolume8 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice8** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD(GetContainer)(THIS_ REFIID riid,void** ppContainer) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC *pDesc) PURE;\n    STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX * pLockedVolume,CONST D3DBOX* pBox,DWORD Flags) PURE;\n    STDMETHOD(UnlockBox)(THIS) PURE;\n};\n\ntypedef struct IDirect3DVolume8 *LPDIRECT3DVOLUME8, *PDIRECT3DVOLUME8;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DVolume8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVolume8_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DVolume8_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DVolume8_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVolume8_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DVolume8_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DVolume8_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DVolume8_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b)\n#define IDirect3DVolume8_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)\n#define IDirect3DVolume8_LockBox(p,a,b,c) (p)->lpVtbl->LockBox(p,a,b,c)\n#define IDirect3DVolume8_UnlockBox(p) (p)->lpVtbl->UnlockBox(p)\n#else\n#define IDirect3DVolume8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DVolume8_AddRef(p) (p)->AddRef()\n#define IDirect3DVolume8_Release(p) (p)->Release()\n#define IDirect3DVolume8_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DVolume8_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DVolume8_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DVolume8_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DVolume8_GetContainer(p,a,b) (p)->GetContainer(a,b)\n#define IDirect3DVolume8_GetDesc(p,a) (p)->GetDesc(a)\n#define IDirect3DVolume8_LockBox(p,a,b,c) (p)->LockBox(a,b,c)\n#define IDirect3DVolume8_UnlockBox(p) (p)->UnlockBox()\n#endif\n\n/****************************************************************************\n * Flags for SetPrivateData method on all D3D8 interfaces\n *\n * The passed pointer is an IUnknown ptr. The SizeOfData argument to SetPrivateData\n * must be set to sizeof(IUnknown*). Direct3D will call AddRef through this\n * pointer and Release when the private data is destroyed. The data will be\n * destroyed when another SetPrivateData with the same GUID is set, when\n * FreePrivateData is called, or when the D3D8 object is freed.\n ****************************************************************************/\n#define D3DSPD_IUNKNOWN                         0x00000001L\n\n/****************************************************************************\n *\n * Parameter for IDirect3D8 Enum and GetCaps8 functions to get the info for\n * the current mode only.\n *\n ****************************************************************************/\n\n#define D3DCURRENT_DISPLAY_MODE                 0x00EFFFFFL\n\n/****************************************************************************\n *\n * Flags for IDirect3D8::CreateDevice's BehaviorFlags\n *\n ****************************************************************************/\n\n#define D3DCREATE_FPU_PRESERVE                  0x00000002L\n#define D3DCREATE_MULTITHREADED                 0x00000004L\n\n#define D3DCREATE_PUREDEVICE                    0x00000010L\n#define D3DCREATE_SOFTWARE_VERTEXPROCESSING     0x00000020L\n#define D3DCREATE_HARDWARE_VERTEXPROCESSING     0x00000040L\n#define D3DCREATE_MIXED_VERTEXPROCESSING        0x00000080L\n\n#define D3DCREATE_DISABLE_DRIVER_MANAGEMENT     0x00000100L\n\n\n/****************************************************************************\n *\n * Parameter for IDirect3D8::CreateDevice's iAdapter\n *\n ****************************************************************************/\n\n#define D3DADAPTER_DEFAULT                     0\n\n/****************************************************************************\n *\n * Flags for IDirect3D8::EnumAdapters\n *\n ****************************************************************************/\n\n#define D3DENUM_NO_WHQL_LEVEL                   0x00000002L\n\n/****************************************************************************\n *\n * Maximum number of back-buffers supported in DX8\n *\n ****************************************************************************/\n\n#define D3DPRESENT_BACK_BUFFERS_MAX             3L\n\n/****************************************************************************\n *\n * Flags for IDirect3DDevice8::SetGammaRamp\n *\n ****************************************************************************/\n\n#define D3DSGR_NO_CALIBRATION                  0x00000000L\n#define D3DSGR_CALIBRATE                       0x00000001L\n\n/****************************************************************************\n *\n * Flags for IDirect3DDevice8::SetCursorPosition\n *\n ****************************************************************************/\n\n#define D3DCURSOR_IMMEDIATE_UPDATE             0x00000001L\n\n/****************************************************************************\n *\n * Flags for DrawPrimitive/DrawIndexedPrimitive\n *   Also valid for Begin/BeginIndexed\n *   Also valid for VertexBuffer::CreateVertexBuffer\n ****************************************************************************/\n\n\n/*\n *  DirectDraw error codes\n */\n#define _FACD3D  0x876\n#define MAKE_D3DHRESULT( code )  MAKE_HRESULT( 1, _FACD3D, code )\n\n/*\n * Direct3D Errors\n */\n#define D3D_OK                              S_OK\n\n#define D3DERR_WRONGTEXTUREFORMAT               MAKE_D3DHRESULT(2072)\n#define D3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_D3DHRESULT(2073)\n#define D3DERR_UNSUPPORTEDCOLORARG              MAKE_D3DHRESULT(2074)\n#define D3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_D3DHRESULT(2075)\n#define D3DERR_UNSUPPORTEDALPHAARG              MAKE_D3DHRESULT(2076)\n#define D3DERR_TOOMANYOPERATIONS                MAKE_D3DHRESULT(2077)\n#define D3DERR_CONFLICTINGTEXTUREFILTER         MAKE_D3DHRESULT(2078)\n#define D3DERR_UNSUPPORTEDFACTORVALUE           MAKE_D3DHRESULT(2079)\n#define D3DERR_CONFLICTINGRENDERSTATE           MAKE_D3DHRESULT(2081)\n#define D3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_D3DHRESULT(2082)\n#define D3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_D3DHRESULT(2086)\n#define D3DERR_DRIVERINTERNALERROR              MAKE_D3DHRESULT(2087)\n\n#define D3DERR_NOTFOUND                         MAKE_D3DHRESULT(2150)\n#define D3DERR_MOREDATA                         MAKE_D3DHRESULT(2151)\n#define D3DERR_DEVICELOST                       MAKE_D3DHRESULT(2152)\n#define D3DERR_DEVICENOTRESET                   MAKE_D3DHRESULT(2153)\n#define D3DERR_NOTAVAILABLE                     MAKE_D3DHRESULT(2154)\n#define D3DERR_OUTOFVIDEOMEMORY                 MAKE_D3DHRESULT(380)\n#define D3DERR_INVALIDDEVICE                    MAKE_D3DHRESULT(2155)\n#define D3DERR_INVALIDCALL                      MAKE_D3DHRESULT(2156)\n#define D3DERR_DRIVERINVALIDCALL                MAKE_D3DHRESULT(2157)\n\n#ifdef __cplusplus\n};\n#endif\n\n#endif /* (DIRECT3D_VERSION >= 0x0800) */\n#endif /* _D3D_H_ */\n\n"
  },
  {
    "path": "Include/d3d8caps.h",
    "content": "/*==========================================================================;\n *\n *  Copyright (C) Microsoft Corporation.  All Rights Reserved.\n *\n *  File:       d3d8caps.h\n *  Content:    Direct3D capabilities include file\n *\n ***************************************************************************/\n\n#ifndef _D3D8CAPS_H\n#define _D3D8CAPS_H\n\n#ifndef DIRECT3D_VERSION\n#define DIRECT3D_VERSION         0x0800\n#endif  //DIRECT3D_VERSION\n\n// include this file content only if compiling for DX8 interfaces\n#if(DIRECT3D_VERSION >= 0x0800)\n\n#if defined(_X86_) || defined(_IA64_)\n#pragma pack(4)\n#endif\n\ntypedef struct _D3DCAPS8\n{\n    /* Device Info */\n    D3DDEVTYPE  DeviceType;\n    UINT    AdapterOrdinal;\n\n    /* Caps from DX7 Draw */\n    DWORD   Caps;\n    DWORD   Caps2;\n    DWORD   Caps3;\n    DWORD   PresentationIntervals;\n\n    /* Cursor Caps */\n    DWORD   CursorCaps;\n\n    /* 3D Device Caps */\n    DWORD   DevCaps;\n\n    DWORD   PrimitiveMiscCaps;\n    DWORD   RasterCaps;\n    DWORD   ZCmpCaps;\n    DWORD   SrcBlendCaps;\n    DWORD   DestBlendCaps;\n    DWORD   AlphaCmpCaps;\n    DWORD   ShadeCaps;\n    DWORD   TextureCaps;\n    DWORD   TextureFilterCaps;          // D3DPTFILTERCAPS for IDirect3DTexture8's\n    DWORD   CubeTextureFilterCaps;      // D3DPTFILTERCAPS for IDirect3DCubeTexture8's\n    DWORD   VolumeTextureFilterCaps;    // D3DPTFILTERCAPS for IDirect3DVolumeTexture8's\n    DWORD   TextureAddressCaps;         // D3DPTADDRESSCAPS for IDirect3DTexture8's\n    DWORD   VolumeTextureAddressCaps;   // D3DPTADDRESSCAPS for IDirect3DVolumeTexture8's\n\n    DWORD   LineCaps;                   // D3DLINECAPS\n\n    DWORD   MaxTextureWidth, MaxTextureHeight;\n    DWORD   MaxVolumeExtent;\n\n    DWORD   MaxTextureRepeat;\n    DWORD   MaxTextureAspectRatio;\n    DWORD   MaxAnisotropy;\n    float   MaxVertexW;\n\n    float   GuardBandLeft;\n    float   GuardBandTop;\n    float   GuardBandRight;\n    float   GuardBandBottom;\n\n    float   ExtentsAdjust;\n    DWORD   StencilCaps;\n\n    DWORD   FVFCaps;\n    DWORD   TextureOpCaps;\n    DWORD   MaxTextureBlendStages;\n    DWORD   MaxSimultaneousTextures;\n\n    DWORD   VertexProcessingCaps;\n    DWORD   MaxActiveLights;\n    DWORD   MaxUserClipPlanes;\n    DWORD   MaxVertexBlendMatrices;\n    DWORD   MaxVertexBlendMatrixIndex;\n\n    float   MaxPointSize;\n\n    DWORD   MaxPrimitiveCount;          // max number of primitives per DrawPrimitive call\n    DWORD   MaxVertexIndex;\n    DWORD   MaxStreams;\n    DWORD   MaxStreamStride;            // max stride for SetStreamSource\n\n    DWORD   VertexShaderVersion;\n    DWORD   MaxVertexShaderConst;       // number of vertex shader constant registers\n\n    DWORD   PixelShaderVersion;\n    float   MaxPixelShaderValue;        // max value of pixel shader arithmetic component\n\n} D3DCAPS8;\n\n//\n// BIT DEFINES FOR D3DCAPS8 DWORD MEMBERS\n//\n\n//\n// Caps\n//\n#define D3DCAPS_READ_SCANLINE           0x00020000L\n\n//\n// Caps2\n//\n#define D3DCAPS2_NO2DDURING3DSCENE      0x00000002L\n#define D3DCAPS2_FULLSCREENGAMMA        0x00020000L\n#define D3DCAPS2_CANRENDERWINDOWED      0x00080000L\n#define D3DCAPS2_CANCALIBRATEGAMMA      0x00100000L\n#define D3DCAPS2_RESERVED               0x02000000L\n#define D3DCAPS2_CANMANAGERESOURCE      0x10000000L\n#define D3DCAPS2_DYNAMICTEXTURES        0x20000000L\n\n//\n// Caps3\n//\n#define D3DCAPS3_RESERVED               0x8000001fL\n\n// Indicates that the device can respect the ALPHABLENDENABLE render state\n// when fullscreen while using the FLIP or DISCARD swap effect.\n// COPY and COPYVSYNC swap effects work whether or not this flag is set.\n#define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD   0x00000020L\n\n//\n// PresentationIntervals\n//\n#define D3DPRESENT_INTERVAL_DEFAULT     0x00000000L\n#define D3DPRESENT_INTERVAL_ONE         0x00000001L\n#define D3DPRESENT_INTERVAL_TWO         0x00000002L\n#define D3DPRESENT_INTERVAL_THREE       0x00000004L\n#define D3DPRESENT_INTERVAL_FOUR        0x00000008L\n#define D3DPRESENT_INTERVAL_IMMEDIATE   0x80000000L\n\n//\n// CursorCaps\n//\n// Driver supports HW color cursor in at least hi-res modes(height >=400)\n#define D3DCURSORCAPS_COLOR             0x00000001L\n// Driver supports HW cursor also in low-res modes(height < 400)\n#define D3DCURSORCAPS_LOWRES            0x00000002L\n\n//\n// DevCaps\n//\n#define D3DDEVCAPS_EXECUTESYSTEMMEMORY  0x00000010L /* Device can use execute buffers from system memory */\n#define D3DDEVCAPS_EXECUTEVIDEOMEMORY   0x00000020L /* Device can use execute buffers from video memory */\n#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040L /* Device can use TL buffers from system memory */\n#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY  0x00000080L /* Device can use TL buffers from video memory */\n#define D3DDEVCAPS_TEXTURESYSTEMMEMORY  0x00000100L /* Device can texture from system memory */\n#define D3DDEVCAPS_TEXTUREVIDEOMEMORY   0x00000200L /* Device can texture from device memory */\n#define D3DDEVCAPS_DRAWPRIMTLVERTEX     0x00000400L /* Device can draw TLVERTEX primitives */\n#define D3DDEVCAPS_CANRENDERAFTERFLIP   0x00000800L /* Device can render without waiting for flip to complete */\n#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x00001000L /* Device can texture from nonlocal video memory */\n#define D3DDEVCAPS_DRAWPRIMITIVES2      0x00002000L /* Device can support DrawPrimitives2 */\n#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x00004000L /* Device is texturing from separate memory pools */\n#define D3DDEVCAPS_DRAWPRIMITIVES2EX    0x00008000L /* Device can support Extended DrawPrimitives2 i.e. DX7 compliant driver*/\n#define D3DDEVCAPS_HWTRANSFORMANDLIGHT  0x00010000L /* Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also */\n#define D3DDEVCAPS_CANBLTSYSTONONLOCAL  0x00020000L /* Device supports a Tex Blt from system memory to non-local vidmem */\n#define D3DDEVCAPS_HWRASTERIZATION      0x00080000L /* Device has HW acceleration for rasterization */\n#define D3DDEVCAPS_PUREDEVICE           0x00100000L /* Device supports D3DCREATE_PUREDEVICE */\n#define D3DDEVCAPS_QUINTICRTPATCHES     0x00200000L /* Device supports quintic Beziers and BSplines */\n#define D3DDEVCAPS_RTPATCHES            0x00400000L /* Device supports Rect and Tri patches */\n#define D3DDEVCAPS_RTPATCHHANDLEZERO    0x00800000L /* Indicates that RT Patches may be drawn efficiently using handle 0 */\n#define D3DDEVCAPS_NPATCHES             0x01000000L /* Device supports N-Patches */\n\n//\n// PrimitiveMiscCaps\n//\n#define D3DPMISCCAPS_MASKZ              0x00000002L\n#define D3DPMISCCAPS_LINEPATTERNREP     0x00000004L\n#define D3DPMISCCAPS_CULLNONE           0x00000010L\n#define D3DPMISCCAPS_CULLCW             0x00000020L\n#define D3DPMISCCAPS_CULLCCW            0x00000040L\n#define D3DPMISCCAPS_COLORWRITEENABLE   0x00000080L\n#define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS 0x00000100L /* Device correctly clips scaled points to clip planes */\n#define D3DPMISCCAPS_CLIPTLVERTS        0x00000200L /* device will clip post-transformed vertex primitives */\n#define D3DPMISCCAPS_TSSARGTEMP         0x00000400L /* device supports D3DTA_TEMP for temporary register */\n#define D3DPMISCCAPS_BLENDOP            0x00000800L /* device supports D3DRS_BLENDOP */\n#define D3DPMISCCAPS_NULLREFERENCE      0x00001000L /* Reference Device that doesnt render */\n\n//\n// LineCaps\n//\n#define D3DLINECAPS_TEXTURE             0x00000001L\n#define D3DLINECAPS_ZTEST               0x00000002L\n#define D3DLINECAPS_BLEND               0x00000004L\n#define D3DLINECAPS_ALPHACMP            0x00000008L\n#define D3DLINECAPS_FOG                 0x00000010L\n\n//\n// RasterCaps\n//\n#define D3DPRASTERCAPS_DITHER           0x00000001L\n#define D3DPRASTERCAPS_PAT              0x00000008L\n#define D3DPRASTERCAPS_ZTEST            0x00000010L\n#define D3DPRASTERCAPS_FOGVERTEX        0x00000080L\n#define D3DPRASTERCAPS_FOGTABLE         0x00000100L\n#define D3DPRASTERCAPS_ANTIALIASEDGES   0x00001000L\n#define D3DPRASTERCAPS_MIPMAPLODBIAS    0x00002000L\n#define D3DPRASTERCAPS_ZBIAS            0x00004000L\n#define D3DPRASTERCAPS_ZBUFFERLESSHSR   0x00008000L\n#define D3DPRASTERCAPS_FOGRANGE         0x00010000L\n#define D3DPRASTERCAPS_ANISOTROPY       0x00020000L\n#define D3DPRASTERCAPS_WBUFFER          0x00040000L\n#define D3DPRASTERCAPS_WFOG             0x00100000L\n#define D3DPRASTERCAPS_ZFOG             0x00200000L\n#define D3DPRASTERCAPS_COLORPERSPECTIVE 0x00400000L /* Device iterates colors perspective correct */\n#define D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE  0x00800000L\n\n//\n// ZCmpCaps, AlphaCmpCaps\n//\n#define D3DPCMPCAPS_NEVER               0x00000001L\n#define D3DPCMPCAPS_LESS                0x00000002L\n#define D3DPCMPCAPS_EQUAL               0x00000004L\n#define D3DPCMPCAPS_LESSEQUAL           0x00000008L\n#define D3DPCMPCAPS_GREATER             0x00000010L\n#define D3DPCMPCAPS_NOTEQUAL            0x00000020L\n#define D3DPCMPCAPS_GREATEREQUAL        0x00000040L\n#define D3DPCMPCAPS_ALWAYS              0x00000080L\n\n//\n// SourceBlendCaps, DestBlendCaps\n//\n#define D3DPBLENDCAPS_ZERO              0x00000001L\n#define D3DPBLENDCAPS_ONE               0x00000002L\n#define D3DPBLENDCAPS_SRCCOLOR          0x00000004L\n#define D3DPBLENDCAPS_INVSRCCOLOR       0x00000008L\n#define D3DPBLENDCAPS_SRCALPHA          0x00000010L\n#define D3DPBLENDCAPS_INVSRCALPHA       0x00000020L\n#define D3DPBLENDCAPS_DESTALPHA         0x00000040L\n#define D3DPBLENDCAPS_INVDESTALPHA      0x00000080L\n#define D3DPBLENDCAPS_DESTCOLOR         0x00000100L\n#define D3DPBLENDCAPS_INVDESTCOLOR      0x00000200L\n#define D3DPBLENDCAPS_SRCALPHASAT       0x00000400L\n#define D3DPBLENDCAPS_BOTHSRCALPHA      0x00000800L\n#define D3DPBLENDCAPS_BOTHINVSRCALPHA   0x00001000L\n\n//\n// ShadeCaps\n//\n#define D3DPSHADECAPS_COLORGOURAUDRGB       0x00000008L\n#define D3DPSHADECAPS_SPECULARGOURAUDRGB    0x00000200L\n#define D3DPSHADECAPS_ALPHAGOURAUDBLEND     0x00004000L\n#define D3DPSHADECAPS_FOGGOURAUD            0x00080000L\n\n//\n// TextureCaps\n//\n#define D3DPTEXTURECAPS_PERSPECTIVE         0x00000001L /* Perspective-correct texturing is supported */\n#define D3DPTEXTURECAPS_POW2                0x00000002L /* Power-of-2 texture dimensions are required - applies to non-Cube/Volume textures only. */\n#define D3DPTEXTURECAPS_ALPHA               0x00000004L /* Alpha in texture pixels is supported */\n#define D3DPTEXTURECAPS_SQUAREONLY          0x00000020L /* Only square textures are supported */\n#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00000040L /* Texture indices are not scaled by the texture size prior to interpolation */\n#define D3DPTEXTURECAPS_ALPHAPALETTE        0x00000080L /* Device can draw alpha from texture palettes */\n// Device can use non-POW2 textures if:\n//  1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage\n//  2) D3DRS_WRAP(N) is zero for this texture's coordinates\n//  3) mip mapping is not enabled (use magnification filter only)\n#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL  0x00000100L\n#define D3DPTEXTURECAPS_PROJECTED           0x00000400L /* Device can do D3DTTFF_PROJECTED */\n#define D3DPTEXTURECAPS_CUBEMAP             0x00000800L /* Device can do cubemap textures */\n#define D3DPTEXTURECAPS_VOLUMEMAP           0x00002000L /* Device can do volume textures */\n#define D3DPTEXTURECAPS_MIPMAP              0x00004000L /* Device can do mipmapped textures */\n#define D3DPTEXTURECAPS_MIPVOLUMEMAP        0x00008000L /* Device can do mipmapped volume textures */\n#define D3DPTEXTURECAPS_MIPCUBEMAP          0x00010000L /* Device can do mipmapped cube maps */\n#define D3DPTEXTURECAPS_CUBEMAP_POW2        0x00020000L /* Device requires that cubemaps be power-of-2 dimension */\n#define D3DPTEXTURECAPS_VOLUMEMAP_POW2      0x00040000L /* Device requires that volume maps be power-of-2 dimension */\n\n//\n// TextureFilterCaps\n//\n#define D3DPTFILTERCAPS_MINFPOINT           0x00000100L /* Min Filter */\n#define D3DPTFILTERCAPS_MINFLINEAR          0x00000200L\n#define D3DPTFILTERCAPS_MINFANISOTROPIC     0x00000400L\n#define D3DPTFILTERCAPS_MIPFPOINT           0x00010000L /* Mip Filter */\n#define D3DPTFILTERCAPS_MIPFLINEAR          0x00020000L\n#define D3DPTFILTERCAPS_MAGFPOINT           0x01000000L /* Mag Filter */\n#define D3DPTFILTERCAPS_MAGFLINEAR          0x02000000L\n#define D3DPTFILTERCAPS_MAGFANISOTROPIC     0x04000000L\n#define D3DPTFILTERCAPS_MAGFAFLATCUBIC      0x08000000L\n#define D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC   0x10000000L\n\n//\n// TextureAddressCaps\n//\n#define D3DPTADDRESSCAPS_WRAP           0x00000001L\n#define D3DPTADDRESSCAPS_MIRROR         0x00000002L\n#define D3DPTADDRESSCAPS_CLAMP          0x00000004L\n#define D3DPTADDRESSCAPS_BORDER         0x00000008L\n#define D3DPTADDRESSCAPS_INDEPENDENTUV  0x00000010L\n#define D3DPTADDRESSCAPS_MIRRORONCE     0x00000020L\n\n//\n// StencilCaps\n//\n#define D3DSTENCILCAPS_KEEP             0x00000001L\n#define D3DSTENCILCAPS_ZERO             0x00000002L\n#define D3DSTENCILCAPS_REPLACE          0x00000004L\n#define D3DSTENCILCAPS_INCRSAT          0x00000008L\n#define D3DSTENCILCAPS_DECRSAT          0x00000010L\n#define D3DSTENCILCAPS_INVERT           0x00000020L\n#define D3DSTENCILCAPS_INCR             0x00000040L\n#define D3DSTENCILCAPS_DECR             0x00000080L\n\n//\n// TextureOpCaps\n//\n#define D3DTEXOPCAPS_DISABLE                    0x00000001L\n#define D3DTEXOPCAPS_SELECTARG1                 0x00000002L\n#define D3DTEXOPCAPS_SELECTARG2                 0x00000004L\n#define D3DTEXOPCAPS_MODULATE                   0x00000008L\n#define D3DTEXOPCAPS_MODULATE2X                 0x00000010L\n#define D3DTEXOPCAPS_MODULATE4X                 0x00000020L\n#define D3DTEXOPCAPS_ADD                        0x00000040L\n#define D3DTEXOPCAPS_ADDSIGNED                  0x00000080L\n#define D3DTEXOPCAPS_ADDSIGNED2X                0x00000100L\n#define D3DTEXOPCAPS_SUBTRACT                   0x00000200L\n#define D3DTEXOPCAPS_ADDSMOOTH                  0x00000400L\n#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA          0x00000800L\n#define D3DTEXOPCAPS_BLENDTEXTUREALPHA          0x00001000L\n#define D3DTEXOPCAPS_BLENDFACTORALPHA           0x00002000L\n#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM        0x00004000L\n#define D3DTEXOPCAPS_BLENDCURRENTALPHA          0x00008000L\n#define D3DTEXOPCAPS_PREMODULATE                0x00010000L\n#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR     0x00020000L\n#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA     0x00040000L\n#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR  0x00080000L\n#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA  0x00100000L\n#define D3DTEXOPCAPS_BUMPENVMAP                 0x00200000L\n#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE        0x00400000L\n#define D3DTEXOPCAPS_DOTPRODUCT3                0x00800000L\n#define D3DTEXOPCAPS_MULTIPLYADD                0x01000000L\n#define D3DTEXOPCAPS_LERP                       0x02000000L\n\n//\n// FVFCaps\n//\n#define D3DFVFCAPS_TEXCOORDCOUNTMASK    0x0000ffffL /* mask for texture coordinate count field */\n#define D3DFVFCAPS_DONOTSTRIPELEMENTS   0x00080000L /* Device prefers that vertex elements not be stripped */\n#define D3DFVFCAPS_PSIZE                0x00100000L /* Device can receive point size */\n\n//\n// VertexProcessingCaps\n//\n#define D3DVTXPCAPS_TEXGEN              0x00000001L /* device can do texgen */\n#define D3DVTXPCAPS_MATERIALSOURCE7     0x00000002L /* device can do DX7-level colormaterialsource ops */\n#define D3DVTXPCAPS_DIRECTIONALLIGHTS   0x00000008L /* device can do directional lights */\n#define D3DVTXPCAPS_POSITIONALLIGHTS    0x00000010L /* device can do positional lights (includes point and spot) */\n#define D3DVTXPCAPS_LOCALVIEWER         0x00000020L /* device can do local viewer */\n#define D3DVTXPCAPS_TWEENING            0x00000040L /* device can do vertex tweening */\n#define D3DVTXPCAPS_NO_VSDT_UBYTE4      0x00000080L /* device does not support D3DVSDT_UBYTE4 */\n\n#pragma pack()\n\n#endif /* (DIRECT3D_VERSION >= 0x0800) */\n#endif /* _D3D8CAPS_H_ */\n\n"
  },
  {
    "path": "Include/d3d8types.h",
    "content": "/*==========================================================================;\n *\n *  Copyright (C) Microsoft Corporation.  All Rights Reserved.\n *\n *  File:       d3d8types.h\n *  Content:    Direct3D capabilities include file\n *\n ***************************************************************************/\n\n#ifndef _D3D8TYPES_H_\n#define _D3D8TYPES_H_\n\n#ifndef DIRECT3D_VERSION\n#define DIRECT3D_VERSION         0x0800\n#endif  //DIRECT3D_VERSION\n\n// include this file content only if compiling for DX8 interfaces\n#if(DIRECT3D_VERSION >= 0x0800)\n\n#include <float.h>\n\n#if _MSC_VER >= 1200\n#pragma warning(push)\n#endif\n#pragma warning(disable:4201) // anonymous unions warning\n#if defined(_X86_) || defined(_IA64_)\n#pragma pack(4)\n#endif\n\n// D3DCOLOR is equivalent to D3DFMT_A8R8G8B8\n#ifndef D3DCOLOR_DEFINED\ntypedef DWORD D3DCOLOR;\n#define D3DCOLOR_DEFINED\n#endif\n\n// maps unsigned 8 bits/channel to D3DCOLOR\n#define D3DCOLOR_ARGB(a,r,g,b) \\\n    ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))\n#define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)\n#define D3DCOLOR_XRGB(r,g,b)   D3DCOLOR_ARGB(0xff,r,g,b)\n\n// maps floating point channels (0.f to 1.f range) to D3DCOLOR\n#define D3DCOLOR_COLORVALUE(r,g,b,a) \\\n    D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))\n\n\n#ifndef D3DVECTOR_DEFINED\ntypedef struct _D3DVECTOR {\n    float x;\n    float y;\n    float z;\n} D3DVECTOR;\n#define D3DVECTOR_DEFINED\n#endif\n\n#ifndef D3DCOLORVALUE_DEFINED\ntypedef struct _D3DCOLORVALUE {\n    float r;\n    float g;\n    float b;\n    float a;\n} D3DCOLORVALUE;\n#define D3DCOLORVALUE_DEFINED\n#endif\n\n#ifndef D3DRECT_DEFINED\ntypedef struct _D3DRECT {\n    LONG x1;\n    LONG y1;\n    LONG x2;\n    LONG y2;\n} D3DRECT;\n#define D3DRECT_DEFINED\n#endif\n\n#ifndef D3DMATRIX_DEFINED\ntypedef struct _D3DMATRIX {\n    union {\n        struct {\n            float        _11, _12, _13, _14;\n            float        _21, _22, _23, _24;\n            float        _31, _32, _33, _34;\n            float        _41, _42, _43, _44;\n\n        };\n        float m[4][4];\n    };\n} D3DMATRIX;\n#define D3DMATRIX_DEFINED\n#endif\n\ntypedef struct _D3DVIEWPORT8 {\n    DWORD       X;\n    DWORD       Y;            /* Viewport Top left */\n    DWORD       Width;\n    DWORD       Height;       /* Viewport Dimensions */\n    float       MinZ;         /* Min/max of clip Volume */\n    float       MaxZ;\n} D3DVIEWPORT8;\n\n/*\n * Values for clip fields.\n */\n\n// Max number of user clipping planes, supported in D3D.\n#define D3DMAXUSERCLIPPLANES 32\n\n// These bits could be ORed together to use with D3DRS_CLIPPLANEENABLE\n//\n#define D3DCLIPPLANE0 (1 << 0)\n#define D3DCLIPPLANE1 (1 << 1)\n#define D3DCLIPPLANE2 (1 << 2)\n#define D3DCLIPPLANE3 (1 << 3)\n#define D3DCLIPPLANE4 (1 << 4)\n#define D3DCLIPPLANE5 (1 << 5)\n\n// The following bits are used in the ClipUnion and ClipIntersection\n// members of the D3DCLIPSTATUS8\n//\n\n#define D3DCS_LEFT        0x00000001L\n#define D3DCS_RIGHT       0x00000002L\n#define D3DCS_TOP         0x00000004L\n#define D3DCS_BOTTOM      0x00000008L\n#define D3DCS_FRONT       0x00000010L\n#define D3DCS_BACK        0x00000020L\n#define D3DCS_PLANE0      0x00000040L\n#define D3DCS_PLANE1      0x00000080L\n#define D3DCS_PLANE2      0x00000100L\n#define D3DCS_PLANE3      0x00000200L\n#define D3DCS_PLANE4      0x00000400L\n#define D3DCS_PLANE5      0x00000800L\n\n#define D3DCS_ALL (D3DCS_LEFT   | \\\n                   D3DCS_RIGHT  | \\\n                   D3DCS_TOP    | \\\n                   D3DCS_BOTTOM | \\\n                   D3DCS_FRONT  | \\\n                   D3DCS_BACK   | \\\n                   D3DCS_PLANE0 | \\\n                   D3DCS_PLANE1 | \\\n                   D3DCS_PLANE2 | \\\n                   D3DCS_PLANE3 | \\\n                   D3DCS_PLANE4 | \\\n                   D3DCS_PLANE5)\n\ntypedef struct _D3DCLIPSTATUS8 {\n    DWORD ClipUnion;\n    DWORD ClipIntersection;\n} D3DCLIPSTATUS8;\n\ntypedef struct _D3DMATERIAL8 {\n    D3DCOLORVALUE   Diffuse;        /* Diffuse color RGBA */\n    D3DCOLORVALUE   Ambient;        /* Ambient color RGB */\n    D3DCOLORVALUE   Specular;       /* Specular 'shininess' */\n    D3DCOLORVALUE   Emissive;       /* Emissive color RGB */\n    float           Power;          /* Sharpness if specular highlight */\n} D3DMATERIAL8;\n\ntypedef enum _D3DLIGHTTYPE {\n    D3DLIGHT_POINT          = 1,\n    D3DLIGHT_SPOT           = 2,\n    D3DLIGHT_DIRECTIONAL    = 3,\n    D3DLIGHT_FORCE_DWORD    = 0x7fffffff, /* force 32-bit size enum */\n} D3DLIGHTTYPE;\n\ntypedef struct _D3DLIGHT8 {\n    D3DLIGHTTYPE    Type;            /* Type of light source */\n    D3DCOLORVALUE   Diffuse;         /* Diffuse color of light */\n    D3DCOLORVALUE   Specular;        /* Specular color of light */\n    D3DCOLORVALUE   Ambient;         /* Ambient color of light */\n    D3DVECTOR       Position;         /* Position in world space */\n    D3DVECTOR       Direction;        /* Direction in world space */\n    float           Range;            /* Cutoff range */\n    float           Falloff;          /* Falloff */\n    float           Attenuation0;     /* Constant attenuation */\n    float           Attenuation1;     /* Linear attenuation */\n    float           Attenuation2;     /* Quadratic attenuation */\n    float           Theta;            /* Inner angle of spotlight cone */\n    float           Phi;              /* Outer angle of spotlight cone */\n} D3DLIGHT8;\n\n/*\n * Options for clearing\n */\n#define D3DCLEAR_TARGET            0x00000001l  /* Clear target surface */\n#define D3DCLEAR_ZBUFFER           0x00000002l  /* Clear target z buffer */\n#define D3DCLEAR_STENCIL           0x00000004l  /* Clear stencil planes */\n\n/*\n * The following defines the rendering states\n */\n\ntypedef enum _D3DSHADEMODE {\n    D3DSHADE_FLAT               = 1,\n    D3DSHADE_GOURAUD            = 2,\n    D3DSHADE_PHONG              = 3,\n    D3DSHADE_FORCE_DWORD        = 0x7fffffff, /* force 32-bit size enum */\n} D3DSHADEMODE;\n\ntypedef enum _D3DFILLMODE {\n    D3DFILL_POINT               = 1,\n    D3DFILL_WIREFRAME           = 2,\n    D3DFILL_SOLID               = 3,\n    D3DFILL_FORCE_DWORD         = 0x7fffffff, /* force 32-bit size enum */\n} D3DFILLMODE;\n\ntypedef struct _D3DLINEPATTERN {\n    WORD    wRepeatFactor;\n    WORD    wLinePattern;\n} D3DLINEPATTERN;\n\ntypedef enum _D3DBLEND {\n    D3DBLEND_ZERO               = 1,\n    D3DBLEND_ONE                = 2,\n    D3DBLEND_SRCCOLOR           = 3,\n    D3DBLEND_INVSRCCOLOR        = 4,\n    D3DBLEND_SRCALPHA           = 5,\n    D3DBLEND_INVSRCALPHA        = 6,\n    D3DBLEND_DESTALPHA          = 7,\n    D3DBLEND_INVDESTALPHA       = 8,\n    D3DBLEND_DESTCOLOR          = 9,\n    D3DBLEND_INVDESTCOLOR       = 10,\n    D3DBLEND_SRCALPHASAT        = 11,\n    D3DBLEND_BOTHSRCALPHA       = 12,\n    D3DBLEND_BOTHINVSRCALPHA    = 13,\n    D3DBLEND_FORCE_DWORD        = 0x7fffffff, /* force 32-bit size enum */\n} D3DBLEND;\n\ntypedef enum _D3DBLENDOP {\n    D3DBLENDOP_ADD              = 1,\n    D3DBLENDOP_SUBTRACT         = 2,\n    D3DBLENDOP_REVSUBTRACT      = 3,\n    D3DBLENDOP_MIN              = 4,\n    D3DBLENDOP_MAX              = 5,\n    D3DBLENDOP_FORCE_DWORD      = 0x7fffffff, /* force 32-bit size enum */\n} D3DBLENDOP;\n\ntypedef enum _D3DTEXTUREADDRESS {\n    D3DTADDRESS_WRAP            = 1,\n    D3DTADDRESS_MIRROR          = 2,\n    D3DTADDRESS_CLAMP           = 3,\n    D3DTADDRESS_BORDER          = 4,\n    D3DTADDRESS_MIRRORONCE      = 5,\n    D3DTADDRESS_FORCE_DWORD     = 0x7fffffff, /* force 32-bit size enum */\n} D3DTEXTUREADDRESS;\n\ntypedef enum _D3DCULL {\n    D3DCULL_NONE                = 1,\n    D3DCULL_CW                  = 2,\n    D3DCULL_CCW                 = 3,\n    D3DCULL_FORCE_DWORD         = 0x7fffffff, /* force 32-bit size enum */\n} D3DCULL;\n\ntypedef enum _D3DCMPFUNC {\n    D3DCMP_NEVER                = 1,\n    D3DCMP_LESS                 = 2,\n    D3DCMP_EQUAL                = 3,\n    D3DCMP_LESSEQUAL            = 4,\n    D3DCMP_GREATER              = 5,\n    D3DCMP_NOTEQUAL             = 6,\n    D3DCMP_GREATEREQUAL         = 7,\n    D3DCMP_ALWAYS               = 8,\n    D3DCMP_FORCE_DWORD          = 0x7fffffff, /* force 32-bit size enum */\n} D3DCMPFUNC;\n\ntypedef enum _D3DSTENCILOP {\n    D3DSTENCILOP_KEEP           = 1,\n    D3DSTENCILOP_ZERO           = 2,\n    D3DSTENCILOP_REPLACE        = 3,\n    D3DSTENCILOP_INCRSAT        = 4,\n    D3DSTENCILOP_DECRSAT        = 5,\n    D3DSTENCILOP_INVERT         = 6,\n    D3DSTENCILOP_INCR           = 7,\n    D3DSTENCILOP_DECR           = 8,\n    D3DSTENCILOP_FORCE_DWORD    = 0x7fffffff, /* force 32-bit size enum */\n} D3DSTENCILOP;\n\ntypedef enum _D3DFOGMODE {\n    D3DFOG_NONE                 = 0,\n    D3DFOG_EXP                  = 1,\n    D3DFOG_EXP2                 = 2,\n    D3DFOG_LINEAR               = 3,\n    D3DFOG_FORCE_DWORD          = 0x7fffffff, /* force 32-bit size enum */\n} D3DFOGMODE;\n\ntypedef enum _D3DZBUFFERTYPE {\n    D3DZB_FALSE                 = 0,\n    D3DZB_TRUE                  = 1, // Z buffering\n    D3DZB_USEW                  = 2, // W buffering\n    D3DZB_FORCE_DWORD           = 0x7fffffff, /* force 32-bit size enum */\n} D3DZBUFFERTYPE;\n\n// Primitives supported by draw-primitive API\ntypedef enum _D3DPRIMITIVETYPE {\n    D3DPT_POINTLIST             = 1,\n    D3DPT_LINELIST              = 2,\n    D3DPT_LINESTRIP             = 3,\n    D3DPT_TRIANGLELIST          = 4,\n    D3DPT_TRIANGLESTRIP         = 5,\n    D3DPT_TRIANGLEFAN           = 6,\n    D3DPT_FORCE_DWORD           = 0x7fffffff, /* force 32-bit size enum */\n} D3DPRIMITIVETYPE;\n\ntypedef enum _D3DTRANSFORMSTATETYPE {\n    D3DTS_VIEW          = 2,\n    D3DTS_PROJECTION    = 3,\n    D3DTS_TEXTURE0      = 16,\n    D3DTS_TEXTURE1      = 17,\n    D3DTS_TEXTURE2      = 18,\n    D3DTS_TEXTURE3      = 19,\n    D3DTS_TEXTURE4      = 20,\n    D3DTS_TEXTURE5      = 21,\n    D3DTS_TEXTURE6      = 22,\n    D3DTS_TEXTURE7      = 23,\n    D3DTS_FORCE_DWORD     = 0x7fffffff, /* force 32-bit size enum */\n} D3DTRANSFORMSTATETYPE;\n\n#define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)\n#define D3DTS_WORLD  D3DTS_WORLDMATRIX(0)\n#define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)\n#define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)\n#define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)\n\ntypedef enum _D3DRENDERSTATETYPE {\n    D3DRS_ZENABLE                   = 7,    /* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) */\n    D3DRS_FILLMODE                  = 8,    /* D3DFILLMODE */\n    D3DRS_SHADEMODE                 = 9,    /* D3DSHADEMODE */\n    D3DRS_LINEPATTERN               = 10,   /* D3DLINEPATTERN */\n    D3DRS_ZWRITEENABLE              = 14,   /* TRUE to enable z writes */\n    D3DRS_ALPHATESTENABLE           = 15,   /* TRUE to enable alpha tests */\n    D3DRS_LASTPIXEL                 = 16,   /* TRUE for last-pixel on lines */\n    D3DRS_SRCBLEND                  = 19,   /* D3DBLEND */\n    D3DRS_DESTBLEND                 = 20,   /* D3DBLEND */\n    D3DRS_CULLMODE                  = 22,   /* D3DCULL */\n    D3DRS_ZFUNC                     = 23,   /* D3DCMPFUNC */\n    D3DRS_ALPHAREF                  = 24,   /* D3DFIXED */\n    D3DRS_ALPHAFUNC                 = 25,   /* D3DCMPFUNC */\n    D3DRS_DITHERENABLE              = 26,   /* TRUE to enable dithering */\n    D3DRS_ALPHABLENDENABLE          = 27,   /* TRUE to enable alpha blending */\n    D3DRS_FOGENABLE                 = 28,   /* TRUE to enable fog blending */\n    D3DRS_SPECULARENABLE            = 29,   /* TRUE to enable specular */\n    D3DRS_ZVISIBLE                  = 30,   /* TRUE to enable z checking */\n    D3DRS_FOGCOLOR                  = 34,   /* D3DCOLOR */\n    D3DRS_FOGTABLEMODE              = 35,   /* D3DFOGMODE */\n    D3DRS_FOGSTART                  = 36,   /* Fog start (for both vertex and pixel fog) */\n    D3DRS_FOGEND                    = 37,   /* Fog end      */\n    D3DRS_FOGDENSITY                = 38,   /* Fog density  */\n    D3DRS_EDGEANTIALIAS             = 40,   /* TRUE to enable edge antialiasing */\n    D3DRS_ZBIAS                     = 47,   /* LONG Z bias */\n    D3DRS_RANGEFOGENABLE            = 48,   /* Enables range-based fog */\n    D3DRS_STENCILENABLE             = 52,   /* BOOL enable/disable stenciling */\n    D3DRS_STENCILFAIL               = 53,   /* D3DSTENCILOP to do if stencil test fails */\n    D3DRS_STENCILZFAIL              = 54,   /* D3DSTENCILOP to do if stencil test passes and Z test fails */\n    D3DRS_STENCILPASS               = 55,   /* D3DSTENCILOP to do if both stencil and Z tests pass */\n    D3DRS_STENCILFUNC               = 56,   /* D3DCMPFUNC fn.  Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */\n    D3DRS_STENCILREF                = 57,   /* Reference value used in stencil test */\n    D3DRS_STENCILMASK               = 58,   /* Mask value used in stencil test */\n    D3DRS_STENCILWRITEMASK          = 59,   /* Write mask applied to values written to stencil buffer */\n    D3DRS_TEXTUREFACTOR             = 60,   /* D3DCOLOR used for multi-texture blend */\n    D3DRS_WRAP0                     = 128,  /* wrap for 1st texture coord. set */\n    D3DRS_WRAP1                     = 129,  /* wrap for 2nd texture coord. set */\n    D3DRS_WRAP2                     = 130,  /* wrap for 3rd texture coord. set */\n    D3DRS_WRAP3                     = 131,  /* wrap for 4th texture coord. set */\n    D3DRS_WRAP4                     = 132,  /* wrap for 5th texture coord. set */\n    D3DRS_WRAP5                     = 133,  /* wrap for 6th texture coord. set */\n    D3DRS_WRAP6                     = 134,  /* wrap for 7th texture coord. set */\n    D3DRS_WRAP7                     = 135,  /* wrap for 8th texture coord. set */\n    D3DRS_CLIPPING                  = 136,\n    D3DRS_LIGHTING                  = 137,\n    D3DRS_AMBIENT                   = 139,\n    D3DRS_FOGVERTEXMODE             = 140,\n    D3DRS_COLORVERTEX               = 141,\n    D3DRS_LOCALVIEWER               = 142,\n    D3DRS_NORMALIZENORMALS          = 143,\n    D3DRS_DIFFUSEMATERIALSOURCE     = 145,\n    D3DRS_SPECULARMATERIALSOURCE    = 146,\n    D3DRS_AMBIENTMATERIALSOURCE     = 147,\n    D3DRS_EMISSIVEMATERIALSOURCE    = 148,\n    D3DRS_VERTEXBLEND               = 151,\n    D3DRS_CLIPPLANEENABLE           = 152,\n    D3DRS_SOFTWAREVERTEXPROCESSING  = 153,\n    D3DRS_POINTSIZE                 = 154,   /* float point size */\n    D3DRS_POINTSIZE_MIN             = 155,   /* float point size min threshold */\n    D3DRS_POINTSPRITEENABLE         = 156,   /* BOOL point texture coord control */\n    D3DRS_POINTSCALEENABLE          = 157,   /* BOOL point size scale enable */\n    D3DRS_POINTSCALE_A              = 158,   /* float point attenuation A value */\n    D3DRS_POINTSCALE_B              = 159,   /* float point attenuation B value */\n    D3DRS_POINTSCALE_C              = 160,   /* float point attenuation C value */\n    D3DRS_MULTISAMPLEANTIALIAS      = 161,  // BOOL - set to do FSAA with multisample buffer\n    D3DRS_MULTISAMPLEMASK           = 162,  // DWORD - per-sample enable/disable\n    D3DRS_PATCHEDGESTYLE            = 163,  // Sets whether patch edges will use float style tessellation\n    D3DRS_PATCHSEGMENTS             = 164,  // Number of segments per edge when drawing patches\n    D3DRS_DEBUGMONITORTOKEN         = 165,  // DEBUG ONLY - token to debug monitor\n    D3DRS_POINTSIZE_MAX             = 166,   /* float point size max threshold */\n    D3DRS_INDEXEDVERTEXBLENDENABLE  = 167,\n    D3DRS_COLORWRITEENABLE          = 168,  // per-channel write enable\n    D3DRS_TWEENFACTOR               = 170,   // float tween factor\n    D3DRS_BLENDOP                   = 171,   // D3DBLENDOP setting\n    D3DRS_POSITIONORDER             = 172,   // NPatch position interpolation order. D3DORDER_LINEAR or D3DORDER_CUBIC (default)\n    D3DRS_NORMALORDER               = 173,   // NPatch normal interpolation order. D3DORDER_LINEAR (default) or D3DORDER_QUADRATIC\n\n    D3DRS_FORCE_DWORD               = 0x7fffffff, /* force 32-bit size enum */\n} D3DRENDERSTATETYPE;\n\n// Values for material source\ntypedef enum _D3DMATERIALCOLORSOURCE\n{\n    D3DMCS_MATERIAL         = 0,            // Color from material is used\n    D3DMCS_COLOR1           = 1,            // Diffuse vertex color is used\n    D3DMCS_COLOR2           = 2,            // Specular vertex color is used\n    D3DMCS_FORCE_DWORD      = 0x7fffffff,   // force 32-bit size enum\n} D3DMATERIALCOLORSOURCE;\n\n// Bias to apply to the texture coordinate set to apply a wrap to.\n#define D3DRENDERSTATE_WRAPBIAS                 128UL\n\n/* Flags to construct the WRAP render states */\n#define D3DWRAP_U   0x00000001L\n#define D3DWRAP_V   0x00000002L\n#define D3DWRAP_W   0x00000004L\n\n/* Flags to construct the WRAP render states for 1D thru 4D texture coordinates */\n#define D3DWRAPCOORD_0   0x00000001L    // same as D3DWRAP_U\n#define D3DWRAPCOORD_1   0x00000002L    // same as D3DWRAP_V\n#define D3DWRAPCOORD_2   0x00000004L    // same as D3DWRAP_W\n#define D3DWRAPCOORD_3   0x00000008L\n\n/* Flags to construct D3DRS_COLORWRITEENABLE */\n#define D3DCOLORWRITEENABLE_RED     (1L<<0)\n#define D3DCOLORWRITEENABLE_GREEN   (1L<<1)\n#define D3DCOLORWRITEENABLE_BLUE    (1L<<2)\n#define D3DCOLORWRITEENABLE_ALPHA   (1L<<3)\n\n/*\n * State enumerants for per-stage texture processing.\n */\ntypedef enum _D3DTEXTURESTAGESTATETYPE\n{\n    D3DTSS_COLOROP        =  1, /* D3DTEXTUREOP - per-stage blending controls for color channels */\n    D3DTSS_COLORARG1      =  2, /* D3DTA_* (texture arg) */\n    D3DTSS_COLORARG2      =  3, /* D3DTA_* (texture arg) */\n    D3DTSS_ALPHAOP        =  4, /* D3DTEXTUREOP - per-stage blending controls for alpha channel */\n    D3DTSS_ALPHAARG1      =  5, /* D3DTA_* (texture arg) */\n    D3DTSS_ALPHAARG2      =  6, /* D3DTA_* (texture arg) */\n    D3DTSS_BUMPENVMAT00   =  7, /* float (bump mapping matrix) */\n    D3DTSS_BUMPENVMAT01   =  8, /* float (bump mapping matrix) */\n    D3DTSS_BUMPENVMAT10   =  9, /* float (bump mapping matrix) */\n    D3DTSS_BUMPENVMAT11   = 10, /* float (bump mapping matrix) */\n    D3DTSS_TEXCOORDINDEX  = 11, /* identifies which set of texture coordinates index this texture */\n    D3DTSS_ADDRESSU       = 13, /* D3DTEXTUREADDRESS for U coordinate */\n    D3DTSS_ADDRESSV       = 14, /* D3DTEXTUREADDRESS for V coordinate */\n    D3DTSS_BORDERCOLOR    = 15, /* D3DCOLOR */\n    D3DTSS_MAGFILTER      = 16, /* D3DTEXTUREFILTER filter to use for magnification */\n    D3DTSS_MINFILTER      = 17, /* D3DTEXTUREFILTER filter to use for minification */\n    D3DTSS_MIPFILTER      = 18, /* D3DTEXTUREFILTER filter to use between mipmaps during minification */\n    D3DTSS_MIPMAPLODBIAS  = 19, /* float Mipmap LOD bias */\n    D3DTSS_MAXMIPLEVEL    = 20, /* DWORD 0..(n-1) LOD index of largest map to use (0 == largest) */\n    D3DTSS_MAXANISOTROPY  = 21, /* DWORD maximum anisotropy */\n    D3DTSS_BUMPENVLSCALE  = 22, /* float scale for bump map luminance */\n    D3DTSS_BUMPENVLOFFSET = 23, /* float offset for bump map luminance */\n    D3DTSS_TEXTURETRANSFORMFLAGS = 24, /* D3DTEXTURETRANSFORMFLAGS controls texture transform */\n    D3DTSS_ADDRESSW       = 25, /* D3DTEXTUREADDRESS for W coordinate */\n    D3DTSS_COLORARG0      = 26, /* D3DTA_* third arg for triadic ops */\n    D3DTSS_ALPHAARG0      = 27, /* D3DTA_* third arg for triadic ops */\n    D3DTSS_RESULTARG      = 28, /* D3DTA_* arg for result (CURRENT or TEMP) */\n    D3DTSS_FORCE_DWORD   = 0x7fffffff, /* force 32-bit size enum */\n} D3DTEXTURESTAGESTATETYPE;\n\n// Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position\n// and normal in the camera space) should be taken as texture coordinates\n// Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from\n//\n#define D3DTSS_TCI_PASSTHRU                             0x00000000\n#define D3DTSS_TCI_CAMERASPACENORMAL                    0x00010000\n#define D3DTSS_TCI_CAMERASPACEPOSITION                  0x00020000\n#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR          0x00030000\n\n/*\n * Enumerations for COLOROP and ALPHAOP texture blending operations set in\n * texture processing stage controls in D3DTSS.\n */\ntypedef enum _D3DTEXTUREOP\n{\n    // Control\n    D3DTOP_DISABLE              = 1,      // disables stage\n    D3DTOP_SELECTARG1           = 2,      // the default\n    D3DTOP_SELECTARG2           = 3,\n\n    // Modulate\n    D3DTOP_MODULATE             = 4,      // multiply args together\n    D3DTOP_MODULATE2X           = 5,      // multiply and  1 bit\n    D3DTOP_MODULATE4X           = 6,      // multiply and  2 bits\n\n    // Add\n    D3DTOP_ADD                  =  7,   // add arguments together\n    D3DTOP_ADDSIGNED            =  8,   // add with -0.5 bias\n    D3DTOP_ADDSIGNED2X          =  9,   // as above but left  1 bit\n    D3DTOP_SUBTRACT             = 10,   // Arg1 - Arg2, with no saturation\n    D3DTOP_ADDSMOOTH            = 11,   // add 2 args, subtract product\n                                        // Arg1 + Arg2 - Arg1*Arg2\n                                        // = Arg1 + (1-Arg1)*Arg2\n\n    // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha)\n    D3DTOP_BLENDDIFFUSEALPHA    = 12, // iterated alpha\n    D3DTOP_BLENDTEXTUREALPHA    = 13, // texture alpha\n    D3DTOP_BLENDFACTORALPHA     = 14, // alpha from D3DRS_TEXTUREFACTOR\n\n    // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha)\n    D3DTOP_BLENDTEXTUREALPHAPM  = 15, // texture alpha\n    D3DTOP_BLENDCURRENTALPHA    = 16, // by alpha of current color\n\n    // Specular mapping\n    D3DTOP_PREMODULATE            = 17,     // modulate with next texture before use\n    D3DTOP_MODULATEALPHA_ADDCOLOR = 18,     // Arg1.RGB + Arg1.A*Arg2.RGB\n                                            // COLOROP only\n    D3DTOP_MODULATECOLOR_ADDALPHA = 19,     // Arg1.RGB*Arg2.RGB + Arg1.A\n                                            // COLOROP only\n    D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,  // (1-Arg1.A)*Arg2.RGB + Arg1.RGB\n                                            // COLOROP only\n    D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,  // (1-Arg1.RGB)*Arg2.RGB + Arg1.A\n                                            // COLOROP only\n\n    // Bump mapping\n    D3DTOP_BUMPENVMAP           = 22, // per pixel env map perturbation\n    D3DTOP_BUMPENVMAPLUMINANCE  = 23, // with luminance channel\n\n    // This can do either diffuse or specular bump mapping with correct input.\n    // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B)\n    // where each component has been scaled and offset to make it signed.\n    // The result is replicated into all four (including alpha) channels.\n    // This is a valid COLOROP only.\n    D3DTOP_DOTPRODUCT3          = 24,\n\n    // Triadic ops\n    D3DTOP_MULTIPLYADD          = 25, // Arg0 + Arg1*Arg2\n    D3DTOP_LERP                 = 26, // (Arg0)*Arg1 + (1-Arg0)*Arg2\n\n    D3DTOP_FORCE_DWORD = 0x7fffffff,\n} D3DTEXTUREOP;\n\n/*\n * Values for COLORARG0,1,2, ALPHAARG0,1,2, and RESULTARG texture blending\n * operations set in texture processing stage controls in D3DRENDERSTATE.\n */\n#define D3DTA_SELECTMASK        0x0000000f  // mask for arg selector\n#define D3DTA_DIFFUSE           0x00000000  // select diffuse color (read only)\n#define D3DTA_CURRENT           0x00000001  // select stage destination register (read/write)\n#define D3DTA_TEXTURE           0x00000002  // select texture color (read only)\n#define D3DTA_TFACTOR           0x00000003  // select D3DRS_TEXTUREFACTOR (read only)\n#define D3DTA_SPECULAR          0x00000004  // select specular color (read only)\n#define D3DTA_TEMP              0x00000005  // select temporary register color (read/write)\n#define D3DTA_COMPLEMENT        0x00000010  // take 1.0 - x (read modifier)\n#define D3DTA_ALPHAREPLICATE    0x00000020  // replicate alpha to color components (read modifier)\n\n//\n// Values for D3DTSS_***FILTER texture stage states\n//\ntypedef enum _D3DTEXTUREFILTERTYPE\n{\n    D3DTEXF_NONE            = 0,    // filtering disabled (valid for mip filter only)\n    D3DTEXF_POINT           = 1,    // nearest\n    D3DTEXF_LINEAR          = 2,    // linear interpolation\n    D3DTEXF_ANISOTROPIC     = 3,    // anisotropic\n    D3DTEXF_FLATCUBIC       = 4,    // cubic\n    D3DTEXF_GAUSSIANCUBIC   = 5,    // different cubic kernel\n    D3DTEXF_FORCE_DWORD     = 0x7fffffff,   // force 32-bit size enum\n} D3DTEXTUREFILTERTYPE;\n\n/* Bits for Flags in ProcessVertices call */\n\n#define D3DPV_DONOTCOPYDATA     (1 << 0)\n\n//-------------------------------------------------------------------\n\n// Flexible vertex format bits\n//\n#define D3DFVF_RESERVED0        0x001\n#define D3DFVF_POSITION_MASK    0x00E\n#define D3DFVF_XYZ              0x002\n#define D3DFVF_XYZRHW           0x004\n#define D3DFVF_XYZB1            0x006\n#define D3DFVF_XYZB2            0x008\n#define D3DFVF_XYZB3            0x00a\n#define D3DFVF_XYZB4            0x00c\n#define D3DFVF_XYZB5            0x00e\n\n#define D3DFVF_NORMAL           0x010\n#define D3DFVF_PSIZE            0x020\n#define D3DFVF_DIFFUSE          0x040\n#define D3DFVF_SPECULAR         0x080\n\n#define D3DFVF_TEXCOUNT_MASK    0xf00\n#define D3DFVF_TEXCOUNT_SHIFT   8\n#define D3DFVF_TEX0             0x000\n#define D3DFVF_TEX1             0x100\n#define D3DFVF_TEX2             0x200\n#define D3DFVF_TEX3             0x300\n#define D3DFVF_TEX4             0x400\n#define D3DFVF_TEX5             0x500\n#define D3DFVF_TEX6             0x600\n#define D3DFVF_TEX7             0x700\n#define D3DFVF_TEX8             0x800\n\n#define D3DFVF_LASTBETA_UBYTE4  0x1000\n\n#define D3DFVF_RESERVED2        0xE000  // 4 reserved bits\n\n//---------------------------------------------------------------------\n// Vertex Shaders\n//\n\n/*\n\nVertex Shader Declaration\n\nThe declaration portion of a vertex shader defines the static external\ninterface of the shader.  The information in the declaration includes:\n\n- Assignments of vertex shader input registers to data streams.  These\nassignments bind a specific vertex register to a single component within a\nvertex stream.  A vertex stream element is identified by a byte offset\nwithin the stream and a type.  The type specifies the arithmetic data type\nplus the dimensionality (1, 2, 3, or 4 values).  Stream data which is\nless than 4 values are always expanded out to 4 values with zero or more\n0.F values and one 1.F value.\n\n- Assignment of vertex shader input registers to implicit data from the\nprimitive tessellator.  This controls the loading of vertex data which is\nnot loaded from a stream, but rather is generated during primitive\ntessellation prior to the vertex shader.\n\n- Loading data into the constant memory at the time a shader is set as the\ncurrent shader.  Each token specifies values for one or more contiguous 4\nDWORD constant registers.  This allows the shader to update an arbitrary\nsubset of the constant memory, overwriting the device state (which\ncontains the current values of the constant memory).  Note that these\nvalues can be subsequently overwritten (between DrawPrimitive calls)\nduring the time a shader is bound to a device via the\nSetVertexShaderConstant method.\n\n\nDeclaration arrays are single-dimensional arrays of DWORDs composed of\nmultiple tokens each of which is one or more DWORDs.  The single-DWORD\ntoken value 0xFFFFFFFF is a special token used to indicate the end of the\ndeclaration array.  The single DWORD token value 0x00000000 is a NOP token\nwith is ignored during the declaration parsing.  Note that 0x00000000 is a\nvalid value for DWORDs following the first DWORD for multiple word tokens.\n\n[31:29] TokenType\n    0x0 - NOP (requires all DWORD bits to be zero)\n    0x1 - stream selector\n    0x2 - stream data definition (map to vertex input memory)\n    0x3 - vertex input memory from tessellator\n    0x4 - constant memory from shader\n    0x5 - extension\n    0x6 - reserved\n    0x7 - end-of-array (requires all DWORD bits to be 1)\n\nNOP Token (single DWORD token)\n    [31:29] 0x0\n    [28:00] 0x0\n\nStream Selector (single DWORD token)\n    [31:29] 0x1\n    [28]    indicates whether this is a tessellator stream\n    [27:04] 0x0\n    [03:00] stream selector (0..15)\n\nStream Data Definition (single DWORD token)\n    Vertex Input Register Load\n      [31:29] 0x2\n      [28]    0x0\n      [27:20] 0x0\n      [19:16] type (dimensionality and data type)\n      [15:04] 0x0\n      [03:00] vertex register address (0..15)\n    Data Skip (no register load)\n      [31:29] 0x2\n      [28]    0x1\n      [27:20] 0x0\n      [19:16] count of DWORDS to skip over (0..15)\n      [15:00] 0x0\n    Vertex Input Memory from Tessellator Data (single DWORD token)\n      [31:29] 0x3\n      [28]    indicates whether data is normals or u/v\n      [27:24] 0x0\n      [23:20] vertex register address (0..15)\n      [19:16] type (dimensionality)\n      [15:04] 0x0\n      [03:00] vertex register address (0..15)\n\nConstant Memory from Shader (multiple DWORD token)\n    [31:29] 0x4\n    [28:25] count of 4*DWORD constants to load (0..15)\n    [24:07] 0x0\n    [06:00] constant memory address (0..95)\n\nExtension Token (single or multiple DWORD token)\n    [31:29] 0x5\n    [28:24] count of additional DWORDs in token (0..31)\n    [23:00] extension-specific information\n\nEnd-of-array token (single DWORD token)\n    [31:29] 0x7\n    [28:00] 0x1fffffff\n\nThe stream selector token must be immediately followed by a contiguous set of stream data definition tokens.  This token sequence fully defines that stream, including the set of elements within the stream, the order in which the elements appear, the type of each element, and the vertex register into which to load an element.\nStreams are allowed to include data which is not loaded into a vertex register, thus allowing data which is not used for this shader to exist in the vertex stream.  This skipped data is defined only by a count of DWORDs to skip over, since the type information is irrelevant.\nThe token sequence:\nStream Select: stream=0\nStream Data Definition (Load): type=FLOAT3; register=3\nStream Data Definition (Load): type=FLOAT3; register=4\nStream Data Definition (Skip): count=2\nStream Data Definition (Load): type=FLOAT2; register=7\n\ndefines stream zero to consist of 4 elements, 3 of which are loaded into registers and the fourth skipped over.  Register 3 is loaded with the first three DWORDs in each vertex interpreted as FLOAT data.  Register 4 is loaded with the 4th, 5th, and 6th DWORDs interpreted as FLOAT data.  The next two DWORDs (7th and 8th) are skipped over and not loaded into any vertex input register.   Register 7 is loaded with the 9th and 10th DWORDS interpreted as FLOAT data.\nPlacing of tokens other than NOPs between the Stream Selector and Stream Data Definition tokens is disallowed.\n\n*/\n\ntypedef enum _D3DVSD_TOKENTYPE\n{\n    D3DVSD_TOKEN_NOP        = 0,    // NOP or extension\n    D3DVSD_TOKEN_STREAM,            // stream selector\n    D3DVSD_TOKEN_STREAMDATA,        // stream data definition (map to vertex input memory)\n    D3DVSD_TOKEN_TESSELLATOR,       // vertex input memory from tessellator\n    D3DVSD_TOKEN_CONSTMEM,          // constant memory from shader\n    D3DVSD_TOKEN_EXT,               // extension\n    D3DVSD_TOKEN_END = 7,           // end-of-array (requires all DWORD bits to be 1)\n    D3DVSD_FORCE_DWORD = 0x7fffffff,// force 32-bit size enum\n} D3DVSD_TOKENTYPE;\n\n#define D3DVSD_TOKENTYPESHIFT   29\n#define D3DVSD_TOKENTYPEMASK    (7 << D3DVSD_TOKENTYPESHIFT)\n\n#define D3DVSD_STREAMNUMBERSHIFT 0\n#define D3DVSD_STREAMNUMBERMASK (0xF << D3DVSD_STREAMNUMBERSHIFT)\n\n#define D3DVSD_DATALOADTYPESHIFT 28\n#define D3DVSD_DATALOADTYPEMASK (0x1 << D3DVSD_DATALOADTYPESHIFT)\n\n#define D3DVSD_DATATYPESHIFT 16\n#define D3DVSD_DATATYPEMASK (0xF << D3DVSD_DATATYPESHIFT)\n\n#define D3DVSD_SKIPCOUNTSHIFT 16\n#define D3DVSD_SKIPCOUNTMASK (0xF << D3DVSD_SKIPCOUNTSHIFT)\n\n#define D3DVSD_VERTEXREGSHIFT 0\n#define D3DVSD_VERTEXREGMASK (0x1F << D3DVSD_VERTEXREGSHIFT)\n\n#define D3DVSD_VERTEXREGINSHIFT 20\n#define D3DVSD_VERTEXREGINMASK (0xF << D3DVSD_VERTEXREGINSHIFT)\n\n#define D3DVSD_CONSTCOUNTSHIFT 25\n#define D3DVSD_CONSTCOUNTMASK (0xF << D3DVSD_CONSTCOUNTSHIFT)\n\n#define D3DVSD_CONSTADDRESSSHIFT 0\n#define D3DVSD_CONSTADDRESSMASK (0x7F << D3DVSD_CONSTADDRESSSHIFT)\n\n#define D3DVSD_CONSTRSSHIFT 16\n#define D3DVSD_CONSTRSMASK (0x1FFF << D3DVSD_CONSTRSSHIFT)\n\n#define D3DVSD_EXTCOUNTSHIFT 24\n#define D3DVSD_EXTCOUNTMASK (0x1F << D3DVSD_EXTCOUNTSHIFT)\n\n#define D3DVSD_EXTINFOSHIFT 0\n#define D3DVSD_EXTINFOMASK (0xFFFFFF << D3DVSD_EXTINFOSHIFT)\n\n#define D3DVSD_MAKETOKENTYPE(tokenType) ((tokenType << D3DVSD_TOKENTYPESHIFT) & D3DVSD_TOKENTYPEMASK)\n\n// macros for generation of CreateVertexShader Declaration token array\n\n// Set current stream\n// _StreamNumber [0..(MaxStreams-1)] stream to get data from\n//\n#define D3DVSD_STREAM( _StreamNumber ) \\\n    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (_StreamNumber))\n\n// Set tessellator stream\n//\n#define D3DVSD_STREAMTESSSHIFT 28\n#define D3DVSD_STREAMTESSMASK (1 << D3DVSD_STREAMTESSSHIFT)\n#define D3DVSD_STREAM_TESS( ) \\\n    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAM) | (D3DVSD_STREAMTESSMASK))\n\n// bind single vertex register to vertex element from vertex stream\n//\n// _VertexRegister [0..15] address of the vertex register\n// _Type [D3DVSDT_*] dimensionality and arithmetic data type\n\n#define D3DVSD_REG( _VertexRegister, _Type ) \\\n    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) |            \\\n     ((_Type) << D3DVSD_DATATYPESHIFT) | (_VertexRegister))\n\n// Skip _DWORDCount DWORDs in vertex\n//\n#define D3DVSD_SKIP( _DWORDCount ) \\\n    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_STREAMDATA) | 0x10000000 | \\\n     ((_DWORDCount) << D3DVSD_SKIPCOUNTSHIFT))\n\n// load data into vertex shader constant memory\n//\n// _ConstantAddress [0..95] - address of constant array to begin filling data\n// _Count [0..15] - number of constant vectors to load (4 DWORDs each)\n// followed by 4*_Count DWORDS of data\n//\n#define D3DVSD_CONST( _ConstantAddress, _Count ) \\\n    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_CONSTMEM) | \\\n     ((_Count) << D3DVSD_CONSTCOUNTSHIFT) | (_ConstantAddress))\n\n// enable tessellator generated normals\n//\n// _VertexRegisterIn  [0..15] address of vertex register whose input stream\n//                            will be used in normal computation\n// _VertexRegisterOut [0..15] address of vertex register to output the normal to\n//\n#define D3DVSD_TESSNORMAL( _VertexRegisterIn, _VertexRegisterOut ) \\\n    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | \\\n     ((_VertexRegisterIn) << D3DVSD_VERTEXREGINSHIFT) | \\\n     ((0x02) << D3DVSD_DATATYPESHIFT) | (_VertexRegisterOut))\n\n// enable tessellator generated surface parameters\n//\n// _VertexRegister [0..15] address of vertex register to output parameters\n//\n#define D3DVSD_TESSUV( _VertexRegister ) \\\n    (D3DVSD_MAKETOKENTYPE(D3DVSD_TOKEN_TESSELLATOR) | 0x10000000 | \\\n     ((0x01) << D3DVSD_DATATYPESHIFT) | (_VertexRegister))\n\n// Generates END token\n//\n#define D3DVSD_END() 0xFFFFFFFF\n\n// Generates NOP token\n#define D3DVSD_NOP() 0x00000000\n\n// bit declarations for _Type fields\n#define D3DVSDT_FLOAT1      0x00    // 1D float expanded to (value, 0., 0., 1.)\n#define D3DVSDT_FLOAT2      0x01    // 2D float expanded to (value, value, 0., 1.)\n#define D3DVSDT_FLOAT3      0x02    // 3D float expanded to (value, value, value, 1.)\n#define D3DVSDT_FLOAT4      0x03    // 4D float\n#define D3DVSDT_D3DCOLOR    0x04    // 4D packed unsigned bytes mapped to 0. to 1. range\n                                    // Input is in D3DCOLOR format (ARGB) expanded to (R, G, B, A)\n#define D3DVSDT_UBYTE4      0x05    // 4D unsigned byte\n#define D3DVSDT_SHORT2      0x06    // 2D signed short expanded to (value, value, 0., 1.)\n#define D3DVSDT_SHORT4      0x07    // 4D signed short\n\n// assignments of vertex input registers for fixed function vertex shader\n//\n#define D3DVSDE_POSITION        0\n#define D3DVSDE_BLENDWEIGHT     1\n#define D3DVSDE_BLENDINDICES    2\n#define D3DVSDE_NORMAL          3\n#define D3DVSDE_PSIZE           4\n#define D3DVSDE_DIFFUSE         5\n#define D3DVSDE_SPECULAR        6\n#define D3DVSDE_TEXCOORD0       7\n#define D3DVSDE_TEXCOORD1       8\n#define D3DVSDE_TEXCOORD2       9\n#define D3DVSDE_TEXCOORD3       10\n#define D3DVSDE_TEXCOORD4       11\n#define D3DVSDE_TEXCOORD5       12\n#define D3DVSDE_TEXCOORD6       13\n#define D3DVSDE_TEXCOORD7       14\n#define D3DVSDE_POSITION2       15\n#define D3DVSDE_NORMAL2         16\n\n// Maximum supported number of texture coordinate sets\n#define D3DDP_MAXTEXCOORD   8\n\n\n//\n// Instruction Token Bit Definitions\n//\n#define D3DSI_OPCODE_MASK       0x0000FFFF\n\ntypedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE\n{\n    D3DSIO_NOP          = 0,    // PS/VS\n    D3DSIO_MOV          ,       // PS/VS\n    D3DSIO_ADD          ,       // PS/VS\n    D3DSIO_SUB          ,       // PS\n    D3DSIO_MAD          ,       // PS/VS\n    D3DSIO_MUL          ,       // PS/VS\n    D3DSIO_RCP          ,       // VS\n    D3DSIO_RSQ          ,       // VS\n    D3DSIO_DP3          ,       // PS/VS\n    D3DSIO_DP4          ,       // PS/VS\n    D3DSIO_MIN          ,       // VS\n    D3DSIO_MAX          ,       // VS\n    D3DSIO_SLT          ,       // VS\n    D3DSIO_SGE          ,       // VS\n    D3DSIO_EXP          ,       // VS\n    D3DSIO_LOG          ,       // VS\n    D3DSIO_LIT          ,       // VS\n    D3DSIO_DST          ,       // VS\n    D3DSIO_LRP          ,       // PS\n    D3DSIO_FRC          ,       // VS\n    D3DSIO_M4x4         ,       // VS\n    D3DSIO_M4x3         ,       // VS\n    D3DSIO_M3x4         ,       // VS\n    D3DSIO_M3x3         ,       // VS\n    D3DSIO_M3x2         ,       // VS\n\n    D3DSIO_TEXCOORD     = 64,   // PS\n    D3DSIO_TEXKILL      ,       // PS\n    D3DSIO_TEX          ,       // PS\n    D3DSIO_TEXBEM       ,       // PS\n    D3DSIO_TEXBEML      ,       // PS\n    D3DSIO_TEXREG2AR    ,       // PS\n    D3DSIO_TEXREG2GB    ,       // PS\n    D3DSIO_TEXM3x2PAD   ,       // PS\n    D3DSIO_TEXM3x2TEX   ,       // PS\n    D3DSIO_TEXM3x3PAD   ,       // PS\n    D3DSIO_TEXM3x3TEX   ,       // PS\n    D3DSIO_TEXM3x3DIFF  ,       // PS\n    D3DSIO_TEXM3x3SPEC  ,       // PS\n    D3DSIO_TEXM3x3VSPEC ,       // PS\n    D3DSIO_EXPP         ,       // VS\n    D3DSIO_LOGP         ,       // VS\n    D3DSIO_CND          ,       // PS\n    D3DSIO_DEF          ,       // PS\n    D3DSIO_TEXREG2RGB   ,       // PS\n    D3DSIO_TEXDP3TEX    ,       // PS\n    D3DSIO_TEXM3x2DEPTH ,       // PS\n    D3DSIO_TEXDP3       ,       // PS\n    D3DSIO_TEXM3x3      ,       // PS\n    D3DSIO_TEXDEPTH     ,       // PS\n    D3DSIO_CMP          ,       // PS\n    D3DSIO_BEM          ,       // PS\n\n    D3DSIO_PHASE        = 0xFFFD,\n    D3DSIO_COMMENT      = 0xFFFE,\n    D3DSIO_END          = 0xFFFF,\n\n    D3DSIO_FORCE_DWORD  = 0x7fffffff,   // force 32-bit size enum\n} D3DSHADER_INSTRUCTION_OPCODE_TYPE;\n\n//\n// Co-Issue Instruction Modifier - if set then this instruction is to be\n// issued in parallel with the previous instruction(s) for which this bit\n// is not set.\n//\n#define D3DSI_COISSUE           0x40000000\n\n//\n// Parameter Token Bit Definitions\n//\n#define D3DSP_REGNUM_MASK       0x00001FFF\n\n// destination parameter write mask\n#define D3DSP_WRITEMASK_0       0x00010000  // Component 0 (X;Red)\n#define D3DSP_WRITEMASK_1       0x00020000  // Component 1 (Y;Green)\n#define D3DSP_WRITEMASK_2       0x00040000  // Component 2 (Z;Blue)\n#define D3DSP_WRITEMASK_3       0x00080000  // Component 3 (W;Alpha)\n#define D3DSP_WRITEMASK_ALL     0x000F0000  // All Components\n\n// destination parameter modifiers\n#define D3DSP_DSTMOD_SHIFT      20\n#define D3DSP_DSTMOD_MASK       0x00F00000\n\ntypedef enum _D3DSHADER_PARAM_DSTMOD_TYPE\n{\n    D3DSPDM_NONE    = 0<<D3DSP_DSTMOD_SHIFT, // nop\n    D3DSPDM_SATURATE= 1<<D3DSP_DSTMOD_SHIFT, // clamp to 0. to 1. range\n    D3DSPDM_FORCE_DWORD  = 0x7fffffff,      // force 32-bit size enum\n} D3DSHADER_PARAM_DSTMOD_TYPE;\n\n// destination parameter \n#define D3DSP_DSTSHIFT_SHIFT    24\n#define D3DSP_DSTSHIFT_MASK     0x0F000000\n\n// destination/source parameter register type\n#define D3DSP_REGTYPE_SHIFT     28\n#define D3DSP_REGTYPE_MASK      0x70000000\n\ntypedef enum _D3DSHADER_PARAM_REGISTER_TYPE\n{\n    D3DSPR_TEMP     = 0<<D3DSP_REGTYPE_SHIFT, // Temporary Register File\n    D3DSPR_INPUT    = 1<<D3DSP_REGTYPE_SHIFT, // Input Register File\n    D3DSPR_CONST    = 2<<D3DSP_REGTYPE_SHIFT, // Constant Register File\n    D3DSPR_ADDR     = 3<<D3DSP_REGTYPE_SHIFT, // Address Register (VS)\n    D3DSPR_TEXTURE  = 3<<D3DSP_REGTYPE_SHIFT, // Texture Register File (PS)\n    D3DSPR_RASTOUT  = 4<<D3DSP_REGTYPE_SHIFT, // Rasterizer Register File\n    D3DSPR_ATTROUT  = 5<<D3DSP_REGTYPE_SHIFT, // Attribute Output Register File\n    D3DSPR_TEXCRDOUT= 6<<D3DSP_REGTYPE_SHIFT, // Texture Coordinate Output Register File\n    D3DSPR_FORCE_DWORD  = 0x7fffffff,         // force 32-bit size enum\n} D3DSHADER_PARAM_REGISTER_TYPE;\n\n// Register offsets in the Rasterizer Register File\n//\ntypedef enum _D3DVS_RASTOUT_OFFSETS\n{\n    D3DSRO_POSITION = 0,\n    D3DSRO_FOG,\n    D3DSRO_POINT_SIZE,\n    D3DSRO_FORCE_DWORD  = 0x7fffffff,         // force 32-bit size enum\n} D3DVS_RASTOUT_OFFSETS;\n\n// Source operand addressing modes\n\n#define D3DVS_ADDRESSMODE_SHIFT 13\n#define D3DVS_ADDRESSMODE_MASK  (1 << D3DVS_ADDRESSMODE_SHIFT)\n\ntypedef enum _D3DVS_ADDRESSMODE_TYPE\n{\n    D3DVS_ADDRMODE_ABSOLUTE  = (0 << D3DVS_ADDRESSMODE_SHIFT),\n    D3DVS_ADDRMODE_RELATIVE  = (1 << D3DVS_ADDRESSMODE_SHIFT),   // Relative to register A0\n    D3DVS_ADDRMODE_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum\n} D3DVS_ADDRESSMODE_TYPE;\n\n// Source operand swizzle definitions\n//\n#define D3DVS_SWIZZLE_SHIFT     16\n#define D3DVS_SWIZZLE_MASK      0x00FF0000\n\n// The following bits define where to take component X from:\n\n#define D3DVS_X_X       (0 << D3DVS_SWIZZLE_SHIFT)\n#define D3DVS_X_Y       (1 << D3DVS_SWIZZLE_SHIFT)\n#define D3DVS_X_Z       (2 << D3DVS_SWIZZLE_SHIFT)\n#define D3DVS_X_W       (3 << D3DVS_SWIZZLE_SHIFT)\n\n// The following bits define where to take component Y from:\n\n#define D3DVS_Y_X       (0 << (D3DVS_SWIZZLE_SHIFT + 2))\n#define D3DVS_Y_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 2))\n#define D3DVS_Y_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 2))\n#define D3DVS_Y_W       (3 << (D3DVS_SWIZZLE_SHIFT + 2))\n\n// The following bits define where to take component Z from:\n\n#define D3DVS_Z_X       (0 << (D3DVS_SWIZZLE_SHIFT + 4))\n#define D3DVS_Z_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 4))\n#define D3DVS_Z_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 4))\n#define D3DVS_Z_W       (3 << (D3DVS_SWIZZLE_SHIFT + 4))\n\n// The following bits define where to take component W from:\n\n#define D3DVS_W_X       (0 << (D3DVS_SWIZZLE_SHIFT + 6))\n#define D3DVS_W_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 6))\n#define D3DVS_W_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 6))\n#define D3DVS_W_W       (3 << (D3DVS_SWIZZLE_SHIFT + 6))\n\n// Value when there is no swizzle (X is taken from X, Y is taken from Y,\n// Z is taken from Z, W is taken from W\n//\n#define D3DVS_NOSWIZZLE (D3DVS_X_X | D3DVS_Y_Y | D3DVS_Z_Z | D3DVS_W_W)\n\n// source parameter swizzle\n#define D3DSP_SWIZZLE_SHIFT     16\n#define D3DSP_SWIZZLE_MASK      0x00FF0000\n\n#define D3DSP_NOSWIZZLE \\\n    ( (0 << (D3DSP_SWIZZLE_SHIFT + 0)) | \\\n      (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | \\\n      (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | \\\n      (3 << (D3DSP_SWIZZLE_SHIFT + 6)) )\n\n// pixel-shader swizzle ops\n#define D3DSP_REPLICATERED \\\n    ( (0 << (D3DSP_SWIZZLE_SHIFT + 0)) | \\\n      (0 << (D3DSP_SWIZZLE_SHIFT + 2)) | \\\n      (0 << (D3DSP_SWIZZLE_SHIFT + 4)) | \\\n      (0 << (D3DSP_SWIZZLE_SHIFT + 6)) )\n\n#define D3DSP_REPLICATEGREEN \\\n    ( (1 << (D3DSP_SWIZZLE_SHIFT + 0)) | \\\n      (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | \\\n      (1 << (D3DSP_SWIZZLE_SHIFT + 4)) | \\\n      (1 << (D3DSP_SWIZZLE_SHIFT + 6)) )\n\n#define D3DSP_REPLICATEBLUE \\\n    ( (2 << (D3DSP_SWIZZLE_SHIFT + 0)) | \\\n      (2 << (D3DSP_SWIZZLE_SHIFT + 2)) | \\\n      (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | \\\n      (2 << (D3DSP_SWIZZLE_SHIFT + 6)) )\n\n#define D3DSP_REPLICATEALPHA \\\n    ( (3 << (D3DSP_SWIZZLE_SHIFT + 0)) | \\\n      (3 << (D3DSP_SWIZZLE_SHIFT + 2)) | \\\n      (3 << (D3DSP_SWIZZLE_SHIFT + 4)) | \\\n      (3 << (D3DSP_SWIZZLE_SHIFT + 6)) )\n\n// source parameter modifiers\n#define D3DSP_SRCMOD_SHIFT      24\n#define D3DSP_SRCMOD_MASK       0x0F000000\n\ntypedef enum _D3DSHADER_PARAM_SRCMOD_TYPE\n{\n    D3DSPSM_NONE    = 0<<D3DSP_SRCMOD_SHIFT, // nop\n    D3DSPSM_NEG     = 1<<D3DSP_SRCMOD_SHIFT, // negate\n    D3DSPSM_BIAS    = 2<<D3DSP_SRCMOD_SHIFT, // bias\n    D3DSPSM_BIASNEG = 3<<D3DSP_SRCMOD_SHIFT, // bias and negate\n    D3DSPSM_SIGN    = 4<<D3DSP_SRCMOD_SHIFT, // sign\n    D3DSPSM_SIGNNEG = 5<<D3DSP_SRCMOD_SHIFT, // sign and negate\n    D3DSPSM_COMP    = 6<<D3DSP_SRCMOD_SHIFT, // complement\n    D3DSPSM_X2      = 7<<D3DSP_SRCMOD_SHIFT, // *2\n    D3DSPSM_X2NEG   = 8<<D3DSP_SRCMOD_SHIFT, // *2 and negate\n    D3DSPSM_DZ      = 9<<D3DSP_SRCMOD_SHIFT, // divide through by z component \n    D3DSPSM_DW      = 10<<D3DSP_SRCMOD_SHIFT, // divide through by w component\n    D3DSPSM_FORCE_DWORD = 0x7fffffff,        // force 32-bit size enum\n} D3DSHADER_PARAM_SRCMOD_TYPE;\n\n// pixel shader version token\n#define D3DPS_VERSION(_Major,_Minor) (0xFFFF0000|((_Major)<<8)|(_Minor))\n\n// vertex shader version token\n#define D3DVS_VERSION(_Major,_Minor) (0xFFFE0000|((_Major)<<8)|(_Minor))\n\n// extract major/minor from version cap\n#define D3DSHADER_VERSION_MAJOR(_Version) (((_Version)>>8)&0xFF)\n#define D3DSHADER_VERSION_MINOR(_Version) (((_Version)>>0)&0xFF)\n\n// destination/source parameter register type\n#define D3DSI_COMMENTSIZE_SHIFT     16\n#define D3DSI_COMMENTSIZE_MASK      0x7FFF0000\n#define D3DSHADER_COMMENT(_DWordSize) \\\n    ((((_DWordSize)<<D3DSI_COMMENTSIZE_SHIFT)&D3DSI_COMMENTSIZE_MASK)|D3DSIO_COMMENT)\n\n// pixel/vertex shader end token\n#define D3DPS_END()  0x0000FFFF\n#define D3DVS_END()  0x0000FFFF\n\n//---------------------------------------------------------------------\n\n// High order surfaces\n//\ntypedef enum _D3DBASISTYPE\n{\n   D3DBASIS_BEZIER      = 0,\n   D3DBASIS_BSPLINE     = 1,\n   D3DBASIS_INTERPOLATE = 2,\n   D3DBASIS_FORCE_DWORD = 0x7fffffff,\n} D3DBASISTYPE;\n\ntypedef enum _D3DORDERTYPE\n{\n   D3DORDER_LINEAR      = 1,\n   D3DORDER_QUADRATIC   = 2,\n   D3DORDER_CUBIC       = 3,\n   D3DORDER_QUINTIC     = 5,\n   D3DORDER_FORCE_DWORD = 0x7fffffff,\n} D3DORDERTYPE;\n\ntypedef enum _D3DPATCHEDGESTYLE\n{\n   D3DPATCHEDGE_DISCRETE    = 0,\n   D3DPATCHEDGE_CONTINUOUS  = 1,\n   D3DPATCHEDGE_FORCE_DWORD = 0x7fffffff,\n} D3DPATCHEDGESTYLE;\n\ntypedef enum _D3DSTATEBLOCKTYPE\n{\n    D3DSBT_ALL           = 1, // capture all state\n    D3DSBT_PIXELSTATE    = 2, // capture pixel state\n    D3DSBT_VERTEXSTATE   = 3, // capture vertex state\n    D3DSBT_FORCE_DWORD   = 0x7fffffff,\n} D3DSTATEBLOCKTYPE;\n\n// The D3DVERTEXBLENDFLAGS type is used with D3DRS_VERTEXBLEND state.\n//\ntypedef enum _D3DVERTEXBLENDFLAGS\n{\n    D3DVBF_DISABLE  = 0,     // Disable vertex blending\n    D3DVBF_1WEIGHTS = 1,     // 2 matrix blending\n    D3DVBF_2WEIGHTS = 2,     // 3 matrix blending\n    D3DVBF_3WEIGHTS = 3,     // 4 matrix blending\n    D3DVBF_TWEENING = 255,   // blending using D3DRS_TWEENFACTOR\n    D3DVBF_0WEIGHTS = 256,   // one matrix is used with weight 1.0\n    D3DVBF_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum\n} D3DVERTEXBLENDFLAGS;\n\ntypedef enum _D3DTEXTURETRANSFORMFLAGS {\n    D3DTTFF_DISABLE         = 0,    // texture coordinates are passed directly\n    D3DTTFF_COUNT1          = 1,    // rasterizer should expect 1-D texture coords\n    D3DTTFF_COUNT2          = 2,    // rasterizer should expect 2-D texture coords\n    D3DTTFF_COUNT3          = 3,    // rasterizer should expect 3-D texture coords\n    D3DTTFF_COUNT4          = 4,    // rasterizer should expect 4-D texture coords\n    D3DTTFF_PROJECTED       = 256,  // texcoords to be divided by COUNTth element\n    D3DTTFF_FORCE_DWORD     = 0x7fffffff,\n} D3DTEXTURETRANSFORMFLAGS;\n\n// Macros to set texture coordinate format bits in the FVF id\n\n#define D3DFVF_TEXTUREFORMAT2 0         // Two floating point values\n#define D3DFVF_TEXTUREFORMAT1 3         // One floating point value\n#define D3DFVF_TEXTUREFORMAT3 1         // Three floating point values\n#define D3DFVF_TEXTUREFORMAT4 2         // Four floating point values\n\n#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))\n#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)\n#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))\n#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))\n\n\n//---------------------------------------------------------------------\n\n/* Direct3D8 Device types */\ntypedef enum _D3DDEVTYPE\n{\n    D3DDEVTYPE_HAL         = 1,\n    D3DDEVTYPE_REF         = 2,\n    D3DDEVTYPE_SW          = 3,\n\n    D3DDEVTYPE_FORCE_DWORD  = 0x7fffffff\n} D3DDEVTYPE;\n\n/* Multi-Sample buffer types */\ntypedef enum _D3DMULTISAMPLE_TYPE\n{\n    D3DMULTISAMPLE_NONE            =  0,\n    D3DMULTISAMPLE_2_SAMPLES       =  2,\n    D3DMULTISAMPLE_3_SAMPLES       =  3,\n    D3DMULTISAMPLE_4_SAMPLES       =  4,\n    D3DMULTISAMPLE_5_SAMPLES       =  5,\n    D3DMULTISAMPLE_6_SAMPLES       =  6,\n    D3DMULTISAMPLE_7_SAMPLES       =  7,\n    D3DMULTISAMPLE_8_SAMPLES       =  8,\n    D3DMULTISAMPLE_9_SAMPLES       =  9,\n    D3DMULTISAMPLE_10_SAMPLES      = 10,\n    D3DMULTISAMPLE_11_SAMPLES      = 11,\n    D3DMULTISAMPLE_12_SAMPLES      = 12,\n    D3DMULTISAMPLE_13_SAMPLES      = 13,\n    D3DMULTISAMPLE_14_SAMPLES      = 14,\n    D3DMULTISAMPLE_15_SAMPLES      = 15,\n    D3DMULTISAMPLE_16_SAMPLES      = 16,\n\n    D3DMULTISAMPLE_FORCE_DWORD     = 0x7fffffff\n} D3DMULTISAMPLE_TYPE;\n\n/* Formats\n * Most of these names have the following convention:\n *      A = Alpha\n *      R = Red\n *      G = Green\n *      B = Blue\n *      X = Unused Bits\n *      P = Palette\n *      L = Luminance\n *      U = dU coordinate for BumpMap\n *      V = dV coordinate for BumpMap\n *      S = Stencil\n *      D = Depth (e.g. Z or W buffer)\n *\n *      Further, the order of the pieces are from MSB first; hence\n *      D3DFMT_A8L8 indicates that the high byte of this two byte\n *      format is alpha.\n *\n *      D16 indicates:\n *           - An integer 16-bit value.\n *           - An app-lockable surface.\n *\n *      All Depth/Stencil formats except D3DFMT_D16_LOCKABLE indicate:\n *          - no particular bit ordering per pixel, and\n *          - are not app lockable, and\n *          - the driver is allowed to consume more than the indicated\n *            number of bits per Depth channel (but not Stencil channel).\n */\n#ifndef MAKEFOURCC\n    #define MAKEFOURCC(ch0, ch1, ch2, ch3)                              \\\n                ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |       \\\n                ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))\n#endif /* defined(MAKEFOURCC) */\n\n\ntypedef enum _D3DFORMAT\n{\n    D3DFMT_UNKNOWN              =  0,\n\n    D3DFMT_R8G8B8               = 20,\n    D3DFMT_A8R8G8B8             = 21,\n    D3DFMT_X8R8G8B8             = 22,\n    D3DFMT_R5G6B5               = 23,\n    D3DFMT_X1R5G5B5             = 24,\n    D3DFMT_A1R5G5B5             = 25,\n    D3DFMT_A4R4G4B4             = 26,\n    D3DFMT_R3G3B2               = 27,\n    D3DFMT_A8                   = 28,\n    D3DFMT_A8R3G3B2             = 29,\n    D3DFMT_X4R4G4B4             = 30,\n    D3DFMT_A2B10G10R10          = 31,\n    D3DFMT_G16R16               = 34,\n\n    D3DFMT_A8P8                 = 40,\n    D3DFMT_P8                   = 41,\n\n    D3DFMT_L8                   = 50,\n    D3DFMT_A8L8                 = 51,\n    D3DFMT_A4L4                 = 52,\n\n    D3DFMT_V8U8                 = 60,\n    D3DFMT_L6V5U5               = 61,\n    D3DFMT_X8L8V8U8             = 62,\n    D3DFMT_Q8W8V8U8             = 63,\n    D3DFMT_V16U16               = 64,\n    D3DFMT_W11V11U10            = 65,\n    D3DFMT_A2W10V10U10          = 67,\n\n    D3DFMT_UYVY                 = MAKEFOURCC('U', 'Y', 'V', 'Y'),\n    D3DFMT_YUY2                 = MAKEFOURCC('Y', 'U', 'Y', '2'),\n    D3DFMT_DXT1                 = MAKEFOURCC('D', 'X', 'T', '1'),\n    D3DFMT_DXT2                 = MAKEFOURCC('D', 'X', 'T', '2'),\n    D3DFMT_DXT3                 = MAKEFOURCC('D', 'X', 'T', '3'),\n    D3DFMT_DXT4                 = MAKEFOURCC('D', 'X', 'T', '4'),\n    D3DFMT_DXT5                 = MAKEFOURCC('D', 'X', 'T', '5'),\n\n    D3DFMT_D16_LOCKABLE         = 70,\n    D3DFMT_D32                  = 71,\n    D3DFMT_D15S1                = 73,\n    D3DFMT_D24S8                = 75,\n    D3DFMT_D16                  = 80,\n    D3DFMT_D24X8                = 77,\n    D3DFMT_D24X4S4              = 79,\n\n\n    D3DFMT_VERTEXDATA           =100,\n    D3DFMT_INDEX16              =101,\n    D3DFMT_INDEX32              =102,\n\n    D3DFMT_FORCE_DWORD          =0x7fffffff\n} D3DFORMAT;\n\n/* Display Modes */\ntypedef struct _D3DDISPLAYMODE\n{\n    UINT            Width;\n    UINT            Height;\n    UINT            RefreshRate;\n    D3DFORMAT       Format;\n} D3DDISPLAYMODE;\n\n/* Creation Parameters */\ntypedef struct _D3DDEVICE_CREATION_PARAMETERS\n{\n    UINT            AdapterOrdinal;\n    D3DDEVTYPE      DeviceType;\n    HWND            hFocusWindow;\n    DWORD           BehaviorFlags;\n} D3DDEVICE_CREATION_PARAMETERS;\n\n\n/* SwapEffects */\ntypedef enum _D3DSWAPEFFECT\n{\n    D3DSWAPEFFECT_DISCARD           = 1,\n    D3DSWAPEFFECT_FLIP              = 2,\n    D3DSWAPEFFECT_COPY              = 3,\n    D3DSWAPEFFECT_COPY_VSYNC        = 4,\n\n    D3DSWAPEFFECT_FORCE_DWORD       = 0x7fffffff\n} D3DSWAPEFFECT;\n\n/* Pool types */\ntypedef enum _D3DPOOL {\n    D3DPOOL_DEFAULT                 = 0,\n    D3DPOOL_MANAGED                 = 1,\n    D3DPOOL_SYSTEMMEM               = 2,\n    D3DPOOL_SCRATCH                 = 3,\n\n    D3DPOOL_FORCE_DWORD             = 0x7fffffff\n} D3DPOOL;\n\n\n/* RefreshRate pre-defines */\n#define D3DPRESENT_RATE_DEFAULT         0x00000000\n#define D3DPRESENT_RATE_UNLIMITED       0x7fffffff\n\n\n/* Resize Optional Parameters */\ntypedef struct _D3DPRESENT_PARAMETERS_\n{\n    UINT                BackBufferWidth;\n    UINT                BackBufferHeight;\n    D3DFORMAT           BackBufferFormat;\n    UINT                BackBufferCount;\n\n    D3DMULTISAMPLE_TYPE MultiSampleType;\n\n    D3DSWAPEFFECT       SwapEffect;\n    HWND                hDeviceWindow;\n    BOOL                Windowed;\n    BOOL                EnableAutoDepthStencil;\n    D3DFORMAT           AutoDepthStencilFormat;\n    DWORD               Flags;\n\n    /* Following elements must be zero for Windowed mode */\n    UINT                FullScreen_RefreshRateInHz;\n    UINT                FullScreen_PresentationInterval;\n\n} D3DPRESENT_PARAMETERS;\n\n// Values for D3DPRESENT_PARAMETERS.Flags\n\n#define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER  0x00000001\n\n\n/* Gamma Ramp: Same as DX7 */\n\ntypedef struct _D3DGAMMARAMP\n{\n    WORD                red  [256];\n    WORD                green[256];\n    WORD                blue [256];\n} D3DGAMMARAMP;\n\n/* Back buffer types */\ntypedef enum _D3DBACKBUFFER_TYPE\n{\n    D3DBACKBUFFER_TYPE_MONO         = 0,\n    D3DBACKBUFFER_TYPE_LEFT         = 1,\n    D3DBACKBUFFER_TYPE_RIGHT        = 2,\n\n    D3DBACKBUFFER_TYPE_FORCE_DWORD  = 0x7fffffff\n} D3DBACKBUFFER_TYPE;\n\n\n/* Types */\ntypedef enum _D3DRESOURCETYPE {\n    D3DRTYPE_SURFACE                =  1,\n    D3DRTYPE_VOLUME                 =  2,\n    D3DRTYPE_TEXTURE                =  3,\n    D3DRTYPE_VOLUMETEXTURE          =  4,\n    D3DRTYPE_CUBETEXTURE            =  5,\n    D3DRTYPE_VERTEXBUFFER           =  6,\n    D3DRTYPE_INDEXBUFFER            =  7,\n\n\n    D3DRTYPE_FORCE_DWORD            = 0x7fffffff\n} D3DRESOURCETYPE;\n\n/* Usages */\n#define D3DUSAGE_RENDERTARGET       (0x00000001L)\n#define D3DUSAGE_DEPTHSTENCIL       (0x00000002L)\n\n/* Usages for Vertex/Index buffers */\n#define D3DUSAGE_WRITEONLY          (0x00000008L)\n#define D3DUSAGE_SOFTWAREPROCESSING (0x00000010L)\n#define D3DUSAGE_DONOTCLIP          (0x00000020L)\n#define D3DUSAGE_POINTS             (0x00000040L)\n#define D3DUSAGE_RTPATCHES          (0x00000080L)\n#define D3DUSAGE_NPATCHES           (0x00000100L)\n#define D3DUSAGE_DYNAMIC            (0x00000200L)\n\n\n\n\n\n\n\n\n\n/* CubeMap Face identifiers */\ntypedef enum _D3DCUBEMAP_FACES\n{\n    D3DCUBEMAP_FACE_POSITIVE_X     = 0,\n    D3DCUBEMAP_FACE_NEGATIVE_X     = 1,\n    D3DCUBEMAP_FACE_POSITIVE_Y     = 2,\n    D3DCUBEMAP_FACE_NEGATIVE_Y     = 3,\n    D3DCUBEMAP_FACE_POSITIVE_Z     = 4,\n    D3DCUBEMAP_FACE_NEGATIVE_Z     = 5,\n\n    D3DCUBEMAP_FACE_FORCE_DWORD    = 0x7fffffff\n} D3DCUBEMAP_FACES;\n\n\n/* Lock flags */\n\n#define D3DLOCK_READONLY           0x00000010L\n#define D3DLOCK_DISCARD             0x00002000L\n#define D3DLOCK_NOOVERWRITE        0x00001000L\n#define D3DLOCK_NOSYSLOCK          0x00000800L\n\n#define D3DLOCK_NO_DIRTY_UPDATE     0x00008000L\n\n\n\n\n\n\n/* Vertex Buffer Description */\ntypedef struct _D3DVERTEXBUFFER_DESC\n{\n    D3DFORMAT           Format;\n    D3DRESOURCETYPE     Type;\n    DWORD               Usage;\n    D3DPOOL             Pool;\n    UINT                Size;\n\n    DWORD               FVF;\n\n} D3DVERTEXBUFFER_DESC;\n\n/* Index Buffer Description */\ntypedef struct _D3DINDEXBUFFER_DESC\n{\n    D3DFORMAT           Format;\n    D3DRESOURCETYPE     Type;\n    DWORD               Usage;\n    D3DPOOL             Pool;\n    UINT                Size;\n} D3DINDEXBUFFER_DESC;\n\n\n/* Surface Description */\ntypedef struct _D3DSURFACE_DESC\n{\n    D3DFORMAT           Format;\n    D3DRESOURCETYPE     Type;\n    DWORD               Usage;\n    D3DPOOL             Pool;\n    UINT                Size;\n\n    D3DMULTISAMPLE_TYPE MultiSampleType;\n    UINT                Width;\n    UINT                Height;\n} D3DSURFACE_DESC;\n\ntypedef struct _D3DVOLUME_DESC\n{\n    D3DFORMAT           Format;\n    D3DRESOURCETYPE     Type;\n    DWORD               Usage;\n    D3DPOOL             Pool;\n    UINT                Size;\n\n    UINT                Width;\n    UINT                Height;\n    UINT                Depth;\n} D3DVOLUME_DESC;\n\n/* Structure for LockRect */\ntypedef struct _D3DLOCKED_RECT\n{\n    INT                 Pitch;\n    void*               pBits;\n} D3DLOCKED_RECT;\n\n/* Structures for LockBox */\ntypedef struct _D3DBOX\n{\n    UINT                Left;\n    UINT                Top;\n    UINT                Right;\n    UINT                Bottom;\n    UINT                Front;\n    UINT                Back;\n} D3DBOX;\n\ntypedef struct _D3DLOCKED_BOX\n{\n    INT                 RowPitch;\n    INT                 SlicePitch;\n    void*               pBits;\n} D3DLOCKED_BOX;\n\n/* Structures for LockRange */\ntypedef struct _D3DRANGE\n{\n    UINT                Offset;\n    UINT                Size;\n} D3DRANGE;\n\n/* Structures for high order primitives */\ntypedef struct _D3DRECTPATCH_INFO\n{\n    UINT                StartVertexOffsetWidth;\n    UINT                StartVertexOffsetHeight;\n    UINT                Width;\n    UINT                Height;\n    UINT                Stride;\n    D3DBASISTYPE        Basis;\n    D3DORDERTYPE        Order;\n} D3DRECTPATCH_INFO;\n\ntypedef struct _D3DTRIPATCH_INFO\n{\n    UINT                StartVertexOffset;\n    UINT                NumVertices;\n    D3DBASISTYPE        Basis;\n    D3DORDERTYPE        Order;\n} D3DTRIPATCH_INFO;\n\n/* Adapter Identifier */\n\n#define MAX_DEVICE_IDENTIFIER_STRING        512\ntypedef struct _D3DADAPTER_IDENTIFIER8\n{\n    char            Driver[MAX_DEVICE_IDENTIFIER_STRING];\n    char            Description[MAX_DEVICE_IDENTIFIER_STRING];\n\n#ifdef _WIN32\n    LARGE_INTEGER   DriverVersion;            /* Defined for 32 bit components */\n#else\n    DWORD           DriverVersionLowPart;     /* Defined for 16 bit driver components */\n    DWORD           DriverVersionHighPart;\n#endif\n\n    DWORD           VendorId;\n    DWORD           DeviceId;\n    DWORD           SubSysId;\n    DWORD           Revision;\n\n    GUID            DeviceIdentifier;\n\n    DWORD           WHQLLevel;\n\n} D3DADAPTER_IDENTIFIER8;\n\n\n/* Raster Status structure returned by GetRasterStatus */\ntypedef struct _D3DRASTER_STATUS\n{\n    BOOL            InVBlank;\n    UINT            ScanLine;\n} D3DRASTER_STATUS;\n\n\n\n/* Debug monitor tokens (DEBUG only)\n\n   Note that if D3DRS_DEBUGMONITORTOKEN is set, the call is treated as\n   passing a token to the debug monitor.  For example, if, after passing\n   D3DDMT_ENABLE/DISABLE to D3DRS_DEBUGMONITORTOKEN other token values\n   are passed in, the enabled/disabled state of the debug\n   monitor will still persist.\n\n   The debug monitor defaults to enabled.\n\n   Calling GetRenderState on D3DRS_DEBUGMONITORTOKEN is not of any use.\n*/\ntypedef enum _D3DDEBUGMONITORTOKENS {\n    D3DDMT_ENABLE            = 0,    // enable debug monitor\n    D3DDMT_DISABLE           = 1,    // disable debug monitor\n    D3DDMT_FORCE_DWORD     = 0x7fffffff,\n} D3DDEBUGMONITORTOKENS;\n\n// GetInfo IDs\n\n#define D3DDEVINFOID_RESOURCEMANAGER    5           /* Used with D3DDEVINFO_RESOURCEMANAGER */\n#define D3DDEVINFOID_VERTEXSTATS        6           /* Used with D3DDEVINFO_D3DVERTEXSTATS */\n\ntypedef struct _D3DRESOURCESTATS\n{\n// Data collected since last Present()\n    BOOL    bThrashing;             /* indicates if thrashing */\n    DWORD   ApproxBytesDownloaded;  /* Approximate number of bytes downloaded by resource manager */\n    DWORD   NumEvicts;              /* number of objects evicted */\n    DWORD   NumVidCreates;          /* number of objects created in video memory */\n    DWORD   LastPri;                /* priority of last object evicted */\n    DWORD   NumUsed;                /* number of objects set to the device */\n    DWORD   NumUsedInVidMem;        /* number of objects set to the device, which are already in video memory */\n// Persistent data\n    DWORD   WorkingSet;             /* number of objects in video memory */\n    DWORD   WorkingSetBytes;        /* number of bytes in video memory */\n    DWORD   TotalManaged;           /* total number of managed objects */\n    DWORD   TotalBytes;             /* total number of bytes of managed objects */\n} D3DRESOURCESTATS;\n\n#define D3DRTYPECOUNT (D3DRTYPE_INDEXBUFFER+1)\n\ntypedef struct _D3DDEVINFO_RESOURCEMANAGER\n{\n    D3DRESOURCESTATS    stats[D3DRTYPECOUNT];\n} D3DDEVINFO_RESOURCEMANAGER, *LPD3DDEVINFO_RESOURCEMANAGER;\n\ntypedef struct _D3DDEVINFO_D3DVERTEXSTATS\n{\n    DWORD   NumRenderedTriangles;       /* total number of triangles that are not clipped in this frame */\n    DWORD   NumExtraClippingTriangles;  /* Number of new triangles generated by clipping */\n} D3DDEVINFO_D3DVERTEXSTATS, *LPD3DDEVINFO_D3DVERTEXSTATS;\n\n\n#pragma pack()\n#if _MSC_VER >= 1200\n#pragma warning(pop)\n#else\n#pragma warning(default:4201)\n#endif\n\n#endif /* (DIRECT3D_VERSION >= 0x0800) */\n#endif /* _D3D8TYPES(P)_H_ */\n\n"
  },
  {
    "path": "Include/d3d9.h",
    "content": "/*==========================================================================;\n *\n *  Copyright (C) Microsoft Corporation.  All Rights Reserved.\n *\n *  File:   d3d9.h\n *  Content:    Direct3D include file\n *\n ****************************************************************************/\n\n#ifndef _D3D9_H_\n#define _D3D9_H_\n\n#ifndef DIRECT3D_VERSION\n#define DIRECT3D_VERSION         0x0900\n#endif  //DIRECT3D_VERSION\n\n// include this file content only if compiling for DX9 interfaces\n#if(DIRECT3D_VERSION >= 0x0900)\n\n\n/* This identifier is passed to Direct3DCreate9 in order to ensure that an\n * application was built against the correct header files. This number is\n * incremented whenever a header (or other) change would require applications\n * to be rebuilt. If the version doesn't match, Direct3DCreate9 will fail.\n * (The number itself has no meaning.)*/\n\n#ifdef D3D_DEBUG_INFO\n#define D3D_SDK_VERSION   (32 | 0x80000000)\n#define D3D9b_SDK_VERSION (31 | 0x80000000)\n\n#else\n#define D3D_SDK_VERSION   32\n#define D3D9b_SDK_VERSION 31\n#endif\n\n\n#include <stdlib.h>\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n\n#include <windows.h>\n\n#if !defined(HMONITOR_DECLARED) && (WINVER < 0x0500)\n    #define HMONITOR_DECLARED\n    DECLARE_HANDLE(HMONITOR);\n#endif\n\n#define D3DAPI WINAPI\n\n/*\n * Interface IID's\n */\n#if defined( _WIN32 ) && !defined( _NO_COM)\n\n/* IID_IDirect3D9 */\n/* {81BDCBCA-64D4-426d-AE8D-AD0147F4275C} */\nDEFINE_GUID(IID_IDirect3D9, 0x81bdcbca, 0x64d4, 0x426d, 0xae, 0x8d, 0xad, 0x1, 0x47, 0xf4, 0x27, 0x5c);\n\n/* IID_IDirect3DDevice9 */\n// {D0223B96-BF7A-43fd-92BD-A43B0D82B9EB} */\nDEFINE_GUID(IID_IDirect3DDevice9, 0xd0223b96, 0xbf7a, 0x43fd, 0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb);\n\n/* IID_IDirect3DResource9 */\n// {05EEC05D-8F7D-4362-B999-D1BAF357C704}\nDEFINE_GUID(IID_IDirect3DResource9, 0x5eec05d, 0x8f7d, 0x4362, 0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4);\n\n/* IID_IDirect3DBaseTexture9 */\n/* {580CA87E-1D3C-4d54-991D-B7D3E3C298CE} */\nDEFINE_GUID(IID_IDirect3DBaseTexture9, 0x580ca87e, 0x1d3c, 0x4d54, 0x99, 0x1d, 0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce);\n\n/* IID_IDirect3DTexture9 */\n/* {85C31227-3DE5-4f00-9B3A-F11AC38C18B5} */\nDEFINE_GUID(IID_IDirect3DTexture9, 0x85c31227, 0x3de5, 0x4f00, 0x9b, 0x3a, 0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5);\n\n/* IID_IDirect3DCubeTexture9 */\n/* {FFF32F81-D953-473a-9223-93D652ABA93F} */\nDEFINE_GUID(IID_IDirect3DCubeTexture9, 0xfff32f81, 0xd953, 0x473a, 0x92, 0x23, 0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f);\n\n/* IID_IDirect3DVolumeTexture9 */\n/* {2518526C-E789-4111-A7B9-47EF328D13E6} */\nDEFINE_GUID(IID_IDirect3DVolumeTexture9, 0x2518526c, 0xe789, 0x4111, 0xa7, 0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6);\n\n/* IID_IDirect3DVertexBuffer9 */\n/* {B64BB1B5-FD70-4df6-BF91-19D0A12455E3} */\nDEFINE_GUID(IID_IDirect3DVertexBuffer9, 0xb64bb1b5, 0xfd70, 0x4df6, 0xbf, 0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3);\n\n/* IID_IDirect3DIndexBuffer9 */\n/* {7C9DD65E-D3F7-4529-ACEE-785830ACDE35} */\nDEFINE_GUID(IID_IDirect3DIndexBuffer9, 0x7c9dd65e, 0xd3f7, 0x4529, 0xac, 0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35);\n\n/* IID_IDirect3DSurface9 */\n/* {0CFBAF3A-9FF6-429a-99B3-A2796AF8B89B} */\nDEFINE_GUID(IID_IDirect3DSurface9, 0xcfbaf3a, 0x9ff6, 0x429a, 0x99, 0xb3, 0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b);\n\n/* IID_IDirect3DVolume9 */\n/* {24F416E6-1F67-4aa7-B88E-D33F6F3128A1} */\nDEFINE_GUID(IID_IDirect3DVolume9, 0x24f416e6, 0x1f67, 0x4aa7, 0xb8, 0x8e, 0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1);\n\n/* IID_IDirect3DSwapChain9 */\n/* {794950F2-ADFC-458a-905E-10A10B0B503B} */\nDEFINE_GUID(IID_IDirect3DSwapChain9, 0x794950f2, 0xadfc, 0x458a, 0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b);\n\n/* IID_IDirect3DVertexDeclaration9 */\n/* {DD13C59C-36FA-4098-A8FB-C7ED39DC8546} */\nDEFINE_GUID(IID_IDirect3DVertexDeclaration9, 0xdd13c59c, 0x36fa, 0x4098, 0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46);\n\n/* IID_IDirect3DVertexShader9 */\n/* {EFC5557E-6265-4613-8A94-43857889EB36} */\nDEFINE_GUID(IID_IDirect3DVertexShader9, 0xefc5557e, 0x6265, 0x4613, 0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36);\n\n/* IID_IDirect3DPixelShader9 */\n/* {6D3BDBDC-5B02-4415-B852-CE5E8BCCB289} */\nDEFINE_GUID(IID_IDirect3DPixelShader9, 0x6d3bdbdc, 0x5b02, 0x4415, 0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89);\n\n/* IID_IDirect3DStateBlock9 */\n/* {B07C4FE5-310D-4ba8-A23C-4F0F206F218B} */\nDEFINE_GUID(IID_IDirect3DStateBlock9, 0xb07c4fe5, 0x310d, 0x4ba8, 0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b);\n\n/* IID_IDirect3DQuery9 */\n/* {d9771460-a695-4f26-bbd3-27b840b541cc} */\nDEFINE_GUID(IID_IDirect3DQuery9, 0xd9771460, 0xa695, 0x4f26, 0xbb, 0xd3, 0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc);\n\n\n/* IID_HelperName */\n/* {E4A36723-FDFE-4b22-B146-3C04C07F4CC8} */\nDEFINE_GUID(IID_HelperName, 0xe4a36723, 0xfdfe, 0x4b22, 0xb1, 0x46, 0x3c, 0x4, 0xc0, 0x7f, 0x4c, 0xc8);\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n/* IID_IDirect3D9Ex */\n/* {02177241-69FC-400C-8FF1-93A44DF6861D} */\nDEFINE_GUID(IID_IDirect3D9Ex, 0x02177241, 0x69FC, 0x400C, 0x8F, 0xF1, 0x93, 0xA4, 0x4D, 0xF6, 0x86, 0x1D);\n\n/* IID_IDirect3DDevice9Ex */\n// {B18B10CE-2649-405a-870F-95F777D4313A}\nDEFINE_GUID(IID_IDirect3DDevice9Ex, 0xb18b10ce, 0x2649, 0x405a, 0x87, 0xf, 0x95, 0xf7, 0x77, 0xd4, 0x31, 0x3a);\n\n/* IID_IDirect3DSwapChain9Ex */\n/* {91886CAF-1C3D-4d2e-A0AB-3E4C7D8D3303} */\nDEFINE_GUID(IID_IDirect3DSwapChain9Ex, 0x91886caf, 0x1c3d, 0x4d2e, 0xa0, 0xab, 0x3e, 0x4c, 0x7d, 0x8d, 0x33, 0x3);\n\n/* IID_IDirect3D9ExOverlayExtension */\n/* {187aeb13-aaf5-4c59-876d-e059088c0df8} */\nDEFINE_GUID(IID_IDirect3D9ExOverlayExtension, 0x187aeb13, 0xaaf5, 0x4c59, 0x87, 0x6d, 0xe0, 0x59, 0x8, 0x8c, 0xd, 0xf8);\n\n/* IID_IDirect3DDevice9Video */\n// {26DC4561-A1EE-4ae7-96DA-118A36C0EC95}\nDEFINE_GUID(IID_IDirect3DDevice9Video, 0x26dc4561, 0xa1ee, 0x4ae7, 0x96, 0xda, 0x11, 0x8a, 0x36, 0xc0, 0xec, 0x95);\n\n/* IID_IDirect3D9AuthenticatedChannel */\n// {FF24BEEE-DA21-4beb-98B5-D2F899F98AF9}\nDEFINE_GUID(IID_IDirect3DAuthenticatedChannel9, 0xff24beee, 0xda21, 0x4beb, 0x98, 0xb5, 0xd2, 0xf8, 0x99, 0xf9, 0x8a, 0xf9);\n\n/* IID_IDirect3DCryptoSession9 */\n// {FA0AB799-7A9C-48ca-8C5B-237E71A54434}\nDEFINE_GUID(IID_IDirect3DCryptoSession9, 0xfa0ab799, 0x7a9c, 0x48ca, 0x8c, 0x5b, 0x23, 0x7e, 0x71, 0xa5, 0x44, 0x34);\n\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n#endif\n\n#ifdef __cplusplus\n\n#ifndef DECLSPEC_UUID\n#if _MSC_VER >= 1100\n#define DECLSPEC_UUID(x)    __declspec(uuid(x))\n#else\n#define DECLSPEC_UUID(x)\n#endif\n#endif\n\ninterface DECLSPEC_UUID(\"81BDCBCA-64D4-426d-AE8D-AD0147F4275C\") IDirect3D9;\ninterface DECLSPEC_UUID(\"D0223B96-BF7A-43fd-92BD-A43B0D82B9EB\") IDirect3DDevice9;\n\ninterface DECLSPEC_UUID(\"B07C4FE5-310D-4ba8-A23C-4F0F206F218B\") IDirect3DStateBlock9;\ninterface DECLSPEC_UUID(\"05EEC05D-8F7D-4362-B999-D1BAF357C704\") IDirect3DResource9;\ninterface DECLSPEC_UUID(\"DD13C59C-36FA-4098-A8FB-C7ED39DC8546\") IDirect3DVertexDeclaration9;\ninterface DECLSPEC_UUID(\"EFC5557E-6265-4613-8A94-43857889EB36\") IDirect3DVertexShader9;\ninterface DECLSPEC_UUID(\"6D3BDBDC-5B02-4415-B852-CE5E8BCCB289\") IDirect3DPixelShader9;\ninterface DECLSPEC_UUID(\"580CA87E-1D3C-4d54-991D-B7D3E3C298CE\") IDirect3DBaseTexture9;\ninterface DECLSPEC_UUID(\"85C31227-3DE5-4f00-9B3A-F11AC38C18B5\") IDirect3DTexture9;\ninterface DECLSPEC_UUID(\"2518526C-E789-4111-A7B9-47EF328D13E6\") IDirect3DVolumeTexture9;\ninterface DECLSPEC_UUID(\"FFF32F81-D953-473a-9223-93D652ABA93F\") IDirect3DCubeTexture9;\n\ninterface DECLSPEC_UUID(\"B64BB1B5-FD70-4df6-BF91-19D0A12455E3\") IDirect3DVertexBuffer9;\ninterface DECLSPEC_UUID(\"7C9DD65E-D3F7-4529-ACEE-785830ACDE35\") IDirect3DIndexBuffer9;\n\ninterface DECLSPEC_UUID(\"0CFBAF3A-9FF6-429a-99B3-A2796AF8B89B\") IDirect3DSurface9;\ninterface DECLSPEC_UUID(\"24F416E6-1F67-4aa7-B88E-D33F6F3128A1\") IDirect3DVolume9;\n\ninterface DECLSPEC_UUID(\"794950F2-ADFC-458a-905E-10A10B0B503B\") IDirect3DSwapChain9;\ninterface DECLSPEC_UUID(\"d9771460-a695-4f26-bbd3-27b840b541cc\") IDirect3DQuery9;\n\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\ninterface DECLSPEC_UUID(\"02177241-69FC-400C-8FF1-93A44DF6861D\") IDirect3D9Ex;\ninterface DECLSPEC_UUID(\"B18B10CE-2649-405a-870F-95F777D4313A\") IDirect3DDevice9Ex;\ninterface DECLSPEC_UUID(\"91886CAF-1C3D-4d2e-A0AB-3E4C7D8D3303\") IDirect3DSwapChain9Ex;\ninterface DECLSPEC_UUID(\"187AEB13-AAF5-4C59-876D-E059088C0DF8\") IDirect3D9ExOverlayExtension;\ninterface DECLSPEC_UUID(\"26DC4561-A1EE-4ae7-96DA-118A36C0EC95\") IDirect3DDevice9Video;\ninterface DECLSPEC_UUID(\"FF24BEEE-DA21-4beb-98B5-D2F899F98AF9\") IDirect3DAuthenticatedChannel9;\ninterface DECLSPEC_UUID(\"FA0AB799-7A9C-48CA-8C5B-237E71A54434\") IDirect3DCryptoSession9;\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n#if defined(_COM_SMARTPTR_TYPEDEF)\n_COM_SMARTPTR_TYPEDEF(IDirect3D9, __uuidof(IDirect3D9));\n_COM_SMARTPTR_TYPEDEF(IDirect3DDevice9, __uuidof(IDirect3DDevice9));\n\n_COM_SMARTPTR_TYPEDEF(IDirect3DStateBlock9, __uuidof(IDirect3DStateBlock9));\n_COM_SMARTPTR_TYPEDEF(IDirect3DResource9, __uuidof(IDirect3DResource9));\n_COM_SMARTPTR_TYPEDEF(IDirect3DVertexDeclaration9, __uuidof(IDirect3DVertexDeclaration9));\n_COM_SMARTPTR_TYPEDEF(IDirect3DVertexShader9, __uuidof(IDirect3DVertexShader9));\n_COM_SMARTPTR_TYPEDEF(IDirect3DPixelShader9, __uuidof(IDirect3DPixelShader9));\n_COM_SMARTPTR_TYPEDEF(IDirect3DBaseTexture9, __uuidof(IDirect3DBaseTexture9));\n_COM_SMARTPTR_TYPEDEF(IDirect3DTexture9, __uuidof(IDirect3DTexture9));\n_COM_SMARTPTR_TYPEDEF(IDirect3DVolumeTexture9, __uuidof(IDirect3DVolumeTexture9));\n_COM_SMARTPTR_TYPEDEF(IDirect3DCubeTexture9, __uuidof(IDirect3DCubeTexture9));\n\n_COM_SMARTPTR_TYPEDEF(IDirect3DVertexBuffer9, __uuidof(IDirect3DVertexBuffer9));\n_COM_SMARTPTR_TYPEDEF(IDirect3DIndexBuffer9, __uuidof(IDirect3DIndexBuffer9));\n\n_COM_SMARTPTR_TYPEDEF(IDirect3DSurface9, __uuidof(IDirect3DSurface9));\n_COM_SMARTPTR_TYPEDEF(IDirect3DVolume9, __uuidof(IDirect3DVolume9));\n\n_COM_SMARTPTR_TYPEDEF(IDirect3DSwapChain9, __uuidof(IDirect3DSwapChain9));\n_COM_SMARTPTR_TYPEDEF(IDirect3DQuery9, __uuidof(IDirect3DQuery9));\n\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n_COM_SMARTPTR_TYPEDEF(IDirect3D9Ex, __uuidof(IDirect3D9Ex));\n_COM_SMARTPTR_TYPEDEF(IDirect3DDevice9Ex, __uuidof(IDirect3DDevice9Ex));\n_COM_SMARTPTR_TYPEDEF(IDirect3DSwapChain9Ex, __uuidof(IDirect3DSwapChain9Ex));\n_COM_SMARTPTR_TYPEDEF(IDirect3D9ExOverlayExtension, __uuidof(IDirect3D9ExOverlayExtension));\n_COM_SMARTPTR_TYPEDEF(IDirect3DDevice9Video, __uuidof(IDirect3DDevice9Video));\n_COM_SMARTPTR_TYPEDEF(IDirect3DAuthenticatedChannel9, __uuidof(IDirect3DAuthenticatedChannel9));\n_COM_SMARTPTR_TYPEDEF(IDirect3DCryptoSession9, __uuidof(IDirect3DCryptoSession9));\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n#endif\n\n#endif\n\n\ntypedef interface IDirect3D9                    IDirect3D9;\ntypedef interface IDirect3DDevice9              IDirect3DDevice9;\ntypedef interface IDirect3DStateBlock9          IDirect3DStateBlock9;\ntypedef interface IDirect3DVertexDeclaration9   IDirect3DVertexDeclaration9;\ntypedef interface IDirect3DVertexShader9        IDirect3DVertexShader9;\ntypedef interface IDirect3DPixelShader9         IDirect3DPixelShader9;\ntypedef interface IDirect3DResource9            IDirect3DResource9;\ntypedef interface IDirect3DBaseTexture9         IDirect3DBaseTexture9;\ntypedef interface IDirect3DTexture9             IDirect3DTexture9;\ntypedef interface IDirect3DVolumeTexture9       IDirect3DVolumeTexture9;\ntypedef interface IDirect3DCubeTexture9         IDirect3DCubeTexture9;\ntypedef interface IDirect3DVertexBuffer9        IDirect3DVertexBuffer9;\ntypedef interface IDirect3DIndexBuffer9         IDirect3DIndexBuffer9;\ntypedef interface IDirect3DSurface9             IDirect3DSurface9;\ntypedef interface IDirect3DVolume9              IDirect3DVolume9;\ntypedef interface IDirect3DSwapChain9           IDirect3DSwapChain9;\ntypedef interface IDirect3DQuery9               IDirect3DQuery9;\n\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n\ntypedef interface IDirect3D9Ex                   IDirect3D9Ex;\ntypedef interface IDirect3DDevice9Ex             IDirect3DDevice9Ex;\ntypedef interface IDirect3DSwapChain9Ex          IDirect3DSwapChain9Ex;\ntypedef interface IDirect3D9ExOverlayExtension   IDirect3D9ExOverlayExtension;\ntypedef interface IDirect3DDevice9Video          IDirect3DDevice9Video;\ntypedef interface IDirect3DAuthenticatedChannel9 IDirect3DAuthenticatedChannel9;\ntypedef interface IDirect3DCryptoSession9        IDirect3DCryptoSession9;\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n#include \"d3d9types.h\"\n#include \"d3d9caps.h\"\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n * DLL Function for creating a Direct3D9 object. This object supports\n * enumeration and allows the creation of Direct3DDevice9 objects.\n * Pass the value of the constant D3D_SDK_VERSION to this function, so\n * that the run-time can validate that your application was compiled\n * against the right headers.\n */\n\nIDirect3D9 * WINAPI Direct3DCreate9(UINT SDKVersion);\n\n/*\n * Stubs for graphics profiling.\n */\n \nint WINAPI D3DPERF_BeginEvent( D3DCOLOR col, LPCWSTR wszName );\nint WINAPI D3DPERF_EndEvent( void );\nvoid WINAPI D3DPERF_SetMarker( D3DCOLOR col, LPCWSTR wszName );\nvoid WINAPI D3DPERF_SetRegion( D3DCOLOR col, LPCWSTR wszName );\nBOOL WINAPI D3DPERF_QueryRepeatFrame( void );\n\nvoid WINAPI D3DPERF_SetOptions( DWORD dwOptions );\nDWORD WINAPI D3DPERF_GetStatus( void );\n\n/*\n * Direct3D interfaces\n */\n\n\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3D9\n\nDECLARE_INTERFACE_(IDirect3D9, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3D9 methods ***/\n    STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;\n    STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;\n    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter,DWORD Flags,D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;\n    STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter,D3DFORMAT Format) PURE;\n    STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter,D3DFORMAT Format,UINT Mode,D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter,D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(CheckDeviceType)(THIS_ UINT Adapter,D3DDEVTYPE DevType,D3DFORMAT AdapterFormat,D3DFORMAT BackBufferFormat,BOOL bWindowed) PURE;\n    STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,DWORD Usage,D3DRESOURCETYPE RType,D3DFORMAT CheckFormat) PURE;\n    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SurfaceFormat,BOOL Windowed,D3DMULTISAMPLE_TYPE MultiSampleType,DWORD* pQualityLevels) PURE;\n    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,D3DFORMAT RenderTargetFormat,D3DFORMAT DepthStencilFormat) PURE;\n    STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SourceFormat,D3DFORMAT TargetFormat) PURE;\n    STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DCAPS9* pCaps) PURE;\n    STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;\n    STDMETHOD(CreateDevice)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DDevice9** ppReturnedDeviceInterface) PURE;\n    \n    #ifdef D3D_DEBUG_INFO\n    LPCWSTR Version;\n    #endif\n};\n    \ntypedef struct IDirect3D9 *LPDIRECT3D9, *PDIRECT3D9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3D9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3D9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3D9_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a)\n#define IDirect3D9_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p)\n#define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)\n#define IDirect3D9_GetAdapterModeCount(p,a,b) (p)->lpVtbl->GetAdapterModeCount(p,a,b)\n#define IDirect3D9_EnumAdapterModes(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)\n#define IDirect3D9_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)\n#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)\n#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)\n#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)\n#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)\n#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d) (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)\n#define IDirect3D9_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c)\n#define IDirect3D9_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a)\n#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)\n#else\n#define IDirect3D9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3D9_AddRef(p) (p)->AddRef()\n#define IDirect3D9_Release(p) (p)->Release()\n#define IDirect3D9_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a)\n#define IDirect3D9_GetAdapterCount(p) (p)->GetAdapterCount()\n#define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c)\n#define IDirect3D9_GetAdapterModeCount(p,a,b) (p)->GetAdapterModeCount(a,b)\n#define IDirect3D9_EnumAdapterModes(p,a,b,c,d) (p)->EnumAdapterModes(a,b,c,d)\n#define IDirect3D9_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b)\n#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e)\n#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f)\n#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)\n#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e)\n#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d) (p)->CheckDeviceFormatConversion(a,b,c,d)\n#define IDirect3D9_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c)\n#define IDirect3D9_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a)\n#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f)\n#endif\n\n\n\n\n\n\n\n/* SwapChain */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DDevice9\n\nDECLARE_INTERFACE_(IDirect3DDevice9, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DDevice9 methods ***/\n    STDMETHOD(TestCooperativeLevel)(THIS) PURE;\n    STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;\n    STDMETHOD(EvictManagedResources)(THIS) PURE;\n    STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE;\n    STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE;\n    STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain,D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;\n    STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot,UINT YHotSpot,IDirect3DSurface9* pCursorBitmap) PURE;\n    STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y,DWORD Flags) PURE;\n    STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;\n    STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DSwapChain9** pSwapChain) PURE;\n    STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain,IDirect3DSwapChain9** pSwapChain) PURE;\n    STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;\n    STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;\n    STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion) PURE;\n    STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain,UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer) PURE;\n    STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain,D3DRASTER_STATUS* pRasterStatus) PURE;\n    STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;\n    STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain,DWORD Flags,CONST D3DGAMMARAMP* pRamp) PURE;\n    STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain,D3DGAMMARAMP* pRamp) PURE;\n    STDMETHOD(CreateTexture)(THIS_ UINT Width,UINT Height,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DTexture9** ppTexture,HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DVolumeTexture9** ppVolumeTexture,HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DCubeTexture9** ppCubeTexture,HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,IDirect3DVertexBuffer9** ppVertexBuffer,HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DIndexBuffer9** ppIndexBuffer,HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateRenderTarget)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Lockable,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Discard,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE;\n    STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface,CONST RECT* pSourceRect,IDirect3DSurface9* pDestinationSurface,CONST POINT* pDestPoint) PURE;\n    STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture,IDirect3DBaseTexture9* pDestinationTexture) PURE;\n    STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget,IDirect3DSurface9* pDestSurface) PURE;\n    STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain,IDirect3DSurface9* pDestSurface) PURE;\n    STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface,CONST RECT* pSourceRect,IDirect3DSurface9* pDestSurface,CONST RECT* pDestRect,D3DTEXTUREFILTERTYPE Filter) PURE;\n    STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface,CONST RECT* pRect,D3DCOLOR color) PURE;\n    STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DPOOL Pool,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE;\n    STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex,IDirect3DSurface9* pRenderTarget) PURE;\n    STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex,IDirect3DSurface9** ppRenderTarget) PURE;\n    STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE;\n    STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE;\n    STDMETHOD(BeginScene)(THIS) PURE;\n    STDMETHOD(EndScene)(THIS) PURE;\n    STDMETHOD(Clear)(THIS_ DWORD Count,CONST D3DRECT* pRects,DWORD Flags,D3DCOLOR Color,float Z,DWORD Stencil) PURE;\n    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,CONST D3DMATRIX* pMatrix) PURE;\n    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,D3DMATRIX* pMatrix) PURE;\n    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,CONST D3DMATRIX*) PURE;\n    STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE;\n    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE;\n    STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE;\n    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE;\n    STDMETHOD(SetLight)(THIS_ DWORD Index,CONST D3DLIGHT9*) PURE;\n    STDMETHOD(GetLight)(THIS_ DWORD Index,D3DLIGHT9*) PURE;\n    STDMETHOD(LightEnable)(THIS_ DWORD Index,BOOL Enable) PURE;\n    STDMETHOD(GetLightEnable)(THIS_ DWORD Index,BOOL* pEnable) PURE;\n    STDMETHOD(SetClipPlane)(THIS_ DWORD Index,CONST float* pPlane) PURE;\n    STDMETHOD(GetClipPlane)(THIS_ DWORD Index,float* pPlane) PURE;\n    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD Value) PURE;\n    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD* pValue) PURE;\n    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type,IDirect3DStateBlock9** ppSB) PURE;\n    STDMETHOD(BeginStateBlock)(THIS) PURE;\n    STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE;\n    STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE;\n    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE;\n    STDMETHOD(GetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture9** ppTexture) PURE;\n    STDMETHOD(SetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture9* pTexture) PURE;\n    STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD* pValue) PURE;\n    STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD Value) PURE;\n    STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD* pValue) PURE;\n    STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD Value) PURE;\n    STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;\n    STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber,CONST PALETTEENTRY* pEntries) PURE;\n    STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;\n    STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;\n    STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;\n    STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE;\n    STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;\n    STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;\n    STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;\n    STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;\n    STDMETHOD_(float, GetNPatchMode)(THIS) PURE;\n    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT StartVertex,UINT PrimitiveCount) PURE;\n    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,INT BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT primCount) PURE;\n    STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT PrimitiveCount,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE;\n    STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT MinVertexIndex,UINT NumVertices,UINT PrimitiveCount,CONST void* pIndexData,D3DFORMAT IndexDataFormat,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE;\n    STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,IDirect3DVertexBuffer9* pDestBuffer,IDirect3DVertexDeclaration9* pVertexDecl,DWORD Flags) PURE;\n    STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements,IDirect3DVertexDeclaration9** ppDecl) PURE;\n    STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE;\n    STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE;\n    STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;\n    STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE;\n    STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction,IDirect3DVertexShader9** ppShader) PURE;\n    STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE;\n    STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE;\n    STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister,CONST float* pConstantData,UINT Vector4fCount) PURE;\n    STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister,float* pConstantData,UINT Vector4fCount) PURE;\n    STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister,CONST int* pConstantData,UINT Vector4iCount) PURE;\n    STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister,int* pConstantData,UINT Vector4iCount) PURE;\n    STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister,CONST BOOL* pConstantData,UINT  BoolCount) PURE;\n    STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister,BOOL* pConstantData,UINT BoolCount) PURE;\n    STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer9* pStreamData,UINT OffsetInBytes,UINT Stride) PURE;\n    STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer9** ppStreamData,UINT* pOffsetInBytes,UINT* pStride) PURE;\n    STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber,UINT Setting) PURE;\n    STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber,UINT* pSetting) PURE;\n    STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE;\n    STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE;\n    STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction,IDirect3DPixelShader9** ppShader) PURE;\n    STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE;\n    STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE;\n    STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister,CONST float* pConstantData,UINT Vector4fCount) PURE;\n    STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister,float* pConstantData,UINT Vector4fCount) PURE;\n    STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister,CONST int* pConstantData,UINT Vector4iCount) PURE;\n    STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister,int* pConstantData,UINT Vector4iCount) PURE;\n    STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister,CONST BOOL* pConstantData,UINT  BoolCount) PURE;\n    STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister,BOOL* pConstantData,UINT BoolCount) PURE;\n    STDMETHOD(DrawRectPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE;\n    STDMETHOD(DrawTriPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE;\n    STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;\n    STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type,IDirect3DQuery9** ppQuery) PURE;\n    \n    #ifdef D3D_DEBUG_INFO\n    D3DDEVICE_CREATION_PARAMETERS CreationParameters;\n    D3DPRESENT_PARAMETERS PresentParameters;\n    D3DDISPLAYMODE DisplayMode;\n    D3DCAPS9 Caps;\n    \n    UINT AvailableTextureMem;\n    UINT SwapChains;\n    UINT Textures;\n    UINT VertexBuffers;\n    UINT IndexBuffers;\n    UINT VertexShaders;\n    UINT PixelShaders;\n    \n    D3DVIEWPORT9 Viewport;\n    D3DMATRIX ProjectionMatrix;\n    D3DMATRIX ViewMatrix;\n    D3DMATRIX WorldMatrix;\n    D3DMATRIX TextureMatrices[8];\n    \n    DWORD FVF;\n    UINT VertexSize;\n    DWORD VertexShaderVersion;\n    DWORD PixelShaderVersion;\n    BOOL SoftwareVertexProcessing;\n    \n    D3DMATERIAL9 Material;\n    D3DLIGHT9 Lights[16];\n    BOOL LightsEnabled[16];\n    \n    D3DGAMMARAMP GammaRamp;\n    RECT ScissorRect;\n    BOOL DialogBoxMode;\n    #endif\n};\n    \ntypedef struct IDirect3DDevice9 *LPDIRECT3DDEVICE9, *PDIRECT3DDEVICE9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DDevice9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DDevice9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DDevice9_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p)\n#define IDirect3DDevice9_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p)\n#define IDirect3DDevice9_EvictManagedResources(p) (p)->lpVtbl->EvictManagedResources(p)\n#define IDirect3DDevice9_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)\n#define IDirect3DDevice9_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a)\n#define IDirect3DDevice9_GetDisplayMode(p,a,b) (p)->lpVtbl->GetDisplayMode(p,a,b)\n#define IDirect3DDevice9_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a)\n#define IDirect3DDevice9_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c)\n#define IDirect3DDevice9_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c)\n#define IDirect3DDevice9_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a)\n#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)\n#define IDirect3DDevice9_GetSwapChain(p,a,b) (p)->lpVtbl->GetSwapChain(p,a,b)\n#define IDirect3DDevice9_GetNumberOfSwapChains(p) (p)->lpVtbl->GetNumberOfSwapChains(p)\n#define IDirect3DDevice9_Reset(p,a) (p)->lpVtbl->Reset(p,a)\n#define IDirect3DDevice9_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d)\n#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d) (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)\n#define IDirect3DDevice9_GetRasterStatus(p,a,b) (p)->lpVtbl->GetRasterStatus(p,a,b)\n#define IDirect3DDevice9_SetDialogBoxMode(p,a) (p)->lpVtbl->SetDialogBoxMode(p,a)\n#define IDirect3DDevice9_SetGammaRamp(p,a,b,c) (p)->lpVtbl->SetGammaRamp(p,a,b,c)\n#define IDirect3DDevice9_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b)\n#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)\n#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)\n#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)\n#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d) (p)->lpVtbl->UpdateSurface(p,a,b,c,d)\n#define IDirect3DDevice9_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b)\n#define IDirect3DDevice9_GetRenderTargetData(p,a,b) (p)->lpVtbl->GetRenderTargetData(p,a,b)\n#define IDirect3DDevice9_GetFrontBufferData(p,a,b) (p)->lpVtbl->GetFrontBufferData(p,a,b)\n#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e) (p)->lpVtbl->StretchRect(p,a,b,c,d,e)\n#define IDirect3DDevice9_ColorFill(p,a,b,c) (p)->lpVtbl->ColorFill(p,a,b,c)\n#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)\n#define IDirect3DDevice9_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)\n#define IDirect3DDevice9_GetRenderTarget(p,a,b) (p)->lpVtbl->GetRenderTarget(p,a,b)\n#define IDirect3DDevice9_SetDepthStencilSurface(p,a) (p)->lpVtbl->SetDepthStencilSurface(p,a)\n#define IDirect3DDevice9_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a)\n#define IDirect3DDevice9_BeginScene(p) (p)->lpVtbl->BeginScene(p)\n#define IDirect3DDevice9_EndScene(p) (p)->lpVtbl->EndScene(p)\n#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f)\n#define IDirect3DDevice9_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)\n#define IDirect3DDevice9_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)\n#define IDirect3DDevice9_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)\n#define IDirect3DDevice9_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)\n#define IDirect3DDevice9_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)\n#define IDirect3DDevice9_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DDevice9_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)\n#define IDirect3DDevice9_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b)\n#define IDirect3DDevice9_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b)\n#define IDirect3DDevice9_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b)\n#define IDirect3DDevice9_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b)\n#define IDirect3DDevice9_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b)\n#define IDirect3DDevice9_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b)\n#define IDirect3DDevice9_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)\n#define IDirect3DDevice9_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)\n#define IDirect3DDevice9_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b)\n#define IDirect3DDevice9_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p)\n#define IDirect3DDevice9_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a)\n#define IDirect3DDevice9_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)\n#define IDirect3DDevice9_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)\n#define IDirect3DDevice9_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b)\n#define IDirect3DDevice9_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b)\n#define IDirect3DDevice9_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c)\n#define IDirect3DDevice9_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c)\n#define IDirect3DDevice9_GetSamplerState(p,a,b,c) (p)->lpVtbl->GetSamplerState(p,a,b,c)\n#define IDirect3DDevice9_SetSamplerState(p,a,b,c) (p)->lpVtbl->SetSamplerState(p,a,b,c)\n#define IDirect3DDevice9_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a)\n#define IDirect3DDevice9_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b)\n#define IDirect3DDevice9_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b)\n#define IDirect3DDevice9_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a)\n#define IDirect3DDevice9_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a)\n#define IDirect3DDevice9_SetScissorRect(p,a) (p)->lpVtbl->SetScissorRect(p,a)\n#define IDirect3DDevice9_GetScissorRect(p,a) (p)->lpVtbl->GetScissorRect(p,a)\n#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a) (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)\n#define IDirect3DDevice9_GetSoftwareVertexProcessing(p) (p)->lpVtbl->GetSoftwareVertexProcessing(p)\n#define IDirect3DDevice9_SetNPatchMode(p,a) (p)->lpVtbl->SetNPatchMode(p,a)\n#define IDirect3DDevice9_GetNPatchMode(p) (p)->lpVtbl->GetNPatchMode(p)\n#define IDirect3DDevice9_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c)\n#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)\n#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)\n#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)\n#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b) (p)->lpVtbl->CreateVertexDeclaration(p,a,b)\n#define IDirect3DDevice9_SetVertexDeclaration(p,a) (p)->lpVtbl->SetVertexDeclaration(p,a)\n#define IDirect3DDevice9_GetVertexDeclaration(p,a) (p)->lpVtbl->GetVertexDeclaration(p,a)\n#define IDirect3DDevice9_SetFVF(p,a) (p)->lpVtbl->SetFVF(p,a)\n#define IDirect3DDevice9_GetFVF(p,a) (p)->lpVtbl->GetFVF(p,a)\n#define IDirect3DDevice9_CreateVertexShader(p,a,b) (p)->lpVtbl->CreateVertexShader(p,a,b)\n#define IDirect3DDevice9_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a)\n#define IDirect3DDevice9_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a)\n#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)\n#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)\n#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)\n#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)\n#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)\n#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)\n#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d) (p)->lpVtbl->SetStreamSource(p,a,b,c,d)\n#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d) (p)->lpVtbl->GetStreamSource(p,a,b,c,d)\n#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b) (p)->lpVtbl->SetStreamSourceFreq(p,a,b)\n#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b) (p)->lpVtbl->GetStreamSourceFreq(p,a,b)\n#define IDirect3DDevice9_SetIndices(p,a) (p)->lpVtbl->SetIndices(p,a)\n#define IDirect3DDevice9_GetIndices(p,a) (p)->lpVtbl->GetIndices(p,a)\n#define IDirect3DDevice9_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b)\n#define IDirect3DDevice9_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a)\n#define IDirect3DDevice9_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a)\n#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)\n#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)\n#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)\n#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)\n#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)\n#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)\n#define IDirect3DDevice9_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c)\n#define IDirect3DDevice9_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c)\n#define IDirect3DDevice9_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a)\n#define IDirect3DDevice9_CreateQuery(p,a,b) (p)->lpVtbl->CreateQuery(p,a,b)\n#else\n#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DDevice9_AddRef(p) (p)->AddRef()\n#define IDirect3DDevice9_Release(p) (p)->Release()\n#define IDirect3DDevice9_TestCooperativeLevel(p) (p)->TestCooperativeLevel()\n#define IDirect3DDevice9_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem()\n#define IDirect3DDevice9_EvictManagedResources(p) (p)->EvictManagedResources()\n#define IDirect3DDevice9_GetDirect3D(p,a) (p)->GetDirect3D(a)\n#define IDirect3DDevice9_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a)\n#define IDirect3DDevice9_GetDisplayMode(p,a,b) (p)->GetDisplayMode(a,b)\n#define IDirect3DDevice9_GetCreationParameters(p,a) (p)->GetCreationParameters(a)\n#define IDirect3DDevice9_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c)\n#define IDirect3DDevice9_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c)\n#define IDirect3DDevice9_ShowCursor(p,a) (p)->ShowCursor(a)\n#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b)\n#define IDirect3DDevice9_GetSwapChain(p,a,b) (p)->GetSwapChain(a,b)\n#define IDirect3DDevice9_GetNumberOfSwapChains(p) (p)->GetNumberOfSwapChains()\n#define IDirect3DDevice9_Reset(p,a) (p)->Reset(a)\n#define IDirect3DDevice9_Present(p,a,b,c,d) (p)->Present(a,b,c,d)\n#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d) (p)->GetBackBuffer(a,b,c,d)\n#define IDirect3DDevice9_GetRasterStatus(p,a,b) (p)->GetRasterStatus(a,b)\n#define IDirect3DDevice9_SetDialogBoxMode(p,a) (p)->SetDialogBoxMode(a)\n#define IDirect3DDevice9_SetGammaRamp(p,a,b,c) (p)->SetGammaRamp(a,b,c)\n#define IDirect3DDevice9_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b)\n#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->CreateTexture(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)\n#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->CreateCubeTexture(a,b,c,d,e,f,g)\n#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->CreateVertexBuffer(a,b,c,d,e,f)\n#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->CreateIndexBuffer(a,b,c,d,e,f)\n#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d) (p)->UpdateSurface(a,b,c,d)\n#define IDirect3DDevice9_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b)\n#define IDirect3DDevice9_GetRenderTargetData(p,a,b) (p)->GetRenderTargetData(a,b)\n#define IDirect3DDevice9_GetFrontBufferData(p,a,b) (p)->GetFrontBufferData(a,b)\n#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e) (p)->StretchRect(a,b,c,d,e)\n#define IDirect3DDevice9_ColorFill(p,a,b,c) (p)->ColorFill(a,b,c)\n#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)\n#define IDirect3DDevice9_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)\n#define IDirect3DDevice9_GetRenderTarget(p,a,b) (p)->GetRenderTarget(a,b)\n#define IDirect3DDevice9_SetDepthStencilSurface(p,a) (p)->SetDepthStencilSurface(a)\n#define IDirect3DDevice9_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a)\n#define IDirect3DDevice9_BeginScene(p) (p)->BeginScene()\n#define IDirect3DDevice9_EndScene(p) (p)->EndScene()\n#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f)\n#define IDirect3DDevice9_SetTransform(p,a,b) (p)->SetTransform(a,b)\n#define IDirect3DDevice9_GetTransform(p,a,b) (p)->GetTransform(a,b)\n#define IDirect3DDevice9_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)\n#define IDirect3DDevice9_SetViewport(p,a) (p)->SetViewport(a)\n#define IDirect3DDevice9_GetViewport(p,a) (p)->GetViewport(a)\n#define IDirect3DDevice9_SetMaterial(p,a) (p)->SetMaterial(a)\n#define IDirect3DDevice9_GetMaterial(p,a) (p)->GetMaterial(a)\n#define IDirect3DDevice9_SetLight(p,a,b) (p)->SetLight(a,b)\n#define IDirect3DDevice9_GetLight(p,a,b) (p)->GetLight(a,b)\n#define IDirect3DDevice9_LightEnable(p,a,b) (p)->LightEnable(a,b)\n#define IDirect3DDevice9_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b)\n#define IDirect3DDevice9_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b)\n#define IDirect3DDevice9_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b)\n#define IDirect3DDevice9_SetRenderState(p,a,b) (p)->SetRenderState(a,b)\n#define IDirect3DDevice9_GetRenderState(p,a,b) (p)->GetRenderState(a,b)\n#define IDirect3DDevice9_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b)\n#define IDirect3DDevice9_BeginStateBlock(p) (p)->BeginStateBlock()\n#define IDirect3DDevice9_EndStateBlock(p,a) (p)->EndStateBlock(a)\n#define IDirect3DDevice9_SetClipStatus(p,a) (p)->SetClipStatus(a)\n#define IDirect3DDevice9_GetClipStatus(p,a) (p)->GetClipStatus(a)\n#define IDirect3DDevice9_GetTexture(p,a,b) (p)->GetTexture(a,b)\n#define IDirect3DDevice9_SetTexture(p,a,b) (p)->SetTexture(a,b)\n#define IDirect3DDevice9_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c)\n#define IDirect3DDevice9_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c)\n#define IDirect3DDevice9_GetSamplerState(p,a,b,c) (p)->GetSamplerState(a,b,c)\n#define IDirect3DDevice9_SetSamplerState(p,a,b,c) (p)->SetSamplerState(a,b,c)\n#define IDirect3DDevice9_ValidateDevice(p,a) (p)->ValidateDevice(a)\n#define IDirect3DDevice9_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b)\n#define IDirect3DDevice9_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b)\n#define IDirect3DDevice9_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a)\n#define IDirect3DDevice9_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a)\n#define IDirect3DDevice9_SetScissorRect(p,a) (p)->SetScissorRect(a)\n#define IDirect3DDevice9_GetScissorRect(p,a) (p)->GetScissorRect(a)\n#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a) (p)->SetSoftwareVertexProcessing(a)\n#define IDirect3DDevice9_GetSoftwareVertexProcessing(p) (p)->GetSoftwareVertexProcessing()\n#define IDirect3DDevice9_SetNPatchMode(p,a) (p)->SetNPatchMode(a)\n#define IDirect3DDevice9_GetNPatchMode(p) (p)->GetNPatchMode()\n#define IDirect3DDevice9_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c)\n#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->DrawIndexedPrimitive(a,b,c,d,e,f)\n#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d)\n#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f) (p)->ProcessVertices(a,b,c,d,e,f)\n#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b) (p)->CreateVertexDeclaration(a,b)\n#define IDirect3DDevice9_SetVertexDeclaration(p,a) (p)->SetVertexDeclaration(a)\n#define IDirect3DDevice9_GetVertexDeclaration(p,a) (p)->GetVertexDeclaration(a)\n#define IDirect3DDevice9_SetFVF(p,a) (p)->SetFVF(a)\n#define IDirect3DDevice9_GetFVF(p,a) (p)->GetFVF(a)\n#define IDirect3DDevice9_CreateVertexShader(p,a,b) (p)->CreateVertexShader(a,b)\n#define IDirect3DDevice9_SetVertexShader(p,a) (p)->SetVertexShader(a)\n#define IDirect3DDevice9_GetVertexShader(p,a) (p)->GetVertexShader(a)\n#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c) (p)->SetVertexShaderConstantF(a,b,c)\n#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c) (p)->GetVertexShaderConstantF(a,b,c)\n#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c) (p)->SetVertexShaderConstantI(a,b,c)\n#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c) (p)->GetVertexShaderConstantI(a,b,c)\n#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c) (p)->SetVertexShaderConstantB(a,b,c)\n#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c) (p)->GetVertexShaderConstantB(a,b,c)\n#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d) (p)->SetStreamSource(a,b,c,d)\n#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d) (p)->GetStreamSource(a,b,c,d)\n#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b) (p)->SetStreamSourceFreq(a,b)\n#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b) (p)->GetStreamSourceFreq(a,b)\n#define IDirect3DDevice9_SetIndices(p,a) (p)->SetIndices(a)\n#define IDirect3DDevice9_GetIndices(p,a) (p)->GetIndices(a)\n#define IDirect3DDevice9_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b)\n#define IDirect3DDevice9_SetPixelShader(p,a) (p)->SetPixelShader(a)\n#define IDirect3DDevice9_GetPixelShader(p,a) (p)->GetPixelShader(a)\n#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c) (p)->SetPixelShaderConstantF(a,b,c)\n#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c) (p)->GetPixelShaderConstantF(a,b,c)\n#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c) (p)->SetPixelShaderConstantI(a,b,c)\n#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c) (p)->GetPixelShaderConstantI(a,b,c)\n#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c) (p)->SetPixelShaderConstantB(a,b,c)\n#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c) (p)->GetPixelShaderConstantB(a,b,c)\n#define IDirect3DDevice9_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c)\n#define IDirect3DDevice9_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c)\n#define IDirect3DDevice9_DeletePatch(p,a) (p)->DeletePatch(a)\n#define IDirect3DDevice9_CreateQuery(p,a,b) (p)->CreateQuery(a,b)\n#endif\n\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DStateBlock9\n\nDECLARE_INTERFACE_(IDirect3DStateBlock9, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DStateBlock9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(Capture)(THIS) PURE;\n    STDMETHOD(Apply)(THIS) PURE;\n    \n    #ifdef D3D_DEBUG_INFO\n    LPCWSTR CreationCallStack;\n    #endif\n};\n    \ntypedef struct IDirect3DStateBlock9 *LPDIRECT3DSTATEBLOCK9, *PDIRECT3DSTATEBLOCK9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DStateBlock9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DStateBlock9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DStateBlock9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DStateBlock9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DStateBlock9_Capture(p) (p)->lpVtbl->Capture(p)\n#define IDirect3DStateBlock9_Apply(p) (p)->lpVtbl->Apply(p)\n#else\n#define IDirect3DStateBlock9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DStateBlock9_AddRef(p) (p)->AddRef()\n#define IDirect3DStateBlock9_Release(p) (p)->Release()\n#define IDirect3DStateBlock9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DStateBlock9_Capture(p) (p)->Capture()\n#define IDirect3DStateBlock9_Apply(p) (p)->Apply()\n#endif\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DSwapChain9\n\nDECLARE_INTERFACE_(IDirect3DSwapChain9, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DSwapChain9 methods ***/\n    STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion,DWORD dwFlags) PURE;\n    STDMETHOD(GetFrontBufferData)(THIS_ IDirect3DSurface9* pDestSurface) PURE;\n    STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer) PURE;\n    STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS* pRasterStatus) PURE;\n    STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;\n    \n    #ifdef D3D_DEBUG_INFO\n    D3DPRESENT_PARAMETERS PresentParameters;\n    D3DDISPLAYMODE DisplayMode;\n    LPCWSTR CreationCallStack;\n    #endif\n};\n    \ntypedef struct IDirect3DSwapChain9 *LPDIRECT3DSWAPCHAIN9, *PDIRECT3DSWAPCHAIN9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DSwapChain9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DSwapChain9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DSwapChain9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DSwapChain9_Present(p,a,b,c,d,e) (p)->lpVtbl->Present(p,a,b,c,d,e)\n#define IDirect3DSwapChain9_GetFrontBufferData(p,a) (p)->lpVtbl->GetFrontBufferData(p,a)\n#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c)\n#define IDirect3DSwapChain9_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a)\n#define IDirect3DSwapChain9_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a)\n#define IDirect3DSwapChain9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DSwapChain9_GetPresentParameters(p,a) (p)->lpVtbl->GetPresentParameters(p,a)\n#else\n#define IDirect3DSwapChain9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DSwapChain9_AddRef(p) (p)->AddRef()\n#define IDirect3DSwapChain9_Release(p) (p)->Release()\n#define IDirect3DSwapChain9_Present(p,a,b,c,d,e) (p)->Present(a,b,c,d,e)\n#define IDirect3DSwapChain9_GetFrontBufferData(p,a) (p)->GetFrontBufferData(a)\n#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c)\n#define IDirect3DSwapChain9_GetRasterStatus(p,a) (p)->GetRasterStatus(a)\n#define IDirect3DSwapChain9_GetDisplayMode(p,a) (p)->GetDisplayMode(a)\n#define IDirect3DSwapChain9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DSwapChain9_GetPresentParameters(p,a) (p)->GetPresentParameters(a)\n#endif\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DResource9\n\nDECLARE_INTERFACE_(IDirect3DResource9, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n};\n    \ntypedef struct IDirect3DResource9 *LPDIRECT3DRESOURCE9, *PDIRECT3DRESOURCE9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DResource9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DResource9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DResource9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DResource9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DResource9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DResource9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DResource9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DResource9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DResource9_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DResource9_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DResource9_GetType(p) (p)->lpVtbl->GetType(p)\n#else\n#define IDirect3DResource9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DResource9_AddRef(p) (p)->AddRef()\n#define IDirect3DResource9_Release(p) (p)->Release()\n#define IDirect3DResource9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DResource9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DResource9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DResource9_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DResource9_SetPriority(p,a) (p)->SetPriority(a)\n#define IDirect3DResource9_GetPriority(p) (p)->GetPriority()\n#define IDirect3DResource9_PreLoad(p) (p)->PreLoad()\n#define IDirect3DResource9_GetType(p) (p)->GetType()\n#endif\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DVertexDeclaration9\n\nDECLARE_INTERFACE_(IDirect3DVertexDeclaration9, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DVertexDeclaration9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9* pElement,UINT* pNumElements) PURE;\n    \n    #ifdef D3D_DEBUG_INFO\n    LPCWSTR CreationCallStack;\n    #endif\n};\n    \ntypedef struct IDirect3DVertexDeclaration9 *LPDIRECT3DVERTEXDECLARATION9, *PDIRECT3DVERTEXDECLARATION9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVertexDeclaration9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DVertexDeclaration9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DVertexDeclaration9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b) (p)->lpVtbl->GetDeclaration(p,a,b)\n#else\n#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DVertexDeclaration9_AddRef(p) (p)->AddRef()\n#define IDirect3DVertexDeclaration9_Release(p) (p)->Release()\n#define IDirect3DVertexDeclaration9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b) (p)->GetDeclaration(a,b)\n#endif\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DVertexShader9\n\nDECLARE_INTERFACE_(IDirect3DVertexShader9, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DVertexShader9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(GetFunction)(THIS_ void*,UINT* pSizeOfData) PURE;\n    \n    #ifdef D3D_DEBUG_INFO\n    DWORD Version;\n    LPCWSTR CreationCallStack;\n    #endif\n};\n    \ntypedef struct IDirect3DVertexShader9 *LPDIRECT3DVERTEXSHADER9, *PDIRECT3DVERTEXSHADER9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DVertexShader9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVertexShader9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DVertexShader9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DVertexShader9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVertexShader9_GetFunction(p,a,b) (p)->lpVtbl->GetFunction(p,a,b)\n#else\n#define IDirect3DVertexShader9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DVertexShader9_AddRef(p) (p)->AddRef()\n#define IDirect3DVertexShader9_Release(p) (p)->Release()\n#define IDirect3DVertexShader9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DVertexShader9_GetFunction(p,a,b) (p)->GetFunction(a,b)\n#endif\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DPixelShader9\n\nDECLARE_INTERFACE_(IDirect3DPixelShader9, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DPixelShader9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(GetFunction)(THIS_ void*,UINT* pSizeOfData) PURE;\n    \n    #ifdef D3D_DEBUG_INFO\n    DWORD Version;\n    LPCWSTR CreationCallStack;\n    #endif\n};\n    \ntypedef struct IDirect3DPixelShader9 *LPDIRECT3DPIXELSHADER9, *PDIRECT3DPIXELSHADER9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DPixelShader9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DPixelShader9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DPixelShader9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DPixelShader9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DPixelShader9_GetFunction(p,a,b) (p)->lpVtbl->GetFunction(p,a,b)\n#else\n#define IDirect3DPixelShader9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DPixelShader9_AddRef(p) (p)->AddRef()\n#define IDirect3DPixelShader9_Release(p) (p)->Release()\n#define IDirect3DPixelShader9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DPixelShader9_GetFunction(p,a,b) (p)->GetFunction(a,b)\n#endif\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DBaseTexture9\n\nDECLARE_INTERFACE_(IDirect3DBaseTexture9, IDirect3DResource9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;\n    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;\n    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;\n    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;\n    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;\n};\n    \ntypedef struct IDirect3DBaseTexture9 *LPDIRECT3DBASETEXTURE9, *PDIRECT3DBASETEXTURE9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DBaseTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DBaseTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DBaseTexture9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DBaseTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DBaseTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DBaseTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DBaseTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DBaseTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DBaseTexture9_GetType(p) (p)->lpVtbl->GetType(p)\n#define IDirect3DBaseTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DBaseTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)\n#define IDirect3DBaseTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)\n#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)\n#define IDirect3DBaseTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)\n#define IDirect3DBaseTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)\n#else\n#define IDirect3DBaseTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DBaseTexture9_AddRef(p) (p)->AddRef()\n#define IDirect3DBaseTexture9_Release(p) (p)->Release()\n#define IDirect3DBaseTexture9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DBaseTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DBaseTexture9_SetPriority(p,a) (p)->SetPriority(a)\n#define IDirect3DBaseTexture9_GetPriority(p) (p)->GetPriority()\n#define IDirect3DBaseTexture9_PreLoad(p) (p)->PreLoad()\n#define IDirect3DBaseTexture9_GetType(p) (p)->GetType()\n#define IDirect3DBaseTexture9_SetLOD(p,a) (p)->SetLOD(a)\n#define IDirect3DBaseTexture9_GetLOD(p) (p)->GetLOD()\n#define IDirect3DBaseTexture9_GetLevelCount(p) (p)->GetLevelCount()\n#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)\n#define IDirect3DBaseTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()\n#define IDirect3DBaseTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()\n#endif\n\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DTexture9\n\nDECLARE_INTERFACE_(IDirect3DTexture9, IDirect3DBaseTexture9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DBaseTexture9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;\n    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;\n    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;\n    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;\n    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;\n    STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC *pDesc) PURE;\n    STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level,IDirect3DSurface9** ppSurfaceLevel) PURE;\n    STDMETHOD(LockRect)(THIS_ UINT Level,D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags) PURE;\n    STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE;\n    STDMETHOD(AddDirtyRect)(THIS_ CONST RECT* pDirtyRect) PURE;\n    \n    #ifdef D3D_DEBUG_INFO\n    LPCWSTR Name;\n    UINT Width;\n    UINT Height;\n    UINT Levels;\n    DWORD Usage;\n    D3DFORMAT Format;\n    D3DPOOL Pool;\n    DWORD Priority;\n    DWORD LOD;\n    D3DTEXTUREFILTERTYPE FilterType;\n    UINT LockCount;\n    LPCWSTR CreationCallStack;\n    #endif\n};\n    \ntypedef struct IDirect3DTexture9 *LPDIRECT3DTEXTURE9, *PDIRECT3DTEXTURE9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DTexture9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DTexture9_GetType(p) (p)->lpVtbl->GetType(p)\n#define IDirect3DTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)\n#define IDirect3DTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)\n#define IDirect3DTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)\n#define IDirect3DTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)\n#define IDirect3DTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)\n#define IDirect3DTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)\n#define IDirect3DTexture9_GetSurfaceLevel(p,a,b) (p)->lpVtbl->GetSurfaceLevel(p,a,b)\n#define IDirect3DTexture9_LockRect(p,a,b,c,d) (p)->lpVtbl->LockRect(p,a,b,c,d)\n#define IDirect3DTexture9_UnlockRect(p,a) (p)->lpVtbl->UnlockRect(p,a)\n#define IDirect3DTexture9_AddDirtyRect(p,a) (p)->lpVtbl->AddDirtyRect(p,a)\n#else\n#define IDirect3DTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DTexture9_AddRef(p) (p)->AddRef()\n#define IDirect3DTexture9_Release(p) (p)->Release()\n#define IDirect3DTexture9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DTexture9_SetPriority(p,a) (p)->SetPriority(a)\n#define IDirect3DTexture9_GetPriority(p) (p)->GetPriority()\n#define IDirect3DTexture9_PreLoad(p) (p)->PreLoad()\n#define IDirect3DTexture9_GetType(p) (p)->GetType()\n#define IDirect3DTexture9_SetLOD(p,a) (p)->SetLOD(a)\n#define IDirect3DTexture9_GetLOD(p) (p)->GetLOD()\n#define IDirect3DTexture9_GetLevelCount(p) (p)->GetLevelCount()\n#define IDirect3DTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)\n#define IDirect3DTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()\n#define IDirect3DTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()\n#define IDirect3DTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)\n#define IDirect3DTexture9_GetSurfaceLevel(p,a,b) (p)->GetSurfaceLevel(a,b)\n#define IDirect3DTexture9_LockRect(p,a,b,c,d) (p)->LockRect(a,b,c,d)\n#define IDirect3DTexture9_UnlockRect(p,a) (p)->UnlockRect(a)\n#define IDirect3DTexture9_AddDirtyRect(p,a) (p)->AddDirtyRect(a)\n#endif\n\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DVolumeTexture9\n\nDECLARE_INTERFACE_(IDirect3DVolumeTexture9, IDirect3DBaseTexture9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DBaseTexture9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;\n    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;\n    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;\n    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;\n    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;\n    STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DVOLUME_DESC *pDesc) PURE;\n    STDMETHOD(GetVolumeLevel)(THIS_ UINT Level,IDirect3DVolume9** ppVolumeLevel) PURE;\n    STDMETHOD(LockBox)(THIS_ UINT Level,D3DLOCKED_BOX* pLockedVolume,CONST D3DBOX* pBox,DWORD Flags) PURE;\n    STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE;\n    STDMETHOD(AddDirtyBox)(THIS_ CONST D3DBOX* pDirtyBox) PURE;\n    \n    #ifdef D3D_DEBUG_INFO\n    LPCWSTR Name;\n    UINT Width;\n    UINT Height;\n    UINT Depth;\n    UINT Levels;\n    DWORD Usage;\n    D3DFORMAT Format;\n    D3DPOOL Pool;\n    DWORD Priority;\n    DWORD LOD;\n    D3DTEXTUREFILTERTYPE FilterType;\n    UINT LockCount;\n    LPCWSTR CreationCallStack;\n    #endif\n};\n    \ntypedef struct IDirect3DVolumeTexture9 *LPDIRECT3DVOLUMETEXTURE9, *PDIRECT3DVOLUMETEXTURE9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVolumeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DVolumeTexture9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DVolumeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DVolumeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DVolumeTexture9_GetType(p) (p)->lpVtbl->GetType(p)\n#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DVolumeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)\n#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)\n#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)\n#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)\n#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)\n#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)\n#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b)\n#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d)\n#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a)\n#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a)\n#else\n#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DVolumeTexture9_AddRef(p) (p)->AddRef()\n#define IDirect3DVolumeTexture9_Release(p) (p)->Release()\n#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->SetPriority(a)\n#define IDirect3DVolumeTexture9_GetPriority(p) (p)->GetPriority()\n#define IDirect3DVolumeTexture9_PreLoad(p) (p)->PreLoad()\n#define IDirect3DVolumeTexture9_GetType(p) (p)->GetType()\n#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->SetLOD(a)\n#define IDirect3DVolumeTexture9_GetLOD(p) (p)->GetLOD()\n#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->GetLevelCount()\n#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)\n#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()\n#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()\n#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)\n#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b)\n#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d)\n#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->UnlockBox(a)\n#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->AddDirtyBox(a)\n#endif\n\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DCubeTexture9\n\nDECLARE_INTERFACE_(IDirect3DCubeTexture9, IDirect3DBaseTexture9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DBaseTexture9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;\n    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;\n    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;\n    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;\n    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;\n    STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC *pDesc) PURE;\n    STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level,IDirect3DSurface9** ppCubeMapSurface) PURE;\n    STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level,D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags) PURE;\n    STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level) PURE;\n    STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES FaceType,CONST RECT* pDirtyRect) PURE;\n    \n    #ifdef D3D_DEBUG_INFO\n    LPCWSTR Name;\n    UINT Width;\n    UINT Height;\n    UINT Levels;\n    DWORD Usage;\n    D3DFORMAT Format;\n    D3DPOOL Pool;\n    DWORD Priority;\n    DWORD LOD;\n    D3DTEXTUREFILTERTYPE FilterType;\n    UINT LockCount;\n    LPCWSTR CreationCallStack;\n    #endif\n};\n    \ntypedef struct IDirect3DCubeTexture9 *LPDIRECT3DCUBETEXTURE9, *PDIRECT3DCUBETEXTURE9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DCubeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DCubeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DCubeTexture9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DCubeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DCubeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DCubeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DCubeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DCubeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DCubeTexture9_GetType(p) (p)->lpVtbl->GetType(p)\n#define IDirect3DCubeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DCubeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)\n#define IDirect3DCubeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)\n#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)\n#define IDirect3DCubeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)\n#define IDirect3DCubeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)\n#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)\n#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c) (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)\n#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e) (p)->lpVtbl->LockRect(p,a,b,c,d,e)\n#define IDirect3DCubeTexture9_UnlockRect(p,a,b) (p)->lpVtbl->UnlockRect(p,a,b)\n#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b) (p)->lpVtbl->AddDirtyRect(p,a,b)\n#else\n#define IDirect3DCubeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DCubeTexture9_AddRef(p) (p)->AddRef()\n#define IDirect3DCubeTexture9_Release(p) (p)->Release()\n#define IDirect3DCubeTexture9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DCubeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DCubeTexture9_SetPriority(p,a) (p)->SetPriority(a)\n#define IDirect3DCubeTexture9_GetPriority(p) (p)->GetPriority()\n#define IDirect3DCubeTexture9_PreLoad(p) (p)->PreLoad()\n#define IDirect3DCubeTexture9_GetType(p) (p)->GetType()\n#define IDirect3DCubeTexture9_SetLOD(p,a) (p)->SetLOD(a)\n#define IDirect3DCubeTexture9_GetLOD(p) (p)->GetLOD()\n#define IDirect3DCubeTexture9_GetLevelCount(p) (p)->GetLevelCount()\n#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)\n#define IDirect3DCubeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()\n#define IDirect3DCubeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()\n#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)\n#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c) (p)->GetCubeMapSurface(a,b,c)\n#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e) (p)->LockRect(a,b,c,d,e)\n#define IDirect3DCubeTexture9_UnlockRect(p,a,b) (p)->UnlockRect(a,b)\n#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b) (p)->AddDirtyRect(a,b)\n#endif\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DVertexBuffer9\n\nDECLARE_INTERFACE_(IDirect3DVertexBuffer9, IDirect3DResource9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    STDMETHOD(Lock)(THIS_ UINT OffsetToLock,UINT SizeToLock,void** ppbData,DWORD Flags) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC *pDesc) PURE;\n    \n    #ifdef D3D_DEBUG_INFO\n    LPCWSTR Name;\n    UINT Length;\n    DWORD Usage;\n    DWORD FVF;\n    D3DPOOL Pool;\n    DWORD Priority;\n    UINT LockCount;\n    LPCWSTR CreationCallStack;\n    #endif\n};\n    \ntypedef struct IDirect3DVertexBuffer9 *LPDIRECT3DVERTEXBUFFER9, *PDIRECT3DVERTEXBUFFER9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DVertexBuffer9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVertexBuffer9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DVertexBuffer9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DVertexBuffer9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DVertexBuffer9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DVertexBuffer9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DVertexBuffer9_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DVertexBuffer9_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DVertexBuffer9_GetType(p) (p)->lpVtbl->GetType(p)\n#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirect3DVertexBuffer9_Unlock(p) (p)->lpVtbl->Unlock(p)\n#define IDirect3DVertexBuffer9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)\n#else\n#define IDirect3DVertexBuffer9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DVertexBuffer9_AddRef(p) (p)->AddRef()\n#define IDirect3DVertexBuffer9_Release(p) (p)->Release()\n#define IDirect3DVertexBuffer9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DVertexBuffer9_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DVertexBuffer9_SetPriority(p,a) (p)->SetPriority(a)\n#define IDirect3DVertexBuffer9_GetPriority(p) (p)->GetPriority()\n#define IDirect3DVertexBuffer9_PreLoad(p) (p)->PreLoad()\n#define IDirect3DVertexBuffer9_GetType(p) (p)->GetType()\n#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)\n#define IDirect3DVertexBuffer9_Unlock(p) (p)->Unlock()\n#define IDirect3DVertexBuffer9_GetDesc(p,a) (p)->GetDesc(a)\n#endif\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DIndexBuffer9\n\nDECLARE_INTERFACE_(IDirect3DIndexBuffer9, IDirect3DResource9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    STDMETHOD(Lock)(THIS_ UINT OffsetToLock,UINT SizeToLock,void** ppbData,DWORD Flags) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC *pDesc) PURE;\n    \n    #ifdef D3D_DEBUG_INFO\n    LPCWSTR Name;\n    UINT Length;\n    DWORD Usage;\n    D3DFORMAT Format;\n    D3DPOOL Pool;\n    DWORD Priority;\n    UINT LockCount;\n    LPCWSTR CreationCallStack;\n    #endif\n};\n    \ntypedef struct IDirect3DIndexBuffer9 *LPDIRECT3DINDEXBUFFER9, *PDIRECT3DINDEXBUFFER9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DIndexBuffer9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DIndexBuffer9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DIndexBuffer9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DIndexBuffer9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DIndexBuffer9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DIndexBuffer9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DIndexBuffer9_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DIndexBuffer9_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DIndexBuffer9_GetType(p) (p)->lpVtbl->GetType(p)\n#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirect3DIndexBuffer9_Unlock(p) (p)->lpVtbl->Unlock(p)\n#define IDirect3DIndexBuffer9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)\n#else\n#define IDirect3DIndexBuffer9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DIndexBuffer9_AddRef(p) (p)->AddRef()\n#define IDirect3DIndexBuffer9_Release(p) (p)->Release()\n#define IDirect3DIndexBuffer9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DIndexBuffer9_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DIndexBuffer9_SetPriority(p,a) (p)->SetPriority(a)\n#define IDirect3DIndexBuffer9_GetPriority(p) (p)->GetPriority()\n#define IDirect3DIndexBuffer9_PreLoad(p) (p)->PreLoad()\n#define IDirect3DIndexBuffer9_GetType(p) (p)->GetType()\n#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d)\n#define IDirect3DIndexBuffer9_Unlock(p) (p)->Unlock()\n#define IDirect3DIndexBuffer9_GetDesc(p,a) (p)->GetDesc(a)\n#endif\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DSurface9\n\nDECLARE_INTERFACE_(IDirect3DSurface9, IDirect3DResource9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    STDMETHOD(GetContainer)(THIS_ REFIID riid,void** ppContainer) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC *pDesc) PURE;\n    STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags) PURE;\n    STDMETHOD(UnlockRect)(THIS) PURE;\n    STDMETHOD(GetDC)(THIS_ HDC *phdc) PURE;\n    STDMETHOD(ReleaseDC)(THIS_ HDC hdc) PURE;\n    \n    #ifdef D3D_DEBUG_INFO\n    LPCWSTR Name;\n    UINT Width;\n    UINT Height;\n    DWORD Usage;\n    D3DFORMAT Format;\n    D3DPOOL Pool;\n    D3DMULTISAMPLE_TYPE MultiSampleType;\n    DWORD MultiSampleQuality;\n    DWORD Priority;\n    UINT LockCount;\n    UINT DCCount;\n    LPCWSTR CreationCallStack;\n    #endif\n};\n    \ntypedef struct IDirect3DSurface9 *LPDIRECT3DSURFACE9, *PDIRECT3DSURFACE9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DSurface9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DSurface9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DSurface9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DSurface9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DSurface9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DSurface9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DSurface9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DSurface9_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DSurface9_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DSurface9_GetType(p) (p)->lpVtbl->GetType(p)\n#define IDirect3DSurface9_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b)\n#define IDirect3DSurface9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)\n#define IDirect3DSurface9_LockRect(p,a,b,c) (p)->lpVtbl->LockRect(p,a,b,c)\n#define IDirect3DSurface9_UnlockRect(p) (p)->lpVtbl->UnlockRect(p)\n#define IDirect3DSurface9_GetDC(p,a) (p)->lpVtbl->GetDC(p,a)\n#define IDirect3DSurface9_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a)\n#else\n#define IDirect3DSurface9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DSurface9_AddRef(p) (p)->AddRef()\n#define IDirect3DSurface9_Release(p) (p)->Release()\n#define IDirect3DSurface9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DSurface9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DSurface9_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DSurface9_SetPriority(p,a) (p)->SetPriority(a)\n#define IDirect3DSurface9_GetPriority(p) (p)->GetPriority()\n#define IDirect3DSurface9_PreLoad(p) (p)->PreLoad()\n#define IDirect3DSurface9_GetType(p) (p)->GetType()\n#define IDirect3DSurface9_GetContainer(p,a,b) (p)->GetContainer(a,b)\n#define IDirect3DSurface9_GetDesc(p,a) (p)->GetDesc(a)\n#define IDirect3DSurface9_LockRect(p,a,b,c) (p)->LockRect(a,b,c)\n#define IDirect3DSurface9_UnlockRect(p) (p)->UnlockRect()\n#define IDirect3DSurface9_GetDC(p,a) (p)->GetDC(a)\n#define IDirect3DSurface9_ReleaseDC(p,a) (p)->ReleaseDC(a)\n#endif\n\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DVolume9\n\nDECLARE_INTERFACE_(IDirect3DVolume9, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DVolume9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD(GetContainer)(THIS_ REFIID riid,void** ppContainer) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC *pDesc) PURE;\n    STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX * pLockedVolume,CONST D3DBOX* pBox,DWORD Flags) PURE;\n    STDMETHOD(UnlockBox)(THIS) PURE;\n    \n    #ifdef D3D_DEBUG_INFO\n    LPCWSTR Name;\n    UINT Width;\n    UINT Height;\n    UINT Depth;\n    DWORD Usage;\n    D3DFORMAT Format;\n    D3DPOOL Pool;\n    UINT LockCount;\n    LPCWSTR CreationCallStack;\n    #endif\n};\n    \ntypedef struct IDirect3DVolume9 *LPDIRECT3DVOLUME9, *PDIRECT3DVOLUME9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DVolume9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVolume9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DVolume9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DVolume9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DVolume9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DVolume9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DVolume9_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b)\n#define IDirect3DVolume9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a)\n#define IDirect3DVolume9_LockBox(p,a,b,c) (p)->lpVtbl->LockBox(p,a,b,c)\n#define IDirect3DVolume9_UnlockBox(p) (p)->lpVtbl->UnlockBox(p)\n#else\n#define IDirect3DVolume9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DVolume9_AddRef(p) (p)->AddRef()\n#define IDirect3DVolume9_Release(p) (p)->Release()\n#define IDirect3DVolume9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DVolume9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n#define IDirect3DVolume9_FreePrivateData(p,a) (p)->FreePrivateData(a)\n#define IDirect3DVolume9_GetContainer(p,a,b) (p)->GetContainer(a,b)\n#define IDirect3DVolume9_GetDesc(p,a) (p)->GetDesc(a)\n#define IDirect3DVolume9_LockBox(p,a,b,c) (p)->LockBox(a,b,c)\n#define IDirect3DVolume9_UnlockBox(p) (p)->UnlockBox()\n#endif\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DQuery9\n\nDECLARE_INTERFACE_(IDirect3DQuery9, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DQuery9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD_(D3DQUERYTYPE, GetType)(THIS) PURE;\n    STDMETHOD_(DWORD, GetDataSize)(THIS) PURE;\n    STDMETHOD(Issue)(THIS_ DWORD dwIssueFlags) PURE;\n    STDMETHOD(GetData)(THIS_ void* pData,DWORD dwSize,DWORD dwGetDataFlags) PURE;\n    \n    #ifdef D3D_DEBUG_INFO\n    D3DQUERYTYPE Type;\n    DWORD DataSize;\n    LPCWSTR CreationCallStack;\n    #endif\n};\n    \ntypedef struct IDirect3DQuery9 *LPDIRECT3DQUERY9, *PDIRECT3DQUERY9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DQuery9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DQuery9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DQuery9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DQuery9_GetType(p) (p)->lpVtbl->GetType(p)\n#define IDirect3DQuery9_GetDataSize(p) (p)->lpVtbl->GetDataSize(p)\n#define IDirect3DQuery9_Issue(p,a) (p)->lpVtbl->Issue(p,a)\n#define IDirect3DQuery9_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c)\n#else\n#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DQuery9_AddRef(p) (p)->AddRef()\n#define IDirect3DQuery9_Release(p) (p)->Release()\n#define IDirect3DQuery9_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DQuery9_GetType(p) (p)->GetType()\n#define IDirect3DQuery9_GetDataSize(p) (p)->GetDataSize()\n#define IDirect3DQuery9_Issue(p,a) (p)->Issue(a)\n#define IDirect3DQuery9_GetData(p,a,b,c) (p)->GetData(a,b,c)\n#endif\n\n\n/****************************************************************************\n * Flags for SetPrivateData method on all D3D9 interfaces\n *\n * The passed pointer is an IUnknown ptr. The SizeOfData argument to SetPrivateData\n * must be set to sizeof(IUnknown*). Direct3D will call AddRef through this\n * pointer and Release when the private data is destroyed. The data will be\n * destroyed when another SetPrivateData with the same GUID is set, when\n * FreePrivateData is called, or when the D3D9 object is freed.\n ****************************************************************************/\n#define D3DSPD_IUNKNOWN                         0x00000001L\n\n/****************************************************************************\n *\n * Flags for IDirect3D9::CreateDevice's BehaviorFlags\n *\n ****************************************************************************/\n\n#define D3DCREATE_FPU_PRESERVE                  0x00000002L\n#define D3DCREATE_MULTITHREADED                 0x00000004L\n\n#define D3DCREATE_PUREDEVICE                    0x00000010L\n#define D3DCREATE_SOFTWARE_VERTEXPROCESSING     0x00000020L\n#define D3DCREATE_HARDWARE_VERTEXPROCESSING     0x00000040L\n#define D3DCREATE_MIXED_VERTEXPROCESSING        0x00000080L\n\n#define D3DCREATE_DISABLE_DRIVER_MANAGEMENT     0x00000100L\n#define D3DCREATE_ADAPTERGROUP_DEVICE           0x00000200L\n#define D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX  0x00000400L\n\n// This flag causes the D3D runtime not to alter the focus \n// window in any way. Use with caution- the burden of supporting\n// focus management events (alt-tab, etc.) falls on the \n// application, and appropriate responses (switching display\n// mode, etc.) should be coded.\n#define D3DCREATE_NOWINDOWCHANGES\t\t\t\t0x00000800L\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n// Disable multithreading for software vertex processing\n#define D3DCREATE_DISABLE_PSGP_THREADING        0x00002000L\n// This flag enables present statistics on device.\n#define D3DCREATE_ENABLE_PRESENTSTATS           0x00004000L\n// This flag disables printscreen support in the runtime for this device\n#define D3DCREATE_DISABLE_PRINTSCREEN           0x00008000L\n\n#define D3DCREATE_SCREENSAVER                   0x10000000L\n\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n\n\n/****************************************************************************\n *\n * Parameter for IDirect3D9::CreateDevice's Adapter argument\n *\n ****************************************************************************/\n\n#define D3DADAPTER_DEFAULT                     0\n\n/****************************************************************************\n *\n * Flags for IDirect3D9::EnumAdapters\n *\n ****************************************************************************/\n\n/*\n * The D3DENUM_WHQL_LEVEL value has been retired for 9Ex and future versions,\n * but it needs to be defined here for compatibility with DX9 and earlier versions.\n * See the DirectX SDK for sample code on discovering driver signatures.\n */\n#define D3DENUM_WHQL_LEVEL                      0x00000002L\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n/* NO_DRIVERVERSION will not fill out the DriverVersion field, nor will the\n   DriverVersion be incorporated into the DeviceIdentifier GUID. WINNT only */\n#define D3DENUM_NO_DRIVERVERSION                0x00000004L\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n\n/****************************************************************************\n *\n * Maximum number of back-buffers supported in DX9\n *\n ****************************************************************************/\n\n#define D3DPRESENT_BACK_BUFFERS_MAX             3L\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n/****************************************************************************\n *\n * Maximum number of back-buffers supported when apps use CreateDeviceEx\n *\n ****************************************************************************/\n\n#define D3DPRESENT_BACK_BUFFERS_MAX_EX          30L\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n/****************************************************************************\n *\n * Flags for IDirect3DDevice9::SetGammaRamp\n *\n ****************************************************************************/\n\n#define D3DSGR_NO_CALIBRATION                  0x00000000L\n#define D3DSGR_CALIBRATE                       0x00000001L\n\n/****************************************************************************\n *\n * Flags for IDirect3DDevice9::SetCursorPosition\n *\n ****************************************************************************/\n\n#define D3DCURSOR_IMMEDIATE_UPDATE             0x00000001L\n\n/****************************************************************************\n *\n * Flags for IDirect3DSwapChain9::Present\n *\n ****************************************************************************/\n\n#define D3DPRESENT_DONOTWAIT                   0x00000001L\n#define D3DPRESENT_LINEAR_CONTENT              0x00000002L\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n#define D3DPRESENT_DONOTFLIP                   0x00000004L\n#define D3DPRESENT_FLIPRESTART                 0x00000008L\n#define D3DPRESENT_VIDEO_RESTRICT_TO_MONITOR   0x00000010L\n#define D3DPRESENT_UPDATEOVERLAYONLY           0x00000020L\n#define D3DPRESENT_HIDEOVERLAY                 0x00000040L\n#define D3DPRESENT_UPDATECOLORKEY              0x00000080L\n#define D3DPRESENT_FORCEIMMEDIATE              0x00000100L\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n\n/****************************************************************************\n *\n * Flags for DrawPrimitive/DrawIndexedPrimitive\n *   Also valid for Begin/BeginIndexed\n *   Also valid for VertexBuffer::CreateVertexBuffer\n ****************************************************************************/\n\n\n/*\n *  DirectDraw error codes\n */\n#define _FACD3D  0x876\n#define MAKE_D3DHRESULT( code )  MAKE_HRESULT( 1, _FACD3D, code )\n#define MAKE_D3DSTATUS( code )  MAKE_HRESULT( 0, _FACD3D, code )\n\n/*\n * Direct3D Errors\n */\n#define D3D_OK                              S_OK\n\n#define D3DERR_WRONGTEXTUREFORMAT               MAKE_D3DHRESULT(2072)\n#define D3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_D3DHRESULT(2073)\n#define D3DERR_UNSUPPORTEDCOLORARG              MAKE_D3DHRESULT(2074)\n#define D3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_D3DHRESULT(2075)\n#define D3DERR_UNSUPPORTEDALPHAARG              MAKE_D3DHRESULT(2076)\n#define D3DERR_TOOMANYOPERATIONS                MAKE_D3DHRESULT(2077)\n#define D3DERR_CONFLICTINGTEXTUREFILTER         MAKE_D3DHRESULT(2078)\n#define D3DERR_UNSUPPORTEDFACTORVALUE           MAKE_D3DHRESULT(2079)\n#define D3DERR_CONFLICTINGRENDERSTATE           MAKE_D3DHRESULT(2081)\n#define D3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_D3DHRESULT(2082)\n#define D3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_D3DHRESULT(2086)\n#define D3DERR_DRIVERINTERNALERROR              MAKE_D3DHRESULT(2087)\n\n#define D3DERR_NOTFOUND                         MAKE_D3DHRESULT(2150)\n#define D3DERR_MOREDATA                         MAKE_D3DHRESULT(2151)\n#define D3DERR_DEVICELOST                       MAKE_D3DHRESULT(2152)\n#define D3DERR_DEVICENOTRESET                   MAKE_D3DHRESULT(2153)\n#define D3DERR_NOTAVAILABLE                     MAKE_D3DHRESULT(2154)\n#define D3DERR_OUTOFVIDEOMEMORY                 MAKE_D3DHRESULT(380)\n#define D3DERR_INVALIDDEVICE                    MAKE_D3DHRESULT(2155)\n#define D3DERR_INVALIDCALL                      MAKE_D3DHRESULT(2156)\n#define D3DERR_DRIVERINVALIDCALL                MAKE_D3DHRESULT(2157)\n#define D3DERR_WASSTILLDRAWING                  MAKE_D3DHRESULT(540)\n#define D3DOK_NOAUTOGEN                         MAKE_D3DSTATUS(2159)\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n\n#define D3DERR_DEVICEREMOVED                    MAKE_D3DHRESULT(2160)\n#define S_NOT_RESIDENT                          MAKE_D3DSTATUS(2165)\n#define S_RESIDENT_IN_SHARED_MEMORY             MAKE_D3DSTATUS(2166)\n#define S_PRESENT_MODE_CHANGED                  MAKE_D3DSTATUS(2167)\n#define S_PRESENT_OCCLUDED                      MAKE_D3DSTATUS(2168)\n#define D3DERR_DEVICEHUNG                       MAKE_D3DHRESULT(2164)\n#define D3DERR_UNSUPPORTEDOVERLAY               MAKE_D3DHRESULT(2171)\n#define D3DERR_UNSUPPORTEDOVERLAYFORMAT         MAKE_D3DHRESULT(2172)\n#define D3DERR_CANNOTPROTECTCONTENT             MAKE_D3DHRESULT(2173)\n#define D3DERR_UNSUPPORTEDCRYPTO                MAKE_D3DHRESULT(2174)\n#define D3DERR_PRESENT_STATISTICS_DISJOINT      MAKE_D3DHRESULT(2180)\n\n\n/*********************\n/* D3D9Ex interfaces\n/*********************/\n\nHRESULT WINAPI Direct3DCreate9Ex(UINT SDKVersion, IDirect3D9Ex**);\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3D9Ex\n\nDECLARE_INTERFACE_(IDirect3D9Ex, IDirect3D9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3D9 methods ***/\n    STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;\n    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter,DWORD Flags,D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;\n    STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter,D3DFORMAT Format) PURE;\n    STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter,D3DFORMAT Format,UINT Mode,D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter,D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(CheckDeviceType)(THIS_ UINT Adapter,D3DDEVTYPE DevType,D3DFORMAT AdapterFormat,D3DFORMAT BackBufferFormat,BOOL bWindowed) PURE;\n    STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,DWORD Usage,D3DRESOURCETYPE RType,D3DFORMAT CheckFormat) PURE;\n    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SurfaceFormat,BOOL Windowed,D3DMULTISAMPLE_TYPE MultiSampleType,DWORD* pQualityLevels) PURE;\n    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,D3DFORMAT RenderTargetFormat,D3DFORMAT DepthStencilFormat) PURE;\n    STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SourceFormat,D3DFORMAT TargetFormat) PURE;\n    STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DCAPS9* pCaps) PURE;\n    STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;\n    STDMETHOD(CreateDevice)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DDevice9** ppReturnedDeviceInterface) PURE;\n    STDMETHOD_(UINT, GetAdapterModeCountEx)(THIS_ UINT Adapter,CONST D3DDISPLAYMODEFILTER* pFilter ) PURE;\n    STDMETHOD(EnumAdapterModesEx)(THIS_ UINT Adapter,CONST D3DDISPLAYMODEFILTER* pFilter,UINT Mode,D3DDISPLAYMODEEX* pMode) PURE;\n    STDMETHOD(GetAdapterDisplayModeEx)(THIS_ UINT Adapter,D3DDISPLAYMODEEX* pMode,D3DDISPLAYROTATION* pRotation) PURE;\n    STDMETHOD(CreateDeviceEx)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,D3DDISPLAYMODEEX* pFullscreenDisplayMode,IDirect3DDevice9Ex** ppReturnedDeviceInterface) PURE;\n    STDMETHOD(GetAdapterLUID)(THIS_ UINT Adapter,LUID * pLUID) PURE;\n};\n    \ntypedef struct IDirect3D9Ex *LPDIRECT3D9EX, *PDIRECT3D9EX;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3D9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D9Ex_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3D9Ex_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3D9Ex_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p)\n#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)\n#define IDirect3D9Ex_GetAdapterModeCount(p,a,b) (p)->lpVtbl->GetAdapterModeCount(p,a,b)\n#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)\n#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)\n#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)\n#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)\n#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)\n#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)\n#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d) (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)\n#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c)\n#define IDirect3D9Ex_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a)\n#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)\n#define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b) (p)->lpVtbl->GetAdapterModeCountEx(p,a,b)\n#define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModesEx(p,a,b,c,d)\n#define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c) (p)->lpVtbl->GetAdapterDisplayModeEx(p,a,b,c)\n#define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d,e,f,g)\n#define IDirect3D9Ex_GetAdapterLUID(p,a,b) (p)->lpVtbl->GetAdapterLUID(p,a,b)\n#else\n#define IDirect3D9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3D9Ex_AddRef(p) (p)->AddRef()\n#define IDirect3D9Ex_Release(p) (p)->Release()\n#define IDirect3D9Ex_GetAdapterCount(p) (p)->GetAdapterCount()\n#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c)\n#define IDirect3D9Ex_GetAdapterModeCount(p,a,b) (p)->GetAdapterModeCount(a,b)\n#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d) (p)->EnumAdapterModes(a,b,c,d)\n#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b)\n#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e)\n#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f)\n#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)\n#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e)\n#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d) (p)->CheckDeviceFormatConversion(a,b,c,d)\n#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c)\n#define IDirect3D9Ex_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a)\n#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f)\n#define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b) (p)->GetAdapterModeCountEx(a,b)\n#define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d) (p)->EnumAdapterModesEx(a,b,c,d)\n#define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c) (p)->GetAdapterDisplayModeEx(a,b,c)\n#define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g) (p)->CreateDeviceEx(a,b,c,d,e,f,g)\n#define IDirect3D9Ex_GetAdapterLUID(p,a,b) (p)->GetAdapterLUID(a,b)\n#endif\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DDevice9Ex\n\nDECLARE_INTERFACE_(IDirect3DDevice9Ex, IDirect3DDevice9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DDevice9 methods ***/\n    STDMETHOD(TestCooperativeLevel)(THIS) PURE;\n    STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;\n    STDMETHOD(EvictManagedResources)(THIS) PURE;\n    STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE;\n    STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE;\n    STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain,D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;\n    STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot,UINT YHotSpot,IDirect3DSurface9* pCursorBitmap) PURE;\n    STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y,DWORD Flags) PURE;\n    STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;\n    STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DSwapChain9** pSwapChain) PURE;\n    STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain,IDirect3DSwapChain9** pSwapChain) PURE;\n    STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;\n    STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;\n    STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion) PURE;\n    STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain,UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer) PURE;\n    STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain,D3DRASTER_STATUS* pRasterStatus) PURE;\n    STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;\n    STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain,DWORD Flags,CONST D3DGAMMARAMP* pRamp) PURE;\n    STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain,D3DGAMMARAMP* pRamp) PURE;\n    STDMETHOD(CreateTexture)(THIS_ UINT Width,UINT Height,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DTexture9** ppTexture,HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DVolumeTexture9** ppVolumeTexture,HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DCubeTexture9** ppCubeTexture,HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,IDirect3DVertexBuffer9** ppVertexBuffer,HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DIndexBuffer9** ppIndexBuffer,HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateRenderTarget)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Lockable,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE;\n    STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Discard,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE;\n    STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface,CONST RECT* pSourceRect,IDirect3DSurface9* pDestinationSurface,CONST POINT* pDestPoint) PURE;\n    STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture,IDirect3DBaseTexture9* pDestinationTexture) PURE;\n    STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget,IDirect3DSurface9* pDestSurface) PURE;\n    STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain,IDirect3DSurface9* pDestSurface) PURE;\n    STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface,CONST RECT* pSourceRect,IDirect3DSurface9* pDestSurface,CONST RECT* pDestRect,D3DTEXTUREFILTERTYPE Filter) PURE;\n    STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface,CONST RECT* pRect,D3DCOLOR color) PURE;\n    STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DPOOL Pool,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE;\n    STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex,IDirect3DSurface9* pRenderTarget) PURE;\n    STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex,IDirect3DSurface9** ppRenderTarget) PURE;\n    STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE;\n    STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE;\n    STDMETHOD(BeginScene)(THIS) PURE;\n    STDMETHOD(EndScene)(THIS) PURE;\n    STDMETHOD(Clear)(THIS_ DWORD Count,CONST D3DRECT* pRects,DWORD Flags,D3DCOLOR Color,float Z,DWORD Stencil) PURE;\n    STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,CONST D3DMATRIX* pMatrix) PURE;\n    STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,D3DMATRIX* pMatrix) PURE;\n    STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,CONST D3DMATRIX*) PURE;\n    STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE;\n    STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE;\n    STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE;\n    STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE;\n    STDMETHOD(SetLight)(THIS_ DWORD Index,CONST D3DLIGHT9*) PURE;\n    STDMETHOD(GetLight)(THIS_ DWORD Index,D3DLIGHT9*) PURE;\n    STDMETHOD(LightEnable)(THIS_ DWORD Index,BOOL Enable) PURE;\n    STDMETHOD(GetLightEnable)(THIS_ DWORD Index,BOOL* pEnable) PURE;\n    STDMETHOD(SetClipPlane)(THIS_ DWORD Index,CONST float* pPlane) PURE;\n    STDMETHOD(GetClipPlane)(THIS_ DWORD Index,float* pPlane) PURE;\n    STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD Value) PURE;\n    STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD* pValue) PURE;\n    STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type,IDirect3DStateBlock9** ppSB) PURE;\n    STDMETHOD(BeginStateBlock)(THIS) PURE;\n    STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE;\n    STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE;\n    STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE;\n    STDMETHOD(GetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture9** ppTexture) PURE;\n    STDMETHOD(SetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture9* pTexture) PURE;\n    STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD* pValue) PURE;\n    STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD Value) PURE;\n    STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD* pValue) PURE;\n    STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD Value) PURE;\n    STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;\n    STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber,CONST PALETTEENTRY* pEntries) PURE;\n    STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;\n    STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;\n    STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;\n    STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE;\n    STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;\n    STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;\n    STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;\n    STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;\n    STDMETHOD_(float, GetNPatchMode)(THIS) PURE;\n    STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT StartVertex,UINT PrimitiveCount) PURE;\n    STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,INT BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT primCount) PURE;\n    STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT PrimitiveCount,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE;\n    STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT MinVertexIndex,UINT NumVertices,UINT PrimitiveCount,CONST void* pIndexData,D3DFORMAT IndexDataFormat,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE;\n    STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,IDirect3DVertexBuffer9* pDestBuffer,IDirect3DVertexDeclaration9* pVertexDecl,DWORD Flags) PURE;\n    STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements,IDirect3DVertexDeclaration9** ppDecl) PURE;\n    STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE;\n    STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE;\n    STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;\n    STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE;\n    STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction,IDirect3DVertexShader9** ppShader) PURE;\n    STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE;\n    STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE;\n    STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister,CONST float* pConstantData,UINT Vector4fCount) PURE;\n    STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister,float* pConstantData,UINT Vector4fCount) PURE;\n    STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister,CONST int* pConstantData,UINT Vector4iCount) PURE;\n    STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister,int* pConstantData,UINT Vector4iCount) PURE;\n    STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister,CONST BOOL* pConstantData,UINT  BoolCount) PURE;\n    STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister,BOOL* pConstantData,UINT BoolCount) PURE;\n    STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer9* pStreamData,UINT OffsetInBytes,UINT Stride) PURE;\n    STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer9** ppStreamData,UINT* pOffsetInBytes,UINT* pStride) PURE;\n    STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber,UINT Setting) PURE;\n    STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber,UINT* pSetting) PURE;\n    STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE;\n    STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE;\n    STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction,IDirect3DPixelShader9** ppShader) PURE;\n    STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE;\n    STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE;\n    STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister,CONST float* pConstantData,UINT Vector4fCount) PURE;\n    STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister,float* pConstantData,UINT Vector4fCount) PURE;\n    STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister,CONST int* pConstantData,UINT Vector4iCount) PURE;\n    STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister,int* pConstantData,UINT Vector4iCount) PURE;\n    STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister,CONST BOOL* pConstantData,UINT  BoolCount) PURE;\n    STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister,BOOL* pConstantData,UINT BoolCount) PURE;\n    STDMETHOD(DrawRectPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE;\n    STDMETHOD(DrawTriPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE;\n    STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;\n    STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type,IDirect3DQuery9** ppQuery) PURE;\n    STDMETHOD(SetConvolutionMonoKernel)(THIS_ UINT width,UINT height,float* rows,float* columns) PURE;\n    STDMETHOD(ComposeRects)(THIS_ IDirect3DSurface9* pSrc,IDirect3DSurface9* pDst,IDirect3DVertexBuffer9* pSrcRectDescs,UINT NumRects,IDirect3DVertexBuffer9* pDstRectDescs,D3DCOMPOSERECTSOP Operation,int Xoffset,int Yoffset) PURE;\n    STDMETHOD(PresentEx)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion,DWORD dwFlags) PURE;\n    STDMETHOD(GetGPUThreadPriority)(THIS_ INT* pPriority) PURE;\n    STDMETHOD(SetGPUThreadPriority)(THIS_ INT Priority) PURE;\n    STDMETHOD(WaitForVBlank)(THIS_ UINT iSwapChain) PURE;\n    STDMETHOD(CheckResourceResidency)(THIS_ IDirect3DResource9** pResourceArray,UINT32 NumResources) PURE;\n    STDMETHOD(SetMaximumFrameLatency)(THIS_ UINT MaxLatency) PURE;\n    STDMETHOD(GetMaximumFrameLatency)(THIS_ UINT* pMaxLatency) PURE;\n    STDMETHOD(CheckDeviceState)(THIS_ HWND hDestinationWindow) PURE;\n    STDMETHOD(CreateRenderTargetEx)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Lockable,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle,DWORD Usage) PURE;\n    STDMETHOD(CreateOffscreenPlainSurfaceEx)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DPOOL Pool,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle,DWORD Usage) PURE;\n    STDMETHOD(CreateDepthStencilSurfaceEx)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Discard,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle,DWORD Usage) PURE;\n    STDMETHOD(ResetEx)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters,D3DDISPLAYMODEEX *pFullscreenDisplayMode) PURE;\n    STDMETHOD(GetDisplayModeEx)(THIS_ UINT iSwapChain,D3DDISPLAYMODEEX* pMode,D3DDISPLAYROTATION* pRotation) PURE;\n};\n    \ntypedef struct IDirect3DDevice9Ex *LPDIRECT3DDEVICE9EX, *PDIRECT3DDEVICE9EX;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DDevice9Ex_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DDevice9Ex_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DDevice9Ex_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p)\n#define IDirect3DDevice9Ex_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p)\n#define IDirect3DDevice9Ex_EvictManagedResources(p) (p)->lpVtbl->EvictManagedResources(p)\n#define IDirect3DDevice9Ex_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a)\n#define IDirect3DDevice9Ex_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a)\n#define IDirect3DDevice9Ex_GetDisplayMode(p,a,b) (p)->lpVtbl->GetDisplayMode(p,a,b)\n#define IDirect3DDevice9Ex_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a)\n#define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c)\n#define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c)\n#define IDirect3DDevice9Ex_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a)\n#define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)\n#define IDirect3DDevice9Ex_GetSwapChain(p,a,b) (p)->lpVtbl->GetSwapChain(p,a,b)\n#define IDirect3DDevice9Ex_GetNumberOfSwapChains(p) (p)->lpVtbl->GetNumberOfSwapChains(p)\n#define IDirect3DDevice9Ex_Reset(p,a) (p)->lpVtbl->Reset(p,a)\n#define IDirect3DDevice9Ex_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d)\n#define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d) (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)\n#define IDirect3DDevice9Ex_GetRasterStatus(p,a,b) (p)->lpVtbl->GetRasterStatus(p,a,b)\n#define IDirect3DDevice9Ex_SetDialogBoxMode(p,a) (p)->lpVtbl->SetDialogBoxMode(p,a)\n#define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c) (p)->lpVtbl->SetGammaRamp(p,a,b,c)\n#define IDirect3DDevice9Ex_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b)\n#define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)\n#define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d) (p)->lpVtbl->UpdateSurface(p,a,b,c,d)\n#define IDirect3DDevice9Ex_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b)\n#define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b) (p)->lpVtbl->GetRenderTargetData(p,a,b)\n#define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b) (p)->lpVtbl->GetFrontBufferData(p,a,b)\n#define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e) (p)->lpVtbl->StretchRect(p,a,b,c,d,e)\n#define IDirect3DDevice9Ex_ColorFill(p,a,b,c) (p)->lpVtbl->ColorFill(p,a,b,c)\n#define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b)\n#define IDirect3DDevice9Ex_GetRenderTarget(p,a,b) (p)->lpVtbl->GetRenderTarget(p,a,b)\n#define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a) (p)->lpVtbl->SetDepthStencilSurface(p,a)\n#define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a)\n#define IDirect3DDevice9Ex_BeginScene(p) (p)->lpVtbl->BeginScene(p)\n#define IDirect3DDevice9Ex_EndScene(p) (p)->lpVtbl->EndScene(p)\n#define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b)\n#define IDirect3DDevice9Ex_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b)\n#define IDirect3DDevice9Ex_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b)\n#define IDirect3DDevice9Ex_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a)\n#define IDirect3DDevice9Ex_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a)\n#define IDirect3DDevice9Ex_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a)\n#define IDirect3DDevice9Ex_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a)\n#define IDirect3DDevice9Ex_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b)\n#define IDirect3DDevice9Ex_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b)\n#define IDirect3DDevice9Ex_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b)\n#define IDirect3DDevice9Ex_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b)\n#define IDirect3DDevice9Ex_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b)\n#define IDirect3DDevice9Ex_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b)\n#define IDirect3DDevice9Ex_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b)\n#define IDirect3DDevice9Ex_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b)\n#define IDirect3DDevice9Ex_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b)\n#define IDirect3DDevice9Ex_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p)\n#define IDirect3DDevice9Ex_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a)\n#define IDirect3DDevice9Ex_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a)\n#define IDirect3DDevice9Ex_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a)\n#define IDirect3DDevice9Ex_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b)\n#define IDirect3DDevice9Ex_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b)\n#define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c)\n#define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c)\n#define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c) (p)->lpVtbl->GetSamplerState(p,a,b,c)\n#define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c) (p)->lpVtbl->SetSamplerState(p,a,b,c)\n#define IDirect3DDevice9Ex_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a)\n#define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b)\n#define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b)\n#define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a)\n#define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a)\n#define IDirect3DDevice9Ex_SetScissorRect(p,a) (p)->lpVtbl->SetScissorRect(p,a)\n#define IDirect3DDevice9Ex_GetScissorRect(p,a) (p)->lpVtbl->GetScissorRect(p,a)\n#define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a) (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)\n#define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p) (p)->lpVtbl->GetSoftwareVertexProcessing(p)\n#define IDirect3DDevice9Ex_SetNPatchMode(p,a) (p)->lpVtbl->SetNPatchMode(p,a)\n#define IDirect3DDevice9Ex_GetNPatchMode(p) (p)->lpVtbl->GetNPatchMode(p)\n#define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c)\n#define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)\n#define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b) (p)->lpVtbl->CreateVertexDeclaration(p,a,b)\n#define IDirect3DDevice9Ex_SetVertexDeclaration(p,a) (p)->lpVtbl->SetVertexDeclaration(p,a)\n#define IDirect3DDevice9Ex_GetVertexDeclaration(p,a) (p)->lpVtbl->GetVertexDeclaration(p,a)\n#define IDirect3DDevice9Ex_SetFVF(p,a) (p)->lpVtbl->SetFVF(p,a)\n#define IDirect3DDevice9Ex_GetFVF(p,a) (p)->lpVtbl->GetFVF(p,a)\n#define IDirect3DDevice9Ex_CreateVertexShader(p,a,b) (p)->lpVtbl->CreateVertexShader(p,a,b)\n#define IDirect3DDevice9Ex_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a)\n#define IDirect3DDevice9Ex_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a)\n#define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)\n#define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)\n#define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)\n#define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)\n#define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)\n#define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)\n#define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d) (p)->lpVtbl->SetStreamSource(p,a,b,c,d)\n#define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d) (p)->lpVtbl->GetStreamSource(p,a,b,c,d)\n#define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b) (p)->lpVtbl->SetStreamSourceFreq(p,a,b)\n#define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b) (p)->lpVtbl->GetStreamSourceFreq(p,a,b)\n#define IDirect3DDevice9Ex_SetIndices(p,a) (p)->lpVtbl->SetIndices(p,a)\n#define IDirect3DDevice9Ex_GetIndices(p,a) (p)->lpVtbl->GetIndices(p,a)\n#define IDirect3DDevice9Ex_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b)\n#define IDirect3DDevice9Ex_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a)\n#define IDirect3DDevice9Ex_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a)\n#define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)\n#define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)\n#define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)\n#define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)\n#define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)\n#define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)\n#define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c)\n#define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c)\n#define IDirect3DDevice9Ex_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a)\n#define IDirect3DDevice9Ex_CreateQuery(p,a,b) (p)->lpVtbl->CreateQuery(p,a,b)\n#define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d) (p)->lpVtbl->SetConvolutionMonoKernel(p,a,b,c,d)\n#define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->ComposeRects(p,a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e) (p)->lpVtbl->PresentEx(p,a,b,c,d,e)\n#define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a) (p)->lpVtbl->GetGPUThreadPriority(p,a)\n#define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a) (p)->lpVtbl->SetGPUThreadPriority(p,a)\n#define IDirect3DDevice9Ex_WaitForVBlank(p,a) (p)->lpVtbl->WaitForVBlank(p,a)\n#define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b) (p)->lpVtbl->CheckResourceResidency(p,a,b)\n#define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a) (p)->lpVtbl->SetMaximumFrameLatency(p,a)\n#define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a) (p)->lpVtbl->GetMaximumFrameLatency(p,a)\n#define IDirect3DDevice9Ex_CheckDeviceState(p,a) (p)->lpVtbl->CheckDeviceState(p,a)\n#define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)\n#define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)\n#define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)\n#define IDirect3DDevice9Ex_ResetEx(p,a,b) (p)->lpVtbl->ResetEx(p,a,b)\n#define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c) (p)->lpVtbl->GetDisplayModeEx(p,a,b,c)\n#else\n#define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DDevice9Ex_AddRef(p) (p)->AddRef()\n#define IDirect3DDevice9Ex_Release(p) (p)->Release()\n#define IDirect3DDevice9Ex_TestCooperativeLevel(p) (p)->TestCooperativeLevel()\n#define IDirect3DDevice9Ex_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem()\n#define IDirect3DDevice9Ex_EvictManagedResources(p) (p)->EvictManagedResources()\n#define IDirect3DDevice9Ex_GetDirect3D(p,a) (p)->GetDirect3D(a)\n#define IDirect3DDevice9Ex_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a)\n#define IDirect3DDevice9Ex_GetDisplayMode(p,a,b) (p)->GetDisplayMode(a,b)\n#define IDirect3DDevice9Ex_GetCreationParameters(p,a) (p)->GetCreationParameters(a)\n#define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c)\n#define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c)\n#define IDirect3DDevice9Ex_ShowCursor(p,a) (p)->ShowCursor(a)\n#define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b)\n#define IDirect3DDevice9Ex_GetSwapChain(p,a,b) (p)->GetSwapChain(a,b)\n#define IDirect3DDevice9Ex_GetNumberOfSwapChains(p) (p)->GetNumberOfSwapChains()\n#define IDirect3DDevice9Ex_Reset(p,a) (p)->Reset(a)\n#define IDirect3DDevice9Ex_Present(p,a,b,c,d) (p)->Present(a,b,c,d)\n#define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d) (p)->GetBackBuffer(a,b,c,d)\n#define IDirect3DDevice9Ex_GetRasterStatus(p,a,b) (p)->GetRasterStatus(a,b)\n#define IDirect3DDevice9Ex_SetDialogBoxMode(p,a) (p)->SetDialogBoxMode(a)\n#define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c) (p)->SetGammaRamp(a,b,c)\n#define IDirect3DDevice9Ex_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b)\n#define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->CreateTexture(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)\n#define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->CreateCubeTexture(a,b,c,d,e,f,g)\n#define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->CreateVertexBuffer(a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->CreateIndexBuffer(a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d) (p)->UpdateSurface(a,b,c,d)\n#define IDirect3DDevice9Ex_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b)\n#define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b) (p)->GetRenderTargetData(a,b)\n#define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b) (p)->GetFrontBufferData(a,b)\n#define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e) (p)->StretchRect(a,b,c,d,e)\n#define IDirect3DDevice9Ex_ColorFill(p,a,b,c) (p)->ColorFill(a,b,c)\n#define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b)\n#define IDirect3DDevice9Ex_GetRenderTarget(p,a,b) (p)->GetRenderTarget(a,b)\n#define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a) (p)->SetDepthStencilSurface(a)\n#define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a)\n#define IDirect3DDevice9Ex_BeginScene(p) (p)->BeginScene()\n#define IDirect3DDevice9Ex_EndScene(p) (p)->EndScene()\n#define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_SetTransform(p,a,b) (p)->SetTransform(a,b)\n#define IDirect3DDevice9Ex_GetTransform(p,a,b) (p)->GetTransform(a,b)\n#define IDirect3DDevice9Ex_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b)\n#define IDirect3DDevice9Ex_SetViewport(p,a) (p)->SetViewport(a)\n#define IDirect3DDevice9Ex_GetViewport(p,a) (p)->GetViewport(a)\n#define IDirect3DDevice9Ex_SetMaterial(p,a) (p)->SetMaterial(a)\n#define IDirect3DDevice9Ex_GetMaterial(p,a) (p)->GetMaterial(a)\n#define IDirect3DDevice9Ex_SetLight(p,a,b) (p)->SetLight(a,b)\n#define IDirect3DDevice9Ex_GetLight(p,a,b) (p)->GetLight(a,b)\n#define IDirect3DDevice9Ex_LightEnable(p,a,b) (p)->LightEnable(a,b)\n#define IDirect3DDevice9Ex_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b)\n#define IDirect3DDevice9Ex_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b)\n#define IDirect3DDevice9Ex_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b)\n#define IDirect3DDevice9Ex_SetRenderState(p,a,b) (p)->SetRenderState(a,b)\n#define IDirect3DDevice9Ex_GetRenderState(p,a,b) (p)->GetRenderState(a,b)\n#define IDirect3DDevice9Ex_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b)\n#define IDirect3DDevice9Ex_BeginStateBlock(p) (p)->BeginStateBlock()\n#define IDirect3DDevice9Ex_EndStateBlock(p,a) (p)->EndStateBlock(a)\n#define IDirect3DDevice9Ex_SetClipStatus(p,a) (p)->SetClipStatus(a)\n#define IDirect3DDevice9Ex_GetClipStatus(p,a) (p)->GetClipStatus(a)\n#define IDirect3DDevice9Ex_GetTexture(p,a,b) (p)->GetTexture(a,b)\n#define IDirect3DDevice9Ex_SetTexture(p,a,b) (p)->SetTexture(a,b)\n#define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c)\n#define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c)\n#define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c) (p)->GetSamplerState(a,b,c)\n#define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c) (p)->SetSamplerState(a,b,c)\n#define IDirect3DDevice9Ex_ValidateDevice(p,a) (p)->ValidateDevice(a)\n#define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b)\n#define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b)\n#define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a)\n#define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a)\n#define IDirect3DDevice9Ex_SetScissorRect(p,a) (p)->SetScissorRect(a)\n#define IDirect3DDevice9Ex_GetScissorRect(p,a) (p)->GetScissorRect(a)\n#define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a) (p)->SetSoftwareVertexProcessing(a)\n#define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p) (p)->GetSoftwareVertexProcessing()\n#define IDirect3DDevice9Ex_SetNPatchMode(p,a) (p)->SetNPatchMode(a)\n#define IDirect3DDevice9Ex_GetNPatchMode(p) (p)->GetNPatchMode()\n#define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c)\n#define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->DrawIndexedPrimitive(a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d)\n#define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f) (p)->ProcessVertices(a,b,c,d,e,f)\n#define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b) (p)->CreateVertexDeclaration(a,b)\n#define IDirect3DDevice9Ex_SetVertexDeclaration(p,a) (p)->SetVertexDeclaration(a)\n#define IDirect3DDevice9Ex_GetVertexDeclaration(p,a) (p)->GetVertexDeclaration(a)\n#define IDirect3DDevice9Ex_SetFVF(p,a) (p)->SetFVF(a)\n#define IDirect3DDevice9Ex_GetFVF(p,a) (p)->GetFVF(a)\n#define IDirect3DDevice9Ex_CreateVertexShader(p,a,b) (p)->CreateVertexShader(a,b)\n#define IDirect3DDevice9Ex_SetVertexShader(p,a) (p)->SetVertexShader(a)\n#define IDirect3DDevice9Ex_GetVertexShader(p,a) (p)->GetVertexShader(a)\n#define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c) (p)->SetVertexShaderConstantF(a,b,c)\n#define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c) (p)->GetVertexShaderConstantF(a,b,c)\n#define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c) (p)->SetVertexShaderConstantI(a,b,c)\n#define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c) (p)->GetVertexShaderConstantI(a,b,c)\n#define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c) (p)->SetVertexShaderConstantB(a,b,c)\n#define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c) (p)->GetVertexShaderConstantB(a,b,c)\n#define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d) (p)->SetStreamSource(a,b,c,d)\n#define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d) (p)->GetStreamSource(a,b,c,d)\n#define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b) (p)->SetStreamSourceFreq(a,b)\n#define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b) (p)->GetStreamSourceFreq(a,b)\n#define IDirect3DDevice9Ex_SetIndices(p,a) (p)->SetIndices(a)\n#define IDirect3DDevice9Ex_GetIndices(p,a) (p)->GetIndices(a)\n#define IDirect3DDevice9Ex_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b)\n#define IDirect3DDevice9Ex_SetPixelShader(p,a) (p)->SetPixelShader(a)\n#define IDirect3DDevice9Ex_GetPixelShader(p,a) (p)->GetPixelShader(a)\n#define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c) (p)->SetPixelShaderConstantF(a,b,c)\n#define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c) (p)->GetPixelShaderConstantF(a,b,c)\n#define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c) (p)->SetPixelShaderConstantI(a,b,c)\n#define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c) (p)->GetPixelShaderConstantI(a,b,c)\n#define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c) (p)->SetPixelShaderConstantB(a,b,c)\n#define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c) (p)->GetPixelShaderConstantB(a,b,c)\n#define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c)\n#define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c)\n#define IDirect3DDevice9Ex_DeletePatch(p,a) (p)->DeletePatch(a)\n#define IDirect3DDevice9Ex_CreateQuery(p,a,b) (p)->CreateQuery(a,b)\n#define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d) (p)->SetConvolutionMonoKernel(a,b,c,d)\n#define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h) (p)->ComposeRects(a,b,c,d,e,f,g,h)\n#define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e) (p)->PresentEx(a,b,c,d,e)\n#define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a) (p)->GetGPUThreadPriority(a)\n#define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a) (p)->SetGPUThreadPriority(a)\n#define IDirect3DDevice9Ex_WaitForVBlank(p,a) (p)->WaitForVBlank(a)\n#define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b) (p)->CheckResourceResidency(a,b)\n#define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a) (p)->SetMaximumFrameLatency(a)\n#define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a) (p)->GetMaximumFrameLatency(a)\n#define IDirect3DDevice9Ex_CheckDeviceState(p,a) (p)->CheckDeviceState(a)\n#define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i) (p)->CreateRenderTargetEx(a,b,c,d,e,f,g,h,i)\n#define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g) (p)->CreateOffscreenPlainSurfaceEx(a,b,c,d,e,f,g)\n#define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i) (p)->CreateDepthStencilSurfaceEx(a,b,c,d,e,f,g,h,i)\n#define IDirect3DDevice9Ex_ResetEx(p,a,b) (p)->ResetEx(a,b)\n#define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c) (p)->GetDisplayModeEx(a,b,c)\n#endif\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DSwapChain9Ex\n\nDECLARE_INTERFACE_(IDirect3DSwapChain9Ex, IDirect3DSwapChain9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DSwapChain9 methods ***/\n    STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion,DWORD dwFlags) PURE;\n    STDMETHOD(GetFrontBufferData)(THIS_ IDirect3DSurface9* pDestSurface) PURE;\n    STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer) PURE;\n    STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS* pRasterStatus) PURE;\n    STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;\n    STDMETHOD(GetLastPresentCount)(THIS_ UINT* pLastPresentCount) PURE;\n    STDMETHOD(GetPresentStats)(THIS_ D3DPRESENTSTATS* pPresentationStatistics) PURE;\n    STDMETHOD(GetDisplayModeEx)(THIS_ D3DDISPLAYMODEEX* pMode,D3DDISPLAYROTATION* pRotation) PURE;\n};\n    \ntypedef struct IDirect3DSwapChain9Ex *LPDIRECT3DSWAPCHAIN9EX, *PDIRECT3DSWAPCHAIN9EX;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DSwapChain9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DSwapChain9Ex_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DSwapChain9Ex_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DSwapChain9Ex_Present(p,a,b,c,d,e) (p)->lpVtbl->Present(p,a,b,c,d,e)\n#define IDirect3DSwapChain9Ex_GetFrontBufferData(p,a) (p)->lpVtbl->GetFrontBufferData(p,a)\n#define IDirect3DSwapChain9Ex_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c)\n#define IDirect3DSwapChain9Ex_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a)\n#define IDirect3DSwapChain9Ex_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a)\n#define IDirect3DSwapChain9Ex_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DSwapChain9Ex_GetPresentParameters(p,a) (p)->lpVtbl->GetPresentParameters(p,a)\n#define IDirect3DSwapChain9Ex_GetLastPresentCount(p,a) (p)->lpVtbl->GetLastPresentCount(p,a)\n#define IDirect3DSwapChain9Ex_GetPresentStats(p,a) (p)->lpVtbl->GetPresentStats(p,a)\n#define IDirect3DSwapChain9Ex_GetDisplayModeEx(p,a,b) (p)->lpVtbl->GetDisplayModeEx(p,a,b)\n#else\n#define IDirect3DSwapChain9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DSwapChain9Ex_AddRef(p) (p)->AddRef()\n#define IDirect3DSwapChain9Ex_Release(p) (p)->Release()\n#define IDirect3DSwapChain9Ex_Present(p,a,b,c,d,e) (p)->Present(a,b,c,d,e)\n#define IDirect3DSwapChain9Ex_GetFrontBufferData(p,a) (p)->GetFrontBufferData(a)\n#define IDirect3DSwapChain9Ex_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c)\n#define IDirect3DSwapChain9Ex_GetRasterStatus(p,a) (p)->GetRasterStatus(a)\n#define IDirect3DSwapChain9Ex_GetDisplayMode(p,a) (p)->GetDisplayMode(a)\n#define IDirect3DSwapChain9Ex_GetDevice(p,a) (p)->GetDevice(a)\n#define IDirect3DSwapChain9Ex_GetPresentParameters(p,a) (p)->GetPresentParameters(a)\n#define IDirect3DSwapChain9Ex_GetLastPresentCount(p,a) (p)->GetLastPresentCount(a)\n#define IDirect3DSwapChain9Ex_GetPresentStats(p,a) (p)->GetPresentStats(a)\n#define IDirect3DSwapChain9Ex_GetDisplayModeEx(p,a,b) (p)->GetDisplayModeEx(a,b)\n#endif\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3D9ExOverlayExtension\n\nDECLARE_INTERFACE_(IDirect3D9ExOverlayExtension, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3D9ExOverlayExtension methods ***/\n    STDMETHOD(CheckDeviceOverlayType)(THIS_ UINT Adapter,D3DDEVTYPE DevType,UINT OverlayWidth,UINT OverlayHeight,D3DFORMAT OverlayFormat,D3DDISPLAYMODEEX* pDisplayMode,D3DDISPLAYROTATION DisplayRotation,D3DOVERLAYCAPS* pOverlayCaps) PURE;\n};\n    \ntypedef struct IDirect3D9ExOverlayExtension *LPDIRECT3D9EXOVERLAYEXTENSION, *PDIRECT3D9EXOVERLAYEXTENSION;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3D9ExOverlayExtension_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D9ExOverlayExtension_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3D9ExOverlayExtension_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3D9ExOverlayExtension_CheckDeviceOverlayType(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CheckDeviceOverlayType(p,a,b,c,d,e,f,g,h)\n#else\n#define IDirect3D9ExOverlayExtension_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3D9ExOverlayExtension_AddRef(p) (p)->AddRef()\n#define IDirect3D9ExOverlayExtension_Release(p) (p)->Release()\n#define IDirect3D9ExOverlayExtension_CheckDeviceOverlayType(p,a,b,c,d,e,f,g,h) (p)->CheckDeviceOverlayType(a,b,c,d,e,f,g,h)\n#endif\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DDevice9Video\n\nDECLARE_INTERFACE_(IDirect3DDevice9Video, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DDevice9Video methods ***/\n    STDMETHOD(GetContentProtectionCaps)(THIS_ CONST GUID* pCryptoType,CONST GUID* pDecodeProfile,D3DCONTENTPROTECTIONCAPS* pCaps) PURE;\n    STDMETHOD(CreateAuthenticatedChannel)(THIS_ D3DAUTHENTICATEDCHANNELTYPE ChannelType,IDirect3DAuthenticatedChannel9** ppAuthenticatedChannel,HANDLE* pChannelHandle) PURE;\n    STDMETHOD(CreateCryptoSession)(THIS_ CONST GUID* pCryptoType,CONST GUID* pDecodeProfile,IDirect3DCryptoSession9** ppCryptoSession,HANDLE* pCryptoHandle) PURE;\n};\n    \ntypedef struct IDirect3DDevice9Video *LPDIRECT3DDEVICE9VIDEO, *PDIRECT3DDEVICE9VIDEO;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DDevice9Video_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DDevice9Video_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DDevice9Video_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DDevice9Video_GetContentProtectionCaps(p,a,b,c) (p)->lpVtbl->GetContentProtectionCaps(p,a,b,c)\n#define IDirect3DDevice9Video_CreateAuthenticatedChannel(p,a,b,c) (p)->lpVtbl->CreateAuthenticatedChannel(p,a,b,c)\n#define IDirect3DDevice9Video_CreateCryptoSession(p,a,b,c,d) (p)->lpVtbl->CreateCryptoSession(p,a,b,c,d)\n#else\n#define IDirect3DDevice9Video_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DDevice9Video_AddRef(p) (p)->AddRef()\n#define IDirect3DDevice9Video_Release(p) (p)->Release()\n#define IDirect3DDevice9Video_GetContentProtectionCaps(p,a,b,c) (p)->GetContentProtectionCaps(a,b,c)\n#define IDirect3DDevice9Video_CreateAuthenticatedChannel(p,a,b,c) (p)->CreateAuthenticatedChannel(a,b,c)\n#define IDirect3DDevice9Video_CreateCryptoSession(p,a,b,c,d) (p)->CreateCryptoSession(a,b,c,d)\n#endif\n\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DAuthenticatedChannel9\n\nDECLARE_INTERFACE_(IDirect3DAuthenticatedChannel9, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DAuthenticatedChannel9 methods ***/\n    STDMETHOD(GetCertificateSize)(THIS_ UINT* pCertificateSize) PURE;\n    STDMETHOD(GetCertificate)(THIS_ UINT CertifacteSize,BYTE* ppCertificate) PURE;\n    STDMETHOD(NegotiateKeyExchange)(THIS_ UINT DataSize,VOID* pData) PURE;\n    STDMETHOD(Query)(THIS_ UINT InputSize,CONST VOID* pInput,UINT OutputSize,VOID* pOutput) PURE;\n    STDMETHOD(Configure)(THIS_ UINT InputSize,CONST VOID* pInput,D3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT* pOutput) PURE;\n};\n    \ntypedef struct IDirect3DAuthenticatedChannel9 *LPDIRECT3DAUTHENTICATEDCHANNEL9, *PDIRECT3DAUTHENTICATEDCHANNEL9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DAuthenticatedChannel9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DAuthenticatedChannel9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DAuthenticatedChannel9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DAuthenticatedChannel9_GetCertificateSize(p,a) (p)->lpVtbl->GetCertificateSize(p,a)\n#define IDirect3DAuthenticatedChannel9_GetCertificate(p,a,b) (p)->lpVtbl->GetCertificate(p,a,b)\n#define IDirect3DAuthenticatedChannel9_NegotiateKeyExchange(p,a,b) (p)->lpVtbl->NegotiateKeyExchange(p,a,b)\n#define IDirect3DAuthenticatedChannel9_Query(p,a,b,c,d) (p)->lpVtbl->Query(p,a,b,c,d)\n#define IDirect3DAuthenticatedChannel9_Configure(p,a,b,c) (p)->lpVtbl->Configure(p,a,b,c)\n#else\n#define IDirect3DAuthenticatedChannel9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DAuthenticatedChannel9_AddRef(p) (p)->AddRef()\n#define IDirect3DAuthenticatedChannel9_Release(p) (p)->Release()\n#define IDirect3DAuthenticatedChannel9_GetCertificateSize(p,a) (p)->GetCertificateSize(a)\n#define IDirect3DAuthenticatedChannel9_GetCertificate(p,a,b) (p)->GetCertificate(a,b)\n#define IDirect3DAuthenticatedChannel9_NegotiateKeyExchange(p,a,b) (p)->NegotiateKeyExchange(a,b)\n#define IDirect3DAuthenticatedChannel9_Query(p,a,b,c,d) (p)->Query(a,b,c,d)\n#define IDirect3DAuthenticatedChannel9_Configure(p,a,b,c) (p)->Configure(a,b,c)\n#endif\n\n\n\n#undef INTERFACE\n#define INTERFACE IDirect3DCryptoSession9\n\nDECLARE_INTERFACE_(IDirect3DCryptoSession9, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirect3DCryptoSession9 methods ***/\n    STDMETHOD(GetCertificateSize)(THIS_ UINT* pCertificateSize) PURE;\n    STDMETHOD(GetCertificate)(THIS_ UINT CertifacteSize,BYTE* ppCertificate) PURE;\n    STDMETHOD(NegotiateKeyExchange)(THIS_ UINT DataSize,VOID* pData) PURE;\n    STDMETHOD(EncryptionBlt)(THIS_ IDirect3DSurface9* pSrcSurface,IDirect3DSurface9* pDstSurface,UINT DstSurfaceSize,VOID* pIV) PURE;\n    STDMETHOD(DecryptionBlt)(THIS_ IDirect3DSurface9* pSrcSurface,IDirect3DSurface9* pDstSurface,UINT SrcSurfaceSize,D3DENCRYPTED_BLOCK_INFO* pEncryptedBlockInfo,VOID* pContentKey,VOID* pIV) PURE;\n    STDMETHOD(GetSurfacePitch)(THIS_ IDirect3DSurface9* pSrcSurface,UINT* pSurfacePitch) PURE;\n    STDMETHOD(StartSessionKeyRefresh)(THIS_ VOID* pRandomNumber,UINT RandomNumberSize) PURE;\n    STDMETHOD(FinishSessionKeyRefresh)(THIS) PURE;\n    STDMETHOD(GetEncryptionBltKey)(THIS_ VOID* pReadbackKey,UINT KeySize) PURE;\n};\n    \ntypedef struct IDirect3DCryptoSession9 *LPDIRECT3DCRYPTOSESSION9, *PDIRECT3DCRYPTOSESSION9;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirect3DCryptoSession9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DCryptoSession9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DCryptoSession9_Release(p) (p)->lpVtbl->Release(p)\n#define IDirect3DCryptoSession9_GetCertificateSize(p,a) (p)->lpVtbl->GetCertificateSize(p,a)\n#define IDirect3DCryptoSession9_GetCertificate(p,a,b) (p)->lpVtbl->GetCertificate(p,a,b)\n#define IDirect3DCryptoSession9_NegotiateKeyExchange(p,a,b) (p)->lpVtbl->NegotiateKeyExchange(p,a,b)\n#define IDirect3DCryptoSession9_EncryptionBlt(p,a,b,c,d) (p)->lpVtbl->EncryptionBlt(p,a,b,c,d)\n#define IDirect3DCryptoSession9_DecryptionBlt(p,a,b,c,d,e,f) (p)->lpVtbl->DecryptionBlt(p,a,b,c,d,e,f)\n#define IDirect3DCryptoSession9_GetSurfacePitch(p,a,b) (p)->lpVtbl->GetSurfacePitch(p,a,b)\n#define IDirect3DCryptoSession9_StartSessionKeyRefresh(p,a,b) (p)->lpVtbl->StartSessionKeyRefresh(p,a,b)\n#define IDirect3DCryptoSession9_FinishSessionKeyRefresh(p) (p)->lpVtbl->FinishSessionKeyRefresh(p)\n#define IDirect3DCryptoSession9_GetEncryptionBltKey(p,a,b) (p)->lpVtbl->GetEncryptionBltKey(p,a,b)\n#else\n#define IDirect3DCryptoSession9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3DCryptoSession9_AddRef(p) (p)->AddRef()\n#define IDirect3DCryptoSession9_Release(p) (p)->Release()\n#define IDirect3DCryptoSession9_GetCertificateSize(p,a) (p)->GetCertificateSize(a)\n#define IDirect3DCryptoSession9_GetCertificate(p,a,b) (p)->GetCertificate(a,b)\n#define IDirect3DCryptoSession9_NegotiateKeyExchange(p,a,b) (p)->NegotiateKeyExchange(a,b)\n#define IDirect3DCryptoSession9_EncryptionBlt(p,a,b,c,d) (p)->EncryptionBlt(a,b,c,d)\n#define IDirect3DCryptoSession9_DecryptionBlt(p,a,b,c,d,e,f) (p)->DecryptionBlt(a,b,c,d,e,f)\n#define IDirect3DCryptoSession9_GetSurfacePitch(p,a,b) (p)->GetSurfacePitch(a,b)\n#define IDirect3DCryptoSession9_StartSessionKeyRefresh(p,a,b) (p)->StartSessionKeyRefresh(a,b)\n#define IDirect3DCryptoSession9_FinishSessionKeyRefresh(p) (p)->FinishSessionKeyRefresh()\n#define IDirect3DCryptoSession9_GetEncryptionBltKey(p,a,b) (p)->GetEncryptionBltKey(a,b)\n#endif\n\n/* -- D3D9Ex only */\n#endif // !D3D_DISABLE_9EX\n\n\n#ifdef __cplusplus\n};\n#endif\n\n#endif /* (DIRECT3D_VERSION >= 0x0900) */\n#endif /* _D3D_H_ */\n\n"
  },
  {
    "path": "Include/d3d9.wine.h",
    "content": "/*\n * Copyright (C) 2002-2003 Jason Edmeades\n *                         Raphael Junqueira\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_D3D9_H\n#define __WINE_D3D9_H\n\n#ifndef DIRECT3D_VERSION\n#define DIRECT3D_VERSION  0x0900\n#endif\n\n#include <stdlib.h>\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n#include <windows.h>\n#include <d3d9types.h>\n#include <d3d9caps.h>\n\n/*****************************************************************************\n * Behavior Flags for IDirect3D8::CreateDevice\n */\n#define D3DCREATE_FPU_PRESERVE                  __MSABI_LONG(0x00000002)\n#define D3DCREATE_MULTITHREADED                 __MSABI_LONG(0x00000004)\n#define D3DCREATE_PUREDEVICE                    __MSABI_LONG(0x00000010)\n#define D3DCREATE_SOFTWARE_VERTEXPROCESSING     __MSABI_LONG(0x00000020)\n#define D3DCREATE_HARDWARE_VERTEXPROCESSING     __MSABI_LONG(0x00000040)\n#define D3DCREATE_MIXED_VERTEXPROCESSING        __MSABI_LONG(0x00000080)\n#define D3DCREATE_DISABLE_DRIVER_MANAGEMENT     __MSABI_LONG(0x00000100)\n#define D3DCREATE_ADAPTERGROUP_DEVICE           __MSABI_LONG(0x00000200)\n#define D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX  __MSABI_LONG(0x00000400)\n#define D3DCREATE_NOWINDOWCHANGES               __MSABI_LONG(0x00000800)\n#define D3DCREATE_DISABLE_PSGP_THREADING        __MSABI_LONG(0x00002000)\n#define D3DCREATE_ENABLE_PRESENTSTATS           __MSABI_LONG(0x00004000)\n#define D3DCREATE_DISABLE_PRINTSCREEN           __MSABI_LONG(0x00008000)\n#define D3DCREATE_SCREENSAVER                   __MSABI_LONG(0x10000000)\n\n/*****************************************************************************\n * Flags for SetPrivateData\n */\n#define D3DSPD_IUNKNOWN                         __MSABI_LONG(0x00000001)\n\n\n/*****************************************************************************\n * #defines and error codes\n */\n#define D3D_SDK_VERSION                         32\n#define D3DADAPTER_DEFAULT                      0\n#define D3DENUM_NO_WHQL_LEVEL                   __MSABI_LONG(0x00000002)\n#define D3DPRESENT_BACK_BUFFERS_MAX             __MSABI_LONG(3)\n#define D3DSGR_NO_CALIBRATION                   __MSABI_LONG(0x00000000)\n#define D3DSGR_CALIBRATE                        __MSABI_LONG(0x00000001)\n\n#define _FACD3D  0x876\n#define MAKE_D3DHRESULT( code )                 MAKE_HRESULT( 1, _FACD3D, code )\n#define MAKE_D3DSTATUS( code )                  MAKE_HRESULT( 0, _FACD3D, code )\n\n/*****************************************************************************\n * Direct3D Errors\n */\n#define D3D_OK                                  S_OK\n#define D3DERR_WRONGTEXTUREFORMAT               MAKE_D3DHRESULT(2072)\n#define D3DERR_UNSUPPORTEDCOLOROPERATION        MAKE_D3DHRESULT(2073)\n#define D3DERR_UNSUPPORTEDCOLORARG              MAKE_D3DHRESULT(2074)\n#define D3DERR_UNSUPPORTEDALPHAOPERATION        MAKE_D3DHRESULT(2075)\n#define D3DERR_UNSUPPORTEDALPHAARG              MAKE_D3DHRESULT(2076)\n#define D3DERR_TOOMANYOPERATIONS                MAKE_D3DHRESULT(2077)\n#define D3DERR_CONFLICTINGTEXTUREFILTER         MAKE_D3DHRESULT(2078)\n#define D3DERR_UNSUPPORTEDFACTORVALUE           MAKE_D3DHRESULT(2079)\n#define D3DERR_CONFLICTINGRENDERSTATE           MAKE_D3DHRESULT(2081)\n#define D3DERR_UNSUPPORTEDTEXTUREFILTER         MAKE_D3DHRESULT(2082)\n#define D3DERR_CONFLICTINGTEXTUREPALETTE        MAKE_D3DHRESULT(2086)\n#define D3DERR_DRIVERINTERNALERROR              MAKE_D3DHRESULT(2087)\n#define D3DERR_NOTFOUND                         MAKE_D3DHRESULT(2150)\n#define D3DERR_MOREDATA                         MAKE_D3DHRESULT(2151)\n#define D3DERR_DEVICELOST                       MAKE_D3DHRESULT(2152)\n#define D3DERR_DEVICENOTRESET                   MAKE_D3DHRESULT(2153)\n#define D3DERR_NOTAVAILABLE                     MAKE_D3DHRESULT(2154)\n#define D3DERR_OUTOFVIDEOMEMORY                 MAKE_D3DHRESULT(380)\n#define D3DERR_INVALIDDEVICE                    MAKE_D3DHRESULT(2155)\n#define D3DERR_INVALIDCALL                      MAKE_D3DHRESULT(2156)\n#define D3DERR_DRIVERINVALIDCALL                MAKE_D3DHRESULT(2157)\n#define D3DERR_WASSTILLDRAWING                  MAKE_D3DHRESULT(540)\n#define D3DOK_NOAUTOGEN                         MAKE_D3DSTATUS(2159)\n\n#define D3DERR_DEVICEREMOVED                    MAKE_D3DHRESULT(2160)\n#define D3DERR_DEVICEHUNG                       MAKE_D3DHRESULT(2164)\n#define S_NOT_RESIDENT                          MAKE_D3DSTATUS(2165)\n#define S_RESIDENT_IN_SHARED_MEMORY             MAKE_D3DSTATUS(2166)\n#define S_PRESENT_MODE_CHANGED                  MAKE_D3DSTATUS(2167)\n#define S_PRESENT_OCCLUDED                      MAKE_D3DSTATUS(2168)\n#define D3DERR_UNSUPPORTEDOVERLAY               MAKE_D3DHRESULT(2171)\n#define D3DERR_UNSUPPORTEDOVERLAYFORMAT         MAKE_D3DHRESULT(2172)\n#define D3DERR_CANNOTPROTECTCONTENT             MAKE_D3DHRESULT(2173)\n#define D3DERR_UNSUPPORTEDCRYPTO                MAKE_D3DHRESULT(2174)\n#define D3DERR_PRESENT_STATISTICS_DISJOINT      MAKE_D3DHRESULT(2180)\n\n\n/*****************************************************************************\n * Predeclare the interfaces\n */\nDEFINE_GUID(IID_IDirect3D9,                   0x81BDCBCA, 0x64D4, 0x426D, 0xAE, 0x8D, 0xAD, 0x1, 0x47, 0xF4, 0x27, 0x5C);\ntypedef struct IDirect3D9 *LPDIRECT3D9, *PDIRECT3D9;\n\nDEFINE_GUID(IID_IDirect3D9Ex,                 0x02177241, 0x69FC, 0x400C, 0x8F, 0xF1, 0x93, 0xA4, 0x4D, 0xF6, 0x86, 0x1D);\ntypedef struct IDirect3D9Ex *LPDIRECT3D9EX, *PDIRECT3D9EX;\n\nDEFINE_GUID(IID_IDirect3DDevice9,             0xd0223b96, 0xbf7a, 0x43fd, 0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb);\ntypedef struct IDirect3DDevice9 *LPDIRECT3DDEVICE9;\n\nDEFINE_GUID(IID_IDirect3DDevice9Ex,           0xb18b10ce, 0x2649, 0x405a, 0x87, 0xf, 0x95, 0xf7, 0x77, 0xd4, 0x31, 0x3a);\ntypedef struct IDirect3DDevice9Ex *LPDIRECT3DDEVICE9EX, *PDIRECT3DDEVICE9EX;\n\nDEFINE_GUID(IID_IDirect3DResource9,           0x5eec05d, 0x8f7d, 0x4362, 0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4);\ntypedef struct IDirect3DResource9 *LPDIRECT3DRESOURCE9, *PDIRECT3DRESOURCE9;\n\nDEFINE_GUID(IID_IDirect3DVertexBuffer9,       0xb64bb1b5, 0xfd70, 0x4df6, 0xbf, 0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3);\ntypedef struct IDirect3DVertexBuffer9 *LPDIRECT3DVERTEXBUFFER9, *PDIRECT3DVERTEXBUFFER9;\n\nDEFINE_GUID(IID_IDirect3DVolume9,             0x24f416e6, 0x1f67, 0x4aa7, 0xb8, 0x8e, 0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1);\ntypedef struct IDirect3DVolume9 *LPDIRECT3DVOLUME9, *PDIRECT3DVOLUME9;\n\nDEFINE_GUID(IID_IDirect3DSwapChain9,          0x794950f2, 0xadfc, 0x458a, 0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b);\ntypedef struct IDirect3DSwapChain9 *LPDIRECT3DSWAPCHAIN9, *PDIRECT3DSWAPCHAIN9;\n\nDEFINE_GUID(IID_IDirect3DSwapChain9Ex,        0x91886caf, 0x1c3d, 0x4d2e, 0xa0, 0xab, 0x3e, 0x4c, 0x7d, 0x8d, 0x33, 0x3);\ntypedef struct IDirect3DSwapChain9Ex *LPDIRECT3DSWAPCHAIN9EX, *PDIRECT3DSWAPCHAIN9EX;\n\nDEFINE_GUID(IID_IDirect3DSurface9,            0xcfbaf3a, 0x9ff6, 0x429a, 0x99, 0xb3, 0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b);\ntypedef struct IDirect3DSurface9 *LPDIRECT3DSURFACE9, *PDIRECT3DSURFACE9;\n\nDEFINE_GUID(IID_IDirect3DIndexBuffer9,        0x7c9dd65e, 0xd3f7, 0x4529, 0xac, 0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35);\ntypedef struct IDirect3DIndexBuffer9 *LPDIRECT3DINDEXBUFFER9, *PDIRECT3DINDEXBUFFER9;\n\nDEFINE_GUID(IID_IDirect3DBaseTexture9,        0x580ca87e, 0x1d3c, 0x4d54, 0x99, 0x1d, 0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce);\ntypedef struct IDirect3DBaseTexture9 *LPDIRECT3DBASETEXTURE9, *PDIRECT3DBASETEXTURE9;\n\nDEFINE_GUID(IID_IDirect3DTexture9,            0x85c31227, 0x3de5, 0x4f00, 0x9b, 0x3a, 0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5);\ntypedef struct IDirect3DTexture9 *LPDIRECT3DTEXTURE9, *PDIRECT3DTEXTURE9;\n\nDEFINE_GUID(IID_IDirect3DCubeTexture9,        0xfff32f81, 0xd953, 0x473a, 0x92, 0x23, 0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f);\ntypedef struct IDirect3DCubeTexture9 *LPDIRECT3DCUBETEXTURE9, *PDIRECT3DCUBETEXTURE9;\n\nDEFINE_GUID(IID_IDirect3DVolumeTexture9,      0x2518526c, 0xe789, 0x4111, 0xa7, 0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6);\ntypedef struct IDirect3DVolumeTexture9 *LPDIRECT3DVOLUMETEXTURE9, *PDIRECT3DVOLUMETEXTURE9;\n\nDEFINE_GUID(IID_IDirect3DVertexDeclaration9,  0xdd13c59c, 0x36fa, 0x4098, 0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46);\ntypedef struct IDirect3DVertexDeclaration9 *LPDIRECT3DVERTEXDECLARATION9;\n\nDEFINE_GUID(IID_IDirect3DVertexShader9,       0xefc5557e, 0x6265, 0x4613, 0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36);\ntypedef struct IDirect3DVertexShader9 *LPDIRECT3DVERTEXSHADER9;\n\nDEFINE_GUID(IID_IDirect3DPixelShader9,        0x6d3bdbdc, 0x5b02, 0x4415, 0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89);\ntypedef struct IDirect3DPixelShader9 *LPDIRECT3DPIXELSHADER9;\n\nDEFINE_GUID(IID_IDirect3DStateBlock9,         0xb07c4fe5, 0x310d, 0x4ba8, 0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b);\ntypedef struct IDirect3DStateBlock9 *LPDIRECT3DSTATEBLOCK9;\n\nDEFINE_GUID(IID_IDirect3DQuery9,              0xd9771460, 0xa695, 0x4f26, 0xbb, 0xd3, 0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc);\ntypedef struct IDirect3DQuery9 *LPDIRECT3DQUERY9, *PDIRECT3DQUERY9;\n\n/*****************************************************************************\n * IDirect3D9 interface\n */\n#undef INTERFACE\n#define INTERFACE IDirect3D9\nDECLARE_INTERFACE_(IDirect3D9,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3D9 methods ***/\n    STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;\n    STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;\n    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;\n    STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE;\n    STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE;\n    STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE;\n    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE;\n    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE;\n    STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE;\n    STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE;\n    STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;\n    STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3D9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D9_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3D9_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3D9 methods ***/\n#define IDirect3D9_RegisterSoftwareDevice(p,a)                (p)->lpVtbl->RegisterSoftwareDevice(p,a)\n#define IDirect3D9_GetAdapterCount(p)                         (p)->lpVtbl->GetAdapterCount(p)\n#define IDirect3D9_GetAdapterIdentifier(p,a,b,c)              (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)\n#define IDirect3D9_GetAdapterModeCount(p,a,b)                 (p)->lpVtbl->GetAdapterModeCount(p,a,b)\n#define IDirect3D9_EnumAdapterModes(p,a,b,c,d)                (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)\n#define IDirect3D9_GetAdapterDisplayMode(p,a,b)               (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)\n#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e)               (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)\n#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)\n#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)\n#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)\n#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)\n#define IDirect3D9_GetDeviceCaps(p,a,b,c)                     (p)->lpVtbl->GetDeviceCaps(p,a,b,c)\n#define IDirect3D9_GetAdapterMonitor(p,a)                     (p)->lpVtbl->GetAdapterMonitor(p,a)\n#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f)                (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)\n#else\n/*** IUnknown methods ***/\n#define IDirect3D9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3D9_AddRef(p)             (p)->AddRef()\n#define IDirect3D9_Release(p)            (p)->Release()\n/*** IDirect3D9 methods ***/\n#define IDirect3D9_RegisterSoftwareDevice(p,a)                (p)->RegisterSoftwareDevice(a)\n#define IDirect3D9_GetAdapterCount(p)                         (p)->GetAdapterCount()\n#define IDirect3D9_GetAdapterIdentifier(p,a,b,c)              (p)->GetAdapterIdentifier(a,b,c)\n#define IDirect3D9_GetAdapterModeCount(p,a,b)                 (p)->GetAdapterModeCount(a,b)\n#define IDirect3D9_EnumAdapterModes(p,a,b,c,d)                (p)->EnumAdapterModes(a,b,c,d)\n#define IDirect3D9_GetAdapterDisplayMode(p,a,b)               (p)->GetAdapterDisplayMode(a,b)\n#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e)               (p)->CheckDeviceType(a,b,c,d,e)\n#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->CheckDeviceFormat(a,b,c,d,e,f)\n#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)\n#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->CheckDepthStencilMatch(a,b,c,d,e)\n#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->CheckDeviceFormatConversion(a,b,c,d)\n#define IDirect3D9_GetDeviceCaps(p,a,b,c)                     (p)->GetDeviceCaps(a,b,c)\n#define IDirect3D9_GetAdapterMonitor(p,a)                     (p)->GetAdapterMonitor(a)\n#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f)                (p)->CreateDevice(a,b,c,d,e,f)\n#endif\n\n/*****************************************************************************\n * IDirect3D9Ex interface\n */\n#define INTERFACE IDirect3D9Ex\nDECLARE_INTERFACE_(IDirect3D9Ex,IDirect3D9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3D9 methods ***/\n\n    /* Note: Microsoft's d3d9.h does not declare IDirect3D9Ex::RegisterSoftwareDevice . This would mean that\n     * the offsets of the other methods in the Vtable change too. This is wrong. In Microsoft's\n     * d3d9.dll, the offsets for the other functions are still compatible with IDirect3D9.\n     * This is probably because even in MS header IDirect3D9Ex inherits from IDirect3D9, which makes the\n     * C++ interface compatible, and nobody uses the C interface in Windows world.\n     */\n    STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;\n\n    STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;\n    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;\n    STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter, D3DFORMAT Format) PURE;\n    STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter, D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter, D3DDEVTYPE DevType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) PURE;\n    STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, DWORD Usage, D3DRESOURCETYPE RType, D3DFORMAT CheckFormat) PURE;\n    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SurfaceFormat, BOOL Windowed, D3DMULTISAMPLE_TYPE MultiSampleType, DWORD* pQualityLevels) PURE;\n    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT AdapterFormat, D3DFORMAT RenderTargetFormat, D3DFORMAT DepthStencilFormat) PURE;\n    STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DFORMAT SourceFormat, D3DFORMAT TargetFormat) PURE;\n    STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps) PURE;\n    STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;\n    STDMETHOD(CreateDevice)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, struct IDirect3DDevice9** ppReturnedDeviceInterface) PURE;\n    /*** IDirect3D9Ex methods ***/\n    //STDMETHOD_(UINT, GetAdapterModeCountEx)(THIS_ UINT Adapter, CONST D3DDISPLAYMODEFILTER *pFilter) PURE;\n    //STDMETHOD(EnumAdapterModesEx)(THIS_ UINT Adapter, CONST D3DDISPLAYMODEFILTER *pFilter, UINT Mode, D3DDISPLAYMODEEX* pMode) PURE;\n    STDMETHOD(GetAdapterDisplayModeEx)(THIS_ UINT Adapter, D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation);\n    STDMETHOD(CreateDeviceEx)(THIS_ UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS* pPresentationParameters, D3DDISPLAYMODEEX* pFullscreenDisplayMode, struct IDirect3DDevice9Ex **ppReturnedDeviceInterface) PURE;\n    STDMETHOD(GetAdapterLUID)(THIS_ UINT Adatper, LUID *pLUID) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3D9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3D9Ex_AddRef(p)             (p)->lpVtbl->AddRef(p)\n#define IDirect3D9Ex_Release(p)            (p)->lpVtbl->Release(p)\n/*** IDirect3D9 methods ***/\n#define IDirect3D9Ex_RegisterSoftwareDevice(p,a)                (p)->lpVtbl->RegisterSoftwareDevice(p,a)\n#define IDirect3D9Ex_GetAdapterCount(p)                         (p)->lpVtbl->GetAdapterCount(p)\n#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c)              (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c)\n#define IDirect3D9Ex_GetAdapterModeCount(p,a,b)                 (p)->lpVtbl->GetAdapterModeCount(p,a,b)\n#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d)                (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d)\n#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b)               (p)->lpVtbl->GetAdapterDisplayMode(p,a,b)\n#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e)               (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e)\n#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f)\n#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f)\n#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e)\n#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d)\n#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c)                     (p)->lpVtbl->GetDeviceCaps(p,a,b,c)\n#define IDirect3D9Ex_GetAdapterMonitor(p,a)                     (p)->lpVtbl->GetAdapterMonitor(p,a)\n#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f)                (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f)\n/*** IDirect3D9Ex methods ***/\n#define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b)               (p)->lpVtbl->GetAdapterModeCountEx(p,a,b)\n#define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d)              (p)->lpVtbl->EnumAdapterModesEx(p,a,b,c,d)\n#define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c)           (p)->lpVtbl->GetAdapterDisplayModeEx(p,a,b,c)\n#define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d,e,f,g)\n#define IDirect3D9Ex_GetAdapterLUID(p,a,b)                      (p)->lpVtbl->GetAdapterLUID(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3D9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirect3D9Ex_AddRef(p)             (p)->AddRef()\n#define IDirect3D9Ex_Release(p)            (p)->Release()\n/*** IDirect3D9 methods ***/\n#define IDirect3D9Ex_RegisterSoftwareDevice(p,a)                (p)->RegisterSoftwareDevice(a)\n#define IDirect3D9Ex_GetAdapterCount(p)                         (p)->GetAdapterCount()\n#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c)              (p)->GetAdapterIdentifier(a,b,c)\n#define IDirect3D9Ex_GetAdapterModeCount(p,a,b)                 (p)->GetAdapterModeCount(a,b)\n#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d)                (p)->EnumAdapterModes(a,b,c,d)\n#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b)               (p)->GetAdapterDisplayMode(a,b)\n#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e)               (p)->CheckDeviceType(a,b,c,d,e)\n#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f)           (p)->CheckDeviceFormat(a,b,c,d,e,f)\n#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f)  (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f)\n#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e)        (p)->CheckDepthStencilMatch(a,b,c,d,e)\n#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d)     (p)->CheckDeviceFormatConversion(a,b,c,d)\n#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c)                     (p)->GetDeviceCaps(a,b,c)\n#define IDirect3D9Ex_GetAdapterMonitor(p,a)                     (p)->GetAdapterMonitor(a)\n#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f)                (p)->CreateDevice(a,b,c,d,e,f)\n#endif\n\n/*****************************************************************************\n * IDirect3DVolume9 interface\n */\n#define INTERFACE IDirect3DVolume9\nDECLARE_INTERFACE_(IDirect3DVolume9,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DVolume9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC* pDesc) PURE;\n    STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX* pLockedVolume, CONST D3DBOX* pBox, DWORD Flags) PURE;\n    STDMETHOD(UnlockBox)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DVolume9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVolume9_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DVolume9_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DVolume9 methods ***/\n#define IDirect3DVolume9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DVolume9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DVolume9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DVolume9_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)\n#define IDirect3DVolume9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)\n#define IDirect3DVolume9_LockBox(p,a,b,c)             (p)->lpVtbl->LockBox(p,a,b,c)\n#define IDirect3DVolume9_UnlockBox(p)                 (p)->lpVtbl->UnlockBox(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DVolume9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DVolume9_AddRef(p)                    (p)->AddRef()\n#define IDirect3DVolume9_Release(p)                   (p)->Release()\n/*** IDirect3DVolume9 methods ***/\n#define IDirect3DVolume9_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DVolume9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DVolume9_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DVolume9_GetContainer(p,a,b)          (p)->GetContainer(a,b)\n#define IDirect3DVolume9_GetDesc(p,a)                 (p)->GetDesc(a)\n#define IDirect3DVolume9_LockBox(p,a,b,c)             (p)->LockBox(a,b,c)\n#define IDirect3DVolume9_UnlockBox(p)                 (p)->UnlockBox()\n#endif\n\n/*****************************************************************************\n * IDirect3DSwapChain9 interface\n */\n#define INTERFACE IDirect3DSwapChain9\nDECLARE_INTERFACE_(IDirect3DSwapChain9,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DSwapChain9 methods ***/\n    STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion, DWORD dwFlags) PURE;\n    STDMETHOD(GetFrontBufferData)(THIS_ struct IDirect3DSurface9* pDestSurface) PURE;\n    STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, struct IDirect3DSurface9** ppBackBuffer) PURE;\n    STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS* pRasterStatus) PURE;\n    STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE* pMode) PURE;\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DSwapChain9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DSwapChain9_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DSwapChain9_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DSwapChain9 methods ***/\n#define IDirect3DSwapChain9_Present(p,a,b,c,d,e)         (p)->lpVtbl->Present(p,a,b,c,d,e)\n#define IDirect3DSwapChain9_GetFrontBufferData(p,a)      (p)->lpVtbl->GetFrontBufferData(p,a)\n#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c)       (p)->lpVtbl->GetBackBuffer(p,a,b,c)\n#define IDirect3DSwapChain9_GetRasterStatus(p,a)         (p)->lpVtbl->GetRasterStatus(p,a)\n#define IDirect3DSwapChain9_GetDisplayMode(p,a)          (p)->lpVtbl->GetDisplayMode(p,a)\n#define IDirect3DSwapChain9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DSwapChain9_GetPresentParameters(p,a)    (p)->lpVtbl->GetPresentParameters(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DSwapChain9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DSwapChain9_AddRef(p)                    (p)->AddRef()\n#define IDirect3DSwapChain9_Release(p)                   (p)->Release()\n/*** IDirect3DSwapChain9 methods ***/\n#define IDirect3DSwapChain9_Present(p,a,b,c,d,e)         (p)->Present(a,b,c,d,e)\n#define IDirect3DSwapChain9_GetFrontBufferData(p,a)      (p)->GetFrontBufferData(a)\n#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c)       (p)->GetBackBuffer(a,b,c)\n#define IDirect3DSwapChain9_GetRasterStatus(p,a)         (p)->GetRasterStatus(a)\n#define IDirect3DSwapChain9_GetDisplayMode(p,a)          (p)->GetDisplayMode(a)\n#define IDirect3DSwapChain9_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DSwapChain9_GetPresentParameters(p,a)    (p)->GetPresentParameters(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DResource9 interface\n */\n#define INTERFACE IDirect3DResource9\nDECLARE_INTERFACE_(IDirect3DResource9,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DResource9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DResource9_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DResource9_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DResource9 methods ***/\n#define IDirect3DResource9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DResource9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DResource9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DResource9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DResource9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DResource9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)\n#define IDirect3DResource9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)\n#define IDirect3DResource9_GetType(p)                   (p)->lpVtbl->GetType(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DResource9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DResource9_AddRef(p)                    (p)->AddRef()\n#define IDirect3DResource9_Release(p)                   (p)->Release()\n/*** IDirect3DResource9 methods ***/\n#define IDirect3DResource9_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DResource9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DResource9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DResource9_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DResource9_SetPriority(p,a)             (p)->SetPriority(a)\n#define IDirect3DResource9_GetPriority(p)               (p)->GetPriority()\n#define IDirect3DResource9_PreLoad(p)                   (p)->PreLoad()\n#define IDirect3DResource9_GetType(p)                   (p)->GetType()\n#endif\n\n/*****************************************************************************\n * IDirect3DSurface9 interface\n */\n#define INTERFACE IDirect3DSurface9\nDECLARE_INTERFACE_(IDirect3DSurface9,IDirect3DResource9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    /*** IDirect3DSurface9 methods ***/\n    STDMETHOD(GetContainer)(THIS_ REFIID riid, void** ppContainer) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC* pDesc) PURE;\n    STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE;\n    STDMETHOD(UnlockRect)(THIS) PURE;\n    STDMETHOD(GetDC)(THIS_ HDC* phdc) PURE;\n    STDMETHOD(ReleaseDC)(THIS_ HDC hdc) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DSurface9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DSurface9_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DSurface9_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DSurface9 methods: IDirect3DResource9 ***/\n#define IDirect3DSurface9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DSurface9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DSurface9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DSurface9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DSurface9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)\n#define IDirect3DSurface9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)\n#define IDirect3DSurface9_GetType(p)                   (p)->lpVtbl->GetType(p)\n/*** IDirect3DSurface9 methods ***/\n#define IDirect3DSurface9_GetContainer(p,a,b)          (p)->lpVtbl->GetContainer(p,a,b)\n#define IDirect3DSurface9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)\n#define IDirect3DSurface9_LockRect(p,a,b,c)            (p)->lpVtbl->LockRect(p,a,b,c)\n#define IDirect3DSurface9_UnlockRect(p)                (p)->lpVtbl->UnlockRect(p)\n#define IDirect3DSurface9_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)\n#define IDirect3DSurface9_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DSurface9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DSurface9_AddRef(p)                    (p)->AddRef()\n#define IDirect3DSurface9_Release(p)                   (p)->Release()\n/*** IDirect3DSurface9 methods: IDirect3DResource9 ***/\n#define IDirect3DSurface9_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DSurface9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DSurface9_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DSurface9_SetPriority(p,a)             (p)->SetPriority(a)\n#define IDirect3DSurface9_GetPriority(p)               (p)->GetPriority()\n#define IDirect3DSurface9_PreLoad(p)                   (p)->PreLoad()\n#define IDirect3DSurface9_GetType(p)                   (p)->GetType()\n/*** IDirect3DSurface9 methods ***/\n#define IDirect3DSurface9_GetContainer(p,a,b)          (p)->GetContainer(a,b)\n#define IDirect3DSurface9_GetDesc(p,a)                 (p)->GetDesc(a)\n#define IDirect3DSurface9_LockRect(p,a,b,c)            (p)->LockRect(a,b,c)\n#define IDirect3DSurface9_UnlockRect(p)                (p)->UnlockRect()\n#define IDirect3DSurface9_GetDC(p,a)                   (p)->GetDC(a)\n#define IDirect3DSurface9_ReleaseDC(p,a)               (p)->ReleaseDC(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DVertexBuffer9 interface\n */\n#define INTERFACE IDirect3DVertexBuffer9\nDECLARE_INTERFACE_(IDirect3DVertexBuffer9,IDirect3DResource9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    /*** IDirect3DVertexBuffer9 methods ***/\n    STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC* pDesc) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DVertexBuffer9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVertexBuffer9_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DVertexBuffer9_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/\n#define IDirect3DVertexBuffer9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DVertexBuffer9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DVertexBuffer9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DVertexBuffer9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)\n#define IDirect3DVertexBuffer9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)\n#define IDirect3DVertexBuffer9_GetType(p)                   (p)->lpVtbl->GetType(p)\n/*** IDirect3DVertexBuffer9 methods ***/\n#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirect3DVertexBuffer9_Unlock(p)                    (p)->lpVtbl->Unlock(p)\n#define IDirect3DVertexBuffer9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DVertexBuffer9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DVertexBuffer9_AddRef(p)                    (p)->AddRef()\n#define IDirect3DVertexBuffer9_Release(p)                   (p)->Release()\n/*** IDirect3DVertexBuffer9 methods: IDirect3DResource9 ***/\n#define IDirect3DVertexBuffer9_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DVertexBuffer9_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DVertexBuffer9_SetPriority(p,a)             (p)->SetPriority(a)\n#define IDirect3DVertexBuffer9_GetPriority(p)               (p)->GetPriority()\n#define IDirect3DVertexBuffer9_PreLoad(p)                   (p)->PreLoad()\n#define IDirect3DVertexBuffer9_GetType(p)                   (p)->GetType()\n/*** IDirect3DVertexBuffer9 methods ***/\n#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)\n#define IDirect3DVertexBuffer9_Unlock(p)                    (p)->Unlock()\n#define IDirect3DVertexBuffer9_GetDesc(p,a)                 (p)->GetDesc(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DIndexBuffer9 interface\n */\n#define INTERFACE IDirect3DIndexBuffer9\nDECLARE_INTERFACE_(IDirect3DIndexBuffer9,IDirect3DResource9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    /*** IDirect3DIndexBuffer9 methods ***/\n    STDMETHOD(Lock)(THIS_ UINT OffsetToLock, UINT SizeToLock, void** ppbData, DWORD Flags) PURE;\n    STDMETHOD(Unlock)(THIS) PURE;\n    STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC* pDesc) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DIndexBuffer9_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DIndexBuffer9_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirect3DIndexBuffer9_Release(p)                   (p)->lpVtbl->Release(p)\n/*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/\n#define IDirect3DIndexBuffer9_GetDevice(p,a)               (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DIndexBuffer9_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DIndexBuffer9_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DIndexBuffer9_GetPriority(p)               (p)->lpVtbl->GetPriority(p)\n#define IDirect3DIndexBuffer9_PreLoad(p)                   (p)->lpVtbl->PreLoad(p)\n#define IDirect3DIndexBuffer9_GetType(p)                   (p)->lpVtbl->GetType(p)\n/*** IDirect3DIndexBuffer9 methods ***/\n#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirect3DIndexBuffer9_Unlock(p)                    (p)->lpVtbl->Unlock(p)\n#define IDirect3DIndexBuffer9_GetDesc(p,a)                 (p)->lpVtbl->GetDesc(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DIndexBuffer9_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirect3DIndexBuffer9_AddRef(p)                    (p)->AddRef()\n#define IDirect3DIndexBuffer9_Release(p)                   (p)->Release()\n/*** IDirect3DIndexBuffer9 methods: IDirect3DResource9 ***/\n#define IDirect3DIndexBuffer9_GetDevice(p,a)               (p)->GetDevice(a)\n#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirect3DIndexBuffer9_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirect3DIndexBuffer9_SetPriority(p,a)             (p)->SetPriority(a)\n#define IDirect3DIndexBuffer9_GetPriority(p)               (p)->GetPriority()\n#define IDirect3DIndexBuffer9_PreLoad(p)                   (p)->PreLoad()\n#define IDirect3DIndexBuffer9_GetType(p)                   (p)->GetType()\n/*** IDirect3DIndexBuffer9 methods ***/\n#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)\n#define IDirect3DIndexBuffer9_Unlock(p)                    (p)->Unlock()\n#define IDirect3DIndexBuffer9_GetDesc(p,a)                 (p)->GetDesc(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DBaseTexture9 interface\n */\n#define INTERFACE IDirect3DBaseTexture9\nDECLARE_INTERFACE_(IDirect3DBaseTexture9,IDirect3DResource9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    /*** IDirect3DBaseTexture9 methods ***/\n    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;\n    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;\n    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;\n    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;\n    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DBaseTexture9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DBaseTexture9_AddRef(p)              (p)->lpVtbl->AddRef(p)\n#define IDirect3DBaseTexture9_Release(p)             (p)->lpVtbl->Release(p)\n/*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/\n#define IDirect3DBaseTexture9_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d)  (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c)    (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DBaseTexture9_FreePrivateData(p,a)       (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DBaseTexture9_SetPriority(p,a)           (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DBaseTexture9_GetPriority(p)             (p)->lpVtbl->GetPriority(p)\n#define IDirect3DBaseTexture9_PreLoad(p)                 (p)->lpVtbl->PreLoad(p)\n#define IDirect3DBaseTexture9_GetType(p)                 (p)->lpVtbl->GetType(p)\n/*** IDirect3DBaseTexture9 methods ***/\n#define IDirect3DBaseTexture9_SetLOD(p,a)                (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DBaseTexture9_GetLOD(p)                  (p)->lpVtbl->GetLOD(p)\n#define IDirect3DBaseTexture9_GetLevelCount(p)           (p)->lpVtbl->GetLevelCount(p)\n#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a)  (p)->lpVtbl->SetAutoGenFilterType(p,a)\n#define IDirect3DBaseTexture9_GetAutoGenFilterType(p)    (p)->lpVtbl->GetAutoGenFilterType(p)\n#define IDirect3DBaseTexture9_GenerateMipSubLevels(p)    (p)->lpVtbl->GenerateMipSubLevels(p)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DBaseTexture9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)\n#define IDirect3DBaseTexture9_AddRef(p)              (p)->AddRef()\n#define IDirect3DBaseTexture9_Release(p)             (p)->Release()\n/*** IDirect3DBaseTexture9 methods: IDirect3DResource9 ***/\n#define IDirect3DBaseTexture9_GetDevice(p,a)             (p)->GetDevice(a)\n#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d)  (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c)    (p)->GetPrivateData(a,b,c)\n#define IDirect3DBaseTexture9_FreePrivateData(p,a)       (p)->FreePrivateData(a)\n#define IDirect3DBaseTexture9_SetPriority(p,a)           (p)->SetPriority(a)\n#define IDirect3DBaseTexture9_GetPriority(p)             (p)->GetPriority()\n#define IDirect3DBaseTexture9_PreLoad(p)                 (p)->PreLoad()\n#define IDirect3DBaseTexture9_GetType(p)                 (p)->GetType()\n/*** IDirect3DBaseTexture9 methods ***/\n#define IDirect3DBaseTexture9_SetLOD(p,a)                (p)->SetLOD(a)\n#define IDirect3DBaseTexture9_GetLOD(p)                  (p)->GetLOD()\n#define IDirect3DBaseTexture9_GetLevelCount(p)           (p)->GetLevelCount()\n#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a)  (p)->SetAutoGenFilterType(a)\n#define IDirect3DBaseTexture9_GetAutoGenFilterType(p)    (p)->GetAutoGenFilterType()\n#define IDirect3DBaseTexture9_GenerateMipSubLevels(p)    (p)->GenerateMipSubLevels()\n#endif\n\n/*****************************************************************************\n * IDirect3DCubeTexture9 interface\n */\n#define INTERFACE IDirect3DCubeTexture9\nDECLARE_INTERFACE_(IDirect3DCubeTexture9,IDirect3DBaseTexture9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    /*** IDirect3DBaseTexture9 methods ***/\n    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;\n    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;\n    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;\n    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;\n    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;\n    /*** IDirect3DCubeTexture9 methods ***/\n    STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC* pDesc) PURE;\n    STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level, IDirect3DSurface9** ppCubeMapSurface) PURE;\n    STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level, D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE;\n    STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType, UINT Level) PURE;\n    STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES FaceType, CONST RECT* pDirtyRect) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DCubeTexture9_QueryInterface(p,a,b)       (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DCubeTexture9_AddRef(p)                   (p)->lpVtbl->AddRef(p)\n#define IDirect3DCubeTexture9_Release(p)                  (p)->lpVtbl->Release(p)\n/*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/\n#define IDirect3DCubeTexture9_GetDevice(p,a)              (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d)   (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c)     (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DCubeTexture9_FreePrivateData(p,a)        (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DCubeTexture9_SetPriority(p,a)            (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DCubeTexture9_GetPriority(p)              (p)->lpVtbl->GetPriority(p)\n#define IDirect3DCubeTexture9_PreLoad(p)                  (p)->lpVtbl->PreLoad(p)\n#define IDirect3DCubeTexture9_GetType(p)                  (p)->lpVtbl->GetType(p)\n/*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/\n#define IDirect3DCubeTexture9_SetLOD(p,a)                 (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DCubeTexture9_GetLOD(p)                   (p)->lpVtbl->GetLOD(p)\n#define IDirect3DCubeTexture9_GetLevelCount(p)            (p)->lpVtbl->GetLevelCount(p)\n#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a)   (p)->lpVtbl->SetAutoGenFilterType(p,a)\n#define IDirect3DCubeTexture9_GetAutoGenFilterType(p)     (p)->lpVtbl->GetAutoGenFilterType(p)\n#define IDirect3DCubeTexture9_GenerateMipSubLevels(p)     (p)->lpVtbl->GenerateMipSubLevels(p)\n/*** IDirect3DCubeTexture9 methods ***/\n#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b)         (p)->lpVtbl->GetLevelDesc(p,a,b)\n#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c)  (p)->lpVtbl->GetCubeMapSurface(p,a,b,c)\n#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e)       (p)->lpVtbl->LockRect(p,a,b,c,d,e)\n#define IDirect3DCubeTexture9_UnlockRect(p,a,b)           (p)->lpVtbl->UnlockRect(p,a,b)\n#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b)         (p)->lpVtbl->AddDirtyRect(p,a,b)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DCubeTexture9_QueryInterface(p,a,b)       (p)->QueryInterface(a,b)\n#define IDirect3DCubeTexture9_AddRef(p)                   (p)->AddRef()\n#define IDirect3DCubeTexture9_Release(p)                  (p)->Release()\n/*** IDirect3DCubeTexture9 methods: IDirect3DResource9 ***/\n#define IDirect3DCubeTexture9_GetDevice(p,a)              (p)->GetDevice(a)\n#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d)   (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c)     (p)->GetPrivateData(a,b,c)\n#define IDirect3DCubeTexture9_FreePrivateData(p,a)        (p)->FreePrivateData(a)\n#define IDirect3DCubeTexture9_SetPriority(p,a)            (p)->SetPriority(a)\n#define IDirect3DCubeTexture9_GetPriority(p)              (p)->GetPriority()\n#define IDirect3DCubeTexture9_PreLoad(p)                  (p)->PreLoad()\n#define IDirect3DCubeTexture9_GetType(p)                  (p)->GetType()\n/*** IDirect3DCubeTexture9 methods: IDirect3DBaseTexture9 ***/\n#define IDirect3DCubeTexture9_SetLOD(p,a)                 (p)->SetLOD(a)\n#define IDirect3DCubeTexture9_GetLOD(p)                   (p)->GetLOD()\n#define IDirect3DCubeTexture9_GetLevelCount(p)            (p)->GetLevelCount()\n#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a)   (p)->SetAutoGenFilterType(a)\n#define IDirect3DCubeTexture9_GetAutoGenFilterType(p)     (p)->GetAutoGenFilterType()\n#define IDirect3DCubeTexture9_GenerateMipSubLevels(p)     (p)->GenerateMipSubLevels()\n/*** IDirect3DCubeTexture9 methods ***/\n#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b)         (p)->GetLevelDesc(a,b)\n#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c)  (p)->GetCubeMapSurface(a,b,c)\n#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e)       (p)->LockRect(a,b,c,d,e)\n#define IDirect3DCubeTexture9_UnlockRect(p,a,b)           (p)->UnlockRect(a,b)\n#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b)         (p)->AddDirtyRect(a,b)\n#endif\n\n/*****************************************************************************\n * IDirect3DTexture9 interface\n */\n#define INTERFACE IDirect3DTexture9\nDECLARE_INTERFACE_(IDirect3DTexture9,IDirect3DBaseTexture9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    /*** IDirect3DBaseTexture9 methods ***/\n    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;\n    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;\n    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;\n    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;\n    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;\n    /*** IDirect3DTexture9 methods ***/\n    STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DSURFACE_DESC* pDesc) PURE;\n    STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level, IDirect3DSurface9** ppSurfaceLevel) PURE;\n    STDMETHOD(LockRect)(THIS_ UINT Level, D3DLOCKED_RECT* pLockedRect, CONST RECT* pRect, DWORD Flags) PURE;\n    STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE;\n    STDMETHOD(AddDirtyRect)(THIS_ CONST RECT* pDirtyRect) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DTexture9_QueryInterface(p,a,b)      (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DTexture9_AddRef(p)                  (p)->lpVtbl->AddRef(p)\n#define IDirect3DTexture9_Release(p)                 (p)->lpVtbl->Release(p)\n/*** IDirect3DTexture9 methods: IDirect3DResource9 ***/\n#define IDirect3DTexture9_GetDevice(p,a)             (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d)  (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DTexture9_GetPrivateData(p,a,b,c)    (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DTexture9_FreePrivateData(p,a)       (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DTexture9_SetPriority(p,a)           (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DTexture9_GetPriority(p)             (p)->lpVtbl->GetPriority(p)\n#define IDirect3DTexture9_PreLoad(p)                 (p)->lpVtbl->PreLoad(p)\n#define IDirect3DTexture9_GetType(p)                 (p)->lpVtbl->GetType(p)\n/*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/\n#define IDirect3DTexture9_SetLOD(p,a)                (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DTexture9_GetLOD(p)                  (p)->lpVtbl->GetLOD(p)\n#define IDirect3DTexture9_GetLevelCount(p)           (p)->lpVtbl->GetLevelCount(p)\n#define IDirect3DTexture9_SetAutoGenFilterType(p,a)  (p)->lpVtbl->SetAutoGenFilterType(p,a)\n#define IDirect3DTexture9_GetAutoGenFilterType(p)    (p)->lpVtbl->GetAutoGenFilterType(p)\n#define IDirect3DTexture9_GenerateMipSubLevels(p)    (p)->lpVtbl->GenerateMipSubLevels(p)\n/*** IDirect3DTexture9 methods ***/\n#define IDirect3DTexture9_GetLevelDesc(p,a,b)        (p)->lpVtbl->GetLevelDesc(p,a,b)\n#define IDirect3DTexture9_GetSurfaceLevel(p,a,b)     (p)->lpVtbl->GetSurfaceLevel(p,a,b)\n#define IDirect3DTexture9_LockRect(p,a,b,c,d)        (p)->lpVtbl->LockRect(p,a,b,c,d)\n#define IDirect3DTexture9_UnlockRect(p,a)            (p)->lpVtbl->UnlockRect(p,a)\n#define IDirect3DTexture9_AddDirtyRect(p,a)          (p)->lpVtbl->AddDirtyRect(p,a)\n#else\n/*** IUnknown methods ***/\n#define IDirect3DTexture9_QueryInterface(p,a,b)      (p)->QueryInterface(a,b)\n#define IDirect3DTexture9_AddRef(p)                  (p)->AddRef()\n#define IDirect3DTexture9_Release(p)                 (p)->Release()\n/*** IDirect3DTexture9 methods: IDirect3DResource9 ***/\n#define IDirect3DTexture9_GetDevice(p,a)             (p)->GetDevice(a)\n#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d)  (p)->SetPrivateData(a,b,c,d)\n#define IDirect3DTexture9_GetPrivateData(p,a,b,c)    (p)->GetPrivateData(a,b,c)\n#define IDirect3DTexture9_FreePrivateData(p,a)       (p)->FreePrivateData(a)\n#define IDirect3DTexture9_SetPriority(p,a)           (p)->SetPriority(a)\n#define IDirect3DTexture9_GetPriority(p)             (p)->GetPriority()\n#define IDirect3DTexture9_PreLoad(p)                 (p)->PreLoad()\n#define IDirect3DTexture9_GetType(p)                 (p)->GetType()\n/*** IDirect3DTexture9 methods: IDirect3DBaseTexture9 ***/\n#define IDirect3DTexture9_SetLOD(p,a)                (p)->SetLOD(a)\n#define IDirect3DTexture9_GetLOD(p)                  (p)->GetLOD()\n#define IDirect3DTexture9_GetLevelCount(p)           (p)->GetLevelCount()\n#define IDirect3DTexture9_SetAutoGenFilterType(p,a)  (p)->SetAutoGenFilterType(a)\n#define IDirect3DTexture9_GetAutoGenFilterType(p)    (p)->GetAutoGenFilterType()\n#define IDirect3DTexture9_GenerateMipSubLevels(p)    (p)->GenerateMipSubLevels()\n/*** IDirect3DTexture9 methods ***/\n#define IDirect3DTexture9_GetLevelDesc(p,a,b)        (p)->GetLevelDesc(a,b)\n#define IDirect3DTexture9_GetSurfaceLevel(p,a,b)     (p)->GetSurfaceLevel(a,b)\n#define IDirect3DTexture9_LockRect(p,a,b,c,d)        (p)->LockRect(a,b,c,d)\n#define IDirect3DTexture9_UnlockRect(p,a)            (p)->UnlockRect(a)\n#define IDirect3DTexture9_AddDirtyRect(p,a)          (p)->AddDirtyRect(a)\n#endif\n\n/*****************************************************************************\n * IDirect3DVolumeTexture9 interface\n */\n#define INTERFACE IDirect3DVolumeTexture9\nDECLARE_INTERFACE_(IDirect3DVolumeTexture9,IDirect3DBaseTexture9)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n    /*** IDirect3DResource9 methods ***/\n    STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid, void* pData, DWORD* pSizeOfData) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE;\n    STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE;\n    STDMETHOD_(DWORD, GetPriority)(THIS) PURE;\n    STDMETHOD_(void, PreLoad)(THIS) PURE;\n    STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE;\n    /*** IDirect3DBaseTexture9 methods ***/\n    STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE;\n    STDMETHOD_(DWORD, GetLOD)(THIS) PURE;\n    STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE;\n    STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE;\n    STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE;\n    STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE;\n    /*** IDirect3DVolumeTexture9 methods ***/\n    STDMETHOD(GetLevelDesc)(THIS_ UINT Level, D3DVOLUME_DESC *pDesc) PURE;\n    STDMETHOD(GetVolumeLevel)(THIS_ UINT Level, IDirect3DVolume9** ppVolumeLevel) PURE;\n    STDMETHOD(LockBox)(THIS_ UINT Level, D3DLOCKED_BOX* pLockedVolume, CONST D3DBOX* pBox, DWORD Flags) PURE;\n    STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE;\n    STDMETHOD(AddDirtyBox)(THIS_ CONST D3DBOX* pDirtyBox) PURE;\n};\n#undef INTERFACE\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n/*** IUnknown methods ***/\n#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirect3DVolumeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirect3DVolumeTexture9_Release(p) (p)->lpVtbl->Release(p)\n/*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/\n#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a)\n#define IDirect3DVolumeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p)\n#define IDirect3DVolumeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p)\n#define IDirect3DVolumeTexture9_GetType(p) (p)->lpVtbl->GetType(p)\n/*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/\n#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a)\n#define IDirect3DVolumeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p)\n#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p)\n #define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a)\n #define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p)\n #define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p)\n /*** IDirect3DVolumeTexture9 methods ***/\n #define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b)\n #define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b)\n #define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d)\n #define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a)\n #define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a)\n #else\n /*** IUnknown methods ***/\n #define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n #define IDirect3DVolumeTexture9_AddRef(p) (p)->AddRef()\n #define IDirect3DVolumeTexture9_Release(p) (p)->Release()\n /*** IDirect3DVolumeTexture9 methods: IDirect3DResource9 ***/\n #define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->GetDevice(a)\n #define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d)\n #define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c)\n #define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a)\n #define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->SetPriority(a)\n #define IDirect3DVolumeTexture9_GetPriority(p) (p)->GetPriority()\n #define IDirect3DVolumeTexture9_PreLoad(p) (p)->PreLoad()\n #define IDirect3DVolumeTexture9_GetType(p) (p)->GetType()\n /*** IDirect3DVolumeTexture9 methods: IDirect3DBaseTexture9 ***/\n #define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->SetLOD(a)\n #define IDirect3DVolumeTexture9_GetLOD(p) (p)->GetLOD()\n #define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->GetLevelCount()\n #define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a)\n #define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType()\n #define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels()\n /*** IDirect3DVolumeTexture9 methods ***/\n #define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b)\n #define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b)\n #define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d)\n #define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->UnlockBox(a)\n #define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->AddDirtyBox(a)\n #endif\n \n /*****************************************************************************\n  * IDirect3DVertexDeclaration9 interface\n  */\n #define INTERFACE IDirect3DVertexDeclaration9\n DECLARE_INTERFACE_(IDirect3DVertexDeclaration9,IUnknown)\n {\n     /*** IUnknown methods ***/\n     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n     STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n     STDMETHOD_(ULONG,Release)(THIS) PURE;\n     /*** IDirect3DVertexDeclaration9 methods ***/\n     STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n     STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9*, UINT* pNumElements) PURE;\n };\n #undef INTERFACE\n \n #if !defined(__cplusplus) || defined(CINTERFACE)\n /*** IUnknown methods ***/\n #define IDirect3DVertexDeclaration9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n #define IDirect3DVertexDeclaration9_AddRef(p)              (p)->lpVtbl->AddRef(p)\n #define IDirect3DVertexDeclaration9_Release(p)             (p)->lpVtbl->Release(p)\n /*** IDirect3DVertexShader9 methods ***/\n #define IDirect3DVertexDeclaration9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)\n #define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b)  (p)->lpVtbl->GetDeclaration(p,a,b)\n #else\n /*** IUnknown methods ***/\n #define IDirect3DVertexDeclaration9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)\n #define IDirect3DVertexDeclaration9_AddRef(p)              (p)->AddRef()\n #define IDirect3DVertexDeclaration9_Release(p)             (p)->Release()\n /*** IDirect3DVertexShader9 methods ***/\n #define IDirect3DVertexDeclaration9_GetDevice(p,a)         (p)->GetDevice(a)\n #define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b)  (p)->GetDeclaration(a,b)\n #endif\n \n /*****************************************************************************\n  * IDirect3DVertexShader9 interface\n  */\n #define INTERFACE IDirect3DVertexShader9\n DECLARE_INTERFACE_(IDirect3DVertexShader9,IUnknown)\n {\n     /*** IUnknown methods ***/\n     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n     STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n     STDMETHOD_(ULONG,Release)(THIS) PURE;\n     /*** IDirect3DVertexShader9 methods ***/\n     STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n     STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE;\n };\n #undef INTERFACE\n \n #if !defined(__cplusplus) || defined(CINTERFACE)\n /*** IUnknown methods ***/\n #define IDirect3DVertexShader9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n #define IDirect3DVertexShader9_AddRef(p)              (p)->lpVtbl->AddRef(p)\n #define IDirect3DVertexShader9_Release(p)             (p)->lpVtbl->Release(p)\n /*** IDirect3DVertexShader9 methods ***/\n #define IDirect3DVertexShader9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)\n #define IDirect3DVertexShader9_GetFunction(p,a,b)     (p)->lpVtbl->GetFunction(p,a,b)\n #else\n /*** IUnknown methods ***/\n #define IDirect3DVertexShader9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)\n #define IDirect3DVertexShader9_AddRef(p)              (p)->AddRef()\n #define IDirect3DVertexShader9_Release(p)             (p)->Release()\n /*** IDirect3DVertexShader9 methods ***/\n #define IDirect3DVertexShader9_GetDevice(p,a)         (p)->GetDevice(a)\n #define IDirect3DVertexShader9_GetFunction(p,a,b)     (p)->GetFunction(a,b)\n #endif\n \n /*****************************************************************************\n  * IDirect3DPixelShader9 interface\n  */\n #define INTERFACE IDirect3DPixelShader9\n DECLARE_INTERFACE_(IDirect3DPixelShader9,IUnknown)\n {\n     /*** IUnknown methods ***/\n     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n     STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n     STDMETHOD_(ULONG,Release)(THIS) PURE;\n     /*** IDirect3DPixelShader9 methods ***/\n     STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n     STDMETHOD(GetFunction)(THIS_ void*, UINT* pSizeOfData) PURE;\n };\n #undef INTERFACE\n \n #if !defined(__cplusplus) || defined(CINTERFACE)\n /*** IUnknown methods ***/\n #define IDirect3DPixelShader9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n #define IDirect3DPixelShader9_AddRef(p)              (p)->lpVtbl->AddRef(p)\n #define IDirect3DPixelShader9_Release(p)             (p)->lpVtbl->Release(p)\n /*** IDirect3DPixelShader9 methods ***/\n #define IDirect3DPixelShader9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)\n #define IDirect3DPixelShader9_GetFunction(p,a,b)     (p)->lpVtbl->GetFunction(p,a,b)\n #else\n /*** IUnknown methods ***/\n #define IDirect3DPixelShader9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)\n #define IDirect3DPixelShader9_AddRef(p)              (p)->AddRef()\n #define IDirect3DPixelShader9_Release(p)             (p)->Release()\n /*** IDirect3DPixelShader9 methods ***/\n #define IDirect3DPixelShader9_GetDevice(p,a)         (p)->GetDevice(a)\n #define IDirect3DPixelShader9_GetFunction(p,a,b)     (p)->GetFunction(a,b)\n #endif\n \n /*****************************************************************************\n  * IDirect3DStateBlock9 interface\n  */\n #define INTERFACE IDirect3DStateBlock9\n DECLARE_INTERFACE_(IDirect3DStateBlock9,IUnknown)\n {\n     /*** IUnknown methods ***/\n     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n     STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n     STDMETHOD_(ULONG,Release)(THIS) PURE;\n     /*** IDirect3DStateBlock9 methods ***/\n     STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n     STDMETHOD(Capture)(THIS) PURE;\n     STDMETHOD(Apply)(THIS) PURE;\n };\n #undef INTERFACE\n \n #if !defined(__cplusplus) || defined(CINTERFACE)\n /*** IUnknown methods ***/\n #define IDirect3DStateBlock9_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n #define IDirect3DStateBlock9_AddRef(p)              (p)->lpVtbl->AddRef(p)\n #define IDirect3DStateBlock9_Release(p)             (p)->lpVtbl->Release(p)\n /*** IDirect3DStateBlock9 methods ***/\n #define IDirect3DStateBlock9_GetDevice(p,a)         (p)->lpVtbl->GetDevice(p,a)\n #define IDirect3DStateBlock9_Capture(p)             (p)->lpVtbl->Capture(p)\n #define IDirect3DStateBlock9_Apply(p)               (p)->lpVtbl->Apply(p)\n #else\n /*** IUnknown methods ***/\n #define IDirect3DStateBlock9_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)\n #define IDirect3DStateBlock9_AddRef(p)              (p)->AddRef()\n #define IDirect3DStateBlock9_Release(p)             (p)->Release()\n /*** IDirect3DStateBlock9 methods ***/\n #define IDirect3DStateBlock9_GetDevice(p,a)         (p)->GetDevice(a)\n #define IDirect3DStateBlock9_Capture(p)             (p)->Capture()\n #define IDirect3DStateBlock9_Apply(p)               (p)->Apply()\n #endif\n \n /*****************************************************************************\n  * IDirect3DQuery9 interface\n  */\n #define INTERFACE IDirect3DQuery9\n DECLARE_INTERFACE_(IDirect3DQuery9,IUnknown)\n {\n     /*** IUnknown methods ***/\n     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n     STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n     STDMETHOD_(ULONG,Release)(THIS) PURE;\n     /*** IDirect3DQuery9 methods ***/\n     STDMETHOD(GetDevice)(THIS_ struct IDirect3DDevice9** ppDevice) PURE;\n     STDMETHOD_(D3DQUERYTYPE, GetType)(THIS) PURE;\n     STDMETHOD_(DWORD, GetDataSize)(THIS) PURE;\n     STDMETHOD(Issue)(THIS_ DWORD dwIssueFlags) PURE;\n     STDMETHOD(GetData)(THIS_ void* pData, DWORD dwSize, DWORD dwGetDataFlags) PURE;\n };\n #undef INTERFACE\n \n #if !defined(__cplusplus) || defined(CINTERFACE)\n /*** IUnknown methods ***/\n #define IDirect3DQuery9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n #define IDirect3DQuery9_AddRef(p) (p)->lpVtbl->AddRef(p)\n #define IDirect3DQuery9_Release(p) (p)->lpVtbl->Release(p)\n /*** IDirect3DQuery9 ***/\n #define IDirect3DQuery9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a)\n #define IDirect3DQuery9_GetType(p) (p)->lpVtbl->GetType(p)\n #define IDirect3DQuery9_GetDataSize(p) (p)->lpVtbl->GetDataSize(p)\n #define IDirect3DQuery9_Issue(p,a) (p)->lpVtbl->Issue(p,a)\n #define IDirect3DQuery9_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c)\n #else\n /*** IUnknown methods ***/\n #define IDirect3DQuery9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n #define IDirect3DQuery9_AddRef(p) (p)->AddRef()\n #define IDirect3DQuery9_Release(p) (p)->Release()\n /*** IDirect3DQuery9 ***/\n #define IDirect3DQuery9_GetDevice(p,a) (p)->GetDevice(a)\n #define IDirect3DQuery9_GetType(p) (p)->GetType()\n #define IDirect3DQuery9_GetDataSize(p) (p)->GetDataSize()\n #define IDirect3DQuery9_Issue(p,a) (p)->Issue(a)\n #define IDirect3DQuery9_GetData(p,a,b,c) (p)->GetData(a,b,c)\n #endif\n \n /*****************************************************************************\n  * IDirect3DDevice9 interface\n  */\n #define INTERFACE IDirect3DDevice9\n DECLARE_INTERFACE_(IDirect3DDevice9,IUnknown)\n {\n     /*** IUnknown methods ***/\n     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n     STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n     STDMETHOD_(ULONG,Release)(THIS) PURE;\n     /*** IDirect3DDevice9 methods ***/\n     STDMETHOD(TestCooperativeLevel)(THIS) PURE;\n     STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;\n     STDMETHOD(EvictManagedResources)(THIS) PURE;\n     STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE;\n     STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE;\n     STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE;\n     STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;\n     STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE;\n     STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE;\n     STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;\n     STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE;\n     STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE;\n     STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;\n     STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;\n     STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion) PURE;\n     STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE;\n     STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE;\n     STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;\n     STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain, DWORD Flags, CONST D3DGAMMARAMP* pRamp) PURE;\n     STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE;\n     STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE;\n     STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE;\n     STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE;\n     STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE;\n     STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE;\n     STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;\n     STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;\n     STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestinationSurface, CONST POINT* pDestPoint) PURE;\n     STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE;\n     STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE;\n     STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE;\n     STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestSurface, CONST RECT* pDestRect, D3DTEXTUREFILTERTYPE Filter) PURE;\n     STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface, CONST RECT* pRect, D3DCOLOR color) PURE;\n     STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;\n     STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE;\n     STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE;\n     STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE;\n     STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE;\n     STDMETHOD(BeginScene)(THIS) PURE;\n     STDMETHOD(EndScene)(THIS) PURE;\n     STDMETHOD(Clear)(THIS_ DWORD Count, CONST D3DRECT* pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil) PURE;\n     STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX* pMatrix) PURE;\n     STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE;\n     STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE, CONST D3DMATRIX*) PURE;\n     STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE;\n     STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE;\n     STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE;\n     STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE;\n     STDMETHOD(SetLight)(THIS_ DWORD Index, CONST D3DLIGHT9*) PURE;\n     STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE;\n     STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE;\n     STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE;\n     STDMETHOD(SetClipPlane)(THIS_ DWORD Index, CONST float* pPlane) PURE;\n     STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE;\n     STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE;\n     STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE;\n     STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE;\n     STDMETHOD(BeginStateBlock)(THIS) PURE;\n     STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE;\n     STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE;\n     STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE;\n     STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE;\n     STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE;\n     STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE;\n     STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE;\n     STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE;\n     STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE;\n     STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;\n     STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber, CONST PALETTEENTRY* pEntries) PURE;\n     STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;\n     STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;\n     STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;\n     STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE;\n     STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;\n     STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;\n     STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;\n     STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;\n     STDMETHOD_(float, GetNPatchMode)(THIS) PURE;\n     STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE;\n     STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE;\n     STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;\n     STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT MinVertexIndex, UINT NumVertices, UINT PrimitiveCount, CONST void* pIndexData, D3DFORMAT IndexDataFormat, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;\n     STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE;\n     STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements, IDirect3DVertexDeclaration9** ppDecl) PURE;\n     STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE;\n     STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE;\n     STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;\n     STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE;\n     STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction, IDirect3DVertexShader9** ppShader) PURE;\n     STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE;\n     STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE;\n     STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;\n     STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;\n     STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;\n     STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;\n     STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT  BoolCount) PURE;\n     STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;\n     STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE;\n     STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE;\n     STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE;\n     STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE;\n     STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE;\n     STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE;\n     STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction, IDirect3DPixelShader9** ppShader) PURE;\n     STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE;\n     STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE;\n     STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;\n     STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;\n     STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;\n     STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;\n     STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT  BoolCount) PURE;\n     STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;\n     STDMETHOD(DrawRectPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE;\n     STDMETHOD(DrawTriPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE;\n     STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;\n     STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE;\n };\n #undef INTERFACE\n \n #if !defined(__cplusplus) || defined(CINTERFACE)\n /*** IUnknown methods ***/\n #define IDirect3DDevice9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n #define IDirect3DDevice9_AddRef(p)             (p)->lpVtbl->AddRef(p)\n #define IDirect3DDevice9_Release(p)            (p)->lpVtbl->Release(p)\n /*** IDirect3DDevice9 methods ***/\n #define IDirect3DDevice9_TestCooperativeLevel(p)                       (p)->lpVtbl->TestCooperativeLevel(p)\n #define IDirect3DDevice9_GetAvailableTextureMem(p)                     (p)->lpVtbl->GetAvailableTextureMem(p)\n #define IDirect3DDevice9_EvictManagedResources(p)                      (p)->lpVtbl->EvictManagedResources(p)\n #define IDirect3DDevice9_GetDirect3D(p,a)                              (p)->lpVtbl->GetDirect3D(p,a)\n #define IDirect3DDevice9_GetDeviceCaps(p,a)                            (p)->lpVtbl->GetDeviceCaps(p,a)\n #define IDirect3DDevice9_GetDisplayMode(p,a,b)                         (p)->lpVtbl->GetDisplayMode(p,a,b)\n #define IDirect3DDevice9_GetCreationParameters(p,a)                    (p)->lpVtbl->GetCreationParameters(p,a)\n #define IDirect3DDevice9_SetCursorProperties(p,a,b,c)                  (p)->lpVtbl->SetCursorProperties(p,a,b,c)\n #define IDirect3DDevice9_SetCursorPosition(p,a,b,c)                    (p)->lpVtbl->SetCursorPosition(p,a,b,c)\n #define IDirect3DDevice9_ShowCursor(p,a)                               (p)->lpVtbl->ShowCursor(p,a)\n #define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b)              (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)\n #define IDirect3DDevice9_GetSwapChain(p,a,b)                           (p)->lpVtbl->GetSwapChain(p,a,b)\n #define IDirect3DDevice9_GetNumberOfSwapChains(p)                      (p)->lpVtbl->GetNumberOfSwapChains(p)\n #define IDirect3DDevice9_Reset(p,a)                                    (p)->lpVtbl->Reset(p,a)\n #define IDirect3DDevice9_Present(p,a,b,c,d)                            (p)->lpVtbl->Present(p,a,b,c,d)\n #define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d)                      (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)\n #define IDirect3DDevice9_GetRasterStatus(p,a,b)                        (p)->lpVtbl->GetRasterStatus(p,a,b)\n #define IDirect3DDevice9_SetDialogBoxMode(p,a)                         (p)->lpVtbl->SetDialogBoxMode(p,a)\n #define IDirect3DDevice9_SetGammaRamp(p,a,b,c)                         (p)->lpVtbl->SetGammaRamp(p,a,b,c)\n #define IDirect3DDevice9_GetGammaRamp(p,a,b)                           (p)->lpVtbl->GetGammaRamp(p,a,b)\n #define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)\n #define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)\n #define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)\n #define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)\n #define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9_UpdateSurface(p,a,b,c,d)                      (p)->lpVtbl->UpdateSurface(p,a,b,c,d)\n #define IDirect3DDevice9_UpdateTexture(p,a,b)                          (p)->lpVtbl->UpdateTexture(p,a,b)\n #define IDirect3DDevice9_GetRenderTargetData(p,a,b)                    (p)->lpVtbl->GetRenderTargetData(p,a,b)\n #define IDirect3DDevice9_GetFrontBufferData(p,a,b)                     (p)->lpVtbl->GetFrontBufferData(p,a,b)\n #define IDirect3DDevice9_StretchRect(p,a,b,c,d,e)                      (p)->lpVtbl->StretchRect(p,a,b,c,d,e)\n #define IDirect3DDevice9_ColorFill(p,a,b,c)                            (p)->lpVtbl->ColorFill(p,a,b,c)\n #define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)\n #define IDirect3DDevice9_SetRenderTarget(p,a,b)                        (p)->lpVtbl->SetRenderTarget(p,a,b)\n #define IDirect3DDevice9_GetRenderTarget(p,a,b)                        (p)->lpVtbl->GetRenderTarget(p,a,b)\n #define IDirect3DDevice9_SetDepthStencilSurface(p,a)                   (p)->lpVtbl->SetDepthStencilSurface(p,a)\n #define IDirect3DDevice9_GetDepthStencilSurface(p,a)                   (p)->lpVtbl->GetDepthStencilSurface(p,a)\n #define IDirect3DDevice9_BeginScene(p)                                 (p)->lpVtbl->BeginScene(p)\n #define IDirect3DDevice9_EndScene(p)                                   (p)->lpVtbl->EndScene(p)\n #define IDirect3DDevice9_Clear(p,a,b,c,d,e,f)                          (p)->lpVtbl->Clear(p,a,b,c,d,e,f)\n #define IDirect3DDevice9_SetTransform(p,a,b)                           (p)->lpVtbl->SetTransform(p,a,b)\n #define IDirect3DDevice9_GetTransform(p,a,b)                           (p)->lpVtbl->GetTransform(p,a,b)\n #define IDirect3DDevice9_MultiplyTransform(p,a,b)                      (p)->lpVtbl->MultiplyTransform(p,a,b)\n #define IDirect3DDevice9_SetViewport(p,a)                              (p)->lpVtbl->SetViewport(p,a)\n #define IDirect3DDevice9_GetViewport(p,a)                              (p)->lpVtbl->GetViewport(p,a)\n #define IDirect3DDevice9_SetMaterial(p,a)                              (p)->lpVtbl->SetMaterial(p,a)\n #define IDirect3DDevice9_GetMaterial(p,a)                              (p)->lpVtbl->GetMaterial(p,a)\n #define IDirect3DDevice9_SetLight(p,a,b)                               (p)->lpVtbl->SetLight(p,a,b)\n #define IDirect3DDevice9_GetLight(p,a,b)                               (p)->lpVtbl->GetLight(p,a,b)\n #define IDirect3DDevice9_LightEnable(p,a,b)                            (p)->lpVtbl->LightEnable(p,a,b)\n #define IDirect3DDevice9_GetLightEnable(p,a,b)                         (p)->lpVtbl->GetLightEnable(p,a,b)\n #define IDirect3DDevice9_SetClipPlane(p,a,b)                           (p)->lpVtbl->SetClipPlane(p,a,b)\n #define IDirect3DDevice9_GetClipPlane(p,a,b)                           (p)->lpVtbl->GetClipPlane(p,a,b)\n #define IDirect3DDevice9_SetRenderState(p,a,b)                         (p)->lpVtbl->SetRenderState(p,a,b)\n #define IDirect3DDevice9_GetRenderState(p,a,b)                         (p)->lpVtbl->GetRenderState(p,a,b)\n #define IDirect3DDevice9_CreateStateBlock(p,a,b)                       (p)->lpVtbl->CreateStateBlock(p,a,b)\n #define IDirect3DDevice9_BeginStateBlock(p)                            (p)->lpVtbl->BeginStateBlock(p)\n #define IDirect3DDevice9_EndStateBlock(p,a)                            (p)->lpVtbl->EndStateBlock(p,a)\n #define IDirect3DDevice9_SetClipStatus(p,a)                            (p)->lpVtbl->SetClipStatus(p,a)\n #define IDirect3DDevice9_GetClipStatus(p,a)                            (p)->lpVtbl->GetClipStatus(p,a)\n #define IDirect3DDevice9_GetTexture(p,a,b)                             (p)->lpVtbl->GetTexture(p,a,b)\n #define IDirect3DDevice9_SetTexture(p,a,b)                             (p)->lpVtbl->SetTexture(p,a,b)\n #define IDirect3DDevice9_GetTextureStageState(p,a,b,c)                 (p)->lpVtbl->GetTextureStageState(p,a,b,c)\n #define IDirect3DDevice9_SetTextureStageState(p,a,b,c)                 (p)->lpVtbl->SetTextureStageState(p,a,b,c)\n #define IDirect3DDevice9_GetSamplerState(p,a,b,c)                      (p)->lpVtbl->GetSamplerState(p,a,b,c)\n #define IDirect3DDevice9_SetSamplerState(p,a,b,c)                      (p)->lpVtbl->SetSamplerState(p,a,b,c)\n #define IDirect3DDevice9_ValidateDevice(p,a)                           (p)->lpVtbl->ValidateDevice(p,a)\n #define IDirect3DDevice9_SetPaletteEntries(p,a,b)                      (p)->lpVtbl->SetPaletteEntries(p,a,b)\n #define IDirect3DDevice9_GetPaletteEntries(p,a,b)                      (p)->lpVtbl->GetPaletteEntries(p,a,b)\n #define IDirect3DDevice9_SetCurrentTexturePalette(p,a)                 (p)->lpVtbl->SetCurrentTexturePalette(p,a)\n #define IDirect3DDevice9_GetCurrentTexturePalette(p,a)                 (p)->lpVtbl->GetCurrentTexturePalette(p,a)\n #define IDirect3DDevice9_SetScissorRect(p,a)                           (p)->lpVtbl->SetScissorRect(p,a)\n #define IDirect3DDevice9_GetScissorRect(p,a)                           (p)->lpVtbl->GetScissorRect(p,a)\n #define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a)              (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)\n #define IDirect3DDevice9_GetSoftwareVertexProcessing(p)                (p)->lpVtbl->GetSoftwareVertexProcessing(p)\n #define IDirect3DDevice9_SetNPatchMode(p,a)                            (p)->lpVtbl->SetNPatchMode(p,a)\n #define IDirect3DDevice9_GetNPatchMode(p)                              (p)->lpVtbl->GetNPatchMode(p)\n #define IDirect3DDevice9_DrawPrimitive(p,a,b,c)                        (p)->lpVtbl->DrawPrimitive(p,a,b,c)\n #define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)\n #define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d)                    (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)\n #define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f)                (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)\n #define IDirect3DDevice9_CreateVertexDeclaration(p,a,b)                (p)->lpVtbl->CreateVertexDeclaration(p,a,b)\n #define IDirect3DDevice9_SetVertexDeclaration(p,a)                     (p)->lpVtbl->SetVertexDeclaration(p,a)\n #define IDirect3DDevice9_GetVertexDeclaration(p,a)                     (p)->lpVtbl->GetVertexDeclaration(p,a)\n #define IDirect3DDevice9_SetFVF(p,a)                                   (p)->lpVtbl->SetFVF(p,a)\n #define IDirect3DDevice9_GetFVF(p,a)                                   (p)->lpVtbl->GetFVF(p,a)\n #define IDirect3DDevice9_CreateVertexShader(p,a,b)                     (p)->lpVtbl->CreateVertexShader(p,a,b)\n #define IDirect3DDevice9_SetVertexShader(p,a)                          (p)->lpVtbl->SetVertexShader(p,a)\n #define IDirect3DDevice9_GetVertexShader(p,a)                          (p)->lpVtbl->GetVertexShader(p,a)\n #define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)\n #define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)\n #define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)\n #define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)\n #define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)\n #define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)\n #define IDirect3DDevice9_SetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->SetStreamSource(p,a,b,c,d)\n #define IDirect3DDevice9_GetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->GetStreamSource(p,a,b,c,d)\n #define IDirect3DDevice9_SetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->SetStreamSourceFreq(p,a,b)\n #define IDirect3DDevice9_GetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->GetStreamSourceFreq(p,a,b)\n #define IDirect3DDevice9_SetIndices(p,a)                               (p)->lpVtbl->SetIndices(p,a)\n #define IDirect3DDevice9_GetIndices(p,a)                               (p)->lpVtbl->GetIndices(p,a)\n #define IDirect3DDevice9_CreatePixelShader(p,a,b)                      (p)->lpVtbl->CreatePixelShader(p,a,b)\n #define IDirect3DDevice9_SetPixelShader(p,a)                           (p)->lpVtbl->SetPixelShader(p,a)\n #define IDirect3DDevice9_GetPixelShader(p,a)                           (p)->lpVtbl->GetPixelShader(p,a)\n #define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)\n #define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)\n #define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)\n #define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)\n #define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)\n #define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)\n #define IDirect3DDevice9_DrawRectPatch(p,a,b,c)                        (p)->lpVtbl->DrawRectPatch(p,a,b,c)\n #define IDirect3DDevice9_DrawTriPatch(p,a,b,c)                         (p)->lpVtbl->DrawTriPatch(p,a,b,c)\n #define IDirect3DDevice9_DeletePatch(p,a)                              (p)->lpVtbl->DeletePatch(p,a)\n #define IDirect3DDevice9_CreateQuery(p,a,b)                            (p)->lpVtbl->CreateQuery(p,a,b)\n #else\n /*** IUnknown methods ***/\n #define IDirect3DDevice9_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n #define IDirect3DDevice9_AddRef(p)             (p)->AddRef()\n #define IDirect3DDevice9_Release(p)            (p)->Release()\n /*** IDirect3DDevice9 methods ***/\n #define IDirect3DDevice9_TestCooperativeLevel(p)                       (p)->TestCooperativeLevel()\n #define IDirect3DDevice9_GetAvailableTextureMem(p)                     (p)->GetAvailableTextureMem()\n #define IDirect3DDevice9_EvictManagedResources(p)                      (p)->EvictManagedResources()\n #define IDirect3DDevice9_GetDirect3D(p,a)                              (p)->GetDirect3D(a)\n #define IDirect3DDevice9_GetDeviceCaps(p,a)                            (p)->GetDeviceCaps(a)\n #define IDirect3DDevice9_GetDisplayMode(p,a,b)                         (p)->GetDisplayMode(a,b)\n #define IDirect3DDevice9_GetCreationParameters(p,a)                    (p)->GetCreationParameters(a)\n #define IDirect3DDevice9_SetCursorProperties(p,a,b,c)                  (p)->SetCursorProperties(a,b,c)\n #define IDirect3DDevice9_SetCursorPosition(p,a,b,c)                    (p)->SetCursorPosition(a,b,c)\n #define IDirect3DDevice9_ShowCursor(p,a)                               (p)->ShowCursor(a)\n #define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b)              (p)->CreateAdditionalSwapChain(a,b)\n #define IDirect3DDevice9_GetSwapChain(p,a,b)                           (p)->GetSwapChain(a,b)\n #define IDirect3DDevice9_GetNumberOfSwapChains(p)                      (p)->GetNumberOfSwapChains()\n #define IDirect3DDevice9_Reset(p,a)                                    (p)->Reset(a)\n #define IDirect3DDevice9_Present(p,a,b,c,d)                            (p)->Present(a,b,c,d)\n #define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d)                      (p)->GetBackBuffer(a,b,c,d)\n #define IDirect3DDevice9_GetRasterStatus(p,a,b)                        (p)->GetRasterStatus(a,b)\n #define IDirect3DDevice9_SetDialogBoxMode(p,a)                         (p)->SetDialogBoxMode(a)\n #define IDirect3DDevice9_SetGammaRamp(p,a,b,c)                         (p)->SetGammaRamp(a,b,c)\n #define IDirect3DDevice9_GetGammaRamp(p,a,b)                           (p)->GetGammaRamp(a,b)\n #define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->CreateTexture(a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)\n #define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->CreateCubeTexture(a,b,c,d,e,f,g)\n #define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->CreateVertexBuffer(a,b,c,d,e,f)\n #define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->CreateIndexBuffer(a,b,c,d,e,f)\n #define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9_UpdateSurface(p,a,b,c,d)                      (p)->UpdateSurface(a,b,c,d)\n #define IDirect3DDevice9_UpdateTexture(p,a,b)                          (p)->UpdateTexture(a,b)\n #define IDirect3DDevice9_GetRenderTargetData(p,a,b)                    (p)->GetRenderTargetData(a,b)\n #define IDirect3DDevice9_GetFrontBufferData(p,a,b)                     (p)->GetFrontBufferData(a,b)\n #define IDirect3DDevice9_StretchRect(p,a,b,c,d,e)                      (p)->StretchRect(a,b,c,d,e)\n #define IDirect3DDevice9_ColorFill(p,a,b,c)                            (p)->ColorFill(a,b,c)\n #define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)\n #define IDirect3DDevice9_SetRenderTarget(p,a,b)                        (p)->SetRenderTarget(a,b)\n #define IDirect3DDevice9_GetRenderTarget(p,a,b)                        (p)->GetRenderTarget(a,b)\n #define IDirect3DDevice9_SetDepthStencilSurface(p,a)                   (p)->SetDepthStencilSurface(a)\n #define IDirect3DDevice9_GetDepthStencilSurface(p,a)                   (p)->GetDepthStencilSurface(a)\n #define IDirect3DDevice9_BeginScene(p)                                 (p)->BeginScene()\n #define IDirect3DDevice9_EndScene(p)                                   (p)->EndScene()\n #define IDirect3DDevice9_Clear(p,a,b,c,d,e,f)                          (p)->Clear(a,b,c,d,e,f)\n #define IDirect3DDevice9_SetTransform(p,a,b)                           (p)->SetTransform(a,b)\n #define IDirect3DDevice9_GetTransform(p,a,b)                           (p)->GetTransform(a,b)\n #define IDirect3DDevice9_MultiplyTransform(p,a,b)                      (p)->MultiplyTransform(a,b)\n #define IDirect3DDevice9_SetViewport(p,a)                              (p)->SetViewport(a)\n #define IDirect3DDevice9_GetViewport(p,a)                              (p)->GetViewport(a)\n #define IDirect3DDevice9_SetMaterial(p,a)                              (p)->SetMaterial(a)\n #define IDirect3DDevice9_GetMaterial(p,a)                              (p)->GetMaterial(a)\n #define IDirect3DDevice9_SetLight(p,a,b)                               (p)->SetLight(a,b)\n #define IDirect3DDevice9_GetLight(p,a,b)                               (p)->GetLight(a,b)\n #define IDirect3DDevice9_LightEnable(p,a,b)                            (p)->LightEnable(a,b)\n #define IDirect3DDevice9_GetLightEnable(p,a,b)                         (p)->GetLightEnable(a,b)\n #define IDirect3DDevice9_SetClipPlane(p,a,b)                           (p)->SetClipPlane(a,b)\n #define IDirect3DDevice9_GetClipPlane(p,a,b)                           (p)->GetClipPlane(a,b)\n #define IDirect3DDevice9_SetRenderState(p,a,b)                         (p)->SetRenderState(a,b)\n #define IDirect3DDevice9_GetRenderState(p,a,b)                         (p)->GetRenderState(a,b)\n #define IDirect3DDevice9_CreateStateBlock(p,a,b)                       (p)->CreateStateBlock(a,b)\n #define IDirect3DDevice9_BeginStateBlock(p)                            (p)->BeginStateBlock()\n #define IDirect3DDevice9_EndStateBlock(p,a)                            (p)->EndStateBlock(a)\n #define IDirect3DDevice9_SetClipStatus(p,a)                            (p)->SetClipStatus(a)\n #define IDirect3DDevice9_GetClipStatus(p,a)                            (p)->GetClipStatus(a)\n #define IDirect3DDevice9_GetTexture(p,a,b)                             (p)->GetTexture(a,b)\n #define IDirect3DDevice9_SetTexture(p,a,b)                             (p)->SetTexture(a,b)\n #define IDirect3DDevice9_GetTextureStageState(p,a,b,c)                 (p)->GetTextureStageState(a,b,c)\n #define IDirect3DDevice9_SetTextureStageState(p,a,b,c)                 (p)->SetTextureStageState(a,b,c)\n #define IDirect3DDevice9_GetSamplerState(p,a,b,c)                      (p)->GetSamplerState(a,b,c)\n #define IDirect3DDevice9_SetSamplerState(p,a,b,c)                      (p)->SetSamplerState(a,b,c)\n #define IDirect3DDevice9_ValidateDevice(p,a)                           (p)->ValidateDevice(a)\n #define IDirect3DDevice9_SetPaletteEntries(p,a,b)                      (p)->SetPaletteEntries(a,b)\n #define IDirect3DDevice9_GetPaletteEntries(p,a,b)                      (p)->GetPaletteEntries(a,b)\n #define IDirect3DDevice9_SetCurrentTexturePalette(p,a)                 (p)->SetCurrentTexturePalette(a)\n #define IDirect3DDevice9_GetCurrentTexturePalette(p,a)                 (p)->GetCurrentTexturePalette(a)\n #define IDirect3DDevice9_SetScissorRect(p,a)                           (p)->SetScissorRect(a)\n #define IDirect3DDevice9_GetScissorRect(p,a)                           (p)->GetScissorRect(a)\n #define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a)              (p)->SetSoftwareVertexProcessing(a)\n #define IDirect3DDevice9_GetSoftwareVertexProcessing(p)                (p)->GetSoftwareVertexProcessing()\n #define IDirect3DDevice9_SetNPatchMode(p,a)                            (p)->SetNPatchMode(a)\n #define IDirect3DDevice9_GetNPatchMode(p)                              (p)->GetNPatchMode()\n #define IDirect3DDevice9_DrawPrimitive(p,a,b,c)                        (p)->DrawPrimitive(a,b,c)\n #define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->DrawIndexedPrimitive(a,b,c,d,e,f)\n #define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d)                    (p)->DrawPrimitiveUP(a,b,c,d)\n #define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f)                (p)->ProcessVertices(a,b,c,d,e,f)\n #define IDirect3DDevice9_CreateVertexDeclaration(p,a,b)                (p)->CreateVertexDeclaration(a,b)\n #define IDirect3DDevice9_SetVertexDeclaration(p,a)                     (p)->SetVertexDeclaration(a)\n #define IDirect3DDevice9_GetVertexDeclaration(p,a)                     (p)->GetVertexDeclaration(a)\n #define IDirect3DDevice9_SetFVF(p,a)                                   (p)->SetFVF(a)\n #define IDirect3DDevice9_GetFVF(p,a)                                   (p)->GetFVF(a)\n #define IDirect3DDevice9_CreateVertexShader(p,a,b)                     (p)->CreateVertexShader(a,b)\n #define IDirect3DDevice9_SetVertexShader(p,a)                          (p)->SetVertexShader(a)\n #define IDirect3DDevice9_GetVertexShader(p,a)                          (p)->GetVertexShader(a)\n #define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c)             (p)->SetVertexShaderConstantF(a,b,c)\n #define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c)             (p)->GetVertexShaderConstantF(a,b,c)\n #define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c)             (p)->SetVertexShaderConstantI(a,b,c)\n #define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c)             (p)->GetVertexShaderConstantI(a,b,c)\n #define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c)             (p)->SetVertexShaderConstantB(a,b,c)\n #define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c)             (p)->GetVertexShaderConstantB(a,b,c)\n #define IDirect3DDevice9_SetStreamSource(p,a,b,c,d)                    (p)->SetStreamSource(a,b,c,d)\n #define IDirect3DDevice9_GetStreamSource(p,a,b,c,d)                    (p)->GetStreamSource(a,b,c,d)\n #define IDirect3DDevice9_SetStreamSourceFreq(p,a,b)                    (p)->SetStreamSourceFreq(a,b)\n #define IDirect3DDevice9_GetStreamSourceFreq(p,a,b)                    (p)->GetStreamSourceFreq(a,b)\n #define IDirect3DDevice9_SetIndices(p,a)                               (p)->SetIndices(a)\n #define IDirect3DDevice9_GetIndices(p,a)                               (p)->GetIndices(a)\n #define IDirect3DDevice9_CreatePixelShader(p,a,b)                      (p)->CreatePixelShader(a,b)\n #define IDirect3DDevice9_SetPixelShader(p,a)                           (p)->SetPixelShader(a)\n #define IDirect3DDevice9_GetPixelShader(p,a)                           (p)->GetPixelShader(a)\n #define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c)              (p)->SetPixelShaderConstantF(a,b,c)\n #define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c)              (p)->GetPixelShaderConstantF(a,b,c)\n #define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c)              (p)->SetPixelShaderConstantI(a,b,c)\n #define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c)              (p)->GetPixelShaderConstantI(a,b,c)\n #define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c)              (p)->SetPixelShaderConstantB(a,b,c)\n #define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c)              (p)->GetPixelShaderConstantB(a,b,c)\n #define IDirect3DDevice9_DrawRectPatch(p,a,b,c)                        (p)->DrawRectPatch(a,b,c)\n #define IDirect3DDevice9_DrawTriPatch(p,a,b,c)                         (p)->DrawTriPatch(a,b,c)\n #define IDirect3DDevice9_DeletePatch(p,a)                              (p)->DeletePatch(a)\n #define IDirect3DDevice9_CreateQuery(p,a,b)                            (p)->CreateQuery(a,b)\n #endif\n \n \n /*****************************************************************************\n  * IDirect3DDevice9Ex interface\n  */\n #define INTERFACE IDirect3DDevice9Ex\n DECLARE_INTERFACE_(IDirect3DDevice9Ex,IDirect3DDevice9)\n {\n     /*** IUnknown methods ***/\n     STDMETHOD_(HRESULT,QueryInterface)(THIS_ REFIID riid, void** ppvObject) PURE;\n     STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n     STDMETHOD_(ULONG,Release)(THIS) PURE;\n     /*** IDirect3DDevice9 methods ***/\n     STDMETHOD(TestCooperativeLevel)(THIS) PURE;\n     STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;\n     STDMETHOD(EvictManagedResources)(THIS) PURE;\n     STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE;\n     STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE;\n     STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain, D3DDISPLAYMODE* pMode) PURE;\n     STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE;\n     STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot, UINT YHotSpot, IDirect3DSurface9* pCursorBitmap) PURE;\n     STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y, DWORD Flags) PURE;\n     STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE;\n     STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain) PURE;\n     STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) PURE;\n     STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE;\n     STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE;\n     STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion) PURE;\n     STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain, UINT iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer) PURE;\n     STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain, D3DRASTER_STATUS* pRasterStatus) PURE;\n     STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE;\n     STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain, DWORD Flags, CONST D3DGAMMARAMP* pRamp) PURE;\n     STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain, D3DGAMMARAMP* pRamp) PURE;\n     STDMETHOD(CreateTexture)(THIS_ UINT Width, UINT Height, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle) PURE;\n     STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width, UINT Height, UINT Depth, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle) PURE;\n     STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength, UINT Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle) PURE;\n     STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) PURE;\n     STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) PURE;\n     STDMETHOD(CreateRenderTarget)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;\n     STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;\n     STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestinationSurface, CONST POINT* pDestPoint) PURE;\n     STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture) PURE;\n     STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface) PURE;\n     STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain, IDirect3DSurface9* pDestSurface) PURE;\n     STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface, CONST RECT* pSourceRect, IDirect3DSurface9* pDestSurface, CONST RECT* pDestRect, D3DTEXTUREFILTERTYPE Filter) PURE;\n     STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface, CONST RECT* pRect, D3DCOLOR color) PURE;\n     STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle) PURE;\n     STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget) PURE;\n     STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget) PURE;\n     STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE;\n     STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE;\n     STDMETHOD(BeginScene)(THIS) PURE;\n     STDMETHOD(EndScene)(THIS) PURE;\n     STDMETHOD(Clear)(THIS_ DWORD Count, CONST D3DRECT* pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil) PURE;\n     STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX* pMatrix) PURE;\n     STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix) PURE;\n     STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE, CONST D3DMATRIX*) PURE;\n     STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE;\n     STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE;\n     STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE;\n     STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE;\n     STDMETHOD(SetLight)(THIS_ DWORD Index, CONST D3DLIGHT9*) PURE;\n     STDMETHOD(GetLight)(THIS_ DWORD Index, D3DLIGHT9*) PURE;\n     STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE;\n     STDMETHOD(GetLightEnable)(THIS_ DWORD Index, BOOL* pEnable) PURE;\n     STDMETHOD(SetClipPlane)(THIS_ DWORD Index, CONST float* pPlane) PURE;\n     STDMETHOD(GetClipPlane)(THIS_ DWORD Index, float* pPlane) PURE;\n     STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE;\n     STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD* pValue) PURE;\n     STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB) PURE;\n     STDMETHOD(BeginStateBlock)(THIS) PURE;\n     STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE;\n     STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE;\n     STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE;\n     STDMETHOD(GetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9** ppTexture) PURE;\n     STDMETHOD(SetTexture)(THIS_ DWORD Stage, IDirect3DBaseTexture9* pTexture) PURE;\n     STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue) PURE;\n     STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE;\n     STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue) PURE;\n     STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE;\n     STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE;\n     STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber, CONST PALETTEENTRY* pEntries) PURE;\n     STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE;\n     STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE;\n     STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE;\n     STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE;\n     STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE;\n     STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE;\n     STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE;\n     STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE;\n     STDMETHOD_(float, GetNPatchMode)(THIS) PURE;\n     STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT StartVertex, UINT PrimitiveCount) PURE;\n     STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount) PURE;\n     STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT PrimitiveCount, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;\n     STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType, UINT MinVertexIndex, UINT NumVertices, UINT PrimitiveCount, CONST void* pIndexData, D3DFORMAT IndexDataFormat, CONST void* pVertexStreamZeroData, UINT VertexStreamZeroStride) PURE;\n     STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex, UINT DestIndex, UINT VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags) PURE;\n     STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements, IDirect3DVertexDeclaration9** ppDecl) PURE;\n     STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE;\n     STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE;\n     STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE;\n     STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE;\n     STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction, IDirect3DVertexShader9** ppShader) PURE;\n     STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE;\n     STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE;\n     STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;\n     STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;\n     STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;\n     STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;\n     STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT  BoolCount) PURE;\n     STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;\n     STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9* pStreamData, UINT OffsetInBytes, UINT Stride) PURE;\n     STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber, IDirect3DVertexBuffer9** ppStreamData, UINT* OffsetInBytes, UINT* pStride) PURE;\n     STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT Divider) PURE;\n     STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber, UINT* Divider) PURE;\n     STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE;\n     STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE;\n     STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction, IDirect3DPixelShader9** ppShader) PURE;\n     STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE;\n     STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE;\n     STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister, CONST float* pConstantData, UINT Vector4fCount) PURE;\n     STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister, float* pConstantData, UINT Vector4fCount) PURE;\n     STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister, CONST int* pConstantData, UINT Vector4iCount) PURE;\n     STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister, int* pConstantData, UINT Vector4iCount) PURE;\n     STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister, CONST BOOL* pConstantData, UINT  BoolCount) PURE;\n     STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister, BOOL* pConstantData, UINT BoolCount) PURE;\n     STDMETHOD(DrawRectPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE;\n     STDMETHOD(DrawTriPatch)(THIS_ UINT Handle, CONST float* pNumSegs, CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE;\n     STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;\n     STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) PURE;\n     /* IDirect3DDevice9Ex methods */\n     STDMETHOD(SetConvolutionMonoKernel)(THIS_ UINT width, UINT height, float *rows, float *columns) PURE;\n     STDMETHOD(ComposeRects)(THIS_ IDirect3DSurface9 *src_surface, IDirect3DSurface9 *dst_surface,\n             IDirect3DVertexBuffer9 *src_descs, UINT rect_count, IDirect3DVertexBuffer9 *dst_descs,\n             D3DCOMPOSERECTSOP operation, INT offset_x, INT offset_y) PURE;\n     STDMETHOD(PresentEx)(THIS_ CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion, DWORD dwFlags) PURE;\n     STDMETHOD(GetGPUThreadPriority)(THIS_ INT *pPriority) PURE;\n     STDMETHOD(SetGPUThreadPriority)(THIS_ INT Priority) PURE;\n     STDMETHOD(WaitForVBlank)(THIS_ UINT iSwapChain) PURE;\n     STDMETHOD(CheckResourceResidency)(THIS_ IDirect3DResource9 **resources, UINT32 resource_count) PURE;\n     STDMETHOD(SetMaximumFrameLatency)(THIS_ UINT MaxLatency) PURE;\n     STDMETHOD(GetMaximumFrameLatency)(THIS_ UINT *pMaxLatenxy) PURE;\n     STDMETHOD(CheckDeviceState)(THIS_ HWND dst_window) PURE;\n     STDMETHOD(CreateRenderTargetEx)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultiSampleQuality, BOOL Lockable, IDirect3DSurface9 ** ppSurface, HANDLE *pSharedHandle, DWORD Usage) PURE;\n     STDMETHOD(CreateOffscreenPlainSurfaceEx)(THIS_ UINT Width, UINT Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9 **ppSurface, HANDLE *pSharedHandle, DWORD Usage) PURE;\n     STDMETHOD(CreateDepthStencilSurfaceEx)(THIS_ UINT width, UINT height, D3DFORMAT format,\n             D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality, BOOL discard,\n             IDirect3DSurface9 **surface, HANDLE *shared_handle, DWORD usage) PURE;\n     STDMETHOD(ResetEx)(THIS_ D3DPRESENT_PARAMETERS *pPresentationParameters, D3DDISPLAYMODEEX *pFullscreenDisplayMode) PURE;\n     STDMETHOD(GetDisplayModeEx)(THIS_ UINT iSwapChain, D3DDISPLAYMODEEX *pMode, D3DDISPLAYROTATION *pRotation) PURE;\n };\n #undef INTERFACE\n \n #if !defined(__cplusplus) || defined(CINTERFACE)\n /*** IUnknown methods ***/\n #define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n #define IDirect3DDevice9Ex_AddRef(p)             (p)->lpVtbl->AddRef(p)\n #define IDirect3DDevice9Ex_Release(p)            (p)->lpVtbl->Release(p)\n /*** IDirect3DDevice9 methods ***/\n #define IDirect3DDevice9Ex_TestCooperativeLevel(p)                       (p)->lpVtbl->TestCooperativeLevel(p)\n #define IDirect3DDevice9Ex_GetAvailableTextureMem(p)                     (p)->lpVtbl->GetAvailableTextureMem(p)\n #define IDirect3DDevice9Ex_EvictManagedResources(p)                      (p)->lpVtbl->EvictManagedResources(p)\n #define IDirect3DDevice9Ex_GetDirect3D(p,a)                              (p)->lpVtbl->GetDirect3D(p,a)\n #define IDirect3DDevice9Ex_GetDeviceCaps(p,a)                            (p)->lpVtbl->GetDeviceCaps(p,a)\n #define IDirect3DDevice9Ex_GetDisplayMode(p,a,b)                         (p)->lpVtbl->GetDisplayMode(p,a,b)\n #define IDirect3DDevice9Ex_GetCreationParameters(p,a)                    (p)->lpVtbl->GetCreationParameters(p,a)\n #define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c)                  (p)->lpVtbl->SetCursorProperties(p,a,b,c)\n #define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c)                    (p)->lpVtbl->SetCursorPosition(p,a,b,c)\n #define IDirect3DDevice9Ex_ShowCursor(p,a)                               (p)->lpVtbl->ShowCursor(p,a)\n #define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b)              (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b)\n #define IDirect3DDevice9Ex_GetSwapChain(p,a,b)                           (p)->lpVtbl->GetSwapChain(p,a,b)\n #define IDirect3DDevice9Ex_GetNumberOfSwapChains(p)                      (p)->lpVtbl->GetNumberOfSwapChains(p)\n #define IDirect3DDevice9Ex_Reset(p,a)                                    (p)->lpVtbl->Reset(p,a)\n #define IDirect3DDevice9Ex_Present(p,a,b,c,d)                            (p)->lpVtbl->Present(p,a,b,c,d)\n #define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d)                      (p)->lpVtbl->GetBackBuffer(p,a,b,c,d)\n #define IDirect3DDevice9Ex_GetRasterStatus(p,a,b)                        (p)->lpVtbl->GetRasterStatus(p,a,b)\n #define IDirect3DDevice9Ex_SetDialogBoxMode(p,a)                         (p)->lpVtbl->SetDialogBoxMode(p,a)\n #define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c)                         (p)->lpVtbl->SetGammaRamp(p,a,b,c)\n #define IDirect3DDevice9Ex_GetGammaRamp(p,a,b)                           (p)->lpVtbl->GetGammaRamp(p,a,b)\n #define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)\n #define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g)\n #define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f)\n #define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f)\n #define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d)                      (p)->lpVtbl->UpdateSurface(p,a,b,c,d)\n #define IDirect3DDevice9Ex_UpdateTexture(p,a,b)                          (p)->lpVtbl->UpdateTexture(p,a,b)\n #define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b)                    (p)->lpVtbl->GetRenderTargetData(p,a,b)\n #define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b)                     (p)->lpVtbl->GetFrontBufferData(p,a,b)\n #define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e)                      (p)->lpVtbl->StretchRect(p,a,b,c,d,e)\n #define IDirect3DDevice9Ex_ColorFill(p,a,b,c)                            (p)->lpVtbl->ColorFill(p,a,b,c)\n #define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f)\n #define IDirect3DDevice9Ex_SetRenderTarget(p,a,b)                        (p)->lpVtbl->SetRenderTarget(p,a,b)\n #define IDirect3DDevice9Ex_GetRenderTarget(p,a,b)                        (p)->lpVtbl->GetRenderTarget(p,a,b)\n #define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a)                   (p)->lpVtbl->SetDepthStencilSurface(p,a)\n #define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a)                   (p)->lpVtbl->GetDepthStencilSurface(p,a)\n #define IDirect3DDevice9Ex_BeginScene(p)                                 (p)->lpVtbl->BeginScene(p)\n #define IDirect3DDevice9Ex_EndScene(p)                                   (p)->lpVtbl->EndScene(p)\n #define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f)                          (p)->lpVtbl->Clear(p,a,b,c,d,e,f)\n #define IDirect3DDevice9Ex_SetTransform(p,a,b)                           (p)->lpVtbl->SetTransform(p,a,b)\n #define IDirect3DDevice9Ex_GetTransform(p,a,b)                           (p)->lpVtbl->GetTransform(p,a,b)\n #define IDirect3DDevice9Ex_MultiplyTransform(p,a,b)                      (p)->lpVtbl->MultiplyTransform(p,a,b)\n #define IDirect3DDevice9Ex_SetViewport(p,a)                              (p)->lpVtbl->SetViewport(p,a)\n #define IDirect3DDevice9Ex_GetViewport(p,a)                              (p)->lpVtbl->GetViewport(p,a)\n #define IDirect3DDevice9Ex_SetMaterial(p,a)                              (p)->lpVtbl->SetMaterial(p,a)\n #define IDirect3DDevice9Ex_GetMaterial(p,a)                              (p)->lpVtbl->GetMaterial(p,a)\n #define IDirect3DDevice9Ex_SetLight(p,a,b)                               (p)->lpVtbl->SetLight(p,a,b)\n #define IDirect3DDevice9Ex_GetLight(p,a,b)                               (p)->lpVtbl->GetLight(p,a,b)\n #define IDirect3DDevice9Ex_LightEnable(p,a,b)                            (p)->lpVtbl->LightEnable(p,a,b)\n #define IDirect3DDevice9Ex_GetLightEnable(p,a,b)                         (p)->lpVtbl->GetLightEnable(p,a,b)\n #define IDirect3DDevice9Ex_SetClipPlane(p,a,b)                           (p)->lpVtbl->SetClipPlane(p,a,b)\n #define IDirect3DDevice9Ex_GetClipPlane(p,a,b)                           (p)->lpVtbl->GetClipPlane(p,a,b)\n #define IDirect3DDevice9Ex_SetRenderState(p,a,b)                         (p)->lpVtbl->SetRenderState(p,a,b)\n #define IDirect3DDevice9Ex_GetRenderState(p,a,b)                         (p)->lpVtbl->GetRenderState(p,a,b)\n #define IDirect3DDevice9Ex_CreateStateBlock(p,a,b)                       (p)->lpVtbl->CreateStateBlock(p,a,b)\n #define IDirect3DDevice9Ex_BeginStateBlock(p)                            (p)->lpVtbl->BeginStateBlock(p)\n #define IDirect3DDevice9Ex_EndStateBlock(p,a)                            (p)->lpVtbl->EndStateBlock(p,a)\n #define IDirect3DDevice9Ex_SetClipStatus(p,a)                            (p)->lpVtbl->SetClipStatus(p,a)\n #define IDirect3DDevice9Ex_GetClipStatus(p,a)                            (p)->lpVtbl->GetClipStatus(p,a)\n #define IDirect3DDevice9Ex_GetTexture(p,a,b)                             (p)->lpVtbl->GetTexture(p,a,b)\n #define IDirect3DDevice9Ex_SetTexture(p,a,b)                             (p)->lpVtbl->SetTexture(p,a,b)\n #define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c)                 (p)->lpVtbl->GetTextureStageState(p,a,b,c)\n #define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c)                 (p)->lpVtbl->SetTextureStageState(p,a,b,c)\n #define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c)                      (p)->lpVtbl->GetSamplerState(p,a,b,c)\n #define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c)                      (p)->lpVtbl->SetSamplerState(p,a,b,c)\n #define IDirect3DDevice9Ex_ValidateDevice(p,a)                           (p)->lpVtbl->ValidateDevice(p,a)\n #define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b)                      (p)->lpVtbl->SetPaletteEntries(p,a,b)\n #define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b)                      (p)->lpVtbl->GetPaletteEntries(p,a,b)\n #define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a)                 (p)->lpVtbl->SetCurrentTexturePalette(p,a)\n #define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a)                 (p)->lpVtbl->GetCurrentTexturePalette(p,a)\n #define IDirect3DDevice9Ex_SetScissorRect(p,a)                           (p)->lpVtbl->SetScissorRect(p,a)\n #define IDirect3DDevice9Ex_GetScissorRect(p,a)                           (p)->lpVtbl->GetScissorRect(p,a)\n #define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a)              (p)->lpVtbl->SetSoftwareVertexProcessing(p,a)\n #define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p)                (p)->lpVtbl->GetSoftwareVertexProcessing(p)\n #define IDirect3DDevice9Ex_SetNPatchMode(p,a)                            (p)->lpVtbl->SetNPatchMode(p,a)\n #define IDirect3DDevice9Ex_GetNPatchMode(p)                              (p)->lpVtbl->GetNPatchMode(p)\n #define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c)                        (p)->lpVtbl->DrawPrimitive(p,a,b,c)\n #define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)\n #define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d)                    (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)\n #define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f)                (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f)\n #define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b)                (p)->lpVtbl->CreateVertexDeclaration(p,a,b)\n #define IDirect3DDevice9Ex_SetVertexDeclaration(p,a)                     (p)->lpVtbl->SetVertexDeclaration(p,a)\n #define IDirect3DDevice9Ex_GetVertexDeclaration(p,a)                     (p)->lpVtbl->GetVertexDeclaration(p,a)\n #define IDirect3DDevice9Ex_SetFVF(p,a)                                   (p)->lpVtbl->SetFVF(p,a)\n #define IDirect3DDevice9Ex_GetFVF(p,a)                                   (p)->lpVtbl->GetFVF(p,a)\n #define IDirect3DDevice9Ex_CreateVertexShader(p,a,b)                     (p)->lpVtbl->CreateVertexShader(p,a,b)\n #define IDirect3DDevice9Ex_SetVertexShader(p,a)                          (p)->lpVtbl->SetVertexShader(p,a)\n #define IDirect3DDevice9Ex_GetVertexShader(p,a)                          (p)->lpVtbl->GetVertexShader(p,a)\n #define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c)\n #define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c)\n #define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c)\n #define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c)\n #define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c)\n #define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c)             (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c)\n #define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->SetStreamSource(p,a,b,c,d)\n #define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d)                    (p)->lpVtbl->GetStreamSource(p,a,b,c,d)\n #define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->SetStreamSourceFreq(p,a,b)\n #define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b)                    (p)->lpVtbl->GetStreamSourceFreq(p,a,b)\n #define IDirect3DDevice9Ex_SetIndices(p,a)                               (p)->lpVtbl->SetIndices(p,a)\n #define IDirect3DDevice9Ex_GetIndices(p,a)                               (p)->lpVtbl->GetIndices(p,a)\n #define IDirect3DDevice9Ex_CreatePixelShader(p,a,b)                      (p)->lpVtbl->CreatePixelShader(p,a,b)\n #define IDirect3DDevice9Ex_SetPixelShader(p,a)                           (p)->lpVtbl->SetPixelShader(p,a)\n #define IDirect3DDevice9Ex_GetPixelShader(p,a)                           (p)->lpVtbl->GetPixelShader(p,a)\n #define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c)\n #define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c)\n #define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c)\n #define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c)\n #define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c)\n #define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c)              (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c)\n #define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c)                        (p)->lpVtbl->DrawRectPatch(p,a,b,c)\n #define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c)                         (p)->lpVtbl->DrawTriPatch(p,a,b,c)\n #define IDirect3DDevice9Ex_DeletePatch(p,a)                              (p)->lpVtbl->DeletePatch(p,a)\n #define IDirect3DDevice9Ex_CreateQuery(p,a,b)                            (p)->lpVtbl->CreateQuery(p,a,b)\n /* IDirect3DDevice9Ex */\n #define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d)           (p)->lpVtbl->SetConvolutionMonoKernel(p,a,b,c,d)\n #define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h)               (p)->lpVtbl->ComposeRects(p,a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e)                        (p)->lpVtbl->PresentEx(p,a,b,c,d,e)\n #define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a)                     (p)->lpVtbl->GetGPUThreadPriority(p,a)\n #define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a)                     (p)->lpVtbl->SetGPUThreadPriority(p,a)\n #define IDirect3DDevice9Ex_WaitForVBlank(p,a)                            (p)->lpVtbl->WaitForVBlank(p,a)\n #define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b)                 (p)->lpVtbl->CheckResourceResidency(p,a,b)\n #define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a)                   (p)->lpVtbl->SetMaximumFrameLatency(p,a)\n #define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a)                   (p)->lpVtbl->GetMaximumFrameLatency(p,a)\n #define IDirect3DDevice9Ex_CheckDeviceState(p,a)                         (p)->lpVtbl->CheckDeviceState(p,a)\n #define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)     (p)->lpVtbl->CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)\n #define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)(p)->lpVtbl->CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)\n #define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)(p)->lpVtbl->CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)\n #define IDirect3DDevice9Ex_ResetEx(p,a,b)                                 (p)->lpVtbl->ResetEx(p,a,b)\n #define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c)                     (p)->lpVtbl->GetDisplayModeEx(p,a,b,c)\n #else\n /*** IUnknown methods ***/\n #define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n #define IDirect3DDevice9Ex_AddRef(p)             (p)->AddRef()\n #define IDirect3DDevice9Ex_Release(p)            (p)->Release()\n /*** IDirect3DDevice9 methods ***/\n #define IDirect3DDevice9Ex_TestCooperativeLevel(p)                       (p)->TestCooperativeLevel()\n #define IDirect3DDevice9Ex_GetAvailableTextureMem(p)                     (p)->GetAvailableTextureMem()\n #define IDirect3DDevice9Ex_EvictManagedResources(p)                      (p)->EvictManagedResources()\n #define IDirect3DDevice9Ex_GetDirect3D(p,a)                              (p)->GetDirect3D(a)\n #define IDirect3DDevice9Ex_GetDeviceCaps(p,a)                            (p)->GetDeviceCaps(a)\n #define IDirect3DDevice9Ex_GetDisplayMode(p,a,b)                         (p)->GetDisplayMode(a,b)\n #define IDirect3DDevice9Ex_GetCreationParameters(p,a)                    (p)->GetCreationParameters(a)\n #define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c)                  (p)->SetCursorProperties(a,b,c)\n #define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c)                    (p)->SetCursorPosition(a,b,c)\n #define IDirect3DDevice9Ex_ShowCursor(p,a)                               (p)->ShowCursor(a)\n #define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b)              (p)->CreateAdditionalSwapChain(a,b)\n #define IDirect3DDevice9Ex_GetSwapChain(p,a,b)                           (p)->GetSwapChain(a,b)\n #define IDirect3DDevice9Ex_GetNumberOfSwapChains(p)                      (p)->GetNumberOfSwapChains()\n #define IDirect3DDevice9Ex_Reset(p,a)                                    (p)->Reset(a)\n #define IDirect3DDevice9Ex_Present(p,a,b,c,d)                            (p)->Present(a,b,c,d)\n #define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d)                      (p)->GetBackBuffer(a,b,c,d)\n #define IDirect3DDevice9Ex_GetRasterStatus(p,a,b)                        (p)->GetRasterStatus(a,b)\n #define IDirect3DDevice9Ex_SetDialogBoxMode(p,a)                         (p)->SetDialogBoxMode(a)\n #define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c)                         (p)->SetGammaRamp(a,b,c)\n #define IDirect3DDevice9Ex_GetGammaRamp(p,a,b)                           (p)->GetGammaRamp(a,b)\n #define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h)              (p)->CreateTexture(a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i)      (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i)\n #define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g)            (p)->CreateCubeTexture(a,b,c,d,e,f,g)\n #define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f)             (p)->CreateVertexBuffer(a,b,c,d,e,f)\n #define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f)              (p)->CreateIndexBuffer(a,b,c,d,e,f)\n #define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h)         (p)->CreateRenderTarget(a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h)  (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d)                      (p)->UpdateSurface(a,b,c,d)\n #define IDirect3DDevice9Ex_UpdateTexture(p,a,b)                          (p)->UpdateTexture(a,b)\n #define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b)                    (p)->GetRenderTargetData(a,b)\n #define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b)                     (p)->GetFrontBufferData(a,b)\n #define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e)                      (p)->StretchRect(a,b,c,d,e)\n #define IDirect3DDevice9Ex_ColorFill(p,a,b,c)                            (p)->ColorFill(a,b,c)\n #define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f)    (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f)\n #define IDirect3DDevice9Ex_SetRenderTarget(p,a,b)                        (p)->SetRenderTarget(a,b)\n #define IDirect3DDevice9Ex_GetRenderTarget(p,a,b)                        (p)->GetRenderTarget(a,b)\n #define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a)                   (p)->SetDepthStencilSurface(a)\n #define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a)                   (p)->GetDepthStencilSurface(a)\n #define IDirect3DDevice9Ex_BeginScene(p)                                 (p)->BeginScene()\n #define IDirect3DDevice9Ex_EndScene(p)                                   (p)->EndScene()\n #define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f)                          (p)->Clear(a,b,c,d,e,f)\n #define IDirect3DDevice9Ex_SetTransform(p,a,b)                           (p)->SetTransform(a,b)\n #define IDirect3DDevice9Ex_GetTransform(p,a,b)                           (p)->GetTransform(a,b)\n #define IDirect3DDevice9Ex_MultiplyTransform(p,a,b)                      (p)->MultiplyTransform(a,b)\n #define IDirect3DDevice9Ex_SetViewport(p,a)                              (p)->SetViewport(a)\n #define IDirect3DDevice9Ex_GetViewport(p,a)                              (p)->GetViewport(a)\n #define IDirect3DDevice9Ex_SetMaterial(p,a)                              (p)->SetMaterial(a)\n #define IDirect3DDevice9Ex_GetMaterial(p,a)                              (p)->GetMaterial(a)\n #define IDirect3DDevice9Ex_SetLight(p,a,b)                               (p)->SetLight(a,b)\n #define IDirect3DDevice9Ex_GetLight(p,a,b)                               (p)->GetLight(a,b)\n #define IDirect3DDevice9Ex_LightEnable(p,a,b)                            (p)->LightEnable(a,b)\n #define IDirect3DDevice9Ex_GetLightEnable(p,a,b)                         (p)->GetLightEnable(a,b)\n #define IDirect3DDevice9Ex_SetClipPlane(p,a,b)                           (p)->SetClipPlane(a,b)\n #define IDirect3DDevice9Ex_GetClipPlane(p,a,b)                           (p)->GetClipPlane(a,b)\n #define IDirect3DDevice9Ex_SetRenderState(p,a,b)                         (p)->SetRenderState(a,b)\n #define IDirect3DDevice9Ex_GetRenderState(p,a,b)                         (p)->GetRenderState(a,b)\n #define IDirect3DDevice9Ex_CreateStateBlock(p,a,b)                       (p)->CreateStateBlock(a,b)\n #define IDirect3DDevice9Ex_BeginStateBlock(p)                            (p)->BeginStateBlock()\n #define IDirect3DDevice9Ex_EndStateBlock(p,a)                            (p)->EndStateBlock(a)\n #define IDirect3DDevice9Ex_SetClipStatus(p,a)                            (p)->SetClipStatus(a)\n #define IDirect3DDevice9Ex_GetClipStatus(p,a)                            (p)->GetClipStatus(a)\n #define IDirect3DDevice9Ex_GetTexture(p,a,b)                             (p)->GetTexture(a,b)\n #define IDirect3DDevice9Ex_SetTexture(p,a,b)                             (p)->SetTexture(a,b)\n #define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c)                 (p)->GetTextureStageState(a,b,c)\n #define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c)                 (p)->SetTextureStageState(a,b,c)\n #define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c)                      (p)->GetSamplerState(a,b,c)\n #define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c)                      (p)->SetSamplerState(a,b,c)\n #define IDirect3DDevice9Ex_ValidateDevice(p,a)                           (p)->ValidateDevice(a)\n #define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b)                      (p)->SetPaletteEntries(a,b)\n #define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b)                      (p)->GetPaletteEntries(a,b)\n #define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a)                 (p)->SetCurrentTexturePalette(a)\n #define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a)                 (p)->GetCurrentTexturePalette(a)\n #define IDirect3DDevice9Ex_SetScissorRect(p,a)                           (p)->SetScissorRect(a)\n #define IDirect3DDevice9Ex_GetScissorRect(p,a)                           (p)->GetScissorRect(a)\n #define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a)              (p)->SetSoftwareVertexProcessing(a)\n #define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p)                (p)->GetSoftwareVertexProcessing()\n #define IDirect3DDevice9Ex_SetNPatchMode(p,a)                            (p)->SetNPatchMode(a)\n #define IDirect3DDevice9Ex_GetNPatchMode(p)                              (p)->GetNPatchMode()\n #define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c)                        (p)->DrawPrimitive(a,b,c)\n #define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f)           (p)->DrawIndexedPrimitive(a,b,c,d,e,f)\n #define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d)                    (p)->DrawPrimitiveUP(a,b,c,d)\n #define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)     (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f)                (p)->ProcessVertices(a,b,c,d,e,f)\n #define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b)                (p)->CreateVertexDeclaration(a,b)\n #define IDirect3DDevice9Ex_SetVertexDeclaration(p,a)                     (p)->SetVertexDeclaration(a)\n #define IDirect3DDevice9Ex_GetVertexDeclaration(p,a)                     (p)->GetVertexDeclaration(a)\n #define IDirect3DDevice9Ex_SetFVF(p,a)                                   (p)->SetFVF(a)\n #define IDirect3DDevice9Ex_GetFVF(p,a)                                   (p)->GetFVF(a)\n #define IDirect3DDevice9Ex_CreateVertexShader(p,a,b)                     (p)->CreateVertexShader(a,b)\n #define IDirect3DDevice9Ex_SetVertexShader(p,a)                          (p)->SetVertexShader(a)\n #define IDirect3DDevice9Ex_GetVertexShader(p,a)                          (p)->GetVertexShader(a)\n #define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c)             (p)->SetVertexShaderConstantF(a,b,c)\n #define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c)             (p)->GetVertexShaderConstantF(a,b,c)\n #define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c)             (p)->SetVertexShaderConstantI(a,b,c)\n #define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c)             (p)->GetVertexShaderConstantI(a,b,c)\n #define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c)             (p)->SetVertexShaderConstantB(a,b,c)\n #define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c)             (p)->GetVertexShaderConstantB(a,b,c)\n #define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d)                    (p)->SetStreamSource(a,b,c,d)\n #define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d)                    (p)->GetStreamSource(a,b,c,d)\n #define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b)                    (p)->SetStreamSourceFreq(a,b)\n #define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b)                    (p)->GetStreamSourceFreq(a,b)\n #define IDirect3DDevice9Ex_SetIndices(p,a)                               (p)->SetIndices(a)\n #define IDirect3DDevice9Ex_GetIndices(p,a)                               (p)->GetIndices(a)\n #define IDirect3DDevice9Ex_CreatePixelShader(p,a,b)                      (p)->CreatePixelShader(a,b)\n #define IDirect3DDevice9Ex_SetPixelShader(p,a)                           (p)->SetPixelShader(a)\n #define IDirect3DDevice9Ex_GetPixelShader(p,a)                           (p)->GetPixelShader(a)\n #define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c)              (p)->SetPixelShaderConstantF(a,b,c)\n #define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c)              (p)->GetPixelShaderConstantF(a,b,c)\n #define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c)              (p)->SetPixelShaderConstantI(a,b,c)\n #define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c)              (p)->GetPixelShaderConstantI(a,b,c)\n #define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c)              (p)->SetPixelShaderConstantB(a,b,c)\n #define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c)              (p)->GetPixelShaderConstantB(a,b,c)\n #define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c)                        (p)->DrawRectPatch(a,b,c)\n #define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c)                         (p)->DrawTriPatch(a,b,c)\n #define IDirect3DDevice9Ex_DeletePatch(p,a)                              (p)->DeletePatch(a)\n #define IDirect3DDevice9Ex_CreateQuery(p,a,b)                            (p)->CreateQuery(a,b)\n /* IDirect3DDevice9Ex */\n #define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d)           (p)->SetConvolutionMonoKernel(a,b,c,d)\n #define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h)               (p)->ComposeRects(a,b,c,d,e,f,g,h)\n #define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e)                        (p)->PresentEx(a,b,c,d,e)\n #define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a)                     (p)->GetGPUThreadPriority(a)\n #define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a)                     (p)->SetGPUThreadPriority(a)\n #define IDirect3DDevice9Ex_WaitForVBlank(p,a)                            (p)->WaitForVBlank(a)\n #define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b)                 (p)->CheckResourceResidency(a,b)\n #define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a)                   (p)->SetMaximumFrameLatency(a)\n #define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a)                   (p)->GetMaximumFrameLatency(a)\n #define IDirect3DDevice9Ex_CheckDeviceState(p,a)                         (p)->CheckDeviceState(a)\n #define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i)     (p)->CreateRenderTargetEx(a,b,c,d,e,f,g,h,i)\n #define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g)(p)->CreateOffscreenPlainSurfaceEx(a,b,c,d,e,f,g)\n #define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i)(p)->CreateDepthStencilSurfaceEx(a,b,c,d,e,f,g,h,i)\n #define IDirect3DDevice9Ex_ResetEx(p,a,b)                                (p)->ResetEx(a,b)\n #define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c)                     (p)->GetDisplayModeEx(a,b,c)\n #endif\n \n #ifdef __cplusplus\n extern \"C\" {\n #endif  /* defined(__cplusplus) */\n \n int         WINAPI D3DPERF_BeginEvent(D3DCOLOR,LPCWSTR);\n int         WINAPI D3DPERF_EndEvent(void);\n DWORD       WINAPI D3DPERF_GetStatus(void);\n BOOL        WINAPI D3DPERF_QueryRepeatFrame(void);\n void        WINAPI D3DPERF_SetMarker(D3DCOLOR,LPCWSTR);\n void        WINAPI D3DPERF_SetOptions(DWORD);\n void        WINAPI D3DPERF_SetRegion(D3DCOLOR,LPCWSTR);\n \n /* Define the main entrypoint as well */\n IDirect3D9* WINAPI Direct3DCreate9(UINT SDKVersion);\n \n #ifdef __cplusplus\n } /* extern \"C\" */\n #endif /* defined(__cplusplus) */\n \n \n #endif /* __WINE_D3D9_H */\n"
  },
  {
    "path": "Include/d3d9caps.h",
    "content": "/*==========================================================================;\n *\n *  Copyright (C) Microsoft Corporation.  All Rights Reserved.\n *\n *  File:       d3d9caps.h\n *  Content:    Direct3D capabilities include file\n *\n ***************************************************************************/\n\n#ifndef _d3d9CAPS_H\n#define _d3d9CAPS_H\n\n#ifndef DIRECT3D_VERSION\n#define DIRECT3D_VERSION         0x0900\n#endif  //DIRECT3D_VERSION\n\n// include this file content only if compiling for DX9 interfaces\n#if(DIRECT3D_VERSION >= 0x0900)\n\n#if defined(_X86_) || defined(_IA64_)\n#pragma pack(4)\n#endif\n\ntypedef struct _D3DVSHADERCAPS2_0\n{\n        DWORD Caps;\n        INT DynamicFlowControlDepth;\n        INT NumTemps;\n        INT StaticFlowControlDepth;\n} D3DVSHADERCAPS2_0;\n\n#define D3DVS20CAPS_PREDICATION             (1<<0)\n\n#define D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH  24\n#define D3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH  0\n#define D3DVS20_MAX_NUMTEMPS    32\n#define D3DVS20_MIN_NUMTEMPS    12\n#define D3DVS20_MAX_STATICFLOWCONTROLDEPTH    4\n#define D3DVS20_MIN_STATICFLOWCONTROLDEPTH    1\n\ntypedef struct _D3DPSHADERCAPS2_0\n{\n    DWORD Caps;\n    INT DynamicFlowControlDepth;\n    INT NumTemps;\n    INT StaticFlowControlDepth;\n    INT NumInstructionSlots;\n} D3DPSHADERCAPS2_0;\n\n#define D3DPS20CAPS_ARBITRARYSWIZZLE        (1<<0)\n#define D3DPS20CAPS_GRADIENTINSTRUCTIONS    (1<<1)\n#define D3DPS20CAPS_PREDICATION             (1<<2)\n#define D3DPS20CAPS_NODEPENDENTREADLIMIT    (1<<3)\n#define D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT   (1<<4)\n\n#define D3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH    24\n#define D3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH    0\n#define D3DPS20_MAX_NUMTEMPS    32\n#define D3DPS20_MIN_NUMTEMPS    12\n#define D3DPS20_MAX_STATICFLOWCONTROLDEPTH    4\n#define D3DPS20_MIN_STATICFLOWCONTROLDEPTH    0\n#define D3DPS20_MAX_NUMINSTRUCTIONSLOTS    512\n#define D3DPS20_MIN_NUMINSTRUCTIONSLOTS    96\n\n#define D3DMIN30SHADERINSTRUCTIONS 512\n#define D3DMAX30SHADERINSTRUCTIONS 32768\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\ntypedef struct _D3DOVERLAYCAPS\n{\n    UINT   Caps;\n    UINT   MaxOverlayDisplayWidth;\n    UINT   MaxOverlayDisplayHeight;\n} D3DOVERLAYCAPS;\n\n#define D3DOVERLAYCAPS_FULLRANGERGB          0x00000001\n#define D3DOVERLAYCAPS_LIMITEDRANGERGB       0x00000002\n#define D3DOVERLAYCAPS_YCbCr_BT601           0x00000004\n#define D3DOVERLAYCAPS_YCbCr_BT709           0x00000008\n#define D3DOVERLAYCAPS_YCbCr_BT601_xvYCC     0x00000010\n#define D3DOVERLAYCAPS_YCbCr_BT709_xvYCC     0x00000020\n#define D3DOVERLAYCAPS_STRETCHX              0x00000040\n#define D3DOVERLAYCAPS_STRETCHY              0x00000080\n\n\ntypedef struct _D3DCONTENTPROTECTIONCAPS\n{\n    DWORD     Caps;\n    GUID      KeyExchangeType;\n    UINT      BufferAlignmentStart;\n    UINT      BlockAlignmentSize;\n    ULONGLONG ProtectedMemorySize;\n} D3DCONTENTPROTECTIONCAPS;\n\n#define D3DCPCAPS_SOFTWARE              0x00000001\n#define D3DCPCAPS_HARDWARE              0x00000002\n#define D3DCPCAPS_PROTECTIONALWAYSON    0x00000004\n#define D3DCPCAPS_PARTIALDECRYPTION     0x00000008\n#define D3DCPCAPS_CONTENTKEY            0x00000010\n#define D3DCPCAPS_FRESHENSESSIONKEY     0x00000020\n#define D3DCPCAPS_ENCRYPTEDREADBACK     0x00000040\n#define D3DCPCAPS_ENCRYPTEDREADBACKKEY  0x00000080\n#define D3DCPCAPS_SEQUENTIAL_CTR_IV     0x00000100\n#define D3DCPCAPS_ENCRYPTSLICEDATAONLY  0x00000200\n\nDEFINE_GUID(D3DCRYPTOTYPE_AES128_CTR, \n0x9b6bd711, 0x4f74, 0x41c9, 0x9e, 0x7b, 0xb, 0xe2, 0xd7, 0xd9, 0x3b, 0x4f);\nDEFINE_GUID(D3DCRYPTOTYPE_PROPRIETARY, \n0xab4e9afd, 0x1d1c, 0x46e6, 0xa7, 0x2f, 0x8, 0x69, 0x91, 0x7b, 0xd, 0xe8);\n\nDEFINE_GUID(D3DKEYEXCHANGE_RSAES_OAEP, \n0xc1949895, 0xd72a, 0x4a1d, 0x8e, 0x5d, 0xed, 0x85, 0x7d, 0x17, 0x15, 0x20);\nDEFINE_GUID(D3DKEYEXCHANGE_DXVA, \n0x43d3775c, 0x38e5, 0x4924, 0x8d, 0x86, 0xd3, 0xfc, 0xcf, 0x15, 0x3e, 0x9b);\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\ntypedef struct _D3DCAPS9\n{\n    /* Device Info */\n    D3DDEVTYPE  DeviceType;\n    UINT        AdapterOrdinal;\n\n    /* Caps from DX7 Draw */\n    DWORD   Caps;\n    DWORD   Caps2;\n    DWORD   Caps3;\n    DWORD   PresentationIntervals;\n\n    /* Cursor Caps */\n    DWORD   CursorCaps;\n\n    /* 3D Device Caps */\n    DWORD   DevCaps;\n\n    DWORD   PrimitiveMiscCaps;\n    DWORD   RasterCaps;\n    DWORD   ZCmpCaps;\n    DWORD   SrcBlendCaps;\n    DWORD   DestBlendCaps;\n    DWORD   AlphaCmpCaps;\n    DWORD   ShadeCaps;\n    DWORD   TextureCaps;\n    DWORD   TextureFilterCaps;          // D3DPTFILTERCAPS for IDirect3DTexture9's\n    DWORD   CubeTextureFilterCaps;      // D3DPTFILTERCAPS for IDirect3DCubeTexture9's\n    DWORD   VolumeTextureFilterCaps;    // D3DPTFILTERCAPS for IDirect3DVolumeTexture9's\n    DWORD   TextureAddressCaps;         // D3DPTADDRESSCAPS for IDirect3DTexture9's\n    DWORD   VolumeTextureAddressCaps;   // D3DPTADDRESSCAPS for IDirect3DVolumeTexture9's\n\n    DWORD   LineCaps;                   // D3DLINECAPS\n\n    DWORD   MaxTextureWidth, MaxTextureHeight;\n    DWORD   MaxVolumeExtent;\n\n    DWORD   MaxTextureRepeat;\n    DWORD   MaxTextureAspectRatio;\n    DWORD   MaxAnisotropy;\n    float   MaxVertexW;\n\n    float   GuardBandLeft;\n    float   GuardBandTop;\n    float   GuardBandRight;\n    float   GuardBandBottom;\n\n    float   ExtentsAdjust;\n    DWORD   StencilCaps;\n\n    DWORD   FVFCaps;\n    DWORD   TextureOpCaps;\n    DWORD   MaxTextureBlendStages;\n    DWORD   MaxSimultaneousTextures;\n\n    DWORD   VertexProcessingCaps;\n    DWORD   MaxActiveLights;\n    DWORD   MaxUserClipPlanes;\n    DWORD   MaxVertexBlendMatrices;\n    DWORD   MaxVertexBlendMatrixIndex;\n\n    float   MaxPointSize;\n\n    DWORD   MaxPrimitiveCount;          // max number of primitives per DrawPrimitive call\n    DWORD   MaxVertexIndex;\n    DWORD   MaxStreams;\n    DWORD   MaxStreamStride;            // max stride for SetStreamSource\n\n    DWORD   VertexShaderVersion;\n    DWORD   MaxVertexShaderConst;       // number of vertex shader constant registers\n\n    DWORD   PixelShaderVersion;\n    float   PixelShader1xMaxValue;      // max value storable in registers of ps.1.x shaders\n\n    // Here are the DX9 specific ones\n    DWORD   DevCaps2;\n\n    float   MaxNpatchTessellationLevel;\n    DWORD   Reserved5;\n\n    UINT    MasterAdapterOrdinal;       // ordinal of master adaptor for adapter group\n    UINT    AdapterOrdinalInGroup;      // ordinal inside the adapter group\n    UINT    NumberOfAdaptersInGroup;    // number of adapters in this adapter group (only if master)\n    DWORD   DeclTypes;                  // Data types, supported in vertex declarations\n    DWORD   NumSimultaneousRTs;         // Will be at least 1\n    DWORD   StretchRectFilterCaps;      // Filter caps supported by StretchRect\n    D3DVSHADERCAPS2_0 VS20Caps;\n    D3DPSHADERCAPS2_0 PS20Caps;\n    DWORD   VertexTextureFilterCaps;    // D3DPTFILTERCAPS for IDirect3DTexture9's for texture, used in vertex shaders\n    DWORD   MaxVShaderInstructionsExecuted; // maximum number of vertex shader instructions that can be executed\n    DWORD   MaxPShaderInstructionsExecuted; // maximum number of pixel shader instructions that can be executed\n    DWORD   MaxVertexShader30InstructionSlots; \n    DWORD   MaxPixelShader30InstructionSlots;\n} D3DCAPS9;\n\n//\n// BIT DEFINES FOR D3DCAPS9 DWORD MEMBERS\n//\n\n//\n// Caps\n//\n#define D3DCAPS_OVERLAY                 0x00000800L\n#define D3DCAPS_READ_SCANLINE           0x00020000L\n\n//\n// Caps2\n//\n#define D3DCAPS2_FULLSCREENGAMMA        0x00020000L\n#define D3DCAPS2_CANCALIBRATEGAMMA      0x00100000L\n#define D3DCAPS2_RESERVED               0x02000000L\n#define D3DCAPS2_CANMANAGERESOURCE      0x10000000L\n#define D3DCAPS2_DYNAMICTEXTURES        0x20000000L\n#define D3DCAPS2_CANAUTOGENMIPMAP       0x40000000L\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n#define D3DCAPS2_CANSHARERESOURCE       0x80000000L\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n//\n// Caps3\n//\n#define D3DCAPS3_RESERVED               0x8000001fL\n\n// Indicates that the device can respect the ALPHABLENDENABLE render state\n// when fullscreen while using the FLIP or DISCARD swap effect.\n// COPY and COPYVSYNC swap effects work whether or not this flag is set.\n#define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD   0x00000020L\n\n// Indicates that the device can perform a gamma correction from \n// a windowed back buffer containing linear content to the sRGB desktop.\n#define D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION 0x00000080L\n\n#define D3DCAPS3_COPY_TO_VIDMEM         0x00000100L /* Device can acclerate copies from sysmem to local vidmem */\n#define D3DCAPS3_COPY_TO_SYSTEMMEM      0x00000200L /* Device can acclerate copies from local vidmem to sysmem */\n#define D3DCAPS3_DXVAHD                 0x00000400L\n\n\n//\n// PresentationIntervals\n//\n#define D3DPRESENT_INTERVAL_DEFAULT     0x00000000L\n#define D3DPRESENT_INTERVAL_ONE         0x00000001L\n#define D3DPRESENT_INTERVAL_TWO         0x00000002L\n#define D3DPRESENT_INTERVAL_THREE       0x00000004L\n#define D3DPRESENT_INTERVAL_FOUR        0x00000008L\n#define D3DPRESENT_INTERVAL_IMMEDIATE   0x80000000L\n\n//\n// CursorCaps\n//\n// Driver supports HW color cursor in at least hi-res modes(height >=400)\n#define D3DCURSORCAPS_COLOR             0x00000001L\n// Driver supports HW cursor also in low-res modes(height < 400)\n#define D3DCURSORCAPS_LOWRES            0x00000002L\n\n//\n// DevCaps\n//\n#define D3DDEVCAPS_EXECUTESYSTEMMEMORY  0x00000010L /* Device can use execute buffers from system memory */\n#define D3DDEVCAPS_EXECUTEVIDEOMEMORY   0x00000020L /* Device can use execute buffers from video memory */\n#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040L /* Device can use TL buffers from system memory */\n#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY  0x00000080L /* Device can use TL buffers from video memory */\n#define D3DDEVCAPS_TEXTURESYSTEMMEMORY  0x00000100L /* Device can texture from system memory */\n#define D3DDEVCAPS_TEXTUREVIDEOMEMORY   0x00000200L /* Device can texture from device memory */\n#define D3DDEVCAPS_DRAWPRIMTLVERTEX     0x00000400L /* Device can draw TLVERTEX primitives */\n#define D3DDEVCAPS_CANRENDERAFTERFLIP   0x00000800L /* Device can render without waiting for flip to complete */\n#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x00001000L /* Device can texture from nonlocal video memory */\n#define D3DDEVCAPS_DRAWPRIMITIVES2      0x00002000L /* Device can support DrawPrimitives2 */\n#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x00004000L /* Device is texturing from separate memory pools */\n#define D3DDEVCAPS_DRAWPRIMITIVES2EX    0x00008000L /* Device can support Extended DrawPrimitives2 i.e. DX7 compliant driver*/\n#define D3DDEVCAPS_HWTRANSFORMANDLIGHT  0x00010000L /* Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also */\n#define D3DDEVCAPS_CANBLTSYSTONONLOCAL  0x00020000L /* Device supports a Tex Blt from system memory to non-local vidmem */\n#define D3DDEVCAPS_HWRASTERIZATION      0x00080000L /* Device has HW acceleration for rasterization */\n#define D3DDEVCAPS_PUREDEVICE           0x00100000L /* Device supports D3DCREATE_PUREDEVICE */\n#define D3DDEVCAPS_QUINTICRTPATCHES     0x00200000L /* Device supports quintic Beziers and BSplines */\n#define D3DDEVCAPS_RTPATCHES            0x00400000L /* Device supports Rect and Tri patches */\n#define D3DDEVCAPS_RTPATCHHANDLEZERO    0x00800000L /* Indicates that RT Patches may be drawn efficiently using handle 0 */\n#define D3DDEVCAPS_NPATCHES             0x01000000L /* Device supports N-Patches */\n\n//\n// PrimitiveMiscCaps\n//\n#define D3DPMISCCAPS_MASKZ              0x00000002L\n#define D3DPMISCCAPS_CULLNONE           0x00000010L\n#define D3DPMISCCAPS_CULLCW             0x00000020L\n#define D3DPMISCCAPS_CULLCCW            0x00000040L\n#define D3DPMISCCAPS_COLORWRITEENABLE   0x00000080L\n#define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS 0x00000100L /* Device correctly clips scaled points to clip planes */\n#define D3DPMISCCAPS_CLIPTLVERTS        0x00000200L /* device will clip post-transformed vertex primitives */\n#define D3DPMISCCAPS_TSSARGTEMP         0x00000400L /* device supports D3DTA_TEMP for temporary register */\n#define D3DPMISCCAPS_BLENDOP            0x00000800L /* device supports D3DRS_BLENDOP */\n#define D3DPMISCCAPS_NULLREFERENCE      0x00001000L /* Reference Device that doesnt render */\n#define D3DPMISCCAPS_INDEPENDENTWRITEMASKS     0x00004000L /* Device supports independent write masks for MET or MRT */\n#define D3DPMISCCAPS_PERSTAGECONSTANT   0x00008000L /* Device supports per-stage constants */\n#define D3DPMISCCAPS_FOGANDSPECULARALPHA   0x00010000L /* Device supports separate fog and specular alpha (many devices\n                                                          use the specular alpha channel to store fog factor) */\n#define D3DPMISCCAPS_SEPARATEALPHABLEND         0x00020000L /* Device supports separate blend settings for the alpha channel */\n#define D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS    0x00040000L /* Device supports different bit depths for MRT */\n#define D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING 0x00080000L /* Device supports post-pixel shader operations for MRT */\n#define D3DPMISCCAPS_FOGVERTEXCLAMPED           0x00100000L /* Device clamps fog blend factor per vertex */\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n#define D3DPMISCCAPS_POSTBLENDSRGBCONVERT       0x00200000L /* Indicates device can perform conversion to sRGB after blending. */\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n\n//\n// LineCaps\n//\n#define D3DLINECAPS_TEXTURE             0x00000001L\n#define D3DLINECAPS_ZTEST               0x00000002L\n#define D3DLINECAPS_BLEND               0x00000004L\n#define D3DLINECAPS_ALPHACMP            0x00000008L\n#define D3DLINECAPS_FOG                 0x00000010L\n#define D3DLINECAPS_ANTIALIAS           0x00000020L\n\n//\n// RasterCaps\n//\n#define D3DPRASTERCAPS_DITHER                 0x00000001L\n#define D3DPRASTERCAPS_ZTEST                  0x00000010L\n#define D3DPRASTERCAPS_FOGVERTEX              0x00000080L\n#define D3DPRASTERCAPS_FOGTABLE               0x00000100L\n#define D3DPRASTERCAPS_MIPMAPLODBIAS          0x00002000L\n#define D3DPRASTERCAPS_ZBUFFERLESSHSR         0x00008000L\n#define D3DPRASTERCAPS_FOGRANGE               0x00010000L\n#define D3DPRASTERCAPS_ANISOTROPY             0x00020000L\n#define D3DPRASTERCAPS_WBUFFER                0x00040000L\n#define D3DPRASTERCAPS_WFOG                   0x00100000L\n#define D3DPRASTERCAPS_ZFOG                   0x00200000L\n#define D3DPRASTERCAPS_COLORPERSPECTIVE       0x00400000L /* Device iterates colors perspective correct */\n#define D3DPRASTERCAPS_SCISSORTEST            0x01000000L\n#define D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS    0x02000000L\n#define D3DPRASTERCAPS_DEPTHBIAS              0x04000000L \n#define D3DPRASTERCAPS_MULTISAMPLE_TOGGLE     0x08000000L\n\n//\n// ZCmpCaps, AlphaCmpCaps\n//\n#define D3DPCMPCAPS_NEVER               0x00000001L\n#define D3DPCMPCAPS_LESS                0x00000002L\n#define D3DPCMPCAPS_EQUAL               0x00000004L\n#define D3DPCMPCAPS_LESSEQUAL           0x00000008L\n#define D3DPCMPCAPS_GREATER             0x00000010L\n#define D3DPCMPCAPS_NOTEQUAL            0x00000020L\n#define D3DPCMPCAPS_GREATEREQUAL        0x00000040L\n#define D3DPCMPCAPS_ALWAYS              0x00000080L\n\n//\n// SourceBlendCaps, DestBlendCaps\n//\n#define D3DPBLENDCAPS_ZERO              0x00000001L\n#define D3DPBLENDCAPS_ONE               0x00000002L\n#define D3DPBLENDCAPS_SRCCOLOR          0x00000004L\n#define D3DPBLENDCAPS_INVSRCCOLOR       0x00000008L\n#define D3DPBLENDCAPS_SRCALPHA          0x00000010L\n#define D3DPBLENDCAPS_INVSRCALPHA       0x00000020L\n#define D3DPBLENDCAPS_DESTALPHA         0x00000040L\n#define D3DPBLENDCAPS_INVDESTALPHA      0x00000080L\n#define D3DPBLENDCAPS_DESTCOLOR         0x00000100L\n#define D3DPBLENDCAPS_INVDESTCOLOR      0x00000200L\n#define D3DPBLENDCAPS_SRCALPHASAT       0x00000400L\n#define D3DPBLENDCAPS_BOTHSRCALPHA      0x00000800L\n#define D3DPBLENDCAPS_BOTHINVSRCALPHA   0x00001000L\n#define D3DPBLENDCAPS_BLENDFACTOR       0x00002000L /* Supports both D3DBLEND_BLENDFACTOR and D3DBLEND_INVBLENDFACTOR */\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n#define D3DPBLENDCAPS_SRCCOLOR2         0x00004000L\n#define D3DPBLENDCAPS_INVSRCCOLOR2      0x00008000L\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n\n//\n// ShadeCaps\n//\n#define D3DPSHADECAPS_COLORGOURAUDRGB       0x00000008L\n#define D3DPSHADECAPS_SPECULARGOURAUDRGB    0x00000200L\n#define D3DPSHADECAPS_ALPHAGOURAUDBLEND     0x00004000L\n#define D3DPSHADECAPS_FOGGOURAUD            0x00080000L\n\n//\n// TextureCaps\n//\n#define D3DPTEXTURECAPS_PERSPECTIVE         0x00000001L /* Perspective-correct texturing is supported */\n#define D3DPTEXTURECAPS_POW2                0x00000002L /* Power-of-2 texture dimensions are required - applies to non-Cube/Volume textures only. */\n#define D3DPTEXTURECAPS_ALPHA               0x00000004L /* Alpha in texture pixels is supported */\n#define D3DPTEXTURECAPS_SQUAREONLY          0x00000020L /* Only square textures are supported */\n#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00000040L /* Texture indices are not scaled by the texture size prior to interpolation */\n#define D3DPTEXTURECAPS_ALPHAPALETTE        0x00000080L /* Device can draw alpha from texture palettes */\n// Device can use non-POW2 textures if:\n//  1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage\n//  2) D3DRS_WRAP(N) is zero for this texture's coordinates\n//  3) mip mapping is not enabled (use magnification filter only)\n#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL  0x00000100L\n#define D3DPTEXTURECAPS_PROJECTED           0x00000400L /* Device can do D3DTTFF_PROJECTED */\n#define D3DPTEXTURECAPS_CUBEMAP             0x00000800L /* Device can do cubemap textures */\n#define D3DPTEXTURECAPS_VOLUMEMAP           0x00002000L /* Device can do volume textures */\n#define D3DPTEXTURECAPS_MIPMAP              0x00004000L /* Device can do mipmapped textures */\n#define D3DPTEXTURECAPS_MIPVOLUMEMAP        0x00008000L /* Device can do mipmapped volume textures */\n#define D3DPTEXTURECAPS_MIPCUBEMAP          0x00010000L /* Device can do mipmapped cube maps */\n#define D3DPTEXTURECAPS_CUBEMAP_POW2        0x00020000L /* Device requires that cubemaps be power-of-2 dimension */\n#define D3DPTEXTURECAPS_VOLUMEMAP_POW2      0x00040000L /* Device requires that volume maps be power-of-2 dimension */\n#define D3DPTEXTURECAPS_NOPROJECTEDBUMPENV  0x00200000L /* Device does not support projected bump env lookup operation \n                                                           in programmable and fixed function pixel shaders */\n\n//\n// TextureFilterCaps, StretchRectFilterCaps\n//\n#define D3DPTFILTERCAPS_MINFPOINT           0x00000100L /* Min Filter */\n#define D3DPTFILTERCAPS_MINFLINEAR          0x00000200L\n#define D3DPTFILTERCAPS_MINFANISOTROPIC     0x00000400L\n#define D3DPTFILTERCAPS_MINFPYRAMIDALQUAD   0x00000800L\n#define D3DPTFILTERCAPS_MINFGAUSSIANQUAD    0x00001000L\n#define D3DPTFILTERCAPS_MIPFPOINT           0x00010000L /* Mip Filter */\n#define D3DPTFILTERCAPS_MIPFLINEAR          0x00020000L\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n#define D3DPTFILTERCAPS_CONVOLUTIONMONO     0x00040000L /* Min and Mag for the convolution mono filter */\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n#define D3DPTFILTERCAPS_MAGFPOINT           0x01000000L /* Mag Filter */\n#define D3DPTFILTERCAPS_MAGFLINEAR          0x02000000L\n#define D3DPTFILTERCAPS_MAGFANISOTROPIC     0x04000000L\n#define D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD   0x08000000L\n#define D3DPTFILTERCAPS_MAGFGAUSSIANQUAD    0x10000000L\n\n//\n// TextureAddressCaps\n//\n#define D3DPTADDRESSCAPS_WRAP           0x00000001L\n#define D3DPTADDRESSCAPS_MIRROR         0x00000002L\n#define D3DPTADDRESSCAPS_CLAMP          0x00000004L\n#define D3DPTADDRESSCAPS_BORDER         0x00000008L\n#define D3DPTADDRESSCAPS_INDEPENDENTUV  0x00000010L\n#define D3DPTADDRESSCAPS_MIRRORONCE     0x00000020L\n\n//\n// StencilCaps\n//\n#define D3DSTENCILCAPS_KEEP             0x00000001L\n#define D3DSTENCILCAPS_ZERO             0x00000002L\n#define D3DSTENCILCAPS_REPLACE          0x00000004L\n#define D3DSTENCILCAPS_INCRSAT          0x00000008L\n#define D3DSTENCILCAPS_DECRSAT          0x00000010L\n#define D3DSTENCILCAPS_INVERT           0x00000020L\n#define D3DSTENCILCAPS_INCR             0x00000040L\n#define D3DSTENCILCAPS_DECR             0x00000080L\n#define D3DSTENCILCAPS_TWOSIDED         0x00000100L\n\n//\n// TextureOpCaps\n//\n#define D3DTEXOPCAPS_DISABLE                    0x00000001L\n#define D3DTEXOPCAPS_SELECTARG1                 0x00000002L\n#define D3DTEXOPCAPS_SELECTARG2                 0x00000004L\n#define D3DTEXOPCAPS_MODULATE                   0x00000008L\n#define D3DTEXOPCAPS_MODULATE2X                 0x00000010L\n#define D3DTEXOPCAPS_MODULATE4X                 0x00000020L\n#define D3DTEXOPCAPS_ADD                        0x00000040L\n#define D3DTEXOPCAPS_ADDSIGNED                  0x00000080L\n#define D3DTEXOPCAPS_ADDSIGNED2X                0x00000100L\n#define D3DTEXOPCAPS_SUBTRACT                   0x00000200L\n#define D3DTEXOPCAPS_ADDSMOOTH                  0x00000400L\n#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA          0x00000800L\n#define D3DTEXOPCAPS_BLENDTEXTUREALPHA          0x00001000L\n#define D3DTEXOPCAPS_BLENDFACTORALPHA           0x00002000L\n#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM        0x00004000L\n#define D3DTEXOPCAPS_BLENDCURRENTALPHA          0x00008000L\n#define D3DTEXOPCAPS_PREMODULATE                0x00010000L\n#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR     0x00020000L\n#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA     0x00040000L\n#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR  0x00080000L\n#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA  0x00100000L\n#define D3DTEXOPCAPS_BUMPENVMAP                 0x00200000L\n#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE        0x00400000L\n#define D3DTEXOPCAPS_DOTPRODUCT3                0x00800000L\n#define D3DTEXOPCAPS_MULTIPLYADD                0x01000000L\n#define D3DTEXOPCAPS_LERP                       0x02000000L\n\n//\n// FVFCaps\n//\n#define D3DFVFCAPS_TEXCOORDCOUNTMASK    0x0000ffffL /* mask for texture coordinate count field */\n#define D3DFVFCAPS_DONOTSTRIPELEMENTS   0x00080000L /* Device prefers that vertex elements not be stripped */\n#define D3DFVFCAPS_PSIZE                0x00100000L /* Device can receive point size */\n\n//\n// VertexProcessingCaps\n//\n#define D3DVTXPCAPS_TEXGEN              0x00000001L /* device can do texgen */\n#define D3DVTXPCAPS_MATERIALSOURCE7     0x00000002L /* device can do DX7-level colormaterialsource ops */\n#define D3DVTXPCAPS_DIRECTIONALLIGHTS   0x00000008L /* device can do directional lights */\n#define D3DVTXPCAPS_POSITIONALLIGHTS    0x00000010L /* device can do positional lights (includes point and spot) */\n#define D3DVTXPCAPS_LOCALVIEWER         0x00000020L /* device can do local viewer */\n#define D3DVTXPCAPS_TWEENING            0x00000040L /* device can do vertex tweening */\n#define D3DVTXPCAPS_TEXGEN_SPHEREMAP    0x00000100L /* device supports D3DTSS_TCI_SPHEREMAP */\n#define D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER   0x00000200L /* device does not support TexGen in non-local\n                                                            viewer mode */\n\n//\n// DevCaps2\n//\n#define D3DDEVCAPS2_STREAMOFFSET                        0x00000001L /* Device supports offsets in streams. Must be set by DX9 drivers */\n#define D3DDEVCAPS2_DMAPNPATCH                          0x00000002L /* Device supports displacement maps for N-Patches*/\n#define D3DDEVCAPS2_ADAPTIVETESSRTPATCH                 0x00000004L /* Device supports adaptive tesselation of RT-patches*/\n#define D3DDEVCAPS2_ADAPTIVETESSNPATCH                  0x00000008L /* Device supports adaptive tesselation of N-patches*/\n#define D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES       0x00000010L /* Device supports StretchRect calls with a texture as the source*/\n#define D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH                0x00000020L /* Device supports presampled displacement maps for N-Patches */\n#define D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET  0x00000040L /* Vertex elements in a vertex declaration can share the same stream offset */\n\n//\n// DeclTypes\n//\n#define D3DDTCAPS_UBYTE4     0x00000001L\n#define D3DDTCAPS_UBYTE4N    0x00000002L\n#define D3DDTCAPS_SHORT2N    0x00000004L\n#define D3DDTCAPS_SHORT4N    0x00000008L\n#define D3DDTCAPS_USHORT2N   0x00000010L\n#define D3DDTCAPS_USHORT4N   0x00000020L\n#define D3DDTCAPS_UDEC3      0x00000040L\n#define D3DDTCAPS_DEC3N      0x00000080L\n#define D3DDTCAPS_FLOAT16_2  0x00000100L\n#define D3DDTCAPS_FLOAT16_4  0x00000200L\n\n\n#pragma pack()\n\n#endif /* (DIRECT3D_VERSION >= 0x0900) */\n#endif /* _d3d9CAPS_H_ */\n\n"
  },
  {
    "path": "Include/d3d9types.h",
    "content": "/*==========================================================================;\n *\n *  Copyright (C) Microsoft Corporation.  All Rights Reserved.\n *\n *  File:       d3d9types.h\n *  Content:    Direct3D capabilities include file\n *\n ***************************************************************************/\n\n#ifndef _d3d9TYPES_H_\n#define _d3d9TYPES_H_\n\n#ifndef DIRECT3D_VERSION\n#define DIRECT3D_VERSION         0x0900\n#endif  //DIRECT3D_VERSION\n\n// include this file content only if compiling for DX9 interfaces\n#if(DIRECT3D_VERSION >= 0x0900)\n\n#include <float.h>\n\n#if _MSC_VER >= 1200\n#pragma warning(push)\n#endif\n#pragma warning(disable:4201) // anonymous unions warning\n#if defined(_X86_) || defined(_IA64_)\n#pragma pack(4)\n#endif\n\n// D3DCOLOR is equivalent to D3DFMT_A8R8G8B8\n#ifndef D3DCOLOR_DEFINED\ntypedef DWORD D3DCOLOR;\n#define D3DCOLOR_DEFINED\n#endif\n\n// maps unsigned 8 bits/channel to D3DCOLOR\n#define D3DCOLOR_ARGB(a,r,g,b) \\\n    ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))\n#define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b)\n#define D3DCOLOR_XRGB(r,g,b)   D3DCOLOR_ARGB(0xff,r,g,b)\n\n#define D3DCOLOR_XYUV(y,u,v)   D3DCOLOR_ARGB(0xff,y,u,v)\n#define D3DCOLOR_AYUV(a,y,u,v) D3DCOLOR_ARGB(a,y,u,v)\n\n// maps floating point channels (0.f to 1.f range) to D3DCOLOR\n#define D3DCOLOR_COLORVALUE(r,g,b,a) \\\n    D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f))\n\n\n#ifndef D3DVECTOR_DEFINED\ntypedef struct _D3DVECTOR {\n    float x;\n    float y;\n    float z;\n} D3DVECTOR;\n#define D3DVECTOR_DEFINED\n#endif\n\n#ifndef D3DCOLORVALUE_DEFINED\ntypedef struct _D3DCOLORVALUE {\n    float r;\n    float g;\n    float b;\n    float a;\n} D3DCOLORVALUE;\n#define D3DCOLORVALUE_DEFINED\n#endif\n\n#ifndef D3DRECT_DEFINED\ntypedef struct _D3DRECT {\n    LONG x1;\n    LONG y1;\n    LONG x2;\n    LONG y2;\n} D3DRECT;\n#define D3DRECT_DEFINED\n#endif\n\n#ifndef D3DMATRIX_DEFINED\ntypedef struct _D3DMATRIX {\n    union {\n        struct {\n            float        _11, _12, _13, _14;\n            float        _21, _22, _23, _24;\n            float        _31, _32, _33, _34;\n            float        _41, _42, _43, _44;\n\n        };\n        float m[4][4];\n    };\n} D3DMATRIX;\n#define D3DMATRIX_DEFINED\n#endif\n\ntypedef struct _D3DVIEWPORT9 {\n    DWORD       X;\n    DWORD       Y;            /* Viewport Top left */\n    DWORD       Width;\n    DWORD       Height;       /* Viewport Dimensions */\n    float       MinZ;         /* Min/max of clip Volume */\n    float       MaxZ;\n} D3DVIEWPORT9;\n\n/*\n * Values for clip fields.\n */\n\n// Max number of user clipping planes, supported in D3D.\n#define D3DMAXUSERCLIPPLANES 32\n\n// These bits could be ORed together to use with D3DRS_CLIPPLANEENABLE\n//\n#define D3DCLIPPLANE0 (1 << 0)\n#define D3DCLIPPLANE1 (1 << 1)\n#define D3DCLIPPLANE2 (1 << 2)\n#define D3DCLIPPLANE3 (1 << 3)\n#define D3DCLIPPLANE4 (1 << 4)\n#define D3DCLIPPLANE5 (1 << 5)\n\n// The following bits are used in the ClipUnion and ClipIntersection\n// members of the D3DCLIPSTATUS9\n//\n\n#define D3DCS_LEFT        0x00000001L\n#define D3DCS_RIGHT       0x00000002L\n#define D3DCS_TOP         0x00000004L\n#define D3DCS_BOTTOM      0x00000008L\n#define D3DCS_FRONT       0x00000010L\n#define D3DCS_BACK        0x00000020L\n#define D3DCS_PLANE0      0x00000040L\n#define D3DCS_PLANE1      0x00000080L\n#define D3DCS_PLANE2      0x00000100L\n#define D3DCS_PLANE3      0x00000200L\n#define D3DCS_PLANE4      0x00000400L\n#define D3DCS_PLANE5      0x00000800L\n\n#define D3DCS_ALL (D3DCS_LEFT   | \\\n                   D3DCS_RIGHT  | \\\n                   D3DCS_TOP    | \\\n                   D3DCS_BOTTOM | \\\n                   D3DCS_FRONT  | \\\n                   D3DCS_BACK   | \\\n                   D3DCS_PLANE0 | \\\n                   D3DCS_PLANE1 | \\\n                   D3DCS_PLANE2 | \\\n                   D3DCS_PLANE3 | \\\n                   D3DCS_PLANE4 | \\\n                   D3DCS_PLANE5)\n\ntypedef struct _D3DCLIPSTATUS9 {\n    DWORD ClipUnion;\n    DWORD ClipIntersection;\n} D3DCLIPSTATUS9;\n\ntypedef struct _D3DMATERIAL9 {\n    D3DCOLORVALUE   Diffuse;        /* Diffuse color RGBA */\n    D3DCOLORVALUE   Ambient;        /* Ambient color RGB */\n    D3DCOLORVALUE   Specular;       /* Specular 'shininess' */\n    D3DCOLORVALUE   Emissive;       /* Emissive color RGB */\n    float           Power;          /* Sharpness if specular highlight */\n} D3DMATERIAL9;\n\ntypedef enum _D3DLIGHTTYPE {\n    D3DLIGHT_POINT          = 1,\n    D3DLIGHT_SPOT           = 2,\n    D3DLIGHT_DIRECTIONAL    = 3,\n    D3DLIGHT_FORCE_DWORD    = 0x7fffffff, /* force 32-bit size enum */\n} D3DLIGHTTYPE;\n\ntypedef struct _D3DLIGHT9 {\n    D3DLIGHTTYPE    Type;            /* Type of light source */\n    D3DCOLORVALUE   Diffuse;         /* Diffuse color of light */\n    D3DCOLORVALUE   Specular;        /* Specular color of light */\n    D3DCOLORVALUE   Ambient;         /* Ambient color of light */\n    D3DVECTOR       Position;         /* Position in world space */\n    D3DVECTOR       Direction;        /* Direction in world space */\n    float           Range;            /* Cutoff range */\n    float           Falloff;          /* Falloff */\n    float           Attenuation0;     /* Constant attenuation */\n    float           Attenuation1;     /* Linear attenuation */\n    float           Attenuation2;     /* Quadratic attenuation */\n    float           Theta;            /* Inner angle of spotlight cone */\n    float           Phi;              /* Outer angle of spotlight cone */\n} D3DLIGHT9;\n\n/*\n * Options for clearing\n */\n#define D3DCLEAR_TARGET            0x00000001l  /* Clear target surface */\n#define D3DCLEAR_ZBUFFER           0x00000002l  /* Clear target z buffer */\n#define D3DCLEAR_STENCIL           0x00000004l  /* Clear stencil planes */\n\n/*\n * The following defines the rendering states\n */\n\ntypedef enum _D3DSHADEMODE {\n    D3DSHADE_FLAT               = 1,\n    D3DSHADE_GOURAUD            = 2,\n    D3DSHADE_PHONG              = 3,\n    D3DSHADE_FORCE_DWORD        = 0x7fffffff, /* force 32-bit size enum */\n} D3DSHADEMODE;\n\ntypedef enum _D3DFILLMODE {\n    D3DFILL_POINT               = 1,\n    D3DFILL_WIREFRAME           = 2,\n    D3DFILL_SOLID               = 3,\n    D3DFILL_FORCE_DWORD         = 0x7fffffff, /* force 32-bit size enum */\n} D3DFILLMODE;\n\ntypedef enum _D3DBLEND {\n    D3DBLEND_ZERO               = 1,\n    D3DBLEND_ONE                = 2,\n    D3DBLEND_SRCCOLOR           = 3,\n    D3DBLEND_INVSRCCOLOR        = 4,\n    D3DBLEND_SRCALPHA           = 5,\n    D3DBLEND_INVSRCALPHA        = 6,\n    D3DBLEND_DESTALPHA          = 7,\n    D3DBLEND_INVDESTALPHA       = 8,\n    D3DBLEND_DESTCOLOR          = 9,\n    D3DBLEND_INVDESTCOLOR       = 10,\n    D3DBLEND_SRCALPHASAT        = 11,\n    D3DBLEND_BOTHSRCALPHA       = 12,\n    D3DBLEND_BOTHINVSRCALPHA    = 13,\n    D3DBLEND_BLENDFACTOR        = 14, /* Only supported if D3DPBLENDCAPS_BLENDFACTOR is on */\n    D3DBLEND_INVBLENDFACTOR     = 15, /* Only supported if D3DPBLENDCAPS_BLENDFACTOR is on */\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n    D3DBLEND_SRCCOLOR2          = 16,\n    D3DBLEND_INVSRCCOLOR2       = 17,\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n    D3DBLEND_FORCE_DWORD        = 0x7fffffff, /* force 32-bit size enum */\n} D3DBLEND;\n\ntypedef enum _D3DBLENDOP {\n    D3DBLENDOP_ADD              = 1,\n    D3DBLENDOP_SUBTRACT         = 2,\n    D3DBLENDOP_REVSUBTRACT      = 3,\n    D3DBLENDOP_MIN              = 4,\n    D3DBLENDOP_MAX              = 5,\n    D3DBLENDOP_FORCE_DWORD      = 0x7fffffff, /* force 32-bit size enum */\n} D3DBLENDOP;\n\ntypedef enum _D3DTEXTUREADDRESS {\n    D3DTADDRESS_WRAP            = 1,\n    D3DTADDRESS_MIRROR          = 2,\n    D3DTADDRESS_CLAMP           = 3,\n    D3DTADDRESS_BORDER          = 4,\n    D3DTADDRESS_MIRRORONCE      = 5,\n    D3DTADDRESS_FORCE_DWORD     = 0x7fffffff, /* force 32-bit size enum */\n} D3DTEXTUREADDRESS;\n\ntypedef enum _D3DCULL {\n    D3DCULL_NONE                = 1,\n    D3DCULL_CW                  = 2,\n    D3DCULL_CCW                 = 3,\n    D3DCULL_FORCE_DWORD         = 0x7fffffff, /* force 32-bit size enum */\n} D3DCULL;\n\ntypedef enum _D3DCMPFUNC {\n    D3DCMP_NEVER                = 1,\n    D3DCMP_LESS                 = 2,\n    D3DCMP_EQUAL                = 3,\n    D3DCMP_LESSEQUAL            = 4,\n    D3DCMP_GREATER              = 5,\n    D3DCMP_NOTEQUAL             = 6,\n    D3DCMP_GREATEREQUAL         = 7,\n    D3DCMP_ALWAYS               = 8,\n    D3DCMP_FORCE_DWORD          = 0x7fffffff, /* force 32-bit size enum */\n} D3DCMPFUNC;\n\ntypedef enum _D3DSTENCILOP {\n    D3DSTENCILOP_KEEP           = 1,\n    D3DSTENCILOP_ZERO           = 2,\n    D3DSTENCILOP_REPLACE        = 3,\n    D3DSTENCILOP_INCRSAT        = 4,\n    D3DSTENCILOP_DECRSAT        = 5,\n    D3DSTENCILOP_INVERT         = 6,\n    D3DSTENCILOP_INCR           = 7,\n    D3DSTENCILOP_DECR           = 8,\n    D3DSTENCILOP_FORCE_DWORD    = 0x7fffffff, /* force 32-bit size enum */\n} D3DSTENCILOP;\n\ntypedef enum _D3DFOGMODE {\n    D3DFOG_NONE                 = 0,\n    D3DFOG_EXP                  = 1,\n    D3DFOG_EXP2                 = 2,\n    D3DFOG_LINEAR               = 3,\n    D3DFOG_FORCE_DWORD          = 0x7fffffff, /* force 32-bit size enum */\n} D3DFOGMODE;\n\ntypedef enum _D3DZBUFFERTYPE {\n    D3DZB_FALSE                 = 0,\n    D3DZB_TRUE                  = 1, // Z buffering\n    D3DZB_USEW                  = 2, // W buffering\n    D3DZB_FORCE_DWORD           = 0x7fffffff, /* force 32-bit size enum */\n} D3DZBUFFERTYPE;\n\n// Primitives supported by draw-primitive API\ntypedef enum _D3DPRIMITIVETYPE {\n    D3DPT_POINTLIST             = 1,\n    D3DPT_LINELIST              = 2,\n    D3DPT_LINESTRIP             = 3,\n    D3DPT_TRIANGLELIST          = 4,\n    D3DPT_TRIANGLESTRIP         = 5,\n    D3DPT_TRIANGLEFAN           = 6,\n    D3DPT_FORCE_DWORD           = 0x7fffffff, /* force 32-bit size enum */\n} D3DPRIMITIVETYPE;\n\ntypedef enum _D3DTRANSFORMSTATETYPE {\n    D3DTS_VIEW          = 2,\n    D3DTS_PROJECTION    = 3,\n    D3DTS_TEXTURE0      = 16,\n    D3DTS_TEXTURE1      = 17,\n    D3DTS_TEXTURE2      = 18,\n    D3DTS_TEXTURE3      = 19,\n    D3DTS_TEXTURE4      = 20,\n    D3DTS_TEXTURE5      = 21,\n    D3DTS_TEXTURE6      = 22,\n    D3DTS_TEXTURE7      = 23,\n    D3DTS_FORCE_DWORD     = 0x7fffffff, /* force 32-bit size enum */\n} D3DTRANSFORMSTATETYPE;\n\n#define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256)\n#define D3DTS_WORLD  D3DTS_WORLDMATRIX(0)\n#define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1)\n#define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2)\n#define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3)\n\ntypedef enum _D3DRENDERSTATETYPE {\n    D3DRS_ZENABLE                   = 7,    /* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) */\n    D3DRS_FILLMODE                  = 8,    /* D3DFILLMODE */\n    D3DRS_SHADEMODE                 = 9,    /* D3DSHADEMODE */\n    D3DRS_ZWRITEENABLE              = 14,   /* TRUE to enable z writes */\n    D3DRS_ALPHATESTENABLE           = 15,   /* TRUE to enable alpha tests */\n    D3DRS_LASTPIXEL                 = 16,   /* TRUE for last-pixel on lines */\n    D3DRS_SRCBLEND                  = 19,   /* D3DBLEND */\n    D3DRS_DESTBLEND                 = 20,   /* D3DBLEND */\n    D3DRS_CULLMODE                  = 22,   /* D3DCULL */\n    D3DRS_ZFUNC                     = 23,   /* D3DCMPFUNC */\n    D3DRS_ALPHAREF                  = 24,   /* D3DFIXED */\n    D3DRS_ALPHAFUNC                 = 25,   /* D3DCMPFUNC */\n    D3DRS_DITHERENABLE              = 26,   /* TRUE to enable dithering */\n    D3DRS_ALPHABLENDENABLE          = 27,   /* TRUE to enable alpha blending */\n    D3DRS_FOGENABLE                 = 28,   /* TRUE to enable fog blending */\n    D3DRS_SPECULARENABLE            = 29,   /* TRUE to enable specular */\n    D3DRS_FOGCOLOR                  = 34,   /* D3DCOLOR */\n    D3DRS_FOGTABLEMODE              = 35,   /* D3DFOGMODE */\n    D3DRS_FOGSTART                  = 36,   /* Fog start (for both vertex and pixel fog) */\n    D3DRS_FOGEND                    = 37,   /* Fog end      */\n    D3DRS_FOGDENSITY                = 38,   /* Fog density  */\n    D3DRS_RANGEFOGENABLE            = 48,   /* Enables range-based fog */\n    D3DRS_STENCILENABLE             = 52,   /* BOOL enable/disable stenciling */\n    D3DRS_STENCILFAIL               = 53,   /* D3DSTENCILOP to do if stencil test fails */\n    D3DRS_STENCILZFAIL              = 54,   /* D3DSTENCILOP to do if stencil test passes and Z test fails */\n    D3DRS_STENCILPASS               = 55,   /* D3DSTENCILOP to do if both stencil and Z tests pass */\n    D3DRS_STENCILFUNC               = 56,   /* D3DCMPFUNC fn.  Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */\n    D3DRS_STENCILREF                = 57,   /* Reference value used in stencil test */\n    D3DRS_STENCILMASK               = 58,   /* Mask value used in stencil test */\n    D3DRS_STENCILWRITEMASK          = 59,   /* Write mask applied to values written to stencil buffer */\n    D3DRS_TEXTUREFACTOR             = 60,   /* D3DCOLOR used for multi-texture blend */\n    D3DRS_WRAP0                     = 128,  /* wrap for 1st texture coord. set */\n    D3DRS_WRAP1                     = 129,  /* wrap for 2nd texture coord. set */\n    D3DRS_WRAP2                     = 130,  /* wrap for 3rd texture coord. set */\n    D3DRS_WRAP3                     = 131,  /* wrap for 4th texture coord. set */\n    D3DRS_WRAP4                     = 132,  /* wrap for 5th texture coord. set */\n    D3DRS_WRAP5                     = 133,  /* wrap for 6th texture coord. set */\n    D3DRS_WRAP6                     = 134,  /* wrap for 7th texture coord. set */\n    D3DRS_WRAP7                     = 135,  /* wrap for 8th texture coord. set */\n    D3DRS_CLIPPING                  = 136,\n    D3DRS_LIGHTING                  = 137,\n    D3DRS_AMBIENT                   = 139,\n    D3DRS_FOGVERTEXMODE             = 140,\n    D3DRS_COLORVERTEX               = 141,\n    D3DRS_LOCALVIEWER               = 142,\n    D3DRS_NORMALIZENORMALS          = 143,\n    D3DRS_DIFFUSEMATERIALSOURCE     = 145,\n    D3DRS_SPECULARMATERIALSOURCE    = 146,\n    D3DRS_AMBIENTMATERIALSOURCE     = 147,\n    D3DRS_EMISSIVEMATERIALSOURCE    = 148,\n    D3DRS_VERTEXBLEND               = 151,\n    D3DRS_CLIPPLANEENABLE           = 152,\n    D3DRS_POINTSIZE                 = 154,   /* float point size */\n    D3DRS_POINTSIZE_MIN             = 155,   /* float point size min threshold */\n    D3DRS_POINTSPRITEENABLE         = 156,   /* BOOL point texture coord control */\n    D3DRS_POINTSCALEENABLE          = 157,   /* BOOL point size scale enable */\n    D3DRS_POINTSCALE_A              = 158,   /* float point attenuation A value */\n    D3DRS_POINTSCALE_B              = 159,   /* float point attenuation B value */\n    D3DRS_POINTSCALE_C              = 160,   /* float point attenuation C value */\n    D3DRS_MULTISAMPLEANTIALIAS      = 161,  // BOOL - set to do FSAA with multisample buffer\n    D3DRS_MULTISAMPLEMASK           = 162,  // DWORD - per-sample enable/disable\n    D3DRS_PATCHEDGESTYLE            = 163,  // Sets whether patch edges will use float style tessellation\n    D3DRS_DEBUGMONITORTOKEN         = 165,  // DEBUG ONLY - token to debug monitor\n    D3DRS_POINTSIZE_MAX             = 166,   /* float point size max threshold */\n    D3DRS_INDEXEDVERTEXBLENDENABLE  = 167,\n    D3DRS_COLORWRITEENABLE          = 168,  // per-channel write enable\n    D3DRS_TWEENFACTOR               = 170,   // float tween factor\n    D3DRS_BLENDOP                   = 171,   // D3DBLENDOP setting\n    D3DRS_POSITIONDEGREE            = 172,   // NPatch position interpolation degree. D3DDEGREE_LINEAR or D3DDEGREE_CUBIC (default)\n    D3DRS_NORMALDEGREE              = 173,   // NPatch normal interpolation degree. D3DDEGREE_LINEAR (default) or D3DDEGREE_QUADRATIC\n    D3DRS_SCISSORTESTENABLE         = 174,\n    D3DRS_SLOPESCALEDEPTHBIAS       = 175,\n    D3DRS_ANTIALIASEDLINEENABLE     = 176,\n    D3DRS_MINTESSELLATIONLEVEL      = 178,\n    D3DRS_MAXTESSELLATIONLEVEL      = 179,\n    D3DRS_ADAPTIVETESS_X            = 180,\n    D3DRS_ADAPTIVETESS_Y            = 181,\n    D3DRS_ADAPTIVETESS_Z            = 182,\n    D3DRS_ADAPTIVETESS_W            = 183,\n    D3DRS_ENABLEADAPTIVETESSELLATION = 184,\n    D3DRS_TWOSIDEDSTENCILMODE       = 185,   /* BOOL enable/disable 2 sided stenciling */\n    D3DRS_CCW_STENCILFAIL           = 186,   /* D3DSTENCILOP to do if ccw stencil test fails */\n    D3DRS_CCW_STENCILZFAIL          = 187,   /* D3DSTENCILOP to do if ccw stencil test passes and Z test fails */\n    D3DRS_CCW_STENCILPASS           = 188,   /* D3DSTENCILOP to do if both ccw stencil and Z tests pass */\n    D3DRS_CCW_STENCILFUNC           = 189,   /* D3DCMPFUNC fn.  ccw Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */\n    D3DRS_COLORWRITEENABLE1         = 190,   /* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */\n    D3DRS_COLORWRITEENABLE2         = 191,   /* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */\n    D3DRS_COLORWRITEENABLE3         = 192,   /* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */\n    D3DRS_BLENDFACTOR               = 193,   /* D3DCOLOR used for a constant blend factor during alpha blending for devices that support D3DPBLENDCAPS_BLENDFACTOR */\n    D3DRS_SRGBWRITEENABLE           = 194,   /* Enable rendertarget writes to be DE-linearized to SRGB (for formats that expose D3DUSAGE_QUERY_SRGBWRITE) */\n    D3DRS_DEPTHBIAS                 = 195,\n    D3DRS_WRAP8                     = 198,   /* Additional wrap states for vs_3_0+ attributes with D3DDECLUSAGE_TEXCOORD */\n    D3DRS_WRAP9                     = 199,\n    D3DRS_WRAP10                    = 200,\n    D3DRS_WRAP11                    = 201,\n    D3DRS_WRAP12                    = 202,\n    D3DRS_WRAP13                    = 203,\n    D3DRS_WRAP14                    = 204,\n    D3DRS_WRAP15                    = 205,\n    D3DRS_SEPARATEALPHABLENDENABLE  = 206,  /* TRUE to enable a separate blending function for the alpha channel */\n    D3DRS_SRCBLENDALPHA             = 207,  /* SRC blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */\n    D3DRS_DESTBLENDALPHA            = 208,  /* DST blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */\n    D3DRS_BLENDOPALPHA              = 209,  /* Blending operation for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */\n\n\n    D3DRS_FORCE_DWORD               = 0x7fffffff, /* force 32-bit size enum */\n} D3DRENDERSTATETYPE;\n\n// Maximum number of simultaneous render targets D3D supports\n#define D3D_MAX_SIMULTANEOUS_RENDERTARGETS 4\n\n// Values for material source\ntypedef enum _D3DMATERIALCOLORSOURCE\n{\n    D3DMCS_MATERIAL         = 0,            // Color from material is used\n    D3DMCS_COLOR1           = 1,            // Diffuse vertex color is used\n    D3DMCS_COLOR2           = 2,            // Specular vertex color is used\n    D3DMCS_FORCE_DWORD      = 0x7fffffff,   // force 32-bit size enum\n} D3DMATERIALCOLORSOURCE;\n\n// Bias to apply to the texture coordinate set to apply a wrap to.\n#define D3DRENDERSTATE_WRAPBIAS                 128UL\n\n/* Flags to construct the WRAP render states */\n#define D3DWRAP_U   0x00000001L\n#define D3DWRAP_V   0x00000002L\n#define D3DWRAP_W   0x00000004L\n\n/* Flags to construct the WRAP render states for 1D thru 4D texture coordinates */\n#define D3DWRAPCOORD_0   0x00000001L    // same as D3DWRAP_U\n#define D3DWRAPCOORD_1   0x00000002L    // same as D3DWRAP_V\n#define D3DWRAPCOORD_2   0x00000004L    // same as D3DWRAP_W\n#define D3DWRAPCOORD_3   0x00000008L\n\n/* Flags to construct D3DRS_COLORWRITEENABLE */\n#define D3DCOLORWRITEENABLE_RED     (1L<<0)\n#define D3DCOLORWRITEENABLE_GREEN   (1L<<1)\n#define D3DCOLORWRITEENABLE_BLUE    (1L<<2)\n#define D3DCOLORWRITEENABLE_ALPHA   (1L<<3)\n\n/*\n * State enumerants for per-stage processing of fixed function pixel processing\n * Two of these affect fixed function vertex processing as well: TEXTURETRANSFORMFLAGS and TEXCOORDINDEX.\n */\ntypedef enum _D3DTEXTURESTAGESTATETYPE\n{\n    D3DTSS_COLOROP        =  1, /* D3DTEXTUREOP - per-stage blending controls for color channels */\n    D3DTSS_COLORARG1      =  2, /* D3DTA_* (texture arg) */\n    D3DTSS_COLORARG2      =  3, /* D3DTA_* (texture arg) */\n    D3DTSS_ALPHAOP        =  4, /* D3DTEXTUREOP - per-stage blending controls for alpha channel */\n    D3DTSS_ALPHAARG1      =  5, /* D3DTA_* (texture arg) */\n    D3DTSS_ALPHAARG2      =  6, /* D3DTA_* (texture arg) */\n    D3DTSS_BUMPENVMAT00   =  7, /* float (bump mapping matrix) */\n    D3DTSS_BUMPENVMAT01   =  8, /* float (bump mapping matrix) */\n    D3DTSS_BUMPENVMAT10   =  9, /* float (bump mapping matrix) */\n    D3DTSS_BUMPENVMAT11   = 10, /* float (bump mapping matrix) */\n    D3DTSS_TEXCOORDINDEX  = 11, /* identifies which set of texture coordinates index this texture */\n    D3DTSS_BUMPENVLSCALE  = 22, /* float scale for bump map luminance */\n    D3DTSS_BUMPENVLOFFSET = 23, /* float offset for bump map luminance */\n    D3DTSS_TEXTURETRANSFORMFLAGS = 24, /* D3DTEXTURETRANSFORMFLAGS controls texture transform */\n    D3DTSS_COLORARG0      = 26, /* D3DTA_* third arg for triadic ops */\n    D3DTSS_ALPHAARG0      = 27, /* D3DTA_* third arg for triadic ops */\n    D3DTSS_RESULTARG      = 28, /* D3DTA_* arg for result (CURRENT or TEMP) */\n    D3DTSS_CONSTANT       = 32, /* Per-stage constant D3DTA_CONSTANT */\n\n\n    D3DTSS_FORCE_DWORD   = 0x7fffffff, /* force 32-bit size enum */\n} D3DTEXTURESTAGESTATETYPE;\n\n/*\n * State enumerants for per-sampler texture processing.\n */\ntypedef enum _D3DSAMPLERSTATETYPE\n{\n    D3DSAMP_ADDRESSU       = 1,  /* D3DTEXTUREADDRESS for U coordinate */\n    D3DSAMP_ADDRESSV       = 2,  /* D3DTEXTUREADDRESS for V coordinate */\n    D3DSAMP_ADDRESSW       = 3,  /* D3DTEXTUREADDRESS for W coordinate */\n    D3DSAMP_BORDERCOLOR    = 4,  /* D3DCOLOR */\n    D3DSAMP_MAGFILTER      = 5,  /* D3DTEXTUREFILTER filter to use for magnification */\n    D3DSAMP_MINFILTER      = 6,  /* D3DTEXTUREFILTER filter to use for minification */\n    D3DSAMP_MIPFILTER      = 7,  /* D3DTEXTUREFILTER filter to use between mipmaps during minification */\n    D3DSAMP_MIPMAPLODBIAS  = 8,  /* float Mipmap LOD bias */\n    D3DSAMP_MAXMIPLEVEL    = 9,  /* DWORD 0..(n-1) LOD index of largest map to use (0 == largest) */\n    D3DSAMP_MAXANISOTROPY  = 10, /* DWORD maximum anisotropy */\n    D3DSAMP_SRGBTEXTURE    = 11, /* Default = 0 (which means Gamma 1.0,\n                                   no correction required.) else correct for\n                                   Gamma = 2.2 */\n    D3DSAMP_ELEMENTINDEX   = 12, /* When multi-element texture is assigned to sampler, this\n                                    indicates which element index to use.  Default = 0.  */\n    D3DSAMP_DMAPOFFSET     = 13, /* Offset in vertices in the pre-sampled displacement map.\n                                    Only valid for D3DDMAPSAMPLER sampler  */\n    D3DSAMP_FORCE_DWORD   = 0x7fffffff, /* force 32-bit size enum */\n} D3DSAMPLERSTATETYPE;\n\n/* Special sampler which is used in the tesselator */\n#define D3DDMAPSAMPLER 256\n\n// Samplers used in vertex shaders\n#define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1)\n#define D3DVERTEXTEXTURESAMPLER1 (D3DDMAPSAMPLER+2)\n#define D3DVERTEXTEXTURESAMPLER2 (D3DDMAPSAMPLER+3)\n#define D3DVERTEXTEXTURESAMPLER3 (D3DDMAPSAMPLER+4)\n\n// Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position\n// and normal in the camera space) should be taken as texture coordinates\n// Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from\n//\n#define D3DTSS_TCI_PASSTHRU                             0x00000000\n#define D3DTSS_TCI_CAMERASPACENORMAL                    0x00010000\n#define D3DTSS_TCI_CAMERASPACEPOSITION                  0x00020000\n#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR          0x00030000\n#define D3DTSS_TCI_SPHEREMAP                            0x00040000\n\n/*\n * Enumerations for COLOROP and ALPHAOP texture blending operations set in\n * texture processing stage controls in D3DTSS.\n */\ntypedef enum _D3DTEXTUREOP\n{\n    // Control\n    D3DTOP_DISABLE              = 1,      // disables stage\n    D3DTOP_SELECTARG1           = 2,      // the default\n    D3DTOP_SELECTARG2           = 3,\n\n    // Modulate\n    D3DTOP_MODULATE             = 4,      // multiply args together\n    D3DTOP_MODULATE2X           = 5,      // multiply and  1 bit\n    D3DTOP_MODULATE4X           = 6,      // multiply and  2 bits\n\n    // Add\n    D3DTOP_ADD                  =  7,   // add arguments together\n    D3DTOP_ADDSIGNED            =  8,   // add with -0.5 bias\n    D3DTOP_ADDSIGNED2X          =  9,   // as above but left  1 bit\n    D3DTOP_SUBTRACT             = 10,   // Arg1 - Arg2, with no saturation\n    D3DTOP_ADDSMOOTH            = 11,   // add 2 args, subtract product\n                                        // Arg1 + Arg2 - Arg1*Arg2\n                                        // = Arg1 + (1-Arg1)*Arg2\n\n    // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha)\n    D3DTOP_BLENDDIFFUSEALPHA    = 12, // iterated alpha\n    D3DTOP_BLENDTEXTUREALPHA    = 13, // texture alpha\n    D3DTOP_BLENDFACTORALPHA     = 14, // alpha from D3DRS_TEXTUREFACTOR\n\n    // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha)\n    D3DTOP_BLENDTEXTUREALPHAPM  = 15, // texture alpha\n    D3DTOP_BLENDCURRENTALPHA    = 16, // by alpha of current color\n\n    // Specular mapping\n    D3DTOP_PREMODULATE            = 17,     // modulate with next texture before use\n    D3DTOP_MODULATEALPHA_ADDCOLOR = 18,     // Arg1.RGB + Arg1.A*Arg2.RGB\n                                            // COLOROP only\n    D3DTOP_MODULATECOLOR_ADDALPHA = 19,     // Arg1.RGB*Arg2.RGB + Arg1.A\n                                            // COLOROP only\n    D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,  // (1-Arg1.A)*Arg2.RGB + Arg1.RGB\n                                            // COLOROP only\n    D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,  // (1-Arg1.RGB)*Arg2.RGB + Arg1.A\n                                            // COLOROP only\n\n    // Bump mapping\n    D3DTOP_BUMPENVMAP           = 22, // per pixel env map perturbation\n    D3DTOP_BUMPENVMAPLUMINANCE  = 23, // with luminance channel\n\n    // This can do either diffuse or specular bump mapping with correct input.\n    // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B)\n    // where each component has been scaled and offset to make it signed.\n    // The result is replicated into all four (including alpha) channels.\n    // This is a valid COLOROP only.\n    D3DTOP_DOTPRODUCT3          = 24,\n\n    // Triadic ops\n    D3DTOP_MULTIPLYADD          = 25, // Arg0 + Arg1*Arg2\n    D3DTOP_LERP                 = 26, // (Arg0)*Arg1 + (1-Arg0)*Arg2\n\n    D3DTOP_FORCE_DWORD = 0x7fffffff,\n} D3DTEXTUREOP;\n\n/*\n * Values for COLORARG0,1,2, ALPHAARG0,1,2, and RESULTARG texture blending\n * operations set in texture processing stage controls in D3DRENDERSTATE.\n */\n#define D3DTA_SELECTMASK        0x0000000f  // mask for arg selector\n#define D3DTA_DIFFUSE           0x00000000  // select diffuse color (read only)\n#define D3DTA_CURRENT           0x00000001  // select stage destination register (read/write)\n#define D3DTA_TEXTURE           0x00000002  // select texture color (read only)\n#define D3DTA_TFACTOR           0x00000003  // select D3DRS_TEXTUREFACTOR (read only)\n#define D3DTA_SPECULAR          0x00000004  // select specular color (read only)\n#define D3DTA_TEMP              0x00000005  // select temporary register color (read/write)\n#define D3DTA_CONSTANT          0x00000006  // select texture stage constant\n#define D3DTA_COMPLEMENT        0x00000010  // take 1.0 - x (read modifier)\n#define D3DTA_ALPHAREPLICATE    0x00000020  // replicate alpha to color components (read modifier)\n\n//\n// Values for D3DSAMP_***FILTER texture stage states\n//\ntypedef enum _D3DTEXTUREFILTERTYPE\n{\n    D3DTEXF_NONE            = 0,    // filtering disabled (valid for mip filter only)\n    D3DTEXF_POINT           = 1,    // nearest\n    D3DTEXF_LINEAR          = 2,    // linear interpolation\n    D3DTEXF_ANISOTROPIC     = 3,    // anisotropic\n    D3DTEXF_PYRAMIDALQUAD   = 6,    // 4-sample tent\n    D3DTEXF_GAUSSIANQUAD    = 7,    // 4-sample gaussian\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n    D3DTEXF_CONVOLUTIONMONO = 8,    // Convolution filter for monochrome textures\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n    D3DTEXF_FORCE_DWORD     = 0x7fffffff,   // force 32-bit size enum\n} D3DTEXTUREFILTERTYPE;\n\n/* Bits for Flags in ProcessVertices call */\n\n#define D3DPV_DONOTCOPYDATA     (1 << 0)\n\n//-------------------------------------------------------------------\n\n// Flexible vertex format bits\n//\n#define D3DFVF_RESERVED0        0x001\n#define D3DFVF_POSITION_MASK    0x400E\n#define D3DFVF_XYZ              0x002\n#define D3DFVF_XYZRHW           0x004\n#define D3DFVF_XYZB1            0x006\n#define D3DFVF_XYZB2            0x008\n#define D3DFVF_XYZB3            0x00a\n#define D3DFVF_XYZB4            0x00c\n#define D3DFVF_XYZB5            0x00e\n#define D3DFVF_XYZW             0x4002\n\n#define D3DFVF_NORMAL           0x010\n#define D3DFVF_PSIZE            0x020\n#define D3DFVF_DIFFUSE          0x040\n#define D3DFVF_SPECULAR         0x080\n\n#define D3DFVF_TEXCOUNT_MASK    0xf00\n#define D3DFVF_TEXCOUNT_SHIFT   8\n#define D3DFVF_TEX0             0x000\n#define D3DFVF_TEX1             0x100\n#define D3DFVF_TEX2             0x200\n#define D3DFVF_TEX3             0x300\n#define D3DFVF_TEX4             0x400\n#define D3DFVF_TEX5             0x500\n#define D3DFVF_TEX6             0x600\n#define D3DFVF_TEX7             0x700\n#define D3DFVF_TEX8             0x800\n\n#define D3DFVF_LASTBETA_UBYTE4   0x1000\n#define D3DFVF_LASTBETA_D3DCOLOR 0x8000\n\n#define D3DFVF_RESERVED2         0x6000  // 2 reserved bits\n\n//---------------------------------------------------------------------\n// Vertex Shaders\n//\n\n// Vertex shader declaration\n\n// Vertex element semantics\n//\ntypedef enum _D3DDECLUSAGE\n{\n    D3DDECLUSAGE_POSITION = 0,\n    D3DDECLUSAGE_BLENDWEIGHT,   // 1\n    D3DDECLUSAGE_BLENDINDICES,  // 2\n    D3DDECLUSAGE_NORMAL,        // 3\n    D3DDECLUSAGE_PSIZE,         // 4\n    D3DDECLUSAGE_TEXCOORD,      // 5\n    D3DDECLUSAGE_TANGENT,       // 6\n    D3DDECLUSAGE_BINORMAL,      // 7\n    D3DDECLUSAGE_TESSFACTOR,    // 8\n    D3DDECLUSAGE_POSITIONT,     // 9\n    D3DDECLUSAGE_COLOR,         // 10\n    D3DDECLUSAGE_FOG,           // 11\n    D3DDECLUSAGE_DEPTH,         // 12\n    D3DDECLUSAGE_SAMPLE,        // 13\n} D3DDECLUSAGE;\n\n#define MAXD3DDECLUSAGE         D3DDECLUSAGE_SAMPLE\n#define MAXD3DDECLUSAGEINDEX    15\n#define MAXD3DDECLLENGTH        64 // does not include \"end\" marker vertex element\n\ntypedef enum _D3DDECLMETHOD\n{\n    D3DDECLMETHOD_DEFAULT = 0,\n    D3DDECLMETHOD_PARTIALU,\n    D3DDECLMETHOD_PARTIALV,\n    D3DDECLMETHOD_CROSSUV,    // Normal\n    D3DDECLMETHOD_UV,\n    D3DDECLMETHOD_LOOKUP,               // Lookup a displacement map\n    D3DDECLMETHOD_LOOKUPPRESAMPLED,     // Lookup a pre-sampled displacement map\n} D3DDECLMETHOD;\n\n#define MAXD3DDECLMETHOD D3DDECLMETHOD_LOOKUPPRESAMPLED\n\n// Declarations for _Type fields\n//\ntypedef enum _D3DDECLTYPE\n{\n    D3DDECLTYPE_FLOAT1    =  0,  // 1D float expanded to (value, 0., 0., 1.)\n    D3DDECLTYPE_FLOAT2    =  1,  // 2D float expanded to (value, value, 0., 1.)\n    D3DDECLTYPE_FLOAT3    =  2,  // 3D float expanded to (value, value, value, 1.)\n    D3DDECLTYPE_FLOAT4    =  3,  // 4D float\n    D3DDECLTYPE_D3DCOLOR  =  4,  // 4D packed unsigned bytes mapped to 0. to 1. range\n                                 // Input is in D3DCOLOR format (ARGB) expanded to (R, G, B, A)\n    D3DDECLTYPE_UBYTE4    =  5,  // 4D unsigned byte\n    D3DDECLTYPE_SHORT2    =  6,  // 2D signed short expanded to (value, value, 0., 1.)\n    D3DDECLTYPE_SHORT4    =  7,  // 4D signed short\n\n// The following types are valid only with vertex shaders >= 2.0\n\n\n    D3DDECLTYPE_UBYTE4N   =  8,  // Each of 4 bytes is normalized by dividing to 255.0\n    D3DDECLTYPE_SHORT2N   =  9,  // 2D signed short normalized (v[0]/32767.0,v[1]/32767.0,0,1)\n    D3DDECLTYPE_SHORT4N   = 10,  // 4D signed short normalized (v[0]/32767.0,v[1]/32767.0,v[2]/32767.0,v[3]/32767.0)\n    D3DDECLTYPE_USHORT2N  = 11,  // 2D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,0,1)\n    D3DDECLTYPE_USHORT4N  = 12,  // 4D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,v[2]/65535.0,v[3]/65535.0)\n    D3DDECLTYPE_UDEC3     = 13,  // 3D unsigned 10 10 10 format expanded to (value, value, value, 1)\n    D3DDECLTYPE_DEC3N     = 14,  // 3D signed 10 10 10 format normalized and expanded to (v[0]/511.0, v[1]/511.0, v[2]/511.0, 1)\n    D3DDECLTYPE_FLOAT16_2 = 15,  // Two 16-bit floating point values, expanded to (value, value, 0, 1)\n    D3DDECLTYPE_FLOAT16_4 = 16,  // Four 16-bit floating point values\n    D3DDECLTYPE_UNUSED    = 17,  // When the type field in a decl is unused.\n} D3DDECLTYPE;\n\n#define MAXD3DDECLTYPE      D3DDECLTYPE_UNUSED\n\ntypedef struct _D3DVERTEXELEMENT9\n{\n    WORD    Stream;     // Stream index\n    WORD    Offset;     // Offset in the stream in bytes\n    BYTE    Type;       // Data type\n    BYTE    Method;     // Processing method\n    BYTE    Usage;      // Semantics\n    BYTE    UsageIndex; // Semantic index\n} D3DVERTEXELEMENT9, *LPD3DVERTEXELEMENT9;\n\n// This is used to initialize the last vertex element in a vertex declaration\n// array\n//\n#define D3DDECL_END() {0xFF,0,D3DDECLTYPE_UNUSED,0,0,0}\n\n// Maximum supported number of texture coordinate sets\n#define D3DDP_MAXTEXCOORD   8\n\n//---------------------------------------------------------------------\n// Values for IDirect3DDevice9::SetStreamSourceFreq's Setting parameter\n//---------------------------------------------------------------------\n#define D3DSTREAMSOURCE_INDEXEDDATA  (1<<30)\n#define D3DSTREAMSOURCE_INSTANCEDATA (2<<30)\n\n\n\n//---------------------------------------------------------------------\n//\n// The internal format of Pixel Shader (PS) & Vertex Shader (VS)\n// Instruction Tokens is defined in the Direct3D Device Driver Kit\n//\n//---------------------------------------------------------------------\n\n//\n// Instruction Token Bit Definitions\n//\n#define D3DSI_OPCODE_MASK       0x0000FFFF\n\n#define D3DSI_INSTLENGTH_MASK   0x0F000000\n#define D3DSI_INSTLENGTH_SHIFT  24\n\ntypedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE\n{\n    D3DSIO_NOP          = 0,\n    D3DSIO_MOV          ,\n    D3DSIO_ADD          ,\n    D3DSIO_SUB          ,\n    D3DSIO_MAD          ,\n    D3DSIO_MUL          ,\n    D3DSIO_RCP          ,\n    D3DSIO_RSQ          ,\n    D3DSIO_DP3          ,\n    D3DSIO_DP4          ,\n    D3DSIO_MIN          ,\n    D3DSIO_MAX          ,\n    D3DSIO_SLT          ,\n    D3DSIO_SGE          ,\n    D3DSIO_EXP          ,\n    D3DSIO_LOG          ,\n    D3DSIO_LIT          ,\n    D3DSIO_DST          ,\n    D3DSIO_LRP          ,\n    D3DSIO_FRC          ,\n    D3DSIO_M4x4         ,\n    D3DSIO_M4x3         ,\n    D3DSIO_M3x4         ,\n    D3DSIO_M3x3         ,\n    D3DSIO_M3x2         ,\n    D3DSIO_CALL         ,\n    D3DSIO_CALLNZ       ,\n    D3DSIO_LOOP         ,\n    D3DSIO_RET          ,\n    D3DSIO_ENDLOOP      ,\n    D3DSIO_LABEL        ,\n    D3DSIO_DCL          ,\n    D3DSIO_POW          ,\n    D3DSIO_CRS          ,\n    D3DSIO_SGN          ,\n    D3DSIO_ABS          ,\n    D3DSIO_NRM          ,\n    D3DSIO_SINCOS       ,\n    D3DSIO_REP          ,\n    D3DSIO_ENDREP       ,\n    D3DSIO_IF           ,\n    D3DSIO_IFC          ,\n    D3DSIO_ELSE         ,\n    D3DSIO_ENDIF        ,\n    D3DSIO_BREAK        ,\n    D3DSIO_BREAKC       ,\n    D3DSIO_MOVA         ,\n    D3DSIO_DEFB         ,\n    D3DSIO_DEFI         ,\n\n    D3DSIO_TEXCOORD     = 64,\n    D3DSIO_TEXKILL      ,\n    D3DSIO_TEX          ,\n    D3DSIO_TEXBEM       ,\n    D3DSIO_TEXBEML      ,\n    D3DSIO_TEXREG2AR    ,\n    D3DSIO_TEXREG2GB    ,\n    D3DSIO_TEXM3x2PAD   ,\n    D3DSIO_TEXM3x2TEX   ,\n    D3DSIO_TEXM3x3PAD   ,\n    D3DSIO_TEXM3x3TEX   ,\n    D3DSIO_RESERVED0    ,\n    D3DSIO_TEXM3x3SPEC  ,\n    D3DSIO_TEXM3x3VSPEC ,\n    D3DSIO_EXPP         ,\n    D3DSIO_LOGP         ,\n    D3DSIO_CND          ,\n    D3DSIO_DEF          ,\n    D3DSIO_TEXREG2RGB   ,\n    D3DSIO_TEXDP3TEX    ,\n    D3DSIO_TEXM3x2DEPTH ,\n    D3DSIO_TEXDP3       ,\n    D3DSIO_TEXM3x3      ,\n    D3DSIO_TEXDEPTH     ,\n    D3DSIO_CMP          ,\n    D3DSIO_BEM          ,\n    D3DSIO_DP2ADD       ,\n    D3DSIO_DSX          ,\n    D3DSIO_DSY          ,\n    D3DSIO_TEXLDD       ,\n    D3DSIO_SETP         ,\n    D3DSIO_TEXLDL       ,\n    D3DSIO_BREAKP       ,\n\n    D3DSIO_PHASE        = 0xFFFD,\n    D3DSIO_COMMENT      = 0xFFFE,\n    D3DSIO_END          = 0xFFFF,\n\n    D3DSIO_FORCE_DWORD  = 0x7fffffff,   // force 32-bit size enum\n} D3DSHADER_INSTRUCTION_OPCODE_TYPE;\n\n//---------------------------------------------------------------------\n// Use these constants with D3DSIO_SINCOS macro as SRC2, SRC3\n//\n#define D3DSINCOSCONST1 -1.5500992e-006f, -2.1701389e-005f,  0.0026041667f, 0.00026041668f\n#define D3DSINCOSCONST2 -0.020833334f, -0.12500000f, 1.0f, 0.50000000f\n\n//---------------------------------------------------------------------\n// Co-Issue Instruction Modifier - if set then this instruction is to be\n// issued in parallel with the previous instruction(s) for which this bit\n// is not set.\n//\n#define D3DSI_COISSUE           0x40000000\n\n//---------------------------------------------------------------------\n// Opcode specific controls\n\n#define D3DSP_OPCODESPECIFICCONTROL_MASK  0x00ff0000\n#define D3DSP_OPCODESPECIFICCONTROL_SHIFT 16\n\n// ps_2_0 texld controls\n#define D3DSI_TEXLD_PROJECT (0x01 << D3DSP_OPCODESPECIFICCONTROL_SHIFT)\n#define D3DSI_TEXLD_BIAS    (0x02 << D3DSP_OPCODESPECIFICCONTROL_SHIFT)\n\n// Comparison for dynamic conditional instruction opcodes (i.e. if, breakc)\ntypedef enum _D3DSHADER_COMPARISON\n{\n                         // < = >\n    D3DSPC_RESERVED0= 0, // 0 0 0\n    D3DSPC_GT       = 1, // 0 0 1\n    D3DSPC_EQ       = 2, // 0 1 0\n    D3DSPC_GE       = 3, // 0 1 1\n    D3DSPC_LT       = 4, // 1 0 0\n    D3DSPC_NE       = 5, // 1 0 1\n    D3DSPC_LE       = 6, // 1 1 0\n    D3DSPC_RESERVED1= 7  // 1 1 1\n} D3DSHADER_COMPARISON;\n\n// Comparison is part of instruction opcode token:\n#define D3DSHADER_COMPARISON_SHIFT D3DSP_OPCODESPECIFICCONTROL_SHIFT\n#define D3DSHADER_COMPARISON_MASK  (0x7<<D3DSHADER_COMPARISON_SHIFT)\n\n//---------------------------------------------------------------------\n// Predication flags on instruction token\n#define D3DSHADER_INSTRUCTION_PREDICATED    (0x1 << 28)\n\n//---------------------------------------------------------------------\n// DCL Info Token Controls\n\n// For dcl info tokens requiring a semantic (usage + index)\n#define D3DSP_DCL_USAGE_SHIFT 0\n#define D3DSP_DCL_USAGE_MASK  0x0000000f\n\n#define D3DSP_DCL_USAGEINDEX_SHIFT 16\n#define D3DSP_DCL_USAGEINDEX_MASK  0x000f0000\n\n// DCL pixel shader sampler info token.\n#define D3DSP_TEXTURETYPE_SHIFT 27\n#define D3DSP_TEXTURETYPE_MASK  0x78000000\n\ntypedef enum _D3DSAMPLER_TEXTURE_TYPE\n{\n    D3DSTT_UNKNOWN = 0<<D3DSP_TEXTURETYPE_SHIFT, // uninitialized value\n    D3DSTT_2D      = 2<<D3DSP_TEXTURETYPE_SHIFT, // dcl_2d s# (for declaring a 2-D texture)\n    D3DSTT_CUBE    = 3<<D3DSP_TEXTURETYPE_SHIFT, // dcl_cube s# (for declaring a cube texture)\n    D3DSTT_VOLUME  = 4<<D3DSP_TEXTURETYPE_SHIFT, // dcl_volume s# (for declaring a volume texture)\n    D3DSTT_FORCE_DWORD  = 0x7fffffff,      // force 32-bit size enum\n} D3DSAMPLER_TEXTURE_TYPE;\n\n//---------------------------------------------------------------------\n// Parameter Token Bit Definitions\n//\n#define D3DSP_REGNUM_MASK       0x000007FF\n\n// destination parameter write mask\n#define D3DSP_WRITEMASK_0       0x00010000  // Component 0 (X;Red)\n#define D3DSP_WRITEMASK_1       0x00020000  // Component 1 (Y;Green)\n#define D3DSP_WRITEMASK_2       0x00040000  // Component 2 (Z;Blue)\n#define D3DSP_WRITEMASK_3       0x00080000  // Component 3 (W;Alpha)\n#define D3DSP_WRITEMASK_ALL     0x000F0000  // All Components\n\n// destination parameter modifiers\n#define D3DSP_DSTMOD_SHIFT      20\n#define D3DSP_DSTMOD_MASK       0x00F00000\n\n// Bit masks for destination parameter modifiers\n#define    D3DSPDM_NONE                 (0<<D3DSP_DSTMOD_SHIFT) // nop\n#define    D3DSPDM_SATURATE             (1<<D3DSP_DSTMOD_SHIFT) // clamp to 0. to 1. range\n#define    D3DSPDM_PARTIALPRECISION     (2<<D3DSP_DSTMOD_SHIFT) // Partial precision hint\n#define    D3DSPDM_MSAMPCENTROID        (4<<D3DSP_DSTMOD_SHIFT) // Relevant to multisampling only:\n                                                                //      When the pixel center is not covered, sample\n                                                                //      attribute or compute gradients/LOD\n                                                                //      using multisample \"centroid\" location.\n                                                                //      \"Centroid\" is some location within the covered\n                                                                //      region of the pixel.\n\n// destination parameter \n#define D3DSP_DSTSHIFT_SHIFT    24\n#define D3DSP_DSTSHIFT_MASK     0x0F000000\n\n// destination/source parameter register type\n#define D3DSP_REGTYPE_SHIFT     28\n#define D3DSP_REGTYPE_SHIFT2    8\n#define D3DSP_REGTYPE_MASK      0x70000000\n#define D3DSP_REGTYPE_MASK2     0x00001800\n\ntypedef enum _D3DSHADER_PARAM_REGISTER_TYPE\n{\n    D3DSPR_TEMP           =  0, // Temporary Register File\n    D3DSPR_INPUT          =  1, // Input Register File\n    D3DSPR_CONST          =  2, // Constant Register File\n    D3DSPR_ADDR           =  3, // Address Register (VS)\n    D3DSPR_TEXTURE        =  3, // Texture Register File (PS)\n    D3DSPR_RASTOUT        =  4, // Rasterizer Register File\n    D3DSPR_ATTROUT        =  5, // Attribute Output Register File\n    D3DSPR_TEXCRDOUT      =  6, // Texture Coordinate Output Register File\n    D3DSPR_OUTPUT         =  6, // Output register file for VS3.0+\n    D3DSPR_CONSTINT       =  7, // Constant Integer Vector Register File\n    D3DSPR_COLOROUT       =  8, // Color Output Register File\n    D3DSPR_DEPTHOUT       =  9, // Depth Output Register File\n    D3DSPR_SAMPLER        = 10, // Sampler State Register File\n    D3DSPR_CONST2         = 11, // Constant Register File  2048 - 4095\n    D3DSPR_CONST3         = 12, // Constant Register File  4096 - 6143\n    D3DSPR_CONST4         = 13, // Constant Register File  6144 - 8191\n    D3DSPR_CONSTBOOL      = 14, // Constant Boolean register file\n    D3DSPR_LOOP           = 15, // Loop counter register file\n    D3DSPR_TEMPFLOAT16    = 16, // 16-bit float temp register file\n    D3DSPR_MISCTYPE       = 17, // Miscellaneous (single) registers.\n    D3DSPR_LABEL          = 18, // Label\n    D3DSPR_PREDICATE      = 19, // Predicate register\n    D3DSPR_FORCE_DWORD  = 0x7fffffff,         // force 32-bit size enum\n} D3DSHADER_PARAM_REGISTER_TYPE;\n\n// The miscellaneous register file (D3DSPR_MISCTYPES)\n// contains register types for which there is only ever one\n// register (i.e. the register # is not needed).\n// Rather than use up additional register types for such\n// registers, they are defined\n// as particular offsets into the misc. register file:\ntypedef enum _D3DSHADER_MISCTYPE_OFFSETS\n{\n    D3DSMO_POSITION   = 0, // Input position x,y,z,rhw (PS)\n    D3DSMO_FACE   = 1, // Floating point primitive area (PS)\n} D3DSHADER_MISCTYPE_OFFSETS;\n\n// Register offsets in the Rasterizer Register File\n//\ntypedef enum _D3DVS_RASTOUT_OFFSETS\n{\n    D3DSRO_POSITION = 0,\n    D3DSRO_FOG,\n    D3DSRO_POINT_SIZE,\n    D3DSRO_FORCE_DWORD  = 0x7fffffff,         // force 32-bit size enum\n} D3DVS_RASTOUT_OFFSETS;\n\n// Source operand addressing modes\n\n#define D3DVS_ADDRESSMODE_SHIFT 13\n#define D3DVS_ADDRESSMODE_MASK  (1 << D3DVS_ADDRESSMODE_SHIFT)\n\ntypedef enum _D3DVS_ADDRESSMODE_TYPE\n{\n    D3DVS_ADDRMODE_ABSOLUTE  = (0 << D3DVS_ADDRESSMODE_SHIFT),\n    D3DVS_ADDRMODE_RELATIVE  = (1 << D3DVS_ADDRESSMODE_SHIFT),\n    D3DVS_ADDRMODE_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum\n} D3DVS_ADDRESSMODE_TYPE;\n\n#define D3DSHADER_ADDRESSMODE_SHIFT 13\n#define D3DSHADER_ADDRESSMODE_MASK  (1 << D3DSHADER_ADDRESSMODE_SHIFT)\n\ntypedef enum _D3DSHADER_ADDRESSMODE_TYPE\n{\n    D3DSHADER_ADDRMODE_ABSOLUTE  = (0 << D3DSHADER_ADDRESSMODE_SHIFT),\n    D3DSHADER_ADDRMODE_RELATIVE  = (1 << D3DSHADER_ADDRESSMODE_SHIFT),\n    D3DSHADER_ADDRMODE_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum\n} D3DSHADER_ADDRESSMODE_TYPE;\n\n// Source operand swizzle definitions\n//\n#define D3DVS_SWIZZLE_SHIFT     16\n#define D3DVS_SWIZZLE_MASK      0x00FF0000\n\n// The following bits define where to take component X from:\n\n#define D3DVS_X_X       (0 << D3DVS_SWIZZLE_SHIFT)\n#define D3DVS_X_Y       (1 << D3DVS_SWIZZLE_SHIFT)\n#define D3DVS_X_Z       (2 << D3DVS_SWIZZLE_SHIFT)\n#define D3DVS_X_W       (3 << D3DVS_SWIZZLE_SHIFT)\n\n// The following bits define where to take component Y from:\n\n#define D3DVS_Y_X       (0 << (D3DVS_SWIZZLE_SHIFT + 2))\n#define D3DVS_Y_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 2))\n#define D3DVS_Y_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 2))\n#define D3DVS_Y_W       (3 << (D3DVS_SWIZZLE_SHIFT + 2))\n\n// The following bits define where to take component Z from:\n\n#define D3DVS_Z_X       (0 << (D3DVS_SWIZZLE_SHIFT + 4))\n#define D3DVS_Z_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 4))\n#define D3DVS_Z_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 4))\n#define D3DVS_Z_W       (3 << (D3DVS_SWIZZLE_SHIFT + 4))\n\n// The following bits define where to take component W from:\n\n#define D3DVS_W_X       (0 << (D3DVS_SWIZZLE_SHIFT + 6))\n#define D3DVS_W_Y       (1 << (D3DVS_SWIZZLE_SHIFT + 6))\n#define D3DVS_W_Z       (2 << (D3DVS_SWIZZLE_SHIFT + 6))\n#define D3DVS_W_W       (3 << (D3DVS_SWIZZLE_SHIFT + 6))\n\n// Value when there is no swizzle (X is taken from X, Y is taken from Y,\n// Z is taken from Z, W is taken from W\n//\n#define D3DVS_NOSWIZZLE (D3DVS_X_X | D3DVS_Y_Y | D3DVS_Z_Z | D3DVS_W_W)\n\n// source parameter swizzle\n#define D3DSP_SWIZZLE_SHIFT     16\n#define D3DSP_SWIZZLE_MASK      0x00FF0000\n\n#define D3DSP_NOSWIZZLE \\\n    ( (0 << (D3DSP_SWIZZLE_SHIFT + 0)) | \\\n      (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | \\\n      (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | \\\n      (3 << (D3DSP_SWIZZLE_SHIFT + 6)) )\n\n// pixel-shader swizzle ops\n#define D3DSP_REPLICATERED \\\n    ( (0 << (D3DSP_SWIZZLE_SHIFT + 0)) | \\\n      (0 << (D3DSP_SWIZZLE_SHIFT + 2)) | \\\n      (0 << (D3DSP_SWIZZLE_SHIFT + 4)) | \\\n      (0 << (D3DSP_SWIZZLE_SHIFT + 6)) )\n\n#define D3DSP_REPLICATEGREEN \\\n    ( (1 << (D3DSP_SWIZZLE_SHIFT + 0)) | \\\n      (1 << (D3DSP_SWIZZLE_SHIFT + 2)) | \\\n      (1 << (D3DSP_SWIZZLE_SHIFT + 4)) | \\\n      (1 << (D3DSP_SWIZZLE_SHIFT + 6)) )\n\n#define D3DSP_REPLICATEBLUE \\\n    ( (2 << (D3DSP_SWIZZLE_SHIFT + 0)) | \\\n      (2 << (D3DSP_SWIZZLE_SHIFT + 2)) | \\\n      (2 << (D3DSP_SWIZZLE_SHIFT + 4)) | \\\n      (2 << (D3DSP_SWIZZLE_SHIFT + 6)) )\n\n#define D3DSP_REPLICATEALPHA \\\n    ( (3 << (D3DSP_SWIZZLE_SHIFT + 0)) | \\\n      (3 << (D3DSP_SWIZZLE_SHIFT + 2)) | \\\n      (3 << (D3DSP_SWIZZLE_SHIFT + 4)) | \\\n      (3 << (D3DSP_SWIZZLE_SHIFT + 6)) )\n\n// source parameter modifiers\n#define D3DSP_SRCMOD_SHIFT      24\n#define D3DSP_SRCMOD_MASK       0x0F000000\n\ntypedef enum _D3DSHADER_PARAM_SRCMOD_TYPE\n{\n    D3DSPSM_NONE    = 0<<D3DSP_SRCMOD_SHIFT, // nop\n    D3DSPSM_NEG     = 1<<D3DSP_SRCMOD_SHIFT, // negate\n    D3DSPSM_BIAS    = 2<<D3DSP_SRCMOD_SHIFT, // bias\n    D3DSPSM_BIASNEG = 3<<D3DSP_SRCMOD_SHIFT, // bias and negate\n    D3DSPSM_SIGN    = 4<<D3DSP_SRCMOD_SHIFT, // sign\n    D3DSPSM_SIGNNEG = 5<<D3DSP_SRCMOD_SHIFT, // sign and negate\n    D3DSPSM_COMP    = 6<<D3DSP_SRCMOD_SHIFT, // complement\n    D3DSPSM_X2      = 7<<D3DSP_SRCMOD_SHIFT, // *2\n    D3DSPSM_X2NEG   = 8<<D3DSP_SRCMOD_SHIFT, // *2 and negate\n    D3DSPSM_DZ      = 9<<D3DSP_SRCMOD_SHIFT, // divide through by z component\n    D3DSPSM_DW      = 10<<D3DSP_SRCMOD_SHIFT, // divide through by w component\n    D3DSPSM_ABS     = 11<<D3DSP_SRCMOD_SHIFT, // abs()\n    D3DSPSM_ABSNEG  = 12<<D3DSP_SRCMOD_SHIFT, // -abs()\n    D3DSPSM_NOT     = 13<<D3DSP_SRCMOD_SHIFT, // for predicate register: \"!p0\"\n    D3DSPSM_FORCE_DWORD = 0x7fffffff,        // force 32-bit size enum\n} D3DSHADER_PARAM_SRCMOD_TYPE;\n\n// pixel shader version token\n#define D3DPS_VERSION(_Major,_Minor) (0xFFFF0000|((_Major)<<8)|(_Minor))\n\n// vertex shader version token\n#define D3DVS_VERSION(_Major,_Minor) (0xFFFE0000|((_Major)<<8)|(_Minor))\n\n// extract major/minor from version cap\n#define D3DSHADER_VERSION_MAJOR(_Version) (((_Version)>>8)&0xFF)\n#define D3DSHADER_VERSION_MINOR(_Version) (((_Version)>>0)&0xFF)\n\n// destination/source parameter register type\n#define D3DSI_COMMENTSIZE_SHIFT     16\n#define D3DSI_COMMENTSIZE_MASK      0x7FFF0000\n#define D3DSHADER_COMMENT(_DWordSize) \\\n    ((((_DWordSize)<<D3DSI_COMMENTSIZE_SHIFT)&D3DSI_COMMENTSIZE_MASK)|D3DSIO_COMMENT)\n\n// pixel/vertex shader end token\n#define D3DPS_END()  0x0000FFFF\n#define D3DVS_END()  0x0000FFFF\n\n\n//---------------------------------------------------------------------\n\n// High order surfaces\n//\ntypedef enum _D3DBASISTYPE\n{\n   D3DBASIS_BEZIER      = 0,\n   D3DBASIS_BSPLINE     = 1,\n   D3DBASIS_CATMULL_ROM = 2, /* In D3D8 this used to be D3DBASIS_INTERPOLATE */\n   D3DBASIS_FORCE_DWORD = 0x7fffffff,\n} D3DBASISTYPE;\n\ntypedef enum _D3DDEGREETYPE\n{\n   D3DDEGREE_LINEAR      = 1,\n   D3DDEGREE_QUADRATIC   = 2,\n   D3DDEGREE_CUBIC       = 3,\n   D3DDEGREE_QUINTIC     = 5,\n   D3DDEGREE_FORCE_DWORD = 0x7fffffff,\n} D3DDEGREETYPE;\n\ntypedef enum _D3DPATCHEDGESTYLE\n{\n   D3DPATCHEDGE_DISCRETE    = 0,\n   D3DPATCHEDGE_CONTINUOUS  = 1,\n   D3DPATCHEDGE_FORCE_DWORD = 0x7fffffff,\n} D3DPATCHEDGESTYLE;\n\ntypedef enum _D3DSTATEBLOCKTYPE\n{\n    D3DSBT_ALL           = 1, // capture all state\n    D3DSBT_PIXELSTATE    = 2, // capture pixel state\n    D3DSBT_VERTEXSTATE   = 3, // capture vertex state\n    D3DSBT_FORCE_DWORD   = 0x7fffffff,\n} D3DSTATEBLOCKTYPE;\n\n// The D3DVERTEXBLENDFLAGS type is used with D3DRS_VERTEXBLEND state.\n//\ntypedef enum _D3DVERTEXBLENDFLAGS\n{\n    D3DVBF_DISABLE  = 0,     // Disable vertex blending\n    D3DVBF_1WEIGHTS = 1,     // 2 matrix blending\n    D3DVBF_2WEIGHTS = 2,     // 3 matrix blending\n    D3DVBF_3WEIGHTS = 3,     // 4 matrix blending\n    D3DVBF_TWEENING = 255,   // blending using D3DRS_TWEENFACTOR\n    D3DVBF_0WEIGHTS = 256,   // one matrix is used with weight 1.0\n    D3DVBF_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum\n} D3DVERTEXBLENDFLAGS;\n\ntypedef enum _D3DTEXTURETRANSFORMFLAGS {\n    D3DTTFF_DISABLE         = 0,    // texture coordinates are passed directly\n    D3DTTFF_COUNT1          = 1,    // rasterizer should expect 1-D texture coords\n    D3DTTFF_COUNT2          = 2,    // rasterizer should expect 2-D texture coords\n    D3DTTFF_COUNT3          = 3,    // rasterizer should expect 3-D texture coords\n    D3DTTFF_COUNT4          = 4,    // rasterizer should expect 4-D texture coords\n    D3DTTFF_PROJECTED       = 256,  // texcoords to be divided by COUNTth element\n    D3DTTFF_FORCE_DWORD     = 0x7fffffff,\n} D3DTEXTURETRANSFORMFLAGS;\n\n// Macros to set texture coordinate format bits in the FVF id\n\n#define D3DFVF_TEXTUREFORMAT2 0         // Two floating point values\n#define D3DFVF_TEXTUREFORMAT1 3         // One floating point value\n#define D3DFVF_TEXTUREFORMAT3 1         // Three floating point values\n#define D3DFVF_TEXTUREFORMAT4 2         // Four floating point values\n\n#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))\n#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)\n#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))\n#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))\n\n\n//---------------------------------------------------------------------\n\n/* Direct3D9 Device types */\ntypedef enum _D3DDEVTYPE\n{\n    D3DDEVTYPE_HAL         = 1,\n    D3DDEVTYPE_REF         = 2,\n    D3DDEVTYPE_SW          = 3,\n\n    D3DDEVTYPE_NULLREF     = 4,\n\n    D3DDEVTYPE_FORCE_DWORD  = 0x7fffffff\n} D3DDEVTYPE;\n\n/* Multi-Sample buffer types */\ntypedef enum _D3DMULTISAMPLE_TYPE\n{\n    D3DMULTISAMPLE_NONE            =  0,\n    D3DMULTISAMPLE_NONMASKABLE     =  1,\n    D3DMULTISAMPLE_2_SAMPLES       =  2,\n    D3DMULTISAMPLE_3_SAMPLES       =  3,\n    D3DMULTISAMPLE_4_SAMPLES       =  4,\n    D3DMULTISAMPLE_5_SAMPLES       =  5,\n    D3DMULTISAMPLE_6_SAMPLES       =  6,\n    D3DMULTISAMPLE_7_SAMPLES       =  7,\n    D3DMULTISAMPLE_8_SAMPLES       =  8,\n    D3DMULTISAMPLE_9_SAMPLES       =  9,\n    D3DMULTISAMPLE_10_SAMPLES      = 10,\n    D3DMULTISAMPLE_11_SAMPLES      = 11,\n    D3DMULTISAMPLE_12_SAMPLES      = 12,\n    D3DMULTISAMPLE_13_SAMPLES      = 13,\n    D3DMULTISAMPLE_14_SAMPLES      = 14,\n    D3DMULTISAMPLE_15_SAMPLES      = 15,\n    D3DMULTISAMPLE_16_SAMPLES      = 16,\n\n    D3DMULTISAMPLE_FORCE_DWORD     = 0x7fffffff\n} D3DMULTISAMPLE_TYPE;\n\n/* Formats\n * Most of these names have the following convention:\n *      A = Alpha\n *      R = Red\n *      G = Green\n *      B = Blue\n *      X = Unused Bits\n *      P = Palette\n *      L = Luminance\n *      U = dU coordinate for BumpMap\n *      V = dV coordinate for BumpMap\n *      S = Stencil\n *      D = Depth (e.g. Z or W buffer)\n *      C = Computed from other channels (typically on certain read operations)\n *\n *      Further, the order of the pieces are from MSB first; hence\n *      D3DFMT_A8L8 indicates that the high byte of this two byte\n *      format is alpha.\n *\n *      D3DFMT_D16_LOCKABLE indicates:\n *           - An integer 16-bit value.\n *           - An app-lockable surface.\n *\n *      D3DFMT_D32F_LOCKABLE indicates:\n *           - An IEEE 754 floating-point value.\n *           - An app-lockable surface.\n *\n *      All Depth/Stencil formats except D3DFMT_D16_LOCKABLE and D3DFMT_D32F_LOCKABLE indicate:\n *          - no particular bit ordering per pixel, and\n *          - are not app lockable, and\n *          - the driver is allowed to consume more than the indicated\n *            number of bits per Depth channel (but not Stencil channel).\n */\n#ifndef MAKEFOURCC\n    #define MAKEFOURCC(ch0, ch1, ch2, ch3)                              \\\n                ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |       \\\n                ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))\n#endif /* defined(MAKEFOURCC) */\n\n\ntypedef enum _D3DFORMAT\n{\n    D3DFMT_UNKNOWN              =  0,\n\n    D3DFMT_R8G8B8               = 20,\n    D3DFMT_A8R8G8B8             = 21,\n    D3DFMT_X8R8G8B8             = 22,\n    D3DFMT_R5G6B5               = 23,\n    D3DFMT_X1R5G5B5             = 24,\n    D3DFMT_A1R5G5B5             = 25,\n    D3DFMT_A4R4G4B4             = 26,\n    D3DFMT_R3G3B2               = 27,\n    D3DFMT_A8                   = 28,\n    D3DFMT_A8R3G3B2             = 29,\n    D3DFMT_X4R4G4B4             = 30,\n    D3DFMT_A2B10G10R10          = 31,\n    D3DFMT_A8B8G8R8             = 32,\n    D3DFMT_X8B8G8R8             = 33,\n    D3DFMT_G16R16               = 34,\n    D3DFMT_A2R10G10B10          = 35,\n    D3DFMT_A16B16G16R16         = 36,\n\n    D3DFMT_A8P8                 = 40,\n    D3DFMT_P8                   = 41,\n\n    D3DFMT_L8                   = 50,\n    D3DFMT_A8L8                 = 51,\n    D3DFMT_A4L4                 = 52,\n\n    D3DFMT_V8U8                 = 60,\n    D3DFMT_L6V5U5               = 61,\n    D3DFMT_X8L8V8U8             = 62,\n    D3DFMT_Q8W8V8U8             = 63,\n    D3DFMT_V16U16               = 64,\n    D3DFMT_A2W10V10U10          = 67,\n\n    D3DFMT_UYVY                 = MAKEFOURCC('U', 'Y', 'V', 'Y'),\n    D3DFMT_R8G8_B8G8            = MAKEFOURCC('R', 'G', 'B', 'G'),\n    D3DFMT_YUY2                 = MAKEFOURCC('Y', 'U', 'Y', '2'),\n    D3DFMT_G8R8_G8B8            = MAKEFOURCC('G', 'R', 'G', 'B'),\n    D3DFMT_DXT1                 = MAKEFOURCC('D', 'X', 'T', '1'),\n    D3DFMT_DXT2                 = MAKEFOURCC('D', 'X', 'T', '2'),\n    D3DFMT_DXT3                 = MAKEFOURCC('D', 'X', 'T', '3'),\n    D3DFMT_DXT4                 = MAKEFOURCC('D', 'X', 'T', '4'),\n    D3DFMT_DXT5                 = MAKEFOURCC('D', 'X', 'T', '5'),\n\n    D3DFMT_D16_LOCKABLE         = 70,\n    D3DFMT_D32                  = 71,\n    D3DFMT_D15S1                = 73,\n    D3DFMT_D24S8                = 75,\n    D3DFMT_D24X8                = 77,\n    D3DFMT_D24X4S4              = 79,\n    D3DFMT_D16                  = 80,\n\n    D3DFMT_D32F_LOCKABLE        = 82,\n    D3DFMT_D24FS8               = 83,\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n    /* Z-Stencil formats valid for CPU access */\n    D3DFMT_D32_LOCKABLE         = 84,\n    D3DFMT_S8_LOCKABLE          = 85,\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n\n    D3DFMT_L16                  = 81,\n\n    D3DFMT_VERTEXDATA           =100,\n    D3DFMT_INDEX16              =101,\n    D3DFMT_INDEX32              =102,\n\n    D3DFMT_Q16W16V16U16         =110,\n\n    D3DFMT_MULTI2_ARGB8         = MAKEFOURCC('M','E','T','1'),\n\n    // Floating point surface formats\n\n    // s10e5 formats (16-bits per channel)\n    D3DFMT_R16F                 = 111,\n    D3DFMT_G16R16F              = 112,\n    D3DFMT_A16B16G16R16F        = 113,\n\n    // IEEE s23e8 formats (32-bits per channel)\n    D3DFMT_R32F                 = 114,\n    D3DFMT_G32R32F              = 115,\n    D3DFMT_A32B32G32R32F        = 116,\n\n    D3DFMT_CxV8U8               = 117,\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n    // Monochrome 1 bit per pixel format\n    D3DFMT_A1                   = 118,\n\n    // 2.8 biased fixed point\n    D3DFMT_A2B10G10R10_XR_BIAS  = 119,\n\n\n    // Binary format indicating that the data has no inherent type\n    D3DFMT_BINARYBUFFER         = 199,\n    \n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n\n    D3DFMT_FORCE_DWORD          =0x7fffffff\n} D3DFORMAT;\n\n/* Display Modes */\ntypedef struct _D3DDISPLAYMODE\n{\n    UINT            Width;\n    UINT            Height;\n    UINT            RefreshRate;\n    D3DFORMAT       Format;\n} D3DDISPLAYMODE;\n\n/* Creation Parameters */\ntypedef struct _D3DDEVICE_CREATION_PARAMETERS\n{\n    UINT            AdapterOrdinal;\n    D3DDEVTYPE      DeviceType;\n    HWND            hFocusWindow;\n    DWORD           BehaviorFlags;\n} D3DDEVICE_CREATION_PARAMETERS;\n\n\n/* SwapEffects */\ntypedef enum _D3DSWAPEFFECT\n{\n    D3DSWAPEFFECT_DISCARD           = 1,\n    D3DSWAPEFFECT_FLIP              = 2,\n    D3DSWAPEFFECT_COPY              = 3,\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n    D3DSWAPEFFECT_OVERLAY           = 4,\n    D3DSWAPEFFECT_FLIPEX            = 5,\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n    D3DSWAPEFFECT_FORCE_DWORD       = 0x7fffffff\n} D3DSWAPEFFECT;\n\n/* Pool types */\ntypedef enum _D3DPOOL {\n    D3DPOOL_DEFAULT                 = 0,\n    D3DPOOL_MANAGED                 = 1,\n    D3DPOOL_SYSTEMMEM               = 2,\n    D3DPOOL_SCRATCH                 = 3,\n\n    D3DPOOL_FORCE_DWORD             = 0x7fffffff\n} D3DPOOL;\n\n\n/* RefreshRate pre-defines */\n#define D3DPRESENT_RATE_DEFAULT         0x00000000\n\n\n/* Resize Optional Parameters */\ntypedef struct _D3DPRESENT_PARAMETERS_\n{\n    UINT                BackBufferWidth;\n    UINT                BackBufferHeight;\n    D3DFORMAT           BackBufferFormat;\n    UINT                BackBufferCount;\n\n    D3DMULTISAMPLE_TYPE MultiSampleType;\n    DWORD               MultiSampleQuality;\n\n    D3DSWAPEFFECT       SwapEffect;\n    HWND                hDeviceWindow;\n    BOOL                Windowed;\n    BOOL                EnableAutoDepthStencil;\n    D3DFORMAT           AutoDepthStencilFormat;\n    DWORD               Flags;\n\n    /* FullScreen_RefreshRateInHz must be zero for Windowed mode */\n    UINT                FullScreen_RefreshRateInHz;\n    UINT                PresentationInterval;\n} D3DPRESENT_PARAMETERS;\n\n// Values for D3DPRESENT_PARAMETERS.Flags\n\n#define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER      0x00000001\n#define D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL     0x00000002\n#define D3DPRESENTFLAG_DEVICECLIP               0x00000004\n#define D3DPRESENTFLAG_VIDEO                    0x00000010\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n#define D3DPRESENTFLAG_NOAUTOROTATE                    0x00000020\n#define D3DPRESENTFLAG_UNPRUNEDMODE                    0x00000040\n#define D3DPRESENTFLAG_OVERLAY_LIMITEDRGB              0x00000080\n#define D3DPRESENTFLAG_OVERLAY_YCbCr_BT709             0x00000100\n#define D3DPRESENTFLAG_OVERLAY_YCbCr_xvYCC             0x00000200\n#define D3DPRESENTFLAG_RESTRICTED_CONTENT              0x00000400\n#define D3DPRESENTFLAG_RESTRICT_SHARED_RESOURCE_DRIVER 0x00000800\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n/* Gamma Ramp: Same as DX7 */\n\ntypedef struct _D3DGAMMARAMP\n{\n    WORD                red  [256];\n    WORD                green[256];\n    WORD                blue [256];\n} D3DGAMMARAMP;\n\n/* Back buffer types */\ntypedef enum _D3DBACKBUFFER_TYPE\n{\n    D3DBACKBUFFER_TYPE_MONO         = 0,\n    D3DBACKBUFFER_TYPE_LEFT         = 1,\n    D3DBACKBUFFER_TYPE_RIGHT        = 2,\n\n    D3DBACKBUFFER_TYPE_FORCE_DWORD  = 0x7fffffff\n} D3DBACKBUFFER_TYPE;\n\n\n/* Types */\ntypedef enum _D3DRESOURCETYPE {\n    D3DRTYPE_SURFACE                =  1,\n    D3DRTYPE_VOLUME                 =  2,\n    D3DRTYPE_TEXTURE                =  3,\n    D3DRTYPE_VOLUMETEXTURE          =  4,\n    D3DRTYPE_CUBETEXTURE            =  5,\n    D3DRTYPE_VERTEXBUFFER           =  6,\n    D3DRTYPE_INDEXBUFFER            =  7,           //if this changes, change _D3DDEVINFO_RESOURCEMANAGER definition\n\n\n    D3DRTYPE_FORCE_DWORD            = 0x7fffffff\n} D3DRESOURCETYPE;\n\n/* Usages */\n#define D3DUSAGE_RENDERTARGET       (0x00000001L)\n#define D3DUSAGE_DEPTHSTENCIL       (0x00000002L)\n#define D3DUSAGE_DYNAMIC            (0x00000200L)\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n#define D3DUSAGE_NONSECURE          (0x00800000L)\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n// When passed to CheckDeviceFormat, D3DUSAGE_AUTOGENMIPMAP may return\n// D3DOK_NOAUTOGEN if the device doesn't support autogeneration for that format.\n// D3DOK_NOAUTOGEN is a success code, not a failure code... the SUCCEEDED and FAILED macros\n// will return true and false respectively for this code.\n#define D3DUSAGE_AUTOGENMIPMAP      (0x00000400L)\n#define D3DUSAGE_DMAP               (0x00004000L)\n\n// The following usages are valid only for querying CheckDeviceFormat\n#define D3DUSAGE_QUERY_LEGACYBUMPMAP            (0x00008000L)\n#define D3DUSAGE_QUERY_SRGBREAD                 (0x00010000L)\n#define D3DUSAGE_QUERY_FILTER                   (0x00020000L)\n#define D3DUSAGE_QUERY_SRGBWRITE                (0x00040000L)\n#define D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING (0x00080000L)\n#define D3DUSAGE_QUERY_VERTEXTEXTURE            (0x00100000L)\n#define D3DUSAGE_QUERY_WRAPANDMIP\t            (0x00200000L)\n\n/* Usages for Vertex/Index buffers */\n#define D3DUSAGE_WRITEONLY          (0x00000008L)\n#define D3DUSAGE_SOFTWAREPROCESSING (0x00000010L)\n#define D3DUSAGE_DONOTCLIP          (0x00000020L)\n#define D3DUSAGE_POINTS             (0x00000040L)\n#define D3DUSAGE_RTPATCHES          (0x00000080L)\n#define D3DUSAGE_NPATCHES           (0x00000100L)\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\n#define D3DUSAGE_TEXTAPI                         (0x10000000L)\n#define D3DUSAGE_RESTRICTED_CONTENT              (0x00000800L)\n#define D3DUSAGE_RESTRICT_SHARED_RESOURCE        (0x00002000L)\n#define D3DUSAGE_RESTRICT_SHARED_RESOURCE_DRIVER (0x00001000L) \n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* CubeMap Face identifiers */\ntypedef enum _D3DCUBEMAP_FACES\n{\n    D3DCUBEMAP_FACE_POSITIVE_X     = 0,\n    D3DCUBEMAP_FACE_NEGATIVE_X     = 1,\n    D3DCUBEMAP_FACE_POSITIVE_Y     = 2,\n    D3DCUBEMAP_FACE_NEGATIVE_Y     = 3,\n    D3DCUBEMAP_FACE_POSITIVE_Z     = 4,\n    D3DCUBEMAP_FACE_NEGATIVE_Z     = 5,\n\n    D3DCUBEMAP_FACE_FORCE_DWORD    = 0x7fffffff\n} D3DCUBEMAP_FACES;\n\n\n/* Lock flags */\n\n#define D3DLOCK_READONLY           0x00000010L\n#define D3DLOCK_DISCARD            0x00002000L\n#define D3DLOCK_NOOVERWRITE        0x00001000L\n#define D3DLOCK_NOSYSLOCK          0x00000800L\n#define D3DLOCK_DONOTWAIT          0x00004000L                  \n\n#define D3DLOCK_NO_DIRTY_UPDATE     0x00008000L\n\n\n\n\n\n\n\n/* Vertex Buffer Description */\ntypedef struct _D3DVERTEXBUFFER_DESC\n{\n    D3DFORMAT           Format;\n    D3DRESOURCETYPE     Type;\n    DWORD               Usage;\n    D3DPOOL             Pool;\n    UINT                Size;\n\n    DWORD               FVF;\n\n} D3DVERTEXBUFFER_DESC;\n\n/* Index Buffer Description */\ntypedef struct _D3DINDEXBUFFER_DESC\n{\n    D3DFORMAT           Format;\n    D3DRESOURCETYPE     Type;\n    DWORD               Usage;\n    D3DPOOL             Pool;\n    UINT                Size;\n} D3DINDEXBUFFER_DESC;\n\n\n/* Surface Description */\ntypedef struct _D3DSURFACE_DESC\n{\n    D3DFORMAT           Format;\n    D3DRESOURCETYPE     Type;\n    DWORD               Usage;\n    D3DPOOL             Pool;\n\n    D3DMULTISAMPLE_TYPE MultiSampleType;\n    DWORD               MultiSampleQuality;\n    UINT                Width;\n    UINT                Height;\n} D3DSURFACE_DESC;\n\ntypedef struct _D3DVOLUME_DESC\n{\n    D3DFORMAT           Format;\n    D3DRESOURCETYPE     Type;\n    DWORD               Usage;\n    D3DPOOL             Pool;\n\n    UINT                Width;\n    UINT                Height;\n    UINT                Depth;\n} D3DVOLUME_DESC;\n\n/* Structure for LockRect */\ntypedef struct _D3DLOCKED_RECT\n{\n    INT                 Pitch;\n    void*               pBits;\n} D3DLOCKED_RECT;\n\n/* Structures for LockBox */\ntypedef struct _D3DBOX\n{\n    UINT                Left;\n    UINT                Top;\n    UINT                Right;\n    UINT                Bottom;\n    UINT                Front;\n    UINT                Back;\n} D3DBOX;\n\ntypedef struct _D3DLOCKED_BOX\n{\n    INT                 RowPitch;\n    INT                 SlicePitch;\n    void*               pBits;\n} D3DLOCKED_BOX;\n\n/* Structures for LockRange */\ntypedef struct _D3DRANGE\n{\n    UINT                Offset;\n    UINT                Size;\n} D3DRANGE;\n\n/* Structures for high order primitives */\ntypedef struct _D3DRECTPATCH_INFO\n{\n    UINT                StartVertexOffsetWidth;\n    UINT                StartVertexOffsetHeight;\n    UINT                Width;\n    UINT                Height;\n    UINT                Stride;\n    D3DBASISTYPE        Basis;\n    D3DDEGREETYPE       Degree;\n} D3DRECTPATCH_INFO;\n\ntypedef struct _D3DTRIPATCH_INFO\n{\n    UINT                StartVertexOffset;\n    UINT                NumVertices;\n    D3DBASISTYPE        Basis;\n    D3DDEGREETYPE       Degree;\n} D3DTRIPATCH_INFO;\n\n/* Adapter Identifier */\n\n#define MAX_DEVICE_IDENTIFIER_STRING        512\ntypedef struct _D3DADAPTER_IDENTIFIER9\n{\n    char            Driver[MAX_DEVICE_IDENTIFIER_STRING];\n    char            Description[MAX_DEVICE_IDENTIFIER_STRING];\n    char            DeviceName[32];         /* Device name for GDI (ex. \\\\.\\DISPLAY1) */\n\n#ifdef _WIN32\n    LARGE_INTEGER   DriverVersion;          /* Defined for 32 bit components */\n#else\n    DWORD           DriverVersionLowPart;   /* Defined for 16 bit driver components */\n    DWORD           DriverVersionHighPart;\n#endif\n\n    DWORD           VendorId;\n    DWORD           DeviceId;\n    DWORD           SubSysId;\n    DWORD           Revision;\n\n    GUID            DeviceIdentifier;\n\n    DWORD           WHQLLevel;\n\n} D3DADAPTER_IDENTIFIER9;\n\n\n/* Raster Status structure returned by GetRasterStatus */\ntypedef struct _D3DRASTER_STATUS\n{\n    BOOL            InVBlank;\n    UINT            ScanLine;\n} D3DRASTER_STATUS;\n\n\n\n/* Debug monitor tokens (DEBUG only)\n\n   Note that if D3DRS_DEBUGMONITORTOKEN is set, the call is treated as\n   passing a token to the debug monitor.  For example, if, after passing\n   D3DDMT_ENABLE/DISABLE to D3DRS_DEBUGMONITORTOKEN other token values\n   are passed in, the enabled/disabled state of the debug\n   monitor will still persist.\n\n   The debug monitor defaults to enabled.\n\n   Calling GetRenderState on D3DRS_DEBUGMONITORTOKEN is not of any use.\n*/\ntypedef enum _D3DDEBUGMONITORTOKENS {\n    D3DDMT_ENABLE            = 0,    // enable debug monitor\n    D3DDMT_DISABLE           = 1,    // disable debug monitor\n    D3DDMT_FORCE_DWORD     = 0x7fffffff,\n} D3DDEBUGMONITORTOKENS;\n\n// Async feedback\n\ntypedef enum _D3DQUERYTYPE {\n    D3DQUERYTYPE_VCACHE                 = 4, /* D3DISSUE_END */\n    D3DQUERYTYPE_RESOURCEMANAGER        = 5, /* D3DISSUE_END */\n    D3DQUERYTYPE_VERTEXSTATS            = 6, /* D3DISSUE_END */\n    D3DQUERYTYPE_EVENT                  = 8, /* D3DISSUE_END */\n    D3DQUERYTYPE_OCCLUSION              = 9, /* D3DISSUE_BEGIN, D3DISSUE_END */\n    D3DQUERYTYPE_TIMESTAMP              = 10, /* D3DISSUE_END */\n    D3DQUERYTYPE_TIMESTAMPDISJOINT      = 11, /* D3DISSUE_BEGIN, D3DISSUE_END */\n    D3DQUERYTYPE_TIMESTAMPFREQ          = 12, /* D3DISSUE_END */\n    D3DQUERYTYPE_PIPELINETIMINGS        = 13, /* D3DISSUE_BEGIN, D3DISSUE_END */\n    D3DQUERYTYPE_INTERFACETIMINGS       = 14, /* D3DISSUE_BEGIN, D3DISSUE_END */\n    D3DQUERYTYPE_VERTEXTIMINGS          = 15, /* D3DISSUE_BEGIN, D3DISSUE_END */\n    D3DQUERYTYPE_PIXELTIMINGS           = 16, /* D3DISSUE_BEGIN, D3DISSUE_END */\n    D3DQUERYTYPE_BANDWIDTHTIMINGS       = 17, /* D3DISSUE_BEGIN, D3DISSUE_END */\n    D3DQUERYTYPE_CACHEUTILIZATION       = 18, /* D3DISSUE_BEGIN, D3DISSUE_END */\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n    D3DQUERYTYPE_MEMORYPRESSURE         = 19, /* D3DISSUE_BEGIN, D3DISSUE_END */\n#endif // !D3D_DISABLE_9EX\n} D3DQUERYTYPE;\n\n// Flags field for Issue\n#define D3DISSUE_END (1 << 0) // Tells the runtime to issue the end of a query, changing it's state to \"non-signaled\".\n#define D3DISSUE_BEGIN (1 << 1) // Tells the runtime to issue the beginng of a query.\n\n\n// Flags field for GetData\n#define D3DGETDATA_FLUSH (1 << 0) // Tells the runtime to flush if the query is outstanding.\n\n\ntypedef struct _D3DRESOURCESTATS\n{\n// Data collected since last Present()\n    BOOL    bThrashing;             /* indicates if thrashing */\n    DWORD   ApproxBytesDownloaded;  /* Approximate number of bytes downloaded by resource manager */\n    DWORD   NumEvicts;              /* number of objects evicted */\n    DWORD   NumVidCreates;          /* number of objects created in video memory */\n    DWORD   LastPri;                /* priority of last object evicted */\n    DWORD   NumUsed;                /* number of objects set to the device */\n    DWORD   NumUsedInVidMem;        /* number of objects set to the device, which are already in video memory */\n// Persistent data\n    DWORD   WorkingSet;             /* number of objects in video memory */\n    DWORD   WorkingSetBytes;        /* number of bytes in video memory */\n    DWORD   TotalManaged;           /* total number of managed objects */\n    DWORD   TotalBytes;             /* total number of bytes of managed objects */\n} D3DRESOURCESTATS;\n\n#define D3DRTYPECOUNT (D3DRTYPE_INDEXBUFFER+1)\n\ntypedef struct _D3DDEVINFO_RESOURCEMANAGER\n{\n#ifndef WOW64_ENUM_WORKAROUND\n    D3DRESOURCESTATS    stats[D3DRTYPECOUNT];\n#else\n    D3DRESOURCESTATS    stats[8];\n#endif\n} D3DDEVINFO_RESOURCEMANAGER, *LPD3DDEVINFO_RESOURCEMANAGER;\n\ntypedef struct _D3DDEVINFO_D3DVERTEXSTATS\n{\n    DWORD   NumRenderedTriangles;       /* total number of triangles that are not clipped in this frame */\n    DWORD   NumExtraClippingTriangles;  /* Number of new triangles generated by clipping */\n} D3DDEVINFO_D3DVERTEXSTATS, *LPD3DDEVINFO_D3DVERTEXSTATS;\n\n\ntypedef struct _D3DDEVINFO_VCACHE {\n    DWORD   Pattern;                    /* bit pattern, return value must be FOUR_CC('C', 'A', 'C', 'H') */\n    DWORD   OptMethod;                  /* optimization method 0 means longest strips, 1 means vertex cache based */\n    DWORD   CacheSize;                  /* cache size to optimize for  (only required if type is 1) */\n    DWORD   MagicNumber;                /* used to determine when to restart strips (only required if type is 1)*/\n} D3DDEVINFO_VCACHE, *LPD3DDEVINFO_VCACHE;\n\ntypedef struct _D3DDEVINFO_D3D9PIPELINETIMINGS\n{\n    FLOAT VertexProcessingTimePercent;\n    FLOAT PixelProcessingTimePercent;\n    FLOAT OtherGPUProcessingTimePercent;\n    FLOAT GPUIdleTimePercent;\n} D3DDEVINFO_D3D9PIPELINETIMINGS;\n\ntypedef struct _D3DDEVINFO_D3D9INTERFACETIMINGS\n{\n    FLOAT WaitingForGPUToUseApplicationResourceTimePercent;\n    FLOAT WaitingForGPUToAcceptMoreCommandsTimePercent;\n    FLOAT WaitingForGPUToStayWithinLatencyTimePercent;\n    FLOAT WaitingForGPUExclusiveResourceTimePercent;\n    FLOAT WaitingForGPUOtherTimePercent;\n} D3DDEVINFO_D3D9INTERFACETIMINGS;\n\ntypedef struct _D3DDEVINFO_D3D9STAGETIMINGS\n{\n    FLOAT MemoryProcessingPercent;\n    FLOAT ComputationProcessingPercent;\n} D3DDEVINFO_D3D9STAGETIMINGS;\n\ntypedef struct _D3DDEVINFO_D3D9BANDWIDTHTIMINGS\n{\n    FLOAT MaxBandwidthUtilized;\n    FLOAT FrontEndUploadMemoryUtilizedPercent;\n    FLOAT VertexRateUtilizedPercent;\n    FLOAT TriangleSetupRateUtilizedPercent;\n    FLOAT FillRateUtilizedPercent;\n} D3DDEVINFO_D3D9BANDWIDTHTIMINGS;\n\ntypedef struct _D3DDEVINFO_D3D9CACHEUTILIZATION\n{\n    FLOAT TextureCacheHitRate; // Percentage of cache hits\n    FLOAT PostTransformVertexCacheHitRate;\n} D3DDEVINFO_D3D9CACHEUTILIZATION;\n\n/* D3D9Ex only -- */\n#if !defined(D3D_DISABLE_9EX)\n\ntypedef struct _D3DMEMORYPRESSURE\n{\n    UINT64  BytesEvictedFromProcess;\n    UINT64  SizeOfInefficientAllocation;\n    DWORD   LevelOfEfficiency;\n} D3DMEMORYPRESSURE;\n\ntypedef enum _D3DCOMPOSERECTSOP{\n    D3DCOMPOSERECTS_COPY     = 1,\n    D3DCOMPOSERECTS_OR       = 2,\n    D3DCOMPOSERECTS_AND      = 3,\n    D3DCOMPOSERECTS_NEG      = 4,\n    D3DCOMPOSERECTS_FORCE_DWORD    = 0x7fffffff, /* force 32-bit size enum */\n} D3DCOMPOSERECTSOP;\n\ntypedef struct _D3DCOMPOSERECTDESC\n{\n    USHORT  X, Y;           // Top-left coordinates of a rect in the source surface\n    USHORT  Width, Height;  // Dimensions of the rect\n} D3DCOMPOSERECTDESC;\n\ntypedef struct _D3DCOMPOSERECTDESTINATION\n{\n    USHORT SrcRectIndex;    // Index of D3DCOMPOSERECTDESC\n    USHORT Reserved;        // For alignment\n    SHORT  X, Y;            // Top-left coordinates of the rect in the destination surface\n} D3DCOMPOSERECTDESTINATION;\n\n#define D3DCOMPOSERECTS_MAXNUMRECTS 0xFFFF\n#define D3DCONVOLUTIONMONO_MAXWIDTH  7\n#define D3DCONVOLUTIONMONO_MAXHEIGHT D3DCONVOLUTIONMONO_MAXWIDTH\n#define D3DFMT_A1_SURFACE_MAXWIDTH  8192\n#define D3DFMT_A1_SURFACE_MAXHEIGHT 2048\n\n\ntypedef struct _D3DPRESENTSTATS {\n    UINT PresentCount;\n    UINT PresentRefreshCount;\n    UINT SyncRefreshCount;\n    LARGE_INTEGER SyncQPCTime;\n    LARGE_INTEGER SyncGPUTime;\n} D3DPRESENTSTATS;\n\ntypedef enum D3DSCANLINEORDERING\n{\n    D3DSCANLINEORDERING_UNKNOWN                    = 0, \n    D3DSCANLINEORDERING_PROGRESSIVE                = 1,\n    D3DSCANLINEORDERING_INTERLACED                 = 2,\n} D3DSCANLINEORDERING;\n\n\ntypedef struct D3DDISPLAYMODEEX\n{\n    UINT                    Size;\n    UINT                    Width;\n    UINT                    Height;\n    UINT                    RefreshRate;\n    D3DFORMAT               Format;\n    D3DSCANLINEORDERING     ScanLineOrdering;\n} D3DDISPLAYMODEEX;\n\ntypedef struct D3DDISPLAYMODEFILTER\n{\n    UINT                    Size;\n    D3DFORMAT               Format;\n    D3DSCANLINEORDERING     ScanLineOrdering;\n} D3DDISPLAYMODEFILTER;\n\n\ntypedef enum D3DDISPLAYROTATION\n{\n    D3DDISPLAYROTATION_IDENTITY = 1, // No rotation.           \n    D3DDISPLAYROTATION_90       = 2, // Rotated 90 degrees.\n    D3DDISPLAYROTATION_180      = 3, // Rotated 180 degrees.\n    D3DDISPLAYROTATION_270      = 4  // Rotated 270 degrees.\n} D3DDISPLAYROTATION;\n\n/* For use in ID3DResource9::SetPriority calls */\n#define D3D9_RESOURCE_PRIORITY_MINIMUM       0x28000000\n#define D3D9_RESOURCE_PRIORITY_LOW           0x50000000\n#define D3D9_RESOURCE_PRIORITY_NORMAL        0x78000000\n#define D3D9_RESOURCE_PRIORITY_HIGH          0xa0000000\n#define D3D9_RESOURCE_PRIORITY_MAXIMUM       0xc8000000\n\n#define D3D_OMAC_SIZE    16\n\ntypedef struct _D3D_OMAC\n{\n    BYTE Omac[D3D_OMAC_SIZE];\n} D3D_OMAC;\n\ntypedef enum _D3DAUTHENTICATEDCHANNELTYPE\n{\n    D3DAUTHENTICATEDCHANNEL_D3D9            = 1,\n    D3DAUTHENTICATEDCHANNEL_DRIVER_SOFTWARE = 2,\n    D3DAUTHENTICATEDCHANNEL_DRIVER_HARDWARE = 3,\n} D3DAUTHENTICATEDCHANNELTYPE;\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERY_INPUT\n{\n    GUID                               QueryType;\n    HANDLE                             hChannel;\n    UINT                               SequenceNumber;\n} D3DAUTHENTICATEDCHANNEL_QUERY_INPUT;\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT\n{\n    D3D_OMAC                           omac;  \n    GUID                               QueryType;\n    HANDLE                             hChannel;\n    UINT                               SequenceNumber;\n    HRESULT                            ReturnCode;\n} D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT;\n\nDEFINE_GUID(D3DAUTHENTICATEDQUERY_PROTECTION, \n0xa84eb584, 0xc495, 0x48aa, 0xb9, 0x4d, 0x8b, 0xd2, 0xd6, 0xfb, 0xce, 0x5);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS\n{\n    union\n    {\n        struct\n        {\n            UINT ProtectionEnabled                       : 1; \n            UINT OverlayOrFullscreenRequired             : 1;\n            UINT Reserved                                : 30;\n        };\n        UINT  Value;\n    };\n\n} D3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS;\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYPROTECTION_OUTPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;\n\n    D3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS ProtectionFlags;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYPROTECTION_OUTPUT;\n\n\nDEFINE_GUID(D3DAUTHENTICATEDQUERY_CHANNELTYPE, \n0xbc1b18a5, 0xb1fb, 0x42ab, 0xbd, 0x94, 0xb5, 0x82, 0x8b, 0x4b, 0xf7, 0xbe);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYCHANNELTYPE_OUTPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;\n\n    D3DAUTHENTICATEDCHANNELTYPE ChannelType;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYCHANNELTYPE_OUTPUT;\n\n\nDEFINE_GUID(D3DAUTHENTICATEDQUERY_DEVICEHANDLE, \n0xec1c539d, 0x8cff, 0x4e2a, 0xbc, 0xc4, 0xf5, 0x69, 0x2f, 0x99, 0xf4, 0x80);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYDEVICEHANDLE_OUTPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;\n\n    HANDLE   DeviceHandle;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYDEVICEHANDLE_OUTPUT;\n\n\nDEFINE_GUID(D3DAUTHENTICATEDQUERY_CRYPTOSESSION, \n0x2634499e, 0xd018, 0x4d74, 0xac, 0x17, 0x7f, 0x72, 0x40, 0x59, 0x52, 0x8d);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_INPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_INPUT Input;\n\n    HANDLE   DXVA2DecodeHandle;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_INPUT;\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_OUTPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;\n\n    HANDLE   DXVA2DecodeHandle;\n    HANDLE   CryptoSessionHandle;\n    HANDLE   DeviceHandle;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYCRYPTOSESSION_OUTPUT;\n\n\nDEFINE_GUID(D3DAUTHENTICATEDQUERY_RESTRICTEDSHAREDRESOURCEPROCESSCOUNT, \n0xdb207b3, 0x9450, 0x46a6, 0x82, 0xde, 0x1b, 0x96, 0xd4, 0x4f, 0x9c, 0xf2);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESSCOUNT_OUTPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;\n\n    UINT   NumRestrictedSharedResourceProcesses;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESSCOUNT_OUTPUT;\n\n\nDEFINE_GUID(D3DAUTHENTICATEDQUERY_RESTRICTEDSHAREDRESOURCEPROCESS, \n0x649bbadb, 0xf0f4, 0x4639, 0xa1, 0x5b, 0x24, 0x39, 0x3f, 0xc3, 0xab, 0xac);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_INPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_INPUT Input;\n\n    UINT     ProcessIndex;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_INPUT;\n\ntypedef enum _D3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE\n{\n    PROCESSIDTYPE_UNKNOWN  = 0,\n    PROCESSIDTYPE_DWM      = 1,\n    PROCESSIDTYPE_HANDLE   = 2\n} D3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE;\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_OUTPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;\n\n    UINT                                          ProcessIndex;\n    D3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE ProcessIdentifer;\n    HANDLE                                        ProcessHandle;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYRESTRICTEDSHAREDRESOURCEPROCESS_OUTPUT;\n\n\nDEFINE_GUID(D3DAUTHENTICATEDQUERY_UNRESTRICTEDPROTECTEDSHAREDRESOURCECOUNT, \n0x12f0bd6, 0xe662, 0x4474, 0xbe, 0xfd, 0xaa, 0x53, 0xe5, 0x14, 0x3c, 0x6d);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYUNRESTRICTEDPROTECTEDSHAREDRESOURCECOUNT_OUTPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;\n\n    UINT   NumUnrestrictedProtectedSharedResources;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYUNRESTRICTEDPROTECTEDSHAREDRESOURCECOUNT_OUTPUT;\n\n\nDEFINE_GUID(D3DAUTHENTICATEDQUERY_OUTPUTIDCOUNT, \n0x2c042b5e, 0x8c07, 0x46d5, 0xaa, 0xbe, 0x8f, 0x75, 0xcb, 0xad, 0x4c, 0x31);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_INPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_INPUT Input;\n\n    HANDLE  DeviceHandle;\n    HANDLE  CryptoSessionHandle;\t\n\n} D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_INPUT;\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_OUTPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;\n\n    HANDLE  DeviceHandle;\n    HANDLE  CryptoSessionHandle;\t\n    UINT    NumOutputIDs;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTIDCOUNT_OUTPUT;\n\n\nDEFINE_GUID(D3DAUTHENTICATEDQUERY_OUTPUTID, \n0x839ddca3, 0x9b4e, 0x41e4, 0xb0, 0x53, 0x89, 0x2b, 0xd2, 0xa1, 0x1e, 0xe7);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_INPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_INPUT Input;\n\n    HANDLE  DeviceHandle;\n    HANDLE  CryptoSessionHandle;\t\n    UINT    OutputIDIndex;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_INPUT;\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_OUTPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;\n\n    HANDLE  DeviceHandle;\n    HANDLE  CryptoSessionHandle;\t\n    UINT    OutputIDIndex;\n    UINT64  OutputID;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYOUTPUTID_OUTPUT;\n\n\nDEFINE_GUID(D3DAUTHENTICATEDQUERY_ACCESSIBILITYATTRIBUTES, \n0x6214d9d2, 0x432c, 0x4abb, 0x9f, 0xce, 0x21, 0x6e, 0xea, 0x26, 0x9e, 0x3b);\n\ntypedef enum _D3DBUSTYPE\n{\n    D3DBUSTYPE_OTHER                                     = 0x00000000,\n    D3DBUSTYPE_PCI                                       = 0x00000001,\n    D3DBUSTYPE_PCIX                                      = 0x00000002,\n    D3DBUSTYPE_PCIEXPRESS                                = 0x00000003,\n    D3DBUSTYPE_AGP                                       = 0x00000004,\n    D3DBUSIMPL_MODIFIER_INSIDE_OF_CHIPSET                = 0x00010000,\n    D3DBUSIMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_CHIP   = 0x00020000,\n    D3DBUSIMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_SOCKET = 0x00030000,\n    D3DBUSIMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR         = 0x00040000,\n    D3DBUSIMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR_INSIDE_OF_NUAE = 0x00050000, \n    D3DBUSIMPL_MODIFIER_NON_STANDARD                     = 0x80000000,    \n} D3DBUSTYPE;\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYINFOBUSTYPE_OUTPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;\n\n    D3DBUSTYPE BusType;\n    BOOL bAccessibleInContiguousBlocks;\n    BOOL bAccessibleInNonContiguousBlocks;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYINFOBUSTYPE_OUTPUT;\n\n\nDEFINE_GUID(D3DAUTHENTICATEDQUERY_ENCRYPTIONWHENACCESSIBLEGUIDCOUNT, \n0xb30f7066, 0x203c, 0x4b07, 0x93, 0xfc, 0xce, 0xaa, 0xfd, 0x61, 0x24, 0x1e);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUIDCOUNT_OUTPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;\n\n    UINT   NumEncryptionGuids;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUIDCOUNT_OUTPUT;\n\n\nDEFINE_GUID(D3DAUTHENTICATEDQUERY_ENCRYPTIONWHENACCESSIBLEGUID, \n0xf83a5958, 0xe986, 0x4bda, 0xbe, 0xb0, 0x41, 0x1f, 0x6a, 0x7a, 0x1, 0xb7);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_INPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_INPUT Input;\n\n    UINT EncryptionGuidIndex;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_INPUT;\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_OUTPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;\n\n    UINT       EncryptionGuidIndex;\n    GUID       EncryptionGuid;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYEVICTIONENCRYPTIONGUID_OUTPUT;\n\n\nDEFINE_GUID(D3DAUTHENTICATEDQUERY_CURRENTENCRYPTIONWHENACCESSIBLE, \n0xec1791c7, 0xdad3, 0x4f15, 0x9e, 0xc3, 0xfa, 0xa9, 0x3d, 0x60, 0xd4, 0xf0);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_QUERYUNCOMPRESSEDENCRYPTIONLEVEL_OUTPUT\n{\n    D3DAUTHENTICATEDCHANNEL_QUERY_OUTPUT Output;\n\n    GUID       EncryptionGuid;\n\n} D3DAUTHENTICATEDCHANNEL_QUERYUNCOMPRESSEDENCRYPTIONLEVEL_OUTPUT;\n\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT\n{\n    D3D_OMAC                            omac;  \n    GUID                                ConfigureType;      \n    HANDLE                              hChannel;    \n    UINT                                SequenceNumber;     \n\n} D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT;\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT\n{\n    D3D_OMAC                            omac;  \n    GUID                                ConfigureType;          \n    HANDLE                              hChannel;\n    UINT                                SequenceNumber;     \n    HRESULT                             ReturnCode;\n\n} D3DAUTHENTICATEDCHANNEL_CONFIGURE_OUTPUT;\n\nDEFINE_GUID(D3DAUTHENTICATEDCONFIGURE_INITIALIZE, \n0x6114bdb, 0x3523, 0x470a, 0x8d, 0xca, 0xfb, 0xc2, 0x84, 0x51, 0x54, 0xf0);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_CONFIGUREINITIALIZE\n{\n    D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT   Parameters;\n\n    UINT   StartSequenceQuery;\n    UINT   StartSequenceConfigure;\n\n} D3DAUTHENTICATEDCHANNEL_CONFIGUREINITIALIZE;\n\n\nDEFINE_GUID(D3DAUTHENTICATEDCONFIGURE_PROTECTION, \n0x50455658, 0x3f47, 0x4362, 0xbf, 0x99, 0xbf, 0xdf, 0xcd, 0xe9, 0xed, 0x29);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_CONFIGUREPROTECTION\n{\n    D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT   Parameters;\n\n    D3DAUTHENTICATEDCHANNEL_PROTECTION_FLAGS Protections;\n\n} D3DAUTHENTICATEDCHANNEL_CONFIGUREPROTECTION;\n\n\nDEFINE_GUID(D3DAUTHENTICATEDCONFIGURE_CRYPTOSESSION, \n0x6346cc54, 0x2cfc, 0x4ad4, 0x82, 0x24, 0xd1, 0x58, 0x37, 0xde, 0x77, 0x0);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_CONFIGURECRYPTOSESSION\n{\n    D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT   Parameters;\n\n    HANDLE      DXVA2DecodeHandle;\n    HANDLE      CryptoSessionHandle;\n    HANDLE      DeviceHandle;\n\n} D3DAUTHENTICATEDCHANNEL_CONFIGURECRYPTOSESSION;\n\n\nDEFINE_GUID(D3DAUTHENTICATEDCONFIGURE_SHAREDRESOURCE, \n0x772d047, 0x1b40, 0x48e8, 0x9c, 0xa6, 0xb5, 0xf5, 0x10, 0xde, 0x9f, 0x1);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_CONFIGURESHAREDRESOURCE\n{\n    D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT       Parameters;\n\n    D3DAUTHENTICATEDCHANNEL_PROCESSIDENTIFIERTYPE ProcessIdentiferType;\n    HANDLE                                        ProcessHandle;\n    BOOL                                          AllowAccess;\n\n} D3DAUTHENTICATEDCHANNEL_CONFIGURESHAREDRESOURCE;\n\n\nDEFINE_GUID(D3DAUTHENTICATEDCONFIGURE_ENCRYPTIONWHENACCESSIBLE, \n0x41fff286, 0x6ae0, 0x4d43, 0x9d, 0x55, 0xa4, 0x6e, 0x9e, 0xfd, 0x15, 0x8a);\n\ntypedef struct _D3DAUTHENTICATEDCHANNEL_CONFIGUREUNCOMPRESSEDENCRYPTION\n{\n    D3DAUTHENTICATEDCHANNEL_CONFIGURE_INPUT   Parameters;\n\n    GUID                                      EncryptionGuid;\n\n} D3DAUTHENTICATEDCHANNEL_CONFIGUREUNCOMPRESSEDENCRYPTION;\n\ntypedef struct _D3DENCRYPTED_BLOCK_INFO\n{\n    UINT NumEncryptedBytesAtBeginning;    \n    UINT NumBytesInSkipPattern;\n    UINT NumBytesInEncryptPattern;\n} D3DENCRYPTED_BLOCK_INFO;\n\ntypedef struct _D3DAES_CTR_IV\n{\n    UINT64   IV;         // Big-Endian IV\n    UINT64   Count;      // Big-Endian Block Count\n} D3DAES_CTR_IV;\n\n\n\n#endif // !D3D_DISABLE_9EX\n/* -- D3D9Ex only */\n\n#pragma pack()\n#if _MSC_VER >= 1200\n#pragma warning(pop)\n#else\n#pragma warning(default:4201)\n#endif\n\n#endif /* (DIRECT3D_VERSION >= 0x0900) */\n#endif /* _d3d9TYPES(P)_H_ */\n\n"
  },
  {
    "path": "Include/d3dcaps.h",
    "content": "/*==========================================================================;\n *\n *  Copyright (C) Microsoft Corporation.  All Rights Reserved. \n *\n *  File:       d3dcaps.h\n *  Content:    Direct3D capabilities include file\n *\n ***************************************************************************/\n\n#ifndef _D3DCAPS_H\n#define _D3DCAPS_H\n\n/*\n *  Pull in DirectDraw include file automatically:\n */\n#include \"ddraw.h\"\n\n#ifndef DIRECT3D_VERSION\n#define DIRECT3D_VERSION         0x0700\n#endif\n\n#if defined(_X86_) || defined(_IA64_)\n#pragma pack(4)\n#endif\n\n/* Description of capabilities of transform */\n\ntypedef struct _D3DTRANSFORMCAPS {\n    DWORD dwSize;\n    DWORD dwCaps;\n} D3DTRANSFORMCAPS, *LPD3DTRANSFORMCAPS;\n\n#define D3DTRANSFORMCAPS_CLIP           0x00000001L /* Will clip whilst transforming */\n\n/* Description of capabilities of lighting */\n\ntypedef struct _D3DLIGHTINGCAPS {\n    DWORD dwSize;\n    DWORD dwCaps;                   /* Lighting caps */\n    DWORD dwLightingModel;          /* Lighting model - RGB or mono */\n    DWORD dwNumLights;              /* Number of lights that can be handled */\n} D3DLIGHTINGCAPS, *LPD3DLIGHTINGCAPS;\n\n#define D3DLIGHTINGMODEL_RGB            0x00000001L\n#define D3DLIGHTINGMODEL_MONO           0x00000002L\n\n#define D3DLIGHTCAPS_POINT              0x00000001L /* Point lights supported */\n#define D3DLIGHTCAPS_SPOT               0x00000002L /* Spot lights supported */\n#define D3DLIGHTCAPS_DIRECTIONAL        0x00000004L /* Directional lights supported */\n#if(DIRECT3D_VERSION < 0x700)\n#define D3DLIGHTCAPS_PARALLELPOINT      0x00000008L /* Parallel point lights supported */\n#endif\n#if(DIRECT3D_VERSION < 0x500)\n#define D3DLIGHTCAPS_GLSPOT             0x00000010L /* GL syle spot lights supported */\n#endif\n\n/* Description of capabilities for each primitive type */\n\ntypedef struct _D3DPrimCaps {\n    DWORD dwSize;\n    DWORD dwMiscCaps;                 /* Capability flags */\n    DWORD dwRasterCaps;\n    DWORD dwZCmpCaps;\n    DWORD dwSrcBlendCaps;\n    DWORD dwDestBlendCaps;\n    DWORD dwAlphaCmpCaps;\n    DWORD dwShadeCaps;\n    DWORD dwTextureCaps;\n    DWORD dwTextureFilterCaps;\n    DWORD dwTextureBlendCaps;\n    DWORD dwTextureAddressCaps;\n    DWORD dwStippleWidth;             /* maximum width and height of */\n    DWORD dwStippleHeight;            /* of supported stipple (up to 32x32) */\n} D3DPRIMCAPS, *LPD3DPRIMCAPS;\n\n/* D3DPRIMCAPS dwMiscCaps */\n\n#define D3DPMISCCAPS_MASKPLANES         0x00000001L\n#define D3DPMISCCAPS_MASKZ              0x00000002L\n#define D3DPMISCCAPS_LINEPATTERNREP     0x00000004L\n#define D3DPMISCCAPS_CONFORMANT         0x00000008L\n#define D3DPMISCCAPS_CULLNONE           0x00000010L\n#define D3DPMISCCAPS_CULLCW             0x00000020L\n#define D3DPMISCCAPS_CULLCCW            0x00000040L\n\n/* D3DPRIMCAPS dwRasterCaps */\n\n#define D3DPRASTERCAPS_DITHER                   0x00000001L\n#define D3DPRASTERCAPS_ROP2                     0x00000002L\n#define D3DPRASTERCAPS_XOR                      0x00000004L\n#define D3DPRASTERCAPS_PAT                      0x00000008L\n#define D3DPRASTERCAPS_ZTEST                    0x00000010L\n#define D3DPRASTERCAPS_SUBPIXEL                 0x00000020L\n#define D3DPRASTERCAPS_SUBPIXELX                0x00000040L\n#define D3DPRASTERCAPS_FOGVERTEX                0x00000080L\n#define D3DPRASTERCAPS_FOGTABLE                 0x00000100L\n#define D3DPRASTERCAPS_STIPPLE                  0x00000200L\n#if(DIRECT3D_VERSION >= 0x0500)\n#define D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT   0x00000400L\n#define D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT 0x00000800L\n#define D3DPRASTERCAPS_ANTIALIASEDGES           0x00001000L\n#define D3DPRASTERCAPS_MIPMAPLODBIAS            0x00002000L\n#define D3DPRASTERCAPS_ZBIAS                    0x00004000L\n#define D3DPRASTERCAPS_ZBUFFERLESSHSR           0x00008000L\n#define D3DPRASTERCAPS_FOGRANGE                 0x00010000L\n#define D3DPRASTERCAPS_ANISOTROPY               0x00020000L\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n#if(DIRECT3D_VERSION >= 0x0600)\n#define D3DPRASTERCAPS_WBUFFER                      0x00040000L\n#define D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT   0x00080000L\n#define D3DPRASTERCAPS_WFOG                         0x00100000L\n#define D3DPRASTERCAPS_ZFOG                         0x00200000L\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n/* D3DPRIMCAPS dwZCmpCaps, dwAlphaCmpCaps */\n\n#define D3DPCMPCAPS_NEVER               0x00000001L\n#define D3DPCMPCAPS_LESS                0x00000002L\n#define D3DPCMPCAPS_EQUAL               0x00000004L\n#define D3DPCMPCAPS_LESSEQUAL           0x00000008L\n#define D3DPCMPCAPS_GREATER             0x00000010L\n#define D3DPCMPCAPS_NOTEQUAL            0x00000020L\n#define D3DPCMPCAPS_GREATEREQUAL        0x00000040L\n#define D3DPCMPCAPS_ALWAYS              0x00000080L\n\n/* D3DPRIMCAPS dwSourceBlendCaps, dwDestBlendCaps */\n\n#define D3DPBLENDCAPS_ZERO              0x00000001L\n#define D3DPBLENDCAPS_ONE               0x00000002L\n#define D3DPBLENDCAPS_SRCCOLOR          0x00000004L\n#define D3DPBLENDCAPS_INVSRCCOLOR       0x00000008L\n#define D3DPBLENDCAPS_SRCALPHA          0x00000010L\n#define D3DPBLENDCAPS_INVSRCALPHA       0x00000020L\n#define D3DPBLENDCAPS_DESTALPHA         0x00000040L\n#define D3DPBLENDCAPS_INVDESTALPHA      0x00000080L\n#define D3DPBLENDCAPS_DESTCOLOR         0x00000100L\n#define D3DPBLENDCAPS_INVDESTCOLOR      0x00000200L\n#define D3DPBLENDCAPS_SRCALPHASAT       0x00000400L\n#define D3DPBLENDCAPS_BOTHSRCALPHA      0x00000800L\n#define D3DPBLENDCAPS_BOTHINVSRCALPHA   0x00001000L\n\n/* D3DPRIMCAPS dwShadeCaps */\n\n#define D3DPSHADECAPS_COLORFLATMONO             0x00000001L\n#define D3DPSHADECAPS_COLORFLATRGB              0x00000002L\n#define D3DPSHADECAPS_COLORGOURAUDMONO          0x00000004L\n#define D3DPSHADECAPS_COLORGOURAUDRGB           0x00000008L\n#define D3DPSHADECAPS_COLORPHONGMONO            0x00000010L\n#define D3DPSHADECAPS_COLORPHONGRGB             0x00000020L\n\n#define D3DPSHADECAPS_SPECULARFLATMONO          0x00000040L\n#define D3DPSHADECAPS_SPECULARFLATRGB           0x00000080L\n#define D3DPSHADECAPS_SPECULARGOURAUDMONO       0x00000100L\n#define D3DPSHADECAPS_SPECULARGOURAUDRGB        0x00000200L\n#define D3DPSHADECAPS_SPECULARPHONGMONO         0x00000400L\n#define D3DPSHADECAPS_SPECULARPHONGRGB          0x00000800L\n\n#define D3DPSHADECAPS_ALPHAFLATBLEND            0x00001000L\n#define D3DPSHADECAPS_ALPHAFLATSTIPPLED         0x00002000L\n#define D3DPSHADECAPS_ALPHAGOURAUDBLEND         0x00004000L\n#define D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED      0x00008000L\n#define D3DPSHADECAPS_ALPHAPHONGBLEND           0x00010000L\n#define D3DPSHADECAPS_ALPHAPHONGSTIPPLED        0x00020000L\n\n#define D3DPSHADECAPS_FOGFLAT                   0x00040000L\n#define D3DPSHADECAPS_FOGGOURAUD                0x00080000L\n#define D3DPSHADECAPS_FOGPHONG                  0x00100000L\n\n/* D3DPRIMCAPS dwTextureCaps */\n\n/*\n * Perspective-correct texturing is supported\n */\n#define D3DPTEXTURECAPS_PERSPECTIVE     0x00000001L\n\n/*\n * Power-of-2 texture dimensions are required\n */\n#define D3DPTEXTURECAPS_POW2            0x00000002L\n\n/*\n * Alpha in texture pixels is supported\n */\n#define D3DPTEXTURECAPS_ALPHA           0x00000004L\n\n/*\n * Color-keyed textures are supported\n */\n#define D3DPTEXTURECAPS_TRANSPARENCY    0x00000008L\n\n/*\n * obsolete, see D3DPTADDRESSCAPS_BORDER\n */\n#define D3DPTEXTURECAPS_BORDER          0x00000010L\n\n/*\n * Only square textures are supported\n */\n#define D3DPTEXTURECAPS_SQUAREONLY      0x00000020L\n\n#if(DIRECT3D_VERSION >= 0x0600)\n/*\n * Texture indices are not scaled by the texture size prior\n * to interpolation.\n */\n#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00000040L\n\n/*\n * Device can draw alpha from texture palettes\n */\n#define D3DPTEXTURECAPS_ALPHAPALETTE    0x00000080L\n\n/*\n * Device can use non-POW2 textures if:\n *  1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage\n *  2) D3DRS_WRAP(N) is zero for this texture's coordinates\n *  3) mip mapping is not enabled (use magnification filter only)\n */\n#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL  0x00000100L\n\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n#if(DIRECT3D_VERSION >= 0x0700)\n\n// 0x00000200L unused\n\n/*\n * Device can divide transformed texture coordinates by the\n * COUNTth texture coordinate (can do D3DTTFF_PROJECTED)\n */\n#define D3DPTEXTURECAPS_PROJECTED  0x00000400L\n\n/*\n * Device can do cubemap textures\n */\n#define D3DPTEXTURECAPS_CUBEMAP           0x00000800L\n\n#define D3DPTEXTURECAPS_COLORKEYBLEND     0x00001000L\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n/* D3DPRIMCAPS dwTextureFilterCaps */\n\n#define D3DPTFILTERCAPS_NEAREST         0x00000001L\n#define D3DPTFILTERCAPS_LINEAR          0x00000002L\n#define D3DPTFILTERCAPS_MIPNEAREST      0x00000004L\n#define D3DPTFILTERCAPS_MIPLINEAR       0x00000008L\n#define D3DPTFILTERCAPS_LINEARMIPNEAREST 0x00000010L\n#define D3DPTFILTERCAPS_LINEARMIPLINEAR 0x00000020L\n\n#if(DIRECT3D_VERSION >= 0x0600)\n/* Device3 Min Filter */\n#define D3DPTFILTERCAPS_MINFPOINT       0x00000100L\n#define D3DPTFILTERCAPS_MINFLINEAR      0x00000200L\n#define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400L\n\n/* Device3 Mip Filter */\n#define D3DPTFILTERCAPS_MIPFPOINT       0x00010000L\n#define D3DPTFILTERCAPS_MIPFLINEAR      0x00020000L\n\n/* Device3 Mag Filter */\n#define D3DPTFILTERCAPS_MAGFPOINT         0x01000000L\n#define D3DPTFILTERCAPS_MAGFLINEAR        0x02000000L\n#define D3DPTFILTERCAPS_MAGFANISOTROPIC   0x04000000L\n#define D3DPTFILTERCAPS_MAGFAFLATCUBIC    0x08000000L\n#define D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC 0x10000000L\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n/* D3DPRIMCAPS dwTextureBlendCaps */\n\n#define D3DPTBLENDCAPS_DECAL            0x00000001L\n#define D3DPTBLENDCAPS_MODULATE         0x00000002L\n#define D3DPTBLENDCAPS_DECALALPHA       0x00000004L\n#define D3DPTBLENDCAPS_MODULATEALPHA    0x00000008L\n#define D3DPTBLENDCAPS_DECALMASK        0x00000010L\n#define D3DPTBLENDCAPS_MODULATEMASK     0x00000020L\n#define D3DPTBLENDCAPS_COPY             0x00000040L\n#if(DIRECT3D_VERSION >= 0x0500)\n#define D3DPTBLENDCAPS_ADD              0x00000080L\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n/* D3DPRIMCAPS dwTextureAddressCaps */\n#define D3DPTADDRESSCAPS_WRAP           0x00000001L\n#define D3DPTADDRESSCAPS_MIRROR         0x00000002L\n#define D3DPTADDRESSCAPS_CLAMP          0x00000004L\n#if(DIRECT3D_VERSION >= 0x0500)\n#define D3DPTADDRESSCAPS_BORDER         0x00000008L\n#define D3DPTADDRESSCAPS_INDEPENDENTUV  0x00000010L\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#if(DIRECT3D_VERSION >= 0x0600)\n\n/* D3DDEVICEDESC dwStencilCaps */\n\n#define D3DSTENCILCAPS_KEEP     0x00000001L\n#define D3DSTENCILCAPS_ZERO     0x00000002L\n#define D3DSTENCILCAPS_REPLACE  0x00000004L\n#define D3DSTENCILCAPS_INCRSAT  0x00000008L\n#define D3DSTENCILCAPS_DECRSAT  0x00000010L\n#define D3DSTENCILCAPS_INVERT   0x00000020L\n#define D3DSTENCILCAPS_INCR     0x00000040L\n#define D3DSTENCILCAPS_DECR     0x00000080L\n\n/* D3DDEVICEDESC dwTextureOpCaps */\n\n#define D3DTEXOPCAPS_DISABLE                    0x00000001L\n#define D3DTEXOPCAPS_SELECTARG1                 0x00000002L\n#define D3DTEXOPCAPS_SELECTARG2                 0x00000004L\n#define D3DTEXOPCAPS_MODULATE                   0x00000008L\n#define D3DTEXOPCAPS_MODULATE2X                 0x00000010L\n#define D3DTEXOPCAPS_MODULATE4X                 0x00000020L\n#define D3DTEXOPCAPS_ADD                        0x00000040L\n#define D3DTEXOPCAPS_ADDSIGNED                  0x00000080L\n#define D3DTEXOPCAPS_ADDSIGNED2X                0x00000100L\n#define D3DTEXOPCAPS_SUBTRACT                   0x00000200L\n#define D3DTEXOPCAPS_ADDSMOOTH                  0x00000400L\n#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA          0x00000800L\n#define D3DTEXOPCAPS_BLENDTEXTUREALPHA          0x00001000L\n#define D3DTEXOPCAPS_BLENDFACTORALPHA           0x00002000L\n#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM        0x00004000L\n#define D3DTEXOPCAPS_BLENDCURRENTALPHA          0x00008000L\n#define D3DTEXOPCAPS_PREMODULATE                0x00010000L\n#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR     0x00020000L\n#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA     0x00040000L\n#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR  0x00080000L\n#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA  0x00100000L\n#define D3DTEXOPCAPS_BUMPENVMAP                 0x00200000L\n#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE        0x00400000L\n#define D3DTEXOPCAPS_DOTPRODUCT3                0x00800000L\n\n/* D3DDEVICEDESC dwFVFCaps flags */\n\n#define D3DFVFCAPS_TEXCOORDCOUNTMASK    0x0000ffffL /* mask for texture coordinate count field */\n#define D3DFVFCAPS_DONOTSTRIPELEMENTS   0x00080000L /* Device prefers that vertex elements not be stripped */\n\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n/*\n * Description for a device.\n * This is used to describe a device that is to be created or to query\n * the current device.\n */\ntypedef struct _D3DDeviceDesc {\n    DWORD            dwSize;                 /* Size of D3DDEVICEDESC structure */\n    DWORD            dwFlags;                /* Indicates which fields have valid data */\n    D3DCOLORMODEL    dcmColorModel;          /* Color model of device */\n    DWORD            dwDevCaps;              /* Capabilities of device */\n    D3DTRANSFORMCAPS dtcTransformCaps;       /* Capabilities of transform */\n    BOOL             bClipping;              /* Device can do 3D clipping */\n    D3DLIGHTINGCAPS  dlcLightingCaps;        /* Capabilities of lighting */\n    D3DPRIMCAPS      dpcLineCaps;\n    D3DPRIMCAPS      dpcTriCaps;\n    DWORD            dwDeviceRenderBitDepth; /* One of DDBB_8, 16, etc.. */\n    DWORD            dwDeviceZBufferBitDepth;/* One of DDBD_16, 32, etc.. */\n    DWORD            dwMaxBufferSize;        /* Maximum execute buffer size */\n    DWORD            dwMaxVertexCount;       /* Maximum vertex count */\n#if(DIRECT3D_VERSION >= 0x0500)\n    // *** New fields for DX5 *** //\n\n    // Width and height caps are 0 for legacy HALs.\n    DWORD        dwMinTextureWidth, dwMinTextureHeight;\n    DWORD        dwMaxTextureWidth, dwMaxTextureHeight;\n    DWORD        dwMinStippleWidth, dwMaxStippleWidth;\n    DWORD        dwMinStippleHeight, dwMaxStippleHeight;\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#if(DIRECT3D_VERSION >= 0x0600)\n    // New fields for DX6\n    DWORD       dwMaxTextureRepeat;\n    DWORD       dwMaxTextureAspectRatio;\n    DWORD       dwMaxAnisotropy;\n\n    // Guard band that the rasterizer can accommodate\n    // Screen-space vertices inside this space but outside the viewport\n    // will get clipped properly.\n    D3DVALUE    dvGuardBandLeft;\n    D3DVALUE    dvGuardBandTop;\n    D3DVALUE    dvGuardBandRight;\n    D3DVALUE    dvGuardBandBottom;\n\n    D3DVALUE    dvExtentsAdjust;\n    DWORD       dwStencilCaps;\n\n    DWORD       dwFVFCaps;\n    DWORD       dwTextureOpCaps;\n    WORD        wMaxTextureBlendStages;\n    WORD        wMaxSimultaneousTextures;\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n} D3DDEVICEDESC, *LPD3DDEVICEDESC;\n\n#if(DIRECT3D_VERSION >= 0x0700)\ntypedef struct _D3DDeviceDesc7 {\n    DWORD            dwDevCaps;              /* Capabilities of device */\n    D3DPRIMCAPS      dpcLineCaps;\n    D3DPRIMCAPS      dpcTriCaps;\n    DWORD            dwDeviceRenderBitDepth; /* One of DDBB_8, 16, etc.. */\n    DWORD            dwDeviceZBufferBitDepth;/* One of DDBD_16, 32, etc.. */\n\n    DWORD       dwMinTextureWidth, dwMinTextureHeight;\n    DWORD       dwMaxTextureWidth, dwMaxTextureHeight;\n\n    DWORD       dwMaxTextureRepeat;\n    DWORD       dwMaxTextureAspectRatio;\n    DWORD       dwMaxAnisotropy;\n\n    D3DVALUE    dvGuardBandLeft;\n    D3DVALUE    dvGuardBandTop;\n    D3DVALUE    dvGuardBandRight;\n    D3DVALUE    dvGuardBandBottom;\n\n    D3DVALUE    dvExtentsAdjust;\n    DWORD       dwStencilCaps;\n\n    DWORD       dwFVFCaps;\n    DWORD       dwTextureOpCaps;\n    WORD        wMaxTextureBlendStages;\n    WORD        wMaxSimultaneousTextures;\n\n    DWORD       dwMaxActiveLights;\n    D3DVALUE    dvMaxVertexW;\n    GUID        deviceGUID;\n\n    WORD        wMaxUserClipPlanes;\n    WORD        wMaxVertexBlendMatrices;\n\n    DWORD       dwVertexProcessingCaps;\n\n    DWORD       dwReserved1;\n    DWORD       dwReserved2;\n    DWORD       dwReserved3;\n    DWORD       dwReserved4;\n} D3DDEVICEDESC7, *LPD3DDEVICEDESC7;\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n#define D3DDEVICEDESCSIZE (sizeof(D3DDEVICEDESC))\n#define D3DDEVICEDESC7SIZE (sizeof(D3DDEVICEDESC7))\n\ntypedef HRESULT (CALLBACK * LPD3DENUMDEVICESCALLBACK)(GUID FAR *lpGuid, LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC, LPD3DDEVICEDESC, LPVOID);\n\n#if(DIRECT3D_VERSION >= 0x0700)\ntypedef HRESULT (CALLBACK * LPD3DENUMDEVICESCALLBACK7)(LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC7, LPVOID);\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n/* D3DDEVICEDESC dwFlags indicating valid fields */\n\n#define D3DDD_COLORMODEL            0x00000001L /* dcmColorModel is valid */\n#define D3DDD_DEVCAPS               0x00000002L /* dwDevCaps is valid */\n#define D3DDD_TRANSFORMCAPS         0x00000004L /* dtcTransformCaps is valid */\n#define D3DDD_LIGHTINGCAPS          0x00000008L /* dlcLightingCaps is valid */\n#define D3DDD_BCLIPPING             0x00000010L /* bClipping is valid */\n#define D3DDD_LINECAPS              0x00000020L /* dpcLineCaps is valid */\n#define D3DDD_TRICAPS               0x00000040L /* dpcTriCaps is valid */\n#define D3DDD_DEVICERENDERBITDEPTH  0x00000080L /* dwDeviceRenderBitDepth is valid */\n#define D3DDD_DEVICEZBUFFERBITDEPTH 0x00000100L /* dwDeviceZBufferBitDepth is valid */\n#define D3DDD_MAXBUFFERSIZE         0x00000200L /* dwMaxBufferSize is valid */\n#define D3DDD_MAXVERTEXCOUNT        0x00000400L /* dwMaxVertexCount is valid */\n\n/* D3DDEVICEDESC dwDevCaps flags */\n\n#define D3DDEVCAPS_FLOATTLVERTEX        0x00000001L /* Device accepts floating point */\n                                                    /* for post-transform vertex data */\n#define D3DDEVCAPS_SORTINCREASINGZ      0x00000002L /* Device needs data sorted for increasing Z */\n#define D3DDEVCAPS_SORTDECREASINGZ      0X00000004L /* Device needs data sorted for decreasing Z */\n#define D3DDEVCAPS_SORTEXACT            0x00000008L /* Device needs data sorted exactly */\n\n#define D3DDEVCAPS_EXECUTESYSTEMMEMORY  0x00000010L /* Device can use execute buffers from system memory */\n#define D3DDEVCAPS_EXECUTEVIDEOMEMORY   0x00000020L /* Device can use execute buffers from video memory */\n#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040L /* Device can use TL buffers from system memory */\n#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY  0x00000080L /* Device can use TL buffers from video memory */\n#define D3DDEVCAPS_TEXTURESYSTEMMEMORY  0x00000100L /* Device can texture from system memory */\n#define D3DDEVCAPS_TEXTUREVIDEOMEMORY   0x00000200L /* Device can texture from device memory */\n#if(DIRECT3D_VERSION >= 0x0500)\n#define D3DDEVCAPS_DRAWPRIMTLVERTEX     0x00000400L /* Device can draw TLVERTEX primitives */\n#define D3DDEVCAPS_CANRENDERAFTERFLIP   0x00000800L /* Device can render without waiting for flip to complete */\n#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x00001000L /* Device can texture from nonlocal video memory */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n#if(DIRECT3D_VERSION >= 0x0600)\n#define D3DDEVCAPS_DRAWPRIMITIVES2         0x00002000L /* Device can support DrawPrimitives2 */\n#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x00004000L /* Device is texturing from separate memory pools */\n#define D3DDEVCAPS_DRAWPRIMITIVES2EX       0x00008000L /* Device can support Extended DrawPrimitives2 i.e. DX7 compliant driver*/\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n#if(DIRECT3D_VERSION >= 0x0700)\n#define D3DDEVCAPS_HWTRANSFORMANDLIGHT     0x00010000L /* Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also */\n#define D3DDEVCAPS_CANBLTSYSTONONLOCAL     0x00020000L /* Device supports a Tex Blt from system memory to non-local vidmem */\n#define D3DDEVCAPS_HWRASTERIZATION         0x00080000L /* Device has HW acceleration for rasterization */\n\n/*\n * These are the flags in the D3DDEVICEDESC7.dwVertexProcessingCaps field\n */\n\n/* device can do texgen */\n#define D3DVTXPCAPS_TEXGEN              0x00000001L\n/* device can do IDirect3DDevice7 colormaterialsource ops */\n#define D3DVTXPCAPS_MATERIALSOURCE7     0x00000002L\n/* device can do vertex fog */\n#define D3DVTXPCAPS_VERTEXFOG           0x00000004L\n/* device can do directional lights */\n#define D3DVTXPCAPS_DIRECTIONALLIGHTS   0x00000008L\n/* device can do positional lights (includes point and spot) */\n#define D3DVTXPCAPS_POSITIONALLIGHTS    0x00000010L\n/* device can do local viewer */\n#define D3DVTXPCAPS_LOCALVIEWER         0x00000020L\n\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n#define D3DFDS_COLORMODEL        0x00000001L /* Match color model */\n#define D3DFDS_GUID              0x00000002L /* Match guid */\n#define D3DFDS_HARDWARE          0x00000004L /* Match hardware/software */\n#define D3DFDS_TRIANGLES         0x00000008L /* Match in triCaps */\n#define D3DFDS_LINES             0x00000010L /* Match in lineCaps  */\n#define D3DFDS_MISCCAPS          0x00000020L /* Match primCaps.dwMiscCaps */\n#define D3DFDS_RASTERCAPS        0x00000040L /* Match primCaps.dwRasterCaps */\n#define D3DFDS_ZCMPCAPS          0x00000080L /* Match primCaps.dwZCmpCaps */\n#define D3DFDS_ALPHACMPCAPS      0x00000100L /* Match primCaps.dwAlphaCmpCaps */\n#define D3DFDS_SRCBLENDCAPS      0x00000200L /* Match primCaps.dwSourceBlendCaps */\n#define D3DFDS_DSTBLENDCAPS      0x00000400L /* Match primCaps.dwDestBlendCaps */\n#define D3DFDS_SHADECAPS         0x00000800L /* Match primCaps.dwShadeCaps */\n#define D3DFDS_TEXTURECAPS       0x00001000L /* Match primCaps.dwTextureCaps */\n#define D3DFDS_TEXTUREFILTERCAPS 0x00002000L /* Match primCaps.dwTextureFilterCaps */\n#define D3DFDS_TEXTUREBLENDCAPS  0x00004000L /* Match primCaps.dwTextureBlendCaps */\n#define D3DFDS_TEXTUREADDRESSCAPS  0x00008000L /* Match primCaps.dwTextureBlendCaps */\n\n/*\n * FindDevice arguments\n */\ntypedef struct _D3DFINDDEVICESEARCH {\n    DWORD               dwSize;\n    DWORD               dwFlags;\n    BOOL                bHardware;\n    D3DCOLORMODEL       dcmColorModel;\n    GUID                guid;\n    DWORD               dwCaps;\n    D3DPRIMCAPS         dpcPrimCaps;\n} D3DFINDDEVICESEARCH, *LPD3DFINDDEVICESEARCH;\n\ntypedef struct _D3DFINDDEVICERESULT {\n    DWORD               dwSize;\n    GUID                guid;           /* guid which matched */\n    D3DDEVICEDESC       ddHwDesc;       /* hardware D3DDEVICEDESC */\n    D3DDEVICEDESC       ddSwDesc;       /* software D3DDEVICEDESC */\n} D3DFINDDEVICERESULT, *LPD3DFINDDEVICERESULT;\n\n/*\n * Description of execute buffer.\n */\ntypedef struct _D3DExecuteBufferDesc {\n    DWORD               dwSize;         /* size of this structure */\n    DWORD               dwFlags;        /* flags indicating which fields are valid */\n    DWORD               dwCaps;         /* capabilities of execute buffer */\n    DWORD               dwBufferSize;   /* size of execute buffer data */\n    LPVOID              lpData;         /* pointer to actual data */\n} D3DEXECUTEBUFFERDESC, *LPD3DEXECUTEBUFFERDESC;\n\n/* D3DEXECUTEBUFFER dwFlags indicating valid fields */\n\n#define D3DDEB_BUFSIZE          0x00000001l     /* buffer size valid */\n#define D3DDEB_CAPS             0x00000002l     /* caps valid */\n#define D3DDEB_LPDATA           0x00000004l     /* lpData valid */\n\n/* D3DEXECUTEBUFFER dwCaps */\n\n#define D3DDEBCAPS_SYSTEMMEMORY 0x00000001l     /* buffer in system memory */\n#define D3DDEBCAPS_VIDEOMEMORY  0x00000002l     /* buffer in device memory */\n#define D3DDEBCAPS_MEM (D3DDEBCAPS_SYSTEMMEMORY|D3DDEBCAPS_VIDEOMEMORY)\n\n#if(DIRECT3D_VERSION < 0x0800)\n\n#if(DIRECT3D_VERSION >= 0x0700)\ntypedef struct _D3DDEVINFO_TEXTUREMANAGER {\n    BOOL    bThrashing;                 /* indicates if thrashing */\n    DWORD   dwApproxBytesDownloaded;    /* Approximate number of bytes downloaded by texture manager */\n    DWORD   dwNumEvicts;                /* number of textures evicted */\n    DWORD   dwNumVidCreates;            /* number of textures created in video memory */\n    DWORD   dwNumTexturesUsed;          /* number of textures used */\n    DWORD   dwNumUsedTexInVid;          /* number of used textures present in video memory */\n    DWORD   dwWorkingSet;               /* number of textures in video memory */\n    DWORD   dwWorkingSetBytes;          /* number of bytes in video memory */\n    DWORD   dwTotalManaged;             /* total number of managed textures */\n    DWORD   dwTotalBytes;               /* total number of bytes of managed textures */\n    DWORD   dwLastPri;                  /* priority of last texture evicted */\n} D3DDEVINFO_TEXTUREMANAGER, *LPD3DDEVINFO_TEXTUREMANAGER;\n\ntypedef struct _D3DDEVINFO_TEXTURING {\n    DWORD   dwNumLoads;                 /* counts Load() API calls */\n    DWORD   dwApproxBytesLoaded;        /* Approximate number bytes loaded via Load() */\n    DWORD   dwNumPreLoads;              /* counts PreLoad() API calls */\n    DWORD   dwNumSet;                   /* counts SetTexture() API calls */\n    DWORD   dwNumCreates;               /* counts texture creates */\n    DWORD   dwNumDestroys;              /* counts texture destroys */\n    DWORD   dwNumSetPriorities;         /* counts SetPriority() API calls */\n    DWORD   dwNumSetLODs;               /* counts SetLOD() API calls */\n    DWORD   dwNumLocks;                 /* counts number of texture locks */\n    DWORD   dwNumGetDCs;                /* counts number of GetDCs to textures */\n} D3DDEVINFO_TEXTURING, *LPD3DDEVINFO_TEXTURING;\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n#endif //(DIRECT3D_VERSION < 0x0800)\n\n#pragma pack()\n\n\n#endif /* _D3DCAPS_H_ */\n\n"
  },
  {
    "path": "Include/d3dtypes.h",
    "content": "/*==========================================================================;\n *\n *  Copyright (C) Microsoft Corporation.  All Rights Reserved.\n *\n *  File:   d3dtypes.h\n *  Content:    Direct3D types include file\n *\n ***************************************************************************/\n\n#ifndef _D3DTYPES_H_\n#define _D3DTYPES_H_\n\n#ifndef DIRECT3D_VERSION\n#define DIRECT3D_VERSION         0x0700\n#endif\n\n#if (DIRECT3D_VERSION >= 0x0800)\n#pragma message(\"should not include d3dtypes.h when compiling for DX8 or newer interfaces\")\n#endif\n\n#include <windows.h>\n\n#include <float.h>\n#include \"ddraw.h\"\n\n#pragma warning(disable:4201) // anonymous unions warning\n#if defined(_X86_) || defined(_IA64_)\n#pragma pack(4)\n#endif\n\n\n/* D3DVALUE is the fundamental Direct3D fractional data type */\n\n#define D3DVALP(val, prec) ((float)(val))\n#define D3DVAL(val) ((float)(val))\n\n#ifndef DX_SHARED_DEFINES\n\n/*\n * This definition is shared with other DirectX components whose header files\n * might already have defined it. Therefore, we don't define this type if\n * someone else already has (as indicated by the definition of\n * DX_SHARED_DEFINES). We don't set DX_SHARED_DEFINES here as there are\n * other types in this header that are also shared. The last of these\n * shared defines in this file will set DX_SHARED_DEFINES.\n */\ntypedef float D3DVALUE, *LPD3DVALUE;\n\n#endif /* DX_SHARED_DEFINES */\n\n#define D3DDivide(a, b)    (float)((double) (a) / (double) (b))\n#define D3DMultiply(a, b)    ((a) * (b))\n\ntypedef LONG D3DFIXED;\n\n#ifndef RGB_MAKE\n/*\n * Format of CI colors is\n *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n *  |    alpha      |         color index           |   fraction    |\n *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n */\n#define CI_GETALPHA(ci)    ((ci) >> 24)\n#define CI_GETINDEX(ci)    (((ci) >> 8) & 0xffff)\n#define CI_GETFRACTION(ci) ((ci) & 0xff)\n#define CI_ROUNDINDEX(ci)  CI_GETINDEX((ci) + 0x80)\n#define CI_MASKALPHA(ci)   ((ci) & 0xffffff)\n#define CI_MAKE(a, i, f)    (((a) << 24) | ((i) << 8) | (f))\n\n/*\n * Format of RGBA colors is\n *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n *  |    alpha      |      red      |     green     |     blue      |\n *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n */\n#define RGBA_GETALPHA(rgb)      ((rgb) >> 24)\n#define RGBA_GETRED(rgb)        (((rgb) >> 16) & 0xff)\n#define RGBA_GETGREEN(rgb)      (((rgb) >> 8) & 0xff)\n#define RGBA_GETBLUE(rgb)       ((rgb) & 0xff)\n#define RGBA_MAKE(r, g, b, a)   ((D3DCOLOR) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b)))\n\n/* D3DRGB and D3DRGBA may be used as initialisers for D3DCOLORs\n * The float values must be in the range 0..1\n */\n#define D3DRGB(r, g, b) \\\n    (0xff000000L | ( ((long)((r) * 255)) << 16) | (((long)((g) * 255)) << 8) | (long)((b) * 255))\n#define D3DRGBA(r, g, b, a) \\\n    (   (((long)((a) * 255)) << 24) | (((long)((r) * 255)) << 16) \\\n    |   (((long)((g) * 255)) << 8) | (long)((b) * 255) \\\n    )\n\n/*\n * Format of RGB colors is\n *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n *  |    ignored    |      red      |     green     |     blue      |\n *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n */\n#define RGB_GETRED(rgb)         (((rgb) >> 16) & 0xff)\n#define RGB_GETGREEN(rgb)       (((rgb) >> 8) & 0xff)\n#define RGB_GETBLUE(rgb)        ((rgb) & 0xff)\n#define RGBA_SETALPHA(rgba, x) (((x) << 24) | ((rgba) & 0x00ffffff))\n#define RGB_MAKE(r, g, b)       ((D3DCOLOR) (((r) << 16) | ((g) << 8) | (b)))\n#define RGBA_TORGB(rgba)       ((D3DCOLOR) ((rgba) & 0xffffff))\n#define RGB_TORGBA(rgb)        ((D3DCOLOR) ((rgb) | 0xff000000))\n\n#endif\n\n/*\n * Flags for Enumerate functions\n */\n\n/*\n * Stop the enumeration\n */\n#define D3DENUMRET_CANCEL                        DDENUMRET_CANCEL\n\n/*\n * Continue the enumeration\n */\n#define D3DENUMRET_OK                            DDENUMRET_OK\n\ntypedef HRESULT (CALLBACK* LPD3DVALIDATECALLBACK)(LPVOID lpUserArg, DWORD dwOffset);\ntypedef HRESULT (CALLBACK* LPD3DENUMTEXTUREFORMATSCALLBACK)(LPDDSURFACEDESC lpDdsd, LPVOID lpContext);\ntypedef HRESULT (CALLBACK* LPD3DENUMPIXELFORMATSCALLBACK)(LPDDPIXELFORMAT lpDDPixFmt, LPVOID lpContext);\n\n#ifndef DX_SHARED_DEFINES\n\n/*\n * This definition is shared with other DirectX components whose header files\n * might already have defined it. Therefore, we don't define this type if\n * someone else already has (as indicated by the definition of\n * DX_SHARED_DEFINES). We don't set DX_SHARED_DEFINES here as there are\n * other types in this header that are also shared. The last of these\n * shared defines in this file will set DX_SHARED_DEFINES.\n */\n#ifndef D3DCOLOR_DEFINED\ntypedef DWORD D3DCOLOR;\n#define D3DCOLOR_DEFINED\n#endif\ntypedef DWORD *LPD3DCOLOR;\n\n#endif /* DX_SHARED_DEFINES */\n\ntypedef DWORD D3DMATERIALHANDLE, *LPD3DMATERIALHANDLE;\ntypedef DWORD D3DTEXTUREHANDLE, *LPD3DTEXTUREHANDLE;\ntypedef DWORD D3DMATRIXHANDLE, *LPD3DMATRIXHANDLE;\n\n#ifndef D3DCOLORVALUE_DEFINED\ntypedef struct _D3DCOLORVALUE {\n    union {\n    D3DVALUE r;\n    D3DVALUE dvR;\n    };\n    union {\n    D3DVALUE g;\n    D3DVALUE dvG;\n    };\n    union {\n    D3DVALUE b;\n    D3DVALUE dvB;\n    };\n    union {\n    D3DVALUE a;\n    D3DVALUE dvA;\n    };\n} D3DCOLORVALUE;\n#define D3DCOLORVALUE_DEFINED\n#endif\ntypedef struct _D3DCOLORVALUE *LPD3DCOLORVALUE;\n\n#ifndef D3DRECT_DEFINED\ntypedef struct _D3DRECT {\n    union {\n    LONG x1;\n    LONG lX1;\n    };\n    union {\n    LONG y1;\n    LONG lY1;\n    };\n    union {\n    LONG x2;\n    LONG lX2;\n    };\n    union {\n    LONG y2;\n    LONG lY2;\n    };\n} D3DRECT;\n#define D3DRECT_DEFINED\n#endif\ntypedef struct _D3DRECT *LPD3DRECT;\n\n#ifndef DX_SHARED_DEFINES\n\n/*\n * This definition is shared with other DirectX components whose header files\n * might already have defined it. Therefore, we don't define this type if\n * someone else already has (as indicated by the definition of\n * DX_SHARED_DEFINES).\n */\n\n#ifndef D3DVECTOR_DEFINED\ntypedef struct _D3DVECTOR {\n    union {\n    D3DVALUE x;\n    D3DVALUE dvX;\n    };\n    union {\n    D3DVALUE y;\n    D3DVALUE dvY;\n    };\n    union {\n    D3DVALUE z;\n    D3DVALUE dvZ;\n    };\n#if(DIRECT3D_VERSION >= 0x0500)\n#if (defined __cplusplus) && (defined D3D_OVERLOADS)\n\npublic:\n\n    // =====================================\n    // Constructors\n    // =====================================\n\n    _D3DVECTOR() { }\n    _D3DVECTOR(D3DVALUE f);\n    _D3DVECTOR(D3DVALUE _x, D3DVALUE _y, D3DVALUE _z);\n    _D3DVECTOR(const D3DVALUE f[3]);\n\n    // =====================================\n    // Access grants\n    // =====================================\n\n    const D3DVALUE&operator[](int i) const;\n    D3DVALUE&operator[](int i);\n\n    // =====================================\n    // Assignment operators\n    // =====================================\n\n    _D3DVECTOR& operator += (const _D3DVECTOR& v);\n    _D3DVECTOR& operator -= (const _D3DVECTOR& v);\n    _D3DVECTOR& operator *= (const _D3DVECTOR& v);\n    _D3DVECTOR& operator /= (const _D3DVECTOR& v);\n    _D3DVECTOR& operator *= (D3DVALUE s);\n    _D3DVECTOR& operator /= (D3DVALUE s);\n\n    // =====================================\n    // Unary operators\n    // =====================================\n\n    friend _D3DVECTOR operator + (const _D3DVECTOR& v);\n    friend _D3DVECTOR operator - (const _D3DVECTOR& v);\n\n\n    // =====================================\n    // Binary operators\n    // =====================================\n\n    // Addition and subtraction\n        friend _D3DVECTOR operator + (const _D3DVECTOR& v1, const _D3DVECTOR& v2);\n        friend _D3DVECTOR operator - (const _D3DVECTOR& v1, const _D3DVECTOR& v2);\n    // Scalar multiplication and division\n        friend _D3DVECTOR operator * (const _D3DVECTOR& v, D3DVALUE s);\n        friend _D3DVECTOR operator * (D3DVALUE s, const _D3DVECTOR& v);\n        friend _D3DVECTOR operator / (const _D3DVECTOR& v, D3DVALUE s);\n    // Memberwise multiplication and division\n        friend _D3DVECTOR operator * (const _D3DVECTOR& v1, const _D3DVECTOR& v2);\n        friend _D3DVECTOR operator / (const _D3DVECTOR& v1, const _D3DVECTOR& v2);\n\n    // Vector dominance\n        friend int operator < (const _D3DVECTOR& v1, const _D3DVECTOR& v2);\n        friend int operator <= (const _D3DVECTOR& v1, const _D3DVECTOR& v2);\n\n    // Bitwise equality\n        friend int operator == (const _D3DVECTOR& v1, const _D3DVECTOR& v2);\n\n    // Length-related functions\n        friend D3DVALUE SquareMagnitude (const _D3DVECTOR& v);\n        friend D3DVALUE Magnitude (const _D3DVECTOR& v);\n\n    // Returns vector with same direction and unit length\n        friend _D3DVECTOR Normalize (const _D3DVECTOR& v);\n\n    // Return min/max component of the input vector\n        friend D3DVALUE Min (const _D3DVECTOR& v);\n        friend D3DVALUE Max (const _D3DVECTOR& v);\n\n    // Return memberwise min/max of input vectors\n        friend _D3DVECTOR Minimize (const _D3DVECTOR& v1, const _D3DVECTOR& v2);\n        friend _D3DVECTOR Maximize (const _D3DVECTOR& v1, const _D3DVECTOR& v2);\n\n    // Dot and cross product\n        friend D3DVALUE DotProduct (const _D3DVECTOR& v1, const _D3DVECTOR& v2);\n        friend _D3DVECTOR CrossProduct (const _D3DVECTOR& v1, const _D3DVECTOR& v2);\n\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DVECTOR;\n#define D3DVECTOR_DEFINED\n#endif\ntypedef struct _D3DVECTOR *LPD3DVECTOR;\n\n/*\n * As this is the last of the shared defines to be defined we now set\n * D3D_SHARED_DEFINES to flag that fact that this header has defined these\n * types.\n */\n#define DX_SHARED_DEFINES\n\n#endif /* DX_SHARED_DEFINES */\n\n/*\n * Vertex data types supported in an ExecuteBuffer.\n */\n\n/*\n * Homogeneous vertices\n */\n\ntypedef struct _D3DHVERTEX {\n    DWORD           dwFlags;        /* Homogeneous clipping flags */\n    union {\n    D3DVALUE    hx;\n    D3DVALUE    dvHX;\n    };\n    union {\n    D3DVALUE    hy;\n    D3DVALUE    dvHY;\n    };\n    union {\n    D3DVALUE    hz;\n    D3DVALUE    dvHZ;\n    };\n} D3DHVERTEX, *LPD3DHVERTEX;\n\n/*\n * Transformed/lit vertices\n */\ntypedef struct _D3DTLVERTEX {\n    union {\n    D3DVALUE    sx;             /* Screen coordinates */\n    D3DVALUE    dvSX;\n    };\n    union {\n    D3DVALUE    sy;\n    D3DVALUE    dvSY;\n    };\n    union {\n    D3DVALUE    sz;\n    D3DVALUE    dvSZ;\n    };\n    union {\n    D3DVALUE    rhw;        /* Reciprocal of homogeneous w */\n    D3DVALUE    dvRHW;\n    };\n    union {\n    D3DCOLOR    color;          /* Vertex color */\n    D3DCOLOR    dcColor;\n    };\n    union {\n    D3DCOLOR    specular;       /* Specular component of vertex */\n    D3DCOLOR    dcSpecular;\n    };\n    union {\n    D3DVALUE    tu;             /* Texture coordinates */\n    D3DVALUE    dvTU;\n    };\n    union {\n    D3DVALUE    tv;\n    D3DVALUE    dvTV;\n    };\n#if(DIRECT3D_VERSION >= 0x0500)\n#if (defined __cplusplus) && (defined D3D_OVERLOADS)\n    _D3DTLVERTEX() { }\n    _D3DTLVERTEX(const D3DVECTOR& v, float _rhw,\n                 D3DCOLOR _color, D3DCOLOR _specular,\n                 float _tu, float _tv)\n        { sx = v.x; sy = v.y; sz = v.z; rhw = _rhw;\n          color = _color; specular = _specular;\n          tu = _tu; tv = _tv;\n        }\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DTLVERTEX, *LPD3DTLVERTEX;\n\n/*\n * Untransformed/lit vertices\n */\ntypedef struct _D3DLVERTEX {\n    union {\n    D3DVALUE     x;             /* Homogeneous coordinates */\n    D3DVALUE     dvX;\n    };\n    union {\n    D3DVALUE     y;\n    D3DVALUE     dvY;\n    };\n    union {\n    D3DVALUE     z;\n    D3DVALUE     dvZ;\n    };\n    DWORD            dwReserved;\n    union {\n    D3DCOLOR     color;         /* Vertex color */\n    D3DCOLOR     dcColor;\n    };\n    union {\n    D3DCOLOR     specular;      /* Specular component of vertex */\n    D3DCOLOR     dcSpecular;\n    };\n    union {\n    D3DVALUE     tu;            /* Texture coordinates */\n    D3DVALUE     dvTU;\n    };\n    union {\n    D3DVALUE     tv;\n    D3DVALUE     dvTV;\n    };\n#if(DIRECT3D_VERSION >= 0x0500)\n#if (defined __cplusplus) && (defined D3D_OVERLOADS)\n    _D3DLVERTEX() { }\n    _D3DLVERTEX(const D3DVECTOR& v,\n                D3DCOLOR _color, D3DCOLOR _specular,\n                float _tu, float _tv)\n        { x = v.x; y = v.y; z = v.z; dwReserved = 0;\n          color = _color; specular = _specular;\n          tu = _tu; tv = _tv;\n        }\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DLVERTEX, *LPD3DLVERTEX;\n\n/*\n * Untransformed/unlit vertices\n */\n\ntypedef struct _D3DVERTEX {\n    union {\n    D3DVALUE     x;             /* Homogeneous coordinates */\n    D3DVALUE     dvX;\n    };\n    union {\n    D3DVALUE     y;\n    D3DVALUE     dvY;\n    };\n    union {\n    D3DVALUE     z;\n    D3DVALUE     dvZ;\n    };\n    union {\n    D3DVALUE     nx;            /* Normal */\n    D3DVALUE     dvNX;\n    };\n    union {\n    D3DVALUE     ny;\n    D3DVALUE     dvNY;\n    };\n    union {\n    D3DVALUE     nz;\n    D3DVALUE     dvNZ;\n    };\n    union {\n    D3DVALUE     tu;            /* Texture coordinates */\n    D3DVALUE     dvTU;\n    };\n    union {\n    D3DVALUE     tv;\n    D3DVALUE     dvTV;\n    };\n#if(DIRECT3D_VERSION >= 0x0500)\n#if (defined __cplusplus) && (defined D3D_OVERLOADS)\n    _D3DVERTEX() { }\n    _D3DVERTEX(const D3DVECTOR& v, const D3DVECTOR& n, float _tu, float _tv)\n        { x = v.x; y = v.y; z = v.z;\n          nx = n.x; ny = n.y; nz = n.z;\n          tu = _tu; tv = _tv;\n        }\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DVERTEX, *LPD3DVERTEX;\n\n\n/*\n * Matrix, viewport, and tranformation structures and definitions.\n */\n\n#ifndef D3DMATRIX_DEFINED\ntypedef struct _D3DMATRIX {\n#if(DIRECT3D_VERSION >= 0x0500)\n#if (defined __cplusplus) && (defined D3D_OVERLOADS)\n    union {\n        struct {\n#endif\n\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n            D3DVALUE        _11, _12, _13, _14;\n            D3DVALUE        _21, _22, _23, _24;\n            D3DVALUE        _31, _32, _33, _34;\n            D3DVALUE        _41, _42, _43, _44;\n\n#if(DIRECT3D_VERSION >= 0x0500)\n#if (defined __cplusplus) && (defined D3D_OVERLOADS)\n        };\n        D3DVALUE m[4][4];\n    };\n    _D3DMATRIX() { }\n    _D3DMATRIX( D3DVALUE _m00, D3DVALUE _m01, D3DVALUE _m02, D3DVALUE _m03,\n                D3DVALUE _m10, D3DVALUE _m11, D3DVALUE _m12, D3DVALUE _m13,\n                D3DVALUE _m20, D3DVALUE _m21, D3DVALUE _m22, D3DVALUE _m23,\n                D3DVALUE _m30, D3DVALUE _m31, D3DVALUE _m32, D3DVALUE _m33\n        )\n        {\n                m[0][0] = _m00; m[0][1] = _m01; m[0][2] = _m02; m[0][3] = _m03;\n                m[1][0] = _m10; m[1][1] = _m11; m[1][2] = _m12; m[1][3] = _m13;\n                m[2][0] = _m20; m[2][1] = _m21; m[2][2] = _m22; m[2][3] = _m23;\n                m[3][0] = _m30; m[3][1] = _m31; m[3][2] = _m32; m[3][3] = _m33;\n        }\n\n    D3DVALUE& operator()(int iRow, int iColumn) { return m[iRow][iColumn]; }\n    const D3DVALUE& operator()(int iRow, int iColumn) const { return m[iRow][iColumn]; }\n#if(DIRECT3D_VERSION >= 0x0600)\n    friend _D3DMATRIX operator* (const _D3DMATRIX&, const _D3DMATRIX&);\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n#endif\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DMATRIX;\n#define D3DMATRIX_DEFINED\n#endif\ntypedef struct _D3DMATRIX *LPD3DMATRIX;\n\n#if (defined __cplusplus) && (defined D3D_OVERLOADS)\n#include \"d3dvec.inl\"\n#endif\n\ntypedef struct _D3DVIEWPORT {\n    DWORD       dwSize;\n    DWORD       dwX;\n    DWORD       dwY;        /* Top left */\n    DWORD       dwWidth;\n    DWORD       dwHeight;   /* Dimensions */\n    D3DVALUE    dvScaleX;   /* Scale homogeneous to screen */\n    D3DVALUE    dvScaleY;   /* Scale homogeneous to screen */\n    D3DVALUE    dvMaxX;     /* Min/max homogeneous x coord */\n    D3DVALUE    dvMaxY;     /* Min/max homogeneous y coord */\n    D3DVALUE    dvMinZ;\n    D3DVALUE    dvMaxZ;     /* Min/max homogeneous z coord */\n} D3DVIEWPORT, *LPD3DVIEWPORT;\n\n#if(DIRECT3D_VERSION >= 0x0500)\ntypedef struct _D3DVIEWPORT2 {\n    DWORD       dwSize;\n    DWORD       dwX;\n    DWORD       dwY;        /* Viewport Top left */\n    DWORD       dwWidth;\n    DWORD       dwHeight;   /* Viewport Dimensions */\n    D3DVALUE    dvClipX;        /* Top left of clip volume */\n    D3DVALUE    dvClipY;\n    D3DVALUE    dvClipWidth;    /* Clip Volume Dimensions */\n    D3DVALUE    dvClipHeight;\n    D3DVALUE    dvMinZ;         /* Min/max of clip Volume */\n    D3DVALUE    dvMaxZ;\n} D3DVIEWPORT2, *LPD3DVIEWPORT2;\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#if(DIRECT3D_VERSION >= 0x0700)\ntypedef struct _D3DVIEWPORT7 {\n    DWORD       dwX;\n    DWORD       dwY;            /* Viewport Top left */\n    DWORD       dwWidth;\n    DWORD       dwHeight;       /* Viewport Dimensions */\n    D3DVALUE    dvMinZ;         /* Min/max of clip Volume */\n    D3DVALUE    dvMaxZ;\n} D3DVIEWPORT7, *LPD3DVIEWPORT7;\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n/*\n * Values for clip fields.\n */\n\n#if(DIRECT3D_VERSION >= 0x0700)\n\n// Max number of user clipping planes, supported in D3D.\n#define D3DMAXUSERCLIPPLANES 32\n\n// These bits could be ORed together to use with D3DRENDERSTATE_CLIPPLANEENABLE\n//\n#define D3DCLIPPLANE0 (1 << 0)\n#define D3DCLIPPLANE1 (1 << 1)\n#define D3DCLIPPLANE2 (1 << 2)\n#define D3DCLIPPLANE3 (1 << 3)\n#define D3DCLIPPLANE4 (1 << 4)\n#define D3DCLIPPLANE5 (1 << 5)\n\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n#define D3DCLIP_LEFT                0x00000001L\n#define D3DCLIP_RIGHT               0x00000002L\n#define D3DCLIP_TOP             0x00000004L\n#define D3DCLIP_BOTTOM              0x00000008L\n#define D3DCLIP_FRONT               0x00000010L\n#define D3DCLIP_BACK                0x00000020L\n#define D3DCLIP_GEN0                0x00000040L\n#define D3DCLIP_GEN1                0x00000080L\n#define D3DCLIP_GEN2                0x00000100L\n#define D3DCLIP_GEN3                0x00000200L\n#define D3DCLIP_GEN4                0x00000400L\n#define D3DCLIP_GEN5                0x00000800L\n\n/*\n * Values for d3d status.\n */\n#define D3DSTATUS_CLIPUNIONLEFT         D3DCLIP_LEFT\n#define D3DSTATUS_CLIPUNIONRIGHT        D3DCLIP_RIGHT\n#define D3DSTATUS_CLIPUNIONTOP          D3DCLIP_TOP\n#define D3DSTATUS_CLIPUNIONBOTTOM       D3DCLIP_BOTTOM\n#define D3DSTATUS_CLIPUNIONFRONT        D3DCLIP_FRONT\n#define D3DSTATUS_CLIPUNIONBACK         D3DCLIP_BACK\n#define D3DSTATUS_CLIPUNIONGEN0         D3DCLIP_GEN0\n#define D3DSTATUS_CLIPUNIONGEN1         D3DCLIP_GEN1\n#define D3DSTATUS_CLIPUNIONGEN2         D3DCLIP_GEN2\n#define D3DSTATUS_CLIPUNIONGEN3         D3DCLIP_GEN3\n#define D3DSTATUS_CLIPUNIONGEN4         D3DCLIP_GEN4\n#define D3DSTATUS_CLIPUNIONGEN5         D3DCLIP_GEN5\n\n#define D3DSTATUS_CLIPINTERSECTIONLEFT      0x00001000L\n#define D3DSTATUS_CLIPINTERSECTIONRIGHT     0x00002000L\n#define D3DSTATUS_CLIPINTERSECTIONTOP       0x00004000L\n#define D3DSTATUS_CLIPINTERSECTIONBOTTOM    0x00008000L\n#define D3DSTATUS_CLIPINTERSECTIONFRONT     0x00010000L\n#define D3DSTATUS_CLIPINTERSECTIONBACK      0x00020000L\n#define D3DSTATUS_CLIPINTERSECTIONGEN0      0x00040000L\n#define D3DSTATUS_CLIPINTERSECTIONGEN1      0x00080000L\n#define D3DSTATUS_CLIPINTERSECTIONGEN2      0x00100000L\n#define D3DSTATUS_CLIPINTERSECTIONGEN3      0x00200000L\n#define D3DSTATUS_CLIPINTERSECTIONGEN4      0x00400000L\n#define D3DSTATUS_CLIPINTERSECTIONGEN5      0x00800000L\n#define D3DSTATUS_ZNOTVISIBLE               0x01000000L\n/* Do not use 0x80000000 for any status flags in future as it is reserved */\n\n#define D3DSTATUS_CLIPUNIONALL  (       \\\n        D3DSTATUS_CLIPUNIONLEFT |   \\\n        D3DSTATUS_CLIPUNIONRIGHT    |   \\\n        D3DSTATUS_CLIPUNIONTOP  |   \\\n        D3DSTATUS_CLIPUNIONBOTTOM   |   \\\n        D3DSTATUS_CLIPUNIONFRONT    |   \\\n        D3DSTATUS_CLIPUNIONBACK |   \\\n        D3DSTATUS_CLIPUNIONGEN0 |   \\\n        D3DSTATUS_CLIPUNIONGEN1 |   \\\n        D3DSTATUS_CLIPUNIONGEN2 |   \\\n        D3DSTATUS_CLIPUNIONGEN3 |   \\\n        D3DSTATUS_CLIPUNIONGEN4 |   \\\n        D3DSTATUS_CLIPUNIONGEN5     \\\n        )\n\n#define D3DSTATUS_CLIPINTERSECTIONALL   (       \\\n        D3DSTATUS_CLIPINTERSECTIONLEFT  |   \\\n        D3DSTATUS_CLIPINTERSECTIONRIGHT |   \\\n        D3DSTATUS_CLIPINTERSECTIONTOP   |   \\\n        D3DSTATUS_CLIPINTERSECTIONBOTTOM    |   \\\n        D3DSTATUS_CLIPINTERSECTIONFRONT |   \\\n        D3DSTATUS_CLIPINTERSECTIONBACK  |   \\\n        D3DSTATUS_CLIPINTERSECTIONGEN0  |   \\\n        D3DSTATUS_CLIPINTERSECTIONGEN1  |   \\\n        D3DSTATUS_CLIPINTERSECTIONGEN2  |   \\\n        D3DSTATUS_CLIPINTERSECTIONGEN3  |   \\\n        D3DSTATUS_CLIPINTERSECTIONGEN4  |   \\\n        D3DSTATUS_CLIPINTERSECTIONGEN5      \\\n        )\n\n#define D3DSTATUS_DEFAULT   (           \\\n        D3DSTATUS_CLIPINTERSECTIONALL   |   \\\n        D3DSTATUS_ZNOTVISIBLE)\n\n\n/*\n * Options for direct transform calls\n */\n#define D3DTRANSFORM_CLIPPED       0x00000001l\n#define D3DTRANSFORM_UNCLIPPED     0x00000002l\n\ntypedef struct _D3DTRANSFORMDATA {\n    DWORD           dwSize;\n    LPVOID      lpIn;           /* Input vertices */\n    DWORD           dwInSize;       /* Stride of input vertices */\n    LPVOID      lpOut;          /* Output vertices */\n    DWORD           dwOutSize;      /* Stride of output vertices */\n    LPD3DHVERTEX    lpHOut;         /* Output homogeneous vertices */\n    DWORD           dwClip;         /* Clipping hint */\n    DWORD           dwClipIntersection;\n    DWORD           dwClipUnion;    /* Union of all clip flags */\n    D3DRECT         drExtent;       /* Extent of transformed vertices */\n} D3DTRANSFORMDATA, *LPD3DTRANSFORMDATA;\n\n/*\n * Structure defining position and direction properties for lighting.\n */\ntypedef struct _D3DLIGHTINGELEMENT {\n    D3DVECTOR dvPosition;           /* Lightable point in model space */\n    D3DVECTOR dvNormal;             /* Normalised unit vector */\n} D3DLIGHTINGELEMENT, *LPD3DLIGHTINGELEMENT;\n\n/*\n * Structure defining material properties for lighting.\n */\ntypedef struct _D3DMATERIAL {\n    DWORD           dwSize;\n    union {\n    D3DCOLORVALUE   diffuse;        /* Diffuse color RGBA */\n    D3DCOLORVALUE   dcvDiffuse;\n    };\n    union {\n    D3DCOLORVALUE   ambient;        /* Ambient color RGB */\n    D3DCOLORVALUE   dcvAmbient;\n    };\n    union {\n    D3DCOLORVALUE   specular;       /* Specular 'shininess' */\n    D3DCOLORVALUE   dcvSpecular;\n    };\n    union {\n    D3DCOLORVALUE   emissive;       /* Emissive color RGB */\n    D3DCOLORVALUE   dcvEmissive;\n    };\n    union {\n    D3DVALUE        power;          /* Sharpness if specular highlight */\n    D3DVALUE        dvPower;\n    };\n    D3DTEXTUREHANDLE    hTexture;       /* Handle to texture map */\n    DWORD           dwRampSize;\n} D3DMATERIAL, *LPD3DMATERIAL;\n\n#if(DIRECT3D_VERSION >= 0x0700)\n\ntypedef struct _D3DMATERIAL7 {\n    union {\n    D3DCOLORVALUE   diffuse;        /* Diffuse color RGBA */\n    D3DCOLORVALUE   dcvDiffuse;\n    };\n    union {\n    D3DCOLORVALUE   ambient;        /* Ambient color RGB */\n    D3DCOLORVALUE   dcvAmbient;\n    };\n    union {\n    D3DCOLORVALUE   specular;       /* Specular 'shininess' */\n    D3DCOLORVALUE   dcvSpecular;\n    };\n    union {\n    D3DCOLORVALUE   emissive;       /* Emissive color RGB */\n    D3DCOLORVALUE   dcvEmissive;\n    };\n    union {\n    D3DVALUE        power;          /* Sharpness if specular highlight */\n    D3DVALUE        dvPower;\n    };\n} D3DMATERIAL7, *LPD3DMATERIAL7;\n\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n#if(DIRECT3D_VERSION < 0x0800)\n\ntypedef enum _D3DLIGHTTYPE {\n    D3DLIGHT_POINT          = 1,\n    D3DLIGHT_SPOT           = 2,\n    D3DLIGHT_DIRECTIONAL    = 3,\n// Note: The following light type (D3DLIGHT_PARALLELPOINT)\n// is no longer supported from D3D for DX7 onwards.\n    D3DLIGHT_PARALLELPOINT  = 4,\n#if(DIRECT3D_VERSION < 0x0500) // For backward compatible headers\n    D3DLIGHT_GLSPOT         = 5,\n#endif\n    D3DLIGHT_FORCE_DWORD    = 0x7fffffff, /* force 32-bit size enum */\n} D3DLIGHTTYPE;\n\n#else\ntypedef enum _D3DLIGHTTYPE D3DLIGHTTYPE;\n#define D3DLIGHT_PARALLELPOINT  (D3DLIGHTTYPE)4\n#define D3DLIGHT_GLSPOT         (D3DLIGHTTYPE)5\n\n#endif //(DIRECT3D_VERSION < 0x0800)\n\n/*\n * Structure defining a light source and its properties.\n */\ntypedef struct _D3DLIGHT {\n    DWORD           dwSize;\n    D3DLIGHTTYPE    dltType;            /* Type of light source */\n    D3DCOLORVALUE   dcvColor;           /* Color of light */\n    D3DVECTOR       dvPosition;         /* Position in world space */\n    D3DVECTOR       dvDirection;        /* Direction in world space */\n    D3DVALUE        dvRange;            /* Cutoff range */\n    D3DVALUE        dvFalloff;          /* Falloff */\n    D3DVALUE        dvAttenuation0;     /* Constant attenuation */\n    D3DVALUE        dvAttenuation1;     /* Linear attenuation */\n    D3DVALUE        dvAttenuation2;     /* Quadratic attenuation */\n    D3DVALUE        dvTheta;            /* Inner angle of spotlight cone */\n    D3DVALUE        dvPhi;              /* Outer angle of spotlight cone */\n} D3DLIGHT, *LPD3DLIGHT;\n\n#if(DIRECT3D_VERSION >= 0x0700)\n\ntypedef struct _D3DLIGHT7 {\n    D3DLIGHTTYPE    dltType;            /* Type of light source */\n    D3DCOLORVALUE   dcvDiffuse;         /* Diffuse color of light */\n    D3DCOLORVALUE   dcvSpecular;        /* Specular color of light */\n    D3DCOLORVALUE   dcvAmbient;         /* Ambient color of light */\n    D3DVECTOR       dvPosition;         /* Position in world space */\n    D3DVECTOR       dvDirection;        /* Direction in world space */\n    D3DVALUE        dvRange;            /* Cutoff range */\n    D3DVALUE        dvFalloff;          /* Falloff */\n    D3DVALUE        dvAttenuation0;     /* Constant attenuation */\n    D3DVALUE        dvAttenuation1;     /* Linear attenuation */\n    D3DVALUE        dvAttenuation2;     /* Quadratic attenuation */\n    D3DVALUE        dvTheta;            /* Inner angle of spotlight cone */\n    D3DVALUE        dvPhi;              /* Outer angle of spotlight cone */\n} D3DLIGHT7, *LPD3DLIGHT7;\n\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n#if(DIRECT3D_VERSION >= 0x0500)\n/*\n * Structure defining a light source and its properties.\n */\n\n/* flags bits */\n#define D3DLIGHT_ACTIVE         0x00000001\n#define D3DLIGHT_NO_SPECULAR    0x00000002\n#define D3DLIGHT_ALL (D3DLIGHT_ACTIVE | D3DLIGHT_NO_SPECULAR)\n\n/* maximum valid light range */\n#define D3DLIGHT_RANGE_MAX      ((float)sqrt(FLT_MAX))\n\ntypedef struct _D3DLIGHT2 {\n    DWORD           dwSize;\n    D3DLIGHTTYPE    dltType;        /* Type of light source */\n    D3DCOLORVALUE   dcvColor;       /* Color of light */\n    D3DVECTOR       dvPosition;     /* Position in world space */\n    D3DVECTOR       dvDirection;    /* Direction in world space */\n    D3DVALUE        dvRange;        /* Cutoff range */\n    D3DVALUE        dvFalloff;      /* Falloff */\n    D3DVALUE        dvAttenuation0; /* Constant attenuation */\n    D3DVALUE        dvAttenuation1; /* Linear attenuation */\n    D3DVALUE        dvAttenuation2; /* Quadratic attenuation */\n    D3DVALUE        dvTheta;        /* Inner angle of spotlight cone */\n    D3DVALUE        dvPhi;          /* Outer angle of spotlight cone */\n    DWORD           dwFlags;\n} D3DLIGHT2, *LPD3DLIGHT2;\n\n#endif /* DIRECT3D_VERSION >= 0x0500 */\ntypedef struct _D3DLIGHTDATA {\n    DWORD                dwSize;\n    LPD3DLIGHTINGELEMENT lpIn;      /* Input positions and normals */\n    DWORD                dwInSize;  /* Stride of input elements */\n    LPD3DTLVERTEX        lpOut;     /* Output colors */\n    DWORD                dwOutSize; /* Stride of output colors */\n} D3DLIGHTDATA, *LPD3DLIGHTDATA;\n\n#if(DIRECT3D_VERSION >= 0x0500)\n/*\n * Before DX5, these values were in an enum called\n * D3DCOLORMODEL. This was not correct, since they are\n * bit flags. A driver can surface either or both flags\n * in the dcmColorModel member of D3DDEVICEDESC.\n */\n#define D3DCOLOR_MONO   1\n#define D3DCOLOR_RGB    2\n\ntypedef DWORD D3DCOLORMODEL;\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n/*\n * Options for clearing\n */\n#define D3DCLEAR_TARGET            0x00000001l  /* Clear target surface */\n#define D3DCLEAR_ZBUFFER           0x00000002l  /* Clear target z buffer */\n#if(DIRECT3D_VERSION >= 0x0600)\n#define D3DCLEAR_STENCIL           0x00000004l  /* Clear stencil planes */\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n/*\n * Execute buffers are allocated via Direct3D.  These buffers may then\n * be filled by the application with instructions to execute along with\n * vertex data.\n */\n\n/*\n * Supported op codes for execute instructions.\n */\ntypedef enum _D3DOPCODE {\n    D3DOP_POINT                 = 1,\n    D3DOP_LINE                  = 2,\n    D3DOP_TRIANGLE      = 3,\n    D3DOP_MATRIXLOAD        = 4,\n    D3DOP_MATRIXMULTIPLY    = 5,\n    D3DOP_STATETRANSFORM        = 6,\n    D3DOP_STATELIGHT        = 7,\n    D3DOP_STATERENDER       = 8,\n    D3DOP_PROCESSVERTICES       = 9,\n    D3DOP_TEXTURELOAD       = 10,\n    D3DOP_EXIT                  = 11,\n    D3DOP_BRANCHFORWARD     = 12,\n    D3DOP_SPAN          = 13,\n    D3DOP_SETSTATUS     = 14,\n#if(DIRECT3D_VERSION >= 0x0500)\n    D3DOP_FORCE_DWORD           = 0x7fffffff, /* force 32-bit size enum */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DOPCODE;\n\ntypedef struct _D3DINSTRUCTION {\n    BYTE bOpcode;   /* Instruction opcode */\n    BYTE bSize;     /* Size of each instruction data unit */\n    WORD wCount;    /* Count of instruction data units to follow */\n} D3DINSTRUCTION, *LPD3DINSTRUCTION;\n\n/*\n * Structure for texture loads\n */\ntypedef struct _D3DTEXTURELOAD {\n    D3DTEXTUREHANDLE hDestTexture;\n    D3DTEXTUREHANDLE hSrcTexture;\n} D3DTEXTURELOAD, *LPD3DTEXTURELOAD;\n\n/*\n * Structure for picking\n */\ntypedef struct _D3DPICKRECORD {\n    BYTE     bOpcode;\n    BYTE     bPad;\n    DWORD    dwOffset;\n    D3DVALUE dvZ;\n} D3DPICKRECORD, *LPD3DPICKRECORD;\n\n/*\n * The following defines the rendering states which can be set in the\n * execute buffer.\n */\n\n#if(DIRECT3D_VERSION < 0x0800)\n\ntypedef enum _D3DSHADEMODE {\n    D3DSHADE_FLAT              = 1,\n    D3DSHADE_GOURAUD           = 2,\n    D3DSHADE_PHONG             = 3,\n#if(DIRECT3D_VERSION >= 0x0500)\n    D3DSHADE_FORCE_DWORD       = 0x7fffffff, /* force 32-bit size enum */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DSHADEMODE;\n\ntypedef enum _D3DFILLMODE {\n    D3DFILL_POINT          = 1,\n    D3DFILL_WIREFRAME          = 2,\n    D3DFILL_SOLID          = 3,\n#if(DIRECT3D_VERSION >= 0x0500)\n    D3DFILL_FORCE_DWORD        = 0x7fffffff, /* force 32-bit size enum */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DFILLMODE;\n\ntypedef struct _D3DLINEPATTERN {\n    WORD    wRepeatFactor;\n    WORD    wLinePattern;\n} D3DLINEPATTERN;\n\n#endif //(DIRECT3D_VERSION < 0x0800)\n\ntypedef enum _D3DTEXTUREFILTER {\n    D3DFILTER_NEAREST          = 1,\n    D3DFILTER_LINEAR           = 2,\n    D3DFILTER_MIPNEAREST       = 3,\n    D3DFILTER_MIPLINEAR        = 4,\n    D3DFILTER_LINEARMIPNEAREST = 5,\n    D3DFILTER_LINEARMIPLINEAR  = 6,\n#if(DIRECT3D_VERSION >= 0x0500)\n    D3DFILTER_FORCE_DWORD      = 0x7fffffff, /* force 32-bit size enum */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DTEXTUREFILTER;\n\n#if(DIRECT3D_VERSION < 0x0800)\n\ntypedef enum _D3DBLEND {\n    D3DBLEND_ZERO              = 1,\n    D3DBLEND_ONE               = 2,\n    D3DBLEND_SRCCOLOR          = 3,\n    D3DBLEND_INVSRCCOLOR       = 4,\n    D3DBLEND_SRCALPHA          = 5,\n    D3DBLEND_INVSRCALPHA       = 6,\n    D3DBLEND_DESTALPHA         = 7,\n    D3DBLEND_INVDESTALPHA      = 8,\n    D3DBLEND_DESTCOLOR         = 9,\n    D3DBLEND_INVDESTCOLOR      = 10,\n    D3DBLEND_SRCALPHASAT       = 11,\n    D3DBLEND_BOTHSRCALPHA      = 12,\n    D3DBLEND_BOTHINVSRCALPHA   = 13,\n#if(DIRECT3D_VERSION >= 0x0500)\n    D3DBLEND_FORCE_DWORD       = 0x7fffffff, /* force 32-bit size enum */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DBLEND;\n\n#endif //(DIRECT3D_VERSION < 0x0800)\n\ntypedef enum _D3DTEXTUREBLEND {\n    D3DTBLEND_DECAL            = 1,\n    D3DTBLEND_MODULATE         = 2,\n    D3DTBLEND_DECALALPHA       = 3,\n    D3DTBLEND_MODULATEALPHA    = 4,\n    D3DTBLEND_DECALMASK        = 5,\n    D3DTBLEND_MODULATEMASK     = 6,\n    D3DTBLEND_COPY             = 7,\n#if(DIRECT3D_VERSION >= 0x0500)\n    D3DTBLEND_ADD              = 8,\n    D3DTBLEND_FORCE_DWORD      = 0x7fffffff, /* force 32-bit size enum */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DTEXTUREBLEND;\n\n#if(DIRECT3D_VERSION < 0x0800)\n\ntypedef enum _D3DTEXTUREADDRESS {\n    D3DTADDRESS_WRAP           = 1,\n    D3DTADDRESS_MIRROR         = 2,\n    D3DTADDRESS_CLAMP          = 3,\n#if(DIRECT3D_VERSION >= 0x0500)\n    D3DTADDRESS_BORDER         = 4,\n    D3DTADDRESS_FORCE_DWORD    = 0x7fffffff, /* force 32-bit size enum */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DTEXTUREADDRESS;\n\ntypedef enum _D3DCULL {\n    D3DCULL_NONE               = 1,\n    D3DCULL_CW                 = 2,\n    D3DCULL_CCW                = 3,\n#if(DIRECT3D_VERSION >= 0x0500)\n    D3DCULL_FORCE_DWORD        = 0x7fffffff, /* force 32-bit size enum */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DCULL;\n\ntypedef enum _D3DCMPFUNC {\n    D3DCMP_NEVER               = 1,\n    D3DCMP_LESS                = 2,\n    D3DCMP_EQUAL               = 3,\n    D3DCMP_LESSEQUAL           = 4,\n    D3DCMP_GREATER             = 5,\n    D3DCMP_NOTEQUAL            = 6,\n    D3DCMP_GREATEREQUAL        = 7,\n    D3DCMP_ALWAYS              = 8,\n#if(DIRECT3D_VERSION >= 0x0500)\n    D3DCMP_FORCE_DWORD         = 0x7fffffff, /* force 32-bit size enum */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DCMPFUNC;\n\n#if(DIRECT3D_VERSION >= 0x0600)\ntypedef enum _D3DSTENCILOP {\n    D3DSTENCILOP_KEEP           = 1,\n    D3DSTENCILOP_ZERO           = 2,\n    D3DSTENCILOP_REPLACE        = 3,\n    D3DSTENCILOP_INCRSAT        = 4,\n    D3DSTENCILOP_DECRSAT        = 5,\n    D3DSTENCILOP_INVERT         = 6,\n    D3DSTENCILOP_INCR           = 7,\n    D3DSTENCILOP_DECR           = 8,\n    D3DSTENCILOP_FORCE_DWORD    = 0x7fffffff, /* force 32-bit size enum */\n} D3DSTENCILOP;\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\ntypedef enum _D3DFOGMODE {\n    D3DFOG_NONE                = 0,\n    D3DFOG_EXP                 = 1,\n    D3DFOG_EXP2                = 2,\n#if(DIRECT3D_VERSION >= 0x0500)\n    D3DFOG_LINEAR              = 3,\n    D3DFOG_FORCE_DWORD         = 0x7fffffff, /* force 32-bit size enum */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DFOGMODE;\n\n#if(DIRECT3D_VERSION >= 0x0600)\ntypedef enum _D3DZBUFFERTYPE {\n    D3DZB_FALSE                 = 0,\n    D3DZB_TRUE                  = 1, // Z buffering\n    D3DZB_USEW                  = 2, // W buffering\n    D3DZB_FORCE_DWORD           = 0x7fffffff, /* force 32-bit size enum */\n} D3DZBUFFERTYPE;\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n#endif //(DIRECT3D_VERSION < 0x0800)\n\n#if(DIRECT3D_VERSION >= 0x0500)\ntypedef enum _D3DANTIALIASMODE {\n    D3DANTIALIAS_NONE          = 0,\n    D3DANTIALIAS_SORTDEPENDENT = 1,\n    D3DANTIALIAS_SORTINDEPENDENT = 2,\n    D3DANTIALIAS_FORCE_DWORD   = 0x7fffffff, /* force 32-bit size enum */\n} D3DANTIALIASMODE;\n\n// Vertex types supported by Direct3D\ntypedef enum _D3DVERTEXTYPE {\n    D3DVT_VERTEX        = 1,\n    D3DVT_LVERTEX       = 2,\n    D3DVT_TLVERTEX      = 3,\n    D3DVT_FORCE_DWORD   = 0x7fffffff, /* force 32-bit size enum */\n} D3DVERTEXTYPE;\n\n#if(DIRECT3D_VERSION < 0x0800)\n\n// Primitives supported by draw-primitive API\ntypedef enum _D3DPRIMITIVETYPE {\n    D3DPT_POINTLIST     = 1,\n    D3DPT_LINELIST      = 2,\n    D3DPT_LINESTRIP     = 3,\n    D3DPT_TRIANGLELIST  = 4,\n    D3DPT_TRIANGLESTRIP = 5,\n    D3DPT_TRIANGLEFAN   = 6,\n    D3DPT_FORCE_DWORD   = 0x7fffffff, /* force 32-bit size enum */\n} D3DPRIMITIVETYPE;\n\n#endif //(DIRECT3D_VERSION < 0x0800)\n\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n/*\n * Amount to add to a state to generate the override for that state.\n */\n#define D3DSTATE_OVERRIDE_BIAS      256\n\n/*\n * A state which sets the override flag for the specified state type.\n */\n#define D3DSTATE_OVERRIDE(type) (D3DRENDERSTATETYPE)(((DWORD) (type) + D3DSTATE_OVERRIDE_BIAS))\n\n#if(DIRECT3D_VERSION < 0x0800)\n\ntypedef enum _D3DTRANSFORMSTATETYPE {\n    D3DTRANSFORMSTATE_WORLD         = 1,\n    D3DTRANSFORMSTATE_VIEW          = 2,\n    D3DTRANSFORMSTATE_PROJECTION    = 3,\n#if(DIRECT3D_VERSION >= 0x0700)\n    D3DTRANSFORMSTATE_WORLD1        = 4,  // 2nd matrix to blend\n    D3DTRANSFORMSTATE_WORLD2        = 5,  // 3rd matrix to blend\n    D3DTRANSFORMSTATE_WORLD3        = 6,  // 4th matrix to blend\n    D3DTRANSFORMSTATE_TEXTURE0      = 16,\n    D3DTRANSFORMSTATE_TEXTURE1      = 17,\n    D3DTRANSFORMSTATE_TEXTURE2      = 18,\n    D3DTRANSFORMSTATE_TEXTURE3      = 19,\n    D3DTRANSFORMSTATE_TEXTURE4      = 20,\n    D3DTRANSFORMSTATE_TEXTURE5      = 21,\n    D3DTRANSFORMSTATE_TEXTURE6      = 22,\n    D3DTRANSFORMSTATE_TEXTURE7      = 23,\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n#if(DIRECT3D_VERSION >= 0x0500)\n    D3DTRANSFORMSTATE_FORCE_DWORD     = 0x7fffffff, /* force 32-bit size enum */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DTRANSFORMSTATETYPE;\n\n#else\n\n//\n// legacy transform state names\n//\ntypedef enum _D3DTRANSFORMSTATETYPE D3DTRANSFORMSTATETYPE;\n#define D3DTRANSFORMSTATE_WORLD         (D3DTRANSFORMSTATETYPE)1\n#define D3DTRANSFORMSTATE_VIEW          (D3DTRANSFORMSTATETYPE)2\n#define D3DTRANSFORMSTATE_PROJECTION    (D3DTRANSFORMSTATETYPE)3\n#define D3DTRANSFORMSTATE_WORLD1        (D3DTRANSFORMSTATETYPE)4\n#define D3DTRANSFORMSTATE_WORLD2        (D3DTRANSFORMSTATETYPE)5\n#define D3DTRANSFORMSTATE_WORLD3        (D3DTRANSFORMSTATETYPE)6\n#define D3DTRANSFORMSTATE_TEXTURE0      (D3DTRANSFORMSTATETYPE)16\n#define D3DTRANSFORMSTATE_TEXTURE1      (D3DTRANSFORMSTATETYPE)17\n#define D3DTRANSFORMSTATE_TEXTURE2      (D3DTRANSFORMSTATETYPE)18\n#define D3DTRANSFORMSTATE_TEXTURE3      (D3DTRANSFORMSTATETYPE)19\n#define D3DTRANSFORMSTATE_TEXTURE4      (D3DTRANSFORMSTATETYPE)20\n#define D3DTRANSFORMSTATE_TEXTURE5      (D3DTRANSFORMSTATETYPE)21\n#define D3DTRANSFORMSTATE_TEXTURE6      (D3DTRANSFORMSTATETYPE)22\n#define D3DTRANSFORMSTATE_TEXTURE7      (D3DTRANSFORMSTATETYPE)23\n\n#endif //(DIRECT3D_VERSION < 0x0800)\n\ntypedef enum _D3DLIGHTSTATETYPE {\n    D3DLIGHTSTATE_MATERIAL          = 1,\n    D3DLIGHTSTATE_AMBIENT           = 2,\n    D3DLIGHTSTATE_COLORMODEL        = 3,\n    D3DLIGHTSTATE_FOGMODE           = 4,\n    D3DLIGHTSTATE_FOGSTART          = 5,\n    D3DLIGHTSTATE_FOGEND            = 6,\n    D3DLIGHTSTATE_FOGDENSITY        = 7,\n#if(DIRECT3D_VERSION >= 0x0600)\n    D3DLIGHTSTATE_COLORVERTEX       = 8,\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n#if(DIRECT3D_VERSION >= 0x0500)\n    D3DLIGHTSTATE_FORCE_DWORD         = 0x7fffffff, /* force 32-bit size enum */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DLIGHTSTATETYPE;\n\n#if(DIRECT3D_VERSION < 0x0800)\n\ntypedef enum _D3DRENDERSTATETYPE {\n    D3DRENDERSTATE_ANTIALIAS          = 2,    /* D3DANTIALIASMODE */\n    D3DRENDERSTATE_TEXTUREPERSPECTIVE = 4,    /* TRUE for perspective correction */\n    D3DRENDERSTATE_ZENABLE            = 7,    /* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) */\n    D3DRENDERSTATE_FILLMODE           = 8,    /* D3DFILL_MODE        */\n    D3DRENDERSTATE_SHADEMODE          = 9,    /* D3DSHADEMODE */\n    D3DRENDERSTATE_LINEPATTERN        = 10,   /* D3DLINEPATTERN */\n    D3DRENDERSTATE_ZWRITEENABLE       = 14,   /* TRUE to enable z writes */\n    D3DRENDERSTATE_ALPHATESTENABLE    = 15,   /* TRUE to enable alpha tests */\n    D3DRENDERSTATE_LASTPIXEL          = 16,   /* TRUE for last-pixel on lines */\n    D3DRENDERSTATE_SRCBLEND           = 19,   /* D3DBLEND */\n    D3DRENDERSTATE_DESTBLEND          = 20,   /* D3DBLEND */\n    D3DRENDERSTATE_CULLMODE           = 22,   /* D3DCULL */\n    D3DRENDERSTATE_ZFUNC              = 23,   /* D3DCMPFUNC */\n    D3DRENDERSTATE_ALPHAREF           = 24,   /* D3DFIXED */\n    D3DRENDERSTATE_ALPHAFUNC          = 25,   /* D3DCMPFUNC */\n    D3DRENDERSTATE_DITHERENABLE       = 26,   /* TRUE to enable dithering */\n#if(DIRECT3D_VERSION >= 0x0500)\n    D3DRENDERSTATE_ALPHABLENDENABLE   = 27,   /* TRUE to enable alpha blending */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n    D3DRENDERSTATE_FOGENABLE          = 28,   /* TRUE to enable fog blending */\n    D3DRENDERSTATE_SPECULARENABLE     = 29,   /* TRUE to enable specular */\n    D3DRENDERSTATE_ZVISIBLE           = 30,   /* TRUE to enable z checking */\n    D3DRENDERSTATE_STIPPLEDALPHA      = 33,   /* TRUE to enable stippled alpha (RGB device only) */\n    D3DRENDERSTATE_FOGCOLOR           = 34,   /* D3DCOLOR */\n    D3DRENDERSTATE_FOGTABLEMODE       = 35,   /* D3DFOGMODE */\n#if(DIRECT3D_VERSION >= 0x0700)\n    D3DRENDERSTATE_FOGSTART           = 36,   /* Fog start (for both vertex and pixel fog) */\n    D3DRENDERSTATE_FOGEND             = 37,   /* Fog end      */\n    D3DRENDERSTATE_FOGDENSITY         = 38,   /* Fog density  */\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n#if(DIRECT3D_VERSION >= 0x0500)\n    D3DRENDERSTATE_EDGEANTIALIAS      = 40,   /* TRUE to enable edge antialiasing */\n    D3DRENDERSTATE_COLORKEYENABLE     = 41,   /* TRUE to enable source colorkeyed textures */\n    D3DRENDERSTATE_ZBIAS              = 47,   /* LONG Z bias */\n    D3DRENDERSTATE_RANGEFOGENABLE     = 48,   /* Enables range-based fog */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#if(DIRECT3D_VERSION >= 0x0600)\n    D3DRENDERSTATE_STENCILENABLE      = 52,   /* BOOL enable/disable stenciling */\n    D3DRENDERSTATE_STENCILFAIL        = 53,   /* D3DSTENCILOP to do if stencil test fails */\n    D3DRENDERSTATE_STENCILZFAIL       = 54,   /* D3DSTENCILOP to do if stencil test passes and Z test fails */\n    D3DRENDERSTATE_STENCILPASS        = 55,   /* D3DSTENCILOP to do if both stencil and Z tests pass */\n    D3DRENDERSTATE_STENCILFUNC        = 56,   /* D3DCMPFUNC fn.  Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */\n    D3DRENDERSTATE_STENCILREF         = 57,   /* Reference value used in stencil test */\n    D3DRENDERSTATE_STENCILMASK        = 58,   /* Mask value used in stencil test */\n    D3DRENDERSTATE_STENCILWRITEMASK   = 59,   /* Write mask applied to values written to stencil buffer */\n    D3DRENDERSTATE_TEXTUREFACTOR      = 60,   /* D3DCOLOR used for multi-texture blend */\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n#if(DIRECT3D_VERSION >= 0x0600)\n\n    /*\n     * 128 values [128, 255] are reserved for texture coordinate wrap flags.\n     * These are constructed with the D3DWRAP_U and D3DWRAP_V macros. Using\n     * a flags word preserves forward compatibility with texture coordinates\n     * that are >2D.\n     */\n    D3DRENDERSTATE_WRAP0              = 128,  /* wrap for 1st texture coord. set */\n    D3DRENDERSTATE_WRAP1              = 129,  /* wrap for 2nd texture coord. set */\n    D3DRENDERSTATE_WRAP2              = 130,  /* wrap for 3rd texture coord. set */\n    D3DRENDERSTATE_WRAP3              = 131,  /* wrap for 4th texture coord. set */\n    D3DRENDERSTATE_WRAP4              = 132,  /* wrap for 5th texture coord. set */\n    D3DRENDERSTATE_WRAP5              = 133,  /* wrap for 6th texture coord. set */\n    D3DRENDERSTATE_WRAP6              = 134,  /* wrap for 7th texture coord. set */\n    D3DRENDERSTATE_WRAP7              = 135,  /* wrap for 8th texture coord. set */\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n#if(DIRECT3D_VERSION >= 0x0700)\n    D3DRENDERSTATE_CLIPPING            = 136,\n    D3DRENDERSTATE_LIGHTING            = 137,\n    D3DRENDERSTATE_EXTENTS             = 138,\n    D3DRENDERSTATE_AMBIENT             = 139,\n    D3DRENDERSTATE_FOGVERTEXMODE       = 140,\n    D3DRENDERSTATE_COLORVERTEX         = 141,\n    D3DRENDERSTATE_LOCALVIEWER         = 142,\n    D3DRENDERSTATE_NORMALIZENORMALS    = 143,\n    D3DRENDERSTATE_COLORKEYBLENDENABLE = 144,\n    D3DRENDERSTATE_DIFFUSEMATERIALSOURCE    = 145,\n    D3DRENDERSTATE_SPECULARMATERIALSOURCE   = 146,\n    D3DRENDERSTATE_AMBIENTMATERIALSOURCE    = 147,\n    D3DRENDERSTATE_EMISSIVEMATERIALSOURCE   = 148,\n    D3DRENDERSTATE_VERTEXBLEND              = 151,\n    D3DRENDERSTATE_CLIPPLANEENABLE          = 152,\n\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n//\n// retired renderstates - not supported for DX7 interfaces\n//\n    D3DRENDERSTATE_TEXTUREHANDLE      = 1,    /* Texture handle for legacy interfaces (Texture,Texture2) */\n    D3DRENDERSTATE_TEXTUREADDRESS     = 3,    /* D3DTEXTUREADDRESS  */\n    D3DRENDERSTATE_WRAPU              = 5,    /* TRUE for wrapping in u */\n    D3DRENDERSTATE_WRAPV              = 6,    /* TRUE for wrapping in v */\n    D3DRENDERSTATE_MONOENABLE         = 11,   /* TRUE to enable mono rasterization */\n    D3DRENDERSTATE_ROP2               = 12,   /* ROP2 */\n    D3DRENDERSTATE_PLANEMASK          = 13,   /* DWORD physical plane mask */\n    D3DRENDERSTATE_TEXTUREMAG         = 17,   /* D3DTEXTUREFILTER */\n    D3DRENDERSTATE_TEXTUREMIN         = 18,   /* D3DTEXTUREFILTER */\n    D3DRENDERSTATE_TEXTUREMAPBLEND    = 21,   /* D3DTEXTUREBLEND */\n    D3DRENDERSTATE_SUBPIXEL           = 31,   /* TRUE to enable subpixel correction */\n    D3DRENDERSTATE_SUBPIXELX          = 32,   /* TRUE to enable correction in X only */\n    D3DRENDERSTATE_STIPPLEENABLE      = 39,   /* TRUE to enable stippling */\n#if(DIRECT3D_VERSION >= 0x0500)\n    D3DRENDERSTATE_BORDERCOLOR        = 43,   /* Border color for texturing w/border */\n    D3DRENDERSTATE_TEXTUREADDRESSU    = 44,   /* Texture addressing mode for U coordinate */\n    D3DRENDERSTATE_TEXTUREADDRESSV    = 45,   /* Texture addressing mode for V coordinate */\n    D3DRENDERSTATE_MIPMAPLODBIAS      = 46,   /* D3DVALUE Mipmap LOD bias */\n    D3DRENDERSTATE_ANISOTROPY         = 49,   /* Max. anisotropy. 1 = no anisotropy */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n    D3DRENDERSTATE_FLUSHBATCH         = 50,   /* Explicit flush for DP batching (DX5 Only) */\n#if(DIRECT3D_VERSION >= 0x0600)\n    D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT=51, /* BOOL enable sort-independent transparency */\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n    D3DRENDERSTATE_STIPPLEPATTERN00   = 64,   /* Stipple pattern 01...  */\n    D3DRENDERSTATE_STIPPLEPATTERN01   = 65,\n    D3DRENDERSTATE_STIPPLEPATTERN02   = 66,\n    D3DRENDERSTATE_STIPPLEPATTERN03   = 67,\n    D3DRENDERSTATE_STIPPLEPATTERN04   = 68,\n    D3DRENDERSTATE_STIPPLEPATTERN05   = 69,\n    D3DRENDERSTATE_STIPPLEPATTERN06   = 70,\n    D3DRENDERSTATE_STIPPLEPATTERN07   = 71,\n    D3DRENDERSTATE_STIPPLEPATTERN08   = 72,\n    D3DRENDERSTATE_STIPPLEPATTERN09   = 73,\n    D3DRENDERSTATE_STIPPLEPATTERN10   = 74,\n    D3DRENDERSTATE_STIPPLEPATTERN11   = 75,\n    D3DRENDERSTATE_STIPPLEPATTERN12   = 76,\n    D3DRENDERSTATE_STIPPLEPATTERN13   = 77,\n    D3DRENDERSTATE_STIPPLEPATTERN14   = 78,\n    D3DRENDERSTATE_STIPPLEPATTERN15   = 79,\n    D3DRENDERSTATE_STIPPLEPATTERN16   = 80,\n    D3DRENDERSTATE_STIPPLEPATTERN17   = 81,\n    D3DRENDERSTATE_STIPPLEPATTERN18   = 82,\n    D3DRENDERSTATE_STIPPLEPATTERN19   = 83,\n    D3DRENDERSTATE_STIPPLEPATTERN20   = 84,\n    D3DRENDERSTATE_STIPPLEPATTERN21   = 85,\n    D3DRENDERSTATE_STIPPLEPATTERN22   = 86,\n    D3DRENDERSTATE_STIPPLEPATTERN23   = 87,\n    D3DRENDERSTATE_STIPPLEPATTERN24   = 88,\n    D3DRENDERSTATE_STIPPLEPATTERN25   = 89,\n    D3DRENDERSTATE_STIPPLEPATTERN26   = 90,\n    D3DRENDERSTATE_STIPPLEPATTERN27   = 91,\n    D3DRENDERSTATE_STIPPLEPATTERN28   = 92,\n    D3DRENDERSTATE_STIPPLEPATTERN29   = 93,\n    D3DRENDERSTATE_STIPPLEPATTERN30   = 94,\n    D3DRENDERSTATE_STIPPLEPATTERN31   = 95,\n\n//\n// retired renderstate names - the values are still used under new naming conventions\n//\n    D3DRENDERSTATE_FOGTABLESTART      = 36,   /* Fog table start    */\n    D3DRENDERSTATE_FOGTABLEEND        = 37,   /* Fog table end      */\n    D3DRENDERSTATE_FOGTABLEDENSITY    = 38,   /* Fog table density  */\n\n#if(DIRECT3D_VERSION >= 0x0500)\n    D3DRENDERSTATE_FORCE_DWORD        = 0x7fffffff, /* force 32-bit size enum */\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n} D3DRENDERSTATETYPE;\n\n#else\n\ntypedef enum _D3DRENDERSTATETYPE D3DRENDERSTATETYPE;\n\n//\n// legacy renderstate names\n//\n#define D3DRENDERSTATE_TEXTUREPERSPECTIVE       (D3DRENDERSTATETYPE)4\n#define D3DRENDERSTATE_ZENABLE                  (D3DRENDERSTATETYPE)7\n#define D3DRENDERSTATE_FILLMODE                 (D3DRENDERSTATETYPE)8\n#define D3DRENDERSTATE_SHADEMODE                (D3DRENDERSTATETYPE)9\n#define D3DRENDERSTATE_LINEPATTERN              (D3DRENDERSTATETYPE)10\n#define D3DRENDERSTATE_ZWRITEENABLE             (D3DRENDERSTATETYPE)14\n#define D3DRENDERSTATE_ALPHATESTENABLE          (D3DRENDERSTATETYPE)15\n#define D3DRENDERSTATE_LASTPIXEL                (D3DRENDERSTATETYPE)16\n#define D3DRENDERSTATE_SRCBLEND                 (D3DRENDERSTATETYPE)19\n#define D3DRENDERSTATE_DESTBLEND                (D3DRENDERSTATETYPE)20\n#define D3DRENDERSTATE_CULLMODE                 (D3DRENDERSTATETYPE)22\n#define D3DRENDERSTATE_ZFUNC                    (D3DRENDERSTATETYPE)23\n#define D3DRENDERSTATE_ALPHAREF                 (D3DRENDERSTATETYPE)24\n#define D3DRENDERSTATE_ALPHAFUNC                (D3DRENDERSTATETYPE)25\n#define D3DRENDERSTATE_DITHERENABLE             (D3DRENDERSTATETYPE)26\n#define D3DRENDERSTATE_ALPHABLENDENABLE         (D3DRENDERSTATETYPE)27\n#define D3DRENDERSTATE_FOGENABLE                (D3DRENDERSTATETYPE)28\n#define D3DRENDERSTATE_SPECULARENABLE           (D3DRENDERSTATETYPE)29\n#define D3DRENDERSTATE_ZVISIBLE                 (D3DRENDERSTATETYPE)30\n#define D3DRENDERSTATE_STIPPLEDALPHA            (D3DRENDERSTATETYPE)33\n#define D3DRENDERSTATE_FOGCOLOR                 (D3DRENDERSTATETYPE)34\n#define D3DRENDERSTATE_FOGTABLEMODE             (D3DRENDERSTATETYPE)35\n#define D3DRENDERSTATE_FOGSTART                 (D3DRENDERSTATETYPE)36\n#define D3DRENDERSTATE_FOGEND                   (D3DRENDERSTATETYPE)37\n#define D3DRENDERSTATE_FOGDENSITY               (D3DRENDERSTATETYPE)38\n#define D3DRENDERSTATE_EDGEANTIALIAS            (D3DRENDERSTATETYPE)40\n#define D3DRENDERSTATE_ZBIAS                    (D3DRENDERSTATETYPE)47\n#define D3DRENDERSTATE_RANGEFOGENABLE           (D3DRENDERSTATETYPE)48\n#define D3DRENDERSTATE_STENCILENABLE            (D3DRENDERSTATETYPE)52\n#define D3DRENDERSTATE_STENCILFAIL              (D3DRENDERSTATETYPE)53\n#define D3DRENDERSTATE_STENCILZFAIL             (D3DRENDERSTATETYPE)54\n#define D3DRENDERSTATE_STENCILPASS              (D3DRENDERSTATETYPE)55\n#define D3DRENDERSTATE_STENCILFUNC              (D3DRENDERSTATETYPE)56\n#define D3DRENDERSTATE_STENCILREF               (D3DRENDERSTATETYPE)57\n#define D3DRENDERSTATE_STENCILMASK              (D3DRENDERSTATETYPE)58\n#define D3DRENDERSTATE_STENCILWRITEMASK         (D3DRENDERSTATETYPE)59\n#define D3DRENDERSTATE_TEXTUREFACTOR            (D3DRENDERSTATETYPE)60\n#define D3DRENDERSTATE_WRAP0                    (D3DRENDERSTATETYPE)128\n#define D3DRENDERSTATE_WRAP1                    (D3DRENDERSTATETYPE)129\n#define D3DRENDERSTATE_WRAP2                    (D3DRENDERSTATETYPE)130\n#define D3DRENDERSTATE_WRAP3                    (D3DRENDERSTATETYPE)131\n#define D3DRENDERSTATE_WRAP4                    (D3DRENDERSTATETYPE)132\n#define D3DRENDERSTATE_WRAP5                    (D3DRENDERSTATETYPE)133\n#define D3DRENDERSTATE_WRAP6                    (D3DRENDERSTATETYPE)134\n#define D3DRENDERSTATE_WRAP7                    (D3DRENDERSTATETYPE)135\n\n#define D3DRENDERSTATE_CLIPPING                 (D3DRENDERSTATETYPE)136\n#define D3DRENDERSTATE_LIGHTING                 (D3DRENDERSTATETYPE)137\n#define D3DRENDERSTATE_EXTENTS                  (D3DRENDERSTATETYPE)138\n#define D3DRENDERSTATE_AMBIENT                  (D3DRENDERSTATETYPE)139\n#define D3DRENDERSTATE_FOGVERTEXMODE            (D3DRENDERSTATETYPE)140\n#define D3DRENDERSTATE_COLORVERTEX              (D3DRENDERSTATETYPE)141\n#define D3DRENDERSTATE_LOCALVIEWER              (D3DRENDERSTATETYPE)142\n#define D3DRENDERSTATE_NORMALIZENORMALS         (D3DRENDERSTATETYPE)143\n#define D3DRENDERSTATE_COLORKEYBLENDENABLE      (D3DRENDERSTATETYPE)144\n#define D3DRENDERSTATE_DIFFUSEMATERIALSOURCE    (D3DRENDERSTATETYPE)145\n#define D3DRENDERSTATE_SPECULARMATERIALSOURCE   (D3DRENDERSTATETYPE)146\n#define D3DRENDERSTATE_AMBIENTMATERIALSOURCE    (D3DRENDERSTATETYPE)147\n#define D3DRENDERSTATE_EMISSIVEMATERIALSOURCE   (D3DRENDERSTATETYPE)148\n#define D3DRENDERSTATE_VERTEXBLEND              (D3DRENDERSTATETYPE)151\n#define D3DRENDERSTATE_CLIPPLANEENABLE          (D3DRENDERSTATETYPE)152\n\n//\n// retired renderstates - not supported for DX7 interfaces\n//\n#define D3DRENDERSTATE_TEXTUREHANDLE     (D3DRENDERSTATETYPE)1\n#define D3DRENDERSTATE_ANTIALIAS         (D3DRENDERSTATETYPE)2\n#define D3DRENDERSTATE_TEXTUREADDRESS    (D3DRENDERSTATETYPE)3\n#define D3DRENDERSTATE_WRAPU             (D3DRENDERSTATETYPE)5\n#define D3DRENDERSTATE_WRAPV             (D3DRENDERSTATETYPE)6\n#define D3DRENDERSTATE_MONOENABLE        (D3DRENDERSTATETYPE)11\n#define D3DRENDERSTATE_ROP2              (D3DRENDERSTATETYPE)12\n#define D3DRENDERSTATE_PLANEMASK         (D3DRENDERSTATETYPE)13\n#define D3DRENDERSTATE_TEXTUREMAG        (D3DRENDERSTATETYPE)17\n#define D3DRENDERSTATE_TEXTUREMIN        (D3DRENDERSTATETYPE)18\n#define D3DRENDERSTATE_TEXTUREMAPBLEND   (D3DRENDERSTATETYPE)21\n#define D3DRENDERSTATE_SUBPIXEL          (D3DRENDERSTATETYPE)31\n#define D3DRENDERSTATE_SUBPIXELX         (D3DRENDERSTATETYPE)32\n#define D3DRENDERSTATE_STIPPLEENABLE     (D3DRENDERSTATETYPE)39\n#define D3DRENDERSTATE_OLDALPHABLENDENABLE  (D3DRENDERSTATETYPE)42\n#define D3DRENDERSTATE_BORDERCOLOR       (D3DRENDERSTATETYPE)43\n#define D3DRENDERSTATE_TEXTUREADDRESSU   (D3DRENDERSTATETYPE)44\n#define D3DRENDERSTATE_TEXTUREADDRESSV   (D3DRENDERSTATETYPE)45\n#define D3DRENDERSTATE_MIPMAPLODBIAS     (D3DRENDERSTATETYPE)46\n#define D3DRENDERSTATE_ANISOTROPY        (D3DRENDERSTATETYPE)49\n#define D3DRENDERSTATE_FLUSHBATCH        (D3DRENDERSTATETYPE)50\n#define D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT (D3DRENDERSTATETYPE)51\n#define D3DRENDERSTATE_STIPPLEPATTERN00  (D3DRENDERSTATETYPE)64\n#define D3DRENDERSTATE_STIPPLEPATTERN01  (D3DRENDERSTATETYPE)65\n#define D3DRENDERSTATE_STIPPLEPATTERN02  (D3DRENDERSTATETYPE)66\n#define D3DRENDERSTATE_STIPPLEPATTERN03  (D3DRENDERSTATETYPE)67\n#define D3DRENDERSTATE_STIPPLEPATTERN04  (D3DRENDERSTATETYPE)68\n#define D3DRENDERSTATE_STIPPLEPATTERN05  (D3DRENDERSTATETYPE)69\n#define D3DRENDERSTATE_STIPPLEPATTERN06  (D3DRENDERSTATETYPE)70\n#define D3DRENDERSTATE_STIPPLEPATTERN07  (D3DRENDERSTATETYPE)71\n#define D3DRENDERSTATE_STIPPLEPATTERN08  (D3DRENDERSTATETYPE)72\n#define D3DRENDERSTATE_STIPPLEPATTERN09  (D3DRENDERSTATETYPE)73\n#define D3DRENDERSTATE_STIPPLEPATTERN10  (D3DRENDERSTATETYPE)74\n#define D3DRENDERSTATE_STIPPLEPATTERN11  (D3DRENDERSTATETYPE)75\n#define D3DRENDERSTATE_STIPPLEPATTERN12  (D3DRENDERSTATETYPE)76\n#define D3DRENDERSTATE_STIPPLEPATTERN13  (D3DRENDERSTATETYPE)77\n#define D3DRENDERSTATE_STIPPLEPATTERN14  (D3DRENDERSTATETYPE)78\n#define D3DRENDERSTATE_STIPPLEPATTERN15  (D3DRENDERSTATETYPE)79\n#define D3DRENDERSTATE_STIPPLEPATTERN16  (D3DRENDERSTATETYPE)80\n#define D3DRENDERSTATE_STIPPLEPATTERN17  (D3DRENDERSTATETYPE)81\n#define D3DRENDERSTATE_STIPPLEPATTERN18  (D3DRENDERSTATETYPE)82\n#define D3DRENDERSTATE_STIPPLEPATTERN19  (D3DRENDERSTATETYPE)83\n#define D3DRENDERSTATE_STIPPLEPATTERN20  (D3DRENDERSTATETYPE)84\n#define D3DRENDERSTATE_STIPPLEPATTERN21  (D3DRENDERSTATETYPE)85\n#define D3DRENDERSTATE_STIPPLEPATTERN22  (D3DRENDERSTATETYPE)86\n#define D3DRENDERSTATE_STIPPLEPATTERN23  (D3DRENDERSTATETYPE)87\n#define D3DRENDERSTATE_STIPPLEPATTERN24  (D3DRENDERSTATETYPE)88\n#define D3DRENDERSTATE_STIPPLEPATTERN25  (D3DRENDERSTATETYPE)89\n#define D3DRENDERSTATE_STIPPLEPATTERN26  (D3DRENDERSTATETYPE)90\n#define D3DRENDERSTATE_STIPPLEPATTERN27  (D3DRENDERSTATETYPE)91\n#define D3DRENDERSTATE_STIPPLEPATTERN28  (D3DRENDERSTATETYPE)92\n#define D3DRENDERSTATE_STIPPLEPATTERN29  (D3DRENDERSTATETYPE)93\n#define D3DRENDERSTATE_STIPPLEPATTERN30  (D3DRENDERSTATETYPE)94\n#define D3DRENDERSTATE_STIPPLEPATTERN31  (D3DRENDERSTATETYPE)95\n\n//\n// retired renderstates - not supported for DX8 interfaces\n//\n#define D3DRENDERSTATE_COLORKEYENABLE        (D3DRENDERSTATETYPE)41\n#define D3DRENDERSTATE_COLORKEYBLENDENABLE   (D3DRENDERSTATETYPE)144\n\n//\n// retired renderstate names - the values are still used under new naming conventions\n//\n#define D3DRENDERSTATE_BLENDENABLE       (D3DRENDERSTATETYPE)27\n#define D3DRENDERSTATE_FOGTABLESTART     (D3DRENDERSTATETYPE)36\n#define D3DRENDERSTATE_FOGTABLEEND       (D3DRENDERSTATETYPE)37\n#define D3DRENDERSTATE_FOGTABLEDENSITY   (D3DRENDERSTATETYPE)38\n\n#endif //(DIRECT3D_VERSION < 0x0800)\n\n\n#if(DIRECT3D_VERSION < 0x0800)\n\n// Values for material source\ntypedef enum _D3DMATERIALCOLORSOURCE\n{\n    D3DMCS_MATERIAL = 0,                // Color from material is used\n    D3DMCS_COLOR1   = 1,                // Diffuse vertex color is used\n    D3DMCS_COLOR2   = 2,                // Specular vertex color is used\n    D3DMCS_FORCE_DWORD = 0x7fffffff,    // force 32-bit size enum\n} D3DMATERIALCOLORSOURCE;\n\n\n#if(DIRECT3D_VERSION >= 0x0500)\n// For back-compatibility with legacy compilations\n#define D3DRENDERSTATE_BLENDENABLE      D3DRENDERSTATE_ALPHABLENDENABLE\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n\n#if(DIRECT3D_VERSION >= 0x0600)\n\n// Bias to apply to the texture coordinate set to apply a wrap to.\n#define D3DRENDERSTATE_WRAPBIAS                 128UL\n\n/* Flags to construct the WRAP render states */\n#define D3DWRAP_U   0x00000001L\n#define D3DWRAP_V   0x00000002L\n\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n#if(DIRECT3D_VERSION >= 0x0700)\n\n/* Flags to construct the WRAP render states for 1D thru 4D texture coordinates */\n#define D3DWRAPCOORD_0   0x00000001L    // same as D3DWRAP_U\n#define D3DWRAPCOORD_1   0x00000002L    // same as D3DWRAP_V\n#define D3DWRAPCOORD_2   0x00000004L\n#define D3DWRAPCOORD_3   0x00000008L\n\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n#endif //(DIRECT3D_VERSION < 0x0800)\n\n#define D3DRENDERSTATE_STIPPLEPATTERN(y) (D3DRENDERSTATE_STIPPLEPATTERN00 + (y))\n\ntypedef struct _D3DSTATE {\n    union {\n#if(DIRECT3D_VERSION < 0x0800)\n    D3DTRANSFORMSTATETYPE   dtstTransformStateType;\n#endif //(DIRECT3D_VERSION < 0x0800)\n    D3DLIGHTSTATETYPE   dlstLightStateType;\n    D3DRENDERSTATETYPE  drstRenderStateType;\n    };\n    union {\n    DWORD           dwArg[1];\n    D3DVALUE        dvArg[1];\n    };\n} D3DSTATE, *LPD3DSTATE;\n\n\n/*\n * Operation used to load matrices\n * hDstMat = hSrcMat\n */\ntypedef struct _D3DMATRIXLOAD {\n    D3DMATRIXHANDLE hDestMatrix;   /* Destination matrix */\n    D3DMATRIXHANDLE hSrcMatrix;   /* Source matrix */\n} D3DMATRIXLOAD, *LPD3DMATRIXLOAD;\n\n/*\n * Operation used to multiply matrices\n * hDstMat = hSrcMat1 * hSrcMat2\n */\ntypedef struct _D3DMATRIXMULTIPLY {\n    D3DMATRIXHANDLE hDestMatrix;   /* Destination matrix */\n    D3DMATRIXHANDLE hSrcMatrix1;  /* First source matrix */\n    D3DMATRIXHANDLE hSrcMatrix2;  /* Second source matrix */\n} D3DMATRIXMULTIPLY, *LPD3DMATRIXMULTIPLY;\n\n/*\n * Operation used to transform and light vertices.\n */\ntypedef struct _D3DPROCESSVERTICES {\n    DWORD        dwFlags;    /* Do we transform or light or just copy? */\n    WORD         wStart;     /* Index to first vertex in source */\n    WORD         wDest;      /* Index to first vertex in local buffer */\n    DWORD        dwCount;    /* Number of vertices to be processed */\n    DWORD    dwReserved; /* Must be zero */\n} D3DPROCESSVERTICES, *LPD3DPROCESSVERTICES;\n\n#define D3DPROCESSVERTICES_TRANSFORMLIGHT   0x00000000L\n#define D3DPROCESSVERTICES_TRANSFORM        0x00000001L\n#define D3DPROCESSVERTICES_COPY         0x00000002L\n#define D3DPROCESSVERTICES_OPMASK       0x00000007L\n\n#define D3DPROCESSVERTICES_UPDATEEXTENTS    0x00000008L\n#define D3DPROCESSVERTICES_NOCOLOR      0x00000010L\n\n\n#if(DIRECT3D_VERSION >= 0x0600)\n\n\n#if(DIRECT3D_VERSION < 0x0800)\n\n/*\n * State enumerants for per-stage texture processing.\n */\ntypedef enum _D3DTEXTURESTAGESTATETYPE\n{\n    D3DTSS_COLOROP        =  1, /* D3DTEXTUREOP - per-stage blending controls for color channels */\n    D3DTSS_COLORARG1      =  2, /* D3DTA_* (texture arg) */\n    D3DTSS_COLORARG2      =  3, /* D3DTA_* (texture arg) */\n    D3DTSS_ALPHAOP        =  4, /* D3DTEXTUREOP - per-stage blending controls for alpha channel */\n    D3DTSS_ALPHAARG1      =  5, /* D3DTA_* (texture arg) */\n    D3DTSS_ALPHAARG2      =  6, /* D3DTA_* (texture arg) */\n    D3DTSS_BUMPENVMAT00   =  7, /* D3DVALUE (bump mapping matrix) */\n    D3DTSS_BUMPENVMAT01   =  8, /* D3DVALUE (bump mapping matrix) */\n    D3DTSS_BUMPENVMAT10   =  9, /* D3DVALUE (bump mapping matrix) */\n    D3DTSS_BUMPENVMAT11   = 10, /* D3DVALUE (bump mapping matrix) */\n    D3DTSS_TEXCOORDINDEX  = 11, /* identifies which set of texture coordinates index this texture */\n    D3DTSS_ADDRESS        = 12, /* D3DTEXTUREADDRESS for both coordinates */\n    D3DTSS_ADDRESSU       = 13, /* D3DTEXTUREADDRESS for U coordinate */\n    D3DTSS_ADDRESSV       = 14, /* D3DTEXTUREADDRESS for V coordinate */\n    D3DTSS_BORDERCOLOR    = 15, /* D3DCOLOR */\n    D3DTSS_MAGFILTER      = 16, /* D3DTEXTUREMAGFILTER filter to use for magnification */\n    D3DTSS_MINFILTER      = 17, /* D3DTEXTUREMINFILTER filter to use for minification */\n    D3DTSS_MIPFILTER      = 18, /* D3DTEXTUREMIPFILTER filter to use between mipmaps during minification */\n    D3DTSS_MIPMAPLODBIAS  = 19, /* D3DVALUE Mipmap LOD bias */\n    D3DTSS_MAXMIPLEVEL    = 20, /* DWORD 0..(n-1) LOD index of largest map to use (0 == largest) */\n    D3DTSS_MAXANISOTROPY  = 21, /* DWORD maximum anisotropy */\n    D3DTSS_BUMPENVLSCALE  = 22, /* D3DVALUE scale for bump map luminance */\n    D3DTSS_BUMPENVLOFFSET = 23, /* D3DVALUE offset for bump map luminance */\n#if(DIRECT3D_VERSION >= 0x0700)\n    D3DTSS_TEXTURETRANSFORMFLAGS = 24, /* D3DTEXTURETRANSFORMFLAGS controls texture transform */\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n    D3DTSS_FORCE_DWORD   = 0x7fffffff, /* force 32-bit size enum */\n} D3DTEXTURESTAGESTATETYPE;\n\n#if(DIRECT3D_VERSION >= 0x0700)\n// Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position\n// and normal in the camera space) should be taken as texture coordinates\n// Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from\n//\n#define D3DTSS_TCI_PASSTHRU                             0x00000000\n#define D3DTSS_TCI_CAMERASPACENORMAL                    0x00010000\n#define D3DTSS_TCI_CAMERASPACEPOSITION                  0x00020000\n#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR          0x00030000\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n/*\n * Enumerations for COLOROP and ALPHAOP texture blending operations set in\n * texture processing stage controls in D3DRENDERSTATE.\n */\ntypedef enum _D3DTEXTUREOP\n{\n// Control\n    D3DTOP_DISABLE    = 1,      // disables stage\n    D3DTOP_SELECTARG1 = 2,      // the default\n    D3DTOP_SELECTARG2 = 3,\n\n// Modulate\n    D3DTOP_MODULATE   = 4,      // multiply args together\n    D3DTOP_MODULATE2X = 5,      // multiply and  1 bit\n    D3DTOP_MODULATE4X = 6,      // multiply and  2 bits\n\n// Add\n    D3DTOP_ADD          =  7,   // add arguments together\n    D3DTOP_ADDSIGNED    =  8,   // add with -0.5 bias\n    D3DTOP_ADDSIGNED2X  =  9,   // as above but left  1 bit\n    D3DTOP_SUBTRACT     = 10,   // Arg1 - Arg2, with no saturation\n    D3DTOP_ADDSMOOTH    = 11,   // add 2 args, subtract product\n                                // Arg1 + Arg2 - Arg1*Arg2\n                                // = Arg1 + (1-Arg1)*Arg2\n\n// Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha)\n    D3DTOP_BLENDDIFFUSEALPHA    = 12, // iterated alpha\n    D3DTOP_BLENDTEXTUREALPHA    = 13, // texture alpha\n    D3DTOP_BLENDFACTORALPHA     = 14, // alpha from D3DRENDERSTATE_TEXTUREFACTOR\n    // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha)\n    D3DTOP_BLENDTEXTUREALPHAPM  = 15, // texture alpha\n    D3DTOP_BLENDCURRENTALPHA    = 16, // by alpha of current color\n\n// Specular mapping\n    D3DTOP_PREMODULATE            = 17,     // modulate with next texture before use\n    D3DTOP_MODULATEALPHA_ADDCOLOR = 18,     // Arg1.RGB + Arg1.A*Arg2.RGB\n                                            // COLOROP only\n    D3DTOP_MODULATECOLOR_ADDALPHA = 19,     // Arg1.RGB*Arg2.RGB + Arg1.A\n                                            // COLOROP only\n    D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20,  // (1-Arg1.A)*Arg2.RGB + Arg1.RGB\n                                            // COLOROP only\n    D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21,  // (1-Arg1.RGB)*Arg2.RGB + Arg1.A\n                                            // COLOROP only\n\n// Bump mapping\n    D3DTOP_BUMPENVMAP           = 22, // per pixel env map perturbation\n    D3DTOP_BUMPENVMAPLUMINANCE  = 23, // with luminance channel\n    // This can do either diffuse or specular bump mapping with correct input.\n    // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B)\n    // where each component has been scaled and offset to make it signed.\n    // The result is replicated into all four (including alpha) channels.\n    // This is a valid COLOROP only.\n    D3DTOP_DOTPRODUCT3          = 24,\n\n    D3DTOP_FORCE_DWORD = 0x7fffffff,\n} D3DTEXTUREOP;\n\n/*\n * Values for COLORARG1,2 and ALPHAARG1,2 texture blending operations\n * set in texture processing stage controls in D3DRENDERSTATE.\n */\n#define D3DTA_SELECTMASK        0x0000000f  // mask for arg selector\n#define D3DTA_DIFFUSE           0x00000000  // select diffuse color\n#define D3DTA_CURRENT           0x00000001  // select result of previous stage\n#define D3DTA_TEXTURE           0x00000002  // select texture color\n#define D3DTA_TFACTOR           0x00000003  // select RENDERSTATE_TEXTUREFACTOR\n#if(DIRECT3D_VERSION >= 0x0700)\n#define D3DTA_SPECULAR          0x00000004  // select specular color\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n#define D3DTA_COMPLEMENT        0x00000010  // take 1.0 - x\n#define D3DTA_ALPHAREPLICATE    0x00000020  // replicate alpha to color components\n\n#endif //(DIRECT3D_VERSION < 0x0800)\n\n/*\n *  IDirect3DTexture2 State Filter Types\n */\ntypedef enum _D3DTEXTUREMAGFILTER\n{\n    D3DTFG_POINT        = 1,    // nearest\n    D3DTFG_LINEAR       = 2,    // linear interpolation\n    D3DTFG_FLATCUBIC    = 3,    // cubic\n    D3DTFG_GAUSSIANCUBIC = 4,   // different cubic kernel\n    D3DTFG_ANISOTROPIC  = 5,    //\n#if(DIRECT3D_VERSION >= 0x0700)\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n    D3DTFG_FORCE_DWORD  = 0x7fffffff,   // force 32-bit size enum\n} D3DTEXTUREMAGFILTER;\n\ntypedef enum _D3DTEXTUREMINFILTER\n{\n    D3DTFN_POINT        = 1,    // nearest\n    D3DTFN_LINEAR       = 2,    // linear interpolation\n    D3DTFN_ANISOTROPIC  = 3,    //\n    D3DTFN_FORCE_DWORD  = 0x7fffffff,   // force 32-bit size enum\n} D3DTEXTUREMINFILTER;\n\ntypedef enum _D3DTEXTUREMIPFILTER\n{\n    D3DTFP_NONE         = 1,    // mipmapping disabled (use MAG filter)\n    D3DTFP_POINT        = 2,    // nearest\n    D3DTFP_LINEAR       = 3,    // linear interpolation\n    D3DTFP_FORCE_DWORD  = 0x7fffffff,   // force 32-bit size enum\n} D3DTEXTUREMIPFILTER;\n\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n/*\n * Triangle flags\n */\n\n/*\n * Tri strip and fan flags.\n * START loads all three vertices\n * EVEN and ODD load just v3 with even or odd culling\n * START_FLAT contains a count from 0 to 29 that allows the\n * whole strip or fan to be culled in one hit.\n * e.g. for a quad len = 1\n */\n#define D3DTRIFLAG_START            0x00000000L\n#define D3DTRIFLAG_STARTFLAT(len) (len)     /* 0 < len < 30 */\n#define D3DTRIFLAG_ODD              0x0000001eL\n#define D3DTRIFLAG_EVEN             0x0000001fL\n\n/*\n * Triangle edge flags\n * enable edges for wireframe or antialiasing\n */\n#define D3DTRIFLAG_EDGEENABLE1          0x00000100L /* v0-v1 edge */\n#define D3DTRIFLAG_EDGEENABLE2          0x00000200L /* v1-v2 edge */\n#define D3DTRIFLAG_EDGEENABLE3          0x00000400L /* v2-v0 edge */\n#define D3DTRIFLAG_EDGEENABLETRIANGLE \\\n        (D3DTRIFLAG_EDGEENABLE1 | D3DTRIFLAG_EDGEENABLE2 | D3DTRIFLAG_EDGEENABLE3)\n\n/*\n * Primitive structures and related defines.  Vertex offsets are to types\n * D3DVERTEX, D3DLVERTEX, or D3DTLVERTEX.\n */\n\n/*\n * Triangle list primitive structure\n */\ntypedef struct _D3DTRIANGLE {\n    union {\n    WORD    v1;            /* Vertex indices */\n    WORD    wV1;\n    };\n    union {\n    WORD    v2;\n    WORD    wV2;\n    };\n    union {\n    WORD    v3;\n    WORD    wV3;\n    };\n    WORD        wFlags;       /* Edge (and other) flags */\n} D3DTRIANGLE, *LPD3DTRIANGLE;\n\n/*\n * Line list structure.\n * The instruction count defines the number of line segments.\n */\ntypedef struct _D3DLINE {\n    union {\n    WORD    v1;            /* Vertex indices */\n    WORD    wV1;\n    };\n    union {\n    WORD    v2;\n    WORD    wV2;\n    };\n} D3DLINE, *LPD3DLINE;\n\n/*\n * Span structure\n * Spans join a list of points with the same y value.\n * If the y value changes, a new span is started.\n */\ntypedef struct _D3DSPAN {\n    WORD    wCount; /* Number of spans */\n    WORD    wFirst; /* Index to first vertex */\n} D3DSPAN, *LPD3DSPAN;\n\n/*\n * Point structure\n */\ntypedef struct _D3DPOINT {\n    WORD    wCount;     /* number of points     */\n    WORD    wFirst;     /* index to first vertex    */\n} D3DPOINT, *LPD3DPOINT;\n\n\n/*\n * Forward branch structure.\n * Mask is logically anded with the driver status mask\n * if the result equals 'value', the branch is taken.\n */\ntypedef struct _D3DBRANCH {\n    DWORD   dwMask;     /* Bitmask against D3D status */\n    DWORD   dwValue;\n    BOOL    bNegate;        /* TRUE to negate comparison */\n    DWORD   dwOffset;   /* How far to branch forward (0 for exit)*/\n} D3DBRANCH, *LPD3DBRANCH;\n\n/*\n * Status used for set status instruction.\n * The D3D status is initialised on device creation\n * and is modified by all execute calls.\n */\ntypedef struct _D3DSTATUS {\n    DWORD       dwFlags;    /* Do we set extents or status */\n    DWORD   dwStatus;   /* D3D status */\n    D3DRECT drExtent;\n} D3DSTATUS, *LPD3DSTATUS;\n\n#define D3DSETSTATUS_STATUS     0x00000001L\n#define D3DSETSTATUS_EXTENTS        0x00000002L\n#define D3DSETSTATUS_ALL    (D3DSETSTATUS_STATUS | D3DSETSTATUS_EXTENTS)\n\n#if(DIRECT3D_VERSION >= 0x0500)\ntypedef struct _D3DCLIPSTATUS {\n    DWORD dwFlags; /* Do we set 2d extents, 3D extents or status */\n    DWORD dwStatus; /* Clip status */\n    float minx, maxx; /* X extents */\n    float miny, maxy; /* Y extents */\n    float minz, maxz; /* Z extents */\n} D3DCLIPSTATUS, *LPD3DCLIPSTATUS;\n\n#define D3DCLIPSTATUS_STATUS        0x00000001L\n#define D3DCLIPSTATUS_EXTENTS2      0x00000002L\n#define D3DCLIPSTATUS_EXTENTS3      0x00000004L\n\n#endif /* DIRECT3D_VERSION >= 0x0500 */\n/*\n * Statistics structure\n */\ntypedef struct _D3DSTATS {\n    DWORD        dwSize;\n    DWORD        dwTrianglesDrawn;\n    DWORD        dwLinesDrawn;\n    DWORD        dwPointsDrawn;\n    DWORD        dwSpansDrawn;\n    DWORD        dwVerticesProcessed;\n} D3DSTATS, *LPD3DSTATS;\n\n/*\n * Execute options.\n * When calling using D3DEXECUTE_UNCLIPPED all the primitives\n * inside the buffer must be contained within the viewport.\n */\n#define D3DEXECUTE_CLIPPED       0x00000001l\n#define D3DEXECUTE_UNCLIPPED     0x00000002l\n\ntypedef struct _D3DEXECUTEDATA {\n    DWORD       dwSize;\n    DWORD       dwVertexOffset;\n    DWORD       dwVertexCount;\n    DWORD       dwInstructionOffset;\n    DWORD       dwInstructionLength;\n    DWORD       dwHVertexOffset;\n    D3DSTATUS   dsStatus;   /* Status after execute */\n} D3DEXECUTEDATA, *LPD3DEXECUTEDATA;\n\n/*\n * Palette flags.\n * This are or'ed with the peFlags in the PALETTEENTRYs passed to DirectDraw.\n */\n#define D3DPAL_FREE 0x00    /* Renderer may use this entry freely */\n#define D3DPAL_READONLY 0x40    /* Renderer may not set this entry */\n#define D3DPAL_RESERVED 0x80    /* Renderer may not use this entry */\n\n\n#if(DIRECT3D_VERSION >= 0x0600)\n\ntypedef struct _D3DVERTEXBUFFERDESC {\n    DWORD dwSize;\n    DWORD dwCaps;\n    DWORD dwFVF;\n    DWORD dwNumVertices;\n} D3DVERTEXBUFFERDESC, *LPD3DVERTEXBUFFERDESC;\n\n#define D3DVBCAPS_SYSTEMMEMORY      0x00000800l\n#define D3DVBCAPS_WRITEONLY         0x00010000l\n#define D3DVBCAPS_OPTIMIZED         0x80000000l\n#define D3DVBCAPS_DONOTCLIP         0x00000001l\n\n/* Vertex Operations for ProcessVertices */\n#define D3DVOP_LIGHT       (1 << 10)\n#define D3DVOP_TRANSFORM   (1 << 0)\n#define D3DVOP_CLIP        (1 << 2)\n#define D3DVOP_EXTENTS     (1 << 3)\n\n\n#if(DIRECT3D_VERSION < 0x0800)\n\n/* The maximum number of vertices user can pass to any d3d\n   drawing function or to create vertex buffer with\n*/\n#define D3DMAXNUMVERTICES    ((1<<16) - 1)\n/* The maximum number of primitives user can pass to any d3d\n   drawing function.\n*/\n#define D3DMAXNUMPRIMITIVES  ((1<<16) - 1)\n\n#if(DIRECT3D_VERSION >= 0x0700)\n\n/* Bits for dwFlags in ProcessVertices call */\n#define D3DPV_DONOTCOPYDATA (1 << 0)\n\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n#endif //(DIRECT3D_VERSION < 0x0800)\n\n//-------------------------------------------------------------------\n\n#if(DIRECT3D_VERSION < 0x0800)\n\n// Flexible vertex format bits\n//\n#define D3DFVF_RESERVED0        0x001\n#define D3DFVF_POSITION_MASK    0x00E\n#define D3DFVF_XYZ              0x002\n#define D3DFVF_XYZRHW           0x004\n#if(DIRECT3D_VERSION >= 0x0700)\n#define D3DFVF_XYZB1            0x006\n#define D3DFVF_XYZB2            0x008\n#define D3DFVF_XYZB3            0x00a\n#define D3DFVF_XYZB4            0x00c\n#define D3DFVF_XYZB5            0x00e\n\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n#define D3DFVF_NORMAL           0x010\n#define D3DFVF_RESERVED1        0x020\n#define D3DFVF_DIFFUSE          0x040\n#define D3DFVF_SPECULAR         0x080\n\n#define D3DFVF_TEXCOUNT_MASK    0xf00\n#define D3DFVF_TEXCOUNT_SHIFT   8\n#define D3DFVF_TEX0             0x000\n#define D3DFVF_TEX1             0x100\n#define D3DFVF_TEX2             0x200\n#define D3DFVF_TEX3             0x300\n#define D3DFVF_TEX4             0x400\n#define D3DFVF_TEX5             0x500\n#define D3DFVF_TEX6             0x600\n#define D3DFVF_TEX7             0x700\n#define D3DFVF_TEX8             0x800\n\n#define D3DFVF_RESERVED2        0xf000  // 4 reserved bits\n\n#else\n#define D3DFVF_RESERVED1        0x020\n#endif //(DIRECT3D_VERSION < 0x0800)\n\n#define D3DFVF_VERTEX ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 )\n#define D3DFVF_LVERTEX ( D3DFVF_XYZ | D3DFVF_RESERVED1 | D3DFVF_DIFFUSE | \\\n                         D3DFVF_SPECULAR | D3DFVF_TEX1 )\n#define D3DFVF_TLVERTEX ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | \\\n                          D3DFVF_TEX1 )\n\n\ntypedef struct _D3DDP_PTRSTRIDE\n{\n    LPVOID lpvData;\n    DWORD  dwStride;\n} D3DDP_PTRSTRIDE;\n\n#define D3DDP_MAXTEXCOORD 8\n\ntypedef struct _D3DDRAWPRIMITIVESTRIDEDDATA\n{\n    D3DDP_PTRSTRIDE position;\n    D3DDP_PTRSTRIDE normal;\n    D3DDP_PTRSTRIDE diffuse;\n    D3DDP_PTRSTRIDE specular;\n    D3DDP_PTRSTRIDE textureCoords[D3DDP_MAXTEXCOORD];\n} D3DDRAWPRIMITIVESTRIDEDDATA, *LPD3DDRAWPRIMITIVESTRIDEDDATA;\n//---------------------------------------------------------------------\n// ComputeSphereVisibility return values\n//\n#define D3DVIS_INSIDE_FRUSTUM       0\n#define D3DVIS_INTERSECT_FRUSTUM    1\n#define D3DVIS_OUTSIDE_FRUSTUM      2\n#define D3DVIS_INSIDE_LEFT          0\n#define D3DVIS_INTERSECT_LEFT       (1 << 2)\n#define D3DVIS_OUTSIDE_LEFT         (2 << 2)\n#define D3DVIS_INSIDE_RIGHT         0\n#define D3DVIS_INTERSECT_RIGHT      (1 << 4)\n#define D3DVIS_OUTSIDE_RIGHT        (2 << 4)\n#define D3DVIS_INSIDE_TOP           0\n#define D3DVIS_INTERSECT_TOP        (1 << 6)\n#define D3DVIS_OUTSIDE_TOP          (2 << 6)\n#define D3DVIS_INSIDE_BOTTOM        0\n#define D3DVIS_INTERSECT_BOTTOM     (1 << 8)\n#define D3DVIS_OUTSIDE_BOTTOM       (2 << 8)\n#define D3DVIS_INSIDE_NEAR          0\n#define D3DVIS_INTERSECT_NEAR       (1 << 10)\n#define D3DVIS_OUTSIDE_NEAR         (2 << 10)\n#define D3DVIS_INSIDE_FAR           0\n#define D3DVIS_INTERSECT_FAR        (1 << 12)\n#define D3DVIS_OUTSIDE_FAR          (2 << 12)\n\n#define D3DVIS_MASK_FRUSTUM         (3 << 0)\n#define D3DVIS_MASK_LEFT            (3 << 2)\n#define D3DVIS_MASK_RIGHT           (3 << 4)\n#define D3DVIS_MASK_TOP             (3 << 6)\n#define D3DVIS_MASK_BOTTOM          (3 << 8)\n#define D3DVIS_MASK_NEAR            (3 << 10)\n#define D3DVIS_MASK_FAR             (3 << 12)\n\n#endif /* DIRECT3D_VERSION >= 0x0600 */\n\n#if(DIRECT3D_VERSION < 0x0800)\n\n#if(DIRECT3D_VERSION >= 0x0700)\n\n// To be used with GetInfo()\n#define D3DDEVINFOID_TEXTUREMANAGER    1\n#define D3DDEVINFOID_D3DTEXTUREMANAGER 2\n#define D3DDEVINFOID_TEXTURING         3\n\ntypedef enum _D3DSTATEBLOCKTYPE\n{\n    D3DSBT_ALL           = 1, // capture all state\n    D3DSBT_PIXELSTATE    = 2, // capture pixel state\n    D3DSBT_VERTEXSTATE   = 3, // capture vertex state\n    D3DSBT_FORCE_DWORD   = 0xffffffff\n} D3DSTATEBLOCKTYPE;\n\n// The D3DVERTEXBLENDFLAGS type is used with D3DRENDERSTATE_VERTEXBLEND state.\n//\ntypedef enum _D3DVERTEXBLENDFLAGS\n{\n    D3DVBLEND_DISABLE  = 0, // Disable vertex blending\n    D3DVBLEND_1WEIGHT  = 1, // blend between 2 matrices\n    D3DVBLEND_2WEIGHTS = 2, // blend between 3 matrices\n    D3DVBLEND_3WEIGHTS = 3, // blend between 4 matrices\n} D3DVERTEXBLENDFLAGS;\n\ntypedef enum _D3DTEXTURETRANSFORMFLAGS {\n    D3DTTFF_DISABLE         = 0,    // texture coordinates are passed directly\n    D3DTTFF_COUNT1          = 1,    // rasterizer should expect 1-D texture coords\n    D3DTTFF_COUNT2          = 2,    // rasterizer should expect 2-D texture coords\n    D3DTTFF_COUNT3          = 3,    // rasterizer should expect 3-D texture coords\n    D3DTTFF_COUNT4          = 4,    // rasterizer should expect 4-D texture coords\n    D3DTTFF_PROJECTED       = 256,  // texcoords to be divided by COUNTth element\n    D3DTTFF_FORCE_DWORD     = 0x7fffffff,\n} D3DTEXTURETRANSFORMFLAGS;\n\n// Macros to set texture coordinate format bits in the FVF id\n\n#define D3DFVF_TEXTUREFORMAT2 0         // Two floating point values\n#define D3DFVF_TEXTUREFORMAT1 3         // One floating point value\n#define D3DFVF_TEXTUREFORMAT3 1         // Three floating point values\n#define D3DFVF_TEXTUREFORMAT4 2         // Four floating point values\n\n#define D3DFVF_TEXCOORDSIZE3(CoordIndex) (D3DFVF_TEXTUREFORMAT3 << (CoordIndex*2 + 16))\n#define D3DFVF_TEXCOORDSIZE2(CoordIndex) (D3DFVF_TEXTUREFORMAT2)\n#define D3DFVF_TEXCOORDSIZE4(CoordIndex) (D3DFVF_TEXTUREFORMAT4 << (CoordIndex*2 + 16))\n#define D3DFVF_TEXCOORDSIZE1(CoordIndex) (D3DFVF_TEXTUREFORMAT1 << (CoordIndex*2 + 16))\n\n\n#endif /* DIRECT3D_VERSION >= 0x0700 */\n\n#else\n//\n// legacy vertex blend names\n//\ntypedef enum _D3DVERTEXBLENDFLAGS D3DVERTEXBLENDFLAGS;\n#define D3DVBLEND_DISABLE  (D3DVERTEXBLENDFLAGS)0\n#define D3DVBLEND_1WEIGHT  (D3DVERTEXBLENDFLAGS)1\n#define D3DVBLEND_2WEIGHTS (D3DVERTEXBLENDFLAGS)2\n#define D3DVBLEND_3WEIGHTS (D3DVERTEXBLENDFLAGS)3\n\n#endif //(DIRECT3D_VERSION < 0x0800)\n\n#pragma pack()\n#pragma warning(default:4201)\n\n#endif /* _D3DTYPES_H_ */\n\n"
  },
  {
    "path": "Include/ddraw.h",
    "content": "/*==========================================================================;\n *\n *  Copyright (C) Microsoft Corporation.  All Rights Reserved.\n *\n *  File:       ddraw.h\n *  Content:    DirectDraw include file\n *\n ***************************************************************************/\n\n#ifndef __DDRAW_INCLUDED__\n#define __DDRAW_INCLUDED__\n\n//Disable the nameless union warning when building internally\n#undef ENABLE_NAMELESS_UNION_PRAGMA\n#ifdef DIRECTX_REDIST\n#define ENABLE_NAMELESS_UNION_PRAGMA\n#endif\n\n#ifdef ENABLE_NAMELESS_UNION_PRAGMA\n#pragma warning(disable:4201)\n#endif\n\n/*\n * If you wish an application built against the newest version of DirectDraw\n * to run against an older DirectDraw run time then define DIRECTDRAW_VERSION\n * to be the earlies version of DirectDraw you wish to run against. For,\n * example if you wish an application to run against a DX 3 runtime define\n * DIRECTDRAW_VERSION to be 0x0300.\n */\n#ifndef   DIRECTDRAW_VERSION\n#define   DIRECTDRAW_VERSION 0x0700\n#endif /* DIRECTDRAW_VERSION */\n\n#if defined( _WIN32 )  && !defined( _NO_COM )\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n#else\n#define IUnknown            void\n#if !defined( NT_BUILD_ENVIRONMENT ) && !defined(WINNT)\n        #define CO_E_NOTINITIALIZED 0x800401F0L\n#endif\n#endif\n\n#define _FACDD  0x876\n#define MAKE_DDHRESULT( code )  MAKE_HRESULT( 1, _FACDD, code )\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n//\n// For compilers that don't support nameless unions, do a\n//\n// #define NONAMELESSUNION\n//\n// before #include <ddraw.h>\n//\n#ifndef DUMMYUNIONNAMEN\n#if defined(__cplusplus) || !defined(NONAMELESSUNION)\n#define DUMMYUNIONNAMEN(n)\n#else\n#define DUMMYUNIONNAMEN(n)      u##n\n#endif\n#endif\n\n#ifndef MAKEFOURCC\n    #define MAKEFOURCC(ch0, ch1, ch2, ch3)                              \\\n                ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |   \\\n                ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))\n#endif //defined(MAKEFOURCC)\n\n/*\n * FOURCC codes for DX compressed-texture pixel formats\n */\n#define FOURCC_DXT1  (MAKEFOURCC('D','X','T','1'))\n#define FOURCC_DXT2  (MAKEFOURCC('D','X','T','2'))\n#define FOURCC_DXT3  (MAKEFOURCC('D','X','T','3'))\n#define FOURCC_DXT4  (MAKEFOURCC('D','X','T','4'))\n#define FOURCC_DXT5  (MAKEFOURCC('D','X','T','5'))\n\n/*\n * GUIDS used by DirectDraw objects\n */\n#if defined( _WIN32 ) && !defined( _NO_COM )\n\nDEFINE_GUID( CLSID_DirectDraw,                  0xD7B70EE0,0x4340,0x11CF,0xB0,0x63,0x00,0x20,0xAF,0xC2,0xCD,0x35 );\nDEFINE_GUID( CLSID_DirectDraw7,                 0x3c305196,0x50db,0x11d3,0x9c,0xfe,0x00,0xc0,0x4f,0xd9,0x30,0xc5 );\nDEFINE_GUID( CLSID_DirectDrawClipper,           0x593817A0,0x7DB3,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xb9,0x33,0x56 );\nDEFINE_GUID( IID_IDirectDraw,                   0x6C14DB80,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );\nDEFINE_GUID( IID_IDirectDraw2,                  0xB3A6F3E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56 );\nDEFINE_GUID( IID_IDirectDraw4,                  0x9c59509a,0x39bd,0x11d1,0x8c,0x4a,0x00,0xc0,0x4f,0xd9,0x30,0xc5 );\nDEFINE_GUID( IID_IDirectDraw7,                  0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b );\nDEFINE_GUID( IID_IDirectDrawSurface,            0x6C14DB81,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );\nDEFINE_GUID( IID_IDirectDrawSurface2,           0x57805885,0x6eec,0x11cf,0x94,0x41,0xa8,0x23,0x03,0xc1,0x0e,0x27 );\nDEFINE_GUID( IID_IDirectDrawSurface3,           0xDA044E00,0x69B2,0x11D0,0xA1,0xD5,0x00,0xAA,0x00,0xB8,0xDF,0xBB );\nDEFINE_GUID( IID_IDirectDrawSurface4,           0x0B2B8630,0xAD35,0x11D0,0x8E,0xA6,0x00,0x60,0x97,0x97,0xEA,0x5B );\nDEFINE_GUID( IID_IDirectDrawSurface7,           0x06675a80,0x3b9b,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b );\nDEFINE_GUID( IID_IDirectDrawPalette,            0x6C14DB84,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );\nDEFINE_GUID( IID_IDirectDrawClipper,            0x6C14DB85,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );\nDEFINE_GUID( IID_IDirectDrawColorControl,       0x4B9F0EE0,0x0D7E,0x11D0,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8 );\nDEFINE_GUID( IID_IDirectDrawGammaControl,       0x69C11C3E,0xB46B,0x11D1,0xAD,0x7A,0x00,0xC0,0x4F,0xC2,0x9B,0x4E );\n\n#endif\n\n/*============================================================================\n *\n * DirectDraw Structures\n *\n * Various structures used to invoke DirectDraw.\n *\n *==========================================================================*/\n\nstruct IDirectDraw;\nstruct IDirectDrawSurface;\nstruct IDirectDrawPalette;\nstruct IDirectDrawClipper;\n\ntypedef struct IDirectDraw              FAR *LPDIRECTDRAW;\ntypedef struct IDirectDraw2             FAR *LPDIRECTDRAW2;\ntypedef struct IDirectDraw4             FAR *LPDIRECTDRAW4;\ntypedef struct IDirectDraw7             FAR *LPDIRECTDRAW7;\ntypedef struct IDirectDrawSurface       FAR *LPDIRECTDRAWSURFACE;\ntypedef struct IDirectDrawSurface2      FAR *LPDIRECTDRAWSURFACE2;\ntypedef struct IDirectDrawSurface3      FAR *LPDIRECTDRAWSURFACE3;\ntypedef struct IDirectDrawSurface4      FAR *LPDIRECTDRAWSURFACE4;\ntypedef struct IDirectDrawSurface7      FAR *LPDIRECTDRAWSURFACE7;\ntypedef struct IDirectDrawPalette               FAR *LPDIRECTDRAWPALETTE;\ntypedef struct IDirectDrawClipper               FAR *LPDIRECTDRAWCLIPPER;\ntypedef struct IDirectDrawColorControl          FAR *LPDIRECTDRAWCOLORCONTROL;\ntypedef struct IDirectDrawGammaControl          FAR *LPDIRECTDRAWGAMMACONTROL;\n\ntypedef struct _DDFXROP                 FAR *LPDDFXROP;\ntypedef struct _DDSURFACEDESC           FAR *LPDDSURFACEDESC;\ntypedef struct _DDSURFACEDESC2          FAR *LPDDSURFACEDESC2;\ntypedef struct _DDCOLORCONTROL          FAR *LPDDCOLORCONTROL;\n\n/*\n * API's\n */\n#if (defined (WIN32) || defined( _WIN32 ) ) && !defined( _NO_COM )\n//#if defined( _WIN32 ) && !defined( _NO_ENUM )\n    typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKA)(GUID FAR *, LPSTR, LPSTR, LPVOID);\n    typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKW)(GUID FAR *, LPWSTR, LPWSTR, LPVOID);\n    extern HRESULT WINAPI DirectDrawEnumerateW( LPDDENUMCALLBACKW lpCallback, LPVOID lpContext );\n    extern HRESULT WINAPI DirectDrawEnumerateA( LPDDENUMCALLBACKA lpCallback, LPVOID lpContext );\n    /*\n     * Protect against old SDKs\n     */\n    #if !defined(HMONITOR_DECLARED) && (WINVER < 0x0500)\n        #define HMONITOR_DECLARED\n        DECLARE_HANDLE(HMONITOR);\n    #endif\n    typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKEXA)(GUID FAR *, LPSTR, LPSTR, LPVOID, HMONITOR);\n    typedef BOOL (FAR PASCAL * LPDDENUMCALLBACKEXW)(GUID FAR *, LPWSTR, LPWSTR, LPVOID, HMONITOR);\n    extern HRESULT WINAPI DirectDrawEnumerateExW( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags);\n    extern HRESULT WINAPI DirectDrawEnumerateExA( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags);\n    typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXA)( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags);\n    typedef HRESULT (WINAPI * LPDIRECTDRAWENUMERATEEXW)( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags);\n\n    #ifdef UNICODE\n        typedef LPDDENUMCALLBACKW           LPDDENUMCALLBACK;\n        #define DirectDrawEnumerate         DirectDrawEnumerateW\n        typedef LPDDENUMCALLBACKEXW         LPDDENUMCALLBACKEX;\n        typedef LPDIRECTDRAWENUMERATEEXW        LPDIRECTDRAWENUMERATEEX;\n        #define DirectDrawEnumerateEx       DirectDrawEnumerateExW\n    #else\n        typedef LPDDENUMCALLBACKA           LPDDENUMCALLBACK;\n        #define DirectDrawEnumerate         DirectDrawEnumerateA\n        typedef LPDDENUMCALLBACKEXA         LPDDENUMCALLBACKEX;\n        typedef LPDIRECTDRAWENUMERATEEXA        LPDIRECTDRAWENUMERATEEX;\n        #define DirectDrawEnumerateEx       DirectDrawEnumerateExA\n    #endif\n    extern HRESULT WINAPI DirectDrawCreate( GUID FAR *lpGUID, LPDIRECTDRAW FAR *lplpDD, IUnknown FAR *pUnkOuter );\n    extern HRESULT WINAPI DirectDrawCreateEx( GUID FAR * lpGuid, LPVOID  *lplpDD, REFIID  iid,IUnknown FAR *pUnkOuter );\n    extern HRESULT WINAPI DirectDrawCreateClipper( DWORD dwFlags, LPDIRECTDRAWCLIPPER FAR *lplpDDClipper, IUnknown FAR *pUnkOuter );\n#endif\n/*\n * Flags for DirectDrawEnumerateEx\n * DirectDrawEnumerateEx supercedes DirectDrawEnumerate. You must use GetProcAddress to\n * obtain a function pointer (of type LPDIRECTDRAWENUMERATEEX) to DirectDrawEnumerateEx.\n * By default, only the primary display device is enumerated.\n * DirectDrawEnumerate is equivalent to DirectDrawEnumerate(,,DDENUM_NONDISPLAYDEVICES)\n */\n\n/*\n * This flag causes enumeration of any GDI display devices which are part of\n * the Windows Desktop\n */\n#define DDENUM_ATTACHEDSECONDARYDEVICES     0x00000001L\n\n/*\n * This flag causes enumeration of any GDI display devices which are not\n * part of the Windows Desktop\n */\n#define DDENUM_DETACHEDSECONDARYDEVICES     0x00000002L\n\n/*\n * This flag causes enumeration of non-display devices\n */\n#define DDENUM_NONDISPLAYDEVICES            0x00000004L\n\n\n#define REGSTR_KEY_DDHW_DESCRIPTION     \"Description\"\n#define REGSTR_KEY_DDHW_DRIVERNAME      \"DriverName\"\n#define REGSTR_PATH_DDHW                \"Hardware\\\\DirectDrawDrivers\"\n\n#define DDCREATE_HARDWAREONLY           0x00000001l\n#define DDCREATE_EMULATIONONLY          0x00000002l\n\n#if defined(WINNT) || !defined(WIN32)\ntypedef long HRESULT;\n#endif\n\n//#ifndef WINNT\ntypedef HRESULT (FAR PASCAL * LPDDENUMMODESCALLBACK)(LPDDSURFACEDESC, LPVOID);\ntypedef HRESULT (FAR PASCAL * LPDDENUMMODESCALLBACK2)(LPDDSURFACEDESC2, LPVOID);\ntypedef HRESULT (FAR PASCAL * LPDDENUMSURFACESCALLBACK)(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, LPVOID);\ntypedef HRESULT (FAR PASCAL * LPDDENUMSURFACESCALLBACK2)(LPDIRECTDRAWSURFACE4, LPDDSURFACEDESC2, LPVOID);\ntypedef HRESULT (FAR PASCAL * LPDDENUMSURFACESCALLBACK7)(LPDIRECTDRAWSURFACE7, LPDDSURFACEDESC2, LPVOID);\n//#endif\n\n/*\n * Generic pixel format with 8-bit RGB and alpha components\n */\ntypedef struct _DDARGB\n{\n    BYTE blue;\n    BYTE green;\n    BYTE red;\n    BYTE alpha;\n} DDARGB;\n\ntypedef DDARGB FAR *LPDDARGB;\n\n/*\n * This version of the structure remains for backwards source compatibility.\n * The DDARGB structure is the one that should be used for all DirectDraw APIs.\n */\ntypedef struct _DDRGBA\n{\n    BYTE red;\n    BYTE green;\n    BYTE blue;\n    BYTE alpha;\n} DDRGBA;\n\ntypedef DDRGBA FAR *LPDDRGBA;\n\n\n/*\n * DDCOLORKEY\n */\ntypedef struct _DDCOLORKEY\n{\n    DWORD       dwColorSpaceLowValue;   // low boundary of color space that is to\n                                        // be treated as Color Key, inclusive\n    DWORD       dwColorSpaceHighValue;  // high boundary of color space that is\n                                        // to be treated as Color Key, inclusive\n} DDCOLORKEY;\n\ntypedef DDCOLORKEY FAR* LPDDCOLORKEY;\n\n/*\n * DDBLTFX\n * Used to pass override information to the DIRECTDRAWSURFACE callback Blt.\n */\ntypedef struct _DDBLTFX\n{\n    DWORD       dwSize;                         // size of structure\n    DWORD       dwDDFX;                         // FX operations\n    DWORD       dwROP;                          // Win32 raster operations\n    DWORD       dwDDROP;                        // Raster operations new for DirectDraw\n    DWORD       dwRotationAngle;                // Rotation angle for blt\n    DWORD       dwZBufferOpCode;                // ZBuffer compares\n    DWORD       dwZBufferLow;                   // Low limit of Z buffer\n    DWORD       dwZBufferHigh;                  // High limit of Z buffer\n    DWORD       dwZBufferBaseDest;              // Destination base value\n    DWORD       dwZDestConstBitDepth;           // Bit depth used to specify Z constant for destination\n    union\n    {\n        DWORD   dwZDestConst;                   // Constant to use as Z buffer for dest\n        LPDIRECTDRAWSURFACE lpDDSZBufferDest;   // Surface to use as Z buffer for dest\n    } DUMMYUNIONNAMEN(1);\n    DWORD       dwZSrcConstBitDepth;            // Bit depth used to specify Z constant for source\n    union\n    {\n        DWORD   dwZSrcConst;                    // Constant to use as Z buffer for src\n        LPDIRECTDRAWSURFACE lpDDSZBufferSrc;    // Surface to use as Z buffer for src\n    } DUMMYUNIONNAMEN(2);\n    DWORD       dwAlphaEdgeBlendBitDepth;       // Bit depth used to specify constant for alpha edge blend\n    DWORD       dwAlphaEdgeBlend;               // Alpha for edge blending\n    DWORD       dwReserved;\n    DWORD       dwAlphaDestConstBitDepth;       // Bit depth used to specify alpha constant for destination\n    union\n    {\n        DWORD   dwAlphaDestConst;               // Constant to use as Alpha Channel\n        LPDIRECTDRAWSURFACE lpDDSAlphaDest;     // Surface to use as Alpha Channel\n    } DUMMYUNIONNAMEN(3);\n    DWORD       dwAlphaSrcConstBitDepth;        // Bit depth used to specify alpha constant for source\n    union\n    {\n        DWORD   dwAlphaSrcConst;                // Constant to use as Alpha Channel\n        LPDIRECTDRAWSURFACE lpDDSAlphaSrc;      // Surface to use as Alpha Channel\n    } DUMMYUNIONNAMEN(4);\n    union\n    {\n        DWORD   dwFillColor;                    // color in RGB or Palettized\n        DWORD   dwFillDepth;                    // depth value for z-buffer\n        DWORD   dwFillPixel;                    // pixel value for RGBA or RGBZ\n        LPDIRECTDRAWSURFACE lpDDSPattern;       // Surface to use as pattern\n    } DUMMYUNIONNAMEN(5);\n    DDCOLORKEY  ddckDestColorkey;               // DestColorkey override\n    DDCOLORKEY  ddckSrcColorkey;                // SrcColorkey override\n} DDBLTFX;\n\ntypedef DDBLTFX FAR* LPDDBLTFX;\n\n\n\n/*\n * DDSCAPS\n */\ntypedef struct _DDSCAPS\n{\n    DWORD       dwCaps;         // capabilities of surface wanted\n} DDSCAPS;\n\ntypedef DDSCAPS FAR* LPDDSCAPS;\n\n\n/*\n * DDOSCAPS\n */\ntypedef struct _DDOSCAPS\n{\n    DWORD       dwCaps;         // capabilities of surface wanted\n} DDOSCAPS;\n\ntypedef DDOSCAPS FAR* LPDDOSCAPS;\n\n/*\n * This structure is used internally by DirectDraw.\n */\ntypedef struct _DDSCAPSEX\n{\n    DWORD       dwCaps2;\n    DWORD       dwCaps3;\n    union\n    {\n        DWORD       dwCaps4;\n        DWORD       dwVolumeDepth;\n    } DUMMYUNIONNAMEN(1);\n} DDSCAPSEX, FAR * LPDDSCAPSEX;\n\n/*\n * DDSCAPS2\n */\ntypedef struct _DDSCAPS2\n{\n    DWORD       dwCaps;         // capabilities of surface wanted\n    DWORD       dwCaps2;\n    DWORD       dwCaps3;\n    union\n    {\n        DWORD       dwCaps4;\n        DWORD       dwVolumeDepth;\n    } DUMMYUNIONNAMEN(1);\n} DDSCAPS2;\n\ntypedef DDSCAPS2 FAR* LPDDSCAPS2;\n\n/*\n * DDCAPS\n */\n#define DD_ROP_SPACE            (256/32)        // space required to store ROP array\n/*\n * NOTE: Our choosen structure number scheme is to append a single digit to\n * the end of the structure giving the version that structure is associated\n * with.\n */\n\n/*\n * This structure represents the DDCAPS structure released in DirectDraw 1.0.  It is used internally\n * by DirectDraw to interpret caps passed into ddraw by drivers written prior to the release of DirectDraw 2.0.\n * New applications should use the DDCAPS structure defined below.\n */\ntypedef struct _DDCAPS_DX1\n{\n    DWORD       dwSize;                 // size of the DDDRIVERCAPS structure\n    DWORD       dwCaps;                 // driver specific capabilities\n    DWORD       dwCaps2;                // more driver specific capabilites\n    DWORD       dwCKeyCaps;             // color key capabilities of the surface\n    DWORD       dwFXCaps;               // driver specific stretching and effects capabilites\n    DWORD       dwFXAlphaCaps;          // alpha driver specific capabilities\n    DWORD       dwPalCaps;              // palette capabilities\n    DWORD       dwSVCaps;               // stereo vision capabilities\n    DWORD       dwAlphaBltConstBitDepths;       // DDBD_2,4,8\n    DWORD       dwAlphaBltPixelBitDepths;       // DDBD_1,2,4,8\n    DWORD       dwAlphaBltSurfaceBitDepths;     // DDBD_1,2,4,8\n    DWORD       dwAlphaOverlayConstBitDepths;   // DDBD_2,4,8\n    DWORD       dwAlphaOverlayPixelBitDepths;   // DDBD_1,2,4,8\n    DWORD       dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8\n    DWORD       dwZBufferBitDepths;             // DDBD_8,16,24,32\n    DWORD       dwVidMemTotal;          // total amount of video memory\n    DWORD       dwVidMemFree;           // amount of free video memory\n    DWORD       dwMaxVisibleOverlays;   // maximum number of visible overlays\n    DWORD       dwCurrVisibleOverlays;  // current number of visible overlays\n    DWORD       dwNumFourCCCodes;       // number of four cc codes\n    DWORD       dwAlignBoundarySrc;     // source rectangle alignment\n    DWORD       dwAlignSizeSrc;         // source rectangle byte size\n    DWORD       dwAlignBoundaryDest;    // dest rectangle alignment\n    DWORD       dwAlignSizeDest;        // dest rectangle byte size\n    DWORD       dwAlignStrideAlign;     // stride alignment\n    DWORD       dwRops[DD_ROP_SPACE];   // ROPS supported\n    DDSCAPS     ddsCaps;                // DDSCAPS structure has all the general capabilities\n    DWORD       dwMinOverlayStretch;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n    DWORD       dwMaxOverlayStretch;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n    DWORD       dwMinLiveVideoStretch;  // OBSOLETE! This field remains for compatability reasons only\n    DWORD       dwMaxLiveVideoStretch;  // OBSOLETE! This field remains for compatability reasons only\n    DWORD       dwMinHwCodecStretch;    // OBSOLETE! This field remains for compatability reasons only\n    DWORD       dwMaxHwCodecStretch;    // OBSOLETE! This field remains for compatability reasons only\n    DWORD       dwReserved1;            // reserved\n    DWORD       dwReserved2;            // reserved\n    DWORD       dwReserved3;            // reserved\n} DDCAPS_DX1;\n\ntypedef DDCAPS_DX1 FAR* LPDDCAPS_DX1;\n\n/*\n * This structure is the DDCAPS structure as it was in version 2 and 3 of Direct X.\n * It is present for back compatability.\n */\ntypedef struct _DDCAPS_DX3\n{\n    DWORD       dwSize;                 // size of the DDDRIVERCAPS structure\n    DWORD       dwCaps;                 // driver specific capabilities\n    DWORD       dwCaps2;                // more driver specific capabilites\n    DWORD       dwCKeyCaps;             // color key capabilities of the surface\n    DWORD       dwFXCaps;               // driver specific stretching and effects capabilites\n    DWORD       dwFXAlphaCaps;          // alpha driver specific capabilities\n    DWORD       dwPalCaps;              // palette capabilities\n    DWORD       dwSVCaps;               // stereo vision capabilities\n    DWORD       dwAlphaBltConstBitDepths;       // DDBD_2,4,8\n    DWORD       dwAlphaBltPixelBitDepths;       // DDBD_1,2,4,8\n    DWORD       dwAlphaBltSurfaceBitDepths;     // DDBD_1,2,4,8\n    DWORD       dwAlphaOverlayConstBitDepths;   // DDBD_2,4,8\n    DWORD       dwAlphaOverlayPixelBitDepths;   // DDBD_1,2,4,8\n    DWORD       dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8\n    DWORD       dwZBufferBitDepths;             // DDBD_8,16,24,32\n    DWORD       dwVidMemTotal;          // total amount of video memory\n    DWORD       dwVidMemFree;           // amount of free video memory\n    DWORD       dwMaxVisibleOverlays;   // maximum number of visible overlays\n    DWORD       dwCurrVisibleOverlays;  // current number of visible overlays\n    DWORD       dwNumFourCCCodes;       // number of four cc codes\n    DWORD       dwAlignBoundarySrc;     // source rectangle alignment\n    DWORD       dwAlignSizeSrc;         // source rectangle byte size\n    DWORD       dwAlignBoundaryDest;    // dest rectangle alignment\n    DWORD       dwAlignSizeDest;        // dest rectangle byte size\n    DWORD       dwAlignStrideAlign;     // stride alignment\n    DWORD       dwRops[DD_ROP_SPACE];   // ROPS supported\n    DDSCAPS     ddsCaps;                // DDSCAPS structure has all the general capabilities\n    DWORD       dwMinOverlayStretch;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n    DWORD       dwMaxOverlayStretch;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n    DWORD       dwMinLiveVideoStretch;  // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n    DWORD       dwMaxLiveVideoStretch;  // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n    DWORD       dwMinHwCodecStretch;    // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n    DWORD       dwMaxHwCodecStretch;    // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n    DWORD       dwReserved1;            // reserved\n    DWORD       dwReserved2;            // reserved\n    DWORD       dwReserved3;            // reserved\n    DWORD       dwSVBCaps;              // driver specific capabilities for System->Vmem blts\n    DWORD       dwSVBCKeyCaps;          // driver color key capabilities for System->Vmem blts\n    DWORD       dwSVBFXCaps;            // driver FX capabilities for System->Vmem blts\n    DWORD       dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts\n    DWORD       dwVSBCaps;              // driver specific capabilities for Vmem->System blts\n    DWORD       dwVSBCKeyCaps;          // driver color key capabilities for Vmem->System blts\n    DWORD       dwVSBFXCaps;            // driver FX capabilities for Vmem->System blts\n    DWORD       dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts\n    DWORD       dwSSBCaps;              // driver specific capabilities for System->System blts\n    DWORD       dwSSBCKeyCaps;          // driver color key capabilities for System->System blts\n    DWORD       dwSSBFXCaps;            // driver FX capabilities for System->System blts\n    DWORD       dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts\n    DWORD       dwReserved4;            // reserved\n    DWORD       dwReserved5;            // reserved\n    DWORD       dwReserved6;            // reserved\n} DDCAPS_DX3;\ntypedef DDCAPS_DX3 FAR* LPDDCAPS_DX3;\n\n/*\n * This structure is the DDCAPS structure as it was in version 5 of Direct X.\n * It is present for back compatability.\n */\ntypedef struct _DDCAPS_DX5\n{\n/*  0*/ DWORD   dwSize;                 // size of the DDDRIVERCAPS structure\n/*  4*/ DWORD   dwCaps;                 // driver specific capabilities\n/*  8*/ DWORD   dwCaps2;                // more driver specific capabilites\n/*  c*/ DWORD   dwCKeyCaps;             // color key capabilities of the surface\n/* 10*/ DWORD   dwFXCaps;               // driver specific stretching and effects capabilites\n/* 14*/ DWORD   dwFXAlphaCaps;          // alpha driver specific capabilities\n/* 18*/ DWORD   dwPalCaps;              // palette capabilities\n/* 1c*/ DWORD   dwSVCaps;               // stereo vision capabilities\n/* 20*/ DWORD   dwAlphaBltConstBitDepths;       // DDBD_2,4,8\n/* 24*/ DWORD   dwAlphaBltPixelBitDepths;       // DDBD_1,2,4,8\n/* 28*/ DWORD   dwAlphaBltSurfaceBitDepths;     // DDBD_1,2,4,8\n/* 2c*/ DWORD   dwAlphaOverlayConstBitDepths;   // DDBD_2,4,8\n/* 30*/ DWORD   dwAlphaOverlayPixelBitDepths;   // DDBD_1,2,4,8\n/* 34*/ DWORD   dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8\n/* 38*/ DWORD   dwZBufferBitDepths;             // DDBD_8,16,24,32\n/* 3c*/ DWORD   dwVidMemTotal;          // total amount of video memory\n/* 40*/ DWORD   dwVidMemFree;           // amount of free video memory\n/* 44*/ DWORD   dwMaxVisibleOverlays;   // maximum number of visible overlays\n/* 48*/ DWORD   dwCurrVisibleOverlays;  // current number of visible overlays\n/* 4c*/ DWORD   dwNumFourCCCodes;       // number of four cc codes\n/* 50*/ DWORD   dwAlignBoundarySrc;     // source rectangle alignment\n/* 54*/ DWORD   dwAlignSizeSrc;         // source rectangle byte size\n/* 58*/ DWORD   dwAlignBoundaryDest;    // dest rectangle alignment\n/* 5c*/ DWORD   dwAlignSizeDest;        // dest rectangle byte size\n/* 60*/ DWORD   dwAlignStrideAlign;     // stride alignment\n/* 64*/ DWORD   dwRops[DD_ROP_SPACE];   // ROPS supported\n/* 84*/ DDSCAPS ddsCaps;                // DDSCAPS structure has all the general capabilities\n/* 88*/ DWORD   dwMinOverlayStretch;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 8c*/ DWORD   dwMaxOverlayStretch;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 90*/ DWORD   dwMinLiveVideoStretch;  // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 94*/ DWORD   dwMaxLiveVideoStretch;  // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 98*/ DWORD   dwMinHwCodecStretch;    // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 9c*/ DWORD   dwMaxHwCodecStretch;    // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* a0*/ DWORD   dwReserved1;            // reserved\n/* a4*/ DWORD   dwReserved2;            // reserved\n/* a8*/ DWORD   dwReserved3;            // reserved\n/* ac*/ DWORD   dwSVBCaps;              // driver specific capabilities for System->Vmem blts\n/* b0*/ DWORD   dwSVBCKeyCaps;          // driver color key capabilities for System->Vmem blts\n/* b4*/ DWORD   dwSVBFXCaps;            // driver FX capabilities for System->Vmem blts\n/* b8*/ DWORD   dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts\n/* d8*/ DWORD   dwVSBCaps;              // driver specific capabilities for Vmem->System blts\n/* dc*/ DWORD   dwVSBCKeyCaps;          // driver color key capabilities for Vmem->System blts\n/* e0*/ DWORD   dwVSBFXCaps;            // driver FX capabilities for Vmem->System blts\n/* e4*/ DWORD   dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts\n/*104*/ DWORD   dwSSBCaps;              // driver specific capabilities for System->System blts\n/*108*/ DWORD   dwSSBCKeyCaps;          // driver color key capabilities for System->System blts\n/*10c*/ DWORD   dwSSBFXCaps;            // driver FX capabilities for System->System blts\n/*110*/ DWORD   dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts\n// Members added for DX5:\n/*130*/ DWORD   dwMaxVideoPorts;        // maximum number of usable video ports\n/*134*/ DWORD   dwCurrVideoPorts;       // current number of video ports used\n/*138*/ DWORD   dwSVBCaps2;             // more driver specific capabilities for System->Vmem blts\n/*13c*/ DWORD   dwNLVBCaps;               // driver specific capabilities for non-local->local vidmem blts\n/*140*/ DWORD   dwNLVBCaps2;              // more driver specific capabilities non-local->local vidmem blts\n/*144*/ DWORD   dwNLVBCKeyCaps;           // driver color key capabilities for non-local->local vidmem blts\n/*148*/ DWORD   dwNLVBFXCaps;             // driver FX capabilities for non-local->local blts\n/*14c*/ DWORD   dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts\n} DDCAPS_DX5;\ntypedef DDCAPS_DX5 FAR* LPDDCAPS_DX5;\n\ntypedef struct _DDCAPS_DX6\n{\n/*  0*/ DWORD   dwSize;                 // size of the DDDRIVERCAPS structure\n/*  4*/ DWORD   dwCaps;                 // driver specific capabilities\n/*  8*/ DWORD   dwCaps2;                // more driver specific capabilites\n/*  c*/ DWORD   dwCKeyCaps;             // color key capabilities of the surface\n/* 10*/ DWORD   dwFXCaps;               // driver specific stretching and effects capabilites\n/* 14*/ DWORD   dwFXAlphaCaps;          // alpha caps\n/* 18*/ DWORD   dwPalCaps;              // palette capabilities\n/* 1c*/ DWORD   dwSVCaps;               // stereo vision capabilities\n/* 20*/ DWORD   dwAlphaBltConstBitDepths;       // DDBD_2,4,8\n/* 24*/ DWORD   dwAlphaBltPixelBitDepths;       // DDBD_1,2,4,8\n/* 28*/ DWORD   dwAlphaBltSurfaceBitDepths;     // DDBD_1,2,4,8\n/* 2c*/ DWORD   dwAlphaOverlayConstBitDepths;   // DDBD_2,4,8\n/* 30*/ DWORD   dwAlphaOverlayPixelBitDepths;   // DDBD_1,2,4,8\n/* 34*/ DWORD   dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8\n/* 38*/ DWORD   dwZBufferBitDepths;             // DDBD_8,16,24,32\n/* 3c*/ DWORD   dwVidMemTotal;          // total amount of video memory\n/* 40*/ DWORD   dwVidMemFree;           // amount of free video memory\n/* 44*/ DWORD   dwMaxVisibleOverlays;   // maximum number of visible overlays\n/* 48*/ DWORD   dwCurrVisibleOverlays;  // current number of visible overlays\n/* 4c*/ DWORD   dwNumFourCCCodes;       // number of four cc codes\n/* 50*/ DWORD   dwAlignBoundarySrc;     // source rectangle alignment\n/* 54*/ DWORD   dwAlignSizeSrc;         // source rectangle byte size\n/* 58*/ DWORD   dwAlignBoundaryDest;    // dest rectangle alignment\n/* 5c*/ DWORD   dwAlignSizeDest;        // dest rectangle byte size\n/* 60*/ DWORD   dwAlignStrideAlign;     // stride alignment\n/* 64*/ DWORD   dwRops[DD_ROP_SPACE];   // ROPS supported\n/* 84*/ DDSCAPS ddsOldCaps;             // Was DDSCAPS  ddsCaps. ddsCaps is of type DDSCAPS2 for DX6\n/* 88*/ DWORD   dwMinOverlayStretch;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 8c*/ DWORD   dwMaxOverlayStretch;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 90*/ DWORD   dwMinLiveVideoStretch;  // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 94*/ DWORD   dwMaxLiveVideoStretch;  // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 98*/ DWORD   dwMinHwCodecStretch;    // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 9c*/ DWORD   dwMaxHwCodecStretch;    // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* a0*/ DWORD   dwReserved1;            // reserved\n/* a4*/ DWORD   dwReserved2;            // reserved\n/* a8*/ DWORD   dwReserved3;            // reserved\n/* ac*/ DWORD   dwSVBCaps;              // driver specific capabilities for System->Vmem blts\n/* b0*/ DWORD   dwSVBCKeyCaps;          // driver color key capabilities for System->Vmem blts\n/* b4*/ DWORD   dwSVBFXCaps;            // driver FX capabilities for System->Vmem blts\n/* b8*/ DWORD   dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts\n/* d8*/ DWORD   dwVSBCaps;              // driver specific capabilities for Vmem->System blts\n/* dc*/ DWORD   dwVSBCKeyCaps;          // driver color key capabilities for Vmem->System blts\n/* e0*/ DWORD   dwVSBFXCaps;            // driver FX capabilities for Vmem->System blts\n/* e4*/ DWORD   dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts\n/*104*/ DWORD   dwSSBCaps;              // driver specific capabilities for System->System blts\n/*108*/ DWORD   dwSSBCKeyCaps;          // driver color key capabilities for System->System blts\n/*10c*/ DWORD   dwSSBFXCaps;            // driver FX capabilities for System->System blts\n/*110*/ DWORD   dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts\n/*130*/ DWORD   dwMaxVideoPorts;        // maximum number of usable video ports\n/*134*/ DWORD   dwCurrVideoPorts;       // current number of video ports used\n/*138*/ DWORD   dwSVBCaps2;             // more driver specific capabilities for System->Vmem blts\n/*13c*/ DWORD   dwNLVBCaps;               // driver specific capabilities for non-local->local vidmem blts\n/*140*/ DWORD   dwNLVBCaps2;              // more driver specific capabilities non-local->local vidmem blts\n/*144*/ DWORD   dwNLVBCKeyCaps;           // driver color key capabilities for non-local->local vidmem blts\n/*148*/ DWORD   dwNLVBFXCaps;             // driver FX capabilities for non-local->local blts\n/*14c*/ DWORD   dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts\n// Members added for DX6 release\n/*16c*/ DDSCAPS2 ddsCaps;               // Surface Caps\n} DDCAPS_DX6;\ntypedef DDCAPS_DX6 FAR* LPDDCAPS_DX6;\n\ntypedef struct _DDCAPS_DX7\n{\n/*  0*/ DWORD   dwSize;                 // size of the DDDRIVERCAPS structure\n/*  4*/ DWORD   dwCaps;                 // driver specific capabilities\n/*  8*/ DWORD   dwCaps2;                // more driver specific capabilites\n/*  c*/ DWORD   dwCKeyCaps;             // color key capabilities of the surface\n/* 10*/ DWORD   dwFXCaps;               // driver specific stretching and effects capabilites\n/* 14*/ DWORD   dwFXAlphaCaps;          // alpha driver specific capabilities\n/* 18*/ DWORD   dwPalCaps;              // palette capabilities\n/* 1c*/ DWORD   dwSVCaps;               // stereo vision capabilities\n/* 20*/ DWORD   dwAlphaBltConstBitDepths;       // DDBD_2,4,8\n/* 24*/ DWORD   dwAlphaBltPixelBitDepths;       // DDBD_1,2,4,8\n/* 28*/ DWORD   dwAlphaBltSurfaceBitDepths;     // DDBD_1,2,4,8\n/* 2c*/ DWORD   dwAlphaOverlayConstBitDepths;   // DDBD_2,4,8\n/* 30*/ DWORD   dwAlphaOverlayPixelBitDepths;   // DDBD_1,2,4,8\n/* 34*/ DWORD   dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8\n/* 38*/ DWORD   dwZBufferBitDepths;             // DDBD_8,16,24,32\n/* 3c*/ DWORD   dwVidMemTotal;          // total amount of video memory\n/* 40*/ DWORD   dwVidMemFree;           // amount of free video memory\n/* 44*/ DWORD   dwMaxVisibleOverlays;   // maximum number of visible overlays\n/* 48*/ DWORD   dwCurrVisibleOverlays;  // current number of visible overlays\n/* 4c*/ DWORD   dwNumFourCCCodes;       // number of four cc codes\n/* 50*/ DWORD   dwAlignBoundarySrc;     // source rectangle alignment\n/* 54*/ DWORD   dwAlignSizeSrc;         // source rectangle byte size\n/* 58*/ DWORD   dwAlignBoundaryDest;    // dest rectangle alignment\n/* 5c*/ DWORD   dwAlignSizeDest;        // dest rectangle byte size\n/* 60*/ DWORD   dwAlignStrideAlign;     // stride alignment\n/* 64*/ DWORD   dwRops[DD_ROP_SPACE];   // ROPS supported\n/* 84*/ DDSCAPS ddsOldCaps;             // Was DDSCAPS  ddsCaps. ddsCaps is of type DDSCAPS2 for DX6\n/* 88*/ DWORD   dwMinOverlayStretch;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 8c*/ DWORD   dwMaxOverlayStretch;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 90*/ DWORD   dwMinLiveVideoStretch;  // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 94*/ DWORD   dwMaxLiveVideoStretch;  // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 98*/ DWORD   dwMinHwCodecStretch;    // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 9c*/ DWORD   dwMaxHwCodecStretch;    // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* a0*/ DWORD   dwReserved1;            // reserved\n/* a4*/ DWORD   dwReserved2;            // reserved\n/* a8*/ DWORD   dwReserved3;            // reserved\n/* ac*/ DWORD   dwSVBCaps;              // driver specific capabilities for System->Vmem blts\n/* b0*/ DWORD   dwSVBCKeyCaps;          // driver color key capabilities for System->Vmem blts\n/* b4*/ DWORD   dwSVBFXCaps;            // driver FX capabilities for System->Vmem blts\n/* b8*/ DWORD   dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts\n/* d8*/ DWORD   dwVSBCaps;              // driver specific capabilities for Vmem->System blts\n/* dc*/ DWORD   dwVSBCKeyCaps;          // driver color key capabilities for Vmem->System blts\n/* e0*/ DWORD   dwVSBFXCaps;            // driver FX capabilities for Vmem->System blts\n/* e4*/ DWORD   dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts\n/*104*/ DWORD   dwSSBCaps;              // driver specific capabilities for System->System blts\n/*108*/ DWORD   dwSSBCKeyCaps;          // driver color key capabilities for System->System blts\n/*10c*/ DWORD   dwSSBFXCaps;            // driver FX capabilities for System->System blts\n/*110*/ DWORD   dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts\n/*130*/ DWORD   dwMaxVideoPorts;        // maximum number of usable video ports\n/*134*/ DWORD   dwCurrVideoPorts;       // current number of video ports used\n/*138*/ DWORD   dwSVBCaps2;             // more driver specific capabilities for System->Vmem blts\n/*13c*/ DWORD   dwNLVBCaps;               // driver specific capabilities for non-local->local vidmem blts\n/*140*/ DWORD   dwNLVBCaps2;              // more driver specific capabilities non-local->local vidmem blts\n/*144*/ DWORD   dwNLVBCKeyCaps;           // driver color key capabilities for non-local->local vidmem blts\n/*148*/ DWORD   dwNLVBFXCaps;             // driver FX capabilities for non-local->local blts\n/*14c*/ DWORD   dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts\n// Members added for DX6 release\n/*16c*/ DDSCAPS2 ddsCaps;               // Surface Caps\n} DDCAPS_DX7;\ntypedef DDCAPS_DX7 FAR* LPDDCAPS_DX7;\n\n\n#if DIRECTDRAW_VERSION <= 0x300\n    typedef DDCAPS_DX3 DDCAPS;\n#elif DIRECTDRAW_VERSION <= 0x500\n    typedef DDCAPS_DX5 DDCAPS;\n#elif DIRECTDRAW_VERSION <= 0x600\n    typedef DDCAPS_DX6 DDCAPS;\n#else\n    typedef DDCAPS_DX7 DDCAPS;\n#endif\n\ntypedef DDCAPS FAR* LPDDCAPS;\n\n\n\n/*\n * DDPIXELFORMAT\n */\ntypedef struct _DDPIXELFORMAT\n{\n    DWORD       dwSize;                 // size of structure\n    DWORD       dwFlags;                // pixel format flags\n    DWORD       dwFourCC;               // (FOURCC code)\n    union\n    {\n        DWORD   dwRGBBitCount;          // how many bits per pixel\n        DWORD   dwYUVBitCount;          // how many bits per pixel\n        DWORD   dwZBufferBitDepth;      // how many total bits/pixel in z buffer (including any stencil bits)\n        DWORD   dwAlphaBitDepth;        // how many bits for alpha channels\n        DWORD   dwLuminanceBitCount;    // how many bits per pixel\n        DWORD   dwBumpBitCount;         // how many bits per \"buxel\", total\n        DWORD   dwPrivateFormatBitCount;// Bits per pixel of private driver formats. Only valid in texture\n                                        // format list and if DDPF_D3DFORMAT is set\n    } DUMMYUNIONNAMEN(1);\n    union\n    {\n        DWORD   dwRBitMask;             // mask for red bit\n        DWORD   dwYBitMask;             // mask for Y bits\n        DWORD   dwStencilBitDepth;      // how many stencil bits (note: dwZBufferBitDepth-dwStencilBitDepth is total Z-only bits)\n        DWORD   dwLuminanceBitMask;     // mask for luminance bits\n        DWORD   dwBumpDuBitMask;        // mask for bump map U delta bits\n        DWORD   dwOperations;           // DDPF_D3DFORMAT Operations\n    } DUMMYUNIONNAMEN(2);\n    union\n    {\n        DWORD   dwGBitMask;             // mask for green bits\n        DWORD   dwUBitMask;             // mask for U bits\n        DWORD   dwZBitMask;             // mask for Z bits\n        DWORD   dwBumpDvBitMask;        // mask for bump map V delta bits\n        struct\n        {\n            WORD    wFlipMSTypes;       // Multisample methods supported via flip for this D3DFORMAT\n            WORD    wBltMSTypes;        // Multisample methods supported via blt for this D3DFORMAT\n        } MultiSampleCaps;\n\n    } DUMMYUNIONNAMEN(3);\n    union\n    {\n        DWORD   dwBBitMask;             // mask for blue bits\n        DWORD   dwVBitMask;             // mask for V bits\n        DWORD   dwStencilBitMask;       // mask for stencil bits\n        DWORD   dwBumpLuminanceBitMask; // mask for luminance in bump map\n    } DUMMYUNIONNAMEN(4);\n    union\n    {\n        DWORD   dwRGBAlphaBitMask;      // mask for alpha channel\n        DWORD   dwYUVAlphaBitMask;      // mask for alpha channel\n        DWORD   dwLuminanceAlphaBitMask;// mask for alpha channel\n        DWORD   dwRGBZBitMask;          // mask for Z channel\n        DWORD   dwYUVZBitMask;          // mask for Z channel\n    } DUMMYUNIONNAMEN(5);\n} DDPIXELFORMAT;\n\ntypedef DDPIXELFORMAT FAR* LPDDPIXELFORMAT;\n\n/*\n * DDOVERLAYFX\n */\ntypedef struct _DDOVERLAYFX\n{\n    DWORD       dwSize;                         // size of structure\n    DWORD       dwAlphaEdgeBlendBitDepth;       // Bit depth used to specify constant for alpha edge blend\n    DWORD       dwAlphaEdgeBlend;               // Constant to use as alpha for edge blend\n    DWORD       dwReserved;\n    DWORD       dwAlphaDestConstBitDepth;       // Bit depth used to specify alpha constant for destination\n    union\n    {\n        DWORD   dwAlphaDestConst;               // Constant to use as alpha channel for dest\n        LPDIRECTDRAWSURFACE lpDDSAlphaDest;     // Surface to use as alpha channel for dest\n    } DUMMYUNIONNAMEN(1);\n    DWORD       dwAlphaSrcConstBitDepth;        // Bit depth used to specify alpha constant for source\n    union\n    {\n        DWORD   dwAlphaSrcConst;                // Constant to use as alpha channel for src\n        LPDIRECTDRAWSURFACE lpDDSAlphaSrc;      // Surface to use as alpha channel for src\n    } DUMMYUNIONNAMEN(2);\n    DDCOLORKEY  dckDestColorkey;                // DestColorkey override\n    DDCOLORKEY  dckSrcColorkey;                 // DestColorkey override\n    DWORD       dwDDFX;                         // Overlay FX\n    DWORD       dwFlags;                        // flags\n} DDOVERLAYFX;\n\ntypedef DDOVERLAYFX FAR *LPDDOVERLAYFX;\n\n\n/*\n * DDBLTBATCH: BltBatch entry structure\n */\ntypedef struct _DDBLTBATCH\n{\n    LPRECT              lprDest;\n    LPDIRECTDRAWSURFACE lpDDSSrc;\n    LPRECT              lprSrc;\n    DWORD               dwFlags;\n    LPDDBLTFX           lpDDBltFx;\n} DDBLTBATCH;\n\ntypedef DDBLTBATCH FAR * LPDDBLTBATCH;\n\n\n/*\n * DDGAMMARAMP\n */\ntypedef struct _DDGAMMARAMP\n{\n    WORD                red[256];\n    WORD                green[256];\n    WORD                blue[256];\n} DDGAMMARAMP;\ntypedef DDGAMMARAMP FAR * LPDDGAMMARAMP;\n\n/*\n *  This is the structure within which DirectDraw returns data about the current graphics driver and chipset\n */\n\n#define MAX_DDDEVICEID_STRING           512\n\ntypedef struct tagDDDEVICEIDENTIFIER\n{\n    /*\n     * These elements are for presentation to the user only. They should not be used to identify particular\n     * drivers, since this is unreliable and many different strings may be associated with the same\n     * device, and the same driver from different vendors.\n     */\n    char    szDriver[MAX_DDDEVICEID_STRING];\n    char    szDescription[MAX_DDDEVICEID_STRING];\n\n    /*\n     * This element is the version of the DirectDraw/3D driver. It is legal to do <, > comparisons\n     * on the whole 64 bits. Caution should be exercised if you use this element to identify problematic\n     * drivers. It is recommended that guidDeviceIdentifier is used for this purpose.\n     *\n     * This version has the form:\n     *  wProduct = HIWORD(liDriverVersion.HighPart)\n     *  wVersion = LOWORD(liDriverVersion.HighPart)\n     *  wSubVersion = HIWORD(liDriverVersion.LowPart)\n     *  wBuild = LOWORD(liDriverVersion.LowPart)\n     */\n#ifdef _WIN32\n    LARGE_INTEGER liDriverVersion;      /* Defined for applications and other 32 bit components */\n#else\n    DWORD   dwDriverVersionLowPart;     /* Defined for 16 bit driver components */\n    DWORD   dwDriverVersionHighPart;\n#endif\n\n\n    /*\n     * These elements can be used to identify particular chipsets. Use with extreme caution.\n     *   dwVendorId     Identifies the manufacturer. May be zero if unknown.\n     *   dwDeviceId     Identifies the type of chipset. May be zero if unknown.\n     *   dwSubSysId     Identifies the subsystem, typically this means the particular board. May be zero if unknown.\n     *   dwRevision     Identifies the revision level of the chipset. May be zero if unknown.\n     */\n    DWORD   dwVendorId;\n    DWORD   dwDeviceId;\n    DWORD   dwSubSysId;\n    DWORD   dwRevision;\n\n    /*\n     * This element can be used to check changes in driver/chipset. This GUID is a unique identifier for the\n     * driver/chipset pair. Use this element if you wish to track changes to the driver/chipset in order to\n     * reprofile the graphics subsystem.\n     * This element can also be used to identify particular problematic drivers.\n     */\n    GUID    guidDeviceIdentifier;\n} DDDEVICEIDENTIFIER, * LPDDDEVICEIDENTIFIER;\n\ntypedef struct tagDDDEVICEIDENTIFIER2\n{\n    /*\n     * These elements are for presentation to the user only. They should not be used to identify particular\n     * drivers, since this is unreliable and many different strings may be associated with the same\n     * device, and the same driver from different vendors.\n     */\n    char    szDriver[MAX_DDDEVICEID_STRING];\n    char    szDescription[MAX_DDDEVICEID_STRING];\n\n    /*\n     * This element is the version of the DirectDraw/3D driver. It is legal to do <, > comparisons\n     * on the whole 64 bits. Caution should be exercised if you use this element to identify problematic\n     * drivers. It is recommended that guidDeviceIdentifier is used for this purpose.\n     *\n     * This version has the form:\n     *  wProduct = HIWORD(liDriverVersion.HighPart)\n     *  wVersion = LOWORD(liDriverVersion.HighPart)\n     *  wSubVersion = HIWORD(liDriverVersion.LowPart)\n     *  wBuild = LOWORD(liDriverVersion.LowPart)\n     */\n#ifdef _WIN32\n    LARGE_INTEGER liDriverVersion;      /* Defined for applications and other 32 bit components */\n#else\n    DWORD   dwDriverVersionLowPart;     /* Defined for 16 bit driver components */\n    DWORD   dwDriverVersionHighPart;\n#endif\n\n\n    /*\n     * These elements can be used to identify particular chipsets. Use with extreme caution.\n     *   dwVendorId     Identifies the manufacturer. May be zero if unknown.\n     *   dwDeviceId     Identifies the type of chipset. May be zero if unknown.\n     *   dwSubSysId     Identifies the subsystem, typically this means the particular board. May be zero if unknown.\n     *   dwRevision     Identifies the revision level of the chipset. May be zero if unknown.\n     */\n    DWORD   dwVendorId;\n    DWORD   dwDeviceId;\n    DWORD   dwSubSysId;\n    DWORD   dwRevision;\n\n    /*\n     * This element can be used to check changes in driver/chipset. This GUID is a unique identifier for the\n     * driver/chipset pair. Use this element if you wish to track changes to the driver/chipset in order to\n     * reprofile the graphics subsystem.\n     * This element can also be used to identify particular problematic drivers.\n     */\n    GUID    guidDeviceIdentifier;\n\n    /*\n     * This element is used to determine the Windows Hardware Quality Lab (WHQL)\n     * certification level for this driver/device pair.\n     */\n    DWORD   dwWHQLLevel;\n\n} DDDEVICEIDENTIFIER2, * LPDDDEVICEIDENTIFIER2;\n\n/*\n * Flags for the IDirectDraw4::GetDeviceIdentifier method\n */\n\n/*\n * This flag causes GetDeviceIdentifier to return information about the host (typically 2D) adapter in a system equipped\n * with a stacked secondary 3D adapter. Such an adapter appears to the application as if it were part of the\n * host adapter, but is typically physcially located on a separate card. The stacked secondary's information is\n * returned when GetDeviceIdentifier's dwFlags field is zero, since this most accurately reflects the qualities\n * of the DirectDraw object involved.\n */\n#define DDGDI_GETHOSTIDENTIFIER         0x00000001L\n\n/*\n * Macros for interpretting DDEVICEIDENTIFIER2.dwWHQLLevel\n */\n#define GET_WHQL_YEAR( dwWHQLLevel ) \\\n    ( (dwWHQLLevel) / 0x10000 )\n#define GET_WHQL_MONTH( dwWHQLLevel ) \\\n    ( ( (dwWHQLLevel) / 0x100 ) & 0x00ff )\n#define GET_WHQL_DAY( dwWHQLLevel ) \\\n    ( (dwWHQLLevel) & 0xff )\n\n\n/*\n * callbacks\n */\ntypedef DWORD   (FAR PASCAL *LPCLIPPERCALLBACK)(LPDIRECTDRAWCLIPPER lpDDClipper, HWND hWnd, DWORD code, LPVOID lpContext );\n#ifdef STREAMING\ntypedef DWORD   (FAR PASCAL *LPSURFACESTREAMINGCALLBACK)(DWORD);\n#endif\n\n\n/*\n * INTERACES FOLLOW:\n *      IDirectDraw\n *      IDirectDrawClipper\n *      IDirectDrawPalette\n *      IDirectDrawSurface\n */\n\n/*\n * IDirectDraw\n */\n#if defined( _WIN32 ) && !defined( _NO_COM )\n#undef INTERFACE\n#define INTERFACE IDirectDraw\nDECLARE_INTERFACE_( IDirectDraw, IUnknown )\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IDirectDraw methods ***/\n    STDMETHOD(Compact)(THIS) PURE;\n    STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE;\n    STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE;\n    STDMETHOD(CreateSurface)(THIS_  LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, IUnknown FAR *) PURE;\n    STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR * ) PURE;\n    STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE;\n    STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE;\n    STDMETHOD(FlipToGDISurface)(THIS) PURE;\n    STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;\n    STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE;\n    STDMETHOD(GetFourCCCodes)(THIS_  LPDWORD, LPDWORD ) PURE;\n    STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE;\n    STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;\n    STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;\n    STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;\n    STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;\n    STDMETHOD(RestoreDisplayMode)(THIS) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;\n    STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD) PURE;\n    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectDraw_QueryInterface(p, a, b)         (p)->lpVtbl->QueryInterface(p, a, b)\n#define IDirectDraw_AddRef(p)                       (p)->lpVtbl->AddRef(p)\n#define IDirectDraw_Release(p)                      (p)->lpVtbl->Release(p)\n#define IDirectDraw_Compact(p)                      (p)->lpVtbl->Compact(p)\n#define IDirectDraw_CreateClipper(p, a, b, c)       (p)->lpVtbl->CreateClipper(p, a, b, c)\n#define IDirectDraw_CreatePalette(p, a, b, c, d)    (p)->lpVtbl->CreatePalette(p, a, b, c, d)\n#define IDirectDraw_CreateSurface(p, a, b, c)       (p)->lpVtbl->CreateSurface(p, a, b, c)\n#define IDirectDraw_DuplicateSurface(p, a, b)       (p)->lpVtbl->DuplicateSurface(p, a, b)\n#define IDirectDraw_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d)\n#define IDirectDraw_EnumSurfaces(p, a, b, c, d)     (p)->lpVtbl->EnumSurfaces(p, a, b, c, d)\n#define IDirectDraw_FlipToGDISurface(p)             (p)->lpVtbl->FlipToGDISurface(p)\n#define IDirectDraw_GetCaps(p, a, b)                (p)->lpVtbl->GetCaps(p, a, b)\n#define IDirectDraw_GetDisplayMode(p, a)            (p)->lpVtbl->GetDisplayMode(p, a)\n#define IDirectDraw_GetFourCCCodes(p, a, b)         (p)->lpVtbl->GetFourCCCodes(p, a, b)\n#define IDirectDraw_GetGDISurface(p, a)             (p)->lpVtbl->GetGDISurface(p, a)\n#define IDirectDraw_GetMonitorFrequency(p, a)       (p)->lpVtbl->GetMonitorFrequency(p, a)\n#define IDirectDraw_GetScanLine(p, a)               (p)->lpVtbl->GetScanLine(p, a)\n#define IDirectDraw_GetVerticalBlankStatus(p, a)    (p)->lpVtbl->GetVerticalBlankStatus(p, a)\n#define IDirectDraw_Initialize(p, a)                (p)->lpVtbl->Initialize(p, a)\n#define IDirectDraw_RestoreDisplayMode(p)           (p)->lpVtbl->RestoreDisplayMode(p)\n#define IDirectDraw_SetCooperativeLevel(p, a, b)    (p)->lpVtbl->SetCooperativeLevel(p, a, b)\n#define IDirectDraw_SetDisplayMode(p, a, b, c)      (p)->lpVtbl->SetDisplayMode(p, a, b, c)\n#define IDirectDraw_WaitForVerticalBlank(p, a, b)   (p)->lpVtbl->WaitForVerticalBlank(p, a, b)\n#else\n#define IDirectDraw_QueryInterface(p, a, b)         (p)->QueryInterface(a, b)\n#define IDirectDraw_AddRef(p)                       (p)->AddRef()\n#define IDirectDraw_Release(p)                      (p)->Release()\n#define IDirectDraw_Compact(p)                      (p)->Compact()\n#define IDirectDraw_CreateClipper(p, a, b, c)       (p)->CreateClipper(a, b, c)\n#define IDirectDraw_CreatePalette(p, a, b, c, d)    (p)->CreatePalette(a, b, c, d)\n#define IDirectDraw_CreateSurface(p, a, b, c)       (p)->CreateSurface(a, b, c)\n#define IDirectDraw_DuplicateSurface(p, a, b)       (p)->DuplicateSurface(a, b)\n#define IDirectDraw_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d)\n#define IDirectDraw_EnumSurfaces(p, a, b, c, d)     (p)->EnumSurfaces(a, b, c, d)\n#define IDirectDraw_FlipToGDISurface(p)             (p)->FlipToGDISurface()\n#define IDirectDraw_GetCaps(p, a, b)                (p)->GetCaps(a, b)\n#define IDirectDraw_GetDisplayMode(p, a)            (p)->GetDisplayMode(a)\n#define IDirectDraw_GetFourCCCodes(p, a, b)         (p)->GetFourCCCodes(a, b)\n#define IDirectDraw_GetGDISurface(p, a)             (p)->GetGDISurface(a)\n#define IDirectDraw_GetMonitorFrequency(p, a)       (p)->GetMonitorFrequency(a)\n#define IDirectDraw_GetScanLine(p, a)               (p)->GetScanLine(a)\n#define IDirectDraw_GetVerticalBlankStatus(p, a)    (p)->GetVerticalBlankStatus(a)\n#define IDirectDraw_Initialize(p, a)                (p)->Initialize(a)\n#define IDirectDraw_RestoreDisplayMode(p)           (p)->RestoreDisplayMode()\n#define IDirectDraw_SetCooperativeLevel(p, a, b)    (p)->SetCooperativeLevel(a, b)\n#define IDirectDraw_SetDisplayMode(p, a, b, c)      (p)->SetDisplayMode(a, b, c)\n#define IDirectDraw_WaitForVerticalBlank(p, a, b)   (p)->WaitForVerticalBlank(a, b)\n#endif\n\n#endif\n\n#if defined( _WIN32 ) && !defined( _NO_COM )\n#undef INTERFACE\n#define INTERFACE IDirectDraw2\nDECLARE_INTERFACE_( IDirectDraw2, IUnknown )\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IDirectDraw methods ***/\n    STDMETHOD(Compact)(THIS) PURE;\n    STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE;\n    STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE;\n    STDMETHOD(CreateSurface)(THIS_  LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, IUnknown FAR *) PURE;\n    STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR * ) PURE;\n    STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE;\n    STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE;\n    STDMETHOD(FlipToGDISurface)(THIS) PURE;\n    STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;\n    STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE;\n    STDMETHOD(GetFourCCCodes)(THIS_  LPDWORD, LPDWORD ) PURE;\n    STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE;\n    STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;\n    STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;\n    STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;\n    STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;\n    STDMETHOD(RestoreDisplayMode)(THIS) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;\n    STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE;\n    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;\n    /*** Added in the v2 interface ***/\n    STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS, LPDWORD, LPDWORD) PURE;\n};\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectDraw2_QueryInterface(p, a, b)         (p)->lpVtbl->QueryInterface(p, a, b)\n#define IDirectDraw2_AddRef(p)                       (p)->lpVtbl->AddRef(p)\n#define IDirectDraw2_Release(p)                      (p)->lpVtbl->Release(p)\n#define IDirectDraw2_Compact(p)                      (p)->lpVtbl->Compact(p)\n#define IDirectDraw2_CreateClipper(p, a, b, c)       (p)->lpVtbl->CreateClipper(p, a, b, c)\n#define IDirectDraw2_CreatePalette(p, a, b, c, d)    (p)->lpVtbl->CreatePalette(p, a, b, c, d)\n#define IDirectDraw2_CreateSurface(p, a, b, c)       (p)->lpVtbl->CreateSurface(p, a, b, c)\n#define IDirectDraw2_DuplicateSurface(p, a, b)       (p)->lpVtbl->DuplicateSurface(p, a, b)\n#define IDirectDraw2_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d)\n#define IDirectDraw2_EnumSurfaces(p, a, b, c, d)     (p)->lpVtbl->EnumSurfaces(p, a, b, c, d)\n#define IDirectDraw2_FlipToGDISurface(p)             (p)->lpVtbl->FlipToGDISurface(p)\n#define IDirectDraw2_GetCaps(p, a, b)                (p)->lpVtbl->GetCaps(p, a, b)\n#define IDirectDraw2_GetDisplayMode(p, a)            (p)->lpVtbl->GetDisplayMode(p, a)\n#define IDirectDraw2_GetFourCCCodes(p, a, b)         (p)->lpVtbl->GetFourCCCodes(p, a, b)\n#define IDirectDraw2_GetGDISurface(p, a)             (p)->lpVtbl->GetGDISurface(p, a)\n#define IDirectDraw2_GetMonitorFrequency(p, a)       (p)->lpVtbl->GetMonitorFrequency(p, a)\n#define IDirectDraw2_GetScanLine(p, a)               (p)->lpVtbl->GetScanLine(p, a)\n#define IDirectDraw2_GetVerticalBlankStatus(p, a)    (p)->lpVtbl->GetVerticalBlankStatus(p, a)\n#define IDirectDraw2_Initialize(p, a)                (p)->lpVtbl->Initialize(p, a)\n#define IDirectDraw2_RestoreDisplayMode(p)           (p)->lpVtbl->RestoreDisplayMode(p)\n#define IDirectDraw2_SetCooperativeLevel(p, a, b)    (p)->lpVtbl->SetCooperativeLevel(p, a, b)\n#define IDirectDraw2_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e)\n#define IDirectDraw2_WaitForVerticalBlank(p, a, b)   (p)->lpVtbl->WaitForVerticalBlank(p, a, b)\n#define IDirectDraw2_GetAvailableVidMem(p, a, b, c)  (p)->lpVtbl->GetAvailableVidMem(p, a, b, c)\n#else\n#define IDirectDraw2_QueryInterface(p, a, b)         (p)->QueryInterface(a, b)\n#define IDirectDraw2_AddRef(p)                       (p)->AddRef()\n#define IDirectDraw2_Release(p)                      (p)->Release()\n#define IDirectDraw2_Compact(p)                      (p)->Compact()\n#define IDirectDraw2_CreateClipper(p, a, b, c)       (p)->CreateClipper(a, b, c)\n#define IDirectDraw2_CreatePalette(p, a, b, c, d)    (p)->CreatePalette(a, b, c, d)\n#define IDirectDraw2_CreateSurface(p, a, b, c)       (p)->CreateSurface(a, b, c)\n#define IDirectDraw2_DuplicateSurface(p, a, b)       (p)->DuplicateSurface(a, b)\n#define IDirectDraw2_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d)\n#define IDirectDraw2_EnumSurfaces(p, a, b, c, d)     (p)->EnumSurfaces(a, b, c, d)\n#define IDirectDraw2_FlipToGDISurface(p)             (p)->FlipToGDISurface()\n#define IDirectDraw2_GetCaps(p, a, b)                (p)->GetCaps(a, b)\n#define IDirectDraw2_GetDisplayMode(p, a)            (p)->GetDisplayMode(a)\n#define IDirectDraw2_GetFourCCCodes(p, a, b)         (p)->GetFourCCCodes(a, b)\n#define IDirectDraw2_GetGDISurface(p, a)             (p)->GetGDISurface(a)\n#define IDirectDraw2_GetMonitorFrequency(p, a)       (p)->GetMonitorFrequency(a)\n#define IDirectDraw2_GetScanLine(p, a)               (p)->GetScanLine(a)\n#define IDirectDraw2_GetVerticalBlankStatus(p, a)    (p)->GetVerticalBlankStatus(a)\n#define IDirectDraw2_Initialize(p, a)                (p)->Initialize(a)\n#define IDirectDraw2_RestoreDisplayMode(p)           (p)->RestoreDisplayMode()\n#define IDirectDraw2_SetCooperativeLevel(p, a, b)    (p)->SetCooperativeLevel(a, b)\n#define IDirectDraw2_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e)\n#define IDirectDraw2_WaitForVerticalBlank(p, a, b)   (p)->WaitForVerticalBlank(a, b)\n#define IDirectDraw2_GetAvailableVidMem(p, a, b, c)  (p)->GetAvailableVidMem(a, b, c)\n#endif\n\n#endif\n\n#if defined( _WIN32 ) && !defined( _NO_COM )\n#undef INTERFACE\n#define INTERFACE IDirectDraw4\nDECLARE_INTERFACE_( IDirectDraw4, IUnknown )\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IDirectDraw methods ***/\n    STDMETHOD(Compact)(THIS) PURE;\n    STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE;\n    STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE;\n    STDMETHOD(CreateSurface)(THIS_  LPDDSURFACEDESC2, LPDIRECTDRAWSURFACE4 FAR *, IUnknown FAR *) PURE;\n    STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE4, LPDIRECTDRAWSURFACE4 FAR * ) PURE;\n    STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ) PURE;\n    STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK2 ) PURE;\n    STDMETHOD(FlipToGDISurface)(THIS) PURE;\n    STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;\n    STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC2) PURE;\n    STDMETHOD(GetFourCCCodes)(THIS_  LPDWORD, LPDWORD ) PURE;\n    STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE4 FAR *) PURE;\n    STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;\n    STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;\n    STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;\n    STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;\n    STDMETHOD(RestoreDisplayMode)(THIS) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;\n    STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE;\n    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;\n    /*** Added in the v2 interface ***/\n    STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS2, LPDWORD, LPDWORD) PURE;\n    /*** Added in the V4 Interface ***/\n    STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, LPDIRECTDRAWSURFACE4 *) PURE;\n    STDMETHOD(RestoreAllSurfaces)(THIS) PURE;\n    STDMETHOD(TestCooperativeLevel)(THIS) PURE;\n    STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER, DWORD ) PURE;\n};\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectDraw4_QueryInterface(p, a, b)         (p)->lpVtbl->QueryInterface(p, a, b)\n#define IDirectDraw4_AddRef(p)                       (p)->lpVtbl->AddRef(p)\n#define IDirectDraw4_Release(p)                      (p)->lpVtbl->Release(p)\n#define IDirectDraw4_Compact(p)                      (p)->lpVtbl->Compact(p)\n#define IDirectDraw4_CreateClipper(p, a, b, c)       (p)->lpVtbl->CreateClipper(p, a, b, c)\n#define IDirectDraw4_CreatePalette(p, a, b, c, d)    (p)->lpVtbl->CreatePalette(p, a, b, c, d)\n#define IDirectDraw4_CreateSurface(p, a, b, c)       (p)->lpVtbl->CreateSurface(p, a, b, c)\n#define IDirectDraw4_DuplicateSurface(p, a, b)       (p)->lpVtbl->DuplicateSurface(p, a, b)\n#define IDirectDraw4_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d)\n#define IDirectDraw4_EnumSurfaces(p, a, b, c, d)     (p)->lpVtbl->EnumSurfaces(p, a, b, c, d)\n#define IDirectDraw4_FlipToGDISurface(p)             (p)->lpVtbl->FlipToGDISurface(p)\n#define IDirectDraw4_GetCaps(p, a, b)                (p)->lpVtbl->GetCaps(p, a, b)\n#define IDirectDraw4_GetDisplayMode(p, a)            (p)->lpVtbl->GetDisplayMode(p, a)\n#define IDirectDraw4_GetFourCCCodes(p, a, b)         (p)->lpVtbl->GetFourCCCodes(p, a, b)\n#define IDirectDraw4_GetGDISurface(p, a)             (p)->lpVtbl->GetGDISurface(p, a)\n#define IDirectDraw4_GetMonitorFrequency(p, a)       (p)->lpVtbl->GetMonitorFrequency(p, a)\n#define IDirectDraw4_GetScanLine(p, a)               (p)->lpVtbl->GetScanLine(p, a)\n#define IDirectDraw4_GetVerticalBlankStatus(p, a)    (p)->lpVtbl->GetVerticalBlankStatus(p, a)\n#define IDirectDraw4_Initialize(p, a)                (p)->lpVtbl->Initialize(p, a)\n#define IDirectDraw4_RestoreDisplayMode(p)           (p)->lpVtbl->RestoreDisplayMode(p)\n#define IDirectDraw4_SetCooperativeLevel(p, a, b)    (p)->lpVtbl->SetCooperativeLevel(p, a, b)\n#define IDirectDraw4_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e)\n#define IDirectDraw4_WaitForVerticalBlank(p, a, b)   (p)->lpVtbl->WaitForVerticalBlank(p, a, b)\n#define IDirectDraw4_GetAvailableVidMem(p, a, b, c)  (p)->lpVtbl->GetAvailableVidMem(p, a, b, c)\n#define IDirectDraw4_GetSurfaceFromDC(p, a, b)       (p)->lpVtbl->GetSurfaceFromDC(p, a, b)\n#define IDirectDraw4_RestoreAllSurfaces(p)           (p)->lpVtbl->RestoreAllSurfaces(p)\n#define IDirectDraw4_TestCooperativeLevel(p)         (p)->lpVtbl->TestCooperativeLevel(p)\n#define IDirectDraw4_GetDeviceIdentifier(p,a,b)      (p)->lpVtbl->GetDeviceIdentifier(p,a,b)\n#else\n#define IDirectDraw4_QueryInterface(p, a, b)         (p)->QueryInterface(a, b)\n#define IDirectDraw4_AddRef(p)                       (p)->AddRef()\n#define IDirectDraw4_Release(p)                      (p)->Release()\n#define IDirectDraw4_Compact(p)                      (p)->Compact()\n#define IDirectDraw4_CreateClipper(p, a, b, c)       (p)->CreateClipper(a, b, c)\n#define IDirectDraw4_CreatePalette(p, a, b, c, d)    (p)->CreatePalette(a, b, c, d)\n#define IDirectDraw4_CreateSurface(p, a, b, c)       (p)->CreateSurface(a, b, c)\n#define IDirectDraw4_DuplicateSurface(p, a, b)       (p)->DuplicateSurface(a, b)\n#define IDirectDraw4_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d)\n#define IDirectDraw4_EnumSurfaces(p, a, b, c, d)     (p)->EnumSurfaces(a, b, c, d)\n#define IDirectDraw4_FlipToGDISurface(p)             (p)->FlipToGDISurface()\n#define IDirectDraw4_GetCaps(p, a, b)                (p)->GetCaps(a, b)\n#define IDirectDraw4_GetDisplayMode(p, a)            (p)->GetDisplayMode(a)\n#define IDirectDraw4_GetFourCCCodes(p, a, b)         (p)->GetFourCCCodes(a, b)\n#define IDirectDraw4_GetGDISurface(p, a)             (p)->GetGDISurface(a)\n#define IDirectDraw4_GetMonitorFrequency(p, a)       (p)->GetMonitorFrequency(a)\n#define IDirectDraw4_GetScanLine(p, a)               (p)->GetScanLine(a)\n#define IDirectDraw4_GetVerticalBlankStatus(p, a)    (p)->GetVerticalBlankStatus(a)\n#define IDirectDraw4_Initialize(p, a)                (p)->Initialize(a)\n#define IDirectDraw4_RestoreDisplayMode(p)           (p)->RestoreDisplayMode()\n#define IDirectDraw4_SetCooperativeLevel(p, a, b)    (p)->SetCooperativeLevel(a, b)\n#define IDirectDraw4_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e)\n#define IDirectDraw4_WaitForVerticalBlank(p, a, b)   (p)->WaitForVerticalBlank(a, b)\n#define IDirectDraw4_GetAvailableVidMem(p, a, b, c)  (p)->GetAvailableVidMem(a, b, c)\n#define IDirectDraw4_GetSurfaceFromDC(p, a, b)       (p)->GetSurfaceFromDC(a, b)\n#define IDirectDraw4_RestoreAllSurfaces(p)           (p)->RestoreAllSurfaces()\n#define IDirectDraw4_TestCooperativeLevel(p)         (p)->TestCooperativeLevel()\n#define IDirectDraw4_GetDeviceIdentifier(p,a,b)      (p)->GetDeviceIdentifier(a,b)\n#endif\n\n#endif\n\n#if defined( _WIN32 ) && !defined( _NO_COM )\n#undef INTERFACE\n#define INTERFACE IDirectDraw7\nDECLARE_INTERFACE_( IDirectDraw7, IUnknown )\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IDirectDraw methods ***/\n    STDMETHOD(Compact)(THIS) PURE;\n    STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE;\n    STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE;\n    STDMETHOD(CreateSurface)(THIS_  LPDDSURFACEDESC2, LPDIRECTDRAWSURFACE7 FAR *, IUnknown FAR *) PURE;\n    STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE7, LPDIRECTDRAWSURFACE7 FAR * ) PURE;\n    STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ) PURE;\n    STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK7 ) PURE;\n    STDMETHOD(FlipToGDISurface)(THIS) PURE;\n    STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;\n    STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC2) PURE;\n    STDMETHOD(GetFourCCCodes)(THIS_  LPDWORD, LPDWORD ) PURE;\n    STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE7 FAR *) PURE;\n    STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;\n    STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;\n    STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;\n    STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;\n    STDMETHOD(RestoreDisplayMode)(THIS) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;\n    STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE;\n    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;\n    /*** Added in the v2 interface ***/\n    STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS2, LPDWORD, LPDWORD) PURE;\n    /*** Added in the V4 Interface ***/\n    STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, LPDIRECTDRAWSURFACE7 *) PURE;\n    STDMETHOD(RestoreAllSurfaces)(THIS) PURE;\n    STDMETHOD(TestCooperativeLevel)(THIS) PURE;\n    STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER2, DWORD ) PURE;\n    STDMETHOD(StartModeTest)(THIS_ LPSIZE, DWORD, DWORD ) PURE;\n    STDMETHOD(EvaluateMode)(THIS_ DWORD, DWORD * ) PURE;\n};\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectDraw7_QueryInterface(p, a, b)         (p)->lpVtbl->QueryInterface(p, a, b)\n#define IDirectDraw7_AddRef(p)                       (p)->lpVtbl->AddRef(p)\n#define IDirectDraw7_Release(p)                      (p)->lpVtbl->Release(p)\n#define IDirectDraw7_Compact(p)                      (p)->lpVtbl->Compact(p)\n#define IDirectDraw7_CreateClipper(p, a, b, c)       (p)->lpVtbl->CreateClipper(p, a, b, c)\n#define IDirectDraw7_CreatePalette(p, a, b, c, d)    (p)->lpVtbl->CreatePalette(p, a, b, c, d)\n#define IDirectDraw7_CreateSurface(p, a, b, c)       (p)->lpVtbl->CreateSurface(p, a, b, c)\n#define IDirectDraw7_DuplicateSurface(p, a, b)       (p)->lpVtbl->DuplicateSurface(p, a, b)\n#define IDirectDraw7_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d)\n#define IDirectDraw7_EnumSurfaces(p, a, b, c, d)     (p)->lpVtbl->EnumSurfaces(p, a, b, c, d)\n#define IDirectDraw7_FlipToGDISurface(p)             (p)->lpVtbl->FlipToGDISurface(p)\n#define IDirectDraw7_GetCaps(p, a, b)                (p)->lpVtbl->GetCaps(p, a, b)\n#define IDirectDraw7_GetDisplayMode(p, a)            (p)->lpVtbl->GetDisplayMode(p, a)\n#define IDirectDraw7_GetFourCCCodes(p, a, b)         (p)->lpVtbl->GetFourCCCodes(p, a, b)\n#define IDirectDraw7_GetGDISurface(p, a)             (p)->lpVtbl->GetGDISurface(p, a)\n#define IDirectDraw7_GetMonitorFrequency(p, a)       (p)->lpVtbl->GetMonitorFrequency(p, a)\n#define IDirectDraw7_GetScanLine(p, a)               (p)->lpVtbl->GetScanLine(p, a)\n#define IDirectDraw7_GetVerticalBlankStatus(p, a)    (p)->lpVtbl->GetVerticalBlankStatus(p, a)\n#define IDirectDraw7_Initialize(p, a)                (p)->lpVtbl->Initialize(p, a)\n#define IDirectDraw7_RestoreDisplayMode(p)           (p)->lpVtbl->RestoreDisplayMode(p)\n#define IDirectDraw7_SetCooperativeLevel(p, a, b)    (p)->lpVtbl->SetCooperativeLevel(p, a, b)\n#define IDirectDraw7_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e)\n#define IDirectDraw7_WaitForVerticalBlank(p, a, b)   (p)->lpVtbl->WaitForVerticalBlank(p, a, b)\n#define IDirectDraw7_GetAvailableVidMem(p, a, b, c)  (p)->lpVtbl->GetAvailableVidMem(p, a, b, c)\n#define IDirectDraw7_GetSurfaceFromDC(p, a, b)       (p)->lpVtbl->GetSurfaceFromDC(p, a, b)\n#define IDirectDraw7_RestoreAllSurfaces(p)           (p)->lpVtbl->RestoreAllSurfaces(p)\n#define IDirectDraw7_TestCooperativeLevel(p)         (p)->lpVtbl->TestCooperativeLevel(p)\n#define IDirectDraw7_GetDeviceIdentifier(p,a,b)      (p)->lpVtbl->GetDeviceIdentifier(p,a,b)\n#define IDirectDraw7_StartModeTest(p,a,b,c)        (p)->lpVtbl->StartModeTest(p,a,b,c)\n#define IDirectDraw7_EvaluateMode(p,a,b)           (p)->lpVtbl->EvaluateMode(p,a,b)\n#else\n#define IDirectDraw7_QueryInterface(p, a, b)         (p)->QueryInterface(a, b)\n#define IDirectDraw7_AddRef(p)                       (p)->AddRef()\n#define IDirectDraw7_Release(p)                      (p)->Release()\n#define IDirectDraw7_Compact(p)                      (p)->Compact()\n#define IDirectDraw7_CreateClipper(p, a, b, c)       (p)->CreateClipper(a, b, c)\n#define IDirectDraw7_CreatePalette(p, a, b, c, d)    (p)->CreatePalette(a, b, c, d)\n#define IDirectDraw7_CreateSurface(p, a, b, c)       (p)->CreateSurface(a, b, c)\n#define IDirectDraw7_DuplicateSurface(p, a, b)       (p)->DuplicateSurface(a, b)\n#define IDirectDraw7_EnumDisplayModes(p, a, b, c, d) (p)->EnumDisplayModes(a, b, c, d)\n#define IDirectDraw7_EnumSurfaces(p, a, b, c, d)     (p)->EnumSurfaces(a, b, c, d)\n#define IDirectDraw7_FlipToGDISurface(p)             (p)->FlipToGDISurface()\n#define IDirectDraw7_GetCaps(p, a, b)                (p)->GetCaps(a, b)\n#define IDirectDraw7_GetDisplayMode(p, a)            (p)->GetDisplayMode(a)\n#define IDirectDraw7_GetFourCCCodes(p, a, b)         (p)->GetFourCCCodes(a, b)\n#define IDirectDraw7_GetGDISurface(p, a)             (p)->GetGDISurface(a)\n#define IDirectDraw7_GetMonitorFrequency(p, a)       (p)->GetMonitorFrequency(a)\n#define IDirectDraw7_GetScanLine(p, a)               (p)->GetScanLine(a)\n#define IDirectDraw7_GetVerticalBlankStatus(p, a)    (p)->GetVerticalBlankStatus(a)\n#define IDirectDraw7_Initialize(p, a)                (p)->Initialize(a)\n#define IDirectDraw7_RestoreDisplayMode(p)           (p)->RestoreDisplayMode()\n#define IDirectDraw7_SetCooperativeLevel(p, a, b)    (p)->SetCooperativeLevel(a, b)\n#define IDirectDraw7_SetDisplayMode(p, a, b, c, d, e) (p)->SetDisplayMode(a, b, c, d, e)\n#define IDirectDraw7_WaitForVerticalBlank(p, a, b)   (p)->WaitForVerticalBlank(a, b)\n#define IDirectDraw7_GetAvailableVidMem(p, a, b, c)  (p)->GetAvailableVidMem(a, b, c)\n#define IDirectDraw7_GetSurfaceFromDC(p, a, b)       (p)->GetSurfaceFromDC(a, b)\n#define IDirectDraw7_RestoreAllSurfaces(p)           (p)->RestoreAllSurfaces()\n#define IDirectDraw7_TestCooperativeLevel(p)         (p)->TestCooperativeLevel()\n#define IDirectDraw7_GetDeviceIdentifier(p,a,b)      (p)->GetDeviceIdentifier(a,b)\n#define IDirectDraw7_StartModeTest(p,a,b,c)        (p)->lpVtbl->StartModeTest(a,b,c)\n#define IDirectDraw7_EvaluateMode(p,a,b)           (p)->lpVtbl->EvaluateMode(a,b)\n#endif\n\n#endif\n\n\n/*\n * IDirectDrawPalette\n */\n#if defined( _WIN32 ) && !defined( _NO_COM )\n#undef INTERFACE\n#define INTERFACE IDirectDrawPalette\nDECLARE_INTERFACE_( IDirectDrawPalette, IUnknown )\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IDirectDrawPalette methods ***/\n    STDMETHOD(GetCaps)(THIS_ LPDWORD) PURE;\n    STDMETHOD(GetEntries)(THIS_ DWORD,DWORD,DWORD,LPPALETTEENTRY) PURE;\n    STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD, LPPALETTEENTRY) PURE;\n    STDMETHOD(SetEntries)(THIS_ DWORD,DWORD,DWORD,LPPALETTEENTRY) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectDrawPalette_QueryInterface(p, a, b)      (p)->lpVtbl->QueryInterface(p, a, b)\n#define IDirectDrawPalette_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirectDrawPalette_Release(p)                   (p)->lpVtbl->Release(p)\n#define IDirectDrawPalette_GetCaps(p, a)                (p)->lpVtbl->GetCaps(p, a)\n#define IDirectDrawPalette_GetEntries(p, a, b, c, d)    (p)->lpVtbl->GetEntries(p, a, b, c, d)\n#define IDirectDrawPalette_Initialize(p, a, b, c)       (p)->lpVtbl->Initialize(p, a, b, c)\n#define IDirectDrawPalette_SetEntries(p, a, b, c, d)    (p)->lpVtbl->SetEntries(p, a, b, c, d)\n#else\n#define IDirectDrawPalette_QueryInterface(p, a, b)      (p)->QueryInterface(a, b)\n#define IDirectDrawPalette_AddRef(p)                    (p)->AddRef()\n#define IDirectDrawPalette_Release(p)                   (p)->Release()\n#define IDirectDrawPalette_GetCaps(p, a)                (p)->GetCaps(a)\n#define IDirectDrawPalette_GetEntries(p, a, b, c, d)    (p)->GetEntries(a, b, c, d)\n#define IDirectDrawPalette_Initialize(p, a, b, c)       (p)->Initialize(a, b, c)\n#define IDirectDrawPalette_SetEntries(p, a, b, c, d)    (p)->SetEntries(a, b, c, d)\n#endif\n\n#endif\n\n\n/*\n * IDirectDrawClipper\n */\n#if defined( _WIN32 ) && !defined( _NO_COM )\n#undef INTERFACE\n#define INTERFACE IDirectDrawClipper\nDECLARE_INTERFACE_( IDirectDrawClipper, IUnknown )\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IDirectDrawClipper methods ***/\n    STDMETHOD(GetClipList)(THIS_ LPRECT, LPRGNDATA, LPDWORD) PURE;\n    STDMETHOD(GetHWnd)(THIS_ HWND FAR *) PURE;\n    STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD) PURE;\n    STDMETHOD(IsClipListChanged)(THIS_ BOOL FAR *) PURE;\n    STDMETHOD(SetClipList)(THIS_ LPRGNDATA,DWORD) PURE;\n    STDMETHOD(SetHWnd)(THIS_ DWORD, HWND ) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectDrawClipper_QueryInterface(p, a, b)  (p)->lpVtbl->QueryInterface(p, a, b)\n#define IDirectDrawClipper_AddRef(p)                (p)->lpVtbl->AddRef(p)\n#define IDirectDrawClipper_Release(p)               (p)->lpVtbl->Release(p)\n#define IDirectDrawClipper_GetClipList(p, a, b, c)  (p)->lpVtbl->GetClipList(p, a, b, c)\n#define IDirectDrawClipper_GetHWnd(p, a)            (p)->lpVtbl->GetHWnd(p, a)\n#define IDirectDrawClipper_Initialize(p, a, b)      (p)->lpVtbl->Initialize(p, a, b)\n#define IDirectDrawClipper_IsClipListChanged(p, a)  (p)->lpVtbl->IsClipListChanged(p, a)\n#define IDirectDrawClipper_SetClipList(p, a, b)     (p)->lpVtbl->SetClipList(p, a, b)\n#define IDirectDrawClipper_SetHWnd(p, a, b)         (p)->lpVtbl->SetHWnd(p, a, b)\n#else\n#define IDirectDrawClipper_QueryInterface(p, a, b)  (p)->QueryInterface(a, b)\n#define IDirectDrawClipper_AddRef(p)                (p)->AddRef()\n#define IDirectDrawClipper_Release(p)               (p)->Release()\n#define IDirectDrawClipper_GetClipList(p, a, b, c)  (p)->GetClipList(a, b, c)\n#define IDirectDrawClipper_GetHWnd(p, a)            (p)->GetHWnd(a)\n#define IDirectDrawClipper_Initialize(p, a, b)      (p)->Initialize(a, b)\n#define IDirectDrawClipper_IsClipListChanged(p, a)  (p)->IsClipListChanged(a)\n#define IDirectDrawClipper_SetClipList(p, a, b)     (p)->SetClipList(a, b)\n#define IDirectDrawClipper_SetHWnd(p, a, b)         (p)->SetHWnd(a, b)\n#endif\n\n#endif\n\n/*\n * IDirectDrawSurface and related interfaces\n */\n#if defined( _WIN32 ) && !defined( _NO_COM )\n#undef INTERFACE\n#define INTERFACE IDirectDrawSurface\nDECLARE_INTERFACE_( IDirectDrawSurface, IUnknown )\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IDirectDrawSurface methods ***/\n    STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE) PURE;\n    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;\n    STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE, LPRECT,DWORD, LPDDBLTFX) PURE;\n    STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;\n    STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE, LPRECT,DWORD) PURE;\n    STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE) PURE;\n    STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE;\n    STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE;\n    STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE, DWORD) PURE;\n    STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE FAR *) PURE;\n    STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;\n    STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE;\n    STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;\n    STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;\n    STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;\n    STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;\n    STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;\n    STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;\n    STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;\n    STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE;\n    STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE;\n    STDMETHOD(IsLost)(THIS) PURE;\n    STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE;\n    STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;\n    STDMETHOD(Restore)(THIS) PURE;\n    STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;\n    STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;\n    STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;\n    STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;\n    STDMETHOD(Unlock)(THIS_ LPVOID) PURE;\n    STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE,LPRECT,DWORD, LPDDOVERLAYFX) PURE;\n    STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;\n    STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectDrawSurface_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDrawSurface_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirectDrawSurface_Release(p)                   (p)->lpVtbl->Release(p)\n#define IDirectDrawSurface_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)\n#define IDirectDrawSurface_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)\n#define IDirectDrawSurface_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)\n#define IDirectDrawSurface_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)\n#define IDirectDrawSurface_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)\n#define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)\n#define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)\n#define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)\n#define IDirectDrawSurface_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)\n#define IDirectDrawSurface_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)\n#define IDirectDrawSurface_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)\n#define IDirectDrawSurface_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)\n#define IDirectDrawSurface_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)\n#define IDirectDrawSurface_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)\n#define IDirectDrawSurface_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)\n#define IDirectDrawSurface_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)\n#define IDirectDrawSurface_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)\n#define IDirectDrawSurface_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)\n#define IDirectDrawSurface_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)\n#define IDirectDrawSurface_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)\n#define IDirectDrawSurface_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectDrawSurface_IsLost(p)                    (p)->lpVtbl->IsLost(p)\n#define IDirectDrawSurface_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirectDrawSurface_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)\n#define IDirectDrawSurface_Restore(p)                   (p)->lpVtbl->Restore(p)\n#define IDirectDrawSurface_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)\n#define IDirectDrawSurface_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)\n#define IDirectDrawSurface_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)\n#define IDirectDrawSurface_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)\n#define IDirectDrawSurface_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)\n#define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)\n#define IDirectDrawSurface_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)\n#define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)\n#else\n#define IDirectDrawSurface_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirectDrawSurface_AddRef(p)                    (p)->AddRef()\n#define IDirectDrawSurface_Release(p)                   (p)->Release()\n#define IDirectDrawSurface_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)\n#define IDirectDrawSurface_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)\n#define IDirectDrawSurface_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)\n#define IDirectDrawSurface_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)\n#define IDirectDrawSurface_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)\n#define IDirectDrawSurface_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)\n#define IDirectDrawSurface_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)\n#define IDirectDrawSurface_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)\n#define IDirectDrawSurface_Flip(p,a,b)                  (p)->Flip(a,b)\n#define IDirectDrawSurface_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)\n#define IDirectDrawSurface_GetBltStatus(p,a)            (p)->GetBltStatus(a)\n#define IDirectDrawSurface_GetCaps(p,b)                 (p)->GetCaps(b)\n#define IDirectDrawSurface_GetClipper(p,a)              (p)->GetClipper(a)\n#define IDirectDrawSurface_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)\n#define IDirectDrawSurface_GetDC(p,a)                   (p)->GetDC(a)\n#define IDirectDrawSurface_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)\n#define IDirectDrawSurface_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)\n#define IDirectDrawSurface_GetPalette(p,a)              (p)->GetPalette(a)\n#define IDirectDrawSurface_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)\n#define IDirectDrawSurface_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)\n#define IDirectDrawSurface_Initialize(p,a,b)            (p)->Initialize(a,b)\n#define IDirectDrawSurface_IsLost(p)                    (p)->IsLost()\n#define IDirectDrawSurface_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)\n#define IDirectDrawSurface_ReleaseDC(p,a)               (p)->ReleaseDC(a)\n#define IDirectDrawSurface_Restore(p)                   (p)->Restore()\n#define IDirectDrawSurface_SetClipper(p,a)              (p)->SetClipper(a)\n#define IDirectDrawSurface_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)\n#define IDirectDrawSurface_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)\n#define IDirectDrawSurface_SetPalette(p,a)              (p)->SetPalette(a)\n#define IDirectDrawSurface_Unlock(p,b)                  (p)->Unlock(b)\n#define IDirectDrawSurface_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)\n#define IDirectDrawSurface_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)\n#define IDirectDrawSurface_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)\n#endif\n\n/*\n * IDirectDrawSurface2 and related interfaces\n */\n#undef INTERFACE\n#define INTERFACE IDirectDrawSurface2\nDECLARE_INTERFACE_( IDirectDrawSurface2, IUnknown )\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IDirectDrawSurface methods ***/\n    STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE2) PURE;\n    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;\n    STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX) PURE;\n    STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;\n    STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD) PURE;\n    STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE2) PURE;\n    STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE;\n    STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE;\n    STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE2, DWORD) PURE;\n    STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *) PURE;\n    STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;\n    STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE;\n    STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;\n    STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;\n    STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;\n    STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;\n    STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;\n    STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;\n    STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;\n    STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE;\n    STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE;\n    STDMETHOD(IsLost)(THIS) PURE;\n    STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE;\n    STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;\n    STDMETHOD(Restore)(THIS) PURE;\n    STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;\n    STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;\n    STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;\n    STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;\n    STDMETHOD(Unlock)(THIS_ LPVOID) PURE;\n    STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX) PURE;\n    STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;\n    STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE2) PURE;\n    /*** Added in the v2 interface ***/\n    STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE;\n    STDMETHOD(PageLock)(THIS_ DWORD) PURE;\n    STDMETHOD(PageUnlock)(THIS_ DWORD) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectDrawSurface2_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDrawSurface2_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirectDrawSurface2_Release(p)                   (p)->lpVtbl->Release(p)\n#define IDirectDrawSurface2_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)\n#define IDirectDrawSurface2_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)\n#define IDirectDrawSurface2_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)\n#define IDirectDrawSurface2_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)\n#define IDirectDrawSurface2_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)\n#define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)\n#define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)\n#define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)\n#define IDirectDrawSurface2_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)\n#define IDirectDrawSurface2_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)\n#define IDirectDrawSurface2_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)\n#define IDirectDrawSurface2_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)\n#define IDirectDrawSurface2_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)\n#define IDirectDrawSurface2_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)\n#define IDirectDrawSurface2_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)\n#define IDirectDrawSurface2_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)\n#define IDirectDrawSurface2_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)\n#define IDirectDrawSurface2_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)\n#define IDirectDrawSurface2_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)\n#define IDirectDrawSurface2_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)\n#define IDirectDrawSurface2_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectDrawSurface2_IsLost(p)                    (p)->lpVtbl->IsLost(p)\n#define IDirectDrawSurface2_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirectDrawSurface2_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)\n#define IDirectDrawSurface2_Restore(p)                   (p)->lpVtbl->Restore(p)\n#define IDirectDrawSurface2_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)\n#define IDirectDrawSurface2_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)\n#define IDirectDrawSurface2_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)\n#define IDirectDrawSurface2_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)\n#define IDirectDrawSurface2_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)\n#define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)\n#define IDirectDrawSurface2_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)\n#define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)\n#define IDirectDrawSurface2_GetDDInterface(p,a)          (p)->lpVtbl->GetDDInterface(p,a)\n#define IDirectDrawSurface2_PageLock(p,a)                (p)->lpVtbl->PageLock(p,a)\n#define IDirectDrawSurface2_PageUnlock(p,a)              (p)->lpVtbl->PageUnlock(p,a)\n#else\n#define IDirectDrawSurface2_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirectDrawSurface2_AddRef(p)                    (p)->AddRef()\n#define IDirectDrawSurface2_Release(p)                   (p)->Release()\n#define IDirectDrawSurface2_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)\n#define IDirectDrawSurface2_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)\n#define IDirectDrawSurface2_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)\n#define IDirectDrawSurface2_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)\n#define IDirectDrawSurface2_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)\n#define IDirectDrawSurface2_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)\n#define IDirectDrawSurface2_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)\n#define IDirectDrawSurface2_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)\n#define IDirectDrawSurface2_Flip(p,a,b)                  (p)->Flip(a,b)\n#define IDirectDrawSurface2_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)\n#define IDirectDrawSurface2_GetBltStatus(p,a)            (p)->GetBltStatus(a)\n#define IDirectDrawSurface2_GetCaps(p,b)                 (p)->GetCaps(b)\n#define IDirectDrawSurface2_GetClipper(p,a)              (p)->GetClipper(a)\n#define IDirectDrawSurface2_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)\n#define IDirectDrawSurface2_GetDC(p,a)                   (p)->GetDC(a)\n#define IDirectDrawSurface2_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)\n#define IDirectDrawSurface2_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)\n#define IDirectDrawSurface2_GetPalette(p,a)              (p)->GetPalette(a)\n#define IDirectDrawSurface2_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)\n#define IDirectDrawSurface2_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)\n#define IDirectDrawSurface2_Initialize(p,a,b)            (p)->Initialize(a,b)\n#define IDirectDrawSurface2_IsLost(p)                    (p)->IsLost()\n#define IDirectDrawSurface2_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)\n#define IDirectDrawSurface2_ReleaseDC(p,a)               (p)->ReleaseDC(a)\n#define IDirectDrawSurface2_Restore(p)                   (p)->Restore()\n#define IDirectDrawSurface2_SetClipper(p,a)              (p)->SetClipper(a)\n#define IDirectDrawSurface2_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)\n#define IDirectDrawSurface2_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)\n#define IDirectDrawSurface2_SetPalette(p,a)              (p)->SetPalette(a)\n#define IDirectDrawSurface2_Unlock(p,b)                  (p)->Unlock(b)\n#define IDirectDrawSurface2_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)\n#define IDirectDrawSurface2_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)\n#define IDirectDrawSurface2_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)\n#define IDirectDrawSurface2_GetDDInterface(p,a)          (p)->GetDDInterface(a)\n#define IDirectDrawSurface2_PageLock(p,a)                (p)->PageLock(a)\n#define IDirectDrawSurface2_PageUnlock(p,a)              (p)->PageUnlock(a)\n#endif\n\n/*\n * IDirectDrawSurface3 and related interfaces\n */\n#undef INTERFACE\n#define INTERFACE IDirectDrawSurface3\nDECLARE_INTERFACE_( IDirectDrawSurface3, IUnknown )\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IDirectDrawSurface methods ***/\n    STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE3) PURE;\n    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;\n    STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX) PURE;\n    STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;\n    STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD) PURE;\n    STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE3) PURE;\n    STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE;\n    STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE;\n    STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE3, DWORD) PURE;\n    STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE3 FAR *) PURE;\n    STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;\n    STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE;\n    STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;\n    STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;\n    STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;\n    STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;\n    STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;\n    STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;\n    STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;\n    STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE;\n    STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE;\n    STDMETHOD(IsLost)(THIS) PURE;\n    STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE;\n    STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;\n    STDMETHOD(Restore)(THIS) PURE;\n    STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;\n    STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;\n    STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;\n    STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;\n    STDMETHOD(Unlock)(THIS_ LPVOID) PURE;\n    STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX) PURE;\n    STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;\n    STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE3) PURE;\n    /*** Added in the v2 interface ***/\n    STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE;\n    STDMETHOD(PageLock)(THIS_ DWORD) PURE;\n    STDMETHOD(PageUnlock)(THIS_ DWORD) PURE;\n    /*** Added in the V3 interface ***/\n    STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC, DWORD) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectDrawSurface3_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDrawSurface3_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirectDrawSurface3_Release(p)                   (p)->lpVtbl->Release(p)\n#define IDirectDrawSurface3_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)\n#define IDirectDrawSurface3_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)\n#define IDirectDrawSurface3_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)\n#define IDirectDrawSurface3_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)\n#define IDirectDrawSurface3_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)\n#define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)\n#define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)\n#define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)\n#define IDirectDrawSurface3_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)\n#define IDirectDrawSurface3_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)\n#define IDirectDrawSurface3_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)\n#define IDirectDrawSurface3_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)\n#define IDirectDrawSurface3_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)\n#define IDirectDrawSurface3_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)\n#define IDirectDrawSurface3_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)\n#define IDirectDrawSurface3_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)\n#define IDirectDrawSurface3_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)\n#define IDirectDrawSurface3_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)\n#define IDirectDrawSurface3_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)\n#define IDirectDrawSurface3_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)\n#define IDirectDrawSurface3_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectDrawSurface3_IsLost(p)                    (p)->lpVtbl->IsLost(p)\n#define IDirectDrawSurface3_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirectDrawSurface3_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)\n#define IDirectDrawSurface3_Restore(p)                   (p)->lpVtbl->Restore(p)\n#define IDirectDrawSurface3_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)\n#define IDirectDrawSurface3_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)\n#define IDirectDrawSurface3_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)\n#define IDirectDrawSurface3_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)\n#define IDirectDrawSurface3_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)\n#define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)\n#define IDirectDrawSurface3_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)\n#define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)\n#define IDirectDrawSurface3_GetDDInterface(p,a)          (p)->lpVtbl->GetDDInterface(p,a)\n#define IDirectDrawSurface3_PageLock(p,a)                (p)->lpVtbl->PageLock(p,a)\n#define IDirectDrawSurface3_PageUnlock(p,a)              (p)->lpVtbl->PageUnlock(p,a)\n#define IDirectDrawSurface3_SetSurfaceDesc(p,a,b)        (p)->lpVtbl->SetSurfaceDesc(p,a,b)\n#else\n#define IDirectDrawSurface3_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirectDrawSurface3_AddRef(p)                    (p)->AddRef()\n#define IDirectDrawSurface3_Release(p)                   (p)->Release()\n#define IDirectDrawSurface3_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)\n#define IDirectDrawSurface3_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)\n#define IDirectDrawSurface3_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)\n#define IDirectDrawSurface3_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)\n#define IDirectDrawSurface3_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)\n#define IDirectDrawSurface3_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)\n#define IDirectDrawSurface3_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)\n#define IDirectDrawSurface3_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)\n#define IDirectDrawSurface3_Flip(p,a,b)                  (p)->Flip(a,b)\n#define IDirectDrawSurface3_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)\n#define IDirectDrawSurface3_GetBltStatus(p,a)            (p)->GetBltStatus(a)\n#define IDirectDrawSurface3_GetCaps(p,b)                 (p)->GetCaps(b)\n#define IDirectDrawSurface3_GetClipper(p,a)              (p)->GetClipper(a)\n#define IDirectDrawSurface3_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)\n#define IDirectDrawSurface3_GetDC(p,a)                   (p)->GetDC(a)\n#define IDirectDrawSurface3_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)\n#define IDirectDrawSurface3_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)\n#define IDirectDrawSurface3_GetPalette(p,a)              (p)->GetPalette(a)\n#define IDirectDrawSurface3_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)\n#define IDirectDrawSurface3_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)\n#define IDirectDrawSurface3_Initialize(p,a,b)            (p)->Initialize(a,b)\n#define IDirectDrawSurface3_IsLost(p)                    (p)->IsLost()\n#define IDirectDrawSurface3_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)\n#define IDirectDrawSurface3_ReleaseDC(p,a)               (p)->ReleaseDC(a)\n#define IDirectDrawSurface3_Restore(p)                   (p)->Restore()\n#define IDirectDrawSurface3_SetClipper(p,a)              (p)->SetClipper(a)\n#define IDirectDrawSurface3_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)\n#define IDirectDrawSurface3_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)\n#define IDirectDrawSurface3_SetPalette(p,a)              (p)->SetPalette(a)\n#define IDirectDrawSurface3_Unlock(p,b)                  (p)->Unlock(b)\n#define IDirectDrawSurface3_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)\n#define IDirectDrawSurface3_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)\n#define IDirectDrawSurface3_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)\n#define IDirectDrawSurface3_GetDDInterface(p,a)          (p)->GetDDInterface(a)\n#define IDirectDrawSurface3_PageLock(p,a)                (p)->PageLock(a)\n#define IDirectDrawSurface3_PageUnlock(p,a)              (p)->PageUnlock(a)\n#define IDirectDrawSurface3_SetSurfaceDesc(p,a,b)        (p)->SetSurfaceDesc(a,b)\n#endif\n\n/*\n * IDirectDrawSurface4 and related interfaces\n */\n#undef INTERFACE\n#define INTERFACE IDirectDrawSurface4\nDECLARE_INTERFACE_( IDirectDrawSurface4, IUnknown )\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IDirectDrawSurface methods ***/\n    STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE4) PURE;\n    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;\n    STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX) PURE;\n    STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;\n    STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD) PURE;\n    STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE4) PURE;\n    STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK2) PURE;\n    STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2) PURE;\n    STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE4, DWORD) PURE;\n    STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *) PURE;\n    STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;\n    STDMETHOD(GetCaps)(THIS_ LPDDSCAPS2) PURE;\n    STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;\n    STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;\n    STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;\n    STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;\n    STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;\n    STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;\n    STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;\n    STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC2) PURE;\n    STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC2) PURE;\n    STDMETHOD(IsLost)(THIS) PURE;\n    STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE) PURE;\n    STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;\n    STDMETHOD(Restore)(THIS) PURE;\n    STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;\n    STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;\n    STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;\n    STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;\n    STDMETHOD(Unlock)(THIS_ LPRECT) PURE;\n    STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX) PURE;\n    STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;\n    STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE4) PURE;\n    /*** Added in the v2 interface ***/\n    STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE;\n    STDMETHOD(PageLock)(THIS_ DWORD) PURE;\n    STDMETHOD(PageUnlock)(THIS_ DWORD) PURE;\n    /*** Added in the v3 interface ***/\n    STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC2, DWORD) PURE;\n    /*** Added in the v4 interface ***/\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID, LPVOID, DWORD, DWORD) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID, LPVOID, LPDWORD) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE;\n    STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD) PURE;\n    STDMETHOD(ChangeUniquenessValue)(THIS) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectDrawSurface4_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDrawSurface4_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirectDrawSurface4_Release(p)                   (p)->lpVtbl->Release(p)\n#define IDirectDrawSurface4_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)\n#define IDirectDrawSurface4_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)\n#define IDirectDrawSurface4_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)\n#define IDirectDrawSurface4_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)\n#define IDirectDrawSurface4_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)\n#define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)\n#define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)\n#define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)\n#define IDirectDrawSurface4_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)\n#define IDirectDrawSurface4_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)\n#define IDirectDrawSurface4_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)\n#define IDirectDrawSurface4_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)\n#define IDirectDrawSurface4_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)\n#define IDirectDrawSurface4_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)\n#define IDirectDrawSurface4_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)\n#define IDirectDrawSurface4_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)\n#define IDirectDrawSurface4_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)\n#define IDirectDrawSurface4_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)\n#define IDirectDrawSurface4_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)\n#define IDirectDrawSurface4_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)\n#define IDirectDrawSurface4_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectDrawSurface4_IsLost(p)                    (p)->lpVtbl->IsLost(p)\n#define IDirectDrawSurface4_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirectDrawSurface4_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)\n#define IDirectDrawSurface4_Restore(p)                   (p)->lpVtbl->Restore(p)\n#define IDirectDrawSurface4_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)\n#define IDirectDrawSurface4_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)\n#define IDirectDrawSurface4_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)\n#define IDirectDrawSurface4_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)\n#define IDirectDrawSurface4_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)\n#define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)\n#define IDirectDrawSurface4_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)\n#define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)\n#define IDirectDrawSurface4_GetDDInterface(p,a)          (p)->lpVtbl->GetDDInterface(p,a)\n#define IDirectDrawSurface4_PageLock(p,a)                (p)->lpVtbl->PageLock(p,a)\n#define IDirectDrawSurface4_PageUnlock(p,a)              (p)->lpVtbl->PageUnlock(p,a)\n#define IDirectDrawSurface4_SetSurfaceDesc(p,a,b)        (p)->lpVtbl->SetSurfaceDesc(p,a,b)\n#define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirectDrawSurface4_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirectDrawSurface4_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirectDrawSurface4_GetUniquenessValue(p, a)     (p)->lpVtbl->GetUniquenessValue(p, a)\n#define IDirectDrawSurface4_ChangeUniquenessValue(p)     (p)->lpVtbl->ChangeUniquenessValue(p)\n#else\n#define IDirectDrawSurface4_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirectDrawSurface4_AddRef(p)                    (p)->AddRef()\n#define IDirectDrawSurface4_Release(p)                   (p)->Release()\n#define IDirectDrawSurface4_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)\n#define IDirectDrawSurface4_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)\n#define IDirectDrawSurface4_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)\n#define IDirectDrawSurface4_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)\n#define IDirectDrawSurface4_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)\n#define IDirectDrawSurface4_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)\n#define IDirectDrawSurface4_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)\n#define IDirectDrawSurface4_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)\n#define IDirectDrawSurface4_Flip(p,a,b)                  (p)->Flip(a,b)\n#define IDirectDrawSurface4_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)\n#define IDirectDrawSurface4_GetBltStatus(p,a)            (p)->GetBltStatus(a)\n#define IDirectDrawSurface4_GetCaps(p,b)                 (p)->GetCaps(b)\n#define IDirectDrawSurface4_GetClipper(p,a)              (p)->GetClipper(a)\n#define IDirectDrawSurface4_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)\n#define IDirectDrawSurface4_GetDC(p,a)                   (p)->GetDC(a)\n#define IDirectDrawSurface4_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)\n#define IDirectDrawSurface4_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)\n#define IDirectDrawSurface4_GetPalette(p,a)              (p)->GetPalette(a)\n#define IDirectDrawSurface4_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)\n#define IDirectDrawSurface4_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)\n#define IDirectDrawSurface4_Initialize(p,a,b)            (p)->Initialize(a,b)\n#define IDirectDrawSurface4_IsLost(p)                    (p)->IsLost()\n#define IDirectDrawSurface4_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)\n#define IDirectDrawSurface4_ReleaseDC(p,a)               (p)->ReleaseDC(a)\n#define IDirectDrawSurface4_Restore(p)                   (p)->Restore()\n#define IDirectDrawSurface4_SetClipper(p,a)              (p)->SetClipper(a)\n#define IDirectDrawSurface4_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)\n#define IDirectDrawSurface4_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)\n#define IDirectDrawSurface4_SetPalette(p,a)              (p)->SetPalette(a)\n#define IDirectDrawSurface4_Unlock(p,b)                  (p)->Unlock(b)\n#define IDirectDrawSurface4_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)\n#define IDirectDrawSurface4_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)\n#define IDirectDrawSurface4_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)\n#define IDirectDrawSurface4_GetDDInterface(p,a)          (p)->GetDDInterface(a)\n#define IDirectDrawSurface4_PageLock(p,a)                (p)->PageLock(a)\n#define IDirectDrawSurface4_PageUnlock(p,a)              (p)->PageUnlock(a)\n#define IDirectDrawSurface4_SetSurfaceDesc(p,a,b)        (p)->SetSurfaceDesc(a,b)\n#define IDirectDrawSurface4_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirectDrawSurface4_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirectDrawSurface4_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirectDrawSurface4_GetUniquenessValue(p, a)     (p)->GetUniquenessValue(a)\n#define IDirectDrawSurface4_ChangeUniquenessValue(p)     (p)->ChangeUniquenessValue()\n#endif\n\n/*\n * IDirectDrawSurface7 and related interfaces\n */\n#undef INTERFACE\n#define INTERFACE IDirectDrawSurface7\nDECLARE_INTERFACE_( IDirectDrawSurface7, IUnknown )\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IDirectDrawSurface methods ***/\n    STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE7) PURE;\n    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;\n    STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE7, LPRECT,DWORD, LPDDBLTFX) PURE;\n    STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;\n    STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE7, LPRECT,DWORD) PURE;\n    STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE7) PURE;\n    STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK7) PURE;\n    STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK7) PURE;\n    STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE7, DWORD) PURE;\n    STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS2, LPDIRECTDRAWSURFACE7 FAR *) PURE;\n    STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;\n    STDMETHOD(GetCaps)(THIS_ LPDDSCAPS2) PURE;\n    STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;\n    STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;\n    STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;\n    STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;\n    STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;\n    STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;\n    STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;\n    STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC2) PURE;\n    STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC2) PURE;\n    STDMETHOD(IsLost)(THIS) PURE;\n    STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE) PURE;\n    STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;\n    STDMETHOD(Restore)(THIS) PURE;\n    STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;\n    STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;\n    STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;\n    STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;\n    STDMETHOD(Unlock)(THIS_ LPRECT) PURE;\n    STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE7,LPRECT,DWORD, LPDDOVERLAYFX) PURE;\n    STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;\n    STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE7) PURE;\n    /*** Added in the v2 interface ***/\n    STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE;\n    STDMETHOD(PageLock)(THIS_ DWORD) PURE;\n    STDMETHOD(PageUnlock)(THIS_ DWORD) PURE;\n    /*** Added in the v3 interface ***/\n    STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC2, DWORD) PURE;\n    /*** Added in the v4 interface ***/\n    STDMETHOD(SetPrivateData)(THIS_ REFGUID, LPVOID, DWORD, DWORD) PURE;\n    STDMETHOD(GetPrivateData)(THIS_ REFGUID, LPVOID, LPDWORD) PURE;\n    STDMETHOD(FreePrivateData)(THIS_ REFGUID) PURE;\n    STDMETHOD(GetUniquenessValue)(THIS_ LPDWORD) PURE;\n    STDMETHOD(ChangeUniquenessValue)(THIS) PURE;\n    /*** Moved Texture7 methods here ***/\n    STDMETHOD(SetPriority)(THIS_ DWORD) PURE;\n    STDMETHOD(GetPriority)(THIS_ LPDWORD) PURE;\n    STDMETHOD(SetLOD)(THIS_ DWORD) PURE;\n    STDMETHOD(GetLOD)(THIS_ LPDWORD) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectDrawSurface7_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectDrawSurface7_AddRef(p)                    (p)->lpVtbl->AddRef(p)\n#define IDirectDrawSurface7_Release(p)                   (p)->lpVtbl->Release(p)\n#define IDirectDrawSurface7_AddAttachedSurface(p,a)      (p)->lpVtbl->AddAttachedSurface(p,a)\n#define IDirectDrawSurface7_AddOverlayDirtyRect(p,a)     (p)->lpVtbl->AddOverlayDirtyRect(p,a)\n#define IDirectDrawSurface7_Blt(p,a,b,c,d,e)             (p)->lpVtbl->Blt(p,a,b,c,d,e)\n#define IDirectDrawSurface7_BltBatch(p,a,b,c)            (p)->lpVtbl->BltBatch(p,a,b,c)\n#define IDirectDrawSurface7_BltFast(p,a,b,c,d,e)         (p)->lpVtbl->BltFast(p,a,b,c,d,e)\n#define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->lpVtbl->DeleteAttachedSurface(p,a,b)\n#define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b)  (p)->lpVtbl->EnumAttachedSurfaces(p,a,b)\n#define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c)  (p)->lpVtbl->EnumOverlayZOrders(p,a,b,c)\n#define IDirectDrawSurface7_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)\n#define IDirectDrawSurface7_GetAttachedSurface(p,a,b)    (p)->lpVtbl->GetAttachedSurface(p,a,b)\n#define IDirectDrawSurface7_GetBltStatus(p,a)            (p)->lpVtbl->GetBltStatus(p,a)\n#define IDirectDrawSurface7_GetCaps(p,b)                 (p)->lpVtbl->GetCaps(p,b)\n#define IDirectDrawSurface7_GetClipper(p,a)              (p)->lpVtbl->GetClipper(p,a)\n#define IDirectDrawSurface7_GetColorKey(p,a,b)           (p)->lpVtbl->GetColorKey(p,a,b)\n#define IDirectDrawSurface7_GetDC(p,a)                   (p)->lpVtbl->GetDC(p,a)\n#define IDirectDrawSurface7_GetFlipStatus(p,a)           (p)->lpVtbl->GetFlipStatus(p,a)\n#define IDirectDrawSurface7_GetOverlayPosition(p,a,b)    (p)->lpVtbl->GetOverlayPosition(p,a,b)\n#define IDirectDrawSurface7_GetPalette(p,a)              (p)->lpVtbl->GetPalette(p,a)\n#define IDirectDrawSurface7_GetPixelFormat(p,a)          (p)->lpVtbl->GetPixelFormat(p,a)\n#define IDirectDrawSurface7_GetSurfaceDesc(p,a)          (p)->lpVtbl->GetSurfaceDesc(p,a)\n#define IDirectDrawSurface7_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectDrawSurface7_IsLost(p)                    (p)->lpVtbl->IsLost(p)\n#define IDirectDrawSurface7_Lock(p,a,b,c,d)              (p)->lpVtbl->Lock(p,a,b,c,d)\n#define IDirectDrawSurface7_ReleaseDC(p,a)               (p)->lpVtbl->ReleaseDC(p,a)\n#define IDirectDrawSurface7_Restore(p)                   (p)->lpVtbl->Restore(p)\n#define IDirectDrawSurface7_SetClipper(p,a)              (p)->lpVtbl->SetClipper(p,a)\n#define IDirectDrawSurface7_SetColorKey(p,a,b)           (p)->lpVtbl->SetColorKey(p,a,b)\n#define IDirectDrawSurface7_SetOverlayPosition(p,a,b)    (p)->lpVtbl->SetOverlayPosition(p,a,b)\n#define IDirectDrawSurface7_SetPalette(p,a)              (p)->lpVtbl->SetPalette(p,a)\n#define IDirectDrawSurface7_Unlock(p,b)                  (p)->lpVtbl->Unlock(p,b)\n#define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e)   (p)->lpVtbl->UpdateOverlay(p,a,b,c,d,e)\n#define IDirectDrawSurface7_UpdateOverlayDisplay(p,a)    (p)->lpVtbl->UpdateOverlayDisplay(p,a)\n#define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b)   (p)->lpVtbl->UpdateOverlayZOrder(p,a,b)\n#define IDirectDrawSurface7_GetDDInterface(p,a)          (p)->lpVtbl->GetDDInterface(p,a)\n#define IDirectDrawSurface7_PageLock(p,a)                (p)->lpVtbl->PageLock(p,a)\n#define IDirectDrawSurface7_PageUnlock(p,a)              (p)->lpVtbl->PageUnlock(p,a)\n#define IDirectDrawSurface7_SetSurfaceDesc(p,a,b)        (p)->lpVtbl->SetSurfaceDesc(p,a,b)\n#define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d)    (p)->lpVtbl->SetPrivateData(p,a,b,c,d)\n#define IDirectDrawSurface7_GetPrivateData(p,a,b,c)      (p)->lpVtbl->GetPrivateData(p,a,b,c)\n#define IDirectDrawSurface7_FreePrivateData(p,a)         (p)->lpVtbl->FreePrivateData(p,a)\n#define IDirectDrawSurface7_GetUniquenessValue(p, a)     (p)->lpVtbl->GetUniquenessValue(p, a)\n#define IDirectDrawSurface7_ChangeUniquenessValue(p)     (p)->lpVtbl->ChangeUniquenessValue(p)\n#define IDirectDrawSurface7_SetPriority(p,a)             (p)->lpVtbl->SetPriority(p,a)\n#define IDirectDrawSurface7_GetPriority(p,a)             (p)->lpVtbl->GetPriority(p,a)\n#define IDirectDrawSurface7_SetLOD(p,a)                  (p)->lpVtbl->SetLOD(p,a)\n#define IDirectDrawSurface7_GetLOD(p,a)                  (p)->lpVtbl->GetLOD(p,a)\n#else\n#define IDirectDrawSurface7_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)\n#define IDirectDrawSurface7_AddRef(p)                    (p)->AddRef()\n#define IDirectDrawSurface7_Release(p)                   (p)->Release()\n#define IDirectDrawSurface7_AddAttachedSurface(p,a)      (p)->AddAttachedSurface(a)\n#define IDirectDrawSurface7_AddOverlayDirtyRect(p,a)     (p)->AddOverlayDirtyRect(a)\n#define IDirectDrawSurface7_Blt(p,a,b,c,d,e)             (p)->Blt(a,b,c,d,e)\n#define IDirectDrawSurface7_BltBatch(p,a,b,c)            (p)->BltBatch(a,b,c)\n#define IDirectDrawSurface7_BltFast(p,a,b,c,d,e)         (p)->BltFast(a,b,c,d,e)\n#define IDirectDrawSurface7_DeleteAttachedSurface(p,a,b) (p)->DeleteAttachedSurface(a,b)\n#define IDirectDrawSurface7_EnumAttachedSurfaces(p,a,b)  (p)->EnumAttachedSurfaces(a,b)\n#define IDirectDrawSurface7_EnumOverlayZOrders(p,a,b,c)  (p)->EnumOverlayZOrders(a,b,c)\n#define IDirectDrawSurface7_Flip(p,a,b)                  (p)->Flip(a,b)\n#define IDirectDrawSurface7_GetAttachedSurface(p,a,b)    (p)->GetAttachedSurface(a,b)\n#define IDirectDrawSurface7_GetBltStatus(p,a)            (p)->GetBltStatus(a)\n#define IDirectDrawSurface7_GetCaps(p,b)                 (p)->GetCaps(b)\n#define IDirectDrawSurface7_GetClipper(p,a)              (p)->GetClipper(a)\n#define IDirectDrawSurface7_GetColorKey(p,a,b)           (p)->GetColorKey(a,b)\n#define IDirectDrawSurface7_GetDC(p,a)                   (p)->GetDC(a)\n#define IDirectDrawSurface7_GetFlipStatus(p,a)           (p)->GetFlipStatus(a)\n#define IDirectDrawSurface7_GetOverlayPosition(p,a,b)    (p)->GetOverlayPosition(a,b)\n#define IDirectDrawSurface7_GetPalette(p,a)              (p)->GetPalette(a)\n#define IDirectDrawSurface7_GetPixelFormat(p,a)          (p)->GetPixelFormat(a)\n#define IDirectDrawSurface7_GetSurfaceDesc(p,a)          (p)->GetSurfaceDesc(a)\n#define IDirectDrawSurface7_Initialize(p,a,b)            (p)->Initialize(a,b)\n#define IDirectDrawSurface7_IsLost(p)                    (p)->IsLost()\n#define IDirectDrawSurface7_Lock(p,a,b,c,d)              (p)->Lock(a,b,c,d)\n#define IDirectDrawSurface7_ReleaseDC(p,a)               (p)->ReleaseDC(a)\n#define IDirectDrawSurface7_Restore(p)                   (p)->Restore()\n#define IDirectDrawSurface7_SetClipper(p,a)              (p)->SetClipper(a)\n#define IDirectDrawSurface7_SetColorKey(p,a,b)           (p)->SetColorKey(a,b)\n#define IDirectDrawSurface7_SetOverlayPosition(p,a,b)    (p)->SetOverlayPosition(a,b)\n#define IDirectDrawSurface7_SetPalette(p,a)              (p)->SetPalette(a)\n#define IDirectDrawSurface7_Unlock(p,b)                  (p)->Unlock(b)\n#define IDirectDrawSurface7_UpdateOverlay(p,a,b,c,d,e)   (p)->UpdateOverlay(a,b,c,d,e)\n#define IDirectDrawSurface7_UpdateOverlayDisplay(p,a)    (p)->UpdateOverlayDisplay(a)\n#define IDirectDrawSurface7_UpdateOverlayZOrder(p,a,b)   (p)->UpdateOverlayZOrder(a,b)\n#define IDirectDrawSurface7_GetDDInterface(p,a)          (p)->GetDDInterface(a)\n#define IDirectDrawSurface7_PageLock(p,a)                (p)->PageLock(a)\n#define IDirectDrawSurface7_PageUnlock(p,a)              (p)->PageUnlock(a)\n#define IDirectDrawSurface7_SetSurfaceDesc(p,a,b)        (p)->SetSurfaceDesc(a,b)\n#define IDirectDrawSurface7_SetPrivateData(p,a,b,c,d)    (p)->SetPrivateData(a,b,c,d)\n#define IDirectDrawSurface7_GetPrivateData(p,a,b,c)      (p)->GetPrivateData(a,b,c)\n#define IDirectDrawSurface7_FreePrivateData(p,a)         (p)->FreePrivateData(a)\n#define IDirectDrawSurface7_GetUniquenessValue(p, a)     (p)->GetUniquenessValue(a)\n#define IDirectDrawSurface7_ChangeUniquenessValue(p)     (p)->ChangeUniquenessValue()\n#define IDirectDrawSurface7_SetPriority(p,a)             (p)->SetPriority(a)\n#define IDirectDrawSurface7_GetPriority(p,a)             (p)->GetPriority(a)\n#define IDirectDrawSurface7_SetLOD(p,a)                  (p)->SetLOD(a)\n#define IDirectDrawSurface7_GetLOD(p,a)                  (p)->GetLOD(a)\n#endif\n\n\n/*\n * IDirectDrawColorControl\n */\n#if defined( _WIN32 ) && !defined( _NO_COM )\n#undef INTERFACE\n#define INTERFACE IDirectDrawColorControl\nDECLARE_INTERFACE_( IDirectDrawColorControl, IUnknown )\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IDirectDrawColorControl methods ***/\n    STDMETHOD(GetColorControls)(THIS_ LPDDCOLORCONTROL) PURE;\n    STDMETHOD(SetColorControls)(THIS_ LPDDCOLORCONTROL) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectDrawColorControl_QueryInterface(p, a, b)  (p)->lpVtbl->QueryInterface(p, a, b)\n#define IDirectDrawColorControl_AddRef(p)                (p)->lpVtbl->AddRef(p)\n#define IDirectDrawColorControl_Release(p)               (p)->lpVtbl->Release(p)\n#define IDirectDrawColorControl_GetColorControls(p, a)   (p)->lpVtbl->GetColorControls(p, a)\n#define IDirectDrawColorControl_SetColorControls(p, a)   (p)->lpVtbl->SetColorControls(p, a)\n#else\n#define IDirectDrawColorControl_QueryInterface(p, a, b)  (p)->QueryInterface(a, b)\n#define IDirectDrawColorControl_AddRef(p)                (p)->AddRef()\n#define IDirectDrawColorControl_Release(p)               (p)->Release()\n#define IDirectDrawColorControl_GetColorControls(p, a)   (p)->GetColorControls(a)\n#define IDirectDrawColorControl_SetColorControls(p, a)   (p)->SetColorControls(a)\n#endif\n\n#endif\n\n\n/*\n * IDirectDrawGammaControl\n */\n#if defined( _WIN32 ) && !defined( _NO_COM )\n#undef INTERFACE\n#define INTERFACE IDirectDrawGammaControl\nDECLARE_INTERFACE_( IDirectDrawGammaControl, IUnknown )\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IDirectDrawGammaControl methods ***/\n    STDMETHOD(GetGammaRamp)(THIS_ DWORD, LPDDGAMMARAMP) PURE;\n    STDMETHOD(SetGammaRamp)(THIS_ DWORD, LPDDGAMMARAMP) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectDrawGammaControl_QueryInterface(p, a, b)  (p)->lpVtbl->QueryInterface(p, a, b)\n#define IDirectDrawGammaControl_AddRef(p)                (p)->lpVtbl->AddRef(p)\n#define IDirectDrawGammaControl_Release(p)               (p)->lpVtbl->Release(p)\n#define IDirectDrawGammaControl_GetGammaRamp(p, a, b)    (p)->lpVtbl->GetGammaRamp(p, a, b)\n#define IDirectDrawGammaControl_SetGammaRamp(p, a, b)    (p)->lpVtbl->SetGammaRamp(p, a, b)\n#else\n#define IDirectDrawGammaControl_QueryInterface(p, a, b)  (p)->QueryInterface(a, b)\n#define IDirectDrawGammaControl_AddRef(p)                (p)->AddRef()\n#define IDirectDrawGammaControl_Release(p)               (p)->Release()\n#define IDirectDrawGammaControl_GetGammaRamp(p, a, b)    (p)->GetGammaRamp(a, b)\n#define IDirectDrawGammaControl_SetGammaRamp(p, a, b)    (p)->SetGammaRamp(a, b)\n#endif\n\n#endif\n\n\n\n#endif\n\n\n/*\n * DDSURFACEDESC\n */\ntypedef struct _DDSURFACEDESC\n{\n    DWORD               dwSize;                 // size of the DDSURFACEDESC structure\n    DWORD               dwFlags;                // determines what fields are valid\n    DWORD               dwHeight;               // height of surface to be created\n    DWORD               dwWidth;                // width of input surface\n    union\n    {\n        LONG            lPitch;                 // distance to start of next line (return value only)\n        DWORD           dwLinearSize;           // Formless late-allocated optimized surface size\n    } DUMMYUNIONNAMEN(1);\n    DWORD               dwBackBufferCount;      // number of back buffers requested\n    union\n    {\n        DWORD           dwMipMapCount;          // number of mip-map levels requested\n        DWORD           dwZBufferBitDepth;      // depth of Z buffer requested\n        DWORD           dwRefreshRate;          // refresh rate (used when display mode is described)\n    } DUMMYUNIONNAMEN(2);\n    DWORD               dwAlphaBitDepth;        // depth of alpha buffer requested\n    DWORD               dwReserved;             // reserved\n    LPVOID              lpSurface;              // pointer to the associated surface memory\n    DDCOLORKEY          ddckCKDestOverlay;      // color key for destination overlay use\n    DDCOLORKEY          ddckCKDestBlt;          // color key for destination blt use\n    DDCOLORKEY          ddckCKSrcOverlay;       // color key for source overlay use\n    DDCOLORKEY          ddckCKSrcBlt;           // color key for source blt use\n    DDPIXELFORMAT       ddpfPixelFormat;        // pixel format description of the surface\n    DDSCAPS             ddsCaps;                // direct draw surface capabilities\n} DDSURFACEDESC;\n\n/*\n * DDSURFACEDESC2\n */\ntypedef struct _DDSURFACEDESC2\n{\n    DWORD               dwSize;                 // size of the DDSURFACEDESC structure\n    DWORD               dwFlags;                // determines what fields are valid\n    DWORD               dwHeight;               // height of surface to be created\n    DWORD               dwWidth;                // width of input surface\n    union\n    {\n        LONG            lPitch;                 // distance to start of next line (return value only)\n        DWORD           dwLinearSize;           // Formless late-allocated optimized surface size\n    } DUMMYUNIONNAMEN(1);\n    union\n    {\n        DWORD           dwBackBufferCount;      // number of back buffers requested\n        DWORD           dwDepth;                // the depth if this is a volume texture \n    } DUMMYUNIONNAMEN(5);\n    union\n    {\n        DWORD           dwMipMapCount;          // number of mip-map levels requestde\n                                                // dwZBufferBitDepth removed, use ddpfPixelFormat one instead\n        DWORD           dwRefreshRate;          // refresh rate (used when display mode is described)\n        DWORD           dwSrcVBHandle;          // The source used in VB::Optimize\n    } DUMMYUNIONNAMEN(2);\n    DWORD               dwAlphaBitDepth;        // depth of alpha buffer requested\n    DWORD               dwReserved;             // reserved\n    LPVOID              lpSurface;              // pointer to the associated surface memory\n    union\n    {\n        DDCOLORKEY      ddckCKDestOverlay;      // color key for destination overlay use\n        DWORD           dwEmptyFaceColor;       // Physical color for empty cubemap faces\n    } DUMMYUNIONNAMEN(3);\n    DDCOLORKEY          ddckCKDestBlt;          // color key for destination blt use\n    DDCOLORKEY          ddckCKSrcOverlay;       // color key for source overlay use\n    DDCOLORKEY          ddckCKSrcBlt;           // color key for source blt use\n    union\n    {\n        DDPIXELFORMAT   ddpfPixelFormat;        // pixel format description of the surface\n        DWORD           dwFVF;                  // vertex format description of vertex buffers\n    } DUMMYUNIONNAMEN(4);\n    DDSCAPS2            ddsCaps;                // direct draw surface capabilities\n    DWORD               dwTextureStage;         // stage in multitexture cascade\n} DDSURFACEDESC2;\n\n/*\n * ddsCaps field is valid.\n */\n#define DDSD_CAPS               0x00000001l     // default\n\n/*\n * dwHeight field is valid.\n */\n#define DDSD_HEIGHT             0x00000002l\n\n/*\n * dwWidth field is valid.\n */\n#define DDSD_WIDTH              0x00000004l\n\n/*\n * lPitch is valid.\n */\n#define DDSD_PITCH              0x00000008l\n\n/*\n * dwBackBufferCount is valid.\n */\n#define DDSD_BACKBUFFERCOUNT    0x00000020l\n\n/*\n * dwZBufferBitDepth is valid.  (shouldnt be used in DDSURFACEDESC2)\n */\n#define DDSD_ZBUFFERBITDEPTH    0x00000040l\n\n/*\n * dwAlphaBitDepth is valid.\n */\n#define DDSD_ALPHABITDEPTH      0x00000080l\n\n\n/*\n * lpSurface is valid.\n */\n#define DDSD_LPSURFACE          0x00000800l\n\n/*\n * ddpfPixelFormat is valid.\n */\n#define DDSD_PIXELFORMAT        0x00001000l\n\n/*\n * ddckCKDestOverlay is valid.\n */\n#define DDSD_CKDESTOVERLAY      0x00002000l\n\n/*\n * ddckCKDestBlt is valid.\n */\n#define DDSD_CKDESTBLT          0x00004000l\n\n/*\n * ddckCKSrcOverlay is valid.\n */\n#define DDSD_CKSRCOVERLAY       0x00008000l\n\n/*\n * ddckCKSrcBlt is valid.\n */\n#define DDSD_CKSRCBLT           0x00010000l\n\n/*\n * dwMipMapCount is valid.\n */\n#define DDSD_MIPMAPCOUNT        0x00020000l\n\n /*\n  * dwRefreshRate is valid\n  */\n#define DDSD_REFRESHRATE        0x00040000l\n\n/*\n * dwLinearSize is valid\n */\n#define DDSD_LINEARSIZE         0x00080000l\n\n/*\n * dwTextureStage is valid\n */\n#define DDSD_TEXTURESTAGE       0x00100000l\n/*\n * dwFVF is valid\n */\n#define DDSD_FVF                0x00200000l\n/*\n * dwSrcVBHandle is valid\n */\n#define DDSD_SRCVBHANDLE        0x00400000l\n\n/*\n * dwDepth is valid\n */\n#define DDSD_DEPTH              0x00800000l\n\n/*\n * All input fields are valid.\n */\n#define DDSD_ALL                0x00fff9eel\n\n/*\n * DDOPTSURFACEDESC\n */\ntypedef struct _DDOPTSURFACEDESC\n{\n    DWORD       dwSize;             // size of the DDOPTSURFACEDESC structure\n    DWORD       dwFlags;            // determines what fields are valid\n    DDSCAPS2    ddSCaps;            // Common caps like: Memory type\n    DDOSCAPS    ddOSCaps;           // Common caps like: Memory type\n    GUID        guid;               // Compression technique GUID\n    DWORD       dwCompressionRatio; // Compression ratio\n} DDOPTSURFACEDESC;\n\n/*\n * guid field is valid.\n */\n#define DDOSD_GUID                  0x00000001l\n\n/*\n * dwCompressionRatio field is valid.\n */\n#define DDOSD_COMPRESSION_RATIO     0x00000002l\n\n/*\n * ddSCaps field is valid.\n */\n#define DDOSD_SCAPS                 0x00000004l\n\n/*\n * ddOSCaps field is valid.\n */\n#define DDOSD_OSCAPS                0x00000008l\n\n/*\n * All input fields are valid.\n */\n#define DDOSD_ALL                   0x0000000fl\n\n/*\n * The surface's optimized pixelformat is compressed\n */\n#define DDSDCAPS_PRIMARYSURFACE                 0x00000001l\n\n/*\n * The surface's optimized pixelformat is reordered\n */\n#define DDOSDCAPS_OPTREORDERED                  0x00000002l\n\n/*\n * The opt surface is a monolithic mipmap\n */\n#define DDOSDCAPS_MONOLITHICMIPMAP              0x00000004l\n\n/*\n * The valid Surf caps:\n * #define DDSCAPS_SYSTEMMEMORY                 0x00000800l\n * #define DDSCAPS_VIDEOMEMORY          0x00004000l\n * #define DDSCAPS_LOCALVIDMEM          0x10000000l\n * #define DDSCAPS_NONLOCALVIDMEM       0x20000000l\n */\n#define DDOSDCAPS_VALIDSCAPS            0x30004800l\n\n/*\n * The valid OptSurf caps\n */\n#define DDOSDCAPS_VALIDOSCAPS           0x00000007l\n\n\n/*\n * DDCOLORCONTROL\n */\ntypedef struct _DDCOLORCONTROL\n{\n    DWORD               dwSize;\n    DWORD               dwFlags;\n    LONG                lBrightness;\n    LONG                lContrast;\n    LONG                lHue;\n    LONG                lSaturation;\n    LONG                lSharpness;\n    LONG                lGamma;\n    LONG                lColorEnable;\n    DWORD               dwReserved1;\n} DDCOLORCONTROL;\n\n\n/*\n * lBrightness field is valid.\n */\n#define DDCOLOR_BRIGHTNESS              0x00000001l\n\n/*\n * lContrast field is valid.\n */\n#define DDCOLOR_CONTRAST                0x00000002l\n\n/*\n * lHue field is valid.\n */\n#define DDCOLOR_HUE                     0x00000004l\n\n/*\n * lSaturation field is valid.\n */\n#define DDCOLOR_SATURATION              0x00000008l\n\n/*\n * lSharpness field is valid.\n */\n#define DDCOLOR_SHARPNESS               0x00000010l\n\n/*\n * lGamma field is valid.\n */\n#define DDCOLOR_GAMMA                   0x00000020l\n\n/*\n * lColorEnable field is valid.\n */\n#define DDCOLOR_COLORENABLE             0x00000040l\n\n\n\n/*============================================================================\n *\n * Direct Draw Capability Flags\n *\n * These flags are used to describe the capabilities of a given Surface.\n * All flags are bit flags.\n *\n *==========================================================================*/\n\n/****************************************************************************\n *\n * DIRECTDRAWSURFACE CAPABILITY FLAGS\n *\n ****************************************************************************/\n\n/*\n * This bit is reserved. It should not be specified.\n */\n#define DDSCAPS_RESERVED1                       0x00000001l\n\n/*\n * Indicates that this surface contains alpha-only information.\n * (To determine if a surface is RGBA/YUVA, the pixel format must be\n * interrogated.)\n */\n#define DDSCAPS_ALPHA                           0x00000002l\n\n/*\n * Indicates that this surface is a backbuffer.  It is generally\n * set by CreateSurface when the DDSCAPS_FLIP capability bit is set.\n * It indicates that this surface is THE back buffer of a surface\n * flipping structure.  DirectDraw supports N surfaces in a\n * surface flipping structure.  Only the surface that immediately\n * precedeces the DDSCAPS_FRONTBUFFER has this capability bit set.\n * The other surfaces are identified as back buffers by the presence\n * of the DDSCAPS_FLIP capability, their attachment order, and the\n * absence of the DDSCAPS_FRONTBUFFER and DDSCAPS_BACKBUFFER\n * capabilities.  The bit is sent to CreateSurface when a standalone\n * back buffer is being created.  This surface could be attached to\n * a front buffer and/or back buffers to form a flipping surface\n * structure after the CreateSurface call.  See AddAttachments for\n * a detailed description of the behaviors in this case.\n */\n#define DDSCAPS_BACKBUFFER                      0x00000004l\n\n/*\n * Indicates a complex surface structure is being described.  A\n * complex surface structure results in the creation of more than\n * one surface.  The additional surfaces are attached to the root\n * surface.  The complex structure can only be destroyed by\n * destroying the root.\n */\n#define DDSCAPS_COMPLEX                         0x00000008l\n\n/*\n * Indicates that this surface is a part of a surface flipping structure.\n * When it is passed to CreateSurface the DDSCAPS_FRONTBUFFER and\n * DDSCAP_BACKBUFFER bits are not set.  They are set by CreateSurface\n * on the resulting creations.  The dwBackBufferCount field in the\n * DDSURFACEDESC structure must be set to at least 1 in order for\n * the CreateSurface call to succeed.  The DDSCAPS_COMPLEX capability\n * must always be set with creating multiple surfaces through CreateSurface.\n */\n#define DDSCAPS_FLIP                            0x00000010l\n\n/*\n * Indicates that this surface is THE front buffer of a surface flipping\n * structure.  It is generally set by CreateSurface when the DDSCAPS_FLIP\n * capability bit is set.\n * If this capability is sent to CreateSurface then a standalonw front buffer\n * is created.  This surface will not have the DDSCAPS_FLIP capability.\n * It can be attached to other back buffers to form a flipping structure.\n * See AddAttachments for a detailed description of the behaviors in this\n * case.\n */\n#define DDSCAPS_FRONTBUFFER                     0x00000020l\n\n/*\n * Indicates that this surface is any offscreen surface that is not an overlay,\n * texture, zbuffer, front buffer, back buffer, or alpha surface.  It is used\n * to identify plain vanilla surfaces.\n */\n#define DDSCAPS_OFFSCREENPLAIN                  0x00000040l\n\n/*\n * Indicates that this surface is an overlay.  It may or may not be directly visible\n * depending on whether or not it is currently being overlayed onto the primary\n * surface.  DDSCAPS_VISIBLE can be used to determine whether or not it is being\n * overlayed at the moment.\n */\n#define DDSCAPS_OVERLAY                         0x00000080l\n\n/*\n * Indicates that unique DirectDrawPalette objects can be created and\n * attached to this surface.\n */\n#define DDSCAPS_PALETTE                         0x00000100l\n\n/*\n * Indicates that this surface is the primary surface.  The primary\n * surface represents what the user is seeing at the moment.\n */\n#define DDSCAPS_PRIMARYSURFACE                  0x00000200l\n\n\n/*\n * This flag used to be DDSCAPS_PRIMARYSURFACELEFT, which is now\n * obsolete.\n */\n#define DDSCAPS_RESERVED3               0x00000400l\n#define DDSCAPS_PRIMARYSURFACELEFT              0x00000000l\n\n/*\n * Indicates that this surface memory was allocated in system memory\n */\n#define DDSCAPS_SYSTEMMEMORY                    0x00000800l\n\n/*\n * Indicates that this surface can be used as a 3D texture.  It does not\n * indicate whether or not the surface is being used for that purpose.\n */\n#define DDSCAPS_TEXTURE                         0x00001000l\n\n/*\n * Indicates that a surface may be a destination for 3D rendering.  This\n * bit must be set in order to query for a Direct3D Device Interface\n * from this surface.\n */\n#define DDSCAPS_3DDEVICE                        0x00002000l\n\n/*\n * Indicates that this surface exists in video memory.\n */\n#define DDSCAPS_VIDEOMEMORY                     0x00004000l\n\n/*\n * Indicates that changes made to this surface are immediately visible.\n * It is always set for the primary surface and is set for overlays while\n * they are being overlayed and texture maps while they are being textured.\n */\n#define DDSCAPS_VISIBLE                         0x00008000l\n\n/*\n * Indicates that only writes are permitted to the surface.  Read accesses\n * from the surface may or may not generate a protection fault, but the\n * results of a read from this surface will not be meaningful.  READ ONLY.\n */\n#define DDSCAPS_WRITEONLY                       0x00010000l\n\n/*\n * Indicates that this surface is a z buffer. A z buffer does not contain\n * displayable information.  Instead it contains bit depth information that is\n * used to determine which pixels are visible and which are obscured.\n */\n#define DDSCAPS_ZBUFFER                         0x00020000l\n\n/*\n * Indicates surface will have a DC associated long term\n */\n#define DDSCAPS_OWNDC                           0x00040000l\n\n/*\n * Indicates surface should be able to receive live video\n */\n#define DDSCAPS_LIVEVIDEO                       0x00080000l\n\n/*\n * Indicates surface should be able to have a stream decompressed\n * to it by the hardware.\n */\n#define DDSCAPS_HWCODEC                         0x00100000l\n\n/*\n * Surface is a ModeX surface.\n *\n */\n#define DDSCAPS_MODEX                           0x00200000l\n\n/*\n * Indicates surface is one level of a mip-map. This surface will\n * be attached to other DDSCAPS_MIPMAP surfaces to form the mip-map.\n * This can be done explicitly, by creating a number of surfaces and\n * attaching them with AddAttachedSurface or by implicitly by CreateSurface.\n * If this bit is set then DDSCAPS_TEXTURE must also be set.\n */\n#define DDSCAPS_MIPMAP                          0x00400000l\n\n/*\n * This bit is reserved. It should not be specified.\n */\n#define DDSCAPS_RESERVED2                       0x00800000l\n\n\n/*\n * Indicates that memory for the surface is not allocated until the surface\n * is loaded (via the Direct3D texture Load() function).\n */\n#define DDSCAPS_ALLOCONLOAD                     0x04000000l\n\n/*\n * Indicates that the surface will recieve data from a video port.\n */\n#define DDSCAPS_VIDEOPORT                       0x08000000l\n\n/*\n * Indicates that a video memory surface is resident in true, local video\n * memory rather than non-local video memory. If this flag is specified then\n * so must DDSCAPS_VIDEOMEMORY. This flag is mutually exclusive with\n * DDSCAPS_NONLOCALVIDMEM.\n */\n#define DDSCAPS_LOCALVIDMEM                     0x10000000l\n\n/*\n * Indicates that a video memory surface is resident in non-local video\n * memory rather than true, local video memory. If this flag is specified\n * then so must DDSCAPS_VIDEOMEMORY. This flag is mutually exclusive with\n * DDSCAPS_LOCALVIDMEM.\n */\n#define DDSCAPS_NONLOCALVIDMEM                  0x20000000l\n\n/*\n * Indicates that this surface is a standard VGA mode surface, and not a\n * ModeX surface. (This flag will never be set in combination with the\n * DDSCAPS_MODEX flag).\n */\n#define DDSCAPS_STANDARDVGAMODE                 0x40000000l\n\n/*\n * Indicates that this surface will be an optimized surface. This flag is\n * currently only valid in conjunction with the DDSCAPS_TEXTURE flag. The surface\n * will be created without any underlying video memory until loaded.\n */\n#define DDSCAPS_OPTIMIZED                       0x80000000l\n\n\n\n/*\n * This bit is reserved\n */\n#define DDSCAPS2_RESERVED4                      0x00000002L\n#define DDSCAPS2_HARDWAREDEINTERLACE            0x00000000L\n\n/*\n * Indicates to the driver that this surface will be locked very frequently\n * (for procedural textures, dynamic lightmaps, etc). Surfaces with this cap\n * set must also have DDSCAPS_TEXTURE. This cap cannot be used with\n * DDSCAPS2_HINTSTATIC and DDSCAPS2_OPAQUE.\n */\n#define DDSCAPS2_HINTDYNAMIC                    0x00000004L\n\n/*\n * Indicates to the driver that this surface can be re-ordered/retiled on\n * load. This operation will not change the size of the texture. It is\n * relatively fast and symmetrical, since the application may lock these\n * bits (although it will take a performance hit when doing so). Surfaces\n * with this cap set must also have DDSCAPS_TEXTURE. This cap cannot be\n * used with DDSCAPS2_HINTDYNAMIC and DDSCAPS2_OPAQUE.\n */\n#define DDSCAPS2_HINTSTATIC                     0x00000008L\n\n/*\n * Indicates that the client would like this texture surface to be managed by the\n * DirectDraw/Direct3D runtime. Surfaces with this cap set must also have\n * DDSCAPS_TEXTURE set.\n */\n#define DDSCAPS2_TEXTUREMANAGE                  0x00000010L\n\n/*\n * These bits are reserved for internal use */\n#define DDSCAPS2_RESERVED1                      0x00000020L\n#define DDSCAPS2_RESERVED2                      0x00000040L\n\n/*\n * Indicates to the driver that this surface will never be locked again.\n * The driver is free to optimize this surface via retiling and actual compression.\n * All calls to Lock() or Blts from this surface will fail. Surfaces with this\n * cap set must also have DDSCAPS_TEXTURE. This cap cannot be used with\n * DDSCAPS2_HINTDYNAMIC and DDSCAPS2_HINTSTATIC.\n */\n#define DDSCAPS2_OPAQUE                         0x00000080L\n\n/*\n * Applications should set this bit at CreateSurface time to indicate that they\n * intend to use antialiasing. Only valid if DDSCAPS_3DDEVICE is also set.\n */\n#define DDSCAPS2_HINTANTIALIASING               0x00000100L\n\n\n/*\n * This flag is used at CreateSurface time to indicate that this set of\n * surfaces is a cubic environment map\n */\n#define DDSCAPS2_CUBEMAP                        0x00000200L\n\n/*\n * These flags preform two functions:\n * - At CreateSurface time, they define which of the six cube faces are\n *   required by the application.\n * - After creation, each face in the cubemap will have exactly one of these\n *   bits set.\n */\n#define DDSCAPS2_CUBEMAP_POSITIVEX              0x00000400L\n#define DDSCAPS2_CUBEMAP_NEGATIVEX              0x00000800L\n#define DDSCAPS2_CUBEMAP_POSITIVEY              0x00001000L\n#define DDSCAPS2_CUBEMAP_NEGATIVEY              0x00002000L\n#define DDSCAPS2_CUBEMAP_POSITIVEZ              0x00004000L\n#define DDSCAPS2_CUBEMAP_NEGATIVEZ              0x00008000L\n\n/*\n * This macro may be used to specify all faces of a cube map at CreateSurface time\n */\n#define DDSCAPS2_CUBEMAP_ALLFACES ( DDSCAPS2_CUBEMAP_POSITIVEX |\\\n                                    DDSCAPS2_CUBEMAP_NEGATIVEX |\\\n                                    DDSCAPS2_CUBEMAP_POSITIVEY |\\\n                                    DDSCAPS2_CUBEMAP_NEGATIVEY |\\\n                                    DDSCAPS2_CUBEMAP_POSITIVEZ |\\\n                                    DDSCAPS2_CUBEMAP_NEGATIVEZ )\n\n\n/*\n * This flag is an additional flag which is present on mipmap sublevels from DX7 onwards\n * It enables easier use of GetAttachedSurface rather than EnumAttachedSurfaces for surface\n * constructs such as Cube Maps, wherein there are more than one mipmap surface attached\n * to the root surface.\n * This caps bit is ignored by CreateSurface\n */\n#define DDSCAPS2_MIPMAPSUBLEVEL                 0x00010000L\n\n/* This flag indicates that the texture should be managed by D3D only */\n#define DDSCAPS2_D3DTEXTUREMANAGE               0x00020000L\n\n/* This flag indicates that the managed surface can be safely lost */\n#define DDSCAPS2_DONOTPERSIST                   0x00040000L\n\n/* indicates that this surface is part of a stereo flipping chain */\n#define DDSCAPS2_STEREOSURFACELEFT              0x00080000L\n\n\n/*\n * Indicates that the surface is a volume.\n * Can be combined with DDSCAPS_MIPMAP to indicate a multi-level volume\n */\n#define DDSCAPS2_VOLUME                         0x00200000L\n\n/*\n * Indicates that the surface may be locked multiple times by the application.\n * This cap cannot be used with DDSCAPS2_OPAQUE.\n */\n#define DDSCAPS2_NOTUSERLOCKABLE                0x00400000L\n\n/*\n * Indicates that the vertex buffer data can be used to render points and\n * point sprites.\n */\n#define DDSCAPS2_POINTS                         0x00800000L\n\n/*\n * Indicates that the vertex buffer data can be used to render rt pactches.\n */\n#define DDSCAPS2_RTPATCHES                      0x01000000L\n\n/*\n * Indicates that the vertex buffer data can be used to render n patches.\n */\n#define DDSCAPS2_NPATCHES                       0x02000000L\n\n/*\n * This bit is reserved for internal use \n */\n#define DDSCAPS2_RESERVED3                      0x04000000L\n\n\n/*\n * Indicates that the contents of the backbuffer do not have to be preserved\n * the contents of the backbuffer after they are presented.\n */\n#define DDSCAPS2_DISCARDBACKBUFFER              0x10000000L\n\n/*\n * Indicates that all surfaces in this creation chain should be given an alpha channel.\n * This flag will be set on primary surface chains that may have no explicit pixel format\n * (and thus take on the format of the current display mode).\n * The driver should infer that all these surfaces have a format having an alpha channel.\n * (e.g. assume D3DFMT_A8R8G8B8 if the display mode is x888.)\n */\n#define DDSCAPS2_ENABLEALPHACHANNEL             0x20000000L\n\n/*\n * Indicates that all surfaces in this creation chain is extended primary surface format.\n * This flag will be set on extended primary surface chains that always have explicit pixel\n * format and the pixel format is typically GDI (Graphics Device Interface) couldn't handle,\n * thus only used with fullscreen application. (e.g. D3DFMT_A2R10G10B10 format)\n */\n#define DDSCAPS2_EXTENDEDFORMATPRIMARY          0x40000000L\n\n/*\n * Indicates that all surfaces in this creation chain is additional primary surface.\n * This flag will be set on primary surface chains which must present on the adapter\n * id provided on dwCaps4. Typically this will be used to create secondary primary surface\n * on DualView display adapter.\n */\n#define DDSCAPS2_ADDITIONALPRIMARY              0x80000000L\n\n/*\n * This is a mask that indicates the set of bits that may be set\n * at createsurface time to indicate number of samples per pixel\n * when multisampling\n */\n#define DDSCAPS3_MULTISAMPLE_MASK               0x0000001FL\n\n/*\n * This is a mask that indicates the set of bits that may be set\n * at createsurface time to indicate the quality level of rendering\n * for the current number of samples per pixel\n */\n#define DDSCAPS3_MULTISAMPLE_QUALITY_MASK       0x000000E0L\n#define DDSCAPS3_MULTISAMPLE_QUALITY_SHIFT      5\n\n/*\n * This bit is reserved for internal use \n */\n#define DDSCAPS3_RESERVED1                      0x00000100L\n\n/*\n * This bit is reserved for internal use \n */\n#define DDSCAPS3_RESERVED2                      0x00000200L\n\n/*\n * This indicates whether this surface has light-weight miplevels\n */\n#define DDSCAPS3_LIGHTWEIGHTMIPMAP              0x00000400L\n\n/*\n * This indicates that the mipsublevels for this surface are auto-generated\n */\n#define DDSCAPS3_AUTOGENMIPMAP                  0x00000800L\n\n/*\n * This indicates that the mipsublevels for this surface are auto-generated\n */\n#define DDSCAPS3_DMAP                           0x00001000L\n\n\n /****************************************************************************\n *\n * DIRECTDRAW DRIVER CAPABILITY FLAGS\n *\n ****************************************************************************/\n\n/*\n * Display hardware has 3D acceleration.\n */\n#define DDCAPS_3D                       0x00000001l\n\n/*\n * Indicates that DirectDraw will support only dest rectangles that are aligned\n * on DIRECTDRAWCAPS.dwAlignBoundaryDest boundaries of the surface, respectively.\n * READ ONLY.\n */\n#define DDCAPS_ALIGNBOUNDARYDEST        0x00000002l\n\n/*\n * Indicates that DirectDraw will support only source rectangles  whose sizes in\n * BYTEs are DIRECTDRAWCAPS.dwAlignSizeDest multiples, respectively.  READ ONLY.\n */\n#define DDCAPS_ALIGNSIZEDEST            0x00000004l\n/*\n * Indicates that DirectDraw will support only source rectangles that are aligned\n * on DIRECTDRAWCAPS.dwAlignBoundarySrc boundaries of the surface, respectively.\n * READ ONLY.\n */\n#define DDCAPS_ALIGNBOUNDARYSRC         0x00000008l\n\n/*\n * Indicates that DirectDraw will support only source rectangles  whose sizes in\n * BYTEs are DIRECTDRAWCAPS.dwAlignSizeSrc multiples, respectively.  READ ONLY.\n */\n#define DDCAPS_ALIGNSIZESRC             0x00000010l\n\n/*\n * Indicates that DirectDraw will create video memory surfaces that have a stride\n * alignment equal to DIRECTDRAWCAPS.dwAlignStride.  READ ONLY.\n */\n#define DDCAPS_ALIGNSTRIDE              0x00000020l\n\n/*\n * Display hardware is capable of blt operations.\n */\n#define DDCAPS_BLT                      0x00000040l\n\n/*\n * Display hardware is capable of asynchronous blt operations.\n */\n#define DDCAPS_BLTQUEUE                 0x00000080l\n\n/*\n * Display hardware is capable of color space conversions during the blt operation.\n */\n#define DDCAPS_BLTFOURCC                0x00000100l\n\n/*\n * Display hardware is capable of stretching during blt operations.\n */\n#define DDCAPS_BLTSTRETCH               0x00000200l\n\n/*\n * Display hardware is shared with GDI.\n */\n#define DDCAPS_GDI                      0x00000400l\n\n/*\n * Display hardware can overlay.\n */\n#define DDCAPS_OVERLAY                  0x00000800l\n\n/*\n * Set if display hardware supports overlays but can not clip them.\n */\n#define DDCAPS_OVERLAYCANTCLIP          0x00001000l\n\n/*\n * Indicates that overlay hardware is capable of color space conversions during\n * the overlay operation.\n */\n#define DDCAPS_OVERLAYFOURCC            0x00002000l\n\n/*\n * Indicates that stretching can be done by the overlay hardware.\n */\n#define DDCAPS_OVERLAYSTRETCH           0x00004000l\n\n/*\n * Indicates that unique DirectDrawPalettes can be created for DirectDrawSurfaces\n * other than the primary surface.\n */\n#define DDCAPS_PALETTE                  0x00008000l\n\n/*\n * Indicates that palette changes can be syncd with the veritcal refresh.\n */\n#define DDCAPS_PALETTEVSYNC             0x00010000l\n\n/*\n * Display hardware can return the current scan line.\n */\n#define DDCAPS_READSCANLINE             0x00020000l\n\n\n/*\n * This flag used to bo DDCAPS_STEREOVIEW, which is now obsolete\n */\n#define DDCAPS_RESERVED1                0x00040000l\n\n/*\n * Display hardware is capable of generating a vertical blank interrupt.\n */\n#define DDCAPS_VBI                      0x00080000l\n\n/*\n * Supports the use of z buffers with blt operations.\n */\n#define DDCAPS_ZBLTS                    0x00100000l\n\n/*\n * Supports Z Ordering of overlays.\n */\n#define DDCAPS_ZOVERLAYS                0x00200000l\n\n/*\n * Supports color key\n */\n#define DDCAPS_COLORKEY                 0x00400000l\n\n/*\n * Supports alpha surfaces\n */\n#define DDCAPS_ALPHA                    0x00800000l\n\n/*\n * colorkey is hardware assisted(DDCAPS_COLORKEY will also be set)\n */\n#define DDCAPS_COLORKEYHWASSIST         0x01000000l\n\n/*\n * no hardware support at all\n */\n#define DDCAPS_NOHARDWARE               0x02000000l\n\n/*\n * Display hardware is capable of color fill with bltter\n */\n#define DDCAPS_BLTCOLORFILL             0x04000000l\n\n/*\n * Display hardware is bank switched, and potentially very slow at\n * random access to VRAM.\n */\n#define DDCAPS_BANKSWITCHED             0x08000000l\n\n/*\n * Display hardware is capable of depth filling Z-buffers with bltter\n */\n#define DDCAPS_BLTDEPTHFILL             0x10000000l\n\n/*\n * Display hardware is capable of clipping while bltting.\n */\n#define DDCAPS_CANCLIP                  0x20000000l\n\n/*\n * Display hardware is capable of clipping while stretch bltting.\n */\n#define DDCAPS_CANCLIPSTRETCHED         0x40000000l\n\n/*\n * Display hardware is capable of bltting to or from system memory\n */\n#define DDCAPS_CANBLTSYSMEM             0x80000000l\n\n\n /****************************************************************************\n *\n * MORE DIRECTDRAW DRIVER CAPABILITY FLAGS (dwCaps2)\n *\n ****************************************************************************/\n\n/*\n * Display hardware is certified\n */\n#define DDCAPS2_CERTIFIED              0x00000001l\n\n/*\n * Driver cannot interleave 2D operations (lock and blt) to surfaces with\n * Direct3D rendering operations between calls to BeginScene() and EndScene()\n */\n#define DDCAPS2_NO2DDURING3DSCENE       0x00000002l\n\n/*\n * Display hardware contains a video port\n */\n#define DDCAPS2_VIDEOPORT               0x00000004l\n\n/*\n * The overlay can be automatically flipped according to the video port\n * VSYNCs, providing automatic doubled buffered display of video port\n * data using an overlay\n */\n#define DDCAPS2_AUTOFLIPOVERLAY         0x00000008l\n\n/*\n * Overlay can display each field of interlaced data individually while\n * it is interleaved in memory without causing jittery artifacts.\n */\n#define DDCAPS2_CANBOBINTERLEAVED       0x00000010l\n\n/*\n * Overlay can display each field of interlaced data individually while\n * it is not interleaved in memory without causing jittery artifacts.\n */\n#define DDCAPS2_CANBOBNONINTERLEAVED    0x00000020l\n\n/*\n * The overlay surface contains color controls (brightness, sharpness, etc.)\n */\n#define DDCAPS2_COLORCONTROLOVERLAY     0x00000040l\n\n/*\n * The primary surface contains color controls (gamma, etc.)\n */\n#define DDCAPS2_COLORCONTROLPRIMARY     0x00000080l\n\n/*\n * RGBZ -> RGB supported for 16:16 RGB:Z\n */\n#define DDCAPS2_CANDROPZ16BIT           0x00000100l\n\n/*\n * Driver supports non-local video memory.\n */\n#define DDCAPS2_NONLOCALVIDMEM          0x00000200l\n\n/*\n * Dirver supports non-local video memory but has different capabilities for\n * non-local video memory surfaces. If this bit is set then so must\n * DDCAPS2_NONLOCALVIDMEM.\n */\n#define DDCAPS2_NONLOCALVIDMEMCAPS      0x00000400l\n\n/*\n * Driver neither requires nor prefers surfaces to be pagelocked when performing\n * blts involving system memory surfaces\n */\n#define DDCAPS2_NOPAGELOCKREQUIRED      0x00000800l\n\n/*\n * Driver can create surfaces which are wider than the primary surface\n */\n#define DDCAPS2_WIDESURFACES            0x00001000l\n\n/*\n * Driver supports bob without using a video port by handling the\n * DDFLIP_ODD and DDFLIP_EVEN flags specified in Flip.\n */\n#define DDCAPS2_CANFLIPODDEVEN          0x00002000l\n\n/*\n * Driver supports bob using hardware\n */\n#define DDCAPS2_CANBOBHARDWARE          0x00004000l\n\n/*\n * Driver supports bltting any FOURCC surface to another surface of the same FOURCC\n */\n#define DDCAPS2_COPYFOURCC              0x00008000l\n\n\n/*\n * Driver supports loadable gamma ramps for the primary surface\n */\n#define DDCAPS2_PRIMARYGAMMA            0x00020000l\n\n/*\n * Driver can render in windowed mode.\n */\n#define DDCAPS2_CANRENDERWINDOWED       0x00080000l\n\n/*\n * A calibrator is available to adjust the gamma ramp according to the\n * physical display properties so that the result will be identical on\n * all calibrated systems.\n */\n#define DDCAPS2_CANCALIBRATEGAMMA       0x00100000l\n\n/*\n * Indicates that the driver will respond to DDFLIP_INTERVALn flags\n */\n#define DDCAPS2_FLIPINTERVAL            0x00200000l\n\n/*\n * Indicates that the driver will respond to DDFLIP_NOVSYNC\n */\n#define DDCAPS2_FLIPNOVSYNC             0x00400000l\n\n/*\n * Driver supports management of video memory, if this flag is ON,\n * driver manages the texture if requested with DDSCAPS2_TEXTUREMANAGE on\n * DirectX manages the texture if this flag is OFF and surface has DDSCAPS2_TEXTUREMANAGE on\n */\n#define DDCAPS2_CANMANAGETEXTURE        0x00800000l\n\n/*\n * The Direct3D texture manager uses this cap to decide whether to put managed\n * surfaces in non-local video memory. If the cap is set, the texture manager will\n * put managed surfaces in non-local vidmem. Drivers that cannot texture from\n * local vidmem SHOULD NOT set this cap.\n */\n#define DDCAPS2_TEXMANINNONLOCALVIDMEM  0x01000000l\n\n/*\n * Indicates that the driver supports DX7 type of stereo in at least one mode (which may\n * not necessarily be the current mode). Applications should use IDirectDraw7 (or higher)\n * ::EnumDisplayModes and check the DDSURFACEDESC.ddsCaps.dwCaps2 field for the presence of\n * DDSCAPS2_STEREOSURFACELEFT to check if a particular mode supports stereo. The application\n * can also use IDirectDraw7(or higher)::GetDisplayMode to check the current mode.\n */\n#define DDCAPS2_STEREO                  0x02000000L\n\n/*\n * This caps bit is intended for internal DirectDraw use.\n * -It is only valid if DDCAPS2_NONLOCALVIDMEMCAPS is set.\n * -If this bit is set, then DDCAPS_CANBLTSYSMEM MUST be set by the driver (and\n *  all the assoicated system memory blt caps must be correct).\n * -It implies that the system->video blt caps in DDCAPS also apply to system to\n *  nonlocal blts. I.e. the dwSVBCaps, dwSVBCKeyCaps, dwSVBFXCaps and dwSVBRops\n *  members of DDCAPS (DDCORECAPS) are filled in correctly.\n * -Any blt from system to nonlocal memory that matches these caps bits will\n *  be passed to the driver.\n *\n * NOTE: This is intended to enable the driver itself to do efficient reordering\n * of textures. This is NOT meant to imply that hardware can write into AGP memory.\n * This operation is not currently supported.\n */\n#define DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL   0x04000000L\n\n/*\n * was DDCAPS2_PUREHAL\n */\n#define DDCAPS2_RESERVED1                     0x08000000L\n\n/*\n * Driver supports management of video memory, if this flag is ON,\n * driver manages the resource if requested with DDSCAPS2_TEXTUREMANAGE on\n * DirectX manages the resource if this flag is OFF and surface has DDSCAPS2_TEXTUREMANAGE on\n */\n#define DDCAPS2_CANMANAGERESOURCE             0x10000000L\n\n/*\n * Driver supports dynamic textures. This will allow the application to set\n * D3DUSAGE_DYNAMIC (DDSCAPS2_HINTDYNAMIC for drivers) at texture create time.\n * Video memory dynamic textures WILL be lockable by applications. It is\n * expected that these locks will be very efficient (which implies that the\n * driver should always maintain a linear copy, a pointer to which can be\n * quickly handed out to the application).\n */\n#define DDCAPS2_DYNAMICTEXTURES               0x20000000L\n\n/*\n * Driver supports auto-generation of mipmaps.\n */\n#define DDCAPS2_CANAUTOGENMIPMAP              0x40000000L\n\n\n/****************************************************************************\n *\n * DIRECTDRAW FX ALPHA CAPABILITY FLAGS\n *\n ****************************************************************************/\n\n/*\n * Supports alpha blending around the edge of a source color keyed surface.\n * For Blt.\n */\n#define DDFXALPHACAPS_BLTALPHAEDGEBLEND         0x00000001l\n\n/*\n * Supports alpha information in the pixel format.  The bit depth of alpha\n * information in the pixel format can be 1,2,4, or 8.  The alpha value becomes\n * more opaque as the alpha value increases.  (0 is transparent.)\n * For Blt.\n */\n#define DDFXALPHACAPS_BLTALPHAPIXELS            0x00000002l\n\n/*\n * Supports alpha information in the pixel format.  The bit depth of alpha\n * information in the pixel format can be 1,2,4, or 8.  The alpha value\n * becomes more transparent as the alpha value increases.  (0 is opaque.)\n * This flag can only be set if DDCAPS_ALPHA is set.\n * For Blt.\n */\n#define DDFXALPHACAPS_BLTALPHAPIXELSNEG         0x00000004l\n\n/*\n * Supports alpha only surfaces.  The bit depth of an alpha only surface can be\n * 1,2,4, or 8.  The alpha value becomes more opaque as the alpha value increases.\n * (0 is transparent.)\n * For Blt.\n */\n#define DDFXALPHACAPS_BLTALPHASURFACES          0x00000008l\n\n/*\n * The depth of the alpha channel data can range can be 1,2,4, or 8.\n * The NEG suffix indicates that this alpha channel becomes more transparent\n * as the alpha value increases. (0 is opaque.)  This flag can only be set if\n * DDCAPS_ALPHA is set.\n * For Blt.\n */\n#define DDFXALPHACAPS_BLTALPHASURFACESNEG       0x00000010l\n\n/*\n * Supports alpha blending around the edge of a source color keyed surface.\n * For Overlays.\n */\n#define DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND     0x00000020l\n\n/*\n * Supports alpha information in the pixel format.  The bit depth of alpha\n * information in the pixel format can be 1,2,4, or 8.  The alpha value becomes\n * more opaque as the alpha value increases.  (0 is transparent.)\n * For Overlays.\n */\n#define DDFXALPHACAPS_OVERLAYALPHAPIXELS        0x00000040l\n\n/*\n * Supports alpha information in the pixel format.  The bit depth of alpha\n * information in the pixel format can be 1,2,4, or 8.  The alpha value\n * becomes more transparent as the alpha value increases.  (0 is opaque.)\n * This flag can only be set if DDCAPS_ALPHA is set.\n * For Overlays.\n */\n#define DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG     0x00000080l\n\n/*\n * Supports alpha only surfaces.  The bit depth of an alpha only surface can be\n * 1,2,4, or 8.  The alpha value becomes more opaque as the alpha value increases.\n * (0 is transparent.)\n * For Overlays.\n */\n#define DDFXALPHACAPS_OVERLAYALPHASURFACES      0x00000100l\n\n/*\n * The depth of the alpha channel data can range can be 1,2,4, or 8.\n * The NEG suffix indicates that this alpha channel becomes more transparent\n * as the alpha value increases. (0 is opaque.)  This flag can only be set if\n * DDCAPS_ALPHA is set.\n * For Overlays.\n */\n#define DDFXALPHACAPS_OVERLAYALPHASURFACESNEG   0x00000200l\n\n#if DIRECTDRAW_VERSION < 0x0600\n#endif  //DIRECTDRAW_VERSION\n\n\n/****************************************************************************\n *\n * DIRECTDRAW FX CAPABILITY FLAGS\n *\n ****************************************************************************/\n\n/*\n * Uses arithmetic operations to stretch and shrink surfaces during blt\n * rather than pixel doubling techniques.  Along the Y axis.\n */\n#define DDFXCAPS_BLTARITHSTRETCHY       0x00000020l\n\n/*\n * Uses arithmetic operations to stretch during blt\n * rather than pixel doubling techniques.  Along the Y axis. Only\n * works for x1, x2, etc.\n */\n#define DDFXCAPS_BLTARITHSTRETCHYN      0x00000010l\n\n/*\n * Supports mirroring left to right in blt.\n */\n#define DDFXCAPS_BLTMIRRORLEFTRIGHT     0x00000040l\n\n/*\n * Supports mirroring top to bottom in blt.\n */\n#define DDFXCAPS_BLTMIRRORUPDOWN        0x00000080l\n\n/*\n * Supports arbitrary rotation for blts.\n */\n#define DDFXCAPS_BLTROTATION            0x00000100l\n\n/*\n * Supports 90 degree rotations for blts.\n */\n#define DDFXCAPS_BLTROTATION90          0x00000200l\n\n/*\n * DirectDraw supports arbitrary shrinking of a surface along the\n * x axis (horizontal direction) for blts.\n */\n#define DDFXCAPS_BLTSHRINKX             0x00000400l\n\n/*\n * DirectDraw supports integer shrinking (1x,2x,) of a surface\n * along the x axis (horizontal direction) for blts.\n */\n#define DDFXCAPS_BLTSHRINKXN            0x00000800l\n\n/*\n * DirectDraw supports arbitrary shrinking of a surface along the\n * y axis (horizontal direction) for blts.\n */\n#define DDFXCAPS_BLTSHRINKY             0x00001000l\n\n/*\n * DirectDraw supports integer shrinking (1x,2x,) of a surface\n * along the y axis (vertical direction) for blts.\n */\n#define DDFXCAPS_BLTSHRINKYN            0x00002000l\n\n/*\n * DirectDraw supports arbitrary stretching of a surface along the\n * x axis (horizontal direction) for blts.\n */\n#define DDFXCAPS_BLTSTRETCHX            0x00004000l\n\n/*\n * DirectDraw supports integer stretching (1x,2x,) of a surface\n * along the x axis (horizontal direction) for blts.\n */\n#define DDFXCAPS_BLTSTRETCHXN           0x00008000l\n\n/*\n * DirectDraw supports arbitrary stretching of a surface along the\n * y axis (horizontal direction) for blts.\n */\n#define DDFXCAPS_BLTSTRETCHY            0x00010000l\n\n/*\n * DirectDraw supports integer stretching (1x,2x,) of a surface\n * along the y axis (vertical direction) for blts.\n */\n#define DDFXCAPS_BLTSTRETCHYN           0x00020000l\n\n/*\n * Uses arithmetic operations to stretch and shrink surfaces during\n * overlay rather than pixel doubling techniques.  Along the Y axis\n * for overlays.\n */\n#define DDFXCAPS_OVERLAYARITHSTRETCHY   0x00040000l\n\n/*\n * Uses arithmetic operations to stretch surfaces during\n * overlay rather than pixel doubling techniques.  Along the Y axis\n * for overlays. Only works for x1, x2, etc.\n */\n#define DDFXCAPS_OVERLAYARITHSTRETCHYN  0x00000008l\n\n/*\n * DirectDraw supports arbitrary shrinking of a surface along the\n * x axis (horizontal direction) for overlays.\n */\n#define DDFXCAPS_OVERLAYSHRINKX         0x00080000l\n\n/*\n * DirectDraw supports integer shrinking (1x,2x,) of a surface\n * along the x axis (horizontal direction) for overlays.\n */\n#define DDFXCAPS_OVERLAYSHRINKXN        0x00100000l\n\n/*\n * DirectDraw supports arbitrary shrinking of a surface along the\n * y axis (horizontal direction) for overlays.\n */\n#define DDFXCAPS_OVERLAYSHRINKY         0x00200000l\n\n/*\n * DirectDraw supports integer shrinking (1x,2x,) of a surface\n * along the y axis (vertical direction) for overlays.\n */\n#define DDFXCAPS_OVERLAYSHRINKYN        0x00400000l\n\n/*\n * DirectDraw supports arbitrary stretching of a surface along the\n * x axis (horizontal direction) for overlays.\n */\n#define DDFXCAPS_OVERLAYSTRETCHX        0x00800000l\n\n/*\n * DirectDraw supports integer stretching (1x,2x,) of a surface\n * along the x axis (horizontal direction) for overlays.\n */\n#define DDFXCAPS_OVERLAYSTRETCHXN       0x01000000l\n\n/*\n * DirectDraw supports arbitrary stretching of a surface along the\n * y axis (horizontal direction) for overlays.\n */\n#define DDFXCAPS_OVERLAYSTRETCHY        0x02000000l\n\n/*\n * DirectDraw supports integer stretching (1x,2x,) of a surface\n * along the y axis (vertical direction) for overlays.\n */\n#define DDFXCAPS_OVERLAYSTRETCHYN       0x04000000l\n\n/*\n * DirectDraw supports mirroring of overlays across the vertical axis\n */\n#define DDFXCAPS_OVERLAYMIRRORLEFTRIGHT 0x08000000l\n\n/*\n * DirectDraw supports mirroring of overlays across the horizontal axis\n */\n#define DDFXCAPS_OVERLAYMIRRORUPDOWN    0x10000000l\n\n/*\n * DirectDraw supports deinterlacing of overlay surfaces\n */\n#define DDFXCAPS_OVERLAYDEINTERLACE\t\t0x20000000l\n\n/*\n * Driver can do alpha blending for blits.\n */\n#define DDFXCAPS_BLTALPHA               0x00000001l\n\n\n/*\n * Driver can do surface-reconstruction filtering for warped blits.\n */\n#define DDFXCAPS_BLTFILTER              DDFXCAPS_BLTARITHSTRETCHY\n\n/*\n * Driver can do alpha blending for overlays.\n */\n#define DDFXCAPS_OVERLAYALPHA           0x00000004l\n\n\n/*\n * Driver can do surface-reconstruction filtering for warped overlays.\n */\n#define DDFXCAPS_OVERLAYFILTER          DDFXCAPS_OVERLAYARITHSTRETCHY\n\n/****************************************************************************\n *\n * DIRECTDRAW STEREO VIEW CAPABILITIES\n *\n ****************************************************************************/\n\n/*\n * This flag used to be DDSVCAPS_ENIGMA, which is now obsolete\n */\n\n#define DDSVCAPS_RESERVED1              0x00000001l\n\n/*\n * This flag used to be DDSVCAPS_FLICKER, which is now obsolete\n */\n#define DDSVCAPS_RESERVED2              0x00000002l\n\n/*\n * This flag used to be DDSVCAPS_REDBLUE, which is now obsolete\n */\n#define DDSVCAPS_RESERVED3              0x00000004l\n\n/*\n * This flag used to be DDSVCAPS_SPLIT, which is now obsolete\n */\n#define DDSVCAPS_RESERVED4              0x00000008l\n\n/*\n * The stereo view is accomplished with switching technology\n */\n\n#define DDSVCAPS_STEREOSEQUENTIAL       0x00000010L\n\n\n\n/****************************************************************************\n *\n * DIRECTDRAWPALETTE CAPABILITIES\n *\n ****************************************************************************/\n\n/*\n * Index is 4 bits.  There are sixteen color entries in the palette table.\n */\n#define DDPCAPS_4BIT                    0x00000001l\n\n/*\n * Index is onto a 8 bit color index.  This field is only valid with the\n * DDPCAPS_1BIT, DDPCAPS_2BIT or DDPCAPS_4BIT capability and the target\n * surface is in 8bpp. Each color entry is one byte long and is an index\n * into destination surface's 8bpp palette.\n */\n#define DDPCAPS_8BITENTRIES             0x00000002l\n\n/*\n * Index is 8 bits.  There are 256 color entries in the palette table.\n */\n#define DDPCAPS_8BIT                    0x00000004l\n\n/*\n * Indicates that this DIRECTDRAWPALETTE should use the palette color array\n * passed into the lpDDColorArray parameter to initialize the DIRECTDRAWPALETTE\n * object.\n * This flag is obsolete. DirectDraw always initializes the color array from\n * the lpDDColorArray parameter. The definition remains for source-level\n * compatibility.\n */\n#define DDPCAPS_INITIALIZE              0x00000000l\n\n/*\n * This palette is the one attached to the primary surface.  Changing this\n * table has immediate effect on the display unless DDPSETPAL_VSYNC is specified\n * and supported.\n */\n#define DDPCAPS_PRIMARYSURFACE          0x00000010l\n\n/*\n * This palette is the one attached to the primary surface left.  Changing\n * this table has immediate effect on the display for the left eye unless\n * DDPSETPAL_VSYNC is specified and supported.\n */\n#define DDPCAPS_PRIMARYSURFACELEFT      0x00000020l\n\n/*\n * This palette can have all 256 entries defined\n */\n#define DDPCAPS_ALLOW256                0x00000040l\n\n/*\n * This palette can have modifications to it synced with the monitors\n * refresh rate.\n */\n#define DDPCAPS_VSYNC                   0x00000080l\n\n/*\n * Index is 1 bit.  There are two color entries in the palette table.\n */\n#define DDPCAPS_1BIT                    0x00000100l\n\n/*\n * Index is 2 bit.  There are four color entries in the palette table.\n */\n#define DDPCAPS_2BIT                    0x00000200l\n\n/*\n * The peFlags member of PALETTEENTRY denotes an 8 bit alpha value\n */\n#define DDPCAPS_ALPHA                   0x00000400l\n\n\n/****************************************************************************\n *\n * DIRECTDRAWPALETTE SETENTRY CONSTANTS\n *\n ****************************************************************************/\n\n\n/****************************************************************************\n *\n * DIRECTDRAWPALETTE GETENTRY CONSTANTS\n *\n ****************************************************************************/\n\n/* 0 is the only legal value */\n\n/****************************************************************************\n *\n * DIRECTDRAWSURFACE SETPRIVATEDATA CONSTANTS\n *\n ****************************************************************************/\n\n/*\n * The passed pointer is an IUnknown ptr. The cbData argument to SetPrivateData\n * must be set to sizeof(IUnknown*). DirectDraw will call AddRef through this\n * pointer and Release when the private data is destroyed. This includes when\n * the surface or palette is destroyed before such priovate data is destroyed.\n */\n#define DDSPD_IUNKNOWNPOINTER           0x00000001L\n\n/*\n * Private data is only valid for the current state of the object,\n * as determined by the uniqueness value.\n */\n#define DDSPD_VOLATILE                  0x00000002L\n\n\n/****************************************************************************\n *\n * DIRECTDRAWSURFACE SETPALETTE CONSTANTS\n *\n ****************************************************************************/\n\n\n/****************************************************************************\n *\n * DIRECTDRAW BITDEPTH CONSTANTS\n *\n * NOTE:  These are only used to indicate supported bit depths.   These\n * are flags only, they are not to be used as an actual bit depth.   The\n * absolute numbers 1, 2, 4, 8, 16, 24 and 32 are used to indicate actual\n * bit depths in a surface or for changing the display mode.\n *\n ****************************************************************************/\n\n/*\n * 1 bit per pixel.\n */\n#define DDBD_1                  0x00004000l\n\n/*\n * 2 bits per pixel.\n */\n#define DDBD_2                  0x00002000l\n\n/*\n * 4 bits per pixel.\n */\n#define DDBD_4                  0x00001000l\n\n/*\n * 8 bits per pixel.\n */\n#define DDBD_8                  0x00000800l\n\n/*\n * 16 bits per pixel.\n */\n#define DDBD_16                 0x00000400l\n\n/*\n * 24 bits per pixel.\n */\n#define DDBD_24                 0X00000200l\n\n/*\n * 32 bits per pixel.\n */\n#define DDBD_32                 0x00000100l\n\n/****************************************************************************\n *\n * DIRECTDRAWSURFACE SET/GET COLOR KEY FLAGS\n *\n ****************************************************************************/\n\n/*\n * Set if the structure contains a color space.  Not set if the structure\n * contains a single color key.\n */\n#define DDCKEY_COLORSPACE       0x00000001l\n\n/*\n * Set if the structure specifies a color key or color space which is to be\n * used as a destination color key for blt operations.\n */\n#define DDCKEY_DESTBLT          0x00000002l\n\n/*\n * Set if the structure specifies a color key or color space which is to be\n * used as a destination color key for overlay operations.\n */\n#define DDCKEY_DESTOVERLAY      0x00000004l\n\n/*\n * Set if the structure specifies a color key or color space which is to be\n * used as a source color key for blt operations.\n */\n#define DDCKEY_SRCBLT           0x00000008l\n\n/*\n * Set if the structure specifies a color key or color space which is to be\n * used as a source color key for overlay operations.\n */\n#define DDCKEY_SRCOVERLAY       0x00000010l\n\n\n/****************************************************************************\n *\n * DIRECTDRAW COLOR KEY CAPABILITY FLAGS\n *\n ****************************************************************************/\n\n/*\n * Supports transparent blting using a color key to identify the replaceable\n * bits of the destination surface for RGB colors.\n */\n#define DDCKEYCAPS_DESTBLT                      0x00000001l\n\n/*\n * Supports transparent blting using a color space to identify the replaceable\n * bits of the destination surface for RGB colors.\n */\n#define DDCKEYCAPS_DESTBLTCLRSPACE              0x00000002l\n\n/*\n * Supports transparent blting using a color space to identify the replaceable\n * bits of the destination surface for YUV colors.\n */\n#define DDCKEYCAPS_DESTBLTCLRSPACEYUV           0x00000004l\n\n/*\n * Supports transparent blting using a color key to identify the replaceable\n * bits of the destination surface for YUV colors.\n */\n#define DDCKEYCAPS_DESTBLTYUV                   0x00000008l\n\n/*\n * Supports overlaying using colorkeying of the replaceable bits of the surface\n * being overlayed for RGB colors.\n */\n#define DDCKEYCAPS_DESTOVERLAY                  0x00000010l\n\n/*\n * Supports a color space as the color key for the destination for RGB colors.\n */\n#define DDCKEYCAPS_DESTOVERLAYCLRSPACE          0x00000020l\n\n/*\n * Supports a color space as the color key for the destination for YUV colors.\n */\n#define DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV       0x00000040l\n\n/*\n * Supports only one active destination color key value for visible overlay\n * surfaces.\n */\n#define DDCKEYCAPS_DESTOVERLAYONEACTIVE         0x00000080l\n\n/*\n * Supports overlaying using colorkeying of the replaceable bits of the\n * surface being overlayed for YUV colors.\n */\n#define DDCKEYCAPS_DESTOVERLAYYUV               0x00000100l\n\n/*\n * Supports transparent blting using the color key for the source with\n * this surface for RGB colors.\n */\n#define DDCKEYCAPS_SRCBLT                       0x00000200l\n\n/*\n * Supports transparent blting using a color space for the source with\n * this surface for RGB colors.\n */\n#define DDCKEYCAPS_SRCBLTCLRSPACE               0x00000400l\n\n/*\n * Supports transparent blting using a color space for the source with\n * this surface for YUV colors.\n */\n#define DDCKEYCAPS_SRCBLTCLRSPACEYUV            0x00000800l\n\n/*\n * Supports transparent blting using the color key for the source with\n * this surface for YUV colors.\n */\n#define DDCKEYCAPS_SRCBLTYUV                    0x00001000l\n\n/*\n * Supports overlays using the color key for the source with this\n * overlay surface for RGB colors.\n */\n#define DDCKEYCAPS_SRCOVERLAY                   0x00002000l\n\n/*\n * Supports overlays using a color space as the source color key for\n * the overlay surface for RGB colors.\n */\n#define DDCKEYCAPS_SRCOVERLAYCLRSPACE           0x00004000l\n\n/*\n * Supports overlays using a color space as the source color key for\n * the overlay surface for YUV colors.\n */\n#define DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV        0x00008000l\n\n/*\n * Supports only one active source color key value for visible\n * overlay surfaces.\n */\n#define DDCKEYCAPS_SRCOVERLAYONEACTIVE          0x00010000l\n\n/*\n * Supports overlays using the color key for the source with this\n * overlay surface for YUV colors.\n */\n#define DDCKEYCAPS_SRCOVERLAYYUV                0x00020000l\n\n/*\n * there are no bandwidth trade-offs for using colorkey with an overlay\n */\n#define DDCKEYCAPS_NOCOSTOVERLAY                0x00040000l\n\n\n/****************************************************************************\n *\n * DIRECTDRAW PIXELFORMAT FLAGS\n *\n ****************************************************************************/\n\n/*\n * The surface has alpha channel information in the pixel format.\n */\n#define DDPF_ALPHAPIXELS                        0x00000001l\n\n/*\n * The pixel format contains alpha only information\n */\n#define DDPF_ALPHA                              0x00000002l\n\n/*\n * The FourCC code is valid.\n */\n#define DDPF_FOURCC                             0x00000004l\n\n/*\n * The surface is 4-bit color indexed.\n */\n#define DDPF_PALETTEINDEXED4                    0x00000008l\n\n/*\n * The surface is indexed into a palette which stores indices\n * into the destination surface's 8-bit palette.\n */\n#define DDPF_PALETTEINDEXEDTO8                  0x00000010l\n\n/*\n * The surface is 8-bit color indexed.\n */\n#define DDPF_PALETTEINDEXED8                    0x00000020l\n\n/*\n * The RGB data in the pixel format structure is valid.\n */\n#define DDPF_RGB                                0x00000040l\n\n/*\n * The surface will accept pixel data in the format specified\n * and compress it during the write.\n */\n#define DDPF_COMPRESSED                         0x00000080l\n\n/*\n * The surface will accept RGB data and translate it during\n * the write to YUV data.  The format of the data to be written\n * will be contained in the pixel format structure.  The DDPF_RGB\n * flag will be set.\n */\n#define DDPF_RGBTOYUV                           0x00000100l\n\n/*\n * pixel format is YUV - YUV data in pixel format struct is valid\n */\n#define DDPF_YUV                                0x00000200l\n\n/*\n * pixel format is a z buffer only surface\n */\n#define DDPF_ZBUFFER                            0x00000400l\n\n/*\n * The surface is 1-bit color indexed.\n */\n#define DDPF_PALETTEINDEXED1                    0x00000800l\n\n/*\n * The surface is 2-bit color indexed.\n */\n#define DDPF_PALETTEINDEXED2                    0x00001000l\n\n/*\n * The surface contains Z information in the pixels\n */\n#define DDPF_ZPIXELS                            0x00002000l\n\n/*\n * The surface contains stencil information along with Z\n */\n#define DDPF_STENCILBUFFER                      0x00004000l\n\n/*\n * Premultiplied alpha format -- the color components have been\n * premultiplied by the alpha component.\n */\n#define DDPF_ALPHAPREMULT                       0x00008000l\n\n\n/*\n * Luminance data in the pixel format is valid.\n * Use this flag for luminance-only or luminance+alpha surfaces,\n * the bit depth is then ddpf.dwLuminanceBitCount.\n */\n#define DDPF_LUMINANCE                          0x00020000l\n\n/*\n * Luminance data in the pixel format is valid.\n * Use this flag when hanging luminance off bumpmap surfaces,\n * the bit mask for the luminance portion of the pixel is then\n * ddpf.dwBumpLuminanceBitMask\n */\n#define DDPF_BUMPLUMINANCE                      0x00040000l\n\n/*\n * Bump map dUdV data in the pixel format is valid.\n */\n#define DDPF_BUMPDUDV                           0x00080000l\n\n\n/*===========================================================================\n *\n *\n * DIRECTDRAW CALLBACK FLAGS\n *\n *\n *==========================================================================*/\n\n/****************************************************************************\n *\n * DIRECTDRAW ENUMSURFACES FLAGS\n *\n ****************************************************************************/\n\n/*\n * Enumerate all of the surfaces that meet the search criterion.\n */\n#define DDENUMSURFACES_ALL                      0x00000001l\n\n/*\n * A search hit is a surface that matches the surface description.\n */\n#define DDENUMSURFACES_MATCH                    0x00000002l\n\n/*\n * A search hit is a surface that does not match the surface description.\n */\n#define DDENUMSURFACES_NOMATCH                  0x00000004l\n\n/*\n * Enumerate the first surface that can be created which meets the search criterion.\n */\n#define DDENUMSURFACES_CANBECREATED             0x00000008l\n\n/*\n * Enumerate the surfaces that already exist that meet the search criterion.\n */\n#define DDENUMSURFACES_DOESEXIST                0x00000010l\n\n\n/****************************************************************************\n *\n * DIRECTDRAW SETDISPLAYMODE FLAGS\n *\n ****************************************************************************/\n\n/*\n * The desired mode is a standard VGA mode\n */\n#define DDSDM_STANDARDVGAMODE                   0x00000001l\n\n\n/****************************************************************************\n *\n * DIRECTDRAW ENUMDISPLAYMODES FLAGS\n *\n ****************************************************************************/\n\n/*\n * Enumerate Modes with different refresh rates.  EnumDisplayModes guarantees\n * that a particular mode will be enumerated only once.  This flag specifies whether\n * the refresh rate is taken into account when determining if a mode is unique.\n */\n#define DDEDM_REFRESHRATES                      0x00000001l\n\n/*\n * Enumerate VGA modes. Specify this flag if you wish to enumerate supported VGA\n * modes such as mode 0x13 in addition to the usual ModeX modes (which are always\n * enumerated if the application has previously called SetCooperativeLevel with the\n * DDSCL_ALLOWMODEX flag set).\n */\n#define DDEDM_STANDARDVGAMODES                  0x00000002L\n\n\n/****************************************************************************\n *\n * DIRECTDRAW SETCOOPERATIVELEVEL FLAGS\n *\n ****************************************************************************/\n\n/*\n * Exclusive mode owner will be responsible for the entire primary surface.\n * GDI can be ignored. used with DD\n */\n#define DDSCL_FULLSCREEN                        0x00000001l\n\n/*\n * allow CTRL_ALT_DEL to work while in fullscreen exclusive mode\n */\n#define DDSCL_ALLOWREBOOT                       0x00000002l\n\n/*\n * prevents DDRAW from modifying the application window.\n * prevents DDRAW from minimize/restore the application window on activation.\n */\n#define DDSCL_NOWINDOWCHANGES                   0x00000004l\n\n/*\n * app wants to work as a regular Windows application\n */\n#define DDSCL_NORMAL                            0x00000008l\n\n/*\n * app wants exclusive access\n */\n#define DDSCL_EXCLUSIVE                         0x00000010l\n\n\n/*\n * app can deal with non-windows display modes\n */\n#define DDSCL_ALLOWMODEX                        0x00000040l\n\n/*\n * this window will receive the focus messages\n */\n#define DDSCL_SETFOCUSWINDOW                    0x00000080l\n\n/*\n * this window is associated with the DDRAW object and will\n * cover the screen in fullscreen mode\n */\n#define DDSCL_SETDEVICEWINDOW                   0x00000100l\n\n/*\n * app wants DDRAW to create a window to be associated with the\n * DDRAW object\n */\n#define DDSCL_CREATEDEVICEWINDOW                0x00000200l\n\n/*\n * App explicitly asks DDRAW/D3D to be multithread safe. This makes D3D\n * take the global crtisec more frequently.\n */\n#define DDSCL_MULTITHREADED                     0x00000400l\n\n/*\n * App specifies that it would like to keep the FPU set up for optimal Direct3D\n * performance (single precision and exceptions disabled) so Direct3D\n * does not need to explicitly set the FPU each time. This is assumed by\n * default in DirectX 7. See also DDSCL_FPUPRESERVE\n */\n#define DDSCL_FPUSETUP                          0x00000800l\n\n/*\n * App specifies that it needs either double precision FPU or FPU exceptions\n * enabled. This makes Direct3D explicitly set the FPU state eah time it is\n * called. Setting the flag will reduce Direct3D performance. The flag is\n * assumed by default in DirectX 6 and earlier. See also DDSCL_FPUSETUP\n */\n#define DDSCL_FPUPRESERVE                          0x00001000l\n\n\n/****************************************************************************\n *\n * DIRECTDRAW BLT FLAGS\n *\n ****************************************************************************/\n\n/*\n * Use the alpha information in the pixel format or the alpha channel surface\n * attached to the destination surface as the alpha channel for this blt.\n */\n#define DDBLT_ALPHADEST                         0x00000001l\n\n/*\n * Use the dwConstAlphaDest field in the DDBLTFX structure as the alpha channel\n * for the destination surface for this blt.\n */\n#define DDBLT_ALPHADESTCONSTOVERRIDE            0x00000002l\n\n/*\n * The NEG suffix indicates that the destination surface becomes more\n * transparent as the alpha value increases. (0 is opaque)\n */\n#define DDBLT_ALPHADESTNEG                      0x00000004l\n\n/*\n * Use the lpDDSAlphaDest field in the DDBLTFX structure as the alpha\n * channel for the destination for this blt.\n */\n#define DDBLT_ALPHADESTSURFACEOVERRIDE          0x00000008l\n\n/*\n * Use the dwAlphaEdgeBlend field in the DDBLTFX structure as the alpha channel\n * for the edges of the image that border the color key colors.\n */\n#define DDBLT_ALPHAEDGEBLEND                    0x00000010l\n\n/*\n * Use the alpha information in the pixel format or the alpha channel surface\n * attached to the source surface as the alpha channel for this blt.\n */\n#define DDBLT_ALPHASRC                          0x00000020l\n\n/*\n * Use the dwConstAlphaSrc field in the DDBLTFX structure as the alpha channel\n * for the source for this blt.\n */\n#define DDBLT_ALPHASRCCONSTOVERRIDE             0x00000040l\n\n/*\n * The NEG suffix indicates that the source surface becomes more transparent\n * as the alpha value increases. (0 is opaque)\n */\n#define DDBLT_ALPHASRCNEG                       0x00000080l\n\n/*\n * Use the lpDDSAlphaSrc field in the DDBLTFX structure as the alpha channel\n * for the source for this blt.\n */\n#define DDBLT_ALPHASRCSURFACEOVERRIDE           0x00000100l\n\n/*\n * Do this blt asynchronously through the FIFO in the order received.  If\n * there is no room in the hardware FIFO fail the call.\n */\n#define DDBLT_ASYNC                             0x00000200l\n\n/*\n * Uses the dwFillColor field in the DDBLTFX structure as the RGB color\n * to fill the destination rectangle on the destination surface with.\n */\n#define DDBLT_COLORFILL                         0x00000400l\n\n/*\n * Uses the dwDDFX field in the DDBLTFX structure to specify the effects\n * to use for the blt.\n */\n#define DDBLT_DDFX                              0x00000800l\n\n/*\n * Uses the dwDDROPS field in the DDBLTFX structure to specify the ROPS\n * that are not part of the Win32 API.\n */\n#define DDBLT_DDROPS                            0x00001000l\n\n/*\n * Use the color key associated with the destination surface.\n */\n#define DDBLT_KEYDEST                           0x00002000l\n\n/*\n * Use the dckDestColorkey field in the DDBLTFX structure as the color key\n * for the destination surface.\n */\n#define DDBLT_KEYDESTOVERRIDE                   0x00004000l\n\n/*\n * Use the color key associated with the source surface.\n */\n#define DDBLT_KEYSRC                            0x00008000l\n\n/*\n * Use the dckSrcColorkey field in the DDBLTFX structure as the color key\n * for the source surface.\n */\n#define DDBLT_KEYSRCOVERRIDE                    0x00010000l\n\n/*\n * Use the dwROP field in the DDBLTFX structure for the raster operation\n * for this blt.  These ROPs are the same as the ones defined in the Win32 API.\n */\n#define DDBLT_ROP                               0x00020000l\n\n/*\n * Use the dwRotationAngle field in the DDBLTFX structure as the angle\n * (specified in 1/100th of a degree) to rotate the surface.\n */\n#define DDBLT_ROTATIONANGLE                     0x00040000l\n\n/*\n * Z-buffered blt using the z-buffers attached to the source and destination\n * surfaces and the dwZBufferOpCode field in the DDBLTFX structure as the\n * z-buffer opcode.\n */\n#define DDBLT_ZBUFFER                           0x00080000l\n\n/*\n * Z-buffered blt using the dwConstDest Zfield and the dwZBufferOpCode field\n * in the DDBLTFX structure as the z-buffer and z-buffer opcode respectively\n * for the destination.\n */\n#define DDBLT_ZBUFFERDESTCONSTOVERRIDE          0x00100000l\n\n/*\n * Z-buffered blt using the lpDDSDestZBuffer field and the dwZBufferOpCode\n * field in the DDBLTFX structure as the z-buffer and z-buffer opcode\n * respectively for the destination.\n */\n#define DDBLT_ZBUFFERDESTOVERRIDE               0x00200000l\n\n/*\n * Z-buffered blt using the dwConstSrcZ field and the dwZBufferOpCode field\n * in the DDBLTFX structure as the z-buffer and z-buffer opcode respectively\n * for the source.\n */\n#define DDBLT_ZBUFFERSRCCONSTOVERRIDE           0x00400000l\n\n/*\n * Z-buffered blt using the lpDDSSrcZBuffer field and the dwZBufferOpCode\n * field in the DDBLTFX structure as the z-buffer and z-buffer opcode\n * respectively for the source.\n */\n#define DDBLT_ZBUFFERSRCOVERRIDE                0x00800000l\n\n/*\n * wait until the device is ready to handle the blt\n * this will cause blt to not return DDERR_WASSTILLDRAWING\n */\n#define DDBLT_WAIT                              0x01000000l\n\n/*\n * Uses the dwFillDepth field in the DDBLTFX structure as the depth value\n * to fill the destination rectangle on the destination Z-buffer surface\n * with.\n */\n#define DDBLT_DEPTHFILL                         0x02000000l\n\n\n/*\n * Return immediately (with DDERR_WASSTILLDRAWING) if the device is not\n * ready to schedule the blt at the time Blt() is called.\n */\n#define DDBLT_DONOTWAIT                         0x08000000l\n\n/*\n * These flags indicate a presentation blt (i.e. a blt\n * that moves surface contents from an offscreen back buffer to the primary\n * surface). The driver is not allowed to \"queue\"  more than three such blts.\n * The \"end\" of the presentation blt is indicated, since the\n * blt may be clipped, in which case the runtime will call the driver with \n * several blts. All blts (even if not clipped) are tagged with DDBLT_PRESENTATION\n * and the last (even if not clipped) additionally with DDBLT_LAST_PRESENTATION.\n * Thus the true rule is that the driver must not schedule a DDBLT_PRESENTATION\n * blt if there are 3 or more DDBLT_PRESENTLAST blts in the hardware pipe.\n * If there are such blts in the pipe, the driver should return DDERR_WASSTILLDRAWING\n * until the oldest queued DDBLT_LAST_PRESENTATION blts has been retired (i.e. the\n * pixels have been actually written to the primary surface). Once the oldest blt\n * has been retired, the driver is free to schedule the current blt.\n * The goal is to provide a mechanism whereby the device's hardware queue never\n * gets more than 3 frames ahead of the frames being generated by the application.\n * When excessive queueing occurs, applications become unusable because the application\n * visibly lags user input, and such problems make windowed interactive applications impossible.\n * Some drivers may not have sufficient knowledge of their hardware's FIFO to know\n * when a certain blt has been retired. Such drivers should code cautiously, and \n * simply not allow any frames to be queued at all. DDBLT_LAST_PRESENTATION should cause\n * such drivers to return DDERR_WASSTILLDRAWING until the accelerator is completely\n * finished- exactly as if the application had called Lock on the source surface\n * before calling Blt. \n * In other words, the driver is allowed and encouraged to \n * generate as much latency as it can, but never more than 3 frames worth.\n * Implementation detail: Drivers should count blts against the SOURCE surface, not\n * against the primary surface. This enables multiple parallel windowed application\n * to function more optimally.\n * This flag is passed only to DX8 or higher drivers.\n *\n * APPLICATIONS DO NOT SET THESE FLAGS. THEY ARE SET BY THE DIRECTDRAW RUNTIME.\n * \n */\n#define DDBLT_PRESENTATION                      0x10000000l\n#define DDBLT_LAST_PRESENTATION                 0x20000000l\n\n/*\n * If DDBLT_EXTENDED_FLAGS is set, then the driver should re-interpret\n * other flags according to the definitions that follow.\n * For example, bit 0 (0x00000001L) means DDBLT_ALPHADEST, unless\n * DDBLT_EXTENDED_FLAGS is also set, in which case bit 0 means\n * DDBLT_EXTENDED_LINEAR_CONTENT.\n * Only DirectX9 and higher drivers will be given extended blt flags.\n * Only flags explicitly mentioned here should be re-interpreted.\n * All other flags retain their original meanings.\n *\n * List of re-interpreted flags:\n *\n * Bit Hex value   New meaning                                  old meaning\n * ---------------------------------------------------------------\n *  2  0x00000004  DDBLT_EXTENDED_LINEAR_CONTENT                DDBLT_ALPHADESTNEG\n *  4  0x00000010  DDBLT_EXTENDED_PRESENTATION_STRETCHFACTOR    DDBLT_ALPHAEDGEBLEND\n *\n *\n * NOTE: APPLICATIONS SHOULD NOT SET THIS FLAG. THIS FLAG IS INTENDED\n * FOR USE BY THE DIRECT3D RUNTIME.\n */\n#define DDBLT_EXTENDED_FLAGS                    0x40000000l\n\n/*\n * EXTENDED FLAG. SEE DEFINITION OF DDBLT_EXTENDED_FLAGS.\n * This flag indidcates that the source surface contains content in a\n * linear color space. The driver may perform gamma correction to the\n * desktop color space (i.e. sRGB, gamma 2.2) as part of this blt.\n * If the device can perform such a conversion as part of the copy,\n * the driver should also set D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION\n *\n * NOTE: APPLICATIONS SHOULD NOT SET THIS FLAG. THIS FLAG IS INTENDED\n * FOR USE BY THE DIRECT3D RUNTIME. Use IDirect3DSwapChain9::Present\n * and specify D3DPRESENT_LINEAR_CONTENT in order to use this functionality.\n */ \n#define DDBLT_EXTENDED_LINEAR_CONTENT           0x00000004l\n\n\n/****************************************************************************\n *\n * BLTFAST FLAGS\n *\n ****************************************************************************/\n\n#define DDBLTFAST_NOCOLORKEY                    0x00000000\n#define DDBLTFAST_SRCCOLORKEY                   0x00000001\n#define DDBLTFAST_DESTCOLORKEY                  0x00000002\n#define DDBLTFAST_WAIT                          0x00000010\n#define DDBLTFAST_DONOTWAIT                     0x00000020\n\n/****************************************************************************\n *\n * FLIP FLAGS\n *\n ****************************************************************************/\n\n#define DDFLIP_WAIT                          0x00000001L\n\n/*\n * Indicates that the target surface contains the even field of video data.\n * This flag is only valid with an overlay surface.\n */\n#define DDFLIP_EVEN                          0x00000002L\n\n/*\n * Indicates that the target surface contains the odd field of video data.\n * This flag is only valid with an overlay surface.\n */\n#define DDFLIP_ODD                           0x00000004L\n\n/*\n * Causes DirectDraw to perform the physical flip immediately and return\n * to the application. Typically, what was the front buffer but is now the back\n * buffer will still be visible (depending on timing) until the next vertical\n * retrace. Subsequent operations involving the two flipped surfaces will\n * not check to see if the physical flip has finished (i.e. will not return\n * DDERR_WASSTILLDRAWING for that reason (but may for other reasons)).\n * This allows an application to perform Flips at a higher frequency than the\n * monitor refresh rate, but may introduce visible artifacts.\n * Only effective if DDCAPS2_FLIPNOVSYNC is set. If that bit is not set,\n * DDFLIP_NOVSYNC has no effect.\n */\n#define DDFLIP_NOVSYNC                       0x00000008L\n\n\n/*\n * Flip Interval Flags. These flags indicate how many vertical retraces to wait between\n * each flip. The default is one. DirectDraw will return DDERR_WASSTILLDRAWING for each\n * surface involved in the flip until the specified number of vertical retraces has\n * ocurred. Only effective if DDCAPS2_FLIPINTERVAL is set. If that bit is not set,\n * DDFLIP_INTERVALn has no effect.\n */\n\n/*\n * DirectDraw will flip on every other vertical sync\n */\n#define DDFLIP_INTERVAL2                     0x02000000L\n\n\n/*\n * DirectDraw will flip on every third vertical sync\n */\n#define DDFLIP_INTERVAL3                     0x03000000L\n\n\n/*\n * DirectDraw will flip on every fourth vertical sync\n */\n#define DDFLIP_INTERVAL4                     0x04000000L\n\n/*\n * DirectDraw will flip and display a main stereo surface\n */\n#define DDFLIP_STEREO                        0x00000010L\n\n/*\n * On IDirectDrawSurface7 and higher interfaces, the default is DDFLIP_WAIT. If you wish\n * to override the default and use time when the accelerator is busy (as denoted by\n * the DDERR_WASSTILLDRAWING return code) then use DDFLIP_DONOTWAIT.\n */\n#define DDFLIP_DONOTWAIT                     0x00000020L\n\n\n/****************************************************************************\n *\n * DIRECTDRAW SURFACE OVERLAY FLAGS\n *\n ****************************************************************************/\n\n/*\n * Use the alpha information in the pixel format or the alpha channel surface\n * attached to the destination surface as the alpha channel for the\n * destination overlay.\n */\n#define DDOVER_ALPHADEST                        0x00000001l\n\n/*\n * Use the dwConstAlphaDest field in the DDOVERLAYFX structure as the\n * destination alpha channel for this overlay.\n */\n#define DDOVER_ALPHADESTCONSTOVERRIDE           0x00000002l\n\n/*\n * The NEG suffix indicates that the destination surface becomes more\n * transparent as the alpha value increases.\n */\n#define DDOVER_ALPHADESTNEG                     0x00000004l\n\n/*\n * Use the lpDDSAlphaDest field in the DDOVERLAYFX structure as the alpha\n * channel destination for this overlay.\n */\n#define DDOVER_ALPHADESTSURFACEOVERRIDE         0x00000008l\n\n/*\n * Use the dwAlphaEdgeBlend field in the DDOVERLAYFX structure as the alpha\n * channel for the edges of the image that border the color key colors.\n */\n#define DDOVER_ALPHAEDGEBLEND                   0x00000010l\n\n/*\n * Use the alpha information in the pixel format or the alpha channel surface\n * attached to the source surface as the source alpha channel for this overlay.\n */\n#define DDOVER_ALPHASRC                         0x00000020l\n\n/*\n * Use the dwConstAlphaSrc field in the DDOVERLAYFX structure as the source\n * alpha channel for this overlay.\n */\n#define DDOVER_ALPHASRCCONSTOVERRIDE            0x00000040l\n\n/*\n * The NEG suffix indicates that the source surface becomes more transparent\n * as the alpha value increases.\n */\n#define DDOVER_ALPHASRCNEG                      0x00000080l\n\n/*\n * Use the lpDDSAlphaSrc field in the DDOVERLAYFX structure as the alpha channel\n * source for this overlay.\n */\n#define DDOVER_ALPHASRCSURFACEOVERRIDE          0x00000100l\n\n/*\n * Turn this overlay off.\n */\n#define DDOVER_HIDE                             0x00000200l\n\n/*\n * Use the color key associated with the destination surface.\n */\n#define DDOVER_KEYDEST                          0x00000400l\n\n/*\n * Use the dckDestColorkey field in the DDOVERLAYFX structure as the color key\n * for the destination surface\n */\n#define DDOVER_KEYDESTOVERRIDE                  0x00000800l\n\n/*\n * Use the color key associated with the source surface.\n */\n#define DDOVER_KEYSRC                           0x00001000l\n\n/*\n * Use the dckSrcColorkey field in the DDOVERLAYFX structure as the color key\n * for the source surface.\n */\n#define DDOVER_KEYSRCOVERRIDE                   0x00002000l\n\n/*\n * Turn this overlay on.\n */\n#define DDOVER_SHOW                             0x00004000l\n\n/*\n * Add a dirty rect to an emulated overlayed surface.\n */\n#define DDOVER_ADDDIRTYRECT                     0x00008000l\n\n/*\n * Redraw all dirty rects on an emulated overlayed surface.\n */\n#define DDOVER_REFRESHDIRTYRECTS                0x00010000l\n\n/*\n * Redraw the entire surface on an emulated overlayed surface.\n */\n#define DDOVER_REFRESHALL                      0x00020000l\n\n\n/*\n * Use the overlay FX flags to define special overlay FX\n */\n#define DDOVER_DDFX                             0x00080000l\n\n/*\n * Autoflip the overlay when ever the video port autoflips\n */\n#define DDOVER_AUTOFLIP                         0x00100000l\n\n/*\n * Display each field of video port data individually without\n * causing any jittery artifacts\n */\n#define DDOVER_BOB                              0x00200000l\n\n/*\n * Indicates that bob/weave decisions should not be overridden by other\n * interfaces.\n */\n#define DDOVER_OVERRIDEBOBWEAVE                 0x00400000l\n\n/*\n * Indicates that the surface memory is composed of interleaved fields.\n */\n#define DDOVER_INTERLEAVED                      0x00800000l\n\n/*\n * Indicates that bob will be performed using hardware rather than\n * software or emulated.\n */\n#define DDOVER_BOBHARDWARE                      0x01000000l\n\n/*\n * Indicates that overlay FX structure contains valid ARGB scaling factors.\n */\n#define DDOVER_ARGBSCALEFACTORS                 0x02000000l\n\n/*\n * Indicates that ARGB scaling factors can be degraded to fit driver capabilities.\n */\n#define DDOVER_DEGRADEARGBSCALING               0x04000000l\n\n\n/****************************************************************************\n *\n * DIRECTDRAWSURFACE LOCK FLAGS\n *\n ****************************************************************************/\n\n/*\n * The default.  Set to indicate that Lock should return a valid memory pointer\n * to the top of the specified rectangle.  If no rectangle is specified then a\n * pointer to the top of the surface is returned.\n */\n#define DDLOCK_SURFACEMEMORYPTR                 0x00000000L     // default\n\n/*\n * Set to indicate that Lock should wait until it can obtain a valid memory\n * pointer before returning.  If this bit is set, Lock will never return\n * DDERR_WASSTILLDRAWING.\n */\n#define DDLOCK_WAIT                             0x00000001L\n\n/*\n * Set if an event handle is being passed to Lock.  Lock will trigger the event\n * when it can return the surface memory pointer requested.\n */\n#define DDLOCK_EVENT                            0x00000002L\n\n/*\n * Indicates that the surface being locked will only be read from.\n */\n#define DDLOCK_READONLY                         0x00000010L\n\n/*\n * Indicates that the surface being locked will only be written to\n */\n#define DDLOCK_WRITEONLY                        0x00000020L\n\n\n/*\n * Indicates that a system wide lock should not be taken when this surface\n * is locked. This has several advantages (cursor responsiveness, ability\n * to call more Windows functions, easier debugging) when locking video\n * memory surfaces. However, an application specifying this flag must\n * comply with a number of conditions documented in the help file.\n * Furthermore, this flag cannot be specified when locking the primary.\n */\n#define DDLOCK_NOSYSLOCK                        0x00000800L\n\n/*\n * Used only with Direct3D Vertex Buffer Locks. Indicates that no vertices\n * that were referred to in Draw*PrimtiveVB calls since the start of the\n * frame (or the last lock without this flag) will be modified during the\n * lock. This can be useful when one is only appending data to the vertex\n * buffer\n */\n#define DDLOCK_NOOVERWRITE                      0x00001000L\n\n/*\n * Indicates that no assumptions will be made about the contents of the\n * surface or vertex buffer during this lock.\n * This enables two things:\n * -    Direct3D or the driver may provide an alternative memory\n *      area as the vertex buffer. This is useful when one plans to clear the\n *      contents of the vertex buffer and fill in new data.\n * -    Drivers sometimes store surface data in a re-ordered format.\n *      When the application locks the surface, the driver is forced to un-re-order\n *      the surface data before allowing the application to see the surface contents.\n *      This flag is a hint to the driver that it can skip the un-re-ordering process\n *      since the application plans to overwrite every single pixel in the surface\n *      or locked rectangle (and so erase any un-re-ordered pixels anyway).\n *      Applications should always set this flag when they intend to overwrite the entire\n *      surface or locked rectangle.\n */\n#define DDLOCK_DISCARDCONTENTS                  0x00002000L\n /*\n  * DDLOCK_OKTOSWAP is an older, less informative name for DDLOCK_DISCARDCONTENTS\n  */\n#define DDLOCK_OKTOSWAP                         0x00002000L\n\n/*\n * On IDirectDrawSurface7 and higher interfaces, the default is DDLOCK_WAIT. If you wish\n * to override the default and use time when the accelerator is busy (as denoted by\n * the DDERR_WASSTILLDRAWING return code) then use DDLOCK_DONOTWAIT.\n */\n#define DDLOCK_DONOTWAIT                        0x00004000L\n\n/*\n * This indicates volume texture lock with front and back specified.\n */\n#define DDLOCK_HASVOLUMETEXTUREBOXRECT          0x00008000L\n\n/*\n * This indicates that the driver should not update dirty rect information for this lock.\n */\n#define DDLOCK_NODIRTYUPDATE                    0x00010000L\n\n\n/****************************************************************************\n *\n * DIRECTDRAWSURFACE PAGELOCK FLAGS\n *\n ****************************************************************************/\n\n/*\n * No flags defined at present\n */\n\n\n/****************************************************************************\n *\n * DIRECTDRAWSURFACE PAGEUNLOCK FLAGS\n *\n ****************************************************************************/\n\n/*\n * No flags defined at present\n */\n\n\n/****************************************************************************\n *\n * DIRECTDRAWSURFACE BLT FX FLAGS\n *\n ****************************************************************************/\n\n/*\n * If stretching, use arithmetic stretching along the Y axis for this blt.\n */\n#define DDBLTFX_ARITHSTRETCHY                   0x00000001l\n\n/*\n * Do this blt mirroring the surface left to right.  Spin the\n * surface around its y-axis.\n */\n#define DDBLTFX_MIRRORLEFTRIGHT                 0x00000002l\n\n/*\n * Do this blt mirroring the surface up and down.  Spin the surface\n * around its x-axis.\n */\n#define DDBLTFX_MIRRORUPDOWN                    0x00000004l\n\n/*\n * Schedule this blt to avoid tearing.\n */\n#define DDBLTFX_NOTEARING                       0x00000008l\n\n/*\n * Do this blt rotating the surface one hundred and eighty degrees.\n */\n#define DDBLTFX_ROTATE180                       0x00000010l\n\n/*\n * Do this blt rotating the surface two hundred and seventy degrees.\n */\n#define DDBLTFX_ROTATE270                       0x00000020l\n\n/*\n * Do this blt rotating the surface ninety degrees.\n */\n#define DDBLTFX_ROTATE90                        0x00000040l\n\n/*\n * Do this z blt using dwZBufferLow and dwZBufferHigh as  range values\n * specified to limit the bits copied from the source surface.\n */\n#define DDBLTFX_ZBUFFERRANGE                    0x00000080l\n\n/*\n * Do this z blt adding the dwZBufferBaseDest to each of the sources z values\n * before comparing it with the desting z values.\n */\n#define DDBLTFX_ZBUFFERBASEDEST                 0x00000100l\n\n/****************************************************************************\n *\n * DIRECTDRAWSURFACE OVERLAY FX FLAGS\n *\n ****************************************************************************/\n\n/*\n * If stretching, use arithmetic stretching along the Y axis for this overlay.\n */\n#define DDOVERFX_ARITHSTRETCHY                  0x00000001l\n\n/*\n * Mirror the overlay across the vertical axis\n */\n#define DDOVERFX_MIRRORLEFTRIGHT                0x00000002l\n\n/*\n * Mirror the overlay across the horizontal axis\n */\n#define DDOVERFX_MIRRORUPDOWN                   0x00000004l\n\n/*\n * Deinterlace the overlay, if possible\n */\n#define DDOVERFX_DEINTERLACE                    0x00000008l\n\n\n/****************************************************************************\n *\n * DIRECTDRAW WAITFORVERTICALBLANK FLAGS\n *\n ****************************************************************************/\n\n/*\n * return when the vertical blank interval begins\n */\n#define DDWAITVB_BLOCKBEGIN                     0x00000001l\n\n/*\n * set up an event to trigger when the vertical blank begins\n */\n#define DDWAITVB_BLOCKBEGINEVENT                0x00000002l\n\n/*\n * return when the vertical blank interval ends and display begins\n */\n#define DDWAITVB_BLOCKEND                       0x00000004l\n\n/****************************************************************************\n *\n * DIRECTDRAW GETFLIPSTATUS FLAGS\n *\n ****************************************************************************/\n\n/*\n * is it OK to flip now?\n */\n#define DDGFS_CANFLIP                   0x00000001l\n\n/*\n * is the last flip finished?\n */\n#define DDGFS_ISFLIPDONE                0x00000002l\n\n/****************************************************************************\n *\n * DIRECTDRAW GETBLTSTATUS FLAGS\n *\n ****************************************************************************/\n\n/*\n * is it OK to blt now?\n */\n#define DDGBS_CANBLT                    0x00000001l\n\n/*\n * is the blt to the surface finished?\n */\n#define DDGBS_ISBLTDONE                 0x00000002l\n\n\n/****************************************************************************\n *\n * DIRECTDRAW ENUMOVERLAYZORDER FLAGS\n *\n ****************************************************************************/\n\n/*\n * Enumerate overlays back to front.\n */\n#define DDENUMOVERLAYZ_BACKTOFRONT      0x00000000l\n\n/*\n * Enumerate overlays front to back\n */\n#define DDENUMOVERLAYZ_FRONTTOBACK      0x00000001l\n\n/****************************************************************************\n *\n * DIRECTDRAW UPDATEOVERLAYZORDER FLAGS\n *\n ****************************************************************************/\n\n/*\n * Send overlay to front\n */\n#define DDOVERZ_SENDTOFRONT             0x00000000l\n\n/*\n * Send overlay to back\n */\n#define DDOVERZ_SENDTOBACK              0x00000001l\n\n/*\n * Move Overlay forward\n */\n#define DDOVERZ_MOVEFORWARD             0x00000002l\n\n/*\n * Move Overlay backward\n */\n#define DDOVERZ_MOVEBACKWARD            0x00000003l\n\n/*\n * Move Overlay in front of relative surface\n */\n#define DDOVERZ_INSERTINFRONTOF         0x00000004l\n\n/*\n * Move Overlay in back of relative surface\n */\n#define DDOVERZ_INSERTINBACKOF          0x00000005l\n\n\n/****************************************************************************\n *\n * DIRECTDRAW SETGAMMARAMP FLAGS\n *\n ****************************************************************************/\n\n/*\n * Request calibrator to adjust the gamma ramp according to the physical\n * properties of the display so that the result should appear identical\n * on all systems.\n */\n#define DDSGR_CALIBRATE                        0x00000001L\n\n\n/****************************************************************************\n *\n * DIRECTDRAW STARTMODETEST FLAGS\n *\n ****************************************************************************/\n\n/*\n * Indicates that the mode being tested has passed\n */\n#define DDSMT_ISTESTREQUIRED                   0x00000001L\n\n\n/****************************************************************************\n *\n * DIRECTDRAW EVALUATEMODE FLAGS\n *\n ****************************************************************************/\n\n/*\n * Indicates that the mode being tested has passed\n */\n#define DDEM_MODEPASSED                        0x00000001L\n\n/*\n * Indicates that the mode being tested has failed\n */\n#define DDEM_MODEFAILED                        0x00000002L\n\n\n/*===========================================================================\n *\n *\n * DIRECTDRAW RETURN CODES\n *\n * The return values from DirectDraw Commands and Surface that return an HRESULT\n * are codes from DirectDraw concerning the results of the action\n * requested by DirectDraw.\n *\n *==========================================================================*/\n\n/*\n * Status is OK\n *\n * Issued by: DirectDraw Commands and all callbacks\n */\n#define DD_OK                                   S_OK\n#define DD_FALSE                                S_FALSE\n\n/****************************************************************************\n *\n * DIRECTDRAW ENUMCALLBACK RETURN VALUES\n *\n * EnumCallback returns are used to control the flow of the DIRECTDRAW and\n * DIRECTDRAWSURFACE object enumerations.   They can only be returned by\n * enumeration callback routines.\n *\n ****************************************************************************/\n\n/*\n * stop the enumeration\n */\n#define DDENUMRET_CANCEL                        0\n\n/*\n * continue the enumeration\n */\n#define DDENUMRET_OK                            1\n\n/****************************************************************************\n *\n * DIRECTDRAW ERRORS\n *\n * Errors are represented by negative values and cannot be combined.\n *\n ****************************************************************************/\n\n/*\n * This object is already initialized\n */\n#define DDERR_ALREADYINITIALIZED                MAKE_DDHRESULT( 5 )\n\n/*\n * This surface can not be attached to the requested surface.\n */\n#define DDERR_CANNOTATTACHSURFACE               MAKE_DDHRESULT( 10 )\n\n/*\n * This surface can not be detached from the requested surface.\n */\n#define DDERR_CANNOTDETACHSURFACE               MAKE_DDHRESULT( 20 )\n\n/*\n * Support is currently not available.\n */\n#define DDERR_CURRENTLYNOTAVAIL                 MAKE_DDHRESULT( 40 )\n\n/*\n * An exception was encountered while performing the requested operation\n */\n#define DDERR_EXCEPTION                         MAKE_DDHRESULT( 55 )\n\n/*\n * Generic failure.\n */\n#define DDERR_GENERIC                           E_FAIL\n\n/*\n * Height of rectangle provided is not a multiple of reqd alignment\n */\n#define DDERR_HEIGHTALIGN                       MAKE_DDHRESULT( 90 )\n\n/*\n * Unable to match primary surface creation request with existing\n * primary surface.\n */\n#define DDERR_INCOMPATIBLEPRIMARY               MAKE_DDHRESULT( 95 )\n\n/*\n * One or more of the caps bits passed to the callback are incorrect.\n */\n#define DDERR_INVALIDCAPS                       MAKE_DDHRESULT( 100 )\n\n/*\n * DirectDraw does not support provided Cliplist.\n */\n#define DDERR_INVALIDCLIPLIST                   MAKE_DDHRESULT( 110 )\n\n/*\n * DirectDraw does not support the requested mode\n */\n#define DDERR_INVALIDMODE                       MAKE_DDHRESULT( 120 )\n\n/*\n * DirectDraw received a pointer that was an invalid DIRECTDRAW object.\n */\n#define DDERR_INVALIDOBJECT                     MAKE_DDHRESULT( 130 )\n\n/*\n * One or more of the parameters passed to the callback function are\n * incorrect.\n */\n#define DDERR_INVALIDPARAMS                     E_INVALIDARG\n\n/*\n * pixel format was invalid as specified\n */\n#define DDERR_INVALIDPIXELFORMAT                MAKE_DDHRESULT( 145 )\n\n/*\n * Rectangle provided was invalid.\n */\n#define DDERR_INVALIDRECT                       MAKE_DDHRESULT( 150 )\n\n/*\n * Operation could not be carried out because one or more surfaces are locked\n */\n#define DDERR_LOCKEDSURFACES                    MAKE_DDHRESULT( 160 )\n\n/*\n * There is no 3D present.\n */\n#define DDERR_NO3D                              MAKE_DDHRESULT( 170 )\n\n/*\n * Operation could not be carried out because there is no alpha accleration\n * hardware present or available.\n */\n#define DDERR_NOALPHAHW                         MAKE_DDHRESULT( 180 )\n\n/*\n * Operation could not be carried out because there is no stereo\n * hardware present or available.\n */\n#define DDERR_NOSTEREOHARDWARE          MAKE_DDHRESULT( 181 )\n\n/*\n * Operation could not be carried out because there is no hardware\n * present which supports stereo surfaces\n */\n#define DDERR_NOSURFACELEFT                             MAKE_DDHRESULT( 182 )\n\n\n\n/*\n * no clip list available\n */\n#define DDERR_NOCLIPLIST                        MAKE_DDHRESULT( 205 )\n\n/*\n * Operation could not be carried out because there is no color conversion\n * hardware present or available.\n */\n#define DDERR_NOCOLORCONVHW                     MAKE_DDHRESULT( 210 )\n\n/*\n * Create function called without DirectDraw object method SetCooperativeLevel\n * being called.\n */\n#define DDERR_NOCOOPERATIVELEVELSET             MAKE_DDHRESULT( 212 )\n\n/*\n * Surface doesn't currently have a color key\n */\n#define DDERR_NOCOLORKEY                        MAKE_DDHRESULT( 215 )\n\n/*\n * Operation could not be carried out because there is no hardware support\n * of the dest color key.\n */\n#define DDERR_NOCOLORKEYHW                      MAKE_DDHRESULT( 220 )\n\n/*\n * No DirectDraw support possible with current display driver\n */\n#define DDERR_NODIRECTDRAWSUPPORT               MAKE_DDHRESULT( 222 )\n\n/*\n * Operation requires the application to have exclusive mode but the\n * application does not have exclusive mode.\n */\n#define DDERR_NOEXCLUSIVEMODE                   MAKE_DDHRESULT( 225 )\n\n/*\n * Flipping visible surfaces is not supported.\n */\n#define DDERR_NOFLIPHW                          MAKE_DDHRESULT( 230 )\n\n/*\n * There is no GDI present.\n */\n#define DDERR_NOGDI                             MAKE_DDHRESULT( 240 )\n\n/*\n * Operation could not be carried out because there is no hardware present\n * or available.\n */\n#define DDERR_NOMIRRORHW                        MAKE_DDHRESULT( 250 )\n\n/*\n * Requested item was not found\n */\n#define DDERR_NOTFOUND                          MAKE_DDHRESULT( 255 )\n\n/*\n * Operation could not be carried out because there is no overlay hardware\n * present or available.\n */\n#define DDERR_NOOVERLAYHW                       MAKE_DDHRESULT( 260 )\n\n/*\n * Operation could not be carried out because the source and destination\n * rectangles are on the same surface and overlap each other.\n */\n#define DDERR_OVERLAPPINGRECTS                  MAKE_DDHRESULT( 270 )\n\n/*\n * Operation could not be carried out because there is no appropriate raster\n * op hardware present or available.\n */\n#define DDERR_NORASTEROPHW                      MAKE_DDHRESULT( 280 )\n\n/*\n * Operation could not be carried out because there is no rotation hardware\n * present or available.\n */\n#define DDERR_NOROTATIONHW                      MAKE_DDHRESULT( 290 )\n\n/*\n * Operation could not be carried out because there is no hardware support\n * for stretching\n */\n#define DDERR_NOSTRETCHHW                       MAKE_DDHRESULT( 310 )\n\n/*\n * DirectDrawSurface is not in 4 bit color palette and the requested operation\n * requires 4 bit color palette.\n */\n#define DDERR_NOT4BITCOLOR                      MAKE_DDHRESULT( 316 )\n\n/*\n * DirectDrawSurface is not in 4 bit color index palette and the requested\n * operation requires 4 bit color index palette.\n */\n#define DDERR_NOT4BITCOLORINDEX                 MAKE_DDHRESULT( 317 )\n\n/*\n * DirectDraw Surface is not in 8 bit color mode and the requested operation\n * requires 8 bit color.\n */\n#define DDERR_NOT8BITCOLOR                      MAKE_DDHRESULT( 320 )\n\n/*\n * Operation could not be carried out because there is no texture mapping\n * hardware present or available.\n */\n#define DDERR_NOTEXTUREHW                       MAKE_DDHRESULT( 330 )\n\n/*\n * Operation could not be carried out because there is no hardware support\n * for vertical blank synchronized operations.\n */\n#define DDERR_NOVSYNCHW                         MAKE_DDHRESULT( 335 )\n\n/*\n * Operation could not be carried out because there is no hardware support\n * for zbuffer blting.\n */\n#define DDERR_NOZBUFFERHW                       MAKE_DDHRESULT( 340 )\n\n/*\n * Overlay surfaces could not be z layered based on their BltOrder because\n * the hardware does not support z layering of overlays.\n */\n#define DDERR_NOZOVERLAYHW                      MAKE_DDHRESULT( 350 )\n\n/*\n * The hardware needed for the requested operation has already been\n * allocated.\n */\n#define DDERR_OUTOFCAPS                         MAKE_DDHRESULT( 360 )\n\n/*\n * DirectDraw does not have enough memory to perform the operation.\n */\n#define DDERR_OUTOFMEMORY                       E_OUTOFMEMORY\n\n/*\n * DirectDraw does not have enough memory to perform the operation.\n */\n#define DDERR_OUTOFVIDEOMEMORY                  MAKE_DDHRESULT( 380 )\n\n/*\n * hardware does not support clipped overlays\n */\n#define DDERR_OVERLAYCANTCLIP                   MAKE_DDHRESULT( 382 )\n\n/*\n * Can only have ony color key active at one time for overlays\n */\n#define DDERR_OVERLAYCOLORKEYONLYONEACTIVE      MAKE_DDHRESULT( 384 )\n\n/*\n * Access to this palette is being refused because the palette is already\n * locked by another thread.\n */\n#define DDERR_PALETTEBUSY                       MAKE_DDHRESULT( 387 )\n\n/*\n * No src color key specified for this operation.\n */\n#define DDERR_COLORKEYNOTSET                    MAKE_DDHRESULT( 400 )\n\n/*\n * This surface is already attached to the surface it is being attached to.\n */\n#define DDERR_SURFACEALREADYATTACHED            MAKE_DDHRESULT( 410 )\n\n/*\n * This surface is already a dependency of the surface it is being made a\n * dependency of.\n */\n#define DDERR_SURFACEALREADYDEPENDENT           MAKE_DDHRESULT( 420 )\n\n/*\n * Access to this surface is being refused because the surface is already\n * locked by another thread.\n */\n#define DDERR_SURFACEBUSY                       MAKE_DDHRESULT( 430 )\n\n/*\n * Access to this surface is being refused because no driver exists\n * which can supply a pointer to the surface.\n * This is most likely to happen when attempting to lock the primary\n * surface when no DCI provider is present.\n * Will also happen on attempts to lock an optimized surface.\n */\n#define DDERR_CANTLOCKSURFACE                   MAKE_DDHRESULT( 435 )\n\n/*\n * Access to Surface refused because Surface is obscured.\n */\n#define DDERR_SURFACEISOBSCURED                 MAKE_DDHRESULT( 440 )\n\n/*\n * Access to this surface is being refused because the surface is gone.\n * The DIRECTDRAWSURFACE object representing this surface should\n * have Restore called on it.\n */\n#define DDERR_SURFACELOST                       MAKE_DDHRESULT( 450 )\n\n/*\n * The requested surface is not attached.\n */\n#define DDERR_SURFACENOTATTACHED                MAKE_DDHRESULT( 460 )\n\n/*\n * Height requested by DirectDraw is too large.\n */\n#define DDERR_TOOBIGHEIGHT                      MAKE_DDHRESULT( 470 )\n\n/*\n * Size requested by DirectDraw is too large --  The individual height and\n * width are OK.\n */\n#define DDERR_TOOBIGSIZE                        MAKE_DDHRESULT( 480 )\n\n/*\n * Width requested by DirectDraw is too large.\n */\n#define DDERR_TOOBIGWIDTH                       MAKE_DDHRESULT( 490 )\n\n/*\n * Action not supported.\n */\n#define DDERR_UNSUPPORTED                       E_NOTIMPL\n\n/*\n * Pixel format requested is unsupported by DirectDraw\n */\n#define DDERR_UNSUPPORTEDFORMAT                 MAKE_DDHRESULT( 510 )\n\n/*\n * Bitmask in the pixel format requested is unsupported by DirectDraw\n */\n#define DDERR_UNSUPPORTEDMASK                   MAKE_DDHRESULT( 520 )\n\n/*\n * The specified stream contains invalid data\n */\n#define DDERR_INVALIDSTREAM                     MAKE_DDHRESULT( 521 )\n\n/*\n * vertical blank is in progress\n */\n#define DDERR_VERTICALBLANKINPROGRESS           MAKE_DDHRESULT( 537 )\n\n/*\n * Informs DirectDraw that the previous Blt which is transfering information\n * to or from this Surface is incomplete.\n */\n#define DDERR_WASSTILLDRAWING                   MAKE_DDHRESULT( 540 )\n\n\n/*\n * The specified surface type requires specification of the COMPLEX flag\n */\n#define DDERR_DDSCAPSCOMPLEXREQUIRED            MAKE_DDHRESULT( 542 )\n\n\n/*\n * Rectangle provided was not horizontally aligned on reqd. boundary\n */\n#define DDERR_XALIGN                            MAKE_DDHRESULT( 560 )\n\n/*\n * The GUID passed to DirectDrawCreate is not a valid DirectDraw driver\n * identifier.\n */\n#define DDERR_INVALIDDIRECTDRAWGUID             MAKE_DDHRESULT( 561 )\n\n/*\n * A DirectDraw object representing this driver has already been created\n * for this process.\n */\n#define DDERR_DIRECTDRAWALREADYCREATED          MAKE_DDHRESULT( 562 )\n\n/*\n * A hardware only DirectDraw object creation was attempted but the driver\n * did not support any hardware.\n */\n#define DDERR_NODIRECTDRAWHW                    MAKE_DDHRESULT( 563 )\n\n/*\n * this process already has created a primary surface\n */\n#define DDERR_PRIMARYSURFACEALREADYEXISTS       MAKE_DDHRESULT( 564 )\n\n/*\n * software emulation not available.\n */\n#define DDERR_NOEMULATION                       MAKE_DDHRESULT( 565 )\n\n/*\n * region passed to Clipper::GetClipList is too small.\n */\n#define DDERR_REGIONTOOSMALL                    MAKE_DDHRESULT( 566 )\n\n/*\n * an attempt was made to set a clip list for a clipper objec that\n * is already monitoring an hwnd.\n */\n#define DDERR_CLIPPERISUSINGHWND                MAKE_DDHRESULT( 567 )\n\n/*\n * No clipper object attached to surface object\n */\n#define DDERR_NOCLIPPERATTACHED                 MAKE_DDHRESULT( 568 )\n\n/*\n * Clipper notification requires an HWND or\n * no HWND has previously been set as the CooperativeLevel HWND.\n */\n#define DDERR_NOHWND                            MAKE_DDHRESULT( 569 )\n\n/*\n * HWND used by DirectDraw CooperativeLevel has been subclassed,\n * this prevents DirectDraw from restoring state.\n */\n#define DDERR_HWNDSUBCLASSED                    MAKE_DDHRESULT( 570 )\n\n/*\n * The CooperativeLevel HWND has already been set.\n * It can not be reset while the process has surfaces or palettes created.\n */\n#define DDERR_HWNDALREADYSET                    MAKE_DDHRESULT( 571 )\n\n/*\n * No palette object attached to this surface.\n */\n#define DDERR_NOPALETTEATTACHED                 MAKE_DDHRESULT( 572 )\n\n/*\n * No hardware support for 16 or 256 color palettes.\n */\n#define DDERR_NOPALETTEHW                       MAKE_DDHRESULT( 573 )\n\n/*\n * If a clipper object is attached to the source surface passed into a\n * BltFast call.\n */\n#define DDERR_BLTFASTCANTCLIP                   MAKE_DDHRESULT( 574 )\n\n/*\n * No blter.\n */\n#define DDERR_NOBLTHW                           MAKE_DDHRESULT( 575 )\n\n/*\n * No DirectDraw ROP hardware.\n */\n#define DDERR_NODDROPSHW                        MAKE_DDHRESULT( 576 )\n\n/*\n * returned when GetOverlayPosition is called on a hidden overlay\n */\n#define DDERR_OVERLAYNOTVISIBLE                 MAKE_DDHRESULT( 577 )\n\n/*\n * returned when GetOverlayPosition is called on a overlay that UpdateOverlay\n * has never been called on to establish a destionation.\n */\n#define DDERR_NOOVERLAYDEST                     MAKE_DDHRESULT( 578 )\n\n/*\n * returned when the position of the overlay on the destionation is no longer\n * legal for that destionation.\n */\n#define DDERR_INVALIDPOSITION                   MAKE_DDHRESULT( 579 )\n\n/*\n * returned when an overlay member is called for a non-overlay surface\n */\n#define DDERR_NOTAOVERLAYSURFACE                MAKE_DDHRESULT( 580 )\n\n/*\n * An attempt was made to set the cooperative level when it was already\n * set to exclusive.\n */\n#define DDERR_EXCLUSIVEMODEALREADYSET           MAKE_DDHRESULT( 581 )\n\n/*\n * An attempt has been made to flip a surface that is not flippable.\n */\n#define DDERR_NOTFLIPPABLE                      MAKE_DDHRESULT( 582 )\n\n/*\n * Can't duplicate primary & 3D surfaces, or surfaces that are implicitly\n * created.\n */\n#define DDERR_CANTDUPLICATE                     MAKE_DDHRESULT( 583 )\n\n/*\n * Surface was not locked.  An attempt to unlock a surface that was not\n * locked at all, or by this process, has been attempted.\n */\n#define DDERR_NOTLOCKED                         MAKE_DDHRESULT( 584 )\n\n/*\n * Windows can not create any more DCs, or a DC was requested for a paltte-indexed\n * surface when the surface had no palette AND the display mode was not palette-indexed\n * (in this case DirectDraw cannot select a proper palette into the DC)\n */\n#define DDERR_CANTCREATEDC                      MAKE_DDHRESULT( 585 )\n\n/*\n * No DC was ever created for this surface.\n */\n#define DDERR_NODC                              MAKE_DDHRESULT( 586 )\n\n/*\n * This surface can not be restored because it was created in a different\n * mode.\n */\n#define DDERR_WRONGMODE                         MAKE_DDHRESULT( 587 )\n\n/*\n * This surface can not be restored because it is an implicitly created\n * surface.\n */\n#define DDERR_IMPLICITLYCREATED                 MAKE_DDHRESULT( 588 )\n\n/*\n * The surface being used is not a palette-based surface\n */\n#define DDERR_NOTPALETTIZED                     MAKE_DDHRESULT( 589 )\n\n\n/*\n * The display is currently in an unsupported mode\n */\n#define DDERR_UNSUPPORTEDMODE                   MAKE_DDHRESULT( 590 )\n\n/*\n * Operation could not be carried out because there is no mip-map\n * texture mapping hardware present or available.\n */\n#define DDERR_NOMIPMAPHW                        MAKE_DDHRESULT( 591 )\n\n/*\n * The requested action could not be performed because the surface was of\n * the wrong type.\n */\n#define DDERR_INVALIDSURFACETYPE                MAKE_DDHRESULT( 592 )\n\n\n/*\n * Device does not support optimized surfaces, therefore no video memory optimized surfaces\n */\n#define DDERR_NOOPTIMIZEHW                      MAKE_DDHRESULT( 600 )\n\n/*\n * Surface is an optimized surface, but has not yet been allocated any memory\n */\n#define DDERR_NOTLOADED                         MAKE_DDHRESULT( 601 )\n\n/*\n * Attempt was made to create or set a device window without first setting\n * the focus window\n */\n#define DDERR_NOFOCUSWINDOW                     MAKE_DDHRESULT( 602 )\n\n/*\n * Attempt was made to set a palette on a mipmap sublevel\n */\n#define DDERR_NOTONMIPMAPSUBLEVEL               MAKE_DDHRESULT( 603 )\n\n/*\n * A DC has already been returned for this surface. Only one DC can be\n * retrieved per surface.\n */\n#define DDERR_DCALREADYCREATED                  MAKE_DDHRESULT( 620 )\n\n/*\n * An attempt was made to allocate non-local video memory from a device\n * that does not support non-local video memory.\n */\n#define DDERR_NONONLOCALVIDMEM                  MAKE_DDHRESULT( 630 )\n\n/*\n * The attempt to page lock a surface failed.\n */\n#define DDERR_CANTPAGELOCK                      MAKE_DDHRESULT( 640 )\n\n\n/*\n * The attempt to page unlock a surface failed.\n */\n#define DDERR_CANTPAGEUNLOCK                    MAKE_DDHRESULT( 660 )\n\n/*\n * An attempt was made to page unlock a surface with no outstanding page locks.\n */\n#define DDERR_NOTPAGELOCKED                     MAKE_DDHRESULT( 680 )\n\n/*\n * There is more data available than the specified buffer size could hold\n */\n#define DDERR_MOREDATA                          MAKE_DDHRESULT( 690 )\n\n/*\n * The data has expired and is therefore no longer valid.\n */\n#define DDERR_EXPIRED                           MAKE_DDHRESULT( 691 )\n\n/*\n * The mode test has finished executing.\n */\n#define DDERR_TESTFINISHED                      MAKE_DDHRESULT( 692 )\n\n/*\n * The mode test has switched to a new mode.\n */\n#define DDERR_NEWMODE                           MAKE_DDHRESULT( 693 )\n\n/*\n * D3D has not yet been initialized.\n */\n#define DDERR_D3DNOTINITIALIZED                 MAKE_DDHRESULT( 694 )\n\n/*\n * The video port is not active\n */\n#define DDERR_VIDEONOTACTIVE                    MAKE_DDHRESULT( 695 )\n\n/*\n * The monitor does not have EDID data.\n */\n#define DDERR_NOMONITORINFORMATION              MAKE_DDHRESULT( 696 )\n\n/*\n * The driver does not enumerate display mode refresh rates.\n */\n#define DDERR_NODRIVERSUPPORT                   MAKE_DDHRESULT( 697 )\n\n/*\n * Surfaces created by one direct draw device cannot be used directly by\n * another direct draw device.\n */\n#define DDERR_DEVICEDOESNTOWNSURFACE            MAKE_DDHRESULT( 699 )\n\n\n\n/*\n * An attempt was made to invoke an interface member of a DirectDraw object\n * created by CoCreateInstance() before it was initialized.\n */\n#define DDERR_NOTINITIALIZED                    CO_E_NOTINITIALIZED\n\n\n/* Alpha bit depth constants */\n\n\n#ifdef __cplusplus\n};\n#endif\n\n#ifdef ENABLE_NAMELESS_UNION_PRAGMA\n#pragma warning(default:4201)\n#endif\n\n#endif //__DDRAW_INCLUDED__\n\n\n"
  },
  {
    "path": "Include/ddrawex.h",
    "content": "//*********************************************************************\n//*                  Microsoft Windows                               **\n//*            Copyright(c) Microsoft Corp., 1995-1997               **\n//*********************************************************************\n//\n//\tDDRAWEX.H \n//\n//\tHeader file for DirectDrawEx functionality\n\n#ifndef __DDRAWEXH__\n#define __DDRAWEXH__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include <ddraw.h>\n\n// {4FD2A832-86C8-11d0-8FCA-00C04FD9189D}\nDEFINE_GUID(CLSID_DirectDrawFactory, \n0x4fd2a832, 0x86c8, 0x11d0, 0x8f, 0xca, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);\n\nDEFINE_GUID(IID_IDirectDrawFactory, \n0x4fd2a833, 0x86c8, 0x11d0, 0x8f, 0xca, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);\n\n#ifndef DIRECTDRAW_VERSION\n\n//Functionality supported by DDrawex but not DX3\n#define DDSD_LPSURFACE\t\t0x00000800l\n\nDEFINE_GUID( IID_IDirectDrawSurface3,\n0xDA044E00,0x69B2,0x11D0,0xA1,0xD5,0x00,0xAA,0x00,0xB8,0xDF,0xBB );\n\ntypedef struct IDirectDrawSurface3\t\tFAR *LPDIRECTDRAWSURFACE3;\n\n#undef INTERFACE\n#define INTERFACE IDirectDrawSurface3\nDECLARE_INTERFACE_( IDirectDrawSurface3, IUnknown )\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IDirectDrawSurface methods ***/\n    STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE3) PURE;\n    STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT) PURE;\n    STDMETHOD(Blt)(THIS_ LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX) PURE;\n    STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH, DWORD, DWORD ) PURE;\n    STDMETHOD(BltFast)(THIS_ DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD) PURE;\n    STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD,LPDIRECTDRAWSURFACE3) PURE;\n    STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID,LPDDENUMSURFACESCALLBACK) PURE;\n    STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD,LPVOID,LPDDENUMSURFACESCALLBACK) PURE;\n    STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE3, DWORD) PURE;\n    STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS, LPDIRECTDRAWSURFACE3 FAR *) PURE;\n    STDMETHOD(GetBltStatus)(THIS_ DWORD) PURE;\n    STDMETHOD(GetCaps)(THIS_ LPDDSCAPS) PURE;\n    STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER FAR*) PURE;\n    STDMETHOD(GetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;\n    STDMETHOD(GetDC)(THIS_ HDC FAR *) PURE;\n    STDMETHOD(GetFlipStatus)(THIS_ DWORD) PURE;\n    STDMETHOD(GetOverlayPosition)(THIS_ LPLONG, LPLONG ) PURE;\n    STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE FAR*) PURE;\n    STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT) PURE;\n    STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC) PURE;\n    STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, LPDDSURFACEDESC) PURE;\n    STDMETHOD(IsLost)(THIS) PURE;\n    STDMETHOD(Lock)(THIS_ LPRECT,LPDDSURFACEDESC,DWORD,HANDLE) PURE;\n    STDMETHOD(ReleaseDC)(THIS_ HDC) PURE;\n    STDMETHOD(Restore)(THIS) PURE;\n    STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER) PURE;\n    STDMETHOD(SetColorKey)(THIS_ DWORD, LPDDCOLORKEY) PURE;\n    STDMETHOD(SetOverlayPosition)(THIS_ LONG, LONG ) PURE;\n    STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE) PURE;\n    STDMETHOD(Unlock)(THIS_ LPVOID) PURE;\n    STDMETHOD(UpdateOverlay)(THIS_ LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX) PURE;\n    STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD) PURE;\n    STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD, LPDIRECTDRAWSURFACE3) PURE;\n    /*** Added in the v2 interface ***/\n    STDMETHOD(GetDDInterface)(THIS_ LPVOID FAR *) PURE;\n    STDMETHOD(PageLock)(THIS_ DWORD) PURE;\n    STDMETHOD(PageUnlock)(THIS_ DWORD) PURE;\n    /*** Added in the v3 interface ***/\n    STDMETHOD(SetSurfaceDesc)(THIS_ LPDDSURFACEDESC, DWORD ) PURE;\n};\n#endif\n\n\n\n\n#define\tDDSCAPS_DATAEXCHANGE\t(DDSCAPS_SYSTEMMEMORY|DDSCAPS_VIDEOMEMORY)\n\n#undef\tINTERFACE\n#define INTERFACE IDirectDrawFactory\n\nDECLARE_INTERFACE_(IDirectDrawFactory, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IDirectDrawFactory methods ***/\n    STDMETHOD(CreateDirectDraw) (THIS_ GUID * pGUID, HWND hWnd, DWORD dwCoopLevelFlags, DWORD dwReserved, IUnknown *pUnkOuter, IDirectDraw **ppDirectDraw) PURE;\n    STDMETHOD(DirectDrawEnumerate) (THIS_ LPDDENUMCALLBACK lpCallback, LPVOID lpContext) PURE;\n};\n\n\n \n// {618F8AD4-8B7A-11d0-8FCC-00C04FD9189D}\nDEFINE_GUID(IID_IDirectDraw3, \n0x618f8ad4, 0x8b7a, 0x11d0, 0x8f, 0xcc, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0x9d);\n\ntypedef struct IDirectDraw3\t\tFAR *LPDIRECTDRAW3;\n\n#undef\tINTERFACE\n#define INTERFACE IDirectDraw3\n\nDECLARE_INTERFACE_(IDirectDraw3, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n    STDMETHOD_(ULONG,Release) (THIS) PURE;\n    /*** IDirectDraw methods ***/\n    STDMETHOD(Compact)(THIS) PURE;\n    STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE;\n    STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE;\n    STDMETHOD(CreateSurface)(THIS_  LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, IUnknown FAR *) PURE;\n    STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR * ) PURE;\n    STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK ) PURE;\n    STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK ) PURE;\n    STDMETHOD(FlipToGDISurface)(THIS) PURE;\n    STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;\n    STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC) PURE;\n    STDMETHOD(GetFourCCCodes)(THIS_  LPDWORD, LPDWORD ) PURE;\n    STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE FAR *) PURE;\n    STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;\n    STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;\n    STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;\n    STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;\n    STDMETHOD(RestoreDisplayMode)(THIS) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;\n    STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE;\n    STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;\n    /*** Added in the v2 interface ***/\n    STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS, LPDWORD, LPDWORD) PURE;\n    /*** IDirectDraw3 methods ***/\n    STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, IDirectDrawSurface **) PURE;\n};\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectDraw3_QueryInterface(p, a, b)         (p)->lpVtbl->QueryInterface(p, a, b)\n#define IDirectDraw3_AddRef(p)                       (p)->lpVtbl->AddRef(p)\n#define IDirectDraw3_Release(p)                      (p)->lpVtbl->Release(p)\n#define IDirectDraw3_Compact(p)                      (p)->lpVtbl->Compact(p)\n#define IDirectDraw3_CreateClipper(p, a, b, c)       (p)->lpVtbl->CreateClipper(p, a, b, c)\n#define IDirectDraw3_CreatePalette(p, a, b, c, d)    (p)->lpVtbl->CreatePalette(p, a, b, c, d)\n#define IDirectDraw3_CreateSurface(p, a, b, c)       (p)->lpVtbl->CreateSurface(p, a, b, c)\n#define IDirectDraw3_DuplicateSurface(p, a, b)       (p)->lpVtbl->DuplicateSurface(p, a, b)\n#define IDirectDraw3_EnumDisplayModes(p, a, b, c, d) (p)->lpVtbl->EnumDisplayModes(p, a, b, c, d)\n#define IDirectDraw3_EnumSurfaces(p, a, b, c, d)     (p)->lpVtbl->EnumSurfaces(p, a, b, c, d)\n#define IDirectDraw3_FlipToGDISurface(p)             (p)->lpVtbl->FlipToGDISurface(p)\n#define IDirectDraw3_GetCaps(p, a, b)                (p)->lpVtbl->GetCaps(p, a, b)\n#define IDirectDraw3_GetDisplayMode(p, a)            (p)->lpVtbl->GetDisplayMode(p, a)\n#define IDirectDraw3_GetFourCCCodes(p, a, b)         (p)->lpVtbl->GetFourCCCodes(p, a, b)\n#define IDirectDraw3_GetGDISurface(p, a)             (p)->lpVtbl->GetGDISurface(p, a)\n#define IDirectDraw3_GetMonitorFrequency(p, a)       (p)->lpVtbl->GetMonitorFrequency(p, a)\n#define IDirectDraw3_GetScanLine(p, a)               (p)->lpVtbl->GetScanLine(p, a)\n#define IDirectDraw3_GetVerticalBlankStatus(p, a)    (p)->lpVtbl->GetVerticalBlankStatus(p, a)\n#define IDirectDraw3_Initialize(p, a)                (p)->lpVtbl->Initialize(p, a)\n#define IDirectDraw3_RestoreDisplayMode(p)           (p)->lpVtbl->RestoreDisplayMode(p)\n#define IDirectDraw3_SetCooperativeLevel(p, a, b)    (p)->lpVtbl->SetCooperativeLevel(p, a, b)\n#define IDirectDraw3_SetDisplayMode(p, a, b, c, d, e) (p)->lpVtbl->SetDisplayMode(p, a, b, c, d, e)\n#define IDirectDraw3_WaitForVerticalBlank(p, a, b)   (p)->lpVtbl->WaitForVerticalBlank(p, a, b)\n#define IDirectDraw3_GetAvailableVidMem(p, a, b, c)  (p)->lpVtbl->GetAvailableVidMem(p, a, b, c)\n#define IDirectDraw3_GetSurfaceFromDC(p, a, b)       (p)->lpVtbl->GetSurfaceFromDC(p, a, b)\n#endif\n\n \n\n/*===========================================================================\n *\n *\n * DIRECTDRAWEX RETURN CODES\n *\n * The return values from DirectDrawEx Commands and Surface that return an\n * HRESULT are codes from DirectDrawEx concerning the results of the action\n * requested by DirectDrawEx.\n *\n *==========================================================================*/\n\n/*\n * An attempt was made to load ddraw.dll\n */\n#define DDERR_LOADFAILED                        MAKE_DDHRESULT( 901 )\n\n/*\n * Unable to determine module/os version number\n */\n#define DDERR_BADVERSIONINFO                    MAKE_DDHRESULT( 902 )\n\n/*\n * Unable to determine address of ddraw.dll exported symbol (DirectDrawCreate or\n * DirectDrawEnumerate).\n */\n#define DDERR_BADPROCADDRESS                    MAKE_DDHRESULT( 903 )\n\n/*\n * Legacy usage: do not use QI() to create D3D device objects from surface objects.  \n * Use IDirect3D2::CreateDevice()\n */\n#define DDERR_LEGACYUSAGE                       MAKE_DDHRESULT( 904 )\n\n#ifdef __cplusplus\n}\n#endif\n\n\n#endif // __DDRAWEXH__\n"
  },
  {
    "path": "Include/ddrawi.h",
    "content": "/*\n * DirectDraw driver interface\n * (DirectX 7 version)\n *\n * Copyright (C) 2001 Ove Kaaven\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#ifndef __WINE_DDRAWI_H\n#define __WINE_DDRAWI_H\n\n#include <ddraw.h>\n#include <dciddi.h> /* the DD HAL is layered onto DCI escapes */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct _DDVIDEOPORTCAPS *LPDDVIDEOPORTCAPS; /* should be in dvp.h */\ntypedef struct _DDKERNELCAPS *LPDDKERNELCAPS; /* should be in ddkernel.h */\ntypedef struct _VMEMHEAP *LPVMEMHEAP; /* should be in dmemmgr.h */\n\n#define DDAPI WINAPI\n\n/* the DirectDraw versions */\n#define DD_VERSION\t\t0x0200 /* compatibility version */\n#define DD_RUNTIME_VERSION\t0x0700 /* actual version */\n\n/* the HAL version returned from QUERYESCSUPPORT - DCICOMMAND */\n#define DD_HAL_VERSION\t0x0100\n\n/* more DCICOMMAND escapes */\n#define DDCREATEDRIVEROBJECT\t10\n#define DDGET32BITDRIVERNAME\t11\n#define DDNEWCALLBACKFNS\t12\n#define DDVERSIONINFO\t\t13\n\n#define MAX_DRIVER_NAME\t\tCCHDEVICENAME\n\n/*****************************************************************************\n * Initialization stuff\n */\ntypedef struct {\n    char szName[260];\n    char szEntryPoint[64];\n    DWORD dwContext;\n} DD32BITDRIVERDATA,*LPDD32BITDRIVERDATA;\n\ntypedef struct {\n    DWORD dwHALVersion;\n    ULONG_PTR dwReserved1;\n    ULONG_PTR dwReserved2;\n} DDVERSIONDATA,*LPDDVERSIONDATA;\n\ntypedef DWORD (PASCAL *LPDD32BITDRIVERINIT)(DWORD dwContext);\n\n/* pointer to video memory */\ntypedef ULONG_PTR FLATPTR;\n\n/* predeclare some structures */\ntypedef struct _DDHALINFO *LPDDHALINFO;\ntypedef struct _DDRAWI_DIRECTDRAW_INT *LPDDRAWI_DIRECTDRAW_INT;\ntypedef struct _DDRAWI_DIRECTDRAW_LCL *LPDDRAWI_DIRECTDRAW_LCL;\ntypedef struct _DDRAWI_DIRECTDRAW_GBL *LPDDRAWI_DIRECTDRAW_GBL;\ntypedef struct _DDRAWI_DDRAWSURFACE_INT *LPDDRAWI_DDRAWSURFACE_INT;\ntypedef struct _DDRAWI_DDRAWSURFACE_LCL *LPDDRAWI_DDRAWSURFACE_LCL;\ntypedef struct _DDRAWI_DDRAWSURFACE_GBL *LPDDRAWI_DDRAWSURFACE_GBL;\ntypedef struct _DDRAWI_DDRAWSURFACE_MORE *LPDDRAWI_DDRAWSURFACE_MORE;\ntypedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE *LPDDRAWI_DDRAWSURFACE_GBL_MORE;\ntypedef struct _DDRAWI_DDRAWPALETTE_INT *LPDDRAWI_DDRAWPALETTE_INT;\ntypedef struct _DDRAWI_DDRAWPALETTE_LCL *LPDDRAWI_DDRAWPALETTE_LCL;\ntypedef struct _DDRAWI_DDRAWPALETTE_GBL *LPDDRAWI_DDRAWPALETTE_GBL;\ntypedef struct _DDRAWI_DDRAWCLIPPER_INT *LPDDRAWI_DDRAWCLIPPER_INT;\ntypedef struct _DDRAWI_DDRAWCLIPPER_LCL *LPDDRAWI_DDRAWCLIPPER_LCL;\ntypedef struct _DDRAWI_DDRAWCLIPPER_GBL *LPDDRAWI_DDRAWCLIPPER_GBL;\ntypedef struct _DDRAWI_DDVIDEOPORT_INT *LPDDRAWI_DDVIDEOPORT_INT;\ntypedef struct _DDRAWI_DDVIDEOPORT_LCL *LPDDRAWI_DDVIDEOPORT_LCL;\ntypedef struct _DDRAWI_DDMOTIONCOMP_INT *LPDDRAWI_DDMOTIONCOMP_INT;\ntypedef struct _DDRAWI_DDMOTIONCOMP_LCL *LPDDRAWI_DDMOTIONCOMP_LCL;\n\n/* structure GUIDs for GetDriverInfo */\nDEFINE_GUID( GUID_MiscellaneousCallbacks,\t0xEFD60CC0,0x49E7,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A );\n/* ...videport stuff here... */\nDEFINE_GUID( GUID_D3DCallbacks2,\t\t0x0BA584E1,0x70B6,0x11D0,0x88,0x9D,0x00,0xAA,0x00,0xBB,0xB7,0x6A );\nDEFINE_GUID( GUID_D3DCallbacks3,\t\t0xDDF41230,0xEC0A,0x11D0,0xA9,0xB6,0x00,0xAA,0x00,0xC0,0x99,0x3E );\nDEFINE_GUID( GUID_NonLocalVidMemCaps,\t\t0x86C4FA80,0x8D84,0x11D0,0x94,0xE8,0x00,0xC0,0x4F,0xC3,0x41,0x37 );\n/* ...kernel stuff here... */\nDEFINE_GUID( GUID_D3DExtendedCaps,\t\t0x7DE41F80,0x9D93,0x11D0,0x89,0xAB,0x00,0xA0,0xC9,0x05,0x41,0x29 );\nDEFINE_GUID( GUID_ZPixelFormats,\t\t0x93869880,0x36CF,0x11D1,0x9B,0x1B,0x00,0xAA,0x00,0xBB,0xB8,0xAE );\nDEFINE_GUID( GUID_DDMoreSurfaceCaps,\t\t0x3B8A0466,0xF269,0x11D1,0x88,0x0B,0x00,0xC0,0x4F,0xD9,0x30,0xC5 );\nDEFINE_GUID( GUID_DDStereoMode,\t\t\t0xF828169C,0xA8E8,0x11D2,0xA1,0xF2,0x00,0xA0,0xC9,0x83,0xEA,0xF6 );\n/* ...more stuff here... */\nDEFINE_GUID(GUID_D3DParseUnknownCommandCallback,0x2E04FFA0,0x98E4,0x11D1,0x8C,0xE1,0x00,0xA0,0xC9,0x06,0x29,0xA8 );\n/* ...motioncomp stuff here... */\nDEFINE_GUID( GUID_Miscellaneous2Callbacks,\t0x406B2F00,0x3E5A,0x11D1,0xB6,0x40,0x00,0xAA,0x00,0xA1,0xF9,0x6A );\n\n/*****************************************************************************\n * driver->ddraw callbacks\n */\ntypedef BOOL    (DDAPI *LPDDHAL_SETINFO)(LPDDHALINFO lpDDHalInfo, BOOL reset);\ntypedef FLATPTR (DDAPI *LPDDHAL_VIDMEMALLOC)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, DWORD dwWidth, DWORD dwHeight);\ntypedef void    (DDAPI *LPDDHAL_VIDMEMFREE)(LPDDRAWI_DIRECTDRAW_GBL lpDD, int heap, FLATPTR fpMem);\n\ntypedef struct {\n    DWORD\t\tdwSize;\n    LPDDHAL_SETINFO\tlpSetInfo;\n    LPDDHAL_VIDMEMALLOC\tlpVidMemAlloc;\n    LPDDHAL_VIDMEMFREE\tlpVidMemFree;\n} DDHALDDRAWFNS,*LPDDHALDDRAWFNS;\n\n/*****************************************************************************\n * mode info structure\n */\ntypedef struct _DDHALMODEINFO {\n    DWORD\tdwWidth;\n    DWORD\tdwHeight;\n    LONG\tlPitch;\n    DWORD\tdwBPP;\n    WORD\twFlags;\n    WORD\twRefreshRate;\n    DWORD\tdwRBitMask;\n    DWORD\tdwGBitMask;\n    DWORD\tdwBBitMask;\n    DWORD\tdwAlphaBitMask;\n} DDHALMODEINFO,*LPDDHALMODEINFO;\n\n#define DDMODEINFO_PALETTIZED\t0x0001\n#define DDMODEINFO_MODEX\t0x0002\n#define DDMODEINFO_UNSUPPORTED\t0x0004\n#define DDMODEINFO_STANDARDVGA\t0x0008\n#define DDMODEINFO_MAXREFRESH\t0x0010\n#define DDMODEINFO_STEREO\t0x0020\n\n/*****************************************************************************\n * video memory info structure\n */\ntypedef struct _VIDMEM {\n    DWORD\tdwFlags;\n    FLATPTR\tfpStart;\n    union {\n\tFLATPTR\t\tfpEnd;\n\tDWORD\t\tdwWidth;\n    } DUMMYUNIONNAME1;\n    DDSCAPS\tddsCaps;\n    DDSCAPS\tddsCapsAlt;\n    union {\n\tLPVMEMHEAP\tlpHeap;\n\tDWORD\t\tdwHeight;\n    } DUMMYUNIONNAME2;\n} VIDMEM,*LPVIDMEM;\n\n#define VIDMEM_ISLINEAR\t\t0x00000001\n#define VIDMEM_ISRECTANGULAR\t0x00000002\n#define VIDMEM_ISHEAP\t\t0x00000004\n#define VIDMEM_ISNONLOCAL\t0x00000008\n#define VIDMEM_ISWC\t\t0x00000010\n#define VIDMEM_ISDISABLED\t0x00000020\n\ntypedef struct _VIDMEMINFO {\n    FLATPTR\t\tfpPrimary;\n    DWORD\t\tdwFlags;\n    DWORD\t\tdwDisplayWidth;\n    DWORD\t\tdwDisplayHeight;\n    LONG\t\tlDisplayPitch;\n    DDPIXELFORMAT\tddpfDisplay;\n    DWORD\t\tdwOffscreenAlign;\n    DWORD\t\tdwOverlayAlign;\n    DWORD\t\tdwTextureAlign;\n    DWORD\t\tdwZBufferAlign;\n    DWORD\t\tdwAlphaAlign;\n    DWORD\t\tdwNumHeaps;\n    LPVIDMEM\t\tpvmList;\n} VIDMEMINFO,*LPVIDMEMINFO;\n\ntypedef struct _HEAPALIAS {\n    FLATPTR\tfpVidMem;\n    LPVOID\tlpAlias;\n    DWORD\tdwAliasSize;\n} HEAPALIAS,*LPHEAPALIAS;\n\ntypedef struct _HEAPALIASINFO {\n    DWORD\tdwRefCnt;\n    DWORD\tdwFlags;\n    DWORD\tdwNumHeaps;\n    LPHEAPALIAS\tlpAliases;\n} HEAPALIASINFO,*LPHEAPALIASINFO;\n\n#define HEAPALIASINFO_MAPPEDREAL\t0x00000001\n#define HEAPALIASINFO_MAPPEDDUMMY\t0x00000002\n\n/*****************************************************************************\n * capabilities structures\n */\ntypedef struct _DDCORECAPS {\n    DWORD\tdwSize;\n    DWORD\tdwCaps;\n    DWORD\tdwCaps2;\n    DWORD\tdwCKeyCaps;\n    DWORD\tdwFXCaps;\n    DWORD\tdwFXAlphaCaps;\n    DWORD\tdwPalCaps;\n    DWORD\tdwSVCaps;\n    DWORD\tdwAlphaBltConstBitDepths;\n    DWORD\tdwAlphaBltPixelBitDepths;\n    DWORD\tdwAlphaBltSurfaceBitDepths;\n    DWORD\tdwAlphaOverlayConstBitDepths;\n    DWORD\tdwAlphaOverlayPixelBitDepths;\n    DWORD\tdwAlphaOverlaySurfaceBitDepths;\n    DWORD\tdwZBufferBitDepths;\n    DWORD\tdwVidMemTotal;\n    DWORD\tdwVidMemFree;\n    DWORD\tdwMaxVisibleOverlays;\n    DWORD\tdwCurrVisibleOverlays;\n    DWORD\tdwNumFourCCCodes;\n    DWORD\tdwAlignBoundarySrc;\n    DWORD\tdwAlignSizeSrc;\n    DWORD\tdwAlignBoundaryDest;\n    DWORD\tdwAlignSizeDest;\n    DWORD\tdwAlignStrideAlign;\n    DWORD\tdwRops[DD_ROP_SPACE];\n    DDSCAPS\tddsCaps;\n    DWORD\tdwMinOverlayStretch;\n    DWORD\tdwMaxOverlayStretch;\n    DWORD\tdwMinLiveVideoStretch;\n    DWORD\tdwMaxLiveVideoStretch;\n    DWORD\tdwMinHwCodecStretch;\n    DWORD\tdwMaxHwCodecStretch;\n    DWORD\tdwReserved1;\n    DWORD\tdwReserved2;\n    DWORD\tdwReserved3;\n    DWORD\tdwSVBCaps;\n    DWORD\tdwSVBCKeyCaps;\n    DWORD\tdwSVBFXCaps;\n    DWORD\tdwSVBRops[DD_ROP_SPACE];\n    DWORD\tdwVSBCaps;\n    DWORD\tdwVSBCKeyCaps;\n    DWORD\tdwVSBFXCaps;\n    DWORD\tdwVSBRops[DD_ROP_SPACE];\n    DWORD\tdwSSBCaps;\n    DWORD\tdwSSBCKeyCaps;\n    DWORD\tdwSSBFXCaps;\n    DWORD\tdwSSBRops[DD_ROP_SPACE];\n    DWORD\tdwMaxVideoPorts;\n    DWORD\tdwCurrVideoPorts;\n    DWORD\tdwSVBCaps2;\n} DDCORECAPS,*LPDDCORECAPS;\n\ntypedef struct _DDNONLOCALVIDMEMCAPS {\n    DWORD\tdwSize;\n    DWORD\tdwNLVBCaps;\n    DWORD\tdwNLVBCaps2;\n    DWORD\tdwNLVBCKeyCaps;\n    DWORD\tdwNLVBFXCaps;\n    DWORD\tdwNLVBRops[DD_ROP_SPACE];\n} DDNONLOCALVIDMEMCAPS,*LPDDNONLOCALVIDMEMCAPS;\n/*\ntypedef struct _DDSCAPSEX {\n    DWORD\tdwCaps2;\n    DWORD\tdwCaps3;\n    DWORD\tdwCaps4;\n} DDSCAPSEX,*LPDDSCAPSEX;\n*/\n#define DDSCAPS_EXECUTEBUFFER\tDDSCAPS_RESERVED2\n#define DDSCAPS2_VERTEXBUFFER\tDDSCAPS2_RESERVED1\n#define DDSCAPS2_COMMANDBUFFER\tDDSCAPS2_RESERVED2\n\n/*****************************************************************************\n * ddraw->driver callbacks\n */\n#define DDHAL_DRIVER_NOTHANDLED\t0\n#define DDHAL_DRIVER_HANDLED\t1\n#define DDHAL_DRIVER_NOCKEYHW\t2\n\ntypedef struct _DDHAL_DESTROYDRIVERDATA\t\t*LPDDHAL_DESTROYDRIVERDATA;\ntypedef struct _DDHAL_CREATESURFACEDATA\t\t*LPDDHAL_CREATESURFACEDATA;\ntypedef struct _DDHAL_DRVSETCOLORKEYDATA\t*LPDDHAL_DRVSETCOLORKEYDATA;\ntypedef struct _DDHAL_SETMODEDATA\t\t*LPDDHAL_SETMODEDATA;\ntypedef struct _DDHAL_WAITFORVERTICALBLANKDATA\t*LPDDHAL_WAITFORVERTICALBLANKDATA;\ntypedef struct _DDHAL_CANCREATESURFACEDATA\t*LPDDHAL_CANCREATESURFACEDATA;\ntypedef struct _DDHAL_CREATEPALETTEDATA\t\t*LPDDHAL_CREATEPALETTEDATA;\ntypedef struct _DDHAL_GETSCANLINEDATA\t\t*LPDDHAL_GETSCANLINEDATA;\ntypedef struct _DDHAL_SETEXCLUSIVEMODEDATA\t*LPDDHAL_SETEXCLUSIVEMODEDATA;\ntypedef struct _DDHAL_FLIPTOGDISURFACEDATA\t*LPDDHAL_FLIPTOGDISURFACEDATA;\n\ntypedef DWORD (PASCAL *LPDDHAL_DESTROYDRIVER)\t    (LPDDHAL_DESTROYDRIVERDATA);\ntypedef DWORD (PASCAL *LPDDHAL_CREATESURFACE)\t    (LPDDHAL_CREATESURFACEDATA);\ntypedef DWORD (PASCAL *LPDDHAL_SETCOLORKEY)\t    (LPDDHAL_DRVSETCOLORKEYDATA);\ntypedef DWORD (PASCAL *LPDDHAL_SETMODE)\t\t    (LPDDHAL_SETMODEDATA);\ntypedef DWORD (PASCAL *LPDDHAL_WAITFORVERTICALBLANK)(LPDDHAL_WAITFORVERTICALBLANKDATA);\ntypedef DWORD (PASCAL *LPDDHAL_CANCREATESURFACE)    (LPDDHAL_CANCREATESURFACEDATA );\ntypedef DWORD (PASCAL *LPDDHAL_CREATEPALETTE)\t    (LPDDHAL_CREATEPALETTEDATA);\ntypedef DWORD (PASCAL *LPDDHAL_GETSCANLINE)\t    (LPDDHAL_GETSCANLINEDATA);\ntypedef DWORD (PASCAL *LPDDHAL_SETEXCLUSIVEMODE)    (LPDDHAL_SETEXCLUSIVEMODEDATA);\ntypedef DWORD (PASCAL *LPDDHAL_FLIPTOGDISURFACE)    (LPDDHAL_FLIPTOGDISURFACEDATA);\n\ntypedef struct _DDHAL_DDCALLBACKS {\n    DWORD\t\t\t\tdwSize;\n    DWORD\t\t\t\tdwFlags;\n    LPDDHAL_DESTROYDRIVER\t\tDestroyDriver;\n    LPDDHAL_CREATESURFACE\t\tCreateSurface;\n    LPDDHAL_SETCOLORKEY\t\t\tSetColorKey;\n    LPDDHAL_SETMODE\t\t\tSetMode;\n    LPDDHAL_WAITFORVERTICALBLANK\tWaitForVerticalBlank;\n    LPDDHAL_CANCREATESURFACE\t\tCanCreateSurface;\n    LPDDHAL_CREATEPALETTE\t\tCreatePalette;\n    LPDDHAL_GETSCANLINE\t\t\tGetScanLine;\n    /* DirectX 2 */\n    LPDDHAL_SETEXCLUSIVEMODE\t\tSetExclusiveMode;\n    LPDDHAL_FLIPTOGDISURFACE\t\tFlipToGDISurface;\n} DDHAL_DDCALLBACKS,*LPDDHAL_DDCALLBACKS;\n\ntypedef struct _DDHAL_DESTROYSURFACEDATA\t*LPDDHAL_DESTROYSURFACEDATA;\ntypedef struct _DDHAL_FLIPDATA\t\t\t*LPDDHAL_FLIPDATA;\ntypedef struct _DDHAL_SETCLIPLISTDATA\t\t*LPDDHAL_SETCLIPLISTDATA;\ntypedef struct _DDHAL_LOCKDATA\t\t\t*LPDDHAL_LOCKDATA;\ntypedef struct _DDHAL_UNLOCKDATA\t\t*LPDDHAL_UNLOCKDATA;\ntypedef struct _DDHAL_BLTDATA\t\t\t*LPDDHAL_BLTDATA;\ntypedef struct _DDHAL_SETCOLORKEYDATA\t\t*LPDDHAL_SETCOLORKEYDATA;\ntypedef struct _DDHAL_ADDATTACHEDSURFACEDATA\t*LPDDHAL_ADDATTACHEDSURFACEDATA;\ntypedef struct _DDHAL_GETBLTSTATUSDATA\t\t*LPDDHAL_GETBLTSTATUSDATA;\ntypedef struct _DDHAL_GETFLIPSTATUSDATA\t\t*LPDDHAL_GETFLIPSTATUSDATA;\ntypedef struct _DDHAL_UPDATEOVERLAYDATA\t\t*LPDDHAL_UPDATEOVERLAYDATA;\ntypedef struct _DDHAL_SETOVERLAYPOSITIONDATA\t*LPDDHAL_SETOVERLAYPOSITIONDATA;\ntypedef struct _DDHAL_SETPALETTEDATA\t\t*LPDDHAL_SETPALETTEDATA;\n\ntypedef DWORD (PASCAL *LPDDHALSURFCB_DESTROYSURFACE)\t(LPDDHAL_DESTROYSURFACEDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_FLIP)\t\t(LPDDHAL_FLIPDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_SETCLIPLIST)\t(LPDDHAL_SETCLIPLISTDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_LOCK)\t\t(LPDDHAL_LOCKDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_UNLOCK)\t\t(LPDDHAL_UNLOCKDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_BLT)\t\t(LPDDHAL_BLTDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_SETCOLORKEY)\t(LPDDHAL_SETCOLORKEYDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_ADDATTACHEDSURFACE)(LPDDHAL_ADDATTACHEDSURFACEDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_GETBLTSTATUS)\t(LPDDHAL_GETBLTSTATUSDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_GETFLIPSTATUS)\t(LPDDHAL_GETFLIPSTATUSDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_UPDATEOVERLAY)\t(LPDDHAL_UPDATEOVERLAYDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_SETOVERLAYPOSITION)(LPDDHAL_SETOVERLAYPOSITIONDATA);\ntypedef DWORD (PASCAL *LPDDHALSURFCB_SETPALETTE)\t(LPDDHAL_SETPALETTEDATA);\n\ntypedef struct _DDHAL_DDSURFACECALLBACKS {\n    DWORD\t\t\t\tdwSize;\n    DWORD\t\t\t\tdwFlags;\n    LPDDHALSURFCB_DESTROYSURFACE\tDestroySurface;\n    LPDDHALSURFCB_FLIP\t\t\tFlip;\n    LPDDHALSURFCB_SETCLIPLIST\t\tSetClipList;\n    LPDDHALSURFCB_LOCK\t\t\tLock;\n    LPDDHALSURFCB_UNLOCK\t\tUnlock;\n    LPDDHALSURFCB_BLT\t\t\tBlt;\n    LPDDHALSURFCB_SETCOLORKEY\t\tSetColorKey;\n    LPDDHALSURFCB_ADDATTACHEDSURFACE\tAddAttachedSurface;\n    LPDDHALSURFCB_GETBLTSTATUS\t\tGetBltStatus;\n    LPDDHALSURFCB_GETFLIPSTATUS\t\tGetFlipStatus;\n    LPDDHALSURFCB_UPDATEOVERLAY\t\tUpdateOverlay;\n    LPDDHALSURFCB_SETOVERLAYPOSITION\tSetOverlayPosition;\n    LPVOID\t\t\t\treserved4;\n    LPDDHALSURFCB_SETPALETTE\t\tSetPalette;\n} DDHAL_DDSURFACECALLBACKS,*LPDDHAL_DDSURFACECALLBACKS;\n\ntypedef struct _DDHAL_DESTROYPALETTEDATA\t*LPDDHAL_DESTROYPALETTEDATA;\ntypedef struct _DDHAL_SETENTRIESDATA\t\t*LPDDHAL_SETENTRIESDATA;\n\ntypedef DWORD (PASCAL *LPDDHALPALCB_DESTROYPALETTE)(LPDDHAL_DESTROYPALETTEDATA);\ntypedef DWORD (PASCAL *LPDDHALPALCB_SETENTRIES)    (LPDDHAL_SETENTRIESDATA);\n\ntypedef struct _DDHAL_DDPALETTECALLBACKS {\n    DWORD\t\t\t\tdwSize;\n    DWORD\t\t\t\tdwFlags;\n    LPDDHALPALCB_DESTROYPALETTE\t\tDestroyPalette;\n    LPDDHALPALCB_SETENTRIES\t\tSetEntries;\n} DDHAL_DDPALETTECALLBACKS,*LPDDHAL_DDPALETTECALLBACKS;\n\ntypedef DWORD (PASCAL *LPDDHALEXEBUFCB_CANCREATEEXEBUF)(LPDDHAL_CANCREATESURFACEDATA);\ntypedef DWORD (PASCAL *LPDDHALEXEBUFCB_CREATEEXEBUF)   (LPDDHAL_CREATESURFACEDATA);\ntypedef DWORD (PASCAL *LPDDHALEXEBUFCB_DESTROYEXEBUF)  (LPDDHAL_DESTROYSURFACEDATA);\ntypedef DWORD (PASCAL *LPDDHALEXEBUFCB_LOCKEXEBUF)     (LPDDHAL_LOCKDATA);\ntypedef DWORD (PASCAL *LPDDHALEXEBUFCB_UNLOCKEXEBUF)   (LPDDHAL_UNLOCKDATA);\n\ntypedef struct _DDHAL_DDEXEBUFCALLBACKS {\n    DWORD\t\t\t\tdwSize;\n    DWORD\t\t\t\tdwFlags;\n    LPDDHALEXEBUFCB_CANCREATEEXEBUF\tCanCreateExecuteBuffer;\n    LPDDHALEXEBUFCB_CREATEEXEBUF\tCreateExecuteBuffer;\n    LPDDHALEXEBUFCB_DESTROYEXEBUF\tDestroyExecuteBuffer;\n    LPDDHALEXEBUFCB_LOCKEXEBUF\t\tLockExecuteBuffer;\n    LPDDHALEXEBUFCB_UNLOCKEXEBUF\tUnlockExecuteBuffer;\n} DDHAL_DDEXEBUFCALLBACKS,*LPDDHAL_DDEXEBUFCALLBACKS;\n\ntypedef struct _DDHAL_GETAVAILDRIVERMEMORYDATA\t*LPDDHAL_GETAVAILDRIVERMEMORYDATA;\ntypedef struct _DDHAL_UPDATENONLOCALHEAPDATA\t*LPDDHAL_UPDATENONLOCALHEAPDATA;\ntypedef struct _DDHAL_GETHEAPALIGNMENTDATA\t*LPDDHAL_GETHEAPALIGNMENTDATA;\n\ntypedef DWORD (PASCAL *LPDDHAL_GETAVAILDRIVERMEMORY)(LPDDHAL_GETAVAILDRIVERMEMORYDATA);\ntypedef DWORD (PASCAL *LPDDHAL_UPDATENONLOCALHEAP)  (LPDDHAL_UPDATENONLOCALHEAPDATA);\ntypedef DWORD (PASCAL *LPDDHAL_GETHEAPALIGNMENT)    (LPDDHAL_GETHEAPALIGNMENTDATA);\n\ntypedef struct _DDHAL_DDMISCELLANEOUSCALLBACKS {\n    DWORD\t\t\t\tdwSize;\n    DWORD\t\t\t\tdwFlags;\n    LPDDHAL_GETAVAILDRIVERMEMORY\tGetAvailDriverMemory;\n    LPDDHAL_UPDATENONLOCALHEAP\t\tUpdateNonLocalHeap;\n    LPDDHAL_GETHEAPALIGNMENT\t\tGetHeapAlignment;\n    LPDDHALSURFCB_GETBLTSTATUS\t\tGetSysmemBltStatus;\n} DDHAL_DDMISCELLANEOUSCALLBACKS,*LPDDHAL_DDMISCELLANEOUSCALLBACKS;\n\ntypedef struct _DDHAL_CREATESURFACEEXDATA\t*LPDDHAL_CREATESURFACEEXDATA;\ntypedef struct _DDHAL_GETDRIVERSTATEDATA\t*LPDDHAL_GETDRIVERSTATEDATA;\ntypedef struct _DDHAL_DESTROYDDLOCALDATA\t*LPDDHAL_DESTROYDDLOCALDATA;\n\ntypedef DWORD (PASCAL *LPDDHAL_CREATESURFACEEX)(LPDDHAL_CREATESURFACEEXDATA);\ntypedef DWORD (PASCAL *LPDDHAL_GETDRIVERSTATE) (LPDDHAL_GETDRIVERSTATEDATA);\ntypedef DWORD (PASCAL *LPDDHAL_DESTROYDDLOCAL) (LPDDHAL_DESTROYDDLOCALDATA);\n\ntypedef struct _DDHAL_DDMISCELLANEOUS2CALLBACKS {\n    DWORD\t\t\t\tdwSize;\n    DWORD\t\t\t\tdwFlags;\n    LPVOID\t\t\t\tReserved;\n    LPDDHAL_CREATESURFACEEX\t\tCreateSurfaceEx;\n    LPDDHAL_GETDRIVERSTATE\t\tGetDriverState;\n    LPDDHAL_DESTROYDDLOCAL\t\tDestroyDDLocal;\n} DDHAL_DDMISCELLANEOUS2CALLBACKS,*LPDDHAL_DDMISCELLANEOUS2CALLBACKS;\n\ntypedef HRESULT (WINAPI *LPDDGAMMACALIBRATORPROC)(LPDDGAMMARAMP, LPBYTE);\n\n/*****************************************************************************\n * driver info structure\n *\n * The HAL is queried for additional callbacks via the GetDriverInfo callback.\n */\ntypedef struct _DDHAL_GETDRIVERINFODATA *LPDDHAL_GETDRIVERINFODATA;\ntypedef DWORD (PASCAL *LPDDHAL_GETDRIVERINFO)(LPDDHAL_GETDRIVERINFODATA);\n\ntypedef struct _DDHALINFO {\n    DWORD\t\t\tdwSize;\n    LPDDHAL_DDCALLBACKS\t\tlpDDCallbacks;\n    LPDDHAL_DDSURFACECALLBACKS\tlpDDSurfaceCallbacks;\n    LPDDHAL_DDPALETTECALLBACKS\tlpDDPaletteCallbacks;\n    VIDMEMINFO\t\t\tvmiData;\n    DDCORECAPS\t\t\tddCaps;\n    DWORD\t\t\tdwMonitorFrequency;\n    LPDDHAL_GETDRIVERINFO\tGetDriverInfo;\n    DWORD\t\t\tdwModeIndex;\n    LPDWORD\t\t\tlpdwFourCC;\n    DWORD\t\t\tdwNumModes;\n    LPDDHALMODEINFO\t\tlpModeInfo;\n    DWORD\t\t\tdwFlags;\n    LPVOID\t\t\tlpPDevice;\n    DWORD\t\t\thInstance;\n    /* DirectX 2 */\n    ULONG_PTR\t\t\tlpD3DGlobalDriverData;\n    ULONG_PTR\t\t\tlpD3DHALCallbacks;\n    LPDDHAL_DDEXEBUFCALLBACKS\tlpDDExeBufCallbacks;\n} DDHALINFO;\n\n#define DDHALINFO_ISPRIMARYDISPLAY\t0x00000001\n#define DDHALINFO_MODEXILLEGAL\t\t0x00000002\n#define DDHALINFO_GETDRIVERINFOSET\t0x00000004\n\n/* where the high-level ddraw implementation stores the callbacks */\ntypedef struct _DDHAL_CALLBACKS {\n    DDHAL_DDCALLBACKS\t\tcbDDCallbacks;\n    DDHAL_DDSURFACECALLBACKS\tcbDDSurfaceCallbacks;\n    DDHAL_DDPALETTECALLBACKS\tcbDDPaletteCallbacks;\n    DDHAL_DDCALLBACKS\t\tHALDD;\n    DDHAL_DDSURFACECALLBACKS\tHALDDSurface;\n    DDHAL_DDPALETTECALLBACKS\tHALDDPalette;\n    DDHAL_DDCALLBACKS\t\tHELDD;\n    DDHAL_DDSURFACECALLBACKS\tHELDDSurface;\n    DDHAL_DDPALETTECALLBACKS\tHELDDPalette;\n    DDHAL_DDEXEBUFCALLBACKS\tcbDDExeBufCallbacks;\n    DDHAL_DDEXEBUFCALLBACKS\tHALDDExeBuf;\n    DDHAL_DDEXEBUFCALLBACKS\tHELDDExeBuf;\n    /* there's more... videoport, colorcontrol, misc, and motion compensation callbacks... */\n} DDHAL_CALLBACKS,*LPDDHAL_CALLBACKS;\n\n/*****************************************************************************\n * parameter structures\n */\ntypedef struct _DDHAL_DESTROYDRIVERDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    HRESULT\t\t\tddRVal;\n    LPDDHAL_DESTROYDRIVER\tDestroyDriver;\n} DDHAL_DESTROYDRIVERDATA;\n\ntypedef struct _DDHAL_SETMODEDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    DWORD\t\t\tdwModeIndex;\n    HRESULT\t\t\tddRVal;\n    LPDDHAL_SETMODE\t\tSetMode;\n    BOOL\t\t\tinexcl;\n    BOOL\t\t\tuseRefreshRate;\n} DDHAL_SETMODEDATA;\n\ntypedef struct _DDHAL_CREATESURFACEDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDSURFACEDESC\t\tlpDDSurfaceDesc;\n    LPDDRAWI_DDRAWSURFACE_LCL *\tlplpSList;\n    DWORD\t\t\tdwSCnt;\n    HRESULT\t\t\tddRVal;\n    LPDDHAL_CREATESURFACE\tCreateSurface;\n} DDHAL_CREATESURFACEDATA;\n\ntypedef struct _DDHAL_CANCREATESURFACEDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDSURFACEDESC\t\tlpDDSurfaceDesc;\n    DWORD\t\t\tbIsDifferentPixelFormat;\n    HRESULT\t\t\tddRVal;\n    LPDDHAL_CANCREATESURFACE\tCanCreateSurface;\n} DDHAL_CANCREATESURFACEDATA;\n\ntypedef struct _DDHAL_CREATEPALETTEDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWPALETTE_GBL\tlpDDPalette;\n    LPPALETTEENTRY\t\tlpColorTable;\n    HRESULT\t\t\tddRVal;\n    LPDDHAL_CREATEPALETTE\tCreatePalette;\n    BOOL\t\t\tis_excl;\n} DDHAL_CREATEPALETTEDATA;\n\ntypedef struct _DDHAL_SETEXCLUSIVEMODEDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    DWORD\t\t\tdwEnterExcl;\n    DWORD\t\t\tdwReserved;\n    HRESULT\t\t\tddRVal;\n    LPDDHAL_SETEXCLUSIVEMODE\tSetExclusiveMode;\n} DDHAL_SETEXCLUSIVEMODEDATA;\n\n/* surfaces */\ntypedef struct _DDHAL_DESTROYSURFACEDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDSurface;\n    HRESULT\t\t\tddRVal;\n    LPDDHALSURFCB_DESTROYSURFACE DestroySurface;\n} DDHAL_DESTROYSURFACEDATA;\n\ntypedef struct _DDHAL_FLIPDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpSurfCurr;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpSurfTarg;\n    DWORD\t\t\tdwFlags;\n    HRESULT\t\t\tddRVal;\n    LPDDHALSURFCB_FLIP\t\tFlip;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpSurfCurrLeft;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpSurfTargLeft;\n} DDHAL_FLIPDATA;\n\ntypedef struct _DDHAL_LOCKDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDSurface;\n    DWORD\t\t\tbHasRect;\n    RECTL\t\t\trArea;\n    LPVOID\t\t\tlpSurfData;\n    HRESULT\t\t\tddRVal;\n    LPDDHALSURFCB_LOCK\t\tLock;\n    DWORD\t\t\tdwFlags;\n} DDHAL_LOCKDATA;\n\ntypedef struct _DDHAL_UNLOCKDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDSurface;\n    HRESULT\t\t\tddRVal;\n    LPDDHALSURFCB_UNLOCK\tUnlock;\n} DDHAL_UNLOCKDATA;\n\ntypedef struct _DDHAL_BLTDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDDestSurface;\n    RECTL\t\t\trDest;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDSrcSurface;\n    RECTL\t\t\trSrc;\n    DWORD\t\t\tdwFlags;\n    DWORD\t\t\tdwROPFlags;\n    DDBLTFX\t\t\tbltFX;\n    HRESULT\t\t\tddRVal;\n    LPDDHALSURFCB_BLT\t\tBlt;\n    BOOL\t\t\tIsClipped;\n    RECTL\t\t\trOrigDest;\n    RECTL\t\t\trOrigSrc;\n    DWORD\t\t\tdwRectCnt;\n    LPRECT\t\t\tprDestRects;\n} DDHAL_BLTDATA;\n\ntypedef struct _DDHAL_UPDATEOVERLAYDATA {\n LPDDRAWI_DIRECTDRAW_GBL lpDD;\n LPDDRAWI_DDRAWSURFACE_LCL lpDDDestSurface;\n RECTL rDest;\n LPDDRAWI_DDRAWSURFACE_LCL lpDDSrcSurface;\n RECTL rSrc;\n DWORD dwFlags;\n DDOVERLAYFX overlayFX;\n HRESULT ddRVal;\n LPDDHALSURFCB_UPDATEOVERLAY UpdateOverlay;\n} DDHAL_UPDATEOVERLAYDATA;\n\ntypedef struct _DDHAL_SETPALETTEDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpDDSurface;\n    LPDDRAWI_DDRAWPALETTE_GBL\tlpDDPalette;\n    HRESULT\t\t\tddRVal;\n    LPDDHALSURFCB_SETPALETTE\tSetPalette;\n    BOOL\t\t\tAttach;\n} DDHAL_SETPALETTEDATA;\n\n/* palettes */\ntypedef struct _DDHAL_DESTROYPALETTEDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWPALETTE_GBL\tlpDDPalette;\n    HRESULT\t\t\tddRVal;\n    LPDDHALPALCB_DESTROYPALETTE\tDestroyPalette;\n} DDHAL_DESTROYPALETTEDATA;\n\ntypedef struct _DDHAL_SETENTRIESDATA {\n    LPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n    LPDDRAWI_DDRAWPALETTE_GBL\tlpDDPalette;\n    DWORD\t\t\tdwBase;\n    DWORD\t\t\tdwNumEntries;\n    LPPALETTEENTRY\t\tlpEntries;\n    HRESULT\t\t\tddRVal;\n    LPDDHALPALCB_SETENTRIES\tSetEntries;\n} DDHAL_SETENTRIESDATA;\n\ntypedef struct _DDHAL_GETDRIVERINFODATA {\n    DWORD\tdwSize;\n    DWORD\tdwFlags;\n    GUID\tguidInfo;\n    DWORD\tdwExpectedSize;\n    LPVOID\tlpvData;\n    DWORD\tdwActualSize;\n    HRESULT\tddRVal;\n    ULONG_PTR\tdwContext;\n} DDHAL_GETDRIVERINFODATA;\n\n/*****************************************************************************\n * high-level ddraw implementation structures\n */\ntypedef struct _IUNKNOWN_LIST {\n    struct _IUNKNOWN_LIST *\tlpLink;\n    LPGUID\t\t\tlpGuid;\n    IUnknown *\t\t\tlpIUnknown;\n} IUNKNOWN_LIST,*LPIUNKNOWN_LIST;\n\ntypedef struct _PROCESS_LIST {\n    struct _PROCESS_LIST *\tlpLink;\n    DWORD\t\t\tdwProcessId;\n    DWORD\t\t\tdwRefCnt;\n    DWORD\t\t\tdwAlphaDepth;\n    DWORD\t\t\tdwZDepth;\n} PROCESS_LIST,*LPPROCESS_LIST;\n\ntypedef struct _ATTACHLIST {\n    DWORD\t\t\tdwFlags;\n    struct _ATTACHLIST *\tlpLink;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpAttached;\n    LPDDRAWI_DDRAWSURFACE_INT\tlpIAttached;\n} ATTACHLIST,*LPATTACHLIST;\n\n#define DDAL_IMPLICIT\t0x00000001\n\ntypedef struct _ACCESSRECTLIST {\n    struct _ACCESSRECTLIST *\tlpLink;\n    RECT\t\t\trDest;\n    LPDDRAWI_DIRECTDRAW_LCL\tlpOwner;\n    LPVOID\t\t\tlpSurfaceData;\n    DWORD\t\t\tdwFlags;\n    LPHEAPALIASINFO\t\tlpHeapAliasInfo;\n} ACCESSRECTLIST,*LPACCESSRECTLIST;\n\n#define ACCESSRECT_VRAMSTYLE\t\t0x00000001\n#define ACCESSRECT_NOTHOLDINGWIN16LOCK\t0x00000002\n#define ACCESSRECT_BROKEN\t\t0x00000004\n\ntypedef struct _DBLNODE {\n    struct _DBLNODE *\t\tnext;\n    struct _DBLNODE *\t\tprev;\n    LPDDRAWI_DDRAWSURFACE_LCL\tobject;\n    LPDDRAWI_DDRAWSURFACE_INT\tobject_int;\n} DBLNODE,*LPDBLNODE;\n\ntypedef struct _DDRAWI_DIRECTDRAW_INT {\n    LPVOID\t\t\tlpVtbl;\n    LPDDRAWI_DIRECTDRAW_LCL\tlpLcl;\n    LPDDRAWI_DIRECTDRAW_INT\tlpLink;\n    DWORD\t\t\tdwIntRefCnt;\n} DDRAWI_DIRECTDRAW_INT;\n\ntypedef struct _DDRAWI_DIRECTDRAW_LCL {\n    DWORD\t\t\tlpDDMore;\n    LPDDRAWI_DIRECTDRAW_GBL\tlpGbl;\n    DWORD\t\t\tdwUnused0;\n    DWORD\t\t\tdwLocalFlags;\n    DWORD\t\t\tdwLocalRefCnt;\n    DWORD\t\t\tdwProcessId;\n    IUnknown *\t\t\tpUnkOuter;\n    DWORD\t\t\tdwObsolete1;\n    ULONG_PTR\t\t\thWnd;\n    ULONG_PTR\t\t\thDC;\n    DWORD\t\t\tdwErrorMode;\n    LPDDRAWI_DDRAWSURFACE_INT\tlpPrimary;\n    LPDDRAWI_DDRAWSURFACE_INT\tlpCB;\n    DWORD\t\t\tdwPreferredMode;\n    /* DirectX 2 */\n    HINSTANCE\t\t\thD3DInstance;\n    IUnknown *\t\t\tpD3DIUnknown;\n    LPDDHAL_CALLBACKS\t\tlpDDCB;\n    ULONG_PTR\t\t\thDDVxd;\n    /* DirectX 5.0 */\n    DWORD\t\t\tdwAppHackFlags;\n    /* DirectX 5.0A */\n    ULONG_PTR\t\t\thFocusWnd;\n    DWORD\t\t\tdwHotTracking;\n    DWORD\t\t\tdwIMEState;\n    /* DirectX 6.0 */\n    ULONG_PTR\t\t\thWndPopup;\n    ULONG_PTR\t\t\thDD;\n    ULONG_PTR\t\t\thGammaCalibrator;\n    LPDDGAMMACALIBRATORPROC\tlpGammaCalibrator;\n} DDRAWI_DIRECTDRAW_LCL;\n\n#define DDRAWILCL_HASEXCLUSIVEMODE\t0x00000001\n#define DDRAWILCL_ISFULLSCREEN\t\t0x00000002\n#define DDRAWILCL_SETCOOPCALLED\t\t0x00000004\n#define DDRAWILCL_ACTIVEYES\t\t0x00000008\n#define DDRAWILCL_ACTIVENO\t\t0x00000010\n#define DDRAWILCL_HOOKEDHWND\t\t0x00000020\n#define DDRAWILCL_ALLOWMODEX\t\t0x00000040\n#define DDRAWILCL_V1SCLBEHAVIOUR\t0x00000080\n#define DDRAWILCL_MODEHASBEENCHANGED\t0x00000100\n#define DDRAWILCL_CREATEDWINDOW\t\t0x00000200\n#define DDRAWILCL_DIRTYDC\t\t0x00000400\n#define DDRAWILCL_DISABLEINACTIVATE\t0x00000800\n#define DDRAWILCL_CURSORCLIPPED\t\t0x00001000\n#define DDRAWILCL_EXPLICITMONITOR\t0x00002000\n#define DDRAWILCL_MULTITHREADED\t\t0x00004000\n#define DDRAWILCL_FPUSETUP\t\t0x00008000\n#define DDRAWILCL_POWEREDDOWN\t\t0x00010000\n#define DDRAWILCL_DIRECTDRAW7\t\t0x00020000\n#define DDRAWILCL_ATTEMPTEDD3DCONTEXT\t0x00040000\n#define DDRAWILCL_FPUPRESERVE\t\t0x00080000\n\ntypedef struct _DDRAWI_DIRECTDRAW_GBL {\n    DWORD\t\t\tdwRefCnt;\n    DWORD\t\t\tdwFlags;\n    FLATPTR\t\t\tfpPrimaryOrig;\n    DDCORECAPS\t\t\tddCaps;\n    DWORD\t\t\tdwInternal1;\n    DWORD\t\t\tdwUnused1[9];\n    LPDDHAL_CALLBACKS\t\tlpDDCBtmp;\n    LPDDRAWI_DDRAWSURFACE_INT\tdsList;\n    LPDDRAWI_DDRAWPALETTE_INT\tpalList;\n    LPDDRAWI_DDRAWCLIPPER_INT\tclipperList;\n    LPDDRAWI_DIRECTDRAW_GBL\tlp16DD;\n    DWORD\t\t\tdwMaxOverlays;\n    DWORD\t\t\tdwCurrOverlays;\n    DWORD\t\t\tdwMonitorFrequency;\n    DDCORECAPS\t\t\tddHELCaps;\n    DWORD\t\t\tdwUnused2[50];\n    DDCOLORKEY\t\t\tddckCKDestOverlay;\n    DDCOLORKEY\t\t\tddckCKSrcOverlay;\n    VIDMEMINFO\t\t\tvmiData;\n    LPVOID\t\t\tlpDriverHandle;\n    LPDDRAWI_DIRECTDRAW_LCL\tlpExclusiveOwner;\n    DWORD\t\t\tdwModeIndex;\n    DWORD\t\t\tdwModeIndexOrig;\n    DWORD\t\t\tdwNumFourCC;\n    LPDWORD\t\t\tlpdwFourCC;\n    DWORD\t\t\tdwNumModes;\n    LPDDHALMODEINFO\t\tlpModeInfo;\n    PROCESS_LIST\t\tplProcessList;\n    DWORD\t\t\tdwSurfaceLockCount;\n    DWORD\t\t\tdwAliasedLockCnt;\n    ULONG_PTR\t\t\tdwReserved3;\n    ULONG_PTR\t\t\thDD;\n    char\t\t\tcObsolete[12];\n    DWORD\t\t\tdwReserved1;\n    DWORD\t\t\tdwReserved2;\n    DBLNODE\t\t\tdbnOverlayRoot;\n    volatile LPWORD\t\tlpwPDeviceFlags;\n    DWORD\t\t\tdwPDevice;\n    DWORD\t\t\tdwWin16LockCnt;\n    DWORD\t\t\tdwUnused3;\n    DWORD\t\t\thInstance;\n    DWORD\t\t\tdwEvent16;\n    DWORD\t\t\tdwSaveNumModes;\n    /* DirectX 2 */\n    ULONG_PTR\t\t\tlpD3DGlobalDriverData;\n    ULONG_PTR\t\t\tlpD3DHALCallbacks;\n    DDCORECAPS\t\t\tddBothCaps;\n    /* DirectX 5.0 */\n    LPDDVIDEOPORTCAPS\t\tlpDDVideoPortCaps;\n    LPDDRAWI_DDVIDEOPORT_INT\tdvpList;\n    ULONG_PTR\t\t\tlpD3DHALCallbacks2;\n    RECT\t\t\trectDevice;\n    DWORD\t\t\tcMonitors;\n    LPVOID\t\t\tgpbmiSrc;\n    LPVOID\t\t\tgpbmiDest;\n    LPHEAPALIASINFO\t\tphaiHeapAliases;\n    ULONG_PTR\t\t\thKernelHandle;\n    ULONG_PTR\t\t\tpfnNotifyProc;\n    LPDDKERNELCAPS\t\tlpDDKernelCaps;\n    LPDDNONLOCALVIDMEMCAPS\tlpddNLVCaps;\n    LPDDNONLOCALVIDMEMCAPS\tlpddNLVHELCaps;\n    LPDDNONLOCALVIDMEMCAPS\tlpddNLVBothCaps;\n    ULONG_PTR\t\t\tlpD3DExtendedCaps;\n    /* DirectX 5.0A */\n    DWORD\t\t\tdwDOSBoxEvent;\n    RECT\t\t\trectDesktop;\n    char\t\t\tcDriverName[MAX_DRIVER_NAME];\n    /* DirectX 6.0 */\n    ULONG_PTR\t\t\tlpD3DHALCallbacks3;\n    DWORD\t\t\tdwNumZPixelFormats;\n    LPDDPIXELFORMAT\t\tlpZPixelFormats;\n    LPDDRAWI_DDMOTIONCOMP_INT\tmcList;\n    DWORD\t\t\thDDVxd;\n    DDSCAPSEX\t\t\tddsCapsMore;\n} DDRAWI_DIRECTDRAW_GBL;\n\n#define DDRAWI_VIRTUALDESKTOP\t0x00000008\n#define DDRAWI_MODEX\t\t0x00000010\n#define DDRAWI_DISPLAYDRV\t0x00000020\n#define DDRAWI_FULLSCREEN\t0x00000040\n#define DDRAWI_MODECHANGED\t0x00000080\n#define DDRAWI_NOHARDWARE\t0x00000100\n#define DDRAWI_PALETTEINIT\t0x00000200\n#define DDRAWI_NOEMULATION\t0x00000400\n/* more... */\n\n/* surfaces */\ntypedef struct _DDRAWI_DDRAWSURFACE_INT {\n    LPVOID\t\t\tlpVtbl;\n    LPDDRAWI_DDRAWSURFACE_LCL\tlpLcl;\n    LPDDRAWI_DDRAWSURFACE_INT\tlpLink;\n    DWORD\t\t\tdwIntRefCnt;\n} DDRAWI_DDRAWSURFACE_INT;\n\ntypedef struct _DDRAWI_DDRAWSURFACE_GBL {\n    DWORD\t\t\tdwRefCnt;\n    DWORD\t\t\tdwGlobalFlags;\n    union {\n\tLPACCESSRECTLIST\tlpRectList;\n\tDWORD\t\t\tdwBlockSizeY;\n    } DUMMYUNIONNAME1;\n    union {\n\tLPVMEMHEAP\t\tlpVidMemHeap;\n\tDWORD\t\t\tdwBlockSizeX;\n    } DUMMYUNIONNAME2;\n    union {\n\tLPDDRAWI_DIRECTDRAW_GBL\tlpDD;\n\tLPVOID\t\t\tlpDDHandle;\n    } DUMMYUNIONNAME3;\n    FLATPTR\t\t\tfpVidMem;\n    union {\n\tLONG\t\t\tlPitch;\n\tDWORD\t\t\tdwLinearSize;\n    } DUMMYUNIONNAME4;\n    WORD\t\t\twHeight;\n    WORD\t\t\twWidth;\n    DWORD\t\t\tdwUsageCount;\n    ULONG_PTR\t\t\tdwReserved1; /* for display driver use */\n    /* optional (defaults to primary surface pixelformat) */\n    DDPIXELFORMAT\t\tddpfSurface;\n} DDRAWI_DDRAWSURFACE_GBL;\n\n#define DDRAWISURFGBL_MEMFREE\t\t\t0x00000001\n#define DDRAWISURFGBL_SYSMEMREQUESTED\t\t0x00000002\n#define DDRAWISURFGBL_ISGDISURFACE\t\t0x00000004\n#define DDRAWISURFGBL_SOFTWAREAUTOFLIP\t\t0x00000008\n#define DDRAWISURFGBL_LOCKNOTHOLDINGWIN16LOCK\t0x00000010\n#define DDRAWISURFGBL_LOCKVRAMSTYLE\t\t0x00000020\n#define DDRAWISURFGBL_LOCKBROKEN\t\t0x00000040\n#define DDRAWISURFGBL_IMPLICITHANDLE\t\t0x00000080\n#define DDRAWISURFGBL_ISCLIENTMEM\t\t0x00000100\n#define DDRAWISURFGBL_HARDWAREOPSOURCE\t\t0x00000200\n#define DDRAWISURFGBL_HARDWAREOPDEST\t\t0x00000400\n#define DDRAWISURFGBL_HARDWAREOPSTARTED\t\t0x00000600\n#define DDRAWISURFGBL_VPORTINTERLEAVED\t\t0x00000800\n#define DDRAWISURFGBL_VPORTDATA\t\t\t0x00001000\n#define DDRAWISURFGBL_LATEALLOCATELINEAR\t0x00002000\n#define DDRAWISURFGBL_SYSMEMEXECUTEBUFFER\t0x00004000\n#define DDRAWISURFGBL_FASTLOCKHELD\t\t0x00008000\n#define DDRAWISURFGBL_READONLYLOCKHELD\t\t0x00010000\n\ntypedef struct _DDRAWI_DDRAWSURFACE_GBL_MORE {\n    DWORD\t\t\tdwSize;\n    union {\n\tDWORD\t\t\tdwPhysicalPageTable;\n\tFLATPTR\t\t\tfpPhysicalVidMem;\n    } DUMMYUNIONNAME1;\n    LPDWORD\t\t\tpPageTable;\n    DWORD\t\t\tcPages;\n    ULONG_PTR\t\t\tdwSavedDCContext;\n    FLATPTR\t\t\tfpAliasedVidMem;\n    ULONG_PTR\t\t\tdwDriverReserved;\n    ULONG_PTR\t\t\tdwHELReserved;\n    DWORD\t\t\tcPageUnlocks;\n    ULONG_PTR\t\t\thKernelSurface;\n    DWORD\t\t\tdwKernelRefCnt;\n    LPDDCOLORCONTROL\t\tlpColorInfo;\n    FLATPTR\t\t\tfpNTAlias;\n    DWORD\t\t\tdwContentsStamp;\n    LPVOID\t\t\tlpvUnswappedDriverReserved;\n    LPVOID\t\t\tlpDDRAWReserved2;\n    DWORD\t\t\tdwDDRAWReserved1;\n    DWORD\t\t\tdwDDRAWReserved2;\n    FLATPTR\t\t\tfpAliasOfVidMem;\n} DDRAWI_DDRAWSURFACE_GBL_MORE;\n\n/* the MS version of this macro was somewhat obfuscated and unreadable\n * (possibly because of mediocre MS coders)... so I simplified it...\n * (and so I commit no copyright violations either, hah) */\n#define GET_LPDDRAWSURFACE_GBL_MORE(psurf_gbl) \\\n    (*(((LPDDRAWI_DDRAWSURFACE_GBL_MORE *)(psurf_gbl)) - 1))\n\ntypedef struct _DDRAWI_DDRAWSURFACE_MORE {\n    DWORD\t\t\tdwSize;\n    IUNKNOWN_LIST *\t\tlpIUnknowns;\n    LPDDRAWI_DIRECTDRAW_LCL\tlpDD_lcl;\n    DWORD\t\t\tdwPageLockCount;\n    DWORD\t\t\tdwBytesAllocated;\n    LPDDRAWI_DIRECTDRAW_INT\tlpDD_int;\n    DWORD\t\t\tdwMipMapCount;\n    LPDDRAWI_DDRAWCLIPPER_INT\tlpDDIClipper;\n    /* DirectX 5.0 */\n    LPHEAPALIASINFO\t\tlpHeapAliasInfo;\n    DWORD\t\t\tdwOverlayFlags;\n    VOID\t\t\t*rgjunc;\n    LPDDRAWI_DDVIDEOPORT_LCL\tlpVideoPort;\n    LPDDOVERLAYFX\t\tlpddOverlayFX;\n    DDSCAPSEX\t\t\tddsCapsEx;\n    DWORD\t\t\tdwTextureStage;\n    LPVOID\t\t\tlpDDRAWReserved;\n    LPVOID\t\t\tlpDDRAWReserved2;\n    LPVOID\t\t\tlpDDrawReserved3;\n    DWORD\t\t\tdwDDrawReserved4;\n    LPVOID\t\t\tlpDDrawReserved5;\n    LPDWORD\t\t\tlpGammaRamp;\n    LPDWORD\t\t\tlpOriginalGammaRamp;\n    LPVOID\t\t\tlpDDrawReserved6;\n    DWORD\t\t\tdwSurfaceHandle;\n    DWORD\t\t\tqwDDrawReserved8[2];\n    LPVOID\t\t\tlpDDrawReserved9;\n    DWORD\t\t\tcSurfaces;\n    LPDDSURFACEDESC2\t\tpCreatedDDSurfaceDesc2;\n    LPDDRAWI_DDRAWSURFACE_LCL\t*slist;\n    DWORD\t\t\tdwFVF;\n    LPVOID\t\t\tlpVB;\n} DDRAWI_DDRAWSURFACE_MORE;\n\ntypedef struct _DDRAWI_DDRAWSURFACE_LCL {\n    LPDDRAWI_DDRAWSURFACE_MORE\tlpSurfMore;\n    LPDDRAWI_DDRAWSURFACE_GBL\tlpGbl;\n    ULONG_PTR\t\t\thDDSurface;\n    LPATTACHLIST\t\tlpAttachList;\n    LPATTACHLIST\t\tlpAttachListFrom;\n    DWORD\t\t\tdwLocalRefCnt;\n    DWORD\t\t\tdwProcessId;\n    DWORD\t\t\tdwFlags;\n    DDSCAPS\t\t\tddsCaps;\n    LPDDRAWI_DDRAWPALETTE_INT\tlpDDPalette;\n    LPDDRAWI_DDRAWCLIPPER_LCL\tlpDDClipper;\n    DWORD\t\t\tdwModeCreatedIn;\n    DWORD\t\t\tdwBackBufferCount;\n    DDCOLORKEY\t\t\tddckCKDestBlt;\n    DDCOLORKEY\t\t\tddckCKSrcBlt;\n    ULONG_PTR\t\t\thDC;\n    ULONG_PTR\t\t\tdwReserved1; /* for display driver use */\n    /* overlays only */\n    DDCOLORKEY\t\t\tddckCKSrcOverlay;\n    DDCOLORKEY\t\t\tddckCKDestOverlay;\n    LPDDRAWI_DDRAWSURFACE_INT\tlpSurfaceOverlaying;\n    DBLNODE\t\t\tdbnOverlayNode;\n    RECT\t\t\trcOverlaySrc;\n    RECT\t\t\trcOverlayDest;\n    DWORD\t\t\tdwClrXparent;\n    DWORD\t\t\tdwAlpha;\n    LONG\t\t\tlOverlayX;\n    LONG\t\t\tlOverlayY;\n} DDRAWI_DDRAWSURFACE_LCL;\n\n#define DDRAWISURF_ATTACHED\t\t0x00000001\n#define DDRAWISURF_IMPLICITCREATE\t0x00000002\n#define DDRAWISURF_ISFREE\t\t0x00000004\n#define DDRAWISURF_ATTACHED_FROM\t0x00000008\n#define DDRAWISURF_IMPLICITROOT\t\t0x00000010\n#define DDRAWISURF_PARTOFPRIMARYCHAIN\t0x00000020\n#define DDRAWISURF_DATAISALIASED\t0x00000040\n#define DDRAWISURF_HASDC\t\t0x00000080\n#define DDRAWISURF_HASCKEYDESTOVERLAY\t0x00000100\n#define DDRAWISURF_HASCKEYDESTBLT\t0x00000200\n#define DDRAWISURF_HASCKEYSRCOVERLAY\t0x00000400\n#define DDRAWISURF_HASCKEYSRCBLT\t0x00000800\n#define DDRAWISURF_LOCKEXCLUDEDCURSOR\t0x00001000\n#define DDRAWISURF_HASPIXELFORMAT\t0x00002000\n#define DDRAWISURF_HASOVERLAYDATA\t0x00004000\n#define DDRAWISURF_SETGAMMA\t\t0x00008000\n/* more... */\n#define DDRAWISURF_INVALID\t\t0x10000000\n\n/* palettes */\ntypedef struct _DDRAWI_DDRAWPALETTE_INT {\n    LPVOID\t\t\tlpVtbl;\n    LPDDRAWI_DDRAWPALETTE_LCL\tlpLcl;\n    LPDDRAWI_DDRAWPALETTE_INT\tlpLink;\n    DWORD\t\t\tdwIntRefCnt;\n} DDRAWI_DDRAWPALETTE_INT;\n\ntypedef struct _DDRAWI_DDRAWPALETTE_GBL {\n    DWORD\t\t\tdwRefCnt;\n    DWORD\t\t\tdwFlags;\n    LPDDRAWI_DIRECTDRAW_LCL\tlpDD_lcl;\n    DWORD\t\t\tdwProcessId;\n    LPPALETTEENTRY\t\tlpColorTable;\n    union {\n\tULONG_PTR\t\tdwReserved1; /* for display driver use */\n\tHPALETTE\t\thHELGDIPalette;\n    } DUMMYUNIONNAME1;\n    /* DirectX 5.0 */\n    DWORD\t\t\tdwDriverReserved;\n    DWORD\t\t\tdwContentsStamp;\n    /* DirectX 6.0 */\n    DWORD\t\t\tdwSaveStamp;\n    /* DirectX 7.0 */\n    DWORD\t\t\tdwHandle;\n} DDRAWI_DDRAWPALETTE_GBL;\n\n#define DDRAWIPAL_256\t\t0x00000001\n#define DDRAWIPAL_16\t\t0x00000002\n#define DDRAWIPAL_GDI\t\t0x00000004\n#define DDRAWIPAL_STORED_8\t0x00000008\n#define DDRAWIPAL_STORED_16\t0x00000010\n#define DDRAWIPAL_STORED_24\t0x00000020\n#define DDRAWIPAL_EXCLUSIVE\t0x00000040\n#define DDRAWIPAL_INHEL\t\t0x00000080\n#define DDRAWIPAL_DIRTY\t\t0x00000100\n#define DDRAWIPAL_ALLOW256\t0x00000200\n#define DDRAWIPAL_4\t\t0x00000400\n#define DDRAWIPAL_2\t\t0x00000800\n#define DDRAWIPAL_STORED_8INDEX\t0x00001000\n#define DDRAWIPAL_ALPHA\t\t0x00002000\n\ntypedef struct _DDRAWI_DDRAWPALETTE_LCL {\n    DWORD\t\t\tlpPalMore;\n    LPDDRAWI_DDRAWPALETTE_GBL\tlpGbl;\n    ULONG_PTR\t\t\tdwUnused0;\n    DWORD\t\t\tdwLocalRefCnt;\n    IUnknown *\t\t\tpUnkOuter;\n    LPDDRAWI_DIRECTDRAW_LCL\tlpDD_lcl;\n    ULONG_PTR\t\t\tdwReserved1;\n    /* DirectX 6.0 */\n    ULONG_PTR\t\t\tdwDDRAWReserved1;\n    ULONG_PTR\t\t\tdwDDRAWReserved2;\n    ULONG_PTR\t\t\tdwDDRAWReserved3;\n} DDRAWI_DDRAWPALETTE_LCL;\n\n#ifdef __cplusplus\n} /* extern \"C\" */\n#endif\n\n#endif /* __WINE_DDRAWI_H */\n"
  },
  {
    "path": "Include/dds.h",
    "content": "//--------------------------------------------------------------------------------------\n// dds.h\n//\n// This header defines constants and structures that are useful when parsing \n// DDS files.  DDS files were originally designed to use several structures\n// and constants that are native to DirectDraw and are defined in ddraw.h,\n// such as DDSURFACEDESC2 and DDSCAPS2.  This file defines similar \n// (compatible) constants and structures so that one can use DDS files \n// without needing to include ddraw.h.\n//\n// THIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF\n// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO\n// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A\n// PARTICULAR PURPOSE.\n//\n// Copyright (c) Microsoft Corporation. All rights reserved.\n//\n// http://go.microsoft.com/fwlink/?LinkId=248926\n//--------------------------------------------------------------------------------------\n\n#pragma once\n\n#if defined(_XBOX_ONE) && defined(_TITLE)\n#include <d3d11_x.h>\n#else\n#include <dxgiformat.h>\n#endif\n\n// VS 2010's stdint.h conflicts with intsafe.h\n#pragma warning(push)\n#pragma warning(disable : 4005)\n#include <stdint.h>\n#pragma warning(pop)\n\nnamespace DirectX\n{\n\n#pragma pack(push,1)\n\nconst uint32_t DDS_MAGIC = 0x20534444; // \"DDS \"\n\nstruct DDS_PIXELFORMAT\n{\n    uint32_t    dwSize;\n    uint32_t    dwFlags;\n    uint32_t    dwFourCC;\n    uint32_t    dwRGBBitCount;\n    uint32_t    dwRBitMask;\n    uint32_t    dwGBitMask;\n    uint32_t    dwBBitMask;\n    uint32_t    dwABitMask;\n};\n\n#define DDS_FOURCC      0x00000004  // DDPF_FOURCC\n#define DDS_RGB         0x00000040  // DDPF_RGB\n#define DDS_RGBA        0x00000041  // DDPF_RGB | DDPF_ALPHAPIXELS\n#define DDS_LUMINANCE   0x00020000  // DDPF_LUMINANCE\n#define DDS_LUMINANCEA  0x00020001  // DDPF_LUMINANCE | DDPF_ALPHAPIXELS\n#define DDS_ALPHA       0x00000002  // DDPF_ALPHA\n#define DDS_PAL8        0x00000020  // DDPF_PALETTEINDEXED8\n\n#ifndef MAKEFOURCC\n    #define MAKEFOURCC(ch0, ch1, ch2, ch3)                              \\\n                ((uint32_t)(uint8_t)(ch0) | ((uint32_t)(uint8_t)(ch1) << 8) |       \\\n                ((uint32_t)(uint8_t)(ch2) << 16) | ((uint32_t)(uint8_t)(ch3) << 24 ))\n#endif /* defined(MAKEFOURCC) */\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT1 =\n    { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','1'), 0, 0, 0, 0, 0 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT2 =\n    { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','2'), 0, 0, 0, 0, 0 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT3 =\n    { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','3'), 0, 0, 0, 0, 0 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT4 =\n    { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','4'), 0, 0, 0, 0, 0 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DXT5 =\n    { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','T','5'), 0, 0, 0, 0, 0 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_UNORM =\n    { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','U'), 0, 0, 0, 0, 0 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC4_SNORM =\n    { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','4','S'), 0, 0, 0, 0, 0 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_UNORM =\n    { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','U'), 0, 0, 0, 0, 0 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_BC5_SNORM =\n    { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('B','C','5','S'), 0, 0, 0, 0, 0 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8_B8G8 =\n    { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('R','G','B','G'), 0, 0, 0, 0, 0 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G8R8_G8B8 =\n    { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('G','R','G','B'), 0, 0, 0, 0, 0 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_YUY2 =\n    { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('Y','U','Y','2'), 0, 0, 0, 0, 0 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8R8G8B8 =\n    { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8R8G8B8 =\n    { sizeof(DDS_PIXELFORMAT), DDS_RGB,  0, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8B8G8R8 =\n    { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_X8B8G8R8 =\n    { sizeof(DDS_PIXELFORMAT), DDS_RGB,  0, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_G16R16 =\n    { sizeof(DDS_PIXELFORMAT), DDS_RGB,  0, 32, 0x0000ffff, 0xffff0000, 0x00000000, 0x00000000 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R5G6B5 =\n    { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 16, 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A1R5G5B5 =\n    { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00007c00, 0x000003e0, 0x0000001f, 0x00008000 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A4R4G4B4 =\n    { sizeof(DDS_PIXELFORMAT), DDS_RGBA, 0, 16, 0x00000f00, 0x000000f0, 0x0000000f, 0x0000f000 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_R8G8B8 =\n    { sizeof(DDS_PIXELFORMAT), DDS_RGB, 0, 24, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L8 =\n    { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0,  8, 0xff, 0x00, 0x00, 0x00 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_L16 =\n    { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCE, 0, 16, 0xffff, 0x0000, 0x0000, 0x0000 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8L8 =\n    { sizeof(DDS_PIXELFORMAT), DDS_LUMINANCEA, 0, 16, 0x00ff, 0x0000, 0x0000, 0xff00 };\n\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_A8 =\n    { sizeof(DDS_PIXELFORMAT), DDS_ALPHA, 0, 8, 0x00, 0x00, 0x00, 0xff };\n\n// D3DFMT_A2R10G10B10/D3DFMT_A2B10G10R10 should be written using DX10 extension to avoid D3DX 10:10:10:2 reversal issue\n\n// This indicates the DDS_HEADER_DXT10 extension is present (the format is in dxgiFormat)\nextern __declspec(selectany) const DDS_PIXELFORMAT DDSPF_DX10 =\n    { sizeof(DDS_PIXELFORMAT), DDS_FOURCC, MAKEFOURCC('D','X','1','0'), 0, 0, 0, 0, 0 };\n\n#define DDS_HEADER_FLAGS_TEXTURE        0x00001007  // DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT \n#define DDS_HEADER_FLAGS_MIPMAP         0x00020000  // DDSD_MIPMAPCOUNT\n#define DDS_HEADER_FLAGS_VOLUME         0x00800000  // DDSD_DEPTH\n#define DDS_HEADER_FLAGS_PITCH          0x00000008  // DDSD_PITCH\n#define DDS_HEADER_FLAGS_LINEARSIZE     0x00080000  // DDSD_LINEARSIZE\n\n#define DDS_HEIGHT 0x00000002 // DDSD_HEIGHT\n#define DDS_WIDTH  0x00000004 // DDSD_WIDTH\n\n#define DDS_SURFACE_FLAGS_TEXTURE 0x00001000 // DDSCAPS_TEXTURE\n#define DDS_SURFACE_FLAGS_MIPMAP  0x00400008 // DDSCAPS_COMPLEX | DDSCAPS_MIPMAP\n#define DDS_SURFACE_FLAGS_CUBEMAP 0x00000008 // DDSCAPS_COMPLEX\n\n#define DDS_CUBEMAP_POSITIVEX 0x00000600 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX\n#define DDS_CUBEMAP_NEGATIVEX 0x00000a00 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEX\n#define DDS_CUBEMAP_POSITIVEY 0x00001200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEY\n#define DDS_CUBEMAP_NEGATIVEY 0x00002200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEY\n#define DDS_CUBEMAP_POSITIVEZ 0x00004200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEZ\n#define DDS_CUBEMAP_NEGATIVEZ 0x00008200 // DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEZ\n\n#define DDS_CUBEMAP_ALLFACES ( DDS_CUBEMAP_POSITIVEX | DDS_CUBEMAP_NEGATIVEX |\\\n                               DDS_CUBEMAP_POSITIVEY | DDS_CUBEMAP_NEGATIVEY |\\\n                               DDS_CUBEMAP_POSITIVEZ | DDS_CUBEMAP_NEGATIVEZ )\n\n#define DDS_CUBEMAP 0x00000200 // DDSCAPS2_CUBEMAP\n\n#define DDS_FLAGS_VOLUME 0x00200000 // DDSCAPS2_VOLUME\n\n// Subset here matches D3D10_RESOURCE_DIMENSION and D3D11_RESOURCE_DIMENSION\nenum DDS_RESOURCE_DIMENSION\n{\n    DDS_DIMENSION_TEXTURE1D\t= 2,\n    DDS_DIMENSION_TEXTURE2D\t= 3,\n    DDS_DIMENSION_TEXTURE3D\t= 4,\n};\n\n// Subset here matches D3D10_RESOURCE_MISC_FLAG and D3D11_RESOURCE_MISC_FLAG\nenum DDS_RESOURCE_MISC_FLAG\n{\n    DDS_RESOURCE_MISC_TEXTURECUBE = 0x4L,\n};\n\nenum DDS_MISC_FLAGS2\n{\n    DDS_MISC_FLAGS2_ALPHA_MODE_MASK = 0x7L,\n};\n\nenum DDS_ALPHA_MODE\n{\n    DDS_ALPHA_MODE_UNKNOWN       = 0,\n    DDS_ALPHA_MODE_STRAIGHT      = 1,\n    DDS_ALPHA_MODE_PREMULTIPLIED = 2,\n    DDS_ALPHA_MODE_OPAQUE        = 3,\n    DDS_ALPHA_MODE_CUSTOM        = 4,\n};\n\nstruct DDS_HEADER\n{\n    uint32_t    dwSize;\n    uint32_t    dwFlags;\n    uint32_t    dwHeight;\n    uint32_t    dwWidth;\n    uint32_t    dwPitchOrLinearSize;\n    uint32_t    dwDepth; // only if DDS_HEADER_FLAGS_VOLUME is set in dwFlags\n    uint32_t    dwMipMapCount;\n    uint32_t    dwReserved1[11];\n    DDS_PIXELFORMAT ddspf;\n    uint32_t    dwCaps;\n    uint32_t    dwCaps2;\n    uint32_t    dwCaps3;\n    uint32_t    dwCaps4;\n    uint32_t    dwReserved2;\n};\n\nstruct DDS_HEADER_DXT10\n{\n    DXGI_FORMAT dxgiFormat;\n    uint32_t    resourceDimension;\n    uint32_t    miscFlag; // see DDS_RESOURCE_MISC_FLAG\n    uint32_t    arraySize;\n    uint32_t    miscFlags2; // see DDS_MISC_FLAGS2\n};\n\n#pragma pack(pop)\n\nstatic_assert( sizeof(DDS_HEADER) == 124, \"DDS Header size mismatch\" );\nstatic_assert( sizeof(DDS_HEADER_DXT10) == 20, \"DDS DX10 Extended Header size mismatch\");\n\n}; // namespace\n"
  },
  {
    "path": "Include/dinput.h",
    "content": "/****************************************************************************\n *\n *  Copyright (C) 1996-2000 Microsoft Corporation.  All Rights Reserved.\n *\n *  File:       dinput.h\n *  Content:    DirectInput include file\n *\n ****************************************************************************/\n\n#ifndef __DINPUT_INCLUDED__\n#define __DINPUT_INCLUDED__\n\n#ifndef DIJ_RINGZERO\n\n#ifdef _WIN32\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n#endif\n\n#endif /* DIJ_RINGZERO */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n\n\n/*\n *  To build applications for older versions of DirectInput\n *\n *  #define DIRECTINPUT_VERSION [ 0x0300 | 0x0500 | 0x0700 ]\n *\n *  before #include <dinput.h>.  By default, #include <dinput.h>\n *  will produce a DirectX 8-compatible header file.\n *\n */\n\n#define DIRECTINPUT_HEADER_VERSION  0x0800\n#ifndef DIRECTINPUT_VERSION\n#define DIRECTINPUT_VERSION         DIRECTINPUT_HEADER_VERSION\n#pragma message(__FILE__ \": DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800\")\n#endif\n\n#ifndef DIJ_RINGZERO\n\n/****************************************************************************\n *\n *      Class IDs\n *\n ****************************************************************************/\n\nDEFINE_GUID(CLSID_DirectInput,       0x25E609E0,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(CLSID_DirectInputDevice, 0x25E609E1,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\n\nDEFINE_GUID(CLSID_DirectInput8,      0x25E609E4,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(CLSID_DirectInputDevice8,0x25E609E5,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\n\n/****************************************************************************\n *\n *      Interfaces\n *\n ****************************************************************************/\n\nDEFINE_GUID(IID_IDirectInputA,     0x89521360,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInputW,     0x89521361,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInput2A,    0x5944E662,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInput2W,    0x5944E663,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInput7A,    0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);\nDEFINE_GUID(IID_IDirectInput7W,    0x9A4CB685,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);\nDEFINE_GUID(IID_IDirectInput8A,    0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00);\nDEFINE_GUID(IID_IDirectInput8W,    0xBF798031,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00);\nDEFINE_GUID(IID_IDirectInputDeviceA, 0x5944E680,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInputDeviceW, 0x5944E681,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInputDevice2A,0x5944E682,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInputDevice2W,0x5944E683,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInputDevice7A,0x57D7C6BC,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);\nDEFINE_GUID(IID_IDirectInputDevice7W,0x57D7C6BD,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);\nDEFINE_GUID(IID_IDirectInputDevice8A,0x54D41080,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79);\nDEFINE_GUID(IID_IDirectInputDevice8W,0x54D41081,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79);\nDEFINE_GUID(IID_IDirectInputEffect,  0xE7E1F7C0,0x88D2,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\n\n/****************************************************************************\n *\n *      Predefined object types\n *\n ****************************************************************************/\n\nDEFINE_GUID(GUID_XAxis,   0xA36D02E0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_YAxis,   0xA36D02E1,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_ZAxis,   0xA36D02E2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_RxAxis,  0xA36D02F4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_RyAxis,  0xA36D02F5,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_RzAxis,  0xA36D02E3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_Slider,  0xA36D02E4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\n\nDEFINE_GUID(GUID_Button,  0xA36D02F0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_Key,     0x55728220,0xD33C,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\n\nDEFINE_GUID(GUID_POV,     0xA36D02F2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\n\nDEFINE_GUID(GUID_Unknown, 0xA36D02F3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\n\n/****************************************************************************\n *\n *      Predefined product GUIDs\n *\n ****************************************************************************/\n\nDEFINE_GUID(GUID_SysMouse,   0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_SysKeyboard,0x6F1D2B61,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_Joystick   ,0x6F1D2B70,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_SysMouseEm, 0x6F1D2B80,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_SysMouseEm2,0x6F1D2B81,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_SysKeyboardEm, 0x6F1D2B82,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(GUID_SysKeyboardEm2,0x6F1D2B83,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\n\n/****************************************************************************\n *\n *      Predefined force feedback effects\n *\n ****************************************************************************/\n\nDEFINE_GUID(GUID_ConstantForce, 0x13541C20,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_RampForce,     0x13541C21,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_Square,        0x13541C22,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_Sine,          0x13541C23,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_Triangle,      0x13541C24,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_SawtoothUp,    0x13541C25,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_SawtoothDown,  0x13541C26,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_Spring,        0x13541C27,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_Damper,        0x13541C28,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_Inertia,       0x13541C29,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_Friction,      0x13541C2A,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\nDEFINE_GUID(GUID_CustomForce,   0x13541C2B,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\n\n#endif /* DIJ_RINGZERO */\n\n/****************************************************************************\n *\n *      Interfaces and Structures...\n *\n ****************************************************************************/\n\n#if(DIRECTINPUT_VERSION >= 0x0500)\n\n/****************************************************************************\n *\n *      IDirectInputEffect\n *\n ****************************************************************************/\n\n#define DIEFT_ALL                   0x00000000\n\n#define DIEFT_CONSTANTFORCE         0x00000001\n#define DIEFT_RAMPFORCE             0x00000002\n#define DIEFT_PERIODIC              0x00000003\n#define DIEFT_CONDITION             0x00000004\n#define DIEFT_CUSTOMFORCE           0x00000005\n#define DIEFT_HARDWARE              0x000000FF\n#define DIEFT_FFATTACK              0x00000200\n#define DIEFT_FFFADE                0x00000400\n#define DIEFT_SATURATION            0x00000800\n#define DIEFT_POSNEGCOEFFICIENTS    0x00001000\n#define DIEFT_POSNEGSATURATION      0x00002000\n#define DIEFT_DEADBAND              0x00004000\n#define DIEFT_STARTDELAY            0x00008000\n#define DIEFT_GETTYPE(n)            LOBYTE(n)\n\n#define DI_DEGREES                  100\n#define DI_FFNOMINALMAX             10000\n#define DI_SECONDS                  1000000\n\ntypedef struct DICONSTANTFORCE {\n    LONG  lMagnitude;\n} DICONSTANTFORCE, *LPDICONSTANTFORCE;\ntypedef const DICONSTANTFORCE *LPCDICONSTANTFORCE;\n\ntypedef struct DIRAMPFORCE {\n    LONG  lStart;\n    LONG  lEnd;\n} DIRAMPFORCE, *LPDIRAMPFORCE;\ntypedef const DIRAMPFORCE *LPCDIRAMPFORCE;\n\ntypedef struct DIPERIODIC {\n    DWORD dwMagnitude;\n    LONG  lOffset;\n    DWORD dwPhase;\n    DWORD dwPeriod;\n} DIPERIODIC, *LPDIPERIODIC;\ntypedef const DIPERIODIC *LPCDIPERIODIC;\n\ntypedef struct DICONDITION {\n    LONG  lOffset;\n    LONG  lPositiveCoefficient;\n    LONG  lNegativeCoefficient;\n    DWORD dwPositiveSaturation;\n    DWORD dwNegativeSaturation;\n    LONG  lDeadBand;\n} DICONDITION, *LPDICONDITION;\ntypedef const DICONDITION *LPCDICONDITION;\n\ntypedef struct DICUSTOMFORCE {\n    DWORD cChannels;\n    DWORD dwSamplePeriod;\n    DWORD cSamples;\n    LPLONG rglForceData;\n} DICUSTOMFORCE, *LPDICUSTOMFORCE;\ntypedef const DICUSTOMFORCE *LPCDICUSTOMFORCE;\n\n\ntypedef struct DIENVELOPE {\n    DWORD dwSize;                   /* sizeof(DIENVELOPE)   */\n    DWORD dwAttackLevel;\n    DWORD dwAttackTime;             /* Microseconds         */\n    DWORD dwFadeLevel;\n    DWORD dwFadeTime;               /* Microseconds         */\n} DIENVELOPE, *LPDIENVELOPE;\ntypedef const DIENVELOPE *LPCDIENVELOPE;\n\n\n/* This structure is defined for DirectX 5.0 compatibility */\ntypedef struct DIEFFECT_DX5 {\n    DWORD dwSize;                   /* sizeof(DIEFFECT_DX5) */\n    DWORD dwFlags;                  /* DIEFF_*              */\n    DWORD dwDuration;               /* Microseconds         */\n    DWORD dwSamplePeriod;           /* Microseconds         */\n    DWORD dwGain;\n    DWORD dwTriggerButton;          /* or DIEB_NOTRIGGER    */\n    DWORD dwTriggerRepeatInterval;  /* Microseconds         */\n    DWORD cAxes;                    /* Number of axes       */\n    LPDWORD rgdwAxes;               /* Array of axes        */\n    LPLONG rglDirection;            /* Array of directions  */\n    LPDIENVELOPE lpEnvelope;        /* Optional             */\n    DWORD cbTypeSpecificParams;     /* Size of params       */\n    LPVOID lpvTypeSpecificParams;   /* Pointer to params    */\n} DIEFFECT_DX5, *LPDIEFFECT_DX5;\ntypedef const DIEFFECT_DX5 *LPCDIEFFECT_DX5;\n\ntypedef struct DIEFFECT {\n    DWORD dwSize;                   /* sizeof(DIEFFECT)     */\n    DWORD dwFlags;                  /* DIEFF_*              */\n    DWORD dwDuration;               /* Microseconds         */\n    DWORD dwSamplePeriod;           /* Microseconds         */\n    DWORD dwGain;\n    DWORD dwTriggerButton;          /* or DIEB_NOTRIGGER    */\n    DWORD dwTriggerRepeatInterval;  /* Microseconds         */\n    DWORD cAxes;                    /* Number of axes       */\n    LPDWORD rgdwAxes;               /* Array of axes        */\n    LPLONG rglDirection;            /* Array of directions  */\n    LPDIENVELOPE lpEnvelope;        /* Optional             */\n    DWORD cbTypeSpecificParams;     /* Size of params       */\n    LPVOID lpvTypeSpecificParams;   /* Pointer to params    */\n#if(DIRECTINPUT_VERSION >= 0x0600)\n    DWORD  dwStartDelay;            /* Microseconds         */\n#endif /* DIRECTINPUT_VERSION >= 0x0600 */\n} DIEFFECT, *LPDIEFFECT;\ntypedef DIEFFECT DIEFFECT_DX6;\ntypedef LPDIEFFECT LPDIEFFECT_DX6;\ntypedef const DIEFFECT *LPCDIEFFECT;\n\n\n#if(DIRECTINPUT_VERSION >= 0x0700)\n#ifndef DIJ_RINGZERO\ntypedef struct DIFILEEFFECT{\n    DWORD       dwSize;\n    GUID        GuidEffect;\n    LPCDIEFFECT lpDiEffect;\n    CHAR        szFriendlyName[MAX_PATH];\n}DIFILEEFFECT, *LPDIFILEEFFECT;\ntypedef const DIFILEEFFECT *LPCDIFILEEFFECT;\ntypedef BOOL (FAR PASCAL * LPDIENUMEFFECTSINFILECALLBACK)(LPCDIFILEEFFECT , LPVOID);\n#endif /* DIJ_RINGZERO */\n#endif /* DIRECTINPUT_VERSION >= 0x0700 */\n\n#define DIEFF_OBJECTIDS             0x00000001\n#define DIEFF_OBJECTOFFSETS         0x00000002\n#define DIEFF_CARTESIAN             0x00000010\n#define DIEFF_POLAR                 0x00000020\n#define DIEFF_SPHERICAL             0x00000040\n\n#define DIEP_DURATION               0x00000001\n#define DIEP_SAMPLEPERIOD           0x00000002\n#define DIEP_GAIN                   0x00000004\n#define DIEP_TRIGGERBUTTON          0x00000008\n#define DIEP_TRIGGERREPEATINTERVAL  0x00000010\n#define DIEP_AXES                   0x00000020\n#define DIEP_DIRECTION              0x00000040\n#define DIEP_ENVELOPE               0x00000080\n#define DIEP_TYPESPECIFICPARAMS     0x00000100\n#if(DIRECTINPUT_VERSION >= 0x0600)\n#define DIEP_STARTDELAY             0x00000200\n#define DIEP_ALLPARAMS_DX5          0x000001FF\n#define DIEP_ALLPARAMS              0x000003FF\n#else /* DIRECTINPUT_VERSION < 0x0600 */\n#define DIEP_ALLPARAMS              0x000001FF\n#endif /* DIRECTINPUT_VERSION < 0x0600 */\n#define DIEP_START                  0x20000000\n#define DIEP_NORESTART              0x40000000\n#define DIEP_NODOWNLOAD             0x80000000\n#define DIEB_NOTRIGGER              0xFFFFFFFF\n\n#define DIES_SOLO                   0x00000001\n#define DIES_NODOWNLOAD             0x80000000\n\n#define DIEGES_PLAYING              0x00000001\n#define DIEGES_EMULATED             0x00000002\n\ntypedef struct DIEFFESCAPE {\n    DWORD   dwSize;\n    DWORD   dwCommand;\n    LPVOID  lpvInBuffer;\n    DWORD   cbInBuffer;\n    LPVOID  lpvOutBuffer;\n    DWORD   cbOutBuffer;\n} DIEFFESCAPE, *LPDIEFFESCAPE;\n\n#ifndef DIJ_RINGZERO\n\n#undef INTERFACE\n#define INTERFACE IDirectInputEffect\n\nDECLARE_INTERFACE_(IDirectInputEffect, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInputEffect methods ***/\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;\n    STDMETHOD(GetEffectGuid)(THIS_ LPGUID) PURE;\n    STDMETHOD(GetParameters)(THIS_ LPDIEFFECT,DWORD) PURE;\n    STDMETHOD(SetParameters)(THIS_ LPCDIEFFECT,DWORD) PURE;\n    STDMETHOD(Start)(THIS_ DWORD,DWORD) PURE;\n    STDMETHOD(Stop)(THIS) PURE;\n    STDMETHOD(GetEffectStatus)(THIS_ LPDWORD) PURE;\n    STDMETHOD(Download)(THIS) PURE;\n    STDMETHOD(Unload)(THIS) PURE;\n    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;\n};\n\ntypedef struct IDirectInputEffect *LPDIRECTINPUTEFFECT;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectInputEffect_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInputEffect_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirectInputEffect_Release(p) (p)->lpVtbl->Release(p)\n#define IDirectInputEffect_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)\n#define IDirectInputEffect_GetEffectGuid(p,a) (p)->lpVtbl->GetEffectGuid(p,a)\n#define IDirectInputEffect_GetParameters(p,a,b) (p)->lpVtbl->GetParameters(p,a,b)\n#define IDirectInputEffect_SetParameters(p,a,b) (p)->lpVtbl->SetParameters(p,a,b)\n#define IDirectInputEffect_Start(p,a,b) (p)->lpVtbl->Start(p,a,b)\n#define IDirectInputEffect_Stop(p) (p)->lpVtbl->Stop(p)\n#define IDirectInputEffect_GetEffectStatus(p,a) (p)->lpVtbl->GetEffectStatus(p,a)\n#define IDirectInputEffect_Download(p) (p)->lpVtbl->Download(p)\n#define IDirectInputEffect_Unload(p) (p)->lpVtbl->Unload(p)\n#define IDirectInputEffect_Escape(p,a) (p)->lpVtbl->Escape(p,a)\n#else\n#define IDirectInputEffect_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInputEffect_AddRef(p) (p)->AddRef()\n#define IDirectInputEffect_Release(p) (p)->Release()\n#define IDirectInputEffect_Initialize(p,a,b,c) (p)->Initialize(a,b,c)\n#define IDirectInputEffect_GetEffectGuid(p,a) (p)->GetEffectGuid(a)\n#define IDirectInputEffect_GetParameters(p,a,b) (p)->GetParameters(a,b)\n#define IDirectInputEffect_SetParameters(p,a,b) (p)->SetParameters(a,b)\n#define IDirectInputEffect_Start(p,a,b) (p)->Start(a,b)\n#define IDirectInputEffect_Stop(p) (p)->Stop()\n#define IDirectInputEffect_GetEffectStatus(p,a) (p)->GetEffectStatus(a)\n#define IDirectInputEffect_Download(p) (p)->Download()\n#define IDirectInputEffect_Unload(p) (p)->Unload()\n#define IDirectInputEffect_Escape(p,a) (p)->Escape(a)\n#endif\n\n#endif /* DIJ_RINGZERO */\n\n#endif /* DIRECTINPUT_VERSION >= 0x0500 */\n\n/****************************************************************************\n *\n *      IDirectInputDevice\n *\n ****************************************************************************/\n\n#if DIRECTINPUT_VERSION <= 0x700\n#define DIDEVTYPE_DEVICE        1\n#define DIDEVTYPE_MOUSE         2\n#define DIDEVTYPE_KEYBOARD      3\n#define DIDEVTYPE_JOYSTICK      4\n\n#else\n#define DI8DEVCLASS_ALL             0\n#define DI8DEVCLASS_DEVICE          1\n#define DI8DEVCLASS_POINTER         2\n#define DI8DEVCLASS_KEYBOARD        3\n#define DI8DEVCLASS_GAMECTRL        4\n\n#define DI8DEVTYPE_DEVICE           0x11\n#define DI8DEVTYPE_MOUSE            0x12\n#define DI8DEVTYPE_KEYBOARD         0x13\n#define DI8DEVTYPE_JOYSTICK         0x14\n#define DI8DEVTYPE_GAMEPAD          0x15\n#define DI8DEVTYPE_DRIVING          0x16\n#define DI8DEVTYPE_FLIGHT           0x17\n#define DI8DEVTYPE_1STPERSON        0x18\n#define DI8DEVTYPE_DEVICECTRL       0x19\n#define DI8DEVTYPE_SCREENPOINTER    0x1A\n#define DI8DEVTYPE_REMOTE           0x1B\n#define DI8DEVTYPE_SUPPLEMENTAL     0x1C\n#endif /* DIRECTINPUT_VERSION <= 0x700 */\n\n#define DIDEVTYPE_HID           0x00010000\n\n#if DIRECTINPUT_VERSION <= 0x700\n#define DIDEVTYPEMOUSE_UNKNOWN          1\n#define DIDEVTYPEMOUSE_TRADITIONAL      2\n#define DIDEVTYPEMOUSE_FINGERSTICK      3\n#define DIDEVTYPEMOUSE_TOUCHPAD         4\n#define DIDEVTYPEMOUSE_TRACKBALL        5\n\n#define DIDEVTYPEKEYBOARD_UNKNOWN       0\n#define DIDEVTYPEKEYBOARD_PCXT          1\n#define DIDEVTYPEKEYBOARD_OLIVETTI      2\n#define DIDEVTYPEKEYBOARD_PCAT          3\n#define DIDEVTYPEKEYBOARD_PCENH         4\n#define DIDEVTYPEKEYBOARD_NOKIA1050     5\n#define DIDEVTYPEKEYBOARD_NOKIA9140     6\n#define DIDEVTYPEKEYBOARD_NEC98         7\n#define DIDEVTYPEKEYBOARD_NEC98LAPTOP   8\n#define DIDEVTYPEKEYBOARD_NEC98106      9\n#define DIDEVTYPEKEYBOARD_JAPAN106     10\n#define DIDEVTYPEKEYBOARD_JAPANAX      11\n#define DIDEVTYPEKEYBOARD_J3100        12\n\n#define DIDEVTYPEJOYSTICK_UNKNOWN       1\n#define DIDEVTYPEJOYSTICK_TRADITIONAL   2\n#define DIDEVTYPEJOYSTICK_FLIGHTSTICK   3\n#define DIDEVTYPEJOYSTICK_GAMEPAD       4\n#define DIDEVTYPEJOYSTICK_RUDDER        5\n#define DIDEVTYPEJOYSTICK_WHEEL         6\n#define DIDEVTYPEJOYSTICK_HEADTRACKER   7\n\n#else\n#define DI8DEVTYPEMOUSE_UNKNOWN                     1\n#define DI8DEVTYPEMOUSE_TRADITIONAL                 2\n#define DI8DEVTYPEMOUSE_FINGERSTICK                 3\n#define DI8DEVTYPEMOUSE_TOUCHPAD                    4\n#define DI8DEVTYPEMOUSE_TRACKBALL                   5\n#define DI8DEVTYPEMOUSE_ABSOLUTE                    6\n\n#define DI8DEVTYPEKEYBOARD_UNKNOWN                  0\n#define DI8DEVTYPEKEYBOARD_PCXT                     1\n#define DI8DEVTYPEKEYBOARD_OLIVETTI                 2\n#define DI8DEVTYPEKEYBOARD_PCAT                     3\n#define DI8DEVTYPEKEYBOARD_PCENH                    4\n#define DI8DEVTYPEKEYBOARD_NOKIA1050                5\n#define DI8DEVTYPEKEYBOARD_NOKIA9140                6\n#define DI8DEVTYPEKEYBOARD_NEC98                    7\n#define DI8DEVTYPEKEYBOARD_NEC98LAPTOP              8\n#define DI8DEVTYPEKEYBOARD_NEC98106                 9\n#define DI8DEVTYPEKEYBOARD_JAPAN106                10\n#define DI8DEVTYPEKEYBOARD_JAPANAX                 11\n#define DI8DEVTYPEKEYBOARD_J3100                   12\n\n#define DI8DEVTYPE_LIMITEDGAMESUBTYPE               1\n\n#define DI8DEVTYPEJOYSTICK_LIMITED                  DI8DEVTYPE_LIMITEDGAMESUBTYPE\n#define DI8DEVTYPEJOYSTICK_STANDARD                 2\n\n#define DI8DEVTYPEGAMEPAD_LIMITED                   DI8DEVTYPE_LIMITEDGAMESUBTYPE\n#define DI8DEVTYPEGAMEPAD_STANDARD                  2\n#define DI8DEVTYPEGAMEPAD_TILT                      3\n\n#define DI8DEVTYPEDRIVING_LIMITED                   DI8DEVTYPE_LIMITEDGAMESUBTYPE\n#define DI8DEVTYPEDRIVING_COMBINEDPEDALS            2\n#define DI8DEVTYPEDRIVING_DUALPEDALS                3\n#define DI8DEVTYPEDRIVING_THREEPEDALS               4\n#define DI8DEVTYPEDRIVING_HANDHELD                  5\n\n#define DI8DEVTYPEFLIGHT_LIMITED                    DI8DEVTYPE_LIMITEDGAMESUBTYPE\n#define DI8DEVTYPEFLIGHT_STICK                      2\n#define DI8DEVTYPEFLIGHT_YOKE                       3\n#define DI8DEVTYPEFLIGHT_RC                         4\n\n#define DI8DEVTYPE1STPERSON_LIMITED                 DI8DEVTYPE_LIMITEDGAMESUBTYPE\n#define DI8DEVTYPE1STPERSON_UNKNOWN                 2\n#define DI8DEVTYPE1STPERSON_SIXDOF                  3\n#define DI8DEVTYPE1STPERSON_SHOOTER                 4\n\n#define DI8DEVTYPESCREENPTR_UNKNOWN                 2\n#define DI8DEVTYPESCREENPTR_LIGHTGUN                3\n#define DI8DEVTYPESCREENPTR_LIGHTPEN                4\n#define DI8DEVTYPESCREENPTR_TOUCH                   5\n\n#define DI8DEVTYPEREMOTE_UNKNOWN                    2\n\n#define DI8DEVTYPEDEVICECTRL_UNKNOWN                2\n#define DI8DEVTYPEDEVICECTRL_COMMSSELECTION         3\n#define DI8DEVTYPEDEVICECTRL_COMMSSELECTION_HARDWIRED 4\n\n#define DI8DEVTYPESUPPLEMENTAL_UNKNOWN              2\n#define DI8DEVTYPESUPPLEMENTAL_2NDHANDCONTROLLER    3\n#define DI8DEVTYPESUPPLEMENTAL_HEADTRACKER          4\n#define DI8DEVTYPESUPPLEMENTAL_HANDTRACKER          5\n#define DI8DEVTYPESUPPLEMENTAL_SHIFTSTICKGATE       6\n#define DI8DEVTYPESUPPLEMENTAL_SHIFTER              7\n#define DI8DEVTYPESUPPLEMENTAL_THROTTLE             8\n#define DI8DEVTYPESUPPLEMENTAL_SPLITTHROTTLE        9\n#define DI8DEVTYPESUPPLEMENTAL_COMBINEDPEDALS      10\n#define DI8DEVTYPESUPPLEMENTAL_DUALPEDALS          11\n#define DI8DEVTYPESUPPLEMENTAL_THREEPEDALS         12\n#define DI8DEVTYPESUPPLEMENTAL_RUDDERPEDALS        13\n#endif /* DIRECTINPUT_VERSION <= 0x700 */\n\n#define GET_DIDEVICE_TYPE(dwDevType)    LOBYTE(dwDevType)\n#define GET_DIDEVICE_SUBTYPE(dwDevType) HIBYTE(dwDevType)\n\n#if(DIRECTINPUT_VERSION >= 0x0500)\n/* This structure is defined for DirectX 3.0 compatibility */\ntypedef struct DIDEVCAPS_DX3 {\n    DWORD   dwSize;\n    DWORD   dwFlags;\n    DWORD   dwDevType;\n    DWORD   dwAxes;\n    DWORD   dwButtons;\n    DWORD   dwPOVs;\n} DIDEVCAPS_DX3, *LPDIDEVCAPS_DX3;\n#endif /* DIRECTINPUT_VERSION >= 0x0500 */\n\ntypedef struct DIDEVCAPS {\n    DWORD   dwSize;\n    DWORD   dwFlags;\n    DWORD   dwDevType;\n    DWORD   dwAxes;\n    DWORD   dwButtons;\n    DWORD   dwPOVs;\n#if(DIRECTINPUT_VERSION >= 0x0500)\n    DWORD   dwFFSamplePeriod;\n    DWORD   dwFFMinTimeResolution;\n    DWORD   dwFirmwareRevision;\n    DWORD   dwHardwareRevision;\n    DWORD   dwFFDriverVersion;\n#endif /* DIRECTINPUT_VERSION >= 0x0500 */\n} DIDEVCAPS, *LPDIDEVCAPS;\n\n#define DIDC_ATTACHED           0x00000001\n#define DIDC_POLLEDDEVICE       0x00000002\n#define DIDC_EMULATED           0x00000004\n#define DIDC_POLLEDDATAFORMAT   0x00000008\n#if(DIRECTINPUT_VERSION >= 0x0500)\n#define DIDC_FORCEFEEDBACK      0x00000100\n#define DIDC_FFATTACK           0x00000200\n#define DIDC_FFFADE             0x00000400\n#define DIDC_SATURATION         0x00000800\n#define DIDC_POSNEGCOEFFICIENTS 0x00001000\n#define DIDC_POSNEGSATURATION   0x00002000\n#define DIDC_DEADBAND           0x00004000\n#endif /* DIRECTINPUT_VERSION >= 0x0500 */\n#define DIDC_STARTDELAY         0x00008000\n#if(DIRECTINPUT_VERSION >= 0x050a)\n#define DIDC_ALIAS              0x00010000\n#define DIDC_PHANTOM            0x00020000\n#endif /* DIRECTINPUT_VERSION >= 0x050a */\n#if(DIRECTINPUT_VERSION >= 0x0800)\n#define DIDC_HIDDEN             0x00040000\n#endif /* DIRECTINPUT_VERSION >= 0x0800 */\n\n#define DIDFT_ALL           0x00000000\n\n#define DIDFT_RELAXIS       0x00000001\n#define DIDFT_ABSAXIS       0x00000002\n#define DIDFT_AXIS          0x00000003\n\n#define DIDFT_PSHBUTTON     0x00000004\n#define DIDFT_TGLBUTTON     0x00000008\n#define DIDFT_BUTTON        0x0000000C\n\n#define DIDFT_POV           0x00000010\n#define DIDFT_COLLECTION    0x00000040\n#define DIDFT_NODATA        0x00000080\n\n#define DIDFT_ANYINSTANCE   0x00FFFF00\n#define DIDFT_INSTANCEMASK  DIDFT_ANYINSTANCE\n#define DIDFT_MAKEINSTANCE(n) ((WORD)(n) << 8)\n#define DIDFT_GETTYPE(n)     LOBYTE(n)\n#define DIDFT_GETINSTANCE(n) LOWORD((n) >> 8)\n#define DIDFT_FFACTUATOR        0x01000000\n#define DIDFT_FFEFFECTTRIGGER   0x02000000\n#if(DIRECTINPUT_VERSION >= 0x050a)\n#define DIDFT_OUTPUT            0x10000000\n#define DIDFT_VENDORDEFINED     0x04000000\n#define DIDFT_ALIAS             0x08000000\n#endif /* DIRECTINPUT_VERSION >= 0x050a */\n#ifndef DIDFT_OPTIONAL\n#define DIDFT_OPTIONAL          0x80000000\n#endif\n\n#define DIDFT_ENUMCOLLECTION(n) ((WORD)(n) << 8)\n#define DIDFT_NOCOLLECTION      0x00FFFF00\n\n#ifndef DIJ_RINGZERO\n\ntypedef struct _DIOBJECTDATAFORMAT {\n    const GUID *pguid;\n    DWORD   dwOfs;\n    DWORD   dwType;\n    DWORD   dwFlags;\n} DIOBJECTDATAFORMAT, *LPDIOBJECTDATAFORMAT;\ntypedef const DIOBJECTDATAFORMAT *LPCDIOBJECTDATAFORMAT;\n\ntypedef struct _DIDATAFORMAT {\n    DWORD   dwSize;\n    DWORD   dwObjSize;\n    DWORD   dwFlags;\n    DWORD   dwDataSize;\n    DWORD   dwNumObjs;\n    LPDIOBJECTDATAFORMAT rgodf;\n} DIDATAFORMAT, *LPDIDATAFORMAT;\ntypedef const DIDATAFORMAT *LPCDIDATAFORMAT;\n\n#define DIDF_ABSAXIS            0x00000001\n#define DIDF_RELAXIS            0x00000002\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\nextern const DIDATAFORMAT c_dfDIMouse;\n\n#if(DIRECTINPUT_VERSION >= 0x0700)\nextern const DIDATAFORMAT c_dfDIMouse2;\n#endif /* DIRECTINPUT_VERSION >= 0x0700 */\n\nextern const DIDATAFORMAT c_dfDIKeyboard;\n\n#if(DIRECTINPUT_VERSION >= 0x0500)\nextern const DIDATAFORMAT c_dfDIJoystick;\nextern const DIDATAFORMAT c_dfDIJoystick2;\n#endif /* DIRECTINPUT_VERSION >= 0x0500 */\n\n#ifdef __cplusplus\n};\n#endif\n\n\n#if DIRECTINPUT_VERSION > 0x0700\n\ntypedef struct _DIACTIONA {\n                UINT_PTR    uAppData;\n                DWORD       dwSemantic;\n    OPTIONAL    DWORD       dwFlags;\n    OPTIONAL    union {\n                    LPCSTR      lptszActionName;\n                    UINT        uResIdString;\n                };\n    OPTIONAL    GUID        guidInstance;\n    OPTIONAL    DWORD       dwObjID;\n    OPTIONAL    DWORD       dwHow;\n} DIACTIONA, *LPDIACTIONA ;\ntypedef struct _DIACTIONW {\n                UINT_PTR    uAppData;\n                DWORD       dwSemantic;\n    OPTIONAL    DWORD       dwFlags;\n    OPTIONAL    union {\n                    LPCWSTR     lptszActionName;\n                    UINT        uResIdString;\n                };\n    OPTIONAL    GUID        guidInstance;\n    OPTIONAL    DWORD       dwObjID;\n    OPTIONAL    DWORD       dwHow;\n} DIACTIONW, *LPDIACTIONW ;\n#ifdef UNICODE\ntypedef DIACTIONW DIACTION;\ntypedef LPDIACTIONW LPDIACTION;\n#else\ntypedef DIACTIONA DIACTION;\ntypedef LPDIACTIONA LPDIACTION;\n#endif // UNICODE\n\ntypedef const DIACTIONA *LPCDIACTIONA;\ntypedef const DIACTIONW *LPCDIACTIONW;\n#ifdef UNICODE\ntypedef DIACTIONW DIACTION;\ntypedef LPCDIACTIONW LPCDIACTION;\n#else\ntypedef DIACTIONA DIACTION;\ntypedef LPCDIACTIONA LPCDIACTION;\n#endif // UNICODE\ntypedef const DIACTION *LPCDIACTION;\n\n\n#define DIA_FORCEFEEDBACK       0x00000001\n#define DIA_APPMAPPED           0x00000002\n#define DIA_APPNOMAP            0x00000004\n#define DIA_NORANGE             0x00000008\n#define DIA_APPFIXED            0x00000010\n\n#define DIAH_UNMAPPED           0x00000000\n#define DIAH_USERCONFIG         0x00000001\n#define DIAH_APPREQUESTED       0x00000002\n#define DIAH_HWAPP              0x00000004\n#define DIAH_HWDEFAULT          0x00000008\n#define DIAH_DEFAULT            0x00000020\n#define DIAH_ERROR              0x80000000\n\ntypedef struct _DIACTIONFORMATA {\n                DWORD       dwSize;\n                DWORD       dwActionSize;\n                DWORD       dwDataSize;\n                DWORD       dwNumActions;\n                LPDIACTIONA rgoAction;\n                GUID        guidActionMap;\n                DWORD       dwGenre;\n                DWORD       dwBufferSize;\n    OPTIONAL    LONG        lAxisMin;\n    OPTIONAL    LONG        lAxisMax;\n    OPTIONAL    HINSTANCE   hInstString;\n                FILETIME    ftTimeStamp;\n                DWORD       dwCRC;\n                CHAR        tszActionMap[MAX_PATH];\n} DIACTIONFORMATA, *LPDIACTIONFORMATA;\ntypedef struct _DIACTIONFORMATW {\n                DWORD       dwSize;\n                DWORD       dwActionSize;\n                DWORD       dwDataSize;\n                DWORD       dwNumActions;\n                LPDIACTIONW rgoAction;\n                GUID        guidActionMap;\n                DWORD       dwGenre;\n                DWORD       dwBufferSize;\n    OPTIONAL    LONG        lAxisMin;\n    OPTIONAL    LONG        lAxisMax;\n    OPTIONAL    HINSTANCE   hInstString;\n                FILETIME    ftTimeStamp;\n                DWORD       dwCRC;\n                WCHAR       tszActionMap[MAX_PATH];\n} DIACTIONFORMATW, *LPDIACTIONFORMATW;\n#ifdef UNICODE\ntypedef DIACTIONFORMATW DIACTIONFORMAT;\ntypedef LPDIACTIONFORMATW LPDIACTIONFORMAT;\n#else\ntypedef DIACTIONFORMATA DIACTIONFORMAT;\ntypedef LPDIACTIONFORMATA LPDIACTIONFORMAT;\n#endif // UNICODE\ntypedef const DIACTIONFORMATA *LPCDIACTIONFORMATA;\ntypedef const DIACTIONFORMATW *LPCDIACTIONFORMATW;\n#ifdef UNICODE\ntypedef DIACTIONFORMATW DIACTIONFORMAT;\ntypedef LPCDIACTIONFORMATW LPCDIACTIONFORMAT;\n#else\ntypedef DIACTIONFORMATA DIACTIONFORMAT;\ntypedef LPCDIACTIONFORMATA LPCDIACTIONFORMAT;\n#endif // UNICODE\ntypedef const DIACTIONFORMAT *LPCDIACTIONFORMAT;\n\n#define DIAFTS_NEWDEVICELOW     0xFFFFFFFF\n#define DIAFTS_NEWDEVICEHIGH    0xFFFFFFFF\n#define DIAFTS_UNUSEDDEVICELOW  0x00000000\n#define DIAFTS_UNUSEDDEVICEHIGH 0x00000000\n\n#define DIDBAM_DEFAULT          0x00000000\n#define DIDBAM_PRESERVE         0x00000001\n#define DIDBAM_INITIALIZE       0x00000002\n#define DIDBAM_HWDEFAULTS       0x00000004\n\n#define DIDSAM_DEFAULT          0x00000000\n#define DIDSAM_NOUSER           0x00000001\n#define DIDSAM_FORCESAVE        0x00000002\n\n#define DICD_DEFAULT            0x00000000\n#define DICD_EDIT               0x00000001\n\n/*\n * The following definition is normally defined in d3dtypes.h\n */\n#ifndef D3DCOLOR_DEFINED\ntypedef DWORD D3DCOLOR;\n#define D3DCOLOR_DEFINED\n#endif\n\ntypedef struct _DICOLORSET{\n    DWORD dwSize;\n    D3DCOLOR cTextFore;\n    D3DCOLOR cTextHighlight;\n    D3DCOLOR cCalloutLine;\n    D3DCOLOR cCalloutHighlight;\n    D3DCOLOR cBorder;\n    D3DCOLOR cControlFill;\n    D3DCOLOR cHighlightFill;\n    D3DCOLOR cAreaFill;\n} DICOLORSET, *LPDICOLORSET;\ntypedef const DICOLORSET *LPCDICOLORSET;\n\n\ntypedef struct _DICONFIGUREDEVICESPARAMSA{\n     DWORD             dwSize;\n     DWORD             dwcUsers;\n     LPSTR             lptszUserNames;\n     DWORD             dwcFormats;\n     LPDIACTIONFORMATA lprgFormats;\n     HWND              hwnd;\n     DICOLORSET        dics;\n     IUnknown FAR *    lpUnkDDSTarget;\n} DICONFIGUREDEVICESPARAMSA, *LPDICONFIGUREDEVICESPARAMSA;\ntypedef struct _DICONFIGUREDEVICESPARAMSW{\n     DWORD             dwSize;\n     DWORD             dwcUsers;\n     LPWSTR            lptszUserNames;\n     DWORD             dwcFormats;\n     LPDIACTIONFORMATW lprgFormats;\n     HWND              hwnd;\n     DICOLORSET        dics;\n     IUnknown FAR *    lpUnkDDSTarget;\n} DICONFIGUREDEVICESPARAMSW, *LPDICONFIGUREDEVICESPARAMSW;\n#ifdef UNICODE\ntypedef DICONFIGUREDEVICESPARAMSW DICONFIGUREDEVICESPARAMS;\ntypedef LPDICONFIGUREDEVICESPARAMSW LPDICONFIGUREDEVICESPARAMS;\n#else\ntypedef DICONFIGUREDEVICESPARAMSA DICONFIGUREDEVICESPARAMS;\ntypedef LPDICONFIGUREDEVICESPARAMSA LPDICONFIGUREDEVICESPARAMS;\n#endif // UNICODE\ntypedef const DICONFIGUREDEVICESPARAMSA *LPCDICONFIGUREDEVICESPARAMSA;\ntypedef const DICONFIGUREDEVICESPARAMSW *LPCDICONFIGUREDEVICESPARAMSW;\n#ifdef UNICODE\ntypedef DCIONFIGUREDEVICESPARAMSW DICONFIGUREDEVICESPARAMS;\ntypedef LPCDICONFIGUREDEVICESPARAMSW LPCDICONFIGUREDEVICESPARAMS;\n#else\ntypedef DICONFIGUREDEVICESPARAMSA DICONFIGUREDEVICESPARAMS;\ntypedef LPCDICONFIGUREDEVICESPARAMSA LPCDICONFIGUREDEVICESPARAMS;\n#endif // UNICODE\ntypedef const DICONFIGUREDEVICESPARAMS *LPCDICONFIGUREDEVICESPARAMS;\n\n\n#define DIDIFT_CONFIGURATION    0x00000001\n#define DIDIFT_OVERLAY          0x00000002\n\n#define DIDAL_CENTERED      0x00000000\n#define DIDAL_LEFTALIGNED   0x00000001\n#define DIDAL_RIGHTALIGNED  0x00000002\n#define DIDAL_MIDDLE        0x00000000\n#define DIDAL_TOPALIGNED    0x00000004\n#define DIDAL_BOTTOMALIGNED 0x00000008\n\ntypedef struct _DIDEVICEIMAGEINFOA {\n    CHAR        tszImagePath[MAX_PATH];\n    DWORD       dwFlags; \n    // These are valid if DIDIFT_OVERLAY is present in dwFlags.\n    DWORD       dwViewID;      \n    RECT        rcOverlay;             \n    DWORD       dwObjID;\n    DWORD       dwcValidPts;\n    POINT       rgptCalloutLine[5];  \n    RECT        rcCalloutRect;  \n    DWORD       dwTextAlign;     \n} DIDEVICEIMAGEINFOA, *LPDIDEVICEIMAGEINFOA;\ntypedef struct _DIDEVICEIMAGEINFOW {\n    WCHAR       tszImagePath[MAX_PATH];\n    DWORD       dwFlags; \n    // These are valid if DIDIFT_OVERLAY is present in dwFlags.\n    DWORD       dwViewID;      \n    RECT        rcOverlay;             \n    DWORD       dwObjID;\n    DWORD       dwcValidPts;\n    POINT       rgptCalloutLine[5];  \n    RECT        rcCalloutRect;  \n    DWORD       dwTextAlign;     \n} DIDEVICEIMAGEINFOW, *LPDIDEVICEIMAGEINFOW;\n#ifdef UNICODE\ntypedef DIDEVICEIMAGEINFOW DIDEVICEIMAGEINFO;\ntypedef LPDIDEVICEIMAGEINFOW LPDIDEVICEIMAGEINFO;\n#else\ntypedef DIDEVICEIMAGEINFOA DIDEVICEIMAGEINFO;\ntypedef LPDIDEVICEIMAGEINFOA LPDIDEVICEIMAGEINFO;\n#endif // UNICODE\ntypedef const DIDEVICEIMAGEINFOA *LPCDIDEVICEIMAGEINFOA;\ntypedef const DIDEVICEIMAGEINFOW *LPCDIDEVICEIMAGEINFOW;\n#ifdef UNICODE\ntypedef DIDEVICEIMAGEINFOW DIDEVICEIMAGEINFO;\ntypedef LPCDIDEVICEIMAGEINFOW LPCDIDEVICEIMAGEINFO;\n#else\ntypedef DIDEVICEIMAGEINFOA DIDEVICEIMAGEINFO;\ntypedef LPCDIDEVICEIMAGEINFOA LPCDIDEVICEIMAGEINFO;\n#endif // UNICODE\ntypedef const DIDEVICEIMAGEINFO *LPCDIDEVICEIMAGEINFO;\n\ntypedef struct _DIDEVICEIMAGEINFOHEADERA {\n    DWORD       dwSize;\n    DWORD       dwSizeImageInfo;\n    DWORD       dwcViews;\n    DWORD       dwcButtons;\n    DWORD       dwcAxes;\n    DWORD       dwcPOVs;\n    DWORD       dwBufferSize;\n    DWORD       dwBufferUsed;\n    LPDIDEVICEIMAGEINFOA lprgImageInfoArray;\n} DIDEVICEIMAGEINFOHEADERA, *LPDIDEVICEIMAGEINFOHEADERA;\ntypedef struct _DIDEVICEIMAGEINFOHEADERW {\n    DWORD       dwSize;\n    DWORD       dwSizeImageInfo;\n    DWORD       dwcViews;\n    DWORD       dwcButtons;\n    DWORD       dwcAxes;\n    DWORD       dwcPOVs;\n    DWORD       dwBufferSize;\n    DWORD       dwBufferUsed;\n    LPDIDEVICEIMAGEINFOW lprgImageInfoArray;\n} DIDEVICEIMAGEINFOHEADERW, *LPDIDEVICEIMAGEINFOHEADERW;\n#ifdef UNICODE\ntypedef DIDEVICEIMAGEINFOHEADERW DIDEVICEIMAGEINFOHEADER;\ntypedef LPDIDEVICEIMAGEINFOHEADERW LPDIDEVICEIMAGEINFOHEADER;\n#else\ntypedef DIDEVICEIMAGEINFOHEADERA DIDEVICEIMAGEINFOHEADER;\ntypedef LPDIDEVICEIMAGEINFOHEADERA LPDIDEVICEIMAGEINFOHEADER;\n#endif // UNICODE\ntypedef const DIDEVICEIMAGEINFOHEADERA *LPCDIDEVICEIMAGEINFOHEADERA;\ntypedef const DIDEVICEIMAGEINFOHEADERW *LPCDIDEVICEIMAGEINFOHEADERW;\n#ifdef UNICODE\ntypedef DIDEVICEIMAGEINFOHEADERW DIDEVICEIMAGEINFOHEADER;\ntypedef LPCDIDEVICEIMAGEINFOHEADERW LPCDIDEVICEIMAGEINFOHEADER;\n#else\ntypedef DIDEVICEIMAGEINFOHEADERA DIDEVICEIMAGEINFOHEADER;\ntypedef LPCDIDEVICEIMAGEINFOHEADERA LPCDIDEVICEIMAGEINFOHEADER;\n#endif // UNICODE\ntypedef const DIDEVICEIMAGEINFOHEADER *LPCDIDEVICEIMAGEINFOHEADER;\n\n#endif /* DIRECTINPUT_VERSION > 0x0700 */\n\n#if(DIRECTINPUT_VERSION >= 0x0500)\n/* These structures are defined for DirectX 3.0 compatibility */\n\ntypedef struct DIDEVICEOBJECTINSTANCE_DX3A {\n    DWORD   dwSize;\n    GUID    guidType;\n    DWORD   dwOfs;\n    DWORD   dwType;\n    DWORD   dwFlags;\n    CHAR    tszName[MAX_PATH];\n} DIDEVICEOBJECTINSTANCE_DX3A, *LPDIDEVICEOBJECTINSTANCE_DX3A;\ntypedef struct DIDEVICEOBJECTINSTANCE_DX3W {\n    DWORD   dwSize;\n    GUID    guidType;\n    DWORD   dwOfs;\n    DWORD   dwType;\n    DWORD   dwFlags;\n    WCHAR   tszName[MAX_PATH];\n} DIDEVICEOBJECTINSTANCE_DX3W, *LPDIDEVICEOBJECTINSTANCE_DX3W;\n#ifdef UNICODE\ntypedef DIDEVICEOBJECTINSTANCE_DX3W DIDEVICEOBJECTINSTANCE_DX3;\ntypedef LPDIDEVICEOBJECTINSTANCE_DX3W LPDIDEVICEOBJECTINSTANCE_DX3;\n#else\ntypedef DIDEVICEOBJECTINSTANCE_DX3A DIDEVICEOBJECTINSTANCE_DX3;\ntypedef LPDIDEVICEOBJECTINSTANCE_DX3A LPDIDEVICEOBJECTINSTANCE_DX3;\n#endif // UNICODE\ntypedef const DIDEVICEOBJECTINSTANCE_DX3A *LPCDIDEVICEOBJECTINSTANCE_DX3A;\ntypedef const DIDEVICEOBJECTINSTANCE_DX3W *LPCDIDEVICEOBJECTINSTANCE_DX3W;\ntypedef const DIDEVICEOBJECTINSTANCE_DX3  *LPCDIDEVICEOBJECTINSTANCE_DX3;\n#endif /* DIRECTINPUT_VERSION >= 0x0500 */\n\ntypedef struct DIDEVICEOBJECTINSTANCEA {\n    DWORD   dwSize;\n    GUID    guidType;\n    DWORD   dwOfs;\n    DWORD   dwType;\n    DWORD   dwFlags;\n    CHAR    tszName[MAX_PATH];\n#if(DIRECTINPUT_VERSION >= 0x0500)\n    DWORD   dwFFMaxForce;\n    DWORD   dwFFForceResolution;\n    WORD    wCollectionNumber;\n    WORD    wDesignatorIndex;\n    WORD    wUsagePage;\n    WORD    wUsage;\n    DWORD   dwDimension;\n    WORD    wExponent;\n    WORD    wReportId;\n#endif /* DIRECTINPUT_VERSION >= 0x0500 */\n} DIDEVICEOBJECTINSTANCEA, *LPDIDEVICEOBJECTINSTANCEA;\ntypedef struct DIDEVICEOBJECTINSTANCEW {\n    DWORD   dwSize;\n    GUID    guidType;\n    DWORD   dwOfs;\n    DWORD   dwType;\n    DWORD   dwFlags;\n    WCHAR   tszName[MAX_PATH];\n#if(DIRECTINPUT_VERSION >= 0x0500)\n    DWORD   dwFFMaxForce;\n    DWORD   dwFFForceResolution;\n    WORD    wCollectionNumber;\n    WORD    wDesignatorIndex;\n    WORD    wUsagePage;\n    WORD    wUsage;\n    DWORD   dwDimension;\n    WORD    wExponent;\n    WORD    wReportId;\n#endif /* DIRECTINPUT_VERSION >= 0x0500 */\n} DIDEVICEOBJECTINSTANCEW, *LPDIDEVICEOBJECTINSTANCEW;\n#ifdef UNICODE\ntypedef DIDEVICEOBJECTINSTANCEW DIDEVICEOBJECTINSTANCE;\ntypedef LPDIDEVICEOBJECTINSTANCEW LPDIDEVICEOBJECTINSTANCE;\n#else\ntypedef DIDEVICEOBJECTINSTANCEA DIDEVICEOBJECTINSTANCE;\ntypedef LPDIDEVICEOBJECTINSTANCEA LPDIDEVICEOBJECTINSTANCE;\n#endif // UNICODE\ntypedef const DIDEVICEOBJECTINSTANCEA *LPCDIDEVICEOBJECTINSTANCEA;\ntypedef const DIDEVICEOBJECTINSTANCEW *LPCDIDEVICEOBJECTINSTANCEW;\ntypedef const DIDEVICEOBJECTINSTANCE  *LPCDIDEVICEOBJECTINSTANCE;\n\ntypedef BOOL (FAR PASCAL * LPDIENUMDEVICEOBJECTSCALLBACKA)(LPCDIDEVICEOBJECTINSTANCEA, LPVOID);\ntypedef BOOL (FAR PASCAL * LPDIENUMDEVICEOBJECTSCALLBACKW)(LPCDIDEVICEOBJECTINSTANCEW, LPVOID);\n#ifdef UNICODE\n#define LPDIENUMDEVICEOBJECTSCALLBACK  LPDIENUMDEVICEOBJECTSCALLBACKW\n#else\n#define LPDIENUMDEVICEOBJECTSCALLBACK  LPDIENUMDEVICEOBJECTSCALLBACKA\n#endif // !UNICODE\n\n#if(DIRECTINPUT_VERSION >= 0x0500)\n#define DIDOI_FFACTUATOR        0x00000001\n#define DIDOI_FFEFFECTTRIGGER   0x00000002\n#define DIDOI_POLLED            0x00008000\n#define DIDOI_ASPECTPOSITION    0x00000100\n#define DIDOI_ASPECTVELOCITY    0x00000200\n#define DIDOI_ASPECTACCEL       0x00000300\n#define DIDOI_ASPECTFORCE       0x00000400\n#define DIDOI_ASPECTMASK        0x00000F00\n#endif /* DIRECTINPUT_VERSION >= 0x0500 */\n#if(DIRECTINPUT_VERSION >= 0x050a)\n#define DIDOI_GUIDISUSAGE       0x00010000\n#endif /* DIRECTINPUT_VERSION >= 0x050a */\n\ntypedef struct DIPROPHEADER {\n    DWORD   dwSize;\n    DWORD   dwHeaderSize;\n    DWORD   dwObj;\n    DWORD   dwHow;\n} DIPROPHEADER, *LPDIPROPHEADER;\ntypedef const DIPROPHEADER *LPCDIPROPHEADER;\n\n#define DIPH_DEVICE             0\n#define DIPH_BYOFFSET           1\n#define DIPH_BYID               2\n#if(DIRECTINPUT_VERSION >= 0x050a)\n#define DIPH_BYUSAGE            3\n#endif /* DIRECTINPUT_VERSION >= 0x050a */\n\n#if(DIRECTINPUT_VERSION >= 0x050a)\n#define DIMAKEUSAGEDWORD(UsagePage, Usage) \\\n                                (DWORD)MAKELONG(Usage, UsagePage)\n#endif /* DIRECTINPUT_VERSION >= 0x050a */\n\ntypedef struct DIPROPDWORD {\n    DIPROPHEADER diph;\n    DWORD   dwData;\n} DIPROPDWORD, *LPDIPROPDWORD;\ntypedef const DIPROPDWORD *LPCDIPROPDWORD;\n\n#if(DIRECTINPUT_VERSION >= 0x0800)\ntypedef struct DIPROPPOINTER {\n    DIPROPHEADER diph;\n    UINT_PTR uData;\n} DIPROPPOINTER, *LPDIPROPPOINTER;\ntypedef const DIPROPPOINTER *LPCDIPROPPOINTER;\n#endif /* DIRECTINPUT_VERSION >= 0x0800 */\n\ntypedef struct DIPROPRANGE {\n    DIPROPHEADER diph;\n    LONG    lMin;\n    LONG    lMax;\n} DIPROPRANGE, *LPDIPROPRANGE;\ntypedef const DIPROPRANGE *LPCDIPROPRANGE;\n\n#define DIPROPRANGE_NOMIN       ((LONG)0x80000000)\n#define DIPROPRANGE_NOMAX       ((LONG)0x7FFFFFFF)\n\n#if(DIRECTINPUT_VERSION >= 0x050a)\ntypedef struct DIPROPCAL {\n    DIPROPHEADER diph;\n    LONG    lMin;\n    LONG    lCenter;\n    LONG    lMax;\n} DIPROPCAL, *LPDIPROPCAL;\ntypedef const DIPROPCAL *LPCDIPROPCAL;\n\ntypedef struct DIPROPCALPOV {\n    DIPROPHEADER diph;\n    LONG   lMin[5];\n    LONG   lMax[5];\n} DIPROPCALPOV, *LPDIPROPCALPOV;\ntypedef const DIPROPCALPOV *LPCDIPROPCALPOV;\n\ntypedef struct DIPROPGUIDANDPATH {\n    DIPROPHEADER diph;\n    GUID    guidClass;\n    WCHAR   wszPath[MAX_PATH];\n} DIPROPGUIDANDPATH, *LPDIPROPGUIDANDPATH;\ntypedef const DIPROPGUIDANDPATH *LPCDIPROPGUIDANDPATH;\n\ntypedef struct DIPROPSTRING {\n    DIPROPHEADER diph;\n    WCHAR   wsz[MAX_PATH];\n} DIPROPSTRING, *LPDIPROPSTRING;\ntypedef const DIPROPSTRING *LPCDIPROPSTRING;\n\n#endif /* DIRECTINPUT_VERSION >= 0x050a */\n\n#if(DIRECTINPUT_VERSION >= 0x0800)\n#define MAXCPOINTSNUM          8\n\ntypedef struct _CPOINT\n{\n    LONG  lP;     // raw value\n    DWORD dwLog;  // logical_value / max_logical_value * 10000\n} CPOINT, *PCPOINT;\n\ntypedef struct DIPROPCPOINTS {\n    DIPROPHEADER diph;\n    DWORD  dwCPointsNum;\n    CPOINT cp[MAXCPOINTSNUM];\n} DIPROPCPOINTS, *LPDIPROPCPOINTS;\ntypedef const DIPROPCPOINTS *LPCDIPROPCPOINTS;\n#endif /* DIRECTINPUT_VERSION >= 0x0800 */\n\n\n#ifdef __cplusplus\n#define MAKEDIPROP(prop)    (*(const GUID *)(prop))\n#else\n#define MAKEDIPROP(prop)    ((REFGUID)(prop))\n#endif\n\n#define DIPROP_BUFFERSIZE       MAKEDIPROP(1)\n\n#define DIPROP_AXISMODE         MAKEDIPROP(2)\n\n#define DIPROPAXISMODE_ABS      0\n#define DIPROPAXISMODE_REL      1\n\n#define DIPROP_GRANULARITY      MAKEDIPROP(3)\n\n#define DIPROP_RANGE            MAKEDIPROP(4)\n\n#define DIPROP_DEADZONE         MAKEDIPROP(5)\n\n#define DIPROP_SATURATION       MAKEDIPROP(6)\n\n#define DIPROP_FFGAIN           MAKEDIPROP(7)\n\n#define DIPROP_FFLOAD           MAKEDIPROP(8)\n\n#define DIPROP_AUTOCENTER       MAKEDIPROP(9)\n\n#define DIPROPAUTOCENTER_OFF    0\n#define DIPROPAUTOCENTER_ON     1\n\n#define DIPROP_CALIBRATIONMODE  MAKEDIPROP(10)\n\n#define DIPROPCALIBRATIONMODE_COOKED    0\n#define DIPROPCALIBRATIONMODE_RAW       1\n\n#if(DIRECTINPUT_VERSION >= 0x050a)\n#define DIPROP_CALIBRATION      MAKEDIPROP(11)\n\n#define DIPROP_GUIDANDPATH      MAKEDIPROP(12)\n\n#define DIPROP_INSTANCENAME     MAKEDIPROP(13)\n\n#define DIPROP_PRODUCTNAME      MAKEDIPROP(14)\n#endif /* DIRECTINPUT_VERSION >= 0x050a */\n\n#if(DIRECTINPUT_VERSION >= 0x05b2)\n#define DIPROP_JOYSTICKID       MAKEDIPROP(15)\n\n#define DIPROP_GETPORTDISPLAYNAME       MAKEDIPROP(16)\n\n#endif /* DIRECTINPUT_VERSION >= 0x05b2 */\n\n#if(DIRECTINPUT_VERSION >= 0x0700)\n#define DIPROP_PHYSICALRANGE            MAKEDIPROP(18)\n\n#define DIPROP_LOGICALRANGE             MAKEDIPROP(19)\n#endif /* DIRECTINPUT_VERSION >= 0x0700 */\n\n#if(DIRECTINPUT_VERSION >= 0x0800)\n#define DIPROP_KEYNAME                     MAKEDIPROP(20)\n\n#define DIPROP_CPOINTS                 MAKEDIPROP(21)\n\n#define DIPROP_APPDATA       MAKEDIPROP(22)\n\n#define DIPROP_SCANCODE      MAKEDIPROP(23)\n\n#define DIPROP_VIDPID           MAKEDIPROP(24)\n\n#define DIPROP_USERNAME         MAKEDIPROP(25)\n\n#define DIPROP_TYPENAME         MAKEDIPROP(26)\n#endif /* DIRECTINPUT_VERSION >= 0x0800 */\n\n\ntypedef struct DIDEVICEOBJECTDATA_DX3 {\n    DWORD       dwOfs;\n    DWORD       dwData;\n    DWORD       dwTimeStamp;\n    DWORD       dwSequence;\n} DIDEVICEOBJECTDATA_DX3, *LPDIDEVICEOBJECTDATA_DX3;\ntypedef const DIDEVICEOBJECTDATA_DX3 *LPCDIDEVICEOBJECTDATA_DX;\n\ntypedef struct DIDEVICEOBJECTDATA {\n    DWORD       dwOfs;\n    DWORD       dwData;\n    DWORD       dwTimeStamp;\n    DWORD       dwSequence;\n#if(DIRECTINPUT_VERSION >= 0x0800)\n    UINT_PTR    uAppData;\n#endif /* DIRECTINPUT_VERSION >= 0x0800 */\n} DIDEVICEOBJECTDATA, *LPDIDEVICEOBJECTDATA;\ntypedef const DIDEVICEOBJECTDATA *LPCDIDEVICEOBJECTDATA;\n\n#define DIGDD_PEEK          0x00000001\n\n#define DISEQUENCE_COMPARE(dwSequence1, cmp, dwSequence2) \\\n                        ((int)((dwSequence1) - (dwSequence2)) cmp 0)\n#define DISCL_EXCLUSIVE     0x00000001\n#define DISCL_NONEXCLUSIVE  0x00000002\n#define DISCL_FOREGROUND    0x00000004\n#define DISCL_BACKGROUND    0x00000008\n#define DISCL_NOWINKEY      0x00000010\n\n#if(DIRECTINPUT_VERSION >= 0x0500)\n/* These structures are defined for DirectX 3.0 compatibility */\n\ntypedef struct DIDEVICEINSTANCE_DX3A {\n    DWORD   dwSize;\n    GUID    guidInstance;\n    GUID    guidProduct;\n    DWORD   dwDevType;\n    CHAR    tszInstanceName[MAX_PATH];\n    CHAR    tszProductName[MAX_PATH];\n} DIDEVICEINSTANCE_DX3A, *LPDIDEVICEINSTANCE_DX3A;\ntypedef struct DIDEVICEINSTANCE_DX3W {\n    DWORD   dwSize;\n    GUID    guidInstance;\n    GUID    guidProduct;\n    DWORD   dwDevType;\n    WCHAR   tszInstanceName[MAX_PATH];\n    WCHAR   tszProductName[MAX_PATH];\n} DIDEVICEINSTANCE_DX3W, *LPDIDEVICEINSTANCE_DX3W;\n#ifdef UNICODE\ntypedef DIDEVICEINSTANCE_DX3W DIDEVICEINSTANCE_DX3;\ntypedef LPDIDEVICEINSTANCE_DX3W LPDIDEVICEINSTANCE_DX3;\n#else\ntypedef DIDEVICEINSTANCE_DX3A DIDEVICEINSTANCE_DX3;\ntypedef LPDIDEVICEINSTANCE_DX3A LPDIDEVICEINSTANCE_DX3;\n#endif // UNICODE\ntypedef const DIDEVICEINSTANCE_DX3A *LPCDIDEVICEINSTANCE_DX3A;\ntypedef const DIDEVICEINSTANCE_DX3W *LPCDIDEVICEINSTANCE_DX3W;\ntypedef const DIDEVICEINSTANCE_DX3  *LPCDIDEVICEINSTANCE_DX3;\n#endif /* DIRECTINPUT_VERSION >= 0x0500 */\n\ntypedef struct DIDEVICEINSTANCEA {\n    DWORD   dwSize;\n    GUID    guidInstance;\n    GUID    guidProduct;\n    DWORD   dwDevType;\n    CHAR    tszInstanceName[MAX_PATH];\n    CHAR    tszProductName[MAX_PATH];\n#if(DIRECTINPUT_VERSION >= 0x0500)\n    GUID    guidFFDriver;\n    WORD    wUsagePage;\n    WORD    wUsage;\n#endif /* DIRECTINPUT_VERSION >= 0x0500 */\n} DIDEVICEINSTANCEA, *LPDIDEVICEINSTANCEA;\ntypedef struct DIDEVICEINSTANCEW {\n    DWORD   dwSize;\n    GUID    guidInstance;\n    GUID    guidProduct;\n    DWORD   dwDevType;\n    WCHAR   tszInstanceName[MAX_PATH];\n    WCHAR   tszProductName[MAX_PATH];\n#if(DIRECTINPUT_VERSION >= 0x0500)\n    GUID    guidFFDriver;\n    WORD    wUsagePage;\n    WORD    wUsage;\n#endif /* DIRECTINPUT_VERSION >= 0x0500 */\n} DIDEVICEINSTANCEW, *LPDIDEVICEINSTANCEW;\n#ifdef UNICODE\ntypedef DIDEVICEINSTANCEW DIDEVICEINSTANCE;\ntypedef LPDIDEVICEINSTANCEW LPDIDEVICEINSTANCE;\n#else\ntypedef DIDEVICEINSTANCEA DIDEVICEINSTANCE;\ntypedef LPDIDEVICEINSTANCEA LPDIDEVICEINSTANCE;\n#endif // UNICODE\n\ntypedef const DIDEVICEINSTANCEA *LPCDIDEVICEINSTANCEA;\ntypedef const DIDEVICEINSTANCEW *LPCDIDEVICEINSTANCEW;\n#ifdef UNICODE\ntypedef DIDEVICEINSTANCEW DIDEVICEINSTANCE;\ntypedef LPCDIDEVICEINSTANCEW LPCDIDEVICEINSTANCE;\n#else\ntypedef DIDEVICEINSTANCEA DIDEVICEINSTANCE;\ntypedef LPCDIDEVICEINSTANCEA LPCDIDEVICEINSTANCE;\n#endif // UNICODE\ntypedef const DIDEVICEINSTANCE  *LPCDIDEVICEINSTANCE;\n\n#undef INTERFACE\n#define INTERFACE IDirectInputDeviceW\n\nDECLARE_INTERFACE_(IDirectInputDeviceW, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInputDeviceW methods ***/\n    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;\n    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE;\n    STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;\n    STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;\n    STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;\n    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;\n    STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;\n};\n\ntypedef struct IDirectInputDeviceW *LPDIRECTINPUTDEVICEW;\n\n#undef INTERFACE\n#define INTERFACE IDirectInputDeviceA\n\nDECLARE_INTERFACE_(IDirectInputDeviceA, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInputDeviceA methods ***/\n    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;\n    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE;\n    STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;\n    STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;\n    STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;\n    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;\n    STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;\n};\n\ntypedef struct IDirectInputDeviceA *LPDIRECTINPUTDEVICEA;\n\n#ifdef UNICODE\n#define IID_IDirectInputDevice IID_IDirectInputDeviceW\n#define IDirectInputDevice IDirectInputDeviceW\n#define IDirectInputDeviceVtbl IDirectInputDeviceWVtbl\n#else\n#define IID_IDirectInputDevice IID_IDirectInputDeviceA\n#define IDirectInputDevice IDirectInputDeviceA\n#define IDirectInputDeviceVtbl IDirectInputDeviceAVtbl\n#endif\ntypedef struct IDirectInputDevice *LPDIRECTINPUTDEVICE;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectInputDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInputDevice_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirectInputDevice_Release(p) (p)->lpVtbl->Release(p)\n#define IDirectInputDevice_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a)\n#define IDirectInputDevice_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c)\n#define IDirectInputDevice_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b)\n#define IDirectInputDevice_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b)\n#define IDirectInputDevice_Acquire(p) (p)->lpVtbl->Acquire(p)\n#define IDirectInputDevice_Unacquire(p) (p)->lpVtbl->Unacquire(p)\n#define IDirectInputDevice_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b)\n#define IDirectInputDevice_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d)\n#define IDirectInputDevice_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a)\n#define IDirectInputDevice_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a)\n#define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectInputDevice_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c)\n#define IDirectInputDevice_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a)\n#define IDirectInputDevice_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)\n#define IDirectInputDevice_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)\n#else\n#define IDirectInputDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInputDevice_AddRef(p) (p)->AddRef()\n#define IDirectInputDevice_Release(p) (p)->Release()\n#define IDirectInputDevice_GetCapabilities(p,a) (p)->GetCapabilities(a)\n#define IDirectInputDevice_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c)\n#define IDirectInputDevice_GetProperty(p,a,b) (p)->GetProperty(a,b)\n#define IDirectInputDevice_SetProperty(p,a,b) (p)->SetProperty(a,b)\n#define IDirectInputDevice_Acquire(p) (p)->Acquire()\n#define IDirectInputDevice_Unacquire(p) (p)->Unacquire()\n#define IDirectInputDevice_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b)\n#define IDirectInputDevice_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d)\n#define IDirectInputDevice_SetDataFormat(p,a) (p)->SetDataFormat(a)\n#define IDirectInputDevice_SetEventNotification(p,a) (p)->SetEventNotification(a)\n#define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)\n#define IDirectInputDevice_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c)\n#define IDirectInputDevice_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a)\n#define IDirectInputDevice_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)\n#define IDirectInputDevice_Initialize(p,a,b,c) (p)->Initialize(a,b,c)\n#endif\n\n#endif /* DIJ_RINGZERO */\n\n\n#if(DIRECTINPUT_VERSION >= 0x0500)\n\n#define DISFFC_RESET            0x00000001\n#define DISFFC_STOPALL          0x00000002\n#define DISFFC_PAUSE            0x00000004\n#define DISFFC_CONTINUE         0x00000008\n#define DISFFC_SETACTUATORSON   0x00000010\n#define DISFFC_SETACTUATORSOFF  0x00000020\n\n#define DIGFFS_EMPTY            0x00000001\n#define DIGFFS_STOPPED          0x00000002\n#define DIGFFS_PAUSED           0x00000004\n#define DIGFFS_ACTUATORSON      0x00000010\n#define DIGFFS_ACTUATORSOFF     0x00000020\n#define DIGFFS_POWERON          0x00000040\n#define DIGFFS_POWEROFF         0x00000080\n#define DIGFFS_SAFETYSWITCHON   0x00000100\n#define DIGFFS_SAFETYSWITCHOFF  0x00000200\n#define DIGFFS_USERFFSWITCHON   0x00000400\n#define DIGFFS_USERFFSWITCHOFF  0x00000800\n#define DIGFFS_DEVICELOST       0x80000000\n\n#ifndef DIJ_RINGZERO\n\ntypedef struct DIEFFECTINFOA {\n    DWORD   dwSize;\n    GUID    guid;\n    DWORD   dwEffType;\n    DWORD   dwStaticParams;\n    DWORD   dwDynamicParams;\n    CHAR    tszName[MAX_PATH];\n} DIEFFECTINFOA, *LPDIEFFECTINFOA;\ntypedef struct DIEFFECTINFOW {\n    DWORD   dwSize;\n    GUID    guid;\n    DWORD   dwEffType;\n    DWORD   dwStaticParams;\n    DWORD   dwDynamicParams;\n    WCHAR   tszName[MAX_PATH];\n} DIEFFECTINFOW, *LPDIEFFECTINFOW;\n#ifdef UNICODE\ntypedef DIEFFECTINFOW DIEFFECTINFO;\ntypedef LPDIEFFECTINFOW LPDIEFFECTINFO;\n#else\ntypedef DIEFFECTINFOA DIEFFECTINFO;\ntypedef LPDIEFFECTINFOA LPDIEFFECTINFO;\n#endif // UNICODE\ntypedef const DIEFFECTINFOA *LPCDIEFFECTINFOA;\ntypedef const DIEFFECTINFOW *LPCDIEFFECTINFOW;\ntypedef const DIEFFECTINFO  *LPCDIEFFECTINFO;\n\n#define DISDD_CONTINUE          0x00000001\n\ntypedef BOOL (FAR PASCAL * LPDIENUMEFFECTSCALLBACKA)(LPCDIEFFECTINFOA, LPVOID);\ntypedef BOOL (FAR PASCAL * LPDIENUMEFFECTSCALLBACKW)(LPCDIEFFECTINFOW, LPVOID);\n#ifdef UNICODE\n#define LPDIENUMEFFECTSCALLBACK  LPDIENUMEFFECTSCALLBACKW\n#else\n#define LPDIENUMEFFECTSCALLBACK  LPDIENUMEFFECTSCALLBACKA\n#endif // !UNICODE\ntypedef BOOL (FAR PASCAL * LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEFFECT, LPVOID);\n\n#undef INTERFACE\n#define INTERFACE IDirectInputDevice2W\n\nDECLARE_INTERFACE_(IDirectInputDevice2W, IDirectInputDeviceW)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInputDeviceW methods ***/\n    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;\n    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE;\n    STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;\n    STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;\n    STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;\n    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;\n    STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;\n\n    /*** IDirectInputDevice2W methods ***/\n    STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE;\n    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW,LPVOID,DWORD) PURE;\n    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW,REFGUID) PURE;\n    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE;\n    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE;\n    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE;\n    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;\n    STDMETHOD(Poll)(THIS) PURE;\n    STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;\n};\n\ntypedef struct IDirectInputDevice2W *LPDIRECTINPUTDEVICE2W;\n\n#undef INTERFACE\n#define INTERFACE IDirectInputDevice2A\n\nDECLARE_INTERFACE_(IDirectInputDevice2A, IDirectInputDeviceA)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInputDeviceA methods ***/\n    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;\n    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE;\n    STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;\n    STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;\n    STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;\n    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;\n    STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;\n\n    /*** IDirectInputDevice2A methods ***/\n    STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE;\n    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE;\n    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE;\n    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE;\n    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE;\n    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE;\n    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;\n    STDMETHOD(Poll)(THIS) PURE;\n    STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;\n};\n\ntypedef struct IDirectInputDevice2A *LPDIRECTINPUTDEVICE2A;\n\n#ifdef UNICODE\n#define IID_IDirectInputDevice2 IID_IDirectInputDevice2W\n#define IDirectInputDevice2 IDirectInputDevice2W\n#define IDirectInputDevice2Vtbl IDirectInputDevice2WVtbl\n#else\n#define IID_IDirectInputDevice2 IID_IDirectInputDevice2A\n#define IDirectInputDevice2 IDirectInputDevice2A\n#define IDirectInputDevice2Vtbl IDirectInputDevice2AVtbl\n#endif\ntypedef struct IDirectInputDevice2 *LPDIRECTINPUTDEVICE2;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectInputDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInputDevice2_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirectInputDevice2_Release(p) (p)->lpVtbl->Release(p)\n#define IDirectInputDevice2_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a)\n#define IDirectInputDevice2_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c)\n#define IDirectInputDevice2_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b)\n#define IDirectInputDevice2_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b)\n#define IDirectInputDevice2_Acquire(p) (p)->lpVtbl->Acquire(p)\n#define IDirectInputDevice2_Unacquire(p) (p)->lpVtbl->Unacquire(p)\n#define IDirectInputDevice2_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b)\n#define IDirectInputDevice2_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d)\n#define IDirectInputDevice2_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a)\n#define IDirectInputDevice2_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a)\n#define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectInputDevice2_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c)\n#define IDirectInputDevice2_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a)\n#define IDirectInputDevice2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)\n#define IDirectInputDevice2_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)\n#define IDirectInputDevice2_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d)\n#define IDirectInputDevice2_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c)\n#define IDirectInputDevice2_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b)\n#define IDirectInputDevice2_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a)\n#define IDirectInputDevice2_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a)\n#define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)\n#define IDirectInputDevice2_Escape(p,a) (p)->lpVtbl->Escape(p,a)\n#define IDirectInputDevice2_Poll(p) (p)->lpVtbl->Poll(p)\n#define IDirectInputDevice2_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d)\n#else\n#define IDirectInputDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInputDevice2_AddRef(p) (p)->AddRef()\n#define IDirectInputDevice2_Release(p) (p)->Release()\n#define IDirectInputDevice2_GetCapabilities(p,a) (p)->GetCapabilities(a)\n#define IDirectInputDevice2_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c)\n#define IDirectInputDevice2_GetProperty(p,a,b) (p)->GetProperty(a,b)\n#define IDirectInputDevice2_SetProperty(p,a,b) (p)->SetProperty(a,b)\n#define IDirectInputDevice2_Acquire(p) (p)->Acquire()\n#define IDirectInputDevice2_Unacquire(p) (p)->Unacquire()\n#define IDirectInputDevice2_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b)\n#define IDirectInputDevice2_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d)\n#define IDirectInputDevice2_SetDataFormat(p,a) (p)->SetDataFormat(a)\n#define IDirectInputDevice2_SetEventNotification(p,a) (p)->SetEventNotification(a)\n#define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)\n#define IDirectInputDevice2_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c)\n#define IDirectInputDevice2_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a)\n#define IDirectInputDevice2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)\n#define IDirectInputDevice2_Initialize(p,a,b,c) (p)->Initialize(a,b,c)\n#define IDirectInputDevice2_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d)\n#define IDirectInputDevice2_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c)\n#define IDirectInputDevice2_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b)\n#define IDirectInputDevice2_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a)\n#define IDirectInputDevice2_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a)\n#define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)\n#define IDirectInputDevice2_Escape(p,a) (p)->Escape(a)\n#define IDirectInputDevice2_Poll(p) (p)->Poll()\n#define IDirectInputDevice2_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d)\n#endif\n\n#endif /* DIJ_RINGZERO */\n\n#endif /* DIRECTINPUT_VERSION >= 0x0500 */\n\n#if(DIRECTINPUT_VERSION >= 0x0700)\n#define DIFEF_DEFAULT               0x00000000\n#define DIFEF_INCLUDENONSTANDARD    0x00000001\n#define DIFEF_MODIFYIFNEEDED            0x00000010\n\n#ifndef DIJ_RINGZERO\n\n#undef INTERFACE\n#define INTERFACE IDirectInputDevice7W\n\nDECLARE_INTERFACE_(IDirectInputDevice7W, IDirectInputDevice2W)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInputDevice2W methods ***/\n    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;\n    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE;\n    STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;\n    STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;\n    STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;\n    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;\n    STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;\n    STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE;\n    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW,LPVOID,DWORD) PURE;\n    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW,REFGUID) PURE;\n    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE;\n    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE;\n    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE;\n    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;\n    STDMETHOD(Poll)(THIS) PURE;\n    STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;\n\n    /*** IDirectInputDevice7W methods ***/\n    STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE;\n    STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE;\n};\n\ntypedef struct IDirectInputDevice7W *LPDIRECTINPUTDEVICE7W;\n\n#undef INTERFACE\n#define INTERFACE IDirectInputDevice7A\n\nDECLARE_INTERFACE_(IDirectInputDevice7A, IDirectInputDevice2A)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInputDevice2A methods ***/\n    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;\n    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE;\n    STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;\n    STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;\n    STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;\n    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;\n    STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;\n    STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE;\n    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE;\n    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE;\n    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE;\n    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE;\n    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE;\n    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;\n    STDMETHOD(Poll)(THIS) PURE;\n    STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;\n\n    /*** IDirectInputDevice7A methods ***/\n    STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE;\n    STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE;\n};\n\ntypedef struct IDirectInputDevice7A *LPDIRECTINPUTDEVICE7A;\n\n#ifdef UNICODE\n#define IID_IDirectInputDevice7 IID_IDirectInputDevice7W\n#define IDirectInputDevice7 IDirectInputDevice7W\n#define IDirectInputDevice7Vtbl IDirectInputDevice7WVtbl\n#else\n#define IID_IDirectInputDevice7 IID_IDirectInputDevice7A\n#define IDirectInputDevice7 IDirectInputDevice7A\n#define IDirectInputDevice7Vtbl IDirectInputDevice7AVtbl\n#endif\ntypedef struct IDirectInputDevice7 *LPDIRECTINPUTDEVICE7;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectInputDevice7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInputDevice7_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirectInputDevice7_Release(p) (p)->lpVtbl->Release(p)\n#define IDirectInputDevice7_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a)\n#define IDirectInputDevice7_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c)\n#define IDirectInputDevice7_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b)\n#define IDirectInputDevice7_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b)\n#define IDirectInputDevice7_Acquire(p) (p)->lpVtbl->Acquire(p)\n#define IDirectInputDevice7_Unacquire(p) (p)->lpVtbl->Unacquire(p)\n#define IDirectInputDevice7_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b)\n#define IDirectInputDevice7_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d)\n#define IDirectInputDevice7_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a)\n#define IDirectInputDevice7_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a)\n#define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectInputDevice7_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c)\n#define IDirectInputDevice7_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a)\n#define IDirectInputDevice7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)\n#define IDirectInputDevice7_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)\n#define IDirectInputDevice7_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d)\n#define IDirectInputDevice7_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c)\n#define IDirectInputDevice7_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b)\n#define IDirectInputDevice7_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a)\n#define IDirectInputDevice7_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a)\n#define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)\n#define IDirectInputDevice7_Escape(p,a) (p)->lpVtbl->Escape(p,a)\n#define IDirectInputDevice7_Poll(p) (p)->lpVtbl->Poll(p)\n#define IDirectInputDevice7_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d)\n#define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d)\n#define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d)\n#else\n#define IDirectInputDevice7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInputDevice7_AddRef(p) (p)->AddRef()\n#define IDirectInputDevice7_Release(p) (p)->Release()\n#define IDirectInputDevice7_GetCapabilities(p,a) (p)->GetCapabilities(a)\n#define IDirectInputDevice7_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c)\n#define IDirectInputDevice7_GetProperty(p,a,b) (p)->GetProperty(a,b)\n#define IDirectInputDevice7_SetProperty(p,a,b) (p)->SetProperty(a,b)\n#define IDirectInputDevice7_Acquire(p) (p)->Acquire()\n#define IDirectInputDevice7_Unacquire(p) (p)->Unacquire()\n#define IDirectInputDevice7_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b)\n#define IDirectInputDevice7_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d)\n#define IDirectInputDevice7_SetDataFormat(p,a) (p)->SetDataFormat(a)\n#define IDirectInputDevice7_SetEventNotification(p,a) (p)->SetEventNotification(a)\n#define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)\n#define IDirectInputDevice7_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c)\n#define IDirectInputDevice7_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a)\n#define IDirectInputDevice7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)\n#define IDirectInputDevice7_Initialize(p,a,b,c) (p)->Initialize(a,b,c)\n#define IDirectInputDevice7_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d)\n#define IDirectInputDevice7_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c)\n#define IDirectInputDevice7_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b)\n#define IDirectInputDevice7_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a)\n#define IDirectInputDevice7_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a)\n#define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)\n#define IDirectInputDevice7_Escape(p,a) (p)->Escape(a)\n#define IDirectInputDevice7_Poll(p) (p)->Poll()\n#define IDirectInputDevice7_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d)\n#define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d)\n#define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d)\n#endif\n\n#endif /* DIJ_RINGZERO */\n\n#endif /* DIRECTINPUT_VERSION >= 0x0700 */\n\n#if(DIRECTINPUT_VERSION >= 0x0800)\n\n#ifndef DIJ_RINGZERO\n\n#undef INTERFACE\n#define INTERFACE IDirectInputDevice8W\n\nDECLARE_INTERFACE_(IDirectInputDevice8W, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInputDevice8W methods ***/\n    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;\n    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE;\n    STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;\n    STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;\n    STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;\n    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;\n    STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;\n    STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE;\n    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW,LPVOID,DWORD) PURE;\n    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW,REFGUID) PURE;\n    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE;\n    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE;\n    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE;\n    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;\n    STDMETHOD(Poll)(THIS) PURE;\n    STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;\n    STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE;\n    STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE;\n    STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATW,LPCWSTR,DWORD) PURE;\n    STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATW,LPCWSTR,DWORD) PURE;\n    STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERW) PURE;\n};\n\ntypedef struct IDirectInputDevice8W *LPDIRECTINPUTDEVICE8W;\n\n#undef INTERFACE\n#define INTERFACE IDirectInputDevice8A\n\nDECLARE_INTERFACE_(IDirectInputDevice8A, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInputDevice8A methods ***/\n    STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE;\n    STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE;\n    STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE;\n    STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE;\n    STDMETHOD(Acquire)(THIS) PURE;\n    STDMETHOD(Unacquire)(THIS) PURE;\n    STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE;\n    STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;\n    STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE;\n    STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE;\n    STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE;\n    STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE;\n    STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE;\n    STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE;\n    STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE;\n    STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE;\n    STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE;\n    STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE;\n    STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE;\n    STDMETHOD(Poll)(THIS) PURE;\n    STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE;\n    STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE;\n    STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE;\n    STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATA,LPCSTR,DWORD) PURE;\n    STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATA,LPCSTR,DWORD) PURE;\n    STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERA) PURE;\n};\n\ntypedef struct IDirectInputDevice8A *LPDIRECTINPUTDEVICE8A;\n\n#ifdef UNICODE\n#define IID_IDirectInputDevice8 IID_IDirectInputDevice8W\n#define IDirectInputDevice8 IDirectInputDevice8W\n#define IDirectInputDevice8Vtbl IDirectInputDevice8WVtbl\n#else\n#define IID_IDirectInputDevice8 IID_IDirectInputDevice8A\n#define IDirectInputDevice8 IDirectInputDevice8A\n#define IDirectInputDevice8Vtbl IDirectInputDevice8AVtbl\n#endif\ntypedef struct IDirectInputDevice8 *LPDIRECTINPUTDEVICE8;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectInputDevice8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInputDevice8_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirectInputDevice8_Release(p) (p)->lpVtbl->Release(p)\n#define IDirectInputDevice8_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a)\n#define IDirectInputDevice8_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c)\n#define IDirectInputDevice8_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b)\n#define IDirectInputDevice8_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b)\n#define IDirectInputDevice8_Acquire(p) (p)->lpVtbl->Acquire(p)\n#define IDirectInputDevice8_Unacquire(p) (p)->lpVtbl->Unacquire(p)\n#define IDirectInputDevice8_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b)\n#define IDirectInputDevice8_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d)\n#define IDirectInputDevice8_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a)\n#define IDirectInputDevice8_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a)\n#define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectInputDevice8_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c)\n#define IDirectInputDevice8_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a)\n#define IDirectInputDevice8_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)\n#define IDirectInputDevice8_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c)\n#define IDirectInputDevice8_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d)\n#define IDirectInputDevice8_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c)\n#define IDirectInputDevice8_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b)\n#define IDirectInputDevice8_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a)\n#define IDirectInputDevice8_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a)\n#define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c)\n#define IDirectInputDevice8_Escape(p,a) (p)->lpVtbl->Escape(p,a)\n#define IDirectInputDevice8_Poll(p) (p)->lpVtbl->Poll(p)\n#define IDirectInputDevice8_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d)\n#define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d)\n#define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d)\n#define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->lpVtbl->BuildActionMap(p,a,b,c)\n#define IDirectInputDevice8_SetActionMap(p,a,b,c) (p)->lpVtbl->SetActionMap(p,a,b,c)\n#define IDirectInputDevice8_GetImageInfo(p,a) (p)->lpVtbl->GetImageInfo(p,a)\n#else\n#define IDirectInputDevice8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInputDevice8_AddRef(p) (p)->AddRef()\n#define IDirectInputDevice8_Release(p) (p)->Release()\n#define IDirectInputDevice8_GetCapabilities(p,a) (p)->GetCapabilities(a)\n#define IDirectInputDevice8_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c)\n#define IDirectInputDevice8_GetProperty(p,a,b) (p)->GetProperty(a,b)\n#define IDirectInputDevice8_SetProperty(p,a,b) (p)->SetProperty(a,b)\n#define IDirectInputDevice8_Acquire(p) (p)->Acquire()\n#define IDirectInputDevice8_Unacquire(p) (p)->Unacquire()\n#define IDirectInputDevice8_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b)\n#define IDirectInputDevice8_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d)\n#define IDirectInputDevice8_SetDataFormat(p,a) (p)->SetDataFormat(a)\n#define IDirectInputDevice8_SetEventNotification(p,a) (p)->SetEventNotification(a)\n#define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)\n#define IDirectInputDevice8_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c)\n#define IDirectInputDevice8_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a)\n#define IDirectInputDevice8_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)\n#define IDirectInputDevice8_Initialize(p,a,b,c) (p)->Initialize(a,b,c)\n#define IDirectInputDevice8_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d)\n#define IDirectInputDevice8_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c)\n#define IDirectInputDevice8_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b)\n#define IDirectInputDevice8_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a)\n#define IDirectInputDevice8_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a)\n#define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c)\n#define IDirectInputDevice8_Escape(p,a) (p)->Escape(a)\n#define IDirectInputDevice8_Poll(p) (p)->Poll()\n#define IDirectInputDevice8_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d)\n#define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d)\n#define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d)\n#define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->BuildActionMap(a,b,c)\n#define IDirectInputDevice8_SetActionMap(p,a,b,c) (p)->SetActionMap(a,b,c)\n#define IDirectInputDevice8_GetImageInfo(p,a) (p)->GetImageInfo(a)\n#endif\n\n#endif /* DIJ_RINGZERO */\n\n#endif /* DIRECTINPUT_VERSION >= 0x0800 */\n\n/****************************************************************************\n *\n *      Mouse\n *\n ****************************************************************************/\n\n#ifndef DIJ_RINGZERO\n\ntypedef struct _DIMOUSESTATE {\n    LONG    lX;\n    LONG    lY;\n    LONG    lZ;\n    BYTE    rgbButtons[4];\n} DIMOUSESTATE, *LPDIMOUSESTATE;\n\n#if DIRECTINPUT_VERSION >= 0x0700\ntypedef struct _DIMOUSESTATE2 {\n    LONG    lX;\n    LONG    lY;\n    LONG    lZ;\n    BYTE    rgbButtons[8];\n} DIMOUSESTATE2, *LPDIMOUSESTATE2;\n#endif\n\n\n#define DIMOFS_X        FIELD_OFFSET(DIMOUSESTATE, lX)\n#define DIMOFS_Y        FIELD_OFFSET(DIMOUSESTATE, lY)\n#define DIMOFS_Z        FIELD_OFFSET(DIMOUSESTATE, lZ)\n#define DIMOFS_BUTTON0 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 0)\n#define DIMOFS_BUTTON1 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 1)\n#define DIMOFS_BUTTON2 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 2)\n#define DIMOFS_BUTTON3 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 3)\n#if (DIRECTINPUT_VERSION >= 0x0700)\n#define DIMOFS_BUTTON4 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 4)\n#define DIMOFS_BUTTON5 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 5)\n#define DIMOFS_BUTTON6 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 6)\n#define DIMOFS_BUTTON7 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 7)\n#endif\n#endif /* DIJ_RINGZERO */\n\n/****************************************************************************\n *\n *      Keyboard\n *\n ****************************************************************************/\n\n#ifndef DIJ_RINGZERO\n\n/****************************************************************************\n *\n *      DirectInput keyboard scan codes\n *\n ****************************************************************************/\n#define DIK_ESCAPE          0x01\n#define DIK_1               0x02\n#define DIK_2               0x03\n#define DIK_3               0x04\n#define DIK_4               0x05\n#define DIK_5               0x06\n#define DIK_6               0x07\n#define DIK_7               0x08\n#define DIK_8               0x09\n#define DIK_9               0x0A\n#define DIK_0               0x0B\n#define DIK_MINUS           0x0C    /* - on main keyboard */\n#define DIK_EQUALS          0x0D\n#define DIK_BACK            0x0E    /* backspace */\n#define DIK_TAB             0x0F\n#define DIK_Q               0x10\n#define DIK_W               0x11\n#define DIK_E               0x12\n#define DIK_R               0x13\n#define DIK_T               0x14\n#define DIK_Y               0x15\n#define DIK_U               0x16\n#define DIK_I               0x17\n#define DIK_O               0x18\n#define DIK_P               0x19\n#define DIK_LBRACKET        0x1A\n#define DIK_RBRACKET        0x1B\n#define DIK_RETURN          0x1C    /* Enter on main keyboard */\n#define DIK_LCONTROL        0x1D\n#define DIK_A               0x1E\n#define DIK_S               0x1F\n#define DIK_D               0x20\n#define DIK_F               0x21\n#define DIK_G               0x22\n#define DIK_H               0x23\n#define DIK_J               0x24\n#define DIK_K               0x25\n#define DIK_L               0x26\n#define DIK_SEMICOLON       0x27\n#define DIK_APOSTROPHE      0x28\n#define DIK_GRAVE           0x29    /* accent grave */\n#define DIK_LSHIFT          0x2A\n#define DIK_BACKSLASH       0x2B\n#define DIK_Z               0x2C\n#define DIK_X               0x2D\n#define DIK_C               0x2E\n#define DIK_V               0x2F\n#define DIK_B               0x30\n#define DIK_N               0x31\n#define DIK_M               0x32\n#define DIK_COMMA           0x33\n#define DIK_PERIOD          0x34    /* . on main keyboard */\n#define DIK_SLASH           0x35    /* / on main keyboard */\n#define DIK_RSHIFT          0x36\n#define DIK_MULTIPLY        0x37    /* * on numeric keypad */\n#define DIK_LMENU           0x38    /* left Alt */\n#define DIK_SPACE           0x39\n#define DIK_CAPITAL         0x3A\n#define DIK_F1              0x3B\n#define DIK_F2              0x3C\n#define DIK_F3              0x3D\n#define DIK_F4              0x3E\n#define DIK_F5              0x3F\n#define DIK_F6              0x40\n#define DIK_F7              0x41\n#define DIK_F8              0x42\n#define DIK_F9              0x43\n#define DIK_F10             0x44\n#define DIK_NUMLOCK         0x45\n#define DIK_SCROLL          0x46    /* Scroll Lock */\n#define DIK_NUMPAD7         0x47\n#define DIK_NUMPAD8         0x48\n#define DIK_NUMPAD9         0x49\n#define DIK_SUBTRACT        0x4A    /* - on numeric keypad */\n#define DIK_NUMPAD4         0x4B\n#define DIK_NUMPAD5         0x4C\n#define DIK_NUMPAD6         0x4D\n#define DIK_ADD             0x4E    /* + on numeric keypad */\n#define DIK_NUMPAD1         0x4F\n#define DIK_NUMPAD2         0x50\n#define DIK_NUMPAD3         0x51\n#define DIK_NUMPAD0         0x52\n#define DIK_DECIMAL         0x53    /* . on numeric keypad */\n#define DIK_OEM_102         0x56    /* <> or \\| on RT 102-key keyboard (Non-U.S.) */\n#define DIK_F11             0x57\n#define DIK_F12             0x58\n#define DIK_F13             0x64    /*                     (NEC PC98) */\n#define DIK_F14             0x65    /*                     (NEC PC98) */\n#define DIK_F15             0x66    /*                     (NEC PC98) */\n#define DIK_KANA            0x70    /* (Japanese keyboard)            */\n#define DIK_ABNT_C1         0x73    /* /? on Brazilian keyboard */\n#define DIK_CONVERT         0x79    /* (Japanese keyboard)            */\n#define DIK_NOCONVERT       0x7B    /* (Japanese keyboard)            */\n#define DIK_YEN             0x7D    /* (Japanese keyboard)            */\n#define DIK_ABNT_C2         0x7E    /* Numpad . on Brazilian keyboard */\n#define DIK_NUMPADEQUALS    0x8D    /* = on numeric keypad (NEC PC98) */\n#define DIK_PREVTRACK       0x90    /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */\n#define DIK_AT              0x91    /*                     (NEC PC98) */\n#define DIK_COLON           0x92    /*                     (NEC PC98) */\n#define DIK_UNDERLINE       0x93    /*                     (NEC PC98) */\n#define DIK_KANJI           0x94    /* (Japanese keyboard)            */\n#define DIK_STOP            0x95    /*                     (NEC PC98) */\n#define DIK_AX              0x96    /*                     (Japan AX) */\n#define DIK_UNLABELED       0x97    /*                        (J3100) */\n#define DIK_NEXTTRACK       0x99    /* Next Track */\n#define DIK_NUMPADENTER     0x9C    /* Enter on numeric keypad */\n#define DIK_RCONTROL        0x9D\n#define DIK_MUTE            0xA0    /* Mute */\n#define DIK_CALCULATOR      0xA1    /* Calculator */\n#define DIK_PLAYPAUSE       0xA2    /* Play / Pause */\n#define DIK_MEDIASTOP       0xA4    /* Media Stop */\n#define DIK_VOLUMEDOWN      0xAE    /* Volume - */\n#define DIK_VOLUMEUP        0xB0    /* Volume + */\n#define DIK_WEBHOME         0xB2    /* Web home */\n#define DIK_NUMPADCOMMA     0xB3    /* , on numeric keypad (NEC PC98) */\n#define DIK_DIVIDE          0xB5    /* / on numeric keypad */\n#define DIK_SYSRQ           0xB7\n#define DIK_RMENU           0xB8    /* right Alt */\n#define DIK_PAUSE           0xC5    /* Pause */\n#define DIK_HOME            0xC7    /* Home on arrow keypad */\n#define DIK_UP              0xC8    /* UpArrow on arrow keypad */\n#define DIK_PRIOR           0xC9    /* PgUp on arrow keypad */\n#define DIK_LEFT            0xCB    /* LeftArrow on arrow keypad */\n#define DIK_RIGHT           0xCD    /* RightArrow on arrow keypad */\n#define DIK_END             0xCF    /* End on arrow keypad */\n#define DIK_DOWN            0xD0    /* DownArrow on arrow keypad */\n#define DIK_NEXT            0xD1    /* PgDn on arrow keypad */\n#define DIK_INSERT          0xD2    /* Insert on arrow keypad */\n#define DIK_DELETE          0xD3    /* Delete on arrow keypad */\n#define DIK_LWIN            0xDB    /* Left Windows key */\n#define DIK_RWIN            0xDC    /* Right Windows key */\n#define DIK_APPS            0xDD    /* AppMenu key */\n#define DIK_POWER           0xDE    /* System Power */\n#define DIK_SLEEP           0xDF    /* System Sleep */\n#define DIK_WAKE            0xE3    /* System Wake */\n#define DIK_WEBSEARCH       0xE5    /* Web Search */\n#define DIK_WEBFAVORITES    0xE6    /* Web Favorites */\n#define DIK_WEBREFRESH      0xE7    /* Web Refresh */\n#define DIK_WEBSTOP         0xE8    /* Web Stop */\n#define DIK_WEBFORWARD      0xE9    /* Web Forward */\n#define DIK_WEBBACK         0xEA    /* Web Back */\n#define DIK_MYCOMPUTER      0xEB    /* My Computer */\n#define DIK_MAIL            0xEC    /* Mail */\n#define DIK_MEDIASELECT     0xED    /* Media Select */\n\n/*\n *  Alternate names for keys, to facilitate transition from DOS.\n */\n#define DIK_BACKSPACE       DIK_BACK            /* backspace */\n#define DIK_NUMPADSTAR      DIK_MULTIPLY        /* * on numeric keypad */\n#define DIK_LALT            DIK_LMENU           /* left Alt */\n#define DIK_CAPSLOCK        DIK_CAPITAL         /* CapsLock */\n#define DIK_NUMPADMINUS     DIK_SUBTRACT        /* - on numeric keypad */\n#define DIK_NUMPADPLUS      DIK_ADD             /* + on numeric keypad */\n#define DIK_NUMPADPERIOD    DIK_DECIMAL         /* . on numeric keypad */\n#define DIK_NUMPADSLASH     DIK_DIVIDE          /* / on numeric keypad */\n#define DIK_RALT            DIK_RMENU           /* right Alt */\n#define DIK_UPARROW         DIK_UP              /* UpArrow on arrow keypad */\n#define DIK_PGUP            DIK_PRIOR           /* PgUp on arrow keypad */\n#define DIK_LEFTARROW       DIK_LEFT            /* LeftArrow on arrow keypad */\n#define DIK_RIGHTARROW      DIK_RIGHT           /* RightArrow on arrow keypad */\n#define DIK_DOWNARROW       DIK_DOWN            /* DownArrow on arrow keypad */\n#define DIK_PGDN            DIK_NEXT            /* PgDn on arrow keypad */\n\n/*\n *  Alternate names for keys originally not used on US keyboards.\n */\n#define DIK_CIRCUMFLEX      DIK_PREVTRACK       /* Japanese keyboard */\n\n#endif /* DIJ_RINGZERO */\n\n/****************************************************************************\n *\n *      Joystick\n *\n ****************************************************************************/\n\n#ifndef DIJ_RINGZERO\n\ntypedef struct DIJOYSTATE {\n    LONG    lX;                     /* x-axis position              */\n    LONG    lY;                     /* y-axis position              */\n    LONG    lZ;                     /* z-axis position              */\n    LONG    lRx;                    /* x-axis rotation              */\n    LONG    lRy;                    /* y-axis rotation              */\n    LONG    lRz;                    /* z-axis rotation              */\n    LONG    rglSlider[2];           /* extra axes positions         */\n    DWORD   rgdwPOV[4];             /* POV directions               */\n    BYTE    rgbButtons[32];         /* 32 buttons                   */\n} DIJOYSTATE, *LPDIJOYSTATE;\n\ntypedef struct DIJOYSTATE2 {\n    LONG    lX;                     /* x-axis position              */\n    LONG    lY;                     /* y-axis position              */\n    LONG    lZ;                     /* z-axis position              */\n    LONG    lRx;                    /* x-axis rotation              */\n    LONG    lRy;                    /* y-axis rotation              */\n    LONG    lRz;                    /* z-axis rotation              */\n    LONG    rglSlider[2];           /* extra axes positions         */\n    DWORD   rgdwPOV[4];             /* POV directions               */\n    BYTE    rgbButtons[128];        /* 128 buttons                  */\n    LONG    lVX;                    /* x-axis velocity              */\n    LONG    lVY;                    /* y-axis velocity              */\n    LONG    lVZ;                    /* z-axis velocity              */\n    LONG    lVRx;                   /* x-axis angular velocity      */\n    LONG    lVRy;                   /* y-axis angular velocity      */\n    LONG    lVRz;                   /* z-axis angular velocity      */\n    LONG    rglVSlider[2];          /* extra axes velocities        */\n    LONG    lAX;                    /* x-axis acceleration          */\n    LONG    lAY;                    /* y-axis acceleration          */\n    LONG    lAZ;                    /* z-axis acceleration          */\n    LONG    lARx;                   /* x-axis angular acceleration  */\n    LONG    lARy;                   /* y-axis angular acceleration  */\n    LONG    lARz;                   /* z-axis angular acceleration  */\n    LONG    rglASlider[2];          /* extra axes accelerations     */\n    LONG    lFX;                    /* x-axis force                 */\n    LONG    lFY;                    /* y-axis force                 */\n    LONG    lFZ;                    /* z-axis force                 */\n    LONG    lFRx;                   /* x-axis torque                */\n    LONG    lFRy;                   /* y-axis torque                */\n    LONG    lFRz;                   /* z-axis torque                */\n    LONG    rglFSlider[2];          /* extra axes forces            */\n} DIJOYSTATE2, *LPDIJOYSTATE2;\n\n#define DIJOFS_X            FIELD_OFFSET(DIJOYSTATE, lX)\n#define DIJOFS_Y            FIELD_OFFSET(DIJOYSTATE, lY)\n#define DIJOFS_Z            FIELD_OFFSET(DIJOYSTATE, lZ)\n#define DIJOFS_RX           FIELD_OFFSET(DIJOYSTATE, lRx)\n#define DIJOFS_RY           FIELD_OFFSET(DIJOYSTATE, lRy)\n#define DIJOFS_RZ           FIELD_OFFSET(DIJOYSTATE, lRz)\n#define DIJOFS_SLIDER(n)   (FIELD_OFFSET(DIJOYSTATE, rglSlider) + \\\n                                                        (n) * sizeof(LONG))\n#define DIJOFS_POV(n)      (FIELD_OFFSET(DIJOYSTATE, rgdwPOV) + \\\n                                                        (n) * sizeof(DWORD))\n#define DIJOFS_BUTTON(n)   (FIELD_OFFSET(DIJOYSTATE, rgbButtons) + (n))\n#define DIJOFS_BUTTON0      DIJOFS_BUTTON(0)\n#define DIJOFS_BUTTON1      DIJOFS_BUTTON(1)\n#define DIJOFS_BUTTON2      DIJOFS_BUTTON(2)\n#define DIJOFS_BUTTON3      DIJOFS_BUTTON(3)\n#define DIJOFS_BUTTON4      DIJOFS_BUTTON(4)\n#define DIJOFS_BUTTON5      DIJOFS_BUTTON(5)\n#define DIJOFS_BUTTON6      DIJOFS_BUTTON(6)\n#define DIJOFS_BUTTON7      DIJOFS_BUTTON(7)\n#define DIJOFS_BUTTON8      DIJOFS_BUTTON(8)\n#define DIJOFS_BUTTON9      DIJOFS_BUTTON(9)\n#define DIJOFS_BUTTON10     DIJOFS_BUTTON(10)\n#define DIJOFS_BUTTON11     DIJOFS_BUTTON(11)\n#define DIJOFS_BUTTON12     DIJOFS_BUTTON(12)\n#define DIJOFS_BUTTON13     DIJOFS_BUTTON(13)\n#define DIJOFS_BUTTON14     DIJOFS_BUTTON(14)\n#define DIJOFS_BUTTON15     DIJOFS_BUTTON(15)\n#define DIJOFS_BUTTON16     DIJOFS_BUTTON(16)\n#define DIJOFS_BUTTON17     DIJOFS_BUTTON(17)\n#define DIJOFS_BUTTON18     DIJOFS_BUTTON(18)\n#define DIJOFS_BUTTON19     DIJOFS_BUTTON(19)\n#define DIJOFS_BUTTON20     DIJOFS_BUTTON(20)\n#define DIJOFS_BUTTON21     DIJOFS_BUTTON(21)\n#define DIJOFS_BUTTON22     DIJOFS_BUTTON(22)\n#define DIJOFS_BUTTON23     DIJOFS_BUTTON(23)\n#define DIJOFS_BUTTON24     DIJOFS_BUTTON(24)\n#define DIJOFS_BUTTON25     DIJOFS_BUTTON(25)\n#define DIJOFS_BUTTON26     DIJOFS_BUTTON(26)\n#define DIJOFS_BUTTON27     DIJOFS_BUTTON(27)\n#define DIJOFS_BUTTON28     DIJOFS_BUTTON(28)\n#define DIJOFS_BUTTON29     DIJOFS_BUTTON(29)\n#define DIJOFS_BUTTON30     DIJOFS_BUTTON(30)\n#define DIJOFS_BUTTON31     DIJOFS_BUTTON(31)\n\n\n#endif /* DIJ_RINGZERO */\n\n/****************************************************************************\n *\n *  IDirectInput\n *\n ****************************************************************************/\n\n#ifndef DIJ_RINGZERO\n\n#define DIENUM_STOP             0\n#define DIENUM_CONTINUE         1\n\ntypedef BOOL (FAR PASCAL * LPDIENUMDEVICESCALLBACKA)(LPCDIDEVICEINSTANCEA, LPVOID);\ntypedef BOOL (FAR PASCAL * LPDIENUMDEVICESCALLBACKW)(LPCDIDEVICEINSTANCEW, LPVOID);\n#ifdef UNICODE\n#define LPDIENUMDEVICESCALLBACK  LPDIENUMDEVICESCALLBACKW\n#else\n#define LPDIENUMDEVICESCALLBACK  LPDIENUMDEVICESCALLBACKA\n#endif // !UNICODE\ntypedef BOOL (FAR PASCAL * LPDICONFIGUREDEVICESCALLBACK)(IUnknown FAR *, LPVOID);\n\n#define DIEDFL_ALLDEVICES       0x00000000\n#define DIEDFL_ATTACHEDONLY     0x00000001\n#if(DIRECTINPUT_VERSION >= 0x0500)\n#define DIEDFL_FORCEFEEDBACK    0x00000100\n#endif /* DIRECTINPUT_VERSION >= 0x0500 */\n#if(DIRECTINPUT_VERSION >= 0x050a)\n#define DIEDFL_INCLUDEALIASES   0x00010000\n#define DIEDFL_INCLUDEPHANTOMS  0x00020000\n#endif /* DIRECTINPUT_VERSION >= 0x050a */\n#if(DIRECTINPUT_VERSION >= 0x0800)\n#define DIEDFL_INCLUDEHIDDEN    0x00040000\n#endif /* DIRECTINPUT_VERSION >= 0x0800 */\n\n\n#if(DIRECTINPUT_VERSION >= 0x0800)\ntypedef BOOL (FAR PASCAL * LPDIENUMDEVICESBYSEMANTICSCBA)(LPCDIDEVICEINSTANCEA, LPDIRECTINPUTDEVICE8A, DWORD, DWORD, LPVOID);\ntypedef BOOL (FAR PASCAL * LPDIENUMDEVICESBYSEMANTICSCBW)(LPCDIDEVICEINSTANCEW, LPDIRECTINPUTDEVICE8W, DWORD, DWORD, LPVOID);\n#ifdef UNICODE\n#define LPDIENUMDEVICESBYSEMANTICSCB  LPDIENUMDEVICESBYSEMANTICSCBW\n#else\n#define LPDIENUMDEVICESBYSEMANTICSCB  LPDIENUMDEVICESBYSEMANTICSCBA\n#endif // !UNICODE\n#endif /* DIRECTINPUT_VERSION >= 0x0800 */\n\n#if(DIRECTINPUT_VERSION >= 0x0800)\n#define DIEDBS_MAPPEDPRI1         0x00000001\n#define DIEDBS_MAPPEDPRI2         0x00000002\n#define DIEDBS_RECENTDEVICE       0x00000010\n#define DIEDBS_NEWDEVICE          0x00000020\n#endif /* DIRECTINPUT_VERSION >= 0x0800 */\n\n#if(DIRECTINPUT_VERSION >= 0x0800)\n#define DIEDBSFL_ATTACHEDONLY       0x00000000\n#define DIEDBSFL_THISUSER           0x00000010\n#define DIEDBSFL_FORCEFEEDBACK      DIEDFL_FORCEFEEDBACK\n#define DIEDBSFL_AVAILABLEDEVICES   0x00001000\n#define DIEDBSFL_MULTIMICEKEYBOARDS 0x00002000\n#define DIEDBSFL_NONGAMINGDEVICES   0x00004000\n#define DIEDBSFL_VALID              0x00007110\n#endif /* DIRECTINPUT_VERSION >= 0x0800 */\n\n#undef INTERFACE\n#define INTERFACE IDirectInputW\n\nDECLARE_INTERFACE_(IDirectInputW, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInputW methods ***/\n    STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE;\n    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;\n};\n\ntypedef struct IDirectInputW *LPDIRECTINPUTW;\n\n#undef INTERFACE\n#define INTERFACE IDirectInputA\n\nDECLARE_INTERFACE_(IDirectInputA, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInputA methods ***/\n    STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE;\n    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;\n};\n\ntypedef struct IDirectInputA *LPDIRECTINPUTA;\n\n#ifdef UNICODE\n#define IID_IDirectInput IID_IDirectInputW\n#define IDirectInput IDirectInputW\n#define IDirectInputVtbl IDirectInputWVtbl\n#else\n#define IID_IDirectInput IID_IDirectInputA\n#define IDirectInput IDirectInputA\n#define IDirectInputVtbl IDirectInputAVtbl\n#endif\ntypedef struct IDirectInput *LPDIRECTINPUT;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectInput_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInput_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirectInput_Release(p) (p)->lpVtbl->Release(p)\n#define IDirectInput_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)\n#define IDirectInput_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)\n#define IDirectInput_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a)\n#define IDirectInput_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)\n#define IDirectInput_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)\n#else\n#define IDirectInput_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInput_AddRef(p) (p)->AddRef()\n#define IDirectInput_Release(p) (p)->Release()\n#define IDirectInput_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)\n#define IDirectInput_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)\n#define IDirectInput_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a)\n#define IDirectInput_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)\n#define IDirectInput_Initialize(p,a,b) (p)->Initialize(a,b)\n#endif\n\n#undef INTERFACE\n#define INTERFACE IDirectInput2W\n\nDECLARE_INTERFACE_(IDirectInput2W, IDirectInputW)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInputW methods ***/\n    STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE;\n    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;\n\n    /*** IDirectInput2W methods ***/\n    STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE;\n};\n\ntypedef struct IDirectInput2W *LPDIRECTINPUT2W;\n\n#undef INTERFACE\n#define INTERFACE IDirectInput2A\n\nDECLARE_INTERFACE_(IDirectInput2A, IDirectInputA)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInputA methods ***/\n    STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE;\n    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;\n\n    /*** IDirectInput2A methods ***/\n    STDMETHOD(FindDevice)(THIS_ REFGUID,LPCSTR,LPGUID) PURE;\n};\n\ntypedef struct IDirectInput2A *LPDIRECTINPUT2A;\n\n#ifdef UNICODE\n#define IID_IDirectInput2 IID_IDirectInput2W\n#define IDirectInput2 IDirectInput2W\n#define IDirectInput2Vtbl IDirectInput2WVtbl\n#else\n#define IID_IDirectInput2 IID_IDirectInput2A\n#define IDirectInput2 IDirectInput2A\n#define IDirectInput2Vtbl IDirectInput2AVtbl\n#endif\ntypedef struct IDirectInput2 *LPDIRECTINPUT2;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectInput2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInput2_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirectInput2_Release(p) (p)->lpVtbl->Release(p)\n#define IDirectInput2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)\n#define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)\n#define IDirectInput2_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a)\n#define IDirectInput2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)\n#define IDirectInput2_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectInput2_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c)\n#else\n#define IDirectInput2_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInput2_AddRef(p) (p)->AddRef()\n#define IDirectInput2_Release(p) (p)->Release()\n#define IDirectInput2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)\n#define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)\n#define IDirectInput2_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a)\n#define IDirectInput2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)\n#define IDirectInput2_Initialize(p,a,b) (p)->Initialize(a,b)\n#define IDirectInput2_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c)\n#endif\n\n\n#undef INTERFACE\n#define INTERFACE IDirectInput7W\n\nDECLARE_INTERFACE_(IDirectInput7W, IDirectInput2W)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInput2W methods ***/\n    STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE;\n    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;\n    STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE;\n\n    /*** IDirectInput7W methods ***/\n    STDMETHOD(CreateDeviceEx)(THIS_ REFGUID,REFIID,LPVOID *,LPUNKNOWN) PURE;\n};\n\ntypedef struct IDirectInput7W *LPDIRECTINPUT7W;\n\n#undef INTERFACE\n#define INTERFACE IDirectInput7A\n\nDECLARE_INTERFACE_(IDirectInput7A, IDirectInput2A)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInput2A methods ***/\n    STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE;\n    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;\n    STDMETHOD(FindDevice)(THIS_ REFGUID,LPCSTR,LPGUID) PURE;\n\n    /*** IDirectInput7A methods ***/\n    STDMETHOD(CreateDeviceEx)(THIS_ REFGUID,REFIID,LPVOID *,LPUNKNOWN) PURE;\n};\n\ntypedef struct IDirectInput7A *LPDIRECTINPUT7A;\n\n#ifdef UNICODE\n#define IID_IDirectInput7 IID_IDirectInput7W\n#define IDirectInput7 IDirectInput7W\n#define IDirectInput7Vtbl IDirectInput7WVtbl\n#else\n#define IID_IDirectInput7 IID_IDirectInput7A\n#define IDirectInput7 IDirectInput7A\n#define IDirectInput7Vtbl IDirectInput7AVtbl\n#endif\ntypedef struct IDirectInput7 *LPDIRECTINPUT7;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectInput7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInput7_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirectInput7_Release(p) (p)->lpVtbl->Release(p)\n#define IDirectInput7_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)\n#define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)\n#define IDirectInput7_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a)\n#define IDirectInput7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)\n#define IDirectInput7_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectInput7_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c)\n#define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d)\n#else\n#define IDirectInput7_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInput7_AddRef(p) (p)->AddRef()\n#define IDirectInput7_Release(p) (p)->Release()\n#define IDirectInput7_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)\n#define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)\n#define IDirectInput7_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a)\n#define IDirectInput7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)\n#define IDirectInput7_Initialize(p,a,b) (p)->Initialize(a,b)\n#define IDirectInput7_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c)\n#define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->CreateDeviceEx(a,b,c,d)\n#endif\n\n#if(DIRECTINPUT_VERSION >= 0x0800)\n#undef INTERFACE\n#define INTERFACE IDirectInput8W\n\nDECLARE_INTERFACE_(IDirectInput8W, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInput8W methods ***/\n    STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICE8W *,LPUNKNOWN) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE;\n    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;\n    STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE;\n    STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCWSTR,LPDIACTIONFORMATW,LPDIENUMDEVICESBYSEMANTICSCBW,LPVOID,DWORD) PURE;\n    STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK,LPDICONFIGUREDEVICESPARAMSW,DWORD,LPVOID) PURE;\n};\n\ntypedef struct IDirectInput8W *LPDIRECTINPUT8W;\n\n#undef INTERFACE\n#define INTERFACE IDirectInput8A\n\nDECLARE_INTERFACE_(IDirectInput8A, IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)(THIS) PURE;\n    STDMETHOD_(ULONG,Release)(THIS) PURE;\n\n    /*** IDirectInput8A methods ***/\n    STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICE8A *,LPUNKNOWN) PURE;\n    STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE;\n    STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE;\n    STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE;\n    STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE;\n    STDMETHOD(FindDevice)(THIS_ REFGUID,LPCSTR,LPGUID) PURE;\n    STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCSTR,LPDIACTIONFORMATA,LPDIENUMDEVICESBYSEMANTICSCBA,LPVOID,DWORD) PURE;\n    STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK,LPDICONFIGUREDEVICESPARAMSA,DWORD,LPVOID) PURE;\n};\n\ntypedef struct IDirectInput8A *LPDIRECTINPUT8A;\n\n#ifdef UNICODE\n#define IID_IDirectInput8 IID_IDirectInput8W\n#define IDirectInput8 IDirectInput8W\n#define IDirectInput8Vtbl IDirectInput8WVtbl\n#else\n#define IID_IDirectInput8 IID_IDirectInput8A\n#define IDirectInput8 IDirectInput8A\n#define IDirectInput8Vtbl IDirectInput8AVtbl\n#endif\ntypedef struct IDirectInput8 *LPDIRECTINPUT8;\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectInput8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDirectInput8_AddRef(p) (p)->lpVtbl->AddRef(p)\n#define IDirectInput8_Release(p) (p)->lpVtbl->Release(p)\n#define IDirectInput8_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c)\n#define IDirectInput8_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d)\n#define IDirectInput8_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a)\n#define IDirectInput8_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b)\n#define IDirectInput8_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectInput8_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c)\n#define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->lpVtbl->EnumDevicesBySemantics(p,a,b,c,d,e)\n#define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->lpVtbl->ConfigureDevices(p,a,b,c,d)\n#else\n#define IDirectInput8_QueryInterface(p,a,b) (p)->QueryInterface(a,b)\n#define IDirectInput8_AddRef(p) (p)->AddRef()\n#define IDirectInput8_Release(p) (p)->Release()\n#define IDirectInput8_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c)\n#define IDirectInput8_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d)\n#define IDirectInput8_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a)\n#define IDirectInput8_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b)\n#define IDirectInput8_Initialize(p,a,b) (p)->Initialize(a,b)\n#define IDirectInput8_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c)\n#define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->EnumDevicesBySemantics(a,b,c,d,e)\n#define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->ConfigureDevices(a,b,c,d)\n#endif\n#endif /* DIRECTINPUT_VERSION >= 0x0800 */\n\n#if DIRECTINPUT_VERSION > 0x0700\n\nextern HRESULT WINAPI DirectInput8Create(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter);\n\n#else\nextern HRESULT WINAPI DirectInputCreateA(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUTA *ppDI, LPUNKNOWN punkOuter);\nextern HRESULT WINAPI DirectInputCreateW(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUTW *ppDI, LPUNKNOWN punkOuter);\n#ifdef UNICODE\n#define DirectInputCreate  DirectInputCreateW\n#else\n#define DirectInputCreate  DirectInputCreateA\n#endif // !UNICODE\n\nextern HRESULT WINAPI DirectInputCreateEx(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter);\n\n#endif /* DIRECTINPUT_VERSION > 0x700 */\n\n#endif /* DIJ_RINGZERO */\n\n\n/****************************************************************************\n *\n *  Return Codes\n *\n ****************************************************************************/\n\n/*\n *  The operation completed successfully.\n */\n#define DI_OK                           S_OK\n\n/*\n *  The device exists but is not currently attached.\n */\n#define DI_NOTATTACHED                  S_FALSE\n\n/*\n *  The device buffer overflowed.  Some input was lost.\n */\n#define DI_BUFFEROVERFLOW               S_FALSE\n\n/*\n *  The change in device properties had no effect.\n */\n#define DI_PROPNOEFFECT                 S_FALSE\n\n/*\n *  The operation had no effect.\n */\n#define DI_NOEFFECT                     S_FALSE\n\n/*\n *  The device is a polled device.  As a result, device buffering\n *  will not collect any data and event notifications will not be\n *  signalled until GetDeviceState is called.\n */\n#define DI_POLLEDDEVICE                 ((HRESULT)0x00000002L)\n\n/*\n *  The parameters of the effect were successfully updated by\n *  IDirectInputEffect::SetParameters, but the effect was not\n *  downloaded because the device is not exclusively acquired\n *  or because the DIEP_NODOWNLOAD flag was passed.\n */\n#define DI_DOWNLOADSKIPPED              ((HRESULT)0x00000003L)\n\n/*\n *  The parameters of the effect were successfully updated by\n *  IDirectInputEffect::SetParameters, but in order to change\n *  the parameters, the effect needed to be restarted.\n */\n#define DI_EFFECTRESTARTED              ((HRESULT)0x00000004L)\n\n/*\n *  The parameters of the effect were successfully updated by\n *  IDirectInputEffect::SetParameters, but some of them were\n *  beyond the capabilities of the device and were truncated.\n */\n#define DI_TRUNCATED                    ((HRESULT)0x00000008L)\n\n/*\n *  The settings have been successfully applied but could not be \n *  persisted. \n */\n#define DI_SETTINGSNOTSAVED\t\t\t\t((HRESULT)0x0000000BL)\n\n/*\n *  Equal to DI_EFFECTRESTARTED | DI_TRUNCATED.\n */\n#define DI_TRUNCATEDANDRESTARTED        ((HRESULT)0x0000000CL)\n\n/*\n *  A SUCCESS code indicating that settings cannot be modified.\n */\n#define DI_WRITEPROTECT                 ((HRESULT)0x00000013L)\n\n/*\n *  The application requires a newer version of DirectInput.\n */\n#define DIERR_OLDDIRECTINPUTVERSION     \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_OLD_WIN_VERSION)\n\n/*\n *  The application was written for an unsupported prerelease version\n *  of DirectInput.\n */\n#define DIERR_BETADIRECTINPUTVERSION    \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_RMODE_APP)\n\n/*\n *  The object could not be created due to an incompatible driver version\n *  or mismatched or incomplete driver components.\n */\n#define DIERR_BADDRIVERVER              \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BAD_DRIVER_LEVEL)\n\n/*\n * The device or device instance or effect is not registered with DirectInput.\n */\n#define DIERR_DEVICENOTREG              REGDB_E_CLASSNOTREG\n\n/*\n * The requested object does not exist.\n */\n#define DIERR_NOTFOUND                  \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND)\n\n/*\n * The requested object does not exist.\n */\n#define DIERR_OBJECTNOTFOUND            \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND)\n\n/*\n * An invalid parameter was passed to the returning function,\n * or the object was not in a state that admitted the function\n * to be called.\n */\n#define DIERR_INVALIDPARAM              E_INVALIDARG\n\n/*\n * The specified interface is not supported by the object\n */\n#define DIERR_NOINTERFACE               E_NOINTERFACE\n\n/*\n * An undetermined error occured inside the DInput subsystem\n */\n#define DIERR_GENERIC                   E_FAIL\n\n/*\n * The DInput subsystem couldn't allocate sufficient memory to complete the\n * caller's request.\n */\n#define DIERR_OUTOFMEMORY               E_OUTOFMEMORY\n\n/*\n * The function called is not supported at this time\n */\n#define DIERR_UNSUPPORTED               E_NOTIMPL\n\n/*\n * This object has not been initialized\n */\n#define DIERR_NOTINITIALIZED            \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_READY)\n\n/*\n * This object is already initialized\n */\n#define DIERR_ALREADYINITIALIZED        \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_ALREADY_INITIALIZED)\n\n/*\n * This object does not support aggregation\n */\n#define DIERR_NOAGGREGATION             CLASS_E_NOAGGREGATION\n\n/*\n * Another app has a higher priority level, preventing this call from\n * succeeding.\n */\n#define DIERR_OTHERAPPHASPRIO           E_ACCESSDENIED\n\n/*\n * Access to the device has been lost.  It must be re-acquired.\n */\n#define DIERR_INPUTLOST                 \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_READ_FAULT)\n\n/*\n * The operation cannot be performed while the device is acquired.\n */\n#define DIERR_ACQUIRED                  \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BUSY)\n\n/*\n * The operation cannot be performed unless the device is acquired.\n */\n#define DIERR_NOTACQUIRED               \\\n    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_INVALID_ACCESS)\n\n/*\n * The specified property cannot be changed.\n */\n#define DIERR_READONLY                  E_ACCESSDENIED\n\n/*\n * The device already has an event notification associated with it.\n */\n#define DIERR_HANDLEEXISTS              E_ACCESSDENIED\n\n/*\n * Data is not yet available.\n */\n#ifndef E_PENDING\n#define E_PENDING                       0x8000000AL\n#endif\n\n/*\n * Unable to IDirectInputJoyConfig_Acquire because the user\n * does not have sufficient privileges to change the joystick\n * configuration.\n */\n#define DIERR_INSUFFICIENTPRIVS         0x80040200L\n\n/*\n * The device is full.\n */\n#define DIERR_DEVICEFULL                0x80040201L\n\n/*\n * Not all the requested information fit into the buffer.\n */\n#define DIERR_MOREDATA                  0x80040202L\n\n/*\n * The effect is not downloaded.\n */\n#define DIERR_NOTDOWNLOADED             0x80040203L\n\n/*\n *  The device cannot be reinitialized because there are still effects\n *  attached to it.\n */\n#define DIERR_HASEFFECTS                0x80040204L\n\n/*\n *  The operation cannot be performed unless the device is acquired\n *  in DISCL_EXCLUSIVE mode.\n */\n#define DIERR_NOTEXCLUSIVEACQUIRED      0x80040205L\n\n/*\n *  The effect could not be downloaded because essential information\n *  is missing.  For example, no axes have been associated with the\n *  effect, or no type-specific information has been created.\n */\n#define DIERR_INCOMPLETEEFFECT          0x80040206L\n\n/*\n *  Attempted to read buffered device data from a device that is\n *  not buffered.\n */\n#define DIERR_NOTBUFFERED               0x80040207L\n\n/*\n *  An attempt was made to modify parameters of an effect while it is\n *  playing.  Not all hardware devices support altering the parameters\n *  of an effect while it is playing.\n */\n#define DIERR_EFFECTPLAYING             0x80040208L\n\n/*\n *  The operation could not be completed because the device is not\n *  plugged in.\n */\n#define DIERR_UNPLUGGED                 0x80040209L\n\n/*\n *  SendDeviceData failed because more information was requested\n *  to be sent than can be sent to the device.  Some devices have\n *  restrictions on how much data can be sent to them.  (For example,\n *  there might be a limit on the number of buttons that can be\n *  pressed at once.)\n */\n#define DIERR_REPORTFULL                0x8004020AL\n\n\n/*\n *  A mapper file function failed because reading or writing the user or IHV \n *  settings file failed.\n */\n#define DIERR_MAPFILEFAIL               0x8004020BL\n\n\n/*--- DINPUT Mapper Definitions: New for Dx8         ---*/\n\n\n/*--- Keyboard\n      Physical Keyboard Device       ---*/\n\n#define DIKEYBOARD_ESCAPE                       0x81000401\n#define DIKEYBOARD_1                            0x81000402\n#define DIKEYBOARD_2                            0x81000403\n#define DIKEYBOARD_3                            0x81000404\n#define DIKEYBOARD_4                            0x81000405\n#define DIKEYBOARD_5                            0x81000406\n#define DIKEYBOARD_6                            0x81000407\n#define DIKEYBOARD_7                            0x81000408\n#define DIKEYBOARD_8                            0x81000409\n#define DIKEYBOARD_9                            0x8100040A\n#define DIKEYBOARD_0                            0x8100040B\n#define DIKEYBOARD_MINUS                        0x8100040C    /* - on main keyboard */\n#define DIKEYBOARD_EQUALS                       0x8100040D\n#define DIKEYBOARD_BACK                         0x8100040E    /* backspace */\n#define DIKEYBOARD_TAB                          0x8100040F\n#define DIKEYBOARD_Q                            0x81000410\n#define DIKEYBOARD_W                            0x81000411\n#define DIKEYBOARD_E                            0x81000412\n#define DIKEYBOARD_R                            0x81000413\n#define DIKEYBOARD_T                            0x81000414\n#define DIKEYBOARD_Y                            0x81000415\n#define DIKEYBOARD_U                            0x81000416\n#define DIKEYBOARD_I                            0x81000417\n#define DIKEYBOARD_O                            0x81000418\n#define DIKEYBOARD_P                            0x81000419\n#define DIKEYBOARD_LBRACKET                     0x8100041A\n#define DIKEYBOARD_RBRACKET                     0x8100041B\n#define DIKEYBOARD_RETURN                       0x8100041C    /* Enter on main keyboard */\n#define DIKEYBOARD_LCONTROL                     0x8100041D\n#define DIKEYBOARD_A                            0x8100041E\n#define DIKEYBOARD_S                            0x8100041F\n#define DIKEYBOARD_D                            0x81000420\n#define DIKEYBOARD_F                            0x81000421\n#define DIKEYBOARD_G                            0x81000422\n#define DIKEYBOARD_H                            0x81000423\n#define DIKEYBOARD_J                            0x81000424\n#define DIKEYBOARD_K                            0x81000425\n#define DIKEYBOARD_L                            0x81000426\n#define DIKEYBOARD_SEMICOLON                    0x81000427\n#define DIKEYBOARD_APOSTROPHE                   0x81000428\n#define DIKEYBOARD_GRAVE                        0x81000429    /* accent grave */\n#define DIKEYBOARD_LSHIFT                       0x8100042A\n#define DIKEYBOARD_BACKSLASH                    0x8100042B\n#define DIKEYBOARD_Z                            0x8100042C\n#define DIKEYBOARD_X                            0x8100042D\n#define DIKEYBOARD_C                            0x8100042E\n#define DIKEYBOARD_V                            0x8100042F\n#define DIKEYBOARD_B                            0x81000430\n#define DIKEYBOARD_N                            0x81000431\n#define DIKEYBOARD_M                            0x81000432\n#define DIKEYBOARD_COMMA                        0x81000433\n#define DIKEYBOARD_PERIOD                       0x81000434    /* . on main keyboard */\n#define DIKEYBOARD_SLASH                        0x81000435    /* / on main keyboard */\n#define DIKEYBOARD_RSHIFT                       0x81000436\n#define DIKEYBOARD_MULTIPLY                     0x81000437    /* * on numeric keypad */\n#define DIKEYBOARD_LMENU                        0x81000438    /* left Alt */\n#define DIKEYBOARD_SPACE                        0x81000439\n#define DIKEYBOARD_CAPITAL                      0x8100043A\n#define DIKEYBOARD_F1                           0x8100043B\n#define DIKEYBOARD_F2                           0x8100043C\n#define DIKEYBOARD_F3                           0x8100043D\n#define DIKEYBOARD_F4                           0x8100043E\n#define DIKEYBOARD_F5                           0x8100043F\n#define DIKEYBOARD_F6                           0x81000440\n#define DIKEYBOARD_F7                           0x81000441\n#define DIKEYBOARD_F8                           0x81000442\n#define DIKEYBOARD_F9                           0x81000443\n#define DIKEYBOARD_F10                          0x81000444\n#define DIKEYBOARD_NUMLOCK                      0x81000445\n#define DIKEYBOARD_SCROLL                       0x81000446    /* Scroll Lock */\n#define DIKEYBOARD_NUMPAD7                      0x81000447\n#define DIKEYBOARD_NUMPAD8                      0x81000448\n#define DIKEYBOARD_NUMPAD9                      0x81000449\n#define DIKEYBOARD_SUBTRACT                     0x8100044A    /* - on numeric keypad */\n#define DIKEYBOARD_NUMPAD4                      0x8100044B\n#define DIKEYBOARD_NUMPAD5                      0x8100044C\n#define DIKEYBOARD_NUMPAD6                      0x8100044D\n#define DIKEYBOARD_ADD                          0x8100044E    /* + on numeric keypad */\n#define DIKEYBOARD_NUMPAD1                      0x8100044F\n#define DIKEYBOARD_NUMPAD2                      0x81000450\n#define DIKEYBOARD_NUMPAD3                      0x81000451\n#define DIKEYBOARD_NUMPAD0                      0x81000452\n#define DIKEYBOARD_DECIMAL                      0x81000453    /* . on numeric keypad */\n#define DIKEYBOARD_OEM_102                      0x81000456    /* <> or \\| on RT 102-key keyboard (Non-U.S.) */\n#define DIKEYBOARD_F11                          0x81000457\n#define DIKEYBOARD_F12                          0x81000458\n#define DIKEYBOARD_F13                          0x81000464    /*                     (NEC PC98) */\n#define DIKEYBOARD_F14                          0x81000465    /*                     (NEC PC98) */\n#define DIKEYBOARD_F15                          0x81000466    /*                     (NEC PC98) */\n#define DIKEYBOARD_KANA                         0x81000470    /* (Japanese keyboard)            */\n#define DIKEYBOARD_ABNT_C1                      0x81000473    /* /? on Brazilian keyboard */\n#define DIKEYBOARD_CONVERT                      0x81000479    /* (Japanese keyboard)            */\n#define DIKEYBOARD_NOCONVERT                    0x8100047B    /* (Japanese keyboard)            */\n#define DIKEYBOARD_YEN                          0x8100047D    /* (Japanese keyboard)            */\n#define DIKEYBOARD_ABNT_C2                      0x8100047E    /* Numpad . on Brazilian keyboard */\n#define DIKEYBOARD_NUMPADEQUALS                 0x8100048D    /* = on numeric keypad (NEC PC98) */\n#define DIKEYBOARD_PREVTRACK                    0x81000490    /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */\n#define DIKEYBOARD_AT                           0x81000491    /*                     (NEC PC98) */\n#define DIKEYBOARD_COLON                        0x81000492    /*                     (NEC PC98) */\n#define DIKEYBOARD_UNDERLINE                    0x81000493    /*                     (NEC PC98) */\n#define DIKEYBOARD_KANJI                        0x81000494    /* (Japanese keyboard)            */\n#define DIKEYBOARD_STOP                         0x81000495    /*                     (NEC PC98) */\n#define DIKEYBOARD_AX                           0x81000496    /*                     (Japan AX) */\n#define DIKEYBOARD_UNLABELED                    0x81000497    /*                        (J3100) */\n#define DIKEYBOARD_NEXTTRACK                    0x81000499    /* Next Track */\n#define DIKEYBOARD_NUMPADENTER                  0x8100049C    /* Enter on numeric keypad */\n#define DIKEYBOARD_RCONTROL                     0x8100049D\n#define DIKEYBOARD_MUTE                         0x810004A0    /* Mute */\n#define DIKEYBOARD_CALCULATOR                   0x810004A1    /* Calculator */\n#define DIKEYBOARD_PLAYPAUSE                    0x810004A2    /* Play / Pause */\n#define DIKEYBOARD_MEDIASTOP                    0x810004A4    /* Media Stop */\n#define DIKEYBOARD_VOLUMEDOWN                   0x810004AE    /* Volume - */\n#define DIKEYBOARD_VOLUMEUP                     0x810004B0    /* Volume + */\n#define DIKEYBOARD_WEBHOME                      0x810004B2    /* Web home */\n#define DIKEYBOARD_NUMPADCOMMA                  0x810004B3    /* , on numeric keypad (NEC PC98) */\n#define DIKEYBOARD_DIVIDE                       0x810004B5    /* / on numeric keypad */\n#define DIKEYBOARD_SYSRQ                        0x810004B7\n#define DIKEYBOARD_RMENU                        0x810004B8    /* right Alt */\n#define DIKEYBOARD_PAUSE                        0x810004C5    /* Pause */\n#define DIKEYBOARD_HOME                         0x810004C7    /* Home on arrow keypad */\n#define DIKEYBOARD_UP                           0x810004C8    /* UpArrow on arrow keypad */\n#define DIKEYBOARD_PRIOR                        0x810004C9    /* PgUp on arrow keypad */\n#define DIKEYBOARD_LEFT                         0x810004CB    /* LeftArrow on arrow keypad */\n#define DIKEYBOARD_RIGHT                        0x810004CD    /* RightArrow on arrow keypad */\n#define DIKEYBOARD_END                          0x810004CF    /* End on arrow keypad */\n#define DIKEYBOARD_DOWN                         0x810004D0    /* DownArrow on arrow keypad */\n#define DIKEYBOARD_NEXT                         0x810004D1    /* PgDn on arrow keypad */\n#define DIKEYBOARD_INSERT                       0x810004D2    /* Insert on arrow keypad */\n#define DIKEYBOARD_DELETE                       0x810004D3    /* Delete on arrow keypad */\n#define DIKEYBOARD_LWIN                         0x810004DB    /* Left Windows key */\n#define DIKEYBOARD_RWIN                         0x810004DC    /* Right Windows key */\n#define DIKEYBOARD_APPS                         0x810004DD    /* AppMenu key */\n#define DIKEYBOARD_POWER                        0x810004DE    /* System Power */\n#define DIKEYBOARD_SLEEP                        0x810004DF    /* System Sleep */\n#define DIKEYBOARD_WAKE                         0x810004E3    /* System Wake */\n#define DIKEYBOARD_WEBSEARCH                    0x810004E5    /* Web Search */\n#define DIKEYBOARD_WEBFAVORITES                 0x810004E6    /* Web Favorites */\n#define DIKEYBOARD_WEBREFRESH                   0x810004E7    /* Web Refresh */\n#define DIKEYBOARD_WEBSTOP                      0x810004E8    /* Web Stop */\n#define DIKEYBOARD_WEBFORWARD                   0x810004E9    /* Web Forward */\n#define DIKEYBOARD_WEBBACK                      0x810004EA    /* Web Back */\n#define DIKEYBOARD_MYCOMPUTER                   0x810004EB    /* My Computer */\n#define DIKEYBOARD_MAIL                         0x810004EC    /* Mail */\n#define DIKEYBOARD_MEDIASELECT                  0x810004ED    /* Media Select */\n  \n\n/*--- MOUSE\n      Physical Mouse Device             ---*/\n\n#define DIMOUSE_XAXISAB                         (0x82000200 |DIMOFS_X ) /* X Axis-absolute: Some mice natively report absolute coordinates  */ \n#define DIMOUSE_YAXISAB                         (0x82000200 |DIMOFS_Y ) /* Y Axis-absolute: Some mice natively report absolute coordinates */\n#define DIMOUSE_XAXIS                           (0x82000300 |DIMOFS_X ) /* X Axis */\n#define DIMOUSE_YAXIS                           (0x82000300 |DIMOFS_Y ) /* Y Axis */\n#define DIMOUSE_WHEEL                           (0x82000300 |DIMOFS_Z ) /* Z Axis */\n#define DIMOUSE_BUTTON0                         (0x82000400 |DIMOFS_BUTTON0) /* Button 0 */\n#define DIMOUSE_BUTTON1                         (0x82000400 |DIMOFS_BUTTON1) /* Button 1 */\n#define DIMOUSE_BUTTON2                         (0x82000400 |DIMOFS_BUTTON2) /* Button 2 */\n#define DIMOUSE_BUTTON3                         (0x82000400 |DIMOFS_BUTTON3) /* Button 3 */\n#define DIMOUSE_BUTTON4                         (0x82000400 |DIMOFS_BUTTON4) /* Button 4 */\n#define DIMOUSE_BUTTON5                         (0x82000400 |DIMOFS_BUTTON5) /* Button 5 */\n#define DIMOUSE_BUTTON6                         (0x82000400 |DIMOFS_BUTTON6) /* Button 6 */\n#define DIMOUSE_BUTTON7                         (0x82000400 |DIMOFS_BUTTON7) /* Button 7 */\n\n\n/*--- VOICE\n      Physical Dplay Voice Device       ---*/\n\n#define DIVOICE_CHANNEL1                        0x83000401\n#define DIVOICE_CHANNEL2                        0x83000402\n#define DIVOICE_CHANNEL3                        0x83000403\n#define DIVOICE_CHANNEL4                        0x83000404\n#define DIVOICE_CHANNEL5                        0x83000405\n#define DIVOICE_CHANNEL6                        0x83000406\n#define DIVOICE_CHANNEL7                        0x83000407\n#define DIVOICE_CHANNEL8                        0x83000408\n#define DIVOICE_TEAM                            0x83000409\n#define DIVOICE_ALL                             0x8300040A\n#define DIVOICE_RECORDMUTE                      0x8300040B\n#define DIVOICE_PLAYBACKMUTE                    0x8300040C\n#define DIVOICE_TRANSMIT                        0x8300040D\n\n#define DIVOICE_VOICECOMMAND                    0x83000410\n\n\n/*--- Driving Simulator - Racing\n      Vehicle control is primary objective  ---*/\n#define DIVIRTUAL_DRIVING_RACE                  0x01000000\n#define DIAXIS_DRIVINGR_STEER                   0x01008A01 /* Steering */\n#define DIAXIS_DRIVINGR_ACCELERATE              0x01039202 /* Accelerate */\n#define DIAXIS_DRIVINGR_BRAKE                   0x01041203 /* Brake-Axis */\n#define DIBUTTON_DRIVINGR_SHIFTUP               0x01000C01 /* Shift to next higher gear */\n#define DIBUTTON_DRIVINGR_SHIFTDOWN             0x01000C02 /* Shift to next lower gear */\n#define DIBUTTON_DRIVINGR_VIEW                  0x01001C03 /* Cycle through view options */\n#define DIBUTTON_DRIVINGR_MENU                  0x010004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIAXIS_DRIVINGR_ACCEL_AND_BRAKE         0x01014A04 /* Some devices combine accelerate and brake in a single axis */\n#define DIHATSWITCH_DRIVINGR_GLANCE             0x01004601 /* Look around */\n#define DIBUTTON_DRIVINGR_BRAKE                 0x01004C04 /* Brake-button */\n#define DIBUTTON_DRIVINGR_DASHBOARD             0x01004405 /* Select next dashboard option */\n#define DIBUTTON_DRIVINGR_AIDS                  0x01004406 /* Driver correction aids */\n#define DIBUTTON_DRIVINGR_MAP                   0x01004407 /* Display Driving Map */\n#define DIBUTTON_DRIVINGR_BOOST                 0x01004408 /* Turbo Boost */\n#define DIBUTTON_DRIVINGR_PIT                   0x01004409 /* Pit stop notification */\n#define DIBUTTON_DRIVINGR_ACCELERATE_LINK       0x0103D4E0 /* Fallback Accelerate button */\n#define DIBUTTON_DRIVINGR_STEER_LEFT_LINK       0x0100CCE4 /* Fallback Steer Left button */\n#define DIBUTTON_DRIVINGR_STEER_RIGHT_LINK      0x0100CCEC /* Fallback Steer Right button */\n#define DIBUTTON_DRIVINGR_GLANCE_LEFT_LINK      0x0107C4E4 /* Fallback Glance Left button */\n#define DIBUTTON_DRIVINGR_GLANCE_RIGHT_LINK     0x0107C4EC /* Fallback Glance Right button */\n#define DIBUTTON_DRIVINGR_DEVICE                0x010044FE /* Show input device and controls */\n#define DIBUTTON_DRIVINGR_PAUSE                 0x010044FC /* Start / Pause / Restart game */\n\n/*--- Driving Simulator - Combat\n      Combat from within a vehicle is primary objective  ---*/\n#define DIVIRTUAL_DRIVING_COMBAT                0x02000000\n#define DIAXIS_DRIVINGC_STEER                   0x02008A01 /* Steering  */\n#define DIAXIS_DRIVINGC_ACCELERATE              0x02039202 /* Accelerate */\n#define DIAXIS_DRIVINGC_BRAKE                   0x02041203 /* Brake-axis */\n#define DIBUTTON_DRIVINGC_FIRE                  0x02000C01 /* Fire */\n#define DIBUTTON_DRIVINGC_WEAPONS               0x02000C02 /* Select next weapon */\n#define DIBUTTON_DRIVINGC_TARGET                0x02000C03 /* Select next available target */\n#define DIBUTTON_DRIVINGC_MENU                  0x020004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIAXIS_DRIVINGC_ACCEL_AND_BRAKE         0x02014A04 /* Some devices combine accelerate and brake in a single axis */\n#define DIHATSWITCH_DRIVINGC_GLANCE             0x02004601 /* Look around */\n#define DIBUTTON_DRIVINGC_SHIFTUP               0x02004C04 /* Shift to next higher gear */\n#define DIBUTTON_DRIVINGC_SHIFTDOWN             0x02004C05 /* Shift to next lower gear */\n#define DIBUTTON_DRIVINGC_DASHBOARD             0x02004406 /* Select next dashboard option */\n#define DIBUTTON_DRIVINGC_AIDS                  0x02004407 /* Driver correction aids */\n#define DIBUTTON_DRIVINGC_BRAKE                 0x02004C08 /* Brake-button */\n#define DIBUTTON_DRIVINGC_FIRESECONDARY         0x02004C09 /* Alternative fire button */\n#define DIBUTTON_DRIVINGC_ACCELERATE_LINK       0x0203D4E0 /* Fallback Accelerate button */\n#define DIBUTTON_DRIVINGC_STEER_LEFT_LINK       0x0200CCE4 /* Fallback Steer Left button */\n#define DIBUTTON_DRIVINGC_STEER_RIGHT_LINK      0x0200CCEC /* Fallback Steer Right button */\n#define DIBUTTON_DRIVINGC_GLANCE_LEFT_LINK      0x0207C4E4 /* Fallback Glance Left button */\n#define DIBUTTON_DRIVINGC_GLANCE_RIGHT_LINK     0x0207C4EC /* Fallback Glance Right button */\n#define DIBUTTON_DRIVINGC_DEVICE                0x020044FE /* Show input device and controls */\n#define DIBUTTON_DRIVINGC_PAUSE                 0x020044FC /* Start / Pause / Restart game */\n\n/*--- Driving Simulator - Tank\n      Combat from withing a tank is primary objective  ---*/\n#define DIVIRTUAL_DRIVING_TANK                  0x03000000\n#define DIAXIS_DRIVINGT_STEER                   0x03008A01 /* Turn tank left / right */\n#define DIAXIS_DRIVINGT_BARREL                  0x03010202 /* Raise / lower barrel */\n#define DIAXIS_DRIVINGT_ACCELERATE              0x03039203 /* Accelerate */\n#define DIAXIS_DRIVINGT_ROTATE                  0x03020204 /* Turn barrel left / right */\n#define DIBUTTON_DRIVINGT_FIRE                  0x03000C01 /* Fire */\n#define DIBUTTON_DRIVINGT_WEAPONS               0x03000C02 /* Select next weapon */\n#define DIBUTTON_DRIVINGT_TARGET                0x03000C03 /* Selects next available target */\n#define DIBUTTON_DRIVINGT_MENU                  0x030004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_DRIVINGT_GLANCE             0x03004601 /* Look around */\n#define DIAXIS_DRIVINGT_BRAKE                   0x03045205 /* Brake-axis */\n#define DIAXIS_DRIVINGT_ACCEL_AND_BRAKE         0x03014A06 /* Some devices combine accelerate and brake in a single axis */\n#define DIBUTTON_DRIVINGT_VIEW                  0x03005C04 /* Cycle through view options */\n#define DIBUTTON_DRIVINGT_DASHBOARD             0x03005C05 /* Select next dashboard option */\n#define DIBUTTON_DRIVINGT_BRAKE                 0x03004C06 /* Brake-button */\n#define DIBUTTON_DRIVINGT_FIRESECONDARY         0x03004C07 /* Alternative fire button */\n#define DIBUTTON_DRIVINGT_ACCELERATE_LINK       0x0303D4E0 /* Fallback Accelerate button */\n#define DIBUTTON_DRIVINGT_STEER_LEFT_LINK       0x0300CCE4 /* Fallback Steer Left button */\n#define DIBUTTON_DRIVINGT_STEER_RIGHT_LINK      0x0300CCEC /* Fallback Steer Right button */\n#define DIBUTTON_DRIVINGT_BARREL_UP_LINK        0x030144E0 /* Fallback Barrel up button */\n#define DIBUTTON_DRIVINGT_BARREL_DOWN_LINK      0x030144E8 /* Fallback Barrel down button */\n#define DIBUTTON_DRIVINGT_ROTATE_LEFT_LINK      0x030244E4 /* Fallback Rotate left button */\n#define DIBUTTON_DRIVINGT_ROTATE_RIGHT_LINK     0x030244EC /* Fallback Rotate right button */\n#define DIBUTTON_DRIVINGT_GLANCE_LEFT_LINK      0x0307C4E4 /* Fallback Glance Left button */\n#define DIBUTTON_DRIVINGT_GLANCE_RIGHT_LINK     0x0307C4EC /* Fallback Glance Right button */\n#define DIBUTTON_DRIVINGT_DEVICE                0x030044FE /* Show input device and controls */\n#define DIBUTTON_DRIVINGT_PAUSE                 0x030044FC /* Start / Pause / Restart game */\n\n/*--- Flight Simulator - Civilian \n      Plane control is the primary objective  ---*/\n#define DIVIRTUAL_FLYING_CIVILIAN               0x04000000\n#define DIAXIS_FLYINGC_BANK                     0x04008A01 /* Roll ship left / right */\n#define DIAXIS_FLYINGC_PITCH                    0x04010A02 /* Nose up / down */\n#define DIAXIS_FLYINGC_THROTTLE                 0x04039203 /* Throttle */\n#define DIBUTTON_FLYINGC_VIEW                   0x04002401 /* Cycle through view options */\n#define DIBUTTON_FLYINGC_DISPLAY                0x04002402 /* Select next dashboard / heads up display option */\n#define DIBUTTON_FLYINGC_GEAR                   0x04002C03 /* Gear up / down */\n#define DIBUTTON_FLYINGC_MENU                   0x040004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_FLYINGC_GLANCE              0x04004601 /* Look around */\n#define DIAXIS_FLYINGC_BRAKE                    0x04046A04 /* Apply Brake */\n#define DIAXIS_FLYINGC_RUDDER                   0x04025205 /* Yaw ship left/right */\n#define DIAXIS_FLYINGC_FLAPS                    0x04055A06 /* Flaps */\n#define DIBUTTON_FLYINGC_FLAPSUP                0x04006404 /* Increment stepping up until fully retracted */\n#define DIBUTTON_FLYINGC_FLAPSDOWN              0x04006405 /* Decrement stepping down until fully extended */\n#define DIBUTTON_FLYINGC_BRAKE_LINK             0x04046CE0 /* Fallback brake button */\n#define DIBUTTON_FLYINGC_FASTER_LINK            0x0403D4E0 /* Fallback throttle up button */\n#define DIBUTTON_FLYINGC_SLOWER_LINK            0x0403D4E8 /* Fallback throttle down button */\n#define DIBUTTON_FLYINGC_GLANCE_LEFT_LINK       0x0407C4E4 /* Fallback Glance Left button */\n#define DIBUTTON_FLYINGC_GLANCE_RIGHT_LINK      0x0407C4EC /* Fallback Glance Right button */\n#define DIBUTTON_FLYINGC_GLANCE_UP_LINK         0x0407C4E0 /* Fallback Glance Up button */\n#define DIBUTTON_FLYINGC_GLANCE_DOWN_LINK       0x0407C4E8 /* Fallback Glance Down button */\n#define DIBUTTON_FLYINGC_DEVICE                 0x040044FE /* Show input device and controls */\n#define DIBUTTON_FLYINGC_PAUSE                  0x040044FC /* Start / Pause / Restart game */\n\n/*--- Flight Simulator - Military \n      Aerial combat is the primary objective  ---*/\n#define DIVIRTUAL_FLYING_MILITARY               0x05000000\n#define DIAXIS_FLYINGM_BANK                     0x05008A01 /* Bank - Roll ship left / right */\n#define DIAXIS_FLYINGM_PITCH                    0x05010A02 /* Pitch - Nose up / down */\n#define DIAXIS_FLYINGM_THROTTLE                 0x05039203 /* Throttle - faster / slower */\n#define DIBUTTON_FLYINGM_FIRE                   0x05000C01 /* Fire */\n#define DIBUTTON_FLYINGM_WEAPONS                0x05000C02 /* Select next weapon */\n#define DIBUTTON_FLYINGM_TARGET                 0x05000C03 /* Selects next available target */\n#define DIBUTTON_FLYINGM_MENU                   0x050004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_FLYINGM_GLANCE              0x05004601 /* Look around */\n#define DIBUTTON_FLYINGM_COUNTER                0x05005C04 /* Activate counter measures */\n#define DIAXIS_FLYINGM_RUDDER                   0x05024A04 /* Rudder - Yaw ship left/right */\n#define DIAXIS_FLYINGM_BRAKE                    0x05046205 /* Brake-axis */\n#define DIBUTTON_FLYINGM_VIEW                   0x05006405 /* Cycle through view options */\n#define DIBUTTON_FLYINGM_DISPLAY                0x05006406 /* Select next dashboard option */\n#define DIAXIS_FLYINGM_FLAPS                    0x05055206 /* Flaps */\n#define DIBUTTON_FLYINGM_FLAPSUP                0x05005407 /* Increment stepping up until fully retracted */\n#define DIBUTTON_FLYINGM_FLAPSDOWN              0x05005408 /* Decrement stepping down until fully extended */\n#define DIBUTTON_FLYINGM_FIRESECONDARY          0x05004C09 /* Alternative fire button */\n#define DIBUTTON_FLYINGM_GEAR                   0x0500640A /* Gear up / down */\n#define DIBUTTON_FLYINGM_BRAKE_LINK             0x050464E0 /* Fallback brake button */\n#define DIBUTTON_FLYINGM_FASTER_LINK            0x0503D4E0 /* Fallback throttle up button */\n#define DIBUTTON_FLYINGM_SLOWER_LINK            0x0503D4E8 /* Fallback throttle down button */\n#define DIBUTTON_FLYINGM_GLANCE_LEFT_LINK       0x0507C4E4 /* Fallback Glance Left button */\n#define DIBUTTON_FLYINGM_GLANCE_RIGHT_LINK      0x0507C4EC /* Fallback Glance Right button */\n#define DIBUTTON_FLYINGM_GLANCE_UP_LINK         0x0507C4E0 /* Fallback Glance Up button */\n#define DIBUTTON_FLYINGM_GLANCE_DOWN_LINK       0x0507C4E8 /* Fallback Glance Down button */\n#define DIBUTTON_FLYINGM_DEVICE                 0x050044FE /* Show input device and controls */\n#define DIBUTTON_FLYINGM_PAUSE                  0x050044FC /* Start / Pause / Restart game */\n\n/*--- Flight Simulator - Combat Helicopter\n      Combat from helicopter is primary objective  ---*/\n#define DIVIRTUAL_FLYING_HELICOPTER             0x06000000\n#define DIAXIS_FLYINGH_BANK                     0x06008A01 /* Bank - Roll ship left / right */\n#define DIAXIS_FLYINGH_PITCH                    0x06010A02 /* Pitch - Nose up / down */\n#define DIAXIS_FLYINGH_COLLECTIVE               0x06018A03 /* Collective - Blade pitch/power */\n#define DIBUTTON_FLYINGH_FIRE                   0x06001401 /* Fire */\n#define DIBUTTON_FLYINGH_WEAPONS                0x06001402 /* Select next weapon */\n#define DIBUTTON_FLYINGH_TARGET                 0x06001403 /* Selects next available target */\n#define DIBUTTON_FLYINGH_MENU                   0x060004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_FLYINGH_GLANCE              0x06004601 /* Look around */\n#define DIAXIS_FLYINGH_TORQUE                   0x06025A04 /* Torque - Rotate ship around left / right axis */\n#define DIAXIS_FLYINGH_THROTTLE                 0x0603DA05 /* Throttle */\n#define DIBUTTON_FLYINGH_COUNTER                0x06005404 /* Activate counter measures */\n#define DIBUTTON_FLYINGH_VIEW                   0x06006405 /* Cycle through view options */\n#define DIBUTTON_FLYINGH_GEAR                   0x06006406 /* Gear up / down */\n#define DIBUTTON_FLYINGH_FIRESECONDARY          0x06004C07 /* Alternative fire button */\n#define DIBUTTON_FLYINGH_FASTER_LINK            0x0603DCE0 /* Fallback throttle up button */\n#define DIBUTTON_FLYINGH_SLOWER_LINK            0x0603DCE8 /* Fallback throttle down button */\n#define DIBUTTON_FLYINGH_GLANCE_LEFT_LINK       0x0607C4E4 /* Fallback Glance Left button */\n#define DIBUTTON_FLYINGH_GLANCE_RIGHT_LINK      0x0607C4EC /* Fallback Glance Right button */\n#define DIBUTTON_FLYINGH_GLANCE_UP_LINK         0x0607C4E0 /* Fallback Glance Up button */\n#define DIBUTTON_FLYINGH_GLANCE_DOWN_LINK       0x0607C4E8 /* Fallback Glance Down button */\n#define DIBUTTON_FLYINGH_DEVICE                 0x060044FE /* Show input device and controls */\n#define DIBUTTON_FLYINGH_PAUSE                  0x060044FC /* Start / Pause / Restart game */\n\n/*--- Space Simulator - Combat\n      Space Simulator with weapons  ---*/\n#define DIVIRTUAL_SPACESIM                      0x07000000\n#define DIAXIS_SPACESIM_LATERAL                 0x07008201 /* Move ship left / right */\n#define DIAXIS_SPACESIM_MOVE                    0x07010202 /* Move ship forward/backward */\n#define DIAXIS_SPACESIM_THROTTLE                0x07038203 /* Throttle - Engine speed */\n#define DIBUTTON_SPACESIM_FIRE                  0x07000401 /* Fire */\n#define DIBUTTON_SPACESIM_WEAPONS               0x07000402 /* Select next weapon */\n#define DIBUTTON_SPACESIM_TARGET                0x07000403 /* Selects next available target */\n#define DIBUTTON_SPACESIM_MENU                  0x070004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_SPACESIM_GLANCE             0x07004601 /* Look around */\n#define DIAXIS_SPACESIM_CLIMB                   0x0701C204 /* Climb - Pitch ship up/down */\n#define DIAXIS_SPACESIM_ROTATE                  0x07024205 /* Rotate - Turn ship left/right */\n#define DIBUTTON_SPACESIM_VIEW                  0x07004404 /* Cycle through view options */\n#define DIBUTTON_SPACESIM_DISPLAY               0x07004405 /* Select next dashboard / heads up display option */\n#define DIBUTTON_SPACESIM_RAISE                 0x07004406 /* Raise ship while maintaining current pitch */\n#define DIBUTTON_SPACESIM_LOWER                 0x07004407 /* Lower ship while maintaining current pitch */\n#define DIBUTTON_SPACESIM_GEAR                  0x07004408 /* Gear up / down */\n#define DIBUTTON_SPACESIM_FIRESECONDARY         0x07004409 /* Alternative fire button */\n#define DIBUTTON_SPACESIM_LEFT_LINK             0x0700C4E4 /* Fallback move left button */\n#define DIBUTTON_SPACESIM_RIGHT_LINK            0x0700C4EC /* Fallback move right button */\n#define DIBUTTON_SPACESIM_FORWARD_LINK          0x070144E0 /* Fallback move forward button */\n#define DIBUTTON_SPACESIM_BACKWARD_LINK         0x070144E8 /* Fallback move backwards button */\n#define DIBUTTON_SPACESIM_FASTER_LINK           0x0703C4E0 /* Fallback throttle up button */\n#define DIBUTTON_SPACESIM_SLOWER_LINK           0x0703C4E8 /* Fallback throttle down button */\n#define DIBUTTON_SPACESIM_TURN_LEFT_LINK        0x070244E4 /* Fallback turn left button */\n#define DIBUTTON_SPACESIM_TURN_RIGHT_LINK       0x070244EC /* Fallback turn right button */\n#define DIBUTTON_SPACESIM_GLANCE_LEFT_LINK      0x0707C4E4 /* Fallback Glance Left button */\n#define DIBUTTON_SPACESIM_GLANCE_RIGHT_LINK     0x0707C4EC /* Fallback Glance Right button */\n#define DIBUTTON_SPACESIM_GLANCE_UP_LINK        0x0707C4E0 /* Fallback Glance Up button */\n#define DIBUTTON_SPACESIM_GLANCE_DOWN_LINK      0x0707C4E8 /* Fallback Glance Down button */\n#define DIBUTTON_SPACESIM_DEVICE                0x070044FE /* Show input device and controls */\n#define DIBUTTON_SPACESIM_PAUSE                 0x070044FC /* Start / Pause / Restart game */\n\n/*--- Fighting - First Person \n      Hand to Hand combat is primary objective  ---*/\n#define DIVIRTUAL_FIGHTING_HAND2HAND            0x08000000\n#define DIAXIS_FIGHTINGH_LATERAL                0x08008201 /* Sidestep left/right */\n#define DIAXIS_FIGHTINGH_MOVE                   0x08010202 /* Move forward/backward */\n#define DIBUTTON_FIGHTINGH_PUNCH                0x08000401 /* Punch */\n#define DIBUTTON_FIGHTINGH_KICK                 0x08000402 /* Kick */\n#define DIBUTTON_FIGHTINGH_BLOCK                0x08000403 /* Block */\n#define DIBUTTON_FIGHTINGH_CROUCH               0x08000404 /* Crouch */\n#define DIBUTTON_FIGHTINGH_JUMP                 0x08000405 /* Jump */\n#define DIBUTTON_FIGHTINGH_SPECIAL1             0x08000406 /* Apply first special move */\n#define DIBUTTON_FIGHTINGH_SPECIAL2             0x08000407 /* Apply second special move */\n#define DIBUTTON_FIGHTINGH_MENU                 0x080004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIBUTTON_FIGHTINGH_SELECT               0x08004408 /* Select special move */\n#define DIHATSWITCH_FIGHTINGH_SLIDE             0x08004601 /* Look around */\n#define DIBUTTON_FIGHTINGH_DISPLAY              0x08004409 /* Shows next on-screen display option */\n#define DIAXIS_FIGHTINGH_ROTATE                 0x08024203 /* Rotate - Turn body left/right */\n#define DIBUTTON_FIGHTINGH_DODGE                0x0800440A /* Dodge */\n#define DIBUTTON_FIGHTINGH_LEFT_LINK            0x0800C4E4 /* Fallback left sidestep button */\n#define DIBUTTON_FIGHTINGH_RIGHT_LINK           0x0800C4EC /* Fallback right sidestep button */\n#define DIBUTTON_FIGHTINGH_FORWARD_LINK         0x080144E0 /* Fallback forward button */\n#define DIBUTTON_FIGHTINGH_BACKWARD_LINK        0x080144E8 /* Fallback backward button */\n#define DIBUTTON_FIGHTINGH_DEVICE               0x080044FE /* Show input device and controls */\n#define DIBUTTON_FIGHTINGH_PAUSE                0x080044FC /* Start / Pause / Restart game */\n\n/*--- Fighting - First Person Shooting\n      Navigation and combat are primary objectives  ---*/\n#define DIVIRTUAL_FIGHTING_FPS                  0x09000000\n#define DIAXIS_FPS_ROTATE                       0x09008201 /* Rotate character left/right */\n#define DIAXIS_FPS_MOVE                         0x09010202 /* Move forward/backward */\n#define DIBUTTON_FPS_FIRE                       0x09000401 /* Fire */\n#define DIBUTTON_FPS_WEAPONS                    0x09000402 /* Select next weapon */\n#define DIBUTTON_FPS_APPLY                      0x09000403 /* Use item */\n#define DIBUTTON_FPS_SELECT                     0x09000404 /* Select next inventory item */\n#define DIBUTTON_FPS_CROUCH                     0x09000405 /* Crouch/ climb down/ swim down */\n#define DIBUTTON_FPS_JUMP                       0x09000406 /* Jump/ climb up/ swim up */\n#define DIAXIS_FPS_LOOKUPDOWN                   0x09018203 /* Look up / down  */\n#define DIBUTTON_FPS_STRAFE                     0x09000407 /* Enable strafing while active */\n#define DIBUTTON_FPS_MENU                       0x090004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_FPS_GLANCE                  0x09004601 /* Look around */\n#define DIBUTTON_FPS_DISPLAY                    0x09004408 /* Shows next on-screen display option/ map */\n#define DIAXIS_FPS_SIDESTEP                     0x09024204 /* Sidestep */\n#define DIBUTTON_FPS_DODGE                      0x09004409 /* Dodge */\n#define DIBUTTON_FPS_GLANCEL                    0x0900440A /* Glance Left */\n#define DIBUTTON_FPS_GLANCER                    0x0900440B /* Glance Right */\n#define DIBUTTON_FPS_FIRESECONDARY              0x0900440C /* Alternative fire button */\n#define DIBUTTON_FPS_ROTATE_LEFT_LINK           0x0900C4E4 /* Fallback rotate left button */\n#define DIBUTTON_FPS_ROTATE_RIGHT_LINK          0x0900C4EC /* Fallback rotate right button */\n#define DIBUTTON_FPS_FORWARD_LINK               0x090144E0 /* Fallback forward button */\n#define DIBUTTON_FPS_BACKWARD_LINK              0x090144E8 /* Fallback backward button */\n#define DIBUTTON_FPS_GLANCE_UP_LINK             0x0901C4E0 /* Fallback look up button */\n#define DIBUTTON_FPS_GLANCE_DOWN_LINK           0x0901C4E8 /* Fallback look down button */\n#define DIBUTTON_FPS_STEP_LEFT_LINK             0x090244E4 /* Fallback step left button */\n#define DIBUTTON_FPS_STEP_RIGHT_LINK            0x090244EC /* Fallback step right button */\n#define DIBUTTON_FPS_DEVICE                     0x090044FE /* Show input device and controls */\n#define DIBUTTON_FPS_PAUSE                      0x090044FC /* Start / Pause / Restart game */\n\n/*--- Fighting - Third Person action\n      Perspective of camera is behind the main character  ---*/\n#define DIVIRTUAL_FIGHTING_THIRDPERSON          0x0A000000\n#define DIAXIS_TPS_TURN                         0x0A020201 /* Turn left/right */\n#define DIAXIS_TPS_MOVE                         0x0A010202 /* Move forward/backward */\n#define DIBUTTON_TPS_RUN                        0x0A000401 /* Run or walk toggle switch */\n#define DIBUTTON_TPS_ACTION                     0x0A000402 /* Action Button */\n#define DIBUTTON_TPS_SELECT                     0x0A000403 /* Select next weapon */\n#define DIBUTTON_TPS_USE                        0x0A000404 /* Use inventory item currently selected */\n#define DIBUTTON_TPS_JUMP                       0x0A000405 /* Character Jumps */\n#define DIBUTTON_TPS_MENU                       0x0A0004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_TPS_GLANCE                  0x0A004601 /* Look around */\n#define DIBUTTON_TPS_VIEW                       0x0A004406 /* Select camera view */\n#define DIBUTTON_TPS_STEPLEFT                   0x0A004407 /* Character takes a left step */\n#define DIBUTTON_TPS_STEPRIGHT                  0x0A004408 /* Character takes a right step */\n#define DIAXIS_TPS_STEP                         0x0A00C203 /* Character steps left/right */\n#define DIBUTTON_TPS_DODGE                      0x0A004409 /* Character dodges or ducks */\n#define DIBUTTON_TPS_INVENTORY                  0x0A00440A /* Cycle through inventory */\n#define DIBUTTON_TPS_TURN_LEFT_LINK             0x0A0244E4 /* Fallback turn left button */\n#define DIBUTTON_TPS_TURN_RIGHT_LINK            0x0A0244EC /* Fallback turn right button */\n#define DIBUTTON_TPS_FORWARD_LINK               0x0A0144E0 /* Fallback forward button */\n#define DIBUTTON_TPS_BACKWARD_LINK              0x0A0144E8 /* Fallback backward button */\n#define DIBUTTON_TPS_GLANCE_UP_LINK             0x0A07C4E0 /* Fallback look up button */\n#define DIBUTTON_TPS_GLANCE_DOWN_LINK           0x0A07C4E8 /* Fallback look down button */\n#define DIBUTTON_TPS_GLANCE_LEFT_LINK           0x0A07C4E4 /* Fallback glance up button */\n#define DIBUTTON_TPS_GLANCE_RIGHT_LINK          0x0A07C4EC /* Fallback glance right button */\n#define DIBUTTON_TPS_DEVICE                     0x0A0044FE /* Show input device and controls */\n#define DIBUTTON_TPS_PAUSE                      0x0A0044FC /* Start / Pause / Restart game */\n\n/*--- Strategy - Role Playing\n      Navigation and problem solving are primary actions  ---*/\n#define DIVIRTUAL_STRATEGY_ROLEPLAYING          0x0B000000\n#define DIAXIS_STRATEGYR_LATERAL                0x0B008201 /* sidestep - left/right */\n#define DIAXIS_STRATEGYR_MOVE                   0x0B010202 /* move forward/backward */\n#define DIBUTTON_STRATEGYR_GET                  0x0B000401 /* Acquire item */\n#define DIBUTTON_STRATEGYR_APPLY                0x0B000402 /* Use selected item */\n#define DIBUTTON_STRATEGYR_SELECT               0x0B000403 /* Select nextitem */\n#define DIBUTTON_STRATEGYR_ATTACK               0x0B000404 /* Attack */\n#define DIBUTTON_STRATEGYR_CAST                 0x0B000405 /* Cast Spell */\n#define DIBUTTON_STRATEGYR_CROUCH               0x0B000406 /* Crouch */\n#define DIBUTTON_STRATEGYR_JUMP                 0x0B000407 /* Jump */\n#define DIBUTTON_STRATEGYR_MENU                 0x0B0004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_STRATEGYR_GLANCE            0x0B004601 /* Look around */\n#define DIBUTTON_STRATEGYR_MAP                  0x0B004408 /* Cycle through map options */\n#define DIBUTTON_STRATEGYR_DISPLAY              0x0B004409 /* Shows next on-screen display option */\n#define DIAXIS_STRATEGYR_ROTATE                 0x0B024203 /* Turn body left/right */\n#define DIBUTTON_STRATEGYR_LEFT_LINK            0x0B00C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_STRATEGYR_RIGHT_LINK           0x0B00C4EC /* Fallback sidestep right button */\n#define DIBUTTON_STRATEGYR_FORWARD_LINK         0x0B0144E0 /* Fallback move forward button */\n#define DIBUTTON_STRATEGYR_BACK_LINK            0x0B0144E8 /* Fallback move backward button */\n#define DIBUTTON_STRATEGYR_ROTATE_LEFT_LINK     0x0B0244E4 /* Fallback turn body left button */\n#define DIBUTTON_STRATEGYR_ROTATE_RIGHT_LINK    0x0B0244EC /* Fallback turn body right button */\n#define DIBUTTON_STRATEGYR_DEVICE               0x0B0044FE /* Show input device and controls */\n#define DIBUTTON_STRATEGYR_PAUSE                0x0B0044FC /* Start / Pause / Restart game */\n\n/*--- Strategy - Turn based\n      Navigation and problem solving are primary actions  ---*/\n#define DIVIRTUAL_STRATEGY_TURN                 0x0C000000\n#define DIAXIS_STRATEGYT_LATERAL                0x0C008201 /* Sidestep left/right */\n#define DIAXIS_STRATEGYT_MOVE                   0x0C010202 /* Move forward/backwards */\n#define DIBUTTON_STRATEGYT_SELECT               0x0C000401 /* Select unit or object */\n#define DIBUTTON_STRATEGYT_INSTRUCT             0x0C000402 /* Cycle through instructions */\n#define DIBUTTON_STRATEGYT_APPLY                0x0C000403 /* Apply selected instruction */\n#define DIBUTTON_STRATEGYT_TEAM                 0x0C000404 /* Select next team / cycle through all */\n#define DIBUTTON_STRATEGYT_TURN                 0x0C000405 /* Indicate turn over */\n#define DIBUTTON_STRATEGYT_MENU                 0x0C0004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIBUTTON_STRATEGYT_ZOOM                 0x0C004406 /* Zoom - in / out */\n#define DIBUTTON_STRATEGYT_MAP                  0x0C004407 /* cycle through map options */\n#define DIBUTTON_STRATEGYT_DISPLAY              0x0C004408 /* shows next on-screen display options */\n#define DIBUTTON_STRATEGYT_LEFT_LINK            0x0C00C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_STRATEGYT_RIGHT_LINK           0x0C00C4EC /* Fallback sidestep right button */\n#define DIBUTTON_STRATEGYT_FORWARD_LINK         0x0C0144E0 /* Fallback move forward button */\n#define DIBUTTON_STRATEGYT_BACK_LINK            0x0C0144E8 /* Fallback move back button */\n#define DIBUTTON_STRATEGYT_DEVICE               0x0C0044FE /* Show input device and controls */\n#define DIBUTTON_STRATEGYT_PAUSE                0x0C0044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Hunting\n      Hunting                ---*/\n#define DIVIRTUAL_SPORTS_HUNTING                0x0D000000\n#define DIAXIS_HUNTING_LATERAL                  0x0D008201 /* sidestep left/right */\n#define DIAXIS_HUNTING_MOVE                     0x0D010202 /* move forward/backwards */\n#define DIBUTTON_HUNTING_FIRE                   0x0D000401 /* Fire selected weapon */\n#define DIBUTTON_HUNTING_AIM                    0x0D000402 /* Select aim/move */\n#define DIBUTTON_HUNTING_WEAPON                 0x0D000403 /* Select next weapon */\n#define DIBUTTON_HUNTING_BINOCULAR              0x0D000404 /* Look through Binoculars */\n#define DIBUTTON_HUNTING_CALL                   0x0D000405 /* Make animal call */\n#define DIBUTTON_HUNTING_MAP                    0x0D000406 /* View Map */\n#define DIBUTTON_HUNTING_SPECIAL                0x0D000407 /* Special game operation */\n#define DIBUTTON_HUNTING_MENU                   0x0D0004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_HUNTING_GLANCE              0x0D004601 /* Look around */\n#define DIBUTTON_HUNTING_DISPLAY                0x0D004408 /* show next on-screen display option */\n#define DIAXIS_HUNTING_ROTATE                   0x0D024203 /* Turn body left/right */\n#define DIBUTTON_HUNTING_CROUCH                 0x0D004409 /* Crouch/ Climb / Swim down */\n#define DIBUTTON_HUNTING_JUMP                   0x0D00440A /* Jump/ Climb up / Swim up */\n#define DIBUTTON_HUNTING_FIRESECONDARY          0x0D00440B /* Alternative fire button */\n#define DIBUTTON_HUNTING_LEFT_LINK              0x0D00C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_HUNTING_RIGHT_LINK             0x0D00C4EC /* Fallback sidestep right button */\n#define DIBUTTON_HUNTING_FORWARD_LINK           0x0D0144E0 /* Fallback move forward button */\n#define DIBUTTON_HUNTING_BACK_LINK              0x0D0144E8 /* Fallback move back button */\n#define DIBUTTON_HUNTING_ROTATE_LEFT_LINK       0x0D0244E4 /* Fallback turn body left button */\n#define DIBUTTON_HUNTING_ROTATE_RIGHT_LINK      0x0D0244EC /* Fallback turn body right button */\n#define DIBUTTON_HUNTING_DEVICE                 0x0D0044FE /* Show input device and controls */\n#define DIBUTTON_HUNTING_PAUSE                  0x0D0044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Fishing\n      Catching Fish is primary objective   ---*/\n#define DIVIRTUAL_SPORTS_FISHING                0x0E000000\n#define DIAXIS_FISHING_LATERAL                  0x0E008201 /* sidestep left/right */\n#define DIAXIS_FISHING_MOVE                     0x0E010202 /* move forward/backwards */\n#define DIBUTTON_FISHING_CAST                   0x0E000401 /* Cast line */\n#define DIBUTTON_FISHING_TYPE                   0x0E000402 /* Select cast type */\n#define DIBUTTON_FISHING_BINOCULAR              0x0E000403 /* Look through Binocular */\n#define DIBUTTON_FISHING_BAIT                   0x0E000404 /* Select type of Bait */\n#define DIBUTTON_FISHING_MAP                    0x0E000405 /* View Map */\n#define DIBUTTON_FISHING_MENU                   0x0E0004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_FISHING_GLANCE              0x0E004601 /* Look around */\n#define DIBUTTON_FISHING_DISPLAY                0x0E004406 /* Show next on-screen display option */\n#define DIAXIS_FISHING_ROTATE                   0x0E024203 /* Turn character left / right */\n#define DIBUTTON_FISHING_CROUCH                 0x0E004407 /* Crouch/ Climb / Swim down */\n#define DIBUTTON_FISHING_JUMP                   0x0E004408 /* Jump/ Climb up / Swim up */\n#define DIBUTTON_FISHING_LEFT_LINK              0x0E00C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_FISHING_RIGHT_LINK             0x0E00C4EC /* Fallback sidestep right button */\n#define DIBUTTON_FISHING_FORWARD_LINK           0x0E0144E0 /* Fallback move forward button */\n#define DIBUTTON_FISHING_BACK_LINK              0x0E0144E8 /* Fallback move back button */\n#define DIBUTTON_FISHING_ROTATE_LEFT_LINK       0x0E0244E4 /* Fallback turn body left button */\n#define DIBUTTON_FISHING_ROTATE_RIGHT_LINK      0x0E0244EC /* Fallback turn body right button */\n#define DIBUTTON_FISHING_DEVICE                 0x0E0044FE /* Show input device and controls */\n#define DIBUTTON_FISHING_PAUSE                  0x0E0044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Baseball - Batting\n      Batter control is primary objective  ---*/\n#define DIVIRTUAL_SPORTS_BASEBALL_BAT           0x0F000000\n#define DIAXIS_BASEBALLB_LATERAL                0x0F008201 /* Aim left / right */\n#define DIAXIS_BASEBALLB_MOVE                   0x0F010202 /* Aim up / down */\n#define DIBUTTON_BASEBALLB_SELECT               0x0F000401 /* cycle through swing options */\n#define DIBUTTON_BASEBALLB_NORMAL               0x0F000402 /* normal swing */\n#define DIBUTTON_BASEBALLB_POWER                0x0F000403 /* swing for the fence */\n#define DIBUTTON_BASEBALLB_BUNT                 0x0F000404 /* bunt */\n#define DIBUTTON_BASEBALLB_STEAL                0x0F000405 /* Base runner attempts to steal a base */\n#define DIBUTTON_BASEBALLB_BURST                0x0F000406 /* Base runner invokes burst of speed */\n#define DIBUTTON_BASEBALLB_SLIDE                0x0F000407 /* Base runner slides into base */\n#define DIBUTTON_BASEBALLB_CONTACT              0x0F000408 /* Contact swing */\n#define DIBUTTON_BASEBALLB_MENU                 0x0F0004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIBUTTON_BASEBALLB_NOSTEAL              0x0F004409 /* Base runner goes back to a base */\n#define DIBUTTON_BASEBALLB_BOX                  0x0F00440A /* Enter or exit batting box */\n#define DIBUTTON_BASEBALLB_LEFT_LINK            0x0F00C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_BASEBALLB_RIGHT_LINK           0x0F00C4EC /* Fallback sidestep right button */\n#define DIBUTTON_BASEBALLB_FORWARD_LINK         0x0F0144E0 /* Fallback move forward button */\n#define DIBUTTON_BASEBALLB_BACK_LINK            0x0F0144E8 /* Fallback move back button */\n#define DIBUTTON_BASEBALLB_DEVICE               0x0F0044FE /* Show input device and controls */\n#define DIBUTTON_BASEBALLB_PAUSE                0x0F0044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Baseball - Pitching\n      Pitcher control is primary objective   ---*/\n#define DIVIRTUAL_SPORTS_BASEBALL_PITCH         0x10000000\n#define DIAXIS_BASEBALLP_LATERAL                0x10008201 /* Aim left / right */\n#define DIAXIS_BASEBALLP_MOVE                   0x10010202 /* Aim up / down */\n#define DIBUTTON_BASEBALLP_SELECT               0x10000401 /* cycle through pitch selections */\n#define DIBUTTON_BASEBALLP_PITCH                0x10000402 /* throw pitch */\n#define DIBUTTON_BASEBALLP_BASE                 0x10000403 /* select base to throw to */\n#define DIBUTTON_BASEBALLP_THROW                0x10000404 /* throw to base */\n#define DIBUTTON_BASEBALLP_FAKE                 0x10000405 /* Fake a throw to a base */\n#define DIBUTTON_BASEBALLP_MENU                 0x100004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIBUTTON_BASEBALLP_WALK                 0x10004406 /* Throw intentional walk / pitch out */\n#define DIBUTTON_BASEBALLP_LOOK                 0x10004407 /* Look at runners on bases */\n#define DIBUTTON_BASEBALLP_LEFT_LINK            0x1000C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_BASEBALLP_RIGHT_LINK           0x1000C4EC /* Fallback sidestep right button */\n#define DIBUTTON_BASEBALLP_FORWARD_LINK         0x100144E0 /* Fallback move forward button */\n#define DIBUTTON_BASEBALLP_BACK_LINK            0x100144E8 /* Fallback move back button */\n#define DIBUTTON_BASEBALLP_DEVICE               0x100044FE /* Show input device and controls */\n#define DIBUTTON_BASEBALLP_PAUSE                0x100044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Baseball - Fielding\n      Fielder control is primary objective  ---*/\n#define DIVIRTUAL_SPORTS_BASEBALL_FIELD         0x11000000\n#define DIAXIS_BASEBALLF_LATERAL                0x11008201 /* Aim left / right */\n#define DIAXIS_BASEBALLF_MOVE                   0x11010202 /* Aim up / down */\n#define DIBUTTON_BASEBALLF_NEAREST              0x11000401 /* Switch to fielder nearest to the ball */\n#define DIBUTTON_BASEBALLF_THROW1               0x11000402 /* Make conservative throw */\n#define DIBUTTON_BASEBALLF_THROW2               0x11000403 /* Make aggressive throw */\n#define DIBUTTON_BASEBALLF_BURST                0x11000404 /* Invoke burst of speed */\n#define DIBUTTON_BASEBALLF_JUMP                 0x11000405 /* Jump to catch ball */\n#define DIBUTTON_BASEBALLF_DIVE                 0x11000406 /* Dive to catch ball */\n#define DIBUTTON_BASEBALLF_MENU                 0x110004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIBUTTON_BASEBALLF_SHIFTIN              0x11004407 /* Shift the infield positioning */\n#define DIBUTTON_BASEBALLF_SHIFTOUT             0x11004408 /* Shift the outfield positioning */\n#define DIBUTTON_BASEBALLF_AIM_LEFT_LINK        0x1100C4E4 /* Fallback aim left button */\n#define DIBUTTON_BASEBALLF_AIM_RIGHT_LINK       0x1100C4EC /* Fallback aim right button */\n#define DIBUTTON_BASEBALLF_FORWARD_LINK         0x110144E0 /* Fallback move forward button */\n#define DIBUTTON_BASEBALLF_BACK_LINK            0x110144E8 /* Fallback move back button */\n#define DIBUTTON_BASEBALLF_DEVICE               0x110044FE /* Show input device and controls */\n#define DIBUTTON_BASEBALLF_PAUSE                0x110044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Basketball - Offense\n      Offense  ---*/\n#define DIVIRTUAL_SPORTS_BASKETBALL_OFFENSE     0x12000000\n#define DIAXIS_BBALLO_LATERAL                   0x12008201 /* left / right */\n#define DIAXIS_BBALLO_MOVE                      0x12010202 /* up / down */\n#define DIBUTTON_BBALLO_SHOOT                   0x12000401 /* shoot basket */\n#define DIBUTTON_BBALLO_DUNK                    0x12000402 /* dunk basket */\n#define DIBUTTON_BBALLO_PASS                    0x12000403 /* throw pass */\n#define DIBUTTON_BBALLO_FAKE                    0x12000404 /* fake shot or pass */\n#define DIBUTTON_BBALLO_SPECIAL                 0x12000405 /* apply special move */\n#define DIBUTTON_BBALLO_PLAYER                  0x12000406 /* select next player */\n#define DIBUTTON_BBALLO_BURST                   0x12000407 /* invoke burst */\n#define DIBUTTON_BBALLO_CALL                    0x12000408 /* call for ball / pass to me */\n#define DIBUTTON_BBALLO_MENU                    0x120004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_BBALLO_GLANCE               0x12004601 /* scroll view */\n#define DIBUTTON_BBALLO_SCREEN                  0x12004409 /* Call for screen */\n#define DIBUTTON_BBALLO_PLAY                    0x1200440A /* Call for specific offensive play */\n#define DIBUTTON_BBALLO_JAB                     0x1200440B /* Initiate fake drive to basket */\n#define DIBUTTON_BBALLO_POST                    0x1200440C /* Perform post move */\n#define DIBUTTON_BBALLO_TIMEOUT                 0x1200440D /* Time Out */\n#define DIBUTTON_BBALLO_SUBSTITUTE              0x1200440E /* substitute one player for another */\n#define DIBUTTON_BBALLO_LEFT_LINK               0x1200C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_BBALLO_RIGHT_LINK              0x1200C4EC /* Fallback sidestep right button */\n#define DIBUTTON_BBALLO_FORWARD_LINK            0x120144E0 /* Fallback move forward button */\n#define DIBUTTON_BBALLO_BACK_LINK               0x120144E8 /* Fallback move back button */\n#define DIBUTTON_BBALLO_DEVICE                  0x120044FE /* Show input device and controls */\n#define DIBUTTON_BBALLO_PAUSE                   0x120044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Basketball - Defense\n      Defense  ---*/\n#define DIVIRTUAL_SPORTS_BASKETBALL_DEFENSE     0x13000000\n#define DIAXIS_BBALLD_LATERAL                   0x13008201 /* left / right */\n#define DIAXIS_BBALLD_MOVE                      0x13010202 /* up / down */\n#define DIBUTTON_BBALLD_JUMP                    0x13000401 /* jump to block shot */\n#define DIBUTTON_BBALLD_STEAL                   0x13000402 /* attempt to steal ball */\n#define DIBUTTON_BBALLD_FAKE                    0x13000403 /* fake block or steal */\n#define DIBUTTON_BBALLD_SPECIAL                 0x13000404 /* apply special move */\n#define DIBUTTON_BBALLD_PLAYER                  0x13000405 /* select next player */\n#define DIBUTTON_BBALLD_BURST                   0x13000406 /* invoke burst */\n#define DIBUTTON_BBALLD_PLAY                    0x13000407 /* call for specific defensive play */\n#define DIBUTTON_BBALLD_MENU                    0x130004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_BBALLD_GLANCE               0x13004601 /* scroll view */\n#define DIBUTTON_BBALLD_TIMEOUT                 0x13004408 /* Time Out */\n#define DIBUTTON_BBALLD_SUBSTITUTE              0x13004409 /* substitute one player for another */\n#define DIBUTTON_BBALLD_LEFT_LINK               0x1300C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_BBALLD_RIGHT_LINK              0x1300C4EC /* Fallback sidestep right button */\n#define DIBUTTON_BBALLD_FORWARD_LINK            0x130144E0 /* Fallback move forward button */\n#define DIBUTTON_BBALLD_BACK_LINK               0x130144E8 /* Fallback move back button */\n#define DIBUTTON_BBALLD_DEVICE                  0x130044FE /* Show input device and controls */\n#define DIBUTTON_BBALLD_PAUSE                   0x130044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Football - Play\n      Play selection  ---*/\n#define DIVIRTUAL_SPORTS_FOOTBALL_FIELD         0x14000000\n#define DIBUTTON_FOOTBALLP_PLAY                 0x14000401 /* cycle through available plays */\n#define DIBUTTON_FOOTBALLP_SELECT               0x14000402 /* select play */\n#define DIBUTTON_FOOTBALLP_HELP                 0x14000403 /* Bring up pop-up help */\n#define DIBUTTON_FOOTBALLP_MENU                 0x140004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIBUTTON_FOOTBALLP_DEVICE               0x140044FE /* Show input device and controls */\n#define DIBUTTON_FOOTBALLP_PAUSE                0x140044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Football - QB\n      Offense: Quarterback / Kicker  ---*/\n#define DIVIRTUAL_SPORTS_FOOTBALL_QBCK          0x15000000\n#define DIAXIS_FOOTBALLQ_LATERAL                0x15008201 /* Move / Aim: left / right */\n#define DIAXIS_FOOTBALLQ_MOVE                   0x15010202 /* Move / Aim: up / down */\n#define DIBUTTON_FOOTBALLQ_SELECT               0x15000401 /* Select */\n#define DIBUTTON_FOOTBALLQ_SNAP                 0x15000402 /* snap ball - start play */\n#define DIBUTTON_FOOTBALLQ_JUMP                 0x15000403 /* jump over defender */\n#define DIBUTTON_FOOTBALLQ_SLIDE                0x15000404 /* Dive/Slide */\n#define DIBUTTON_FOOTBALLQ_PASS                 0x15000405 /* throws pass to receiver */\n#define DIBUTTON_FOOTBALLQ_FAKE                 0x15000406 /* pump fake pass or fake kick */\n#define DIBUTTON_FOOTBALLQ_MENU                 0x150004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIBUTTON_FOOTBALLQ_FAKESNAP             0x15004407 /* Fake snap  */\n#define DIBUTTON_FOOTBALLQ_MOTION               0x15004408 /* Send receivers in motion */\n#define DIBUTTON_FOOTBALLQ_AUDIBLE              0x15004409 /* Change offensive play at line of scrimmage */\n#define DIBUTTON_FOOTBALLQ_LEFT_LINK            0x1500C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_FOOTBALLQ_RIGHT_LINK           0x1500C4EC /* Fallback sidestep right button */\n#define DIBUTTON_FOOTBALLQ_FORWARD_LINK         0x150144E0 /* Fallback move forward button */\n#define DIBUTTON_FOOTBALLQ_BACK_LINK            0x150144E8 /* Fallback move back button */\n#define DIBUTTON_FOOTBALLQ_DEVICE               0x150044FE /* Show input device and controls */\n#define DIBUTTON_FOOTBALLQ_PAUSE                0x150044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Football - Offense\n      Offense - Runner  ---*/\n#define DIVIRTUAL_SPORTS_FOOTBALL_OFFENSE       0x16000000\n#define DIAXIS_FOOTBALLO_LATERAL                0x16008201 /* Move / Aim: left / right */\n#define DIAXIS_FOOTBALLO_MOVE                   0x16010202 /* Move / Aim: up / down */\n#define DIBUTTON_FOOTBALLO_JUMP                 0x16000401 /* jump or hurdle over defender */\n#define DIBUTTON_FOOTBALLO_LEFTARM              0x16000402 /* holds out left arm */\n#define DIBUTTON_FOOTBALLO_RIGHTARM             0x16000403 /* holds out right arm */\n#define DIBUTTON_FOOTBALLO_THROW                0x16000404 /* throw pass or lateral ball to another runner */\n#define DIBUTTON_FOOTBALLO_SPIN                 0x16000405 /* Spin to avoid defenders */\n#define DIBUTTON_FOOTBALLO_MENU                 0x160004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIBUTTON_FOOTBALLO_JUKE                 0x16004406 /* Use special move to avoid defenders */\n#define DIBUTTON_FOOTBALLO_SHOULDER             0x16004407 /* Lower shoulder to run over defenders */\n#define DIBUTTON_FOOTBALLO_TURBO                0x16004408 /* Speed burst past defenders */\n#define DIBUTTON_FOOTBALLO_DIVE                 0x16004409 /* Dive over defenders */\n#define DIBUTTON_FOOTBALLO_ZOOM                 0x1600440A /* Zoom view in / out */\n#define DIBUTTON_FOOTBALLO_SUBSTITUTE           0x1600440B /* substitute one player for another */\n#define DIBUTTON_FOOTBALLO_LEFT_LINK            0x1600C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_FOOTBALLO_RIGHT_LINK           0x1600C4EC /* Fallback sidestep right button */\n#define DIBUTTON_FOOTBALLO_FORWARD_LINK         0x160144E0 /* Fallback move forward button */\n#define DIBUTTON_FOOTBALLO_BACK_LINK            0x160144E8 /* Fallback move back button */\n#define DIBUTTON_FOOTBALLO_DEVICE               0x160044FE /* Show input device and controls */\n#define DIBUTTON_FOOTBALLO_PAUSE                0x160044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Football - Defense\n      Defense     ---*/\n#define DIVIRTUAL_SPORTS_FOOTBALL_DEFENSE       0x17000000\n#define DIAXIS_FOOTBALLD_LATERAL                0x17008201 /* Move / Aim: left / right */\n#define DIAXIS_FOOTBALLD_MOVE                   0x17010202 /* Move / Aim: up / down */\n#define DIBUTTON_FOOTBALLD_PLAY                 0x17000401 /* cycle through available plays */\n#define DIBUTTON_FOOTBALLD_SELECT               0x17000402 /* select player closest to the ball */\n#define DIBUTTON_FOOTBALLD_JUMP                 0x17000403 /* jump to intercept or block */\n#define DIBUTTON_FOOTBALLD_TACKLE               0x17000404 /* tackler runner */\n#define DIBUTTON_FOOTBALLD_FAKE                 0x17000405 /* hold down to fake tackle or intercept */\n#define DIBUTTON_FOOTBALLD_SUPERTACKLE          0x17000406 /* Initiate special tackle */\n#define DIBUTTON_FOOTBALLD_MENU                 0x170004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIBUTTON_FOOTBALLD_SPIN                 0x17004407 /* Spin to beat offensive line */\n#define DIBUTTON_FOOTBALLD_SWIM                 0x17004408 /* Swim to beat the offensive line */\n#define DIBUTTON_FOOTBALLD_BULLRUSH             0x17004409 /* Bull rush the offensive line */\n#define DIBUTTON_FOOTBALLD_RIP                  0x1700440A /* Rip the offensive line */\n#define DIBUTTON_FOOTBALLD_AUDIBLE              0x1700440B /* Change defensive play at the line of scrimmage */\n#define DIBUTTON_FOOTBALLD_ZOOM                 0x1700440C /* Zoom view in / out */\n#define DIBUTTON_FOOTBALLD_SUBSTITUTE           0x1700440D /* substitute one player for another */\n#define DIBUTTON_FOOTBALLD_LEFT_LINK            0x1700C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_FOOTBALLD_RIGHT_LINK           0x1700C4EC /* Fallback sidestep right button */\n#define DIBUTTON_FOOTBALLD_FORWARD_LINK         0x170144E0 /* Fallback move forward button */\n#define DIBUTTON_FOOTBALLD_BACK_LINK            0x170144E8 /* Fallback move back button */\n#define DIBUTTON_FOOTBALLD_DEVICE               0x170044FE /* Show input device and controls */\n#define DIBUTTON_FOOTBALLD_PAUSE                0x170044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Golf\n                                ---*/\n#define DIVIRTUAL_SPORTS_GOLF                   0x18000000\n#define DIAXIS_GOLF_LATERAL                     0x18008201 /* Move / Aim: left / right */\n#define DIAXIS_GOLF_MOVE                        0x18010202 /* Move / Aim: up / down */\n#define DIBUTTON_GOLF_SWING                     0x18000401 /* swing club */\n#define DIBUTTON_GOLF_SELECT                    0x18000402 /* cycle between: club / swing strength / ball arc / ball spin */\n#define DIBUTTON_GOLF_UP                        0x18000403 /* increase selection */\n#define DIBUTTON_GOLF_DOWN                      0x18000404 /* decrease selection */\n#define DIBUTTON_GOLF_TERRAIN                   0x18000405 /* shows terrain detail */\n#define DIBUTTON_GOLF_FLYBY                     0x18000406 /* view the hole via a flyby */\n#define DIBUTTON_GOLF_MENU                      0x180004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_GOLF_SCROLL                 0x18004601 /* scroll view */\n#define DIBUTTON_GOLF_ZOOM                      0x18004407 /* Zoom view in / out */\n#define DIBUTTON_GOLF_TIMEOUT                   0x18004408 /* Call for time out */\n#define DIBUTTON_GOLF_SUBSTITUTE                0x18004409 /* substitute one player for another */\n#define DIBUTTON_GOLF_LEFT_LINK                 0x1800C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_GOLF_RIGHT_LINK                0x1800C4EC /* Fallback sidestep right button */\n#define DIBUTTON_GOLF_FORWARD_LINK              0x180144E0 /* Fallback move forward button */\n#define DIBUTTON_GOLF_BACK_LINK                 0x180144E8 /* Fallback move back button */\n#define DIBUTTON_GOLF_DEVICE                    0x180044FE /* Show input device and controls */\n#define DIBUTTON_GOLF_PAUSE                     0x180044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Hockey - Offense\n      Offense       ---*/\n#define DIVIRTUAL_SPORTS_HOCKEY_OFFENSE         0x19000000\n#define DIAXIS_HOCKEYO_LATERAL                  0x19008201 /* Move / Aim: left / right */\n#define DIAXIS_HOCKEYO_MOVE                     0x19010202 /* Move / Aim: up / down */\n#define DIBUTTON_HOCKEYO_SHOOT                  0x19000401 /* Shoot */\n#define DIBUTTON_HOCKEYO_PASS                   0x19000402 /* pass the puck */\n#define DIBUTTON_HOCKEYO_BURST                  0x19000403 /* invoke speed burst */\n#define DIBUTTON_HOCKEYO_SPECIAL                0x19000404 /* invoke special move */\n#define DIBUTTON_HOCKEYO_FAKE                   0x19000405 /* hold down to fake pass or kick */\n#define DIBUTTON_HOCKEYO_MENU                   0x190004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_HOCKEYO_SCROLL              0x19004601 /* scroll view */\n#define DIBUTTON_HOCKEYO_ZOOM                   0x19004406 /* Zoom view in / out */\n#define DIBUTTON_HOCKEYO_STRATEGY               0x19004407 /* Invoke coaching menu for strategy help */\n#define DIBUTTON_HOCKEYO_TIMEOUT                0x19004408 /* Call for time out */\n#define DIBUTTON_HOCKEYO_SUBSTITUTE             0x19004409 /* substitute one player for another */\n#define DIBUTTON_HOCKEYO_LEFT_LINK              0x1900C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_HOCKEYO_RIGHT_LINK             0x1900C4EC /* Fallback sidestep right button */\n#define DIBUTTON_HOCKEYO_FORWARD_LINK           0x190144E0 /* Fallback move forward button */\n#define DIBUTTON_HOCKEYO_BACK_LINK              0x190144E8 /* Fallback move back button */\n#define DIBUTTON_HOCKEYO_DEVICE                 0x190044FE /* Show input device and controls */\n#define DIBUTTON_HOCKEYO_PAUSE                  0x190044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Hockey - Defense\n      Defense       ---*/\n#define DIVIRTUAL_SPORTS_HOCKEY_DEFENSE         0x1A000000\n#define DIAXIS_HOCKEYD_LATERAL                  0x1A008201 /* Move / Aim: left / right */\n#define DIAXIS_HOCKEYD_MOVE                     0x1A010202 /* Move / Aim: up / down */\n#define DIBUTTON_HOCKEYD_PLAYER                 0x1A000401 /* control player closest to the puck */\n#define DIBUTTON_HOCKEYD_STEAL                  0x1A000402 /* attempt steal */\n#define DIBUTTON_HOCKEYD_BURST                  0x1A000403 /* speed burst or body check */\n#define DIBUTTON_HOCKEYD_BLOCK                  0x1A000404 /* block puck */\n#define DIBUTTON_HOCKEYD_FAKE                   0x1A000405 /* hold down to fake tackle or intercept */\n#define DIBUTTON_HOCKEYD_MENU                   0x1A0004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_HOCKEYD_SCROLL              0x1A004601 /* scroll view */\n#define DIBUTTON_HOCKEYD_ZOOM                   0x1A004406 /* Zoom view in / out */\n#define DIBUTTON_HOCKEYD_STRATEGY               0x1A004407 /* Invoke coaching menu for strategy help */\n#define DIBUTTON_HOCKEYD_TIMEOUT                0x1A004408 /* Call for time out */\n#define DIBUTTON_HOCKEYD_SUBSTITUTE             0x1A004409 /* substitute one player for another */\n#define DIBUTTON_HOCKEYD_LEFT_LINK              0x1A00C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_HOCKEYD_RIGHT_LINK             0x1A00C4EC /* Fallback sidestep right button */\n#define DIBUTTON_HOCKEYD_FORWARD_LINK           0x1A0144E0 /* Fallback move forward button */\n#define DIBUTTON_HOCKEYD_BACK_LINK              0x1A0144E8 /* Fallback move back button */\n#define DIBUTTON_HOCKEYD_DEVICE                 0x1A0044FE /* Show input device and controls */\n#define DIBUTTON_HOCKEYD_PAUSE                  0x1A0044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Hockey - Goalie\n      Goal tending  ---*/\n#define DIVIRTUAL_SPORTS_HOCKEY_GOALIE          0x1B000000\n#define DIAXIS_HOCKEYG_LATERAL                  0x1B008201 /* Move / Aim: left / right */\n#define DIAXIS_HOCKEYG_MOVE                     0x1B010202 /* Move / Aim: up / down */\n#define DIBUTTON_HOCKEYG_PASS                   0x1B000401 /* pass puck */\n#define DIBUTTON_HOCKEYG_POKE                   0x1B000402 /* poke / check / hack */\n#define DIBUTTON_HOCKEYG_STEAL                  0x1B000403 /* attempt steal */\n#define DIBUTTON_HOCKEYG_BLOCK                  0x1B000404 /* block puck */\n#define DIBUTTON_HOCKEYG_MENU                   0x1B0004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_HOCKEYG_SCROLL              0x1B004601 /* scroll view */\n#define DIBUTTON_HOCKEYG_ZOOM                   0x1B004405 /* Zoom view in / out */\n#define DIBUTTON_HOCKEYG_STRATEGY               0x1B004406 /* Invoke coaching menu for strategy help */\n#define DIBUTTON_HOCKEYG_TIMEOUT                0x1B004407 /* Call for time out */\n#define DIBUTTON_HOCKEYG_SUBSTITUTE             0x1B004408 /* substitute one player for another */\n#define DIBUTTON_HOCKEYG_LEFT_LINK              0x1B00C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_HOCKEYG_RIGHT_LINK             0x1B00C4EC /* Fallback sidestep right button */\n#define DIBUTTON_HOCKEYG_FORWARD_LINK           0x1B0144E0 /* Fallback move forward button */\n#define DIBUTTON_HOCKEYG_BACK_LINK              0x1B0144E8 /* Fallback move back button */\n#define DIBUTTON_HOCKEYG_DEVICE                 0x1B0044FE /* Show input device and controls */\n#define DIBUTTON_HOCKEYG_PAUSE                  0x1B0044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Mountain Biking\n                     ---*/\n#define DIVIRTUAL_SPORTS_BIKING_MOUNTAIN        0x1C000000\n#define DIAXIS_BIKINGM_TURN                     0x1C008201 /* left / right */\n#define DIAXIS_BIKINGM_PEDAL                    0x1C010202 /* Pedal faster / slower / brake */\n#define DIBUTTON_BIKINGM_JUMP                   0x1C000401 /* jump over obstacle */\n#define DIBUTTON_BIKINGM_CAMERA                 0x1C000402 /* switch camera view */\n#define DIBUTTON_BIKINGM_SPECIAL1               0x1C000403 /* perform first special move */\n#define DIBUTTON_BIKINGM_SELECT                 0x1C000404 /* Select */\n#define DIBUTTON_BIKINGM_SPECIAL2               0x1C000405 /* perform second special move */\n#define DIBUTTON_BIKINGM_MENU                   0x1C0004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_BIKINGM_SCROLL              0x1C004601 /* scroll view */\n#define DIBUTTON_BIKINGM_ZOOM                   0x1C004406 /* Zoom view in / out */\n#define DIAXIS_BIKINGM_BRAKE                    0x1C044203 /* Brake axis  */\n#define DIBUTTON_BIKINGM_LEFT_LINK              0x1C00C4E4 /* Fallback turn left button */\n#define DIBUTTON_BIKINGM_RIGHT_LINK             0x1C00C4EC /* Fallback turn right button */\n#define DIBUTTON_BIKINGM_FASTER_LINK            0x1C0144E0 /* Fallback pedal faster button */\n#define DIBUTTON_BIKINGM_SLOWER_LINK            0x1C0144E8 /* Fallback pedal slower button */\n#define DIBUTTON_BIKINGM_BRAKE_BUTTON_LINK      0x1C0444E8 /* Fallback brake button */\n#define DIBUTTON_BIKINGM_DEVICE                 0x1C0044FE /* Show input device and controls */\n#define DIBUTTON_BIKINGM_PAUSE                  0x1C0044FC /* Start / Pause / Restart game */\n\n/*--- Sports: Skiing / Snowboarding / Skateboarding\n        ---*/\n#define DIVIRTUAL_SPORTS_SKIING                 0x1D000000\n#define DIAXIS_SKIING_TURN                      0x1D008201 /* left / right */\n#define DIAXIS_SKIING_SPEED                     0x1D010202 /* faster / slower */\n#define DIBUTTON_SKIING_JUMP                    0x1D000401 /* Jump */\n#define DIBUTTON_SKIING_CROUCH                  0x1D000402 /* crouch down */\n#define DIBUTTON_SKIING_CAMERA                  0x1D000403 /* switch camera view */\n#define DIBUTTON_SKIING_SPECIAL1                0x1D000404 /* perform first special move */\n#define DIBUTTON_SKIING_SELECT                  0x1D000405 /* Select */\n#define DIBUTTON_SKIING_SPECIAL2                0x1D000406 /* perform second special move */\n#define DIBUTTON_SKIING_MENU                    0x1D0004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_SKIING_GLANCE               0x1D004601 /* scroll view */\n#define DIBUTTON_SKIING_ZOOM                    0x1D004407 /* Zoom view in / out */\n#define DIBUTTON_SKIING_LEFT_LINK               0x1D00C4E4 /* Fallback turn left button */\n#define DIBUTTON_SKIING_RIGHT_LINK              0x1D00C4EC /* Fallback turn right button */\n#define DIBUTTON_SKIING_FASTER_LINK             0x1D0144E0 /* Fallback increase speed button */\n#define DIBUTTON_SKIING_SLOWER_LINK             0x1D0144E8 /* Fallback decrease speed button */\n#define DIBUTTON_SKIING_DEVICE                  0x1D0044FE /* Show input device and controls */\n#define DIBUTTON_SKIING_PAUSE                   0x1D0044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Soccer - Offense\n      Offense       ---*/\n#define DIVIRTUAL_SPORTS_SOCCER_OFFENSE         0x1E000000\n#define DIAXIS_SOCCERO_LATERAL                  0x1E008201 /* Move / Aim: left / right */\n#define DIAXIS_SOCCERO_MOVE                     0x1E010202 /* Move / Aim: up / down */\n#define DIAXIS_SOCCERO_BEND                     0x1E018203 /* Bend to soccer shot/pass */\n#define DIBUTTON_SOCCERO_SHOOT                  0x1E000401 /* Shoot the ball */\n#define DIBUTTON_SOCCERO_PASS                   0x1E000402 /* Pass  */\n#define DIBUTTON_SOCCERO_FAKE                   0x1E000403 /* Fake */\n#define DIBUTTON_SOCCERO_PLAYER                 0x1E000404 /* Select next player */\n#define DIBUTTON_SOCCERO_SPECIAL1               0x1E000405 /* Apply special move */\n#define DIBUTTON_SOCCERO_SELECT                 0x1E000406 /* Select special move */\n#define DIBUTTON_SOCCERO_MENU                   0x1E0004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_SOCCERO_GLANCE              0x1E004601 /* scroll view */\n#define DIBUTTON_SOCCERO_SUBSTITUTE             0x1E004407 /* Substitute one player for another */\n#define DIBUTTON_SOCCERO_SHOOTLOW               0x1E004408 /* Shoot the ball low */\n#define DIBUTTON_SOCCERO_SHOOTHIGH              0x1E004409 /* Shoot the ball high */\n#define DIBUTTON_SOCCERO_PASSTHRU               0x1E00440A /* Make a thru pass */\n#define DIBUTTON_SOCCERO_SPRINT                 0x1E00440B /* Sprint / turbo boost */\n#define DIBUTTON_SOCCERO_CONTROL                0x1E00440C /* Obtain control of the ball */\n#define DIBUTTON_SOCCERO_HEAD                   0x1E00440D /* Attempt to head the ball */\n#define DIBUTTON_SOCCERO_LEFT_LINK              0x1E00C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_SOCCERO_RIGHT_LINK             0x1E00C4EC /* Fallback sidestep right button */\n#define DIBUTTON_SOCCERO_FORWARD_LINK           0x1E0144E0 /* Fallback move forward button */\n#define DIBUTTON_SOCCERO_BACK_LINK              0x1E0144E8 /* Fallback move back button */\n#define DIBUTTON_SOCCERO_DEVICE                 0x1E0044FE /* Show input device and controls */\n#define DIBUTTON_SOCCERO_PAUSE                  0x1E0044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Soccer - Defense\n      Defense       ---*/\n#define DIVIRTUAL_SPORTS_SOCCER_DEFENSE         0x1F000000\n#define DIAXIS_SOCCERD_LATERAL                  0x1F008201 /* Move / Aim: left / right */\n#define DIAXIS_SOCCERD_MOVE                     0x1F010202 /* Move / Aim: up / down */\n#define DIBUTTON_SOCCERD_BLOCK                  0x1F000401 /* Attempt to block shot */\n#define DIBUTTON_SOCCERD_STEAL                  0x1F000402 /* Attempt to steal ball */\n#define DIBUTTON_SOCCERD_FAKE                   0x1F000403 /* Fake a block or a steal */\n#define DIBUTTON_SOCCERD_PLAYER                 0x1F000404 /* Select next player */\n#define DIBUTTON_SOCCERD_SPECIAL                0x1F000405 /* Apply special move */\n#define DIBUTTON_SOCCERD_SELECT                 0x1F000406 /* Select special move */\n#define DIBUTTON_SOCCERD_SLIDE                  0x1F000407 /* Attempt a slide tackle */\n#define DIBUTTON_SOCCERD_MENU                   0x1F0004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_SOCCERD_GLANCE              0x1F004601 /* scroll view */\n#define DIBUTTON_SOCCERD_FOUL                   0x1F004408 /* Initiate a foul / hard-foul */\n#define DIBUTTON_SOCCERD_HEAD                   0x1F004409 /* Attempt a Header */\n#define DIBUTTON_SOCCERD_CLEAR                  0x1F00440A /* Attempt to clear the ball down the field */\n#define DIBUTTON_SOCCERD_GOALIECHARGE           0x1F00440B /* Make the goalie charge out of the box */\n#define DIBUTTON_SOCCERD_SUBSTITUTE             0x1F00440C /* Substitute one player for another */\n#define DIBUTTON_SOCCERD_LEFT_LINK              0x1F00C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_SOCCERD_RIGHT_LINK             0x1F00C4EC /* Fallback sidestep right button */\n#define DIBUTTON_SOCCERD_FORWARD_LINK           0x1F0144E0 /* Fallback move forward button */\n#define DIBUTTON_SOCCERD_BACK_LINK              0x1F0144E8 /* Fallback move back button */\n#define DIBUTTON_SOCCERD_DEVICE                 0x1F0044FE /* Show input device and controls */\n#define DIBUTTON_SOCCERD_PAUSE                  0x1F0044FC /* Start / Pause / Restart game */\n\n/*--- Sports - Racquet\n      Tennis - Table-Tennis - Squash   ---*/\n#define DIVIRTUAL_SPORTS_RACQUET                0x20000000\n#define DIAXIS_RACQUET_LATERAL                  0x20008201 /* Move / Aim: left / right */\n#define DIAXIS_RACQUET_MOVE                     0x20010202 /* Move / Aim: up / down */\n#define DIBUTTON_RACQUET_SWING                  0x20000401 /* Swing racquet */\n#define DIBUTTON_RACQUET_BACKSWING              0x20000402 /* Swing backhand */\n#define DIBUTTON_RACQUET_SMASH                  0x20000403 /* Smash shot */\n#define DIBUTTON_RACQUET_SPECIAL                0x20000404 /* Special shot */\n#define DIBUTTON_RACQUET_SELECT                 0x20000405 /* Select special shot */\n#define DIBUTTON_RACQUET_MENU                   0x200004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_RACQUET_GLANCE              0x20004601 /* scroll view */\n#define DIBUTTON_RACQUET_TIMEOUT                0x20004406 /* Call for time out */\n#define DIBUTTON_RACQUET_SUBSTITUTE             0x20004407 /* Substitute one player for another */\n#define DIBUTTON_RACQUET_LEFT_LINK              0x2000C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_RACQUET_RIGHT_LINK             0x2000C4EC /* Fallback sidestep right button */\n#define DIBUTTON_RACQUET_FORWARD_LINK           0x200144E0 /* Fallback move forward button */\n#define DIBUTTON_RACQUET_BACK_LINK              0x200144E8 /* Fallback move back button */\n#define DIBUTTON_RACQUET_DEVICE                 0x200044FE /* Show input device and controls */\n#define DIBUTTON_RACQUET_PAUSE                  0x200044FC /* Start / Pause / Restart game */\n\n/*--- Arcade- 2D\n      Side to Side movement        ---*/\n#define DIVIRTUAL_ARCADE_SIDE2SIDE              0x21000000\n#define DIAXIS_ARCADES_LATERAL                  0x21008201 /* left / right */\n#define DIAXIS_ARCADES_MOVE                     0x21010202 /* up / down */\n#define DIBUTTON_ARCADES_THROW                  0x21000401 /* throw object */\n#define DIBUTTON_ARCADES_CARRY                  0x21000402 /* carry object */\n#define DIBUTTON_ARCADES_ATTACK                 0x21000403 /* attack */\n#define DIBUTTON_ARCADES_SPECIAL                0x21000404 /* apply special move */\n#define DIBUTTON_ARCADES_SELECT                 0x21000405 /* select special move */\n#define DIBUTTON_ARCADES_MENU                   0x210004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_ARCADES_VIEW                0x21004601 /* scroll view left / right / up / down */\n#define DIBUTTON_ARCADES_LEFT_LINK              0x2100C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_ARCADES_RIGHT_LINK             0x2100C4EC /* Fallback sidestep right button */\n#define DIBUTTON_ARCADES_FORWARD_LINK           0x210144E0 /* Fallback move forward button */\n#define DIBUTTON_ARCADES_BACK_LINK              0x210144E8 /* Fallback move back button */\n#define DIBUTTON_ARCADES_VIEW_UP_LINK           0x2107C4E0 /* Fallback scroll view up button */\n#define DIBUTTON_ARCADES_VIEW_DOWN_LINK         0x2107C4E8 /* Fallback scroll view down button */\n#define DIBUTTON_ARCADES_VIEW_LEFT_LINK         0x2107C4E4 /* Fallback scroll view left button */\n#define DIBUTTON_ARCADES_VIEW_RIGHT_LINK        0x2107C4EC /* Fallback scroll view right button */\n#define DIBUTTON_ARCADES_DEVICE                 0x210044FE /* Show input device and controls */\n#define DIBUTTON_ARCADES_PAUSE                  0x210044FC /* Start / Pause / Restart game */\n\n/*--- Arcade - Platform Game\n      Character moves around on screen  ---*/\n#define DIVIRTUAL_ARCADE_PLATFORM               0x22000000\n#define DIAXIS_ARCADEP_LATERAL                  0x22008201 /* Left / right */\n#define DIAXIS_ARCADEP_MOVE                     0x22010202 /* Up / down */\n#define DIBUTTON_ARCADEP_JUMP                   0x22000401 /* Jump */\n#define DIBUTTON_ARCADEP_FIRE                   0x22000402 /* Fire */\n#define DIBUTTON_ARCADEP_CROUCH                 0x22000403 /* Crouch */\n#define DIBUTTON_ARCADEP_SPECIAL                0x22000404 /* Apply special move */\n#define DIBUTTON_ARCADEP_SELECT                 0x22000405 /* Select special move */\n#define DIBUTTON_ARCADEP_MENU                   0x220004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_ARCADEP_VIEW                0x22004601 /* Scroll view */\n#define DIBUTTON_ARCADEP_FIRESECONDARY          0x22004406 /* Alternative fire button */\n#define DIBUTTON_ARCADEP_LEFT_LINK              0x2200C4E4 /* Fallback sidestep left button */\n#define DIBUTTON_ARCADEP_RIGHT_LINK             0x2200C4EC /* Fallback sidestep right button */\n#define DIBUTTON_ARCADEP_FORWARD_LINK           0x220144E0 /* Fallback move forward button */\n#define DIBUTTON_ARCADEP_BACK_LINK              0x220144E8 /* Fallback move back button */\n#define DIBUTTON_ARCADEP_VIEW_UP_LINK           0x2207C4E0 /* Fallback scroll view up button */\n#define DIBUTTON_ARCADEP_VIEW_DOWN_LINK         0x2207C4E8 /* Fallback scroll view down button */\n#define DIBUTTON_ARCADEP_VIEW_LEFT_LINK         0x2207C4E4 /* Fallback scroll view left button */\n#define DIBUTTON_ARCADEP_VIEW_RIGHT_LINK        0x2207C4EC /* Fallback scroll view right button */\n#define DIBUTTON_ARCADEP_DEVICE                 0x220044FE /* Show input device and controls */\n#define DIBUTTON_ARCADEP_PAUSE                  0x220044FC /* Start / Pause / Restart game */\n\n/*--- CAD - 2D Object Control\n      Controls to select and move objects in 2D  ---*/\n#define DIVIRTUAL_CAD_2DCONTROL                 0x23000000\n#define DIAXIS_2DCONTROL_LATERAL                0x23008201 /* Move view left / right */\n#define DIAXIS_2DCONTROL_MOVE                   0x23010202 /* Move view up / down */\n#define DIAXIS_2DCONTROL_INOUT                  0x23018203 /* Zoom - in / out */\n#define DIBUTTON_2DCONTROL_SELECT               0x23000401 /* Select Object */\n#define DIBUTTON_2DCONTROL_SPECIAL1             0x23000402 /* Do first special operation */\n#define DIBUTTON_2DCONTROL_SPECIAL              0x23000403 /* Select special operation */\n#define DIBUTTON_2DCONTROL_SPECIAL2             0x23000404 /* Do second special operation */\n#define DIBUTTON_2DCONTROL_MENU                 0x230004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_2DCONTROL_HATSWITCH         0x23004601 /* Hat switch */\n#define DIAXIS_2DCONTROL_ROTATEZ                0x23024204 /* Rotate view clockwise / counterclockwise */\n#define DIBUTTON_2DCONTROL_DISPLAY              0x23004405 /* Shows next on-screen display options */\n#define DIBUTTON_2DCONTROL_DEVICE               0x230044FE /* Show input device and controls */\n#define DIBUTTON_2DCONTROL_PAUSE                0x230044FC /* Start / Pause / Restart game */\n\n/*--- CAD - 3D object control\n      Controls to select and move objects within a 3D environment  ---*/\n#define DIVIRTUAL_CAD_3DCONTROL                 0x24000000\n#define DIAXIS_3DCONTROL_LATERAL                0x24008201 /* Move view left / right */\n#define DIAXIS_3DCONTROL_MOVE                   0x24010202 /* Move view up / down */\n#define DIAXIS_3DCONTROL_INOUT                  0x24018203 /* Zoom - in / out */\n#define DIBUTTON_3DCONTROL_SELECT               0x24000401 /* Select Object */\n#define DIBUTTON_3DCONTROL_SPECIAL1             0x24000402 /* Do first special operation */\n#define DIBUTTON_3DCONTROL_SPECIAL              0x24000403 /* Select special operation */\n#define DIBUTTON_3DCONTROL_SPECIAL2             0x24000404 /* Do second special operation */\n#define DIBUTTON_3DCONTROL_MENU                 0x240004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_3DCONTROL_HATSWITCH         0x24004601 /* Hat switch */\n#define DIAXIS_3DCONTROL_ROTATEX                0x24034204 /* Rotate view forward or up / backward or down */\n#define DIAXIS_3DCONTROL_ROTATEY                0x2402C205 /* Rotate view clockwise / counterclockwise */\n#define DIAXIS_3DCONTROL_ROTATEZ                0x24024206 /* Rotate view left / right */\n#define DIBUTTON_3DCONTROL_DISPLAY              0x24004405 /* Show next on-screen display options */\n#define DIBUTTON_3DCONTROL_DEVICE               0x240044FE /* Show input device and controls */\n#define DIBUTTON_3DCONTROL_PAUSE                0x240044FC /* Start / Pause / Restart game */\n\n/*--- CAD - 3D Navigation - Fly through\n      Controls for 3D modeling  ---*/\n#define DIVIRTUAL_CAD_FLYBY                     0x25000000\n#define DIAXIS_CADF_LATERAL                     0x25008201 /* move view left / right */\n#define DIAXIS_CADF_MOVE                        0x25010202 /* move view up / down */\n#define DIAXIS_CADF_INOUT                       0x25018203 /* in / out */\n#define DIBUTTON_CADF_SELECT                    0x25000401 /* Select Object */\n#define DIBUTTON_CADF_SPECIAL1                  0x25000402 /* do first special operation */\n#define DIBUTTON_CADF_SPECIAL                   0x25000403 /* Select special operation */\n#define DIBUTTON_CADF_SPECIAL2                  0x25000404 /* do second special operation */\n#define DIBUTTON_CADF_MENU                      0x250004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_CADF_HATSWITCH              0x25004601 /* Hat switch */\n#define DIAXIS_CADF_ROTATEX                     0x25034204 /* Rotate view forward or up / backward or down */\n#define DIAXIS_CADF_ROTATEY                     0x2502C205 /* Rotate view clockwise / counterclockwise */\n#define DIAXIS_CADF_ROTATEZ                     0x25024206 /* Rotate view left / right */\n#define DIBUTTON_CADF_DISPLAY                   0x25004405 /* shows next on-screen display options */\n#define DIBUTTON_CADF_DEVICE                    0x250044FE /* Show input device and controls */\n#define DIBUTTON_CADF_PAUSE                     0x250044FC /* Start / Pause / Restart game */\n\n/*--- CAD - 3D Model Control\n      Controls for 3D modeling  ---*/\n#define DIVIRTUAL_CAD_MODEL                     0x26000000\n#define DIAXIS_CADM_LATERAL                     0x26008201 /* move view left / right */\n#define DIAXIS_CADM_MOVE                        0x26010202 /* move view up / down */\n#define DIAXIS_CADM_INOUT                       0x26018203 /* in / out */\n#define DIBUTTON_CADM_SELECT                    0x26000401 /* Select Object */\n#define DIBUTTON_CADM_SPECIAL1                  0x26000402 /* do first special operation */\n#define DIBUTTON_CADM_SPECIAL                   0x26000403 /* Select special operation */\n#define DIBUTTON_CADM_SPECIAL2                  0x26000404 /* do second special operation */\n#define DIBUTTON_CADM_MENU                      0x260004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIHATSWITCH_CADM_HATSWITCH              0x26004601 /* Hat switch */\n#define DIAXIS_CADM_ROTATEX                     0x26034204 /* Rotate view forward or up / backward or down */\n#define DIAXIS_CADM_ROTATEY                     0x2602C205 /* Rotate view clockwise / counterclockwise */\n#define DIAXIS_CADM_ROTATEZ                     0x26024206 /* Rotate view left / right */\n#define DIBUTTON_CADM_DISPLAY                   0x26004405 /* shows next on-screen display options */\n#define DIBUTTON_CADM_DEVICE                    0x260044FE /* Show input device and controls */\n#define DIBUTTON_CADM_PAUSE                     0x260044FC /* Start / Pause / Restart game */\n\n/*--- Control - Media Equipment\n      Remote        ---*/\n#define DIVIRTUAL_REMOTE_CONTROL                0x27000000\n#define DIAXIS_REMOTE_SLIDER                    0x27050201 /* Slider for adjustment: volume / color / bass / etc */\n#define DIBUTTON_REMOTE_MUTE                    0x27000401 /* Set volume on current device to zero */\n#define DIBUTTON_REMOTE_SELECT                  0x27000402 /* Next/previous: channel/ track / chapter / picture / station */\n#define DIBUTTON_REMOTE_PLAY                    0x27002403 /* Start or pause entertainment on current device */\n#define DIBUTTON_REMOTE_CUE                     0x27002404 /* Move through current media */\n#define DIBUTTON_REMOTE_REVIEW                  0x27002405 /* Move through current media */\n#define DIBUTTON_REMOTE_CHANGE                  0x27002406 /* Select next device */\n#define DIBUTTON_REMOTE_RECORD                  0x27002407 /* Start recording the current media */\n#define DIBUTTON_REMOTE_MENU                    0x270004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIAXIS_REMOTE_SLIDER2                   0x27054202 /* Slider for adjustment: volume */\n#define DIBUTTON_REMOTE_TV                      0x27005C08 /* Select TV */\n#define DIBUTTON_REMOTE_CABLE                   0x27005C09 /* Select cable box */\n#define DIBUTTON_REMOTE_CD                      0x27005C0A /* Select CD player */\n#define DIBUTTON_REMOTE_VCR                     0x27005C0B /* Select VCR */\n#define DIBUTTON_REMOTE_TUNER                   0x27005C0C /* Select tuner */\n#define DIBUTTON_REMOTE_DVD                     0x27005C0D /* Select DVD player */\n#define DIBUTTON_REMOTE_ADJUST                  0x27005C0E /* Enter device adjustment menu */\n#define DIBUTTON_REMOTE_DIGIT0                  0x2700540F /* Digit 0 */\n#define DIBUTTON_REMOTE_DIGIT1                  0x27005410 /* Digit 1 */\n#define DIBUTTON_REMOTE_DIGIT2                  0x27005411 /* Digit 2 */\n#define DIBUTTON_REMOTE_DIGIT3                  0x27005412 /* Digit 3 */\n#define DIBUTTON_REMOTE_DIGIT4                  0x27005413 /* Digit 4 */\n#define DIBUTTON_REMOTE_DIGIT5                  0x27005414 /* Digit 5 */\n#define DIBUTTON_REMOTE_DIGIT6                  0x27005415 /* Digit 6 */\n#define DIBUTTON_REMOTE_DIGIT7                  0x27005416 /* Digit 7 */\n#define DIBUTTON_REMOTE_DIGIT8                  0x27005417 /* Digit 8 */\n#define DIBUTTON_REMOTE_DIGIT9                  0x27005418 /* Digit 9 */\n#define DIBUTTON_REMOTE_DEVICE                  0x270044FE /* Show input device and controls */\n#define DIBUTTON_REMOTE_PAUSE                   0x270044FC /* Start / Pause / Restart game */\n\n/*--- Control- Web\n      Help or Browser            ---*/\n#define DIVIRTUAL_BROWSER_CONTROL               0x28000000\n#define DIAXIS_BROWSER_LATERAL                  0x28008201 /* Move on screen pointer */\n#define DIAXIS_BROWSER_MOVE                     0x28010202 /* Move on screen pointer */\n#define DIBUTTON_BROWSER_SELECT                 0x28000401 /* Select current item */\n#define DIAXIS_BROWSER_VIEW                     0x28018203 /* Move view up/down */\n#define DIBUTTON_BROWSER_REFRESH                0x28000402 /* Refresh */\n#define DIBUTTON_BROWSER_MENU                   0x280004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIBUTTON_BROWSER_SEARCH                 0x28004403 /* Use search tool */\n#define DIBUTTON_BROWSER_STOP                   0x28004404 /* Cease current update */\n#define DIBUTTON_BROWSER_HOME                   0x28004405 /* Go directly to \"home\" location */\n#define DIBUTTON_BROWSER_FAVORITES              0x28004406 /* Mark current site as favorite */\n#define DIBUTTON_BROWSER_NEXT                   0x28004407 /* Select Next page */\n#define DIBUTTON_BROWSER_PREVIOUS               0x28004408 /* Select Previous page */\n#define DIBUTTON_BROWSER_HISTORY                0x28004409 /* Show/Hide History */\n#define DIBUTTON_BROWSER_PRINT                  0x2800440A /* Print current page */\n#define DIBUTTON_BROWSER_DEVICE                 0x280044FE /* Show input device and controls */\n#define DIBUTTON_BROWSER_PAUSE                  0x280044FC /* Start / Pause / Restart game */\n\n/*--- Driving Simulator - Giant Walking Robot\n      Walking tank with weapons  ---*/\n#define DIVIRTUAL_DRIVING_MECHA                 0x29000000\n#define DIAXIS_MECHA_STEER                      0x29008201 /* Turns mecha left/right */\n#define DIAXIS_MECHA_TORSO                      0x29010202 /* Tilts torso forward/backward */\n#define DIAXIS_MECHA_ROTATE                     0x29020203 /* Turns torso left/right */\n#define DIAXIS_MECHA_THROTTLE                   0x29038204 /* Engine Speed */\n#define DIBUTTON_MECHA_FIRE                     0x29000401 /* Fire */\n#define DIBUTTON_MECHA_WEAPONS                  0x29000402 /* Select next weapon group */\n#define DIBUTTON_MECHA_TARGET                   0x29000403 /* Select closest enemy available target */\n#define DIBUTTON_MECHA_REVERSE                  0x29000404 /* Toggles throttle in/out of reverse */\n#define DIBUTTON_MECHA_ZOOM                     0x29000405 /* Zoom in/out targeting reticule */\n#define DIBUTTON_MECHA_JUMP                     0x29000406 /* Fires jump jets */\n#define DIBUTTON_MECHA_MENU                     0x290004FD /* Show menu options */\n/*--- Priority 2 controls                            ---*/\n\n#define DIBUTTON_MECHA_CENTER                   0x29004407 /* Center torso to legs */\n#define DIHATSWITCH_MECHA_GLANCE                0x29004601 /* Look around */\n#define DIBUTTON_MECHA_VIEW                     0x29004408 /* Cycle through view options */\n#define DIBUTTON_MECHA_FIRESECONDARY            0x29004409 /* Alternative fire button */\n#define DIBUTTON_MECHA_LEFT_LINK                0x2900C4E4 /* Fallback steer left button */\n#define DIBUTTON_MECHA_RIGHT_LINK               0x2900C4EC /* Fallback steer right button */\n#define DIBUTTON_MECHA_FORWARD_LINK             0x290144E0 /* Fallback tilt torso forward button */\n#define DIBUTTON_MECHA_BACK_LINK                0x290144E8 /* Fallback tilt toroso backward button */\n#define DIBUTTON_MECHA_ROTATE_LEFT_LINK         0x290244E4 /* Fallback rotate toroso right button */\n#define DIBUTTON_MECHA_ROTATE_RIGHT_LINK        0x290244EC /* Fallback rotate torso left button */\n#define DIBUTTON_MECHA_FASTER_LINK              0x2903C4E0 /* Fallback increase engine speed */\n#define DIBUTTON_MECHA_SLOWER_LINK              0x2903C4E8 /* Fallback decrease engine speed */\n#define DIBUTTON_MECHA_DEVICE                   0x290044FE /* Show input device and controls */\n#define DIBUTTON_MECHA_PAUSE                    0x290044FC /* Start / Pause / Restart game */\n\n/*\n *  \"ANY\" semantics can be used as a last resort to get mappings for actions \n *  that match nothing in the chosen virtual genre.  These semantics will be \n *  mapped at a lower priority that virtual genre semantics.  Also, hardware \n *  vendors will not be able to provide sensible mappings for these unless \n *  they provide application specific mappings.\n */\n#define DIAXIS_ANY_X_1                          0xFF00C201 \n#define DIAXIS_ANY_X_2                          0xFF00C202 \n#define DIAXIS_ANY_Y_1                          0xFF014201 \n#define DIAXIS_ANY_Y_2                          0xFF014202 \n#define DIAXIS_ANY_Z_1                          0xFF01C201 \n#define DIAXIS_ANY_Z_2                          0xFF01C202 \n#define DIAXIS_ANY_R_1                          0xFF024201 \n#define DIAXIS_ANY_R_2                          0xFF024202 \n#define DIAXIS_ANY_U_1                          0xFF02C201 \n#define DIAXIS_ANY_U_2                          0xFF02C202 \n#define DIAXIS_ANY_V_1                          0xFF034201 \n#define DIAXIS_ANY_V_2                          0xFF034202 \n#define DIAXIS_ANY_A_1                          0xFF03C201 \n#define DIAXIS_ANY_A_2                          0xFF03C202 \n#define DIAXIS_ANY_B_1                          0xFF044201 \n#define DIAXIS_ANY_B_2                          0xFF044202 \n#define DIAXIS_ANY_C_1                          0xFF04C201 \n#define DIAXIS_ANY_C_2                          0xFF04C202 \n#define DIAXIS_ANY_S_1                          0xFF054201 \n#define DIAXIS_ANY_S_2                          0xFF054202 \n\n#define DIAXIS_ANY_1                            0xFF004201 \n#define DIAXIS_ANY_2                            0xFF004202 \n#define DIAXIS_ANY_3                            0xFF004203 \n#define DIAXIS_ANY_4                            0xFF004204 \n\n#define DIPOV_ANY_1                             0xFF004601 \n#define DIPOV_ANY_2                             0xFF004602 \n#define DIPOV_ANY_3                             0xFF004603 \n#define DIPOV_ANY_4                             0xFF004604 \n\n#define DIBUTTON_ANY(instance)                  ( 0xFF004400 | instance )\n\n\n#ifdef __cplusplus\n};\n#endif\n\n#endif  /* __DINPUT_INCLUDED__ */\n\n/****************************************************************************\n *\n *  Definitions for non-IDirectInput (VJoyD) features defined more recently\n *  than the current sdk files\n *\n ****************************************************************************/\n\n#ifdef _INC_MMSYSTEM\n#ifndef MMNOJOY\n\n#ifndef __VJOYDX_INCLUDED__\n#define __VJOYDX_INCLUDED__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n * Flag to indicate that the dwReserved2 field of the JOYINFOEX structure\n * contains mini-driver specific data to be passed by VJoyD to the mini-\n * driver instead of doing a poll.\n */\n#define JOY_PASSDRIVERDATA          0x10000000l\n\n/*\n * Informs the joystick driver that the configuration has been changed\n * and should be reloaded from the registery.\n * dwFlags is reserved and should be set to zero\n */\nWINMMAPI MMRESULT WINAPI joyConfigChanged( DWORD dwFlags );\n\n#ifndef DIJ_RINGZERO\n/*\n * Invoke the joystick control panel directly, using the passed window handle \n * as the parent of the dialog.  This API is only supported for compatibility \n * purposes; new applications should use the RunControlPanel method of a \n * device interface for a game controller.\n * The API is called by using the function pointer returned by\n * GetProcAddress( hCPL, TEXT(\"ShowJoyCPL\") ) where hCPL is a HMODULE returned \n * by LoadLibrary( TEXT(\"joy.cpl\") ).  The typedef is provided to allow \n * declaration and casting of an appropriately typed variable.\n */\nvoid WINAPI ShowJoyCPL( HWND hWnd );\ntypedef void (WINAPI* LPFNSHOWJOYCPL)( HWND hWnd );\n#endif /* DIJ_RINGZERO */\n\n\n/*\n * Hardware Setting indicating that the device is a headtracker\n */\n#define JOY_HWS_ISHEADTRACKER       0x02000000l\n\n/*\n * Hardware Setting indicating that the VxD is used to replace\n * the standard analog polling\n */\n#define JOY_HWS_ISGAMEPORTDRIVER    0x04000000l\n\n/*\n * Hardware Setting indicating that the driver needs a standard\n * gameport in order to communicate with the device.\n */\n#define JOY_HWS_ISANALOGPORTDRIVER  0x08000000l\n\n/*\n * Hardware Setting indicating that VJoyD should not load this\n * driver, it will be loaded externally and will register with\n * VJoyD of it's own accord.\n */\n#define JOY_HWS_AUTOLOAD            0x10000000l\n\n/*\n * Hardware Setting indicating that the driver acquires any\n * resources needed without needing a devnode through VJoyD.\n */\n#define JOY_HWS_NODEVNODE           0x20000000l\n\n\n/*\n * Hardware Setting indicating that the device is a gameport bus\n */\n#define JOY_HWS_ISGAMEPORTBUS       0x80000000l\n#define JOY_HWS_GAMEPORTBUSBUSY     0x00000001l\n\n/*\n * Usage Setting indicating that the settings are volatile and\n * should be removed if still present on a reboot.\n */\n#define JOY_US_VOLATILE             0x00000008L\n\n#ifdef __cplusplus\n};\n#endif\n\n#endif  /* __VJOYDX_INCLUDED__ */\n\n#endif  /* not MMNOJOY */\n#endif  /* _INC_MMSYSTEM */\n\n/****************************************************************************\n *\n *  Definitions for non-IDirectInput (VJoyD) features defined more recently\n *  than the current ddk files\n *\n ****************************************************************************/\n\n#ifndef DIJ_RINGZERO\n\n#ifdef _INC_MMDDK\n#ifndef MMNOJOYDEV\n\n#ifndef __VJOYDXD_INCLUDED__\n#define __VJOYDXD_INCLUDED__\n/*\n * Poll type in which the do_other field of the JOYOEMPOLLDATA\n * structure contains mini-driver specific data passed from an app.\n */\n#define JOY_OEMPOLL_PASSDRIVERDATA  7\n\n#endif  /* __VJOYDXD_INCLUDED__ */\n\n#endif  /* not MMNOJOYDEV */\n#endif  /* _INC_MMDDK */\n\n#endif /* DIJ_RINGZERO */\n\n"
  },
  {
    "path": "Include/disasm.h",
    "content": "////////////////////////////////////////////////////////////////////////////////\n//                                                                            //\n// OllyDbg Disassembling Engine v2.01                                         //\n//                                                                            //\n// Copyright (c) 2007-2013 Oleh Yuschuk, ollydbg@t-online.de                  //\n//                                                                            //\n// This code is part of the OllyDbg Disassembler v2.01                        //\n//                                                                            //\n// Disassembling engine is free software; you can redistribute it and/or      //\n// modify it under the terms of the GNU General Public License as published   //\n// by the Free Software Foundation; either version 3 of the License, or (at   //\n// your option) any later version.                                            //\n//                                                                            //\n// This code is distributed in the hope that it will be useful, but WITHOUT   //\n// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or      //\n// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for   //\n// more details.                                                              //\n//                                                                            //\n// You should have received a copy of the GNU General Public License along    //\n// with this program. If not, see <http://www.gnu.org/licenses/>.             //\n//                                                                            //\n////////////////////////////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////////////////////////////\n//                                                                            //\n// This is a fast disassembler that can be used to determine the length of    //\n// the binary 80x86 32-bit command and its attributes, to convert it to the   //\n// human-readable text form, highlight its operands, and create hexadecimal   //\n// dump of the binary command.                                                //\n//                                                                            //\n// It is a stripped down version of the disassembler used by OllyDbg 2.01.    //\n// It can't analyse and comment the contents of the operands, or predict the  //\n// results of the command execution. Analysis-dependent features are not      //\n// included, too. Most other features are kept.                               //\n//                                                                            //\n// Disassembler supports integer, FPU, MMX, 3DNow, SSE1-SSE4.1 and AVX        //\n// instructions. 64-bit mode, AVX2, FMA and XOP are not (yet) supported.      //\n//                                                                            //\n// This code can be compiled either in ASCII or UNICODE mode. It is reentrant //\n// (thread-safe, feature not available in the original OllyDbg code).         //\n//                                                                            //\n// Typical operation speed on 3-GHz Phenom II in MASM mode is:                //\n//                                                                            //\n//   Command length and info:          130 ns/command (7,700,000 commands/s)  //\n//   Disassembly:                      290 ns/command (3,400,000 commands/s)  //\n//   Disassembly, dump, highlighting:  350 ns/command (2,800,000 commands/s)  //\n//                                                                            //\n////////////////////////////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////////////////////////////\n////////////// PREFERRED SETTINGS AND FIXES FOR BORLAND COMPILERS //////////////\n\n#ifdef __BORLANDC__\n  #pragma option -a1                   // Byte alignment\n  #pragma option -w-pin                // Disable \"partially bracketed\" warning\n  // Redefinition of MAKELONG removes nasty warning under Borland Builder 4.0:\n  // boolean OR in one row with arithmetical shift.\n  #undef  MAKELONG\n  #define MAKELONG(lo,hi) ((LONG)(((WORD)(lo))|(((DWORD)((WORD)(hi)))<<16)))\n#endif\n\n#define MAKEWP(lo,hi)  ((WPARAM)MAKELONG(lo,hi))\n#define MAKELP(lo,hi)  ((LPARAM)MAKELONG(lo,hi))\n\n#define LOINT(l)       ((signed short)((WORD)(l)))\n#define HIINT(l)       ((signed short)(((DWORD)(l)>>16) & 0xFFFF))\n\n#ifndef FIELD_OFFSET\n  #define FIELD_OFFSET(type,field) ((long)&(((type *)0)->field))\n#endif\n\n\n////////////////////////////////////////////////////////////////////////////////\n\n#define TEXTLEN        256             // Max length of text string\n#define SHORTNAME      32              // Max length of short or module name\n\n#ifdef UNICODE\n  #define tchar        wchar_t         // Or replace it with TCHAR\n  #define T(x)         L##x\n  #define tstrlen      wcslen\n  #define tstrcpy      wcscpy\n  #define tstrcmp      wcscmp\n  #define tstrlwr      _wcslwr\n  #define tsprintf     swprintf\n  #define ttolower     towlower\n#else\n  #define tchar        char\n  #define T(x)         x\n  #define tstrlen      strlen\n  #define tstrcpy      strcpy\n  #define tstrcmp      strcmp\n  #define tstrlwr      strlwr\n  #define tsprintf     sprintf\n  #define ttolower     tolower\n#endif\n\n#define NOPERAND       4               // Maximal allowed number of operands\n#define NREG           8               // Number of registers (of any type)\n#define NSEG           6               // Number of valid segment registers\n#define MAXCMDSIZE     16              // Maximal length of valid 80x86 command\n#define NEGLIMIT       (-16384)        // Limit to decode offsets as negative\n#define DECLIMIT       16384           // Limit to decode constants as decimal\n\ntypedef unsigned char  uchar;          // Unsigned character (byte)\ntypedef unsigned short ushort;         // Unsigned short\ntypedef unsigned int   uint;           // Unsigned integer\ntypedef unsigned long  ulong;          // Unsigned long\n\n// CMDMASK can be used to balance between the necessary memory size and the\n// disassembly time.\n#define CMDMASK        0x3FFF          // Search mask for Disassembler, 2**n-1\n#define NCHAIN         44300           // Max allowed number of chain links\n\n// Registers.\n#define REG_UNDEF      (-1)            // Codes of general purpose registers\n#define REG_EAX        0\n#define REG_ECX        1\n#define REG_EDX        2\n#define REG_EBX        3\n#define REG_ESP        4\n#define REG_EBP        5\n#define REG_ESI        6\n#define REG_EDI        7\n\n#define REG_AL         0               // Symbolic indices of 8-bit registers\n#define REG_CL         1\n#define REG_DL         2\n#define REG_BL         3\n#define REG_AH         4\n#define REG_CH         5\n#define REG_DH         6\n#define REG_BH         7\n\n#define SEG_UNDEF      (-1)            // Codes of segment/selector registers\n#define SEG_ES         0\n#define SEG_CS         1\n#define SEG_SS         2\n#define SEG_DS         3\n#define SEG_FS         4\n#define SEG_GS         5\n\n// Command highlighting.\n#define DRAW_PLAIN     '.' //0x0000000C      // Plain commands\n#define DRAW_JUMP      '>' //0x0000000D      // Unconditional jump commands\n#define DRAW_CJMP      '?' //0x0000000E      // Conditional jump commands\n#define DRAW_PUSHPOP   '=' //0x0000000F      // PUSH/POP commands\n#define DRAW_CALL      '@' //0x00000010      // CALL commands\n#define DRAW_RET       '<' //0x00000011      // RET commands\n#define DRAW_FPU       '1' //0x00000012      // FPU, MMX, 3DNow! and SSE commands\n#define DRAW_SUSPECT   '!' //0x00000013      // Bad, system and privileged commands\n// Operand highlighting.\n#define DRAW_IREG      'R' //0x00000018      // General purpose registers\n#define DRAW_FREG      'F' //0x00000019      // FPU, MMX and SSE registers\n#define DRAW_SYSREG    'S' //0x0000001A      // Segment and system registers\n#define DRAW_STKMEM    'K' //0x0000001B      // Memory accessed over ESP or EBP\n#define DRAW_MEM       'M' //0x0000001C      // Any other memory\n#define DRAW_CONST     'C' //0x0000001E      // Constant\n\n#define D_NONE         0x00000000      // No special features\n// General type of command, only one is allowed.\n#define D_CMDTYPE      0x0000001F      // Mask to extract type of command\n#define   D_CMD        0x00000000      // Ordinary (none of listed below)\n#define   D_MOV        0x00000001      // Move to or from integer register\n#define   D_MOVC       0x00000002      // Conditional move to integer register\n#define   D_SETC       0x00000003      // Conditional set integer register\n#define   D_TEST       0x00000004      // Used to test data (CMP, TEST, AND...)\n#define   D_STRING     0x00000005      // String command with REPxxx prefix\n#define   D_JMP        0x00000006      // Unconditional near jump\n#define   D_JMPFAR     0x00000007      // Unconditional far jump\n#define   D_JMC        0x00000008      // Conditional jump on flags\n#define   D_JMCX       0x00000009      // Conditional jump on (E)CX (and flags)\n#define   D_PUSH       0x0000000A      // PUSH exactly 1 (d)word of data\n#define   D_POP        0x0000000B      // POP exactly 1 (d)word of data\n#define   D_CALL       0x0000000C      // Plain near call\n#define   D_CALLFAR    0x0000000D      // Far call\n#define   D_INT        0x0000000E      // Interrupt\n#define   D_RET        0x0000000F      // Plain near return from call\n#define   D_RETFAR     0x00000010      // Far return or IRET\n#define   D_FPU        0x00000011      // FPU command\n#define   D_MMX        0x00000012      // MMX instruction, incl. SSE extensions\n#define   D_3DNOW      0x00000013      // 3DNow! instruction\n#define   D_SSE        0x00000014      // SSE instruction\n#define   D_IO         0x00000015      // Accesses I/O ports\n#define   D_SYS        0x00000016      // Legal but useful in system code only\n#define   D_PRIVILEGED 0x00000017      // Privileged (non-Ring3) command\n#define   D_AVX        0x00000018      // AVX instruction\n#define   D_XOP        0x00000019      // AMD instruction with XOP prefix\n#define   D_DATA       0x0000001C      // Data recognized by Analyser\n#define   D_PSEUDO     0x0000001D      // Pseudocommand, for search models only\n#define   D_PREFIX     0x0000001E      // Standalone prefix\n#define   D_BAD        0x0000001F      // Bad or unrecognized command\n// Additional parts of the command.\n#define D_SIZE01       0x00000020      // Bit 0x01 in last cmd is data size\n#define D_POSTBYTE     0x00000040      // Command continues in postbyte\n// For string commands, either long or short form can be selected.\n#define D_LONGFORM     0x00000080      // Long form of string command\n// Decoding of some commands depends on data or address size.\n#define D_SIZEMASK     0x00000F00      // Mask for data/address size dependence\n#define   D_DATA16     0x00000100      // Requires 16-bit data size\n#define   D_DATA32     0x00000200      // Requires 32-bit data size\n#define   D_ADDR16     0x00000400      // Requires 16-bit address size\n#define   D_ADDR32     0x00000800      // Requires 32-bit address size\n// Prefixes that command may, must or must not possess.\n#define D_MUSTMASK     0x0000F000      // Mask for fixed set of prefixes\n#define   D_NOMUST     0x00000000      // No obligatory prefixes (default)\n#define   D_MUST66     0x00001000      // (SSE,AVX) Requires 66, no F2 or F3\n#define   D_MUSTF2     0x00002000      // (SSE,AVX) Requires F2, no 66 or F3\n#define   D_MUSTF3     0x00003000      // (SSE,AVX) Requires F3, no 66 or F2\n#define   D_MUSTNONE   0x00004000      // (MMX,SSE,AVX) Requires no 66, F2, F3\n#define   D_NEEDF2     0x00005000      // (SSE,AVX) Requires F2, no F3\n#define   D_NEEDF3     0x00006000      // (SSE,AVX) Requires F3, no F2\n#define   D_NOREP      0x00007000      // Must not include F2 or F3\n#define   D_MUSTREP    0x00008000      // Must include F3 (REP)\n#define   D_MUSTREPE   0x00009000      // Must include F3 (REPE)\n#define   D_MUSTREPNE  0x0000A000      // Must include F2 (REPNE)\n#define D_LOCKABLE     0x00010000      // Allows for F0 (LOCK, memory only)\n#define D_BHINT        0x00020000      // Allows for branch hints (2E, 3E)\n// Decoding of some commands with ModRM-SIB depends whether register or memory.\n#define D_MEMORY       0x00040000      // Mod field must indicate memory\n#define D_REGISTER     0x00080000      // Mod field must indicate register\n// Side effects caused by command.\n#define D_FLAGMASK     0x00700000      // Mask to extract modified flags\n#define   D_NOFLAGS    0x00000000      // Flags S,Z,P,O,C remain unchanged\n#define   D_ALLFLAGS   0x00100000      // Modifies flags S,Z,P,O,C\n#define   D_FLAGZ      0x00200000      // Modifies flag Z only\n#define   D_FLAGC      0x00300000      // Modifies flag C only\n#define   D_FLAGSCO    0x00400000      // Modifies flag C and O only\n#define   D_FLAGD      0x00500000      // Modifies flag D only\n#define   D_FLAGSZPC   0x00600000      // Modifies flags Z, P and C only (FPU)\n#define   D_NOCFLAG    0x00700000      // S,Z,P,O modified, C unaffected\n#define D_FPUMASK      0x01800000      // Mask for effects on FPU stack\n#define   D_FPUSAME    0x00000000      // Doesn't rotate FPU stack (default)\n#define   D_FPUPOP     0x00800000      // Pops FPU stack\n#define   D_FPUPOP2    0x01000000      // Pops FPU stack twice\n#define   D_FPUPUSH    0x01800000      // Pushes FPU stack\n#define D_CHGESP       0x02000000      // Command indirectly modifies ESP\n// Command features.\n#define D_HLADIR       0x04000000      // Nonstandard order of operands in HLA\n#define D_WILDCARD     0x08000000      // Mnemonics contains W/D wildcard ('*')\n#define D_COND         0x10000000      // Conditional (action depends on flags)\n#define D_USESCARRY    0x20000000      // Uses Carry flag\n#define D_USEMASK      0xC0000000      // Mask to detect unusual commands\n#define   D_RARE       0x40000000      // Rare or obsolete in Win32 apps\n#define   D_SUSPICIOUS 0x80000000      // Suspicious command\n#define   D_UNDOC      0xC0000000      // Undocumented command\n\n// Extension of D_xxx.\n#define DX_ZEROMASK    0x00000003      // How to decode FLAGS.Z flag\n#define   DX_JE        0x00000001      // JE, JNE instead of JZ, JNZ\n#define   DX_JZ        0x00000002      // JZ, JNZ instead of JE, JNE\n#define DX_CARRYMASK   0x0000000C      // How to decode FLAGS.C flag\n#define   DX_JB        0x00000004      // JAE, JB instead of JC, JNC\n#define   DX_JC        0x00000008      // JC, JNC instead of JAE, JB\n#define DX_RETN        0x00000010      // The mnemonics is RETN\n#define DX_VEX         0x00000100      // Requires VEX prefix\n#define DX_VLMASK      0x00000600      // Mask to extract VEX operand length\n#define   DX_LSHORT    0x00000000      // 128-bit only\n#define   DX_LBOTH     0x00000200      // Both 128- and 256-bit versions\n#define   DX_LLONG     0x00000400      // 256-bit only\n#define   DX_IGNOREL   0x00000600      // Ignore VEX.L\n#define DX_NOVREG      0x00000800      // VEX.vvvv must be set to all 1's\n#define DX_VWMASK      0x00003000      // Mask to extract VEX.W\n#define   DX_W0        0x00001000      // VEX.W must be 0\n#define   DX_W1        0x00002000      // VEX.W must be 1\n#define DX_LEADMASK    0x00070000      // Mask to extract leading opcode bytes\n#define   DX_LEAD0F    0x00000000      // Implied 0F leading byte (default)\n#define   DX_LEAD38    0x00010000      // Implied 0F 38 leading opcode bytes\n#define   DX_LEAD3A    0x00020000      // Implied 0F 3A leading opcode bytes\n#define DX_WONKYTRAP   0x00800000      // Don't single-step this command\n#define DX_TYPEMASK    0xFF000000      // Precised command type mask\n#define   DX_ADD       0x01000000      // The command is integer ADD\n#define   DX_SUB       0x02000000      // The command is integer SUB\n#define   DX_LEA       0x03000000      // The command is LEA\n#define   DX_NOP       0x04000000      // The command is NOP\n\n//#define DX_LVEX        (DX_VEX|DX_LBOTH)\n//#define DX_GVEX        (DX_VEX|DX_LLONG)\n\n// Type of operand, only one is allowed. Size of SSE operands is given for the\n// case of 128-bit operations and usually doubles for 256-bit AVX commands. If\n// B_NOVEXSIZE is set, memory may double but XMM registers are not promoted to\n// YMM.\n#define B_ARGMASK      0x000000FF      // Mask to extract type of argument\n#define   B_NONE       0x00000000      // Operand absent\n#define   B_AL         0x00000001      // Register AL\n#define   B_AH         0x00000002      // Register AH\n#define   B_AX         0x00000003      // Register AX\n#define   B_CL         0x00000004      // Register CL\n#define   B_CX         0x00000005      // Register CX\n#define   B_DX         0x00000006      // Register DX\n#define   B_DXPORT     0x00000007      // Register DX as I/O port address\n#define   B_EAX        0x00000008      // Register EAX\n#define   B_EBX        0x00000009      // Register EBX\n#define   B_ECX        0x0000000A      // Register ECX\n#define   B_EDX        0x0000000B      // Register EDX\n#define   B_ACC        0x0000000C      // Accumulator (AL/AX/EAX)\n#define   B_STRCNT     0x0000000D      // Register CX or ECX as REPxx counter\n#define   B_DXEDX      0x0000000E      // Register DX or EDX in DIV/MUL\n#define   B_BPEBP      0x0000000F      // Register BP or EBP in ENTER/LEAVE\n#define   B_REG        0x00000010      // 8/16/32-bit register in Reg\n#define   B_REG16      0x00000011      // 16-bit register in Reg\n#define   B_REG32      0x00000012      // 32-bit register in Reg\n#define   B_REGCMD     0x00000013      // 16/32-bit register in last cmd byte\n#define   B_REGCMD8    0x00000014      // 8-bit register in last cmd byte\n#define   B_ANYREG     0x00000015      // Reg field is unused, any allowed\n#define   B_INT        0x00000016      // 8/16/32-bit register/memory in ModRM\n#define   B_INT8       0x00000017      // 8-bit register/memory in ModRM\n#define   B_INT16      0x00000018      // 16-bit register/memory in ModRM\n#define   B_INT32      0x00000019      // 32-bit register/memory in ModRM\n#define   B_INT1632    0x0000001A      // 16/32-bit register/memory in ModRM\n#define   B_INT64      0x0000001B      // 64-bit integer in ModRM, memory only\n#define   B_INT128     0x0000001C      // 128-bit integer in ModRM, memory only\n#define   B_IMMINT     0x0000001D      // 8/16/32-bit int at immediate addr\n#define   B_INTPAIR    0x0000001E      // Two signed 16/32 in ModRM, memory only\n#define   B_SEGOFFS    0x0000001F      // 16:16/16:32 absolute address in memory\n#define   B_STRDEST    0x00000020      // 8/16/32-bit string dest, [ES:(E)DI]\n#define   B_STRDEST8   0x00000021      // 8-bit string destination, [ES:(E)DI]\n#define   B_STRSRC     0x00000022      // 8/16/32-bit string source, [(E)SI]\n#define   B_STRSRC8    0x00000023      // 8-bit string source, [(E)SI]\n#define   B_XLATMEM    0x00000024      // 8-bit memory in XLAT, [(E)BX+AL]\n#define   B_EAXMEM     0x00000025      // Reference to memory addressed by [EAX]\n#define   B_LONGDATA   0x00000026      // Long data in ModRM, mem only\n#define   B_ANYMEM     0x00000027      // Reference to memory, data unimportant\n#define   B_STKTOP     0x00000028      // 16/32-bit int top of stack\n#define   B_STKTOPFAR  0x00000029      // Top of stack (16:16/16:32 far addr)\n#define   B_STKTOPEFL  0x0000002A      // 16/32-bit flags on top of stack\n#define   B_STKTOPA    0x0000002B      // 16/32-bit top of stack all registers\n#define   B_PUSH       0x0000002C      // 16/32-bit int push to stack\n#define   B_PUSHRET    0x0000002D      // 16/32-bit push of return address\n#define   B_PUSHRETF   0x0000002E      // 16:16/16:32-bit push of far retaddr\n#define   B_PUSHA      0x0000002F      // 16/32-bit push all registers\n#define   B_EBPMEM     0x00000030      // 16/32-bit int at [EBP]\n#define   B_SEG        0x00000031      // Segment register in Reg\n#define   B_SEGNOCS    0x00000032      // Segment register in Reg, but not CS\n#define   B_SEGCS      0x00000033      // Segment register CS\n#define   B_SEGDS      0x00000034      // Segment register DS\n#define   B_SEGES      0x00000035      // Segment register ES\n#define   B_SEGFS      0x00000036      // Segment register FS\n#define   B_SEGGS      0x00000037      // Segment register GS\n#define   B_SEGSS      0x00000038      // Segment register SS\n#define   B_ST         0x00000039      // 80-bit FPU register in last cmd byte\n#define   B_ST0        0x0000003A      // 80-bit FPU register ST0\n#define   B_ST1        0x0000003B      // 80-bit FPU register ST1\n#define   B_FLOAT32    0x0000003C      // 32-bit float in ModRM, memory only\n#define   B_FLOAT64    0x0000003D      // 64-bit float in ModRM, memory only\n#define   B_FLOAT80    0x0000003E      // 80-bit float in ModRM, memory only\n#define   B_BCD        0x0000003F      // 80-bit BCD in ModRM, memory only\n#define   B_MREG8x8    0x00000040      // MMX register as 8 8-bit integers\n#define   B_MMX8x8     0x00000041      // MMX reg/memory as 8 8-bit integers\n#define   B_MMX8x8DI   0x00000042      // MMX 8 8-bit integers at [DS:(E)DI]\n#define   B_MREG16x4   0x00000043      // MMX register as 4 16-bit integers\n#define   B_MMX16x4    0x00000044      // MMX reg/memory as 4 16-bit integers\n#define   B_MREG32x2   0x00000045      // MMX register as 2 32-bit integers\n#define   B_MMX32x2    0x00000046      // MMX reg/memory as 2 32-bit integers\n#define   B_MREG64     0x00000047      // MMX register as 1 64-bit integer\n#define   B_MMX64      0x00000048      // MMX reg/memory as 1 64-bit integer\n#define   B_3DREG      0x00000049      // 3DNow! register as 2 32-bit floats\n#define   B_3DNOW      0x0000004A      // 3DNow! reg/memory as 2 32-bit floats\n#define   B_XMM0I32x4  0x0000004B      // XMM0 as 4 32-bit integers\n#define   B_XMM0I64x2  0x0000004C      // XMM0 as 2 64-bit integers\n#define   B_XMM0I8x16  0x0000004D      // XMM0 as 16 8-bit integers\n#define   B_SREGF32x4  0x0000004E      // SSE register as 4 32-bit floats\n#define   B_SREGF32L   0x0000004F      // Low 32-bit float in SSE register\n#define   B_SREGF32x2L 0x00000050      // Low 2 32-bit floats in SSE register\n#define   B_SSEF32x4   0x00000051      // SSE reg/memory as 4 32-bit floats\n#define   B_SSEF32L    0x00000052      // Low 32-bit float in SSE reg/memory\n#define   B_SSEF32x2L  0x00000053      // Low 2 32-bit floats in SSE reg/memory\n#define   B_SREGF64x2  0x00000054      // SSE register as 2 64-bit floats\n#define   B_SREGF64L   0x00000055      // Low 64-bit float in SSE register\n#define   B_SSEF64x2   0x00000056      // SSE reg/memory as 2 64-bit floats\n#define   B_SSEF64L    0x00000057      // Low 64-bit float in SSE reg/memory\n#define   B_SREGI8x16  0x00000058      // SSE register as 16 8-bit sigints\n#define   B_SSEI8x16   0x00000059      // SSE reg/memory as 16 8-bit sigints\n#define   B_SSEI8x16DI 0x0000005A      // SSE 16 8-bit sigints at [DS:(E)DI]\n#define   B_SSEI8x8L   0x0000005B      // Low 8 8-bit ints in SSE reg/memory\n#define   B_SSEI8x4L   0x0000005C      // Low 4 8-bit ints in SSE reg/memory\n#define   B_SSEI8x2L   0x0000005D      // Low 2 8-bit ints in SSE reg/memory\n#define   B_SREGI16x8  0x0000005E      // SSE register as 8 16-bit sigints\n#define   B_SSEI16x8   0x0000005F      // SSE reg/memory as 8 16-bit sigints\n#define   B_SSEI16x4L  0x00000060      // Low 4 16-bit ints in SSE reg/memory\n#define   B_SSEI16x2L  0x00000061      // Low 2 16-bit ints in SSE reg/memory\n#define   B_SREGI32x4  0x00000062      // SSE register as 4 32-bit sigints\n#define   B_SREGI32L   0x00000063      // Low 32-bit sigint in SSE register\n#define   B_SREGI32x2L 0x00000064      // Low 2 32-bit sigints in SSE register\n#define   B_SSEI32x4   0x00000065      // SSE reg/memory as 4 32-bit sigints\n#define   B_SSEI32x2L  0x00000066      // Low 2 32-bit sigints in SSE reg/memory\n#define   B_SREGI64x2  0x00000067      // SSE register as 2 64-bit sigints\n#define   B_SSEI64x2   0x00000068      // SSE reg/memory as 2 64-bit sigints\n#define   B_SREGI64L   0x00000069      // Low 64-bit sigint in SSE register\n#define   B_EFL        0x0000006A      // Flags register EFL\n#define   B_FLAGS8     0x0000006B      // Flags (low byte)\n#define   B_OFFSET     0x0000006C      // 16/32 const offset from next command\n#define   B_BYTEOFFS   0x0000006D      // 8-bit sxt const offset from next cmd\n#define   B_FARCONST   0x0000006E      // 16:16/16:32 absolute address constant\n#define   B_DESCR      0x0000006F      // 16:32 descriptor in ModRM\n#define   B_1          0x00000070      // Immediate constant 1\n#define   B_CONST8     0x00000071      // Immediate 8-bit constant\n#define   B_CONST8_2   0x00000072      // Immediate 8-bit const, second in cmd\n#define   B_CONST16    0x00000073      // Immediate 16-bit constant\n#define   B_CONST      0x00000074      // Immediate 8/16/32-bit constant\n#define   B_CONSTL     0x00000075      // Immediate 16/32-bit constant\n#define   B_SXTCONST   0x00000076      // Immediate 8-bit sign-extended to size\n#define   B_CR         0x00000077      // Control register in Reg\n#define   B_CR0        0x00000078      // Control register CR0\n#define   B_DR         0x00000079      // Debug register in Reg\n#define   B_FST        0x0000007A      // FPU status register\n#define   B_FCW        0x0000007B      // FPU control register\n#define   B_MXCSR      0x0000007C      // SSE media control and status register\n#define   B_SVEXF32x4  0x0000007D      // SSE reg in VEX as 4 32-bit floats\n#define   B_SVEXF32L   0x0000007E      // Low 32-bit float in SSE in VEX\n#define   B_SVEXF64x2  0x0000007F      // SSE reg in VEX as 2 64-bit floats\n#define   B_SVEXF64L   0x00000080      // Low 64-bit float in SSE in VEX\n#define   B_SVEXI8x16  0x00000081      // SSE reg in VEX as 16 8-bit sigints\n#define   B_SVEXI16x8  0x00000082      // SSE reg in VEX as 8 16-bit sigints\n#define   B_SVEXI32x4  0x00000083      // SSE reg in VEX as 4 32-bit sigints\n#define   B_SVEXI64x2  0x00000084      // SSE reg in VEX as 2 64-bit sigints\n#define   B_SIMMI8x16  0x00000085      // SSE reg in immediate 8-bit constant\n// Type modifiers, used for interpretation of contents, only one is allowed.\n#define B_MODMASK      0x000F0000      // Mask to extract type modifier\n#define   B_NONSPEC    0x00000000      // Non-specific operand\n#define   B_UNSIGNED   0x00010000      // Decode as unsigned decimal\n#define   B_SIGNED     0x00020000      // Decode as signed decimal\n#define   B_BINARY     0x00030000      // Decode as binary (full hex) data\n#define   B_BITCNT     0x00040000      // Bit count\n#define   B_SHIFTCNT   0x00050000      // Shift count\n#define   B_COUNT      0x00060000      // General-purpose count\n#define   B_NOADDR     0x00070000      // Not an address\n#define   B_JMPCALL    0x00080000      // Near jump/call/return destination\n#define   B_JMPCALLFAR 0x00090000      // Far jump/call/return destination\n#define   B_STACKINC   0x000A0000      // Unsigned stack increment/decrement\n#define   B_PORT       0x000B0000      // I/O port\n#define   B_ADDR       0x000F0000      // Used internally\n// Validity markers.\n#define B_MEMORY       0x00100000      // Memory only, reg version different\n#define B_REGISTER     0x00200000      // Register only, mem version different\n#define B_MEMONLY      0x00400000      // Warn if operand in register\n#define B_REGONLY      0x00800000      // Warn if operand in memory\n#define B_32BITONLY    0x01000000      // Warn if 16-bit operand\n#define B_NOESP        0x02000000      // ESP is not allowed\n// Miscellaneous options.\n#define B_NOVEXSIZE    0x04000000      // Always 128-bit SSE in 256-bit AVX\n#define B_SHOWSIZE     0x08000000      // Always show argument size in disasm\n#define B_CHG          0x10000000      // Changed, old contents is not used\n#define B_UPD          0x20000000      // Modified using old contents\n#define B_PSEUDO       0x40000000      // Pseoudooperand, not in assembler cmd\n#define B_NOSEG        0x80000000      // Don't add offset of selector\n\n// Location of operand, only one bit is allowed.\n#define OP_SOMEREG     0x000000FF      // Mask for any kind of register\n#define   OP_REGISTER  0x00000001      // Operand is a general-purpose register\n#define   OP_SEGREG    0x00000002      // Operand is a segment register\n#define   OP_FPUREG    0x00000004      // Operand is a FPU register\n#define   OP_MMXREG    0x00000008      // Operand is a MMX register\n#define   OP_3DNOWREG  0x00000010      // Operand is a 3DNow! register\n#define   OP_SSEREG    0x00000020      // Operand is a SSE register\n#define   OP_CREG      0x00000040      // Operand is a control register\n#define   OP_DREG      0x00000080      // Operand is a debug register\n#define OP_MEMORY      0x00000100      // Operand is in memory\n#define OP_CONST       0x00000200      // Operand is an immediate constant\n// Additional operand properties.\n#define OP_PORT        0x00000400      // Used to access I/O port\n#define OP_OTHERREG    0x00000800      // Special register like EFL or MXCSR\n#define OP_INVALID     0x00001000      // Invalid operand, like reg in mem-only\n#define OP_PSEUDO      0x00002000      // Pseudooperand (not in mnenonics)\n#define OP_MOD         0x00004000      // Command may change/update operand\n#define OP_MODREG      0x00008000      // Memory, but modifies reg (POP,MOVSD)\n#define OP_IMPORT      0x00020000      // Value imported from different module\n#define OP_SELECTOR    0x00040000      // Includes immediate selector\n// Additional properties of memory address.\n#define OP_INDEXED     0x00080000      // Memory address contains registers\n#define OP_OPCONST     0x00100000      // Memory address contains constant\n#define OP_ADDR16      0x00200000      // 16-bit memory address\n#define OP_ADDR32      0x00400000      // Explicit 32-bit memory address\n\n#define DAMODE_MASM    0               // MASM assembling/disassembling style\n#define DAMODE_IDEAL   1               // IDEAL assembling/disassembling style\n#define DAMODE_HLA     2               // HLA assembling/disassembling style\n#define DAMODE_ATT     3               // AT&T disassembling style\n\n#define NUM_STYLE     0x0003           // Mask to extract hex style\n#define   NUM_STD     0x0000           // 123, 12345678h, 0ABCD1234h\n#define   NUM_X       0x0001           // 123, 0x12345678, 0xABCD1234\n#define   NUM_OLLY    0x0002           // 123., 12345678, 0ABCD1234\n#define NUM_LONG      0x0010           // 00001234h instead of 1234h\n#define NUM_DECIMAL   0x0020           // 123 instead of 7Bh if under DECLIMIT\n\n// Disassembling options.\n#define DA_TEXT        0x00000001      // Decode command to text and comment\n#define   DA_HILITE    0x00000002      // Use syntax highlighting\n#define   DA_JZ        0x00000004      // JZ, JNZ instead of JE, JNE\n#define   DA_JC        0x00000008      // JC, JNC instead of JAE, JB\n#define DA_DUMP        0x00000020      // Dump command to hexadecimal text\n#define DA_PSEUDO      0x00000400      // List pseudooperands\n\n// Disassembling errors.\n#define DAE_NOERR      0x00000000      // No errors\n#define DAE_BADCMD     0x00000001      // Unrecognized command\n#define DAE_CROSS      0x00000002      // Command crosses end of memory block\n#define DAE_MEMORY     0x00000004      // Register where only memory allowed\n#define DAE_REGISTER   0x00000008      // Memory where only register allowed\n#define DAE_LOCK       0x00000010      // LOCK prefix is not allowed\n#define DAE_BADSEG     0x00000020      // Invalid segment register\n#define DAE_SAMEPREF   0x00000040      // Two prefixes from the same group\n#define DAE_MANYPREF   0x00000080      // More than 4 prefixes\n#define DAE_BADCR      0x00000100      // Invalid CR register\n#define DAE_INTERN     0x00000200      // Internal error\n\n// Disassembling warnings.\n#define DAW_NOWARN     0x00000000      // No warnings\n#define DAW_DATASIZE   0x00000001      // Superfluous data size prefix\n#define DAW_ADDRSIZE   0x00000002      // Superfluous address size prefix\n#define DAW_SEGPREFIX  0x00000004      // Superfluous segment override prefix\n#define DAW_REPPREFIX  0x00000008      // Superfluous REPxx prefix\n#define DAW_DEFSEG     0x00000010      // Segment prefix coincides with default\n#define DAW_JMP16      0x00000020      // 16-bit jump, call or return\n#define DAW_FARADDR    0x00000040      // Far jump or call\n#define DAW_SEGMOD     0x00000080      // Modifies segment register\n#define DAW_PRIV       0x00000100      // Privileged command\n#define DAW_IO         0x00000200      // I/O command\n#define DAW_SHIFT      0x00000400      // Shift out of range 1..31\n#define DAW_LOCK       0x00000800      // Command with valid LOCK prefix\n#define DAW_STACK      0x00001000      // Unaligned stack operation\n#define DAW_NOESP      0x00002000      // Suspicious use of stack pointer\n#define DAW_RARE       0x00004000      // Rare, seldom used command\n#define DAW_NONCLASS   0x00008000      // Non-standard or non-documented code\n#define DAW_INTERRUPT  0x00010000      // Interrupt command\n\n// List of prefixes.\n#define PF_SEGMASK     0x0000003F      // Mask for segment override prefixes\n#define   PF_ES        0x00000001      // 0x26, ES segment override\n#define   PF_CS        0x00000002      // 0x2E, CS segment override\n#define   PF_SS        0x00000004      // 0x36, SS segment override\n#define   PF_DS        0x00000008      // 0x3E, DS segment override\n#define   PF_FS        0x00000010      // 0x64, FS segment override\n#define   PF_GS        0x00000020      // 0x65, GS segment override\n#define PF_DSIZE       0x00000040      // 0x66, data size override\n#define PF_ASIZE       0x00000080      // 0x67, address size override\n#define PF_LOCK        0x00000100      // 0xF0, bus lock\n#define PF_REPMASK     0x00000600      // Mask for repeat prefixes\n#define   PF_REPNE     0x00000200      // 0xF2, REPNE prefix\n#define   PF_REP       0x00000400      // 0xF3, REP/REPE prefix\n#define PF_BYTE        0x00000800      // Size bit in command, used in cmdexec\n#define PF_MUSTMASK    D_MUSTMASK      // Necessary prefixes, used in t_asmmod\n#define PF_VEX2        0x00010000      // 2-byte VEX prefix\n#define PF_VEX3        0x00020000      // 3-byte VEX prefix\n// Useful shortcuts.\n#define PF_66          PF_DSIZE        // Alternative names for SSE prefixes\n#define PF_F2          PF_REPNE\n#define PF_F3          PF_REP\n#define PF_HINT        (PF_CS|PF_DS)   // Alternative names for branch hints\n#define   PF_NOTTAKEN  PF_CS\n#define   PF_TAKEN     PF_DS\n#define PF_VEX         (PF_VEX2|PF_VEX3)\n\ntypedef struct t_modrm {               // ModRM byte decoding\n  ulong          size;                 // Total size with SIB and disp, bytes\n  struct t_modrm *psib;                // Pointer to SIB table or NULL\n  ulong          dispsize;             // Size of displacement or 0 if none\n  ulong          features;             // Operand features, set of OP_xxx\n  int            reg;                  // Register index or REG_UNDEF\n  int            defseg;               // Default selector (SEG_xxx)\n  uchar          scale[NREG];          // Scales of registers in memory address\n  ulong          aregs;                // List of registers used in address\n  int            basereg;              // Register used as base or REG_UNDEF\n  tchar          ardec[SHORTNAME];     // Register part of address, INTEL fmt\n  tchar          aratt[SHORTNAME];     // Register part of address, AT&T fmt\n} t_modrm;\n\ntypedef struct t_bincmd {              // Description of 80x86 command\n  tchar          *name;                // Symbolic name for this command\n  ulong          cmdtype;              // Command's features, set of D_xxx\n  ulong          exttype;              // More features, set of DX_xxx\n  ulong          length;               // Length of main code (before ModRM/SIB)\n  ulong          mask;                 // Mask for first 4 bytes of the command\n  ulong          code;                 // Compare masked bytes with this\n  ulong          postbyte;             // Postbyte\n  ulong          arg[NOPERAND];        // Types of arguments, set of B_xxx\n} t_bincmd;\n\ntypedef struct t_chain {               // Element of command chain\n  const t_bincmd *pcmd;                // Pointer to command descriptor or NULL\n  struct t_chain *pnext;               // Pointer to next element in chain\n} t_chain;\n\ntypedef struct t_config {              // Disassembler configuration\n  int            disasmmode;           // Main style, one of DAMODE_xxx\n  int            memmode;              // Constant part of address, NUM_xxx\n  int            jmpmode;              // Jump/call destination, NUM_xxx\n  int            binconstmode;         // Binary constants, NUM_xxx\n  int            constmode;            // Numeric constants, NUM_xxx\n  int            lowercase;            // Force lowercase display\n  int            tabarguments;         // Tab between mnemonic and arguments\n  int            extraspace;           // Extra space between arguments\n  int            useretform;           // Use RET instead of RETN\n  int            shortstringcmds;      // Use short form of string commands\n  int            putdefseg;            // Display default segments in listing\n  int            showmemsize;          // Always show memory size\n  int            shownear;             // Show NEAR modifiers\n  int            ssesizemode;          // How to decode size of SSE operands\n  int            jumphintmode;         // How to decode jump hints\n  int            sizesens;             // How to decode size-sensitive mnemonics\n  int            simplifiedst;         // How to decode top of FPU stack\n  int            hiliteoperands;       // Highlight operands\n} t_config;\n\ntypedef struct t_operand {             // Description of disassembled operand\n  // Description of operand.\n  ulong          features;             // Operand features, set of OP_xxx\n  ulong          arg;                  // Operand type, set of B_xxx\n//  int            optype;               // DEC_INT, DEC_FLOAT or DEC_UNKNOWN\n  int            opsize;               // Total size of data, bytes\n  int            granularity;          // Size of element (opsize exc. MMX/SSE)\n  int            reg;                  // REG_xxx (also ESP in POP) or REG_UNDEF\n  ulong          uses;                 // List of used regs (not in address!)\n  ulong          modifies;             // List of modified regs (not in addr!)\n  // Description of memory address.\n  int            seg;                  // Selector (SEG_xxx)\n  uchar          scale[NREG];          // Scales of registers in memory address\n  ulong          aregs;                // List of registers used in address\n  ulong          opconst;              // Constant or const part of address\n  ulong          selector;             // Immediate selector in far jump/call\n  // Textual decoding.\n  tchar          text[TEXTLEN];        // Operand, decoded to text\n} t_operand;\n\n// Note that used registers are those which contents is necessary to create\n// result. Modified registers are those which value is changed. For example,\n// command MOV EAX,[EBX+ECX] uses EBX and ECX and modifies EAX. Command\n// ADD ESI,EDI uses ESI and EDI and modifies ESI.\ntypedef struct t_disasm {              // Disassembled command\n  ulong          ip;                   // Address of first command byte\n  ulong          size;                 // Full length of command, bytes\n  ulong          cmdtype;              // Type of command, D_xxx\n  ulong          exttype;              // More features, set of DX_xxx\n  ulong          prefixes;             // List of prefixes, set of PF_xxx\n  ulong          nprefix;              // Number of prefixes, including SSE2\n  ulong          memfixup;             // Offset of first 4-byte fixup or -1\n  ulong          immfixup;             // Offset of second 4-byte fixup or -1\n  int            errors;               // Set of DAE_xxx\n  int            warnings;             // Set of DAW_xxx\n  ulong          uses;                 // List of used registers\n  ulong          modifies;             // List of modified registers\n  ulong          memconst;             // Constant in memory address or 0\n  ulong          stackinc;             // Data size in ENTER/RETN/RETF\n  t_operand      op[NOPERAND];         // Operands\n  tchar          dump[TEXTLEN];        // Hex dump of the command\n  tchar          result[TEXTLEN];      // Fully decoded command as text\n  uchar          mask[TEXTLEN];        // Mask to highlight result\n  int            masksize;             // Length of mask corresponding to result\n} t_disasm;\n\nextern t_modrm   modrm16[256];         // 16-bit ModRM decodings\nextern t_modrm   modrm32[256];         // 32-bit ModRM decodings without SIB\nextern t_modrm   sib0[256];            // ModRM-SIB decodings with Mod=00\nextern t_modrm   sib1[256];            // ModRM-SIB decodings with Mod=01\nextern t_modrm   sib2[256];            // ModRM-SIB decodings with Mod=10\n\nextern const t_bincmd bincmd[];        // List of 80x86 commands\nextern t_chain   *cmdchain;            // Commands sorted by first CMDMASK bits\n\nint              Preparedisasm(void);\nvoid             Finishdisasm(void);\n\nulong            Disasm(uchar const *cmd,ulong cmdsize,ulong cmdip,\n                   t_disasm *da,int cmdmode,t_config *cmdconfig,\n                   int (*decodeaddress)(tchar *s,ulong addr));\ntchar            *Geterrwarnmessage(ulong errors,ulong warnings);\n\n"
  },
  {
    "path": "Include/dsound.h",
    "content": "/*==========================================================================;\n *\n *  Copyright (c) Microsoft Corporation.  All rights reserved.\n *\n *  File:       dsound.h\n *  Content:    DirectSound include file\n *\n **************************************************************************/\n\n#define COM_NO_WINDOWS_H\n#include <objbase.h>\n#include <float.h>\n\n#ifndef DIRECTSOUND_VERSION\n#define DIRECTSOUND_VERSION 0x0900  /* Version 9.0 */\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif // __cplusplus\n\n#ifndef __DSOUND_INCLUDED__\n#define __DSOUND_INCLUDED__\n\n/* Type definitions shared with Direct3D */\n\n#ifndef DX_SHARED_DEFINES\n\ntypedef float D3DVALUE, *LPD3DVALUE;\n\n#ifndef D3DCOLOR_DEFINED\ntypedef DWORD D3DCOLOR;\n#define D3DCOLOR_DEFINED\n#endif\n\n#ifndef LPD3DCOLOR_DEFINED\ntypedef DWORD *LPD3DCOLOR;\n#define LPD3DCOLOR_DEFINED\n#endif\n\n#ifndef D3DVECTOR_DEFINED\ntypedef struct _D3DVECTOR {\n    float x;\n    float y;\n    float z;\n} D3DVECTOR;\n#define D3DVECTOR_DEFINED\n#endif\n\n#ifndef LPD3DVECTOR_DEFINED\ntypedef D3DVECTOR *LPD3DVECTOR;\n#define LPD3DVECTOR_DEFINED\n#endif\n\n#define DX_SHARED_DEFINES\n#endif // DX_SHARED_DEFINES\n\n#define _FACDS  0x878   /* DirectSound's facility code */\n#define MAKE_DSHRESULT(code)  MAKE_HRESULT(1, _FACDS, code)\n\n// DirectSound Component GUID {47D4D946-62E8-11CF-93BC-444553540000}\nDEFINE_GUID(CLSID_DirectSound, 0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);\n\n// DirectSound 8.0 Component GUID {3901CC3F-84B5-4FA4-BA35-AA8172B8A09B}\nDEFINE_GUID(CLSID_DirectSound8, 0x3901cc3f, 0x84b5, 0x4fa4, 0xba, 0x35, 0xaa, 0x81, 0x72, 0xb8, 0xa0, 0x9b);\n\n// DirectSound Capture Component GUID {B0210780-89CD-11D0-AF08-00A0C925CD16}\nDEFINE_GUID(CLSID_DirectSoundCapture, 0xb0210780, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16);\n\n// DirectSound 8.0 Capture Component GUID {E4BCAC13-7F99-4908-9A8E-74E3BF24B6E1}\nDEFINE_GUID(CLSID_DirectSoundCapture8, 0xe4bcac13, 0x7f99, 0x4908, 0x9a, 0x8e, 0x74, 0xe3, 0xbf, 0x24, 0xb6, 0xe1);\n\n// DirectSound Full Duplex Component GUID {FEA4300C-7959-4147-B26A-2377B9E7A91D}\nDEFINE_GUID(CLSID_DirectSoundFullDuplex, 0xfea4300c, 0x7959, 0x4147, 0xb2, 0x6a, 0x23, 0x77, 0xb9, 0xe7, 0xa9, 0x1d);\n\n\n// DirectSound default playback device GUID {DEF00000-9C6D-47ED-AAF1-4DDA8F2B5C03}\nDEFINE_GUID(DSDEVID_DefaultPlayback, 0xdef00000, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03);\n\n// DirectSound default capture device GUID {DEF00001-9C6D-47ED-AAF1-4DDA8F2B5C03}\nDEFINE_GUID(DSDEVID_DefaultCapture, 0xdef00001, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03);\n\n// DirectSound default device for voice playback {DEF00002-9C6D-47ED-AAF1-4DDA8F2B5C03}\nDEFINE_GUID(DSDEVID_DefaultVoicePlayback, 0xdef00002, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03);\n\n// DirectSound default device for voice capture {DEF00003-9C6D-47ED-AAF1-4DDA8F2B5C03}\nDEFINE_GUID(DSDEVID_DefaultVoiceCapture, 0xdef00003, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03);\n\n\n//\n// Forward declarations for interfaces.\n// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined\n//\n\n#ifdef __cplusplus\nstruct IDirectSound;\nstruct IDirectSoundBuffer;\nstruct IDirectSound3DListener;\nstruct IDirectSound3DBuffer;\nstruct IDirectSoundCapture;\nstruct IDirectSoundCaptureBuffer;\nstruct IDirectSoundNotify;\n#endif // __cplusplus\n\n\n//\n// DirectSound 8.0 interfaces.\n//\n\n#if DIRECTSOUND_VERSION >= 0x0800\n\n#ifdef __cplusplus\nstruct IDirectSound8;\nstruct IDirectSoundBuffer8;\nstruct IDirectSoundCaptureBuffer8;\nstruct IDirectSoundFXGargle;\nstruct IDirectSoundFXChorus;\nstruct IDirectSoundFXFlanger;\nstruct IDirectSoundFXEcho;\nstruct IDirectSoundFXDistortion;\nstruct IDirectSoundFXCompressor;\nstruct IDirectSoundFXParamEq;\nstruct IDirectSoundFXWavesReverb;\nstruct IDirectSoundFXI3DL2Reverb;\nstruct IDirectSoundCaptureFXAec;\nstruct IDirectSoundCaptureFXNoiseSuppress;\nstruct IDirectSoundFullDuplex;\n#endif // __cplusplus\n\n// IDirectSound8, IDirectSoundBuffer8 and IDirectSoundCaptureBuffer8 are the\n// only DirectSound 7.0 interfaces with changed functionality in version 8.0.\n// The other level 8 interfaces as equivalent to their level 7 counterparts:\n\n#define IDirectSoundCapture8            IDirectSoundCapture\n#define IDirectSound3DListener8         IDirectSound3DListener\n#define IDirectSound3DBuffer8           IDirectSound3DBuffer\n#define IDirectSoundNotify8             IDirectSoundNotify\n#define IDirectSoundFXGargle8           IDirectSoundFXGargle\n#define IDirectSoundFXChorus8           IDirectSoundFXChorus\n#define IDirectSoundFXFlanger8          IDirectSoundFXFlanger\n#define IDirectSoundFXEcho8             IDirectSoundFXEcho\n#define IDirectSoundFXDistortion8       IDirectSoundFXDistortion\n#define IDirectSoundFXCompressor8       IDirectSoundFXCompressor\n#define IDirectSoundFXParamEq8          IDirectSoundFXParamEq\n#define IDirectSoundFXWavesReverb8      IDirectSoundFXWavesReverb\n#define IDirectSoundFXI3DL2Reverb8      IDirectSoundFXI3DL2Reverb\n#define IDirectSoundCaptureFXAec8       IDirectSoundCaptureFXAec\n#define IDirectSoundCaptureFXNoiseSuppress8 IDirectSoundCaptureFXNoiseSuppress\n#define IDirectSoundFullDuplex8         IDirectSoundFullDuplex\n\n#endif // DIRECTSOUND_VERSION >= 0x0800\n\ntypedef struct IDirectSound                 *LPDIRECTSOUND;\ntypedef struct IDirectSoundBuffer           *LPDIRECTSOUNDBUFFER;\ntypedef struct IDirectSound3DListener       *LPDIRECTSOUND3DLISTENER;\ntypedef struct IDirectSound3DBuffer         *LPDIRECTSOUND3DBUFFER;\ntypedef struct IDirectSoundCapture          *LPDIRECTSOUNDCAPTURE;\ntypedef struct IDirectSoundCaptureBuffer    *LPDIRECTSOUNDCAPTUREBUFFER;\ntypedef struct IDirectSoundNotify           *LPDIRECTSOUNDNOTIFY;\n\n\n#if DIRECTSOUND_VERSION >= 0x0800\n\ntypedef struct IDirectSoundFXGargle         *LPDIRECTSOUNDFXGARGLE;\ntypedef struct IDirectSoundFXChorus         *LPDIRECTSOUNDFXCHORUS;\ntypedef struct IDirectSoundFXFlanger        *LPDIRECTSOUNDFXFLANGER;\ntypedef struct IDirectSoundFXEcho           *LPDIRECTSOUNDFXECHO;\ntypedef struct IDirectSoundFXDistortion     *LPDIRECTSOUNDFXDISTORTION;\ntypedef struct IDirectSoundFXCompressor     *LPDIRECTSOUNDFXCOMPRESSOR;\ntypedef struct IDirectSoundFXParamEq        *LPDIRECTSOUNDFXPARAMEQ;\ntypedef struct IDirectSoundFXWavesReverb    *LPDIRECTSOUNDFXWAVESREVERB;\ntypedef struct IDirectSoundFXI3DL2Reverb    *LPDIRECTSOUNDFXI3DL2REVERB;\ntypedef struct IDirectSoundCaptureFXAec     *LPDIRECTSOUNDCAPTUREFXAEC;\ntypedef struct IDirectSoundCaptureFXNoiseSuppress *LPDIRECTSOUNDCAPTUREFXNOISESUPPRESS;\ntypedef struct IDirectSoundFullDuplex       *LPDIRECTSOUNDFULLDUPLEX;\n\ntypedef struct IDirectSound8                *LPDIRECTSOUND8;\ntypedef struct IDirectSoundBuffer8          *LPDIRECTSOUNDBUFFER8;\ntypedef struct IDirectSound3DListener8      *LPDIRECTSOUND3DLISTENER8;\ntypedef struct IDirectSound3DBuffer8        *LPDIRECTSOUND3DBUFFER8;\ntypedef struct IDirectSoundCapture8         *LPDIRECTSOUNDCAPTURE8;\ntypedef struct IDirectSoundCaptureBuffer8   *LPDIRECTSOUNDCAPTUREBUFFER8;\ntypedef struct IDirectSoundNotify8          *LPDIRECTSOUNDNOTIFY8;\ntypedef struct IDirectSoundFXGargle8        *LPDIRECTSOUNDFXGARGLE8;\ntypedef struct IDirectSoundFXChorus8        *LPDIRECTSOUNDFXCHORUS8;\ntypedef struct IDirectSoundFXFlanger8       *LPDIRECTSOUNDFXFLANGER8;\ntypedef struct IDirectSoundFXEcho8          *LPDIRECTSOUNDFXECHO8;\ntypedef struct IDirectSoundFXDistortion8    *LPDIRECTSOUNDFXDISTORTION8;\ntypedef struct IDirectSoundFXCompressor8    *LPDIRECTSOUNDFXCOMPRESSOR8;\ntypedef struct IDirectSoundFXParamEq8       *LPDIRECTSOUNDFXPARAMEQ8;\ntypedef struct IDirectSoundFXWavesReverb8   *LPDIRECTSOUNDFXWAVESREVERB8;\ntypedef struct IDirectSoundFXI3DL2Reverb8   *LPDIRECTSOUNDFXI3DL2REVERB8;\ntypedef struct IDirectSoundCaptureFXAec8    *LPDIRECTSOUNDCAPTUREFXAEC8;\ntypedef struct IDirectSoundCaptureFXNoiseSuppress8 *LPDIRECTSOUNDCAPTUREFXNOISESUPPRESS8;\ntypedef struct IDirectSoundFullDuplex8      *LPDIRECTSOUNDFULLDUPLEX8;\n\n#endif // DIRECTSOUND_VERSION >= 0x0800\n\n//\n// IID definitions for the unchanged DirectSound 8.0 interfaces\n//\n\n#if DIRECTSOUND_VERSION >= 0x0800\n\n#define IID_IDirectSoundCapture8            IID_IDirectSoundCapture\n#define IID_IDirectSound3DListener8         IID_IDirectSound3DListener\n#define IID_IDirectSound3DBuffer8           IID_IDirectSound3DBuffer\n#define IID_IDirectSoundNotify8             IID_IDirectSoundNotify\n#define IID_IDirectSoundFXGargle8           IID_IDirectSoundFXGargle\n#define IID_IDirectSoundFXChorus8           IID_IDirectSoundFXChorus\n#define IID_IDirectSoundFXFlanger8          IID_IDirectSoundFXFlanger\n#define IID_IDirectSoundFXEcho8             IID_IDirectSoundFXEcho\n#define IID_IDirectSoundFXDistortion8       IID_IDirectSoundFXDistortion\n#define IID_IDirectSoundFXCompressor8       IID_IDirectSoundFXCompressor\n#define IID_IDirectSoundFXParamEq8          IID_IDirectSoundFXParamEq\n#define IID_IDirectSoundFXWavesReverb8      IID_IDirectSoundFXWavesReverb\n#define IID_IDirectSoundFXI3DL2Reverb8      IID_IDirectSoundFXI3DL2Reverb\n#define IID_IDirectSoundCaptureFXAec8       IID_IDirectSoundCaptureFXAec\n#define IID_IDirectSoundCaptureFXNoiseSuppress8 IID_IDirectSoundCaptureFXNoiseSuppress\n#define IID_IDirectSoundFullDuplex8         IID_IDirectSoundFullDuplex\n\n#endif // DIRECTSOUND_VERSION >= 0x0800\n\n//\n// Compatibility typedefs\n//\n\n#ifndef _LPCWAVEFORMATEX_DEFINED\n#define _LPCWAVEFORMATEX_DEFINED\ntypedef const WAVEFORMATEX *LPCWAVEFORMATEX;\n#endif // _LPCWAVEFORMATEX_DEFINED\n\n#ifndef __LPCGUID_DEFINED__\n#define __LPCGUID_DEFINED__\ntypedef const GUID *LPCGUID;\n#endif // __LPCGUID_DEFINED__\n\ntypedef LPDIRECTSOUND *LPLPDIRECTSOUND;\ntypedef LPDIRECTSOUNDBUFFER *LPLPDIRECTSOUNDBUFFER;\ntypedef LPDIRECTSOUND3DLISTENER *LPLPDIRECTSOUND3DLISTENER;\ntypedef LPDIRECTSOUND3DBUFFER *LPLPDIRECTSOUND3DBUFFER;\ntypedef LPDIRECTSOUNDCAPTURE *LPLPDIRECTSOUNDCAPTURE;\ntypedef LPDIRECTSOUNDCAPTUREBUFFER *LPLPDIRECTSOUNDCAPTUREBUFFER;\ntypedef LPDIRECTSOUNDNOTIFY *LPLPDIRECTSOUNDNOTIFY;\n\n#if DIRECTSOUND_VERSION >= 0x0800\ntypedef LPDIRECTSOUND8 *LPLPDIRECTSOUND8;\ntypedef LPDIRECTSOUNDBUFFER8 *LPLPDIRECTSOUNDBUFFER8;\ntypedef LPDIRECTSOUNDCAPTURE8 *LPLPDIRECTSOUNDCAPTURE8;\ntypedef LPDIRECTSOUNDCAPTUREBUFFER8 *LPLPDIRECTSOUNDCAPTUREBUFFER8;\n#endif // DIRECTSOUND_VERSION >= 0x0800\n\n//\n// Structures\n//\n\ntypedef struct _DSCAPS\n{\n    DWORD           dwSize;\n    DWORD           dwFlags;\n    DWORD           dwMinSecondarySampleRate;\n    DWORD           dwMaxSecondarySampleRate;\n    DWORD           dwPrimaryBuffers;\n    DWORD           dwMaxHwMixingAllBuffers;\n    DWORD           dwMaxHwMixingStaticBuffers;\n    DWORD           dwMaxHwMixingStreamingBuffers;\n    DWORD           dwFreeHwMixingAllBuffers;\n    DWORD           dwFreeHwMixingStaticBuffers;\n    DWORD           dwFreeHwMixingStreamingBuffers;\n    DWORD           dwMaxHw3DAllBuffers;\n    DWORD           dwMaxHw3DStaticBuffers;\n    DWORD           dwMaxHw3DStreamingBuffers;\n    DWORD           dwFreeHw3DAllBuffers;\n    DWORD           dwFreeHw3DStaticBuffers;\n    DWORD           dwFreeHw3DStreamingBuffers;\n    DWORD           dwTotalHwMemBytes;\n    DWORD           dwFreeHwMemBytes;\n    DWORD           dwMaxContigFreeHwMemBytes;\n    DWORD           dwUnlockTransferRateHwBuffers;\n    DWORD           dwPlayCpuOverheadSwBuffers;\n    DWORD           dwReserved1;\n    DWORD           dwReserved2;\n} DSCAPS, *LPDSCAPS;\n\ntypedef const DSCAPS *LPCDSCAPS;\n\ntypedef struct _DSBCAPS\n{\n    DWORD           dwSize;\n    DWORD           dwFlags;\n    DWORD           dwBufferBytes;\n    DWORD           dwUnlockTransferRate;\n    DWORD           dwPlayCpuOverhead;\n} DSBCAPS, *LPDSBCAPS;\n\ntypedef const DSBCAPS *LPCDSBCAPS;\n\n#if DIRECTSOUND_VERSION >= 0x0800\n\n    typedef struct _DSEFFECTDESC\n    {\n        DWORD       dwSize;\n        DWORD       dwFlags;\n        GUID        guidDSFXClass;\n        DWORD_PTR   dwReserved1;\n        DWORD_PTR   dwReserved2;\n    } DSEFFECTDESC, *LPDSEFFECTDESC;\n    typedef const DSEFFECTDESC *LPCDSEFFECTDESC;\n\n    #define DSFX_LOCHARDWARE    0x00000001\n    #define DSFX_LOCSOFTWARE    0x00000002\n\n    enum\n    {\n        DSFXR_PRESENT,          // 0\n        DSFXR_LOCHARDWARE,      // 1\n        DSFXR_LOCSOFTWARE,      // 2\n        DSFXR_UNALLOCATED,      // 3\n        DSFXR_FAILED,           // 4\n        DSFXR_UNKNOWN,          // 5\n        DSFXR_SENDLOOP          // 6\n    };\n\n    typedef struct _DSCEFFECTDESC\n    {\n        DWORD       dwSize;\n        DWORD       dwFlags;\n        GUID        guidDSCFXClass;\n        GUID        guidDSCFXInstance;\n        DWORD       dwReserved1;\n        DWORD       dwReserved2;\n    } DSCEFFECTDESC, *LPDSCEFFECTDESC;\n    typedef const DSCEFFECTDESC *LPCDSCEFFECTDESC;\n\n    #define DSCFX_LOCHARDWARE   0x00000001\n    #define DSCFX_LOCSOFTWARE   0x00000002\n\n    #define DSCFXR_LOCHARDWARE  0x00000010\n    #define DSCFXR_LOCSOFTWARE  0x00000020\n\n#endif // DIRECTSOUND_VERSION >= 0x0800\n\ntypedef struct _DSBUFFERDESC\n{\n    DWORD           dwSize;\n    DWORD           dwFlags;\n    DWORD           dwBufferBytes;\n    DWORD           dwReserved;\n    LPWAVEFORMATEX  lpwfxFormat;\n#if DIRECTSOUND_VERSION >= 0x0700\n    GUID            guid3DAlgorithm;\n#endif\n} DSBUFFERDESC, *LPDSBUFFERDESC;\n\ntypedef const DSBUFFERDESC *LPCDSBUFFERDESC;\n\n// Older version of this structure:\n\ntypedef struct _DSBUFFERDESC1\n{\n    DWORD           dwSize;\n    DWORD           dwFlags;\n    DWORD           dwBufferBytes;\n    DWORD           dwReserved;\n    LPWAVEFORMATEX  lpwfxFormat;\n} DSBUFFERDESC1, *LPDSBUFFERDESC1;\n\ntypedef const DSBUFFERDESC1 *LPCDSBUFFERDESC1;\n\ntypedef struct _DS3DBUFFER\n{\n    DWORD           dwSize;\n    D3DVECTOR       vPosition;\n    D3DVECTOR       vVelocity;\n    DWORD           dwInsideConeAngle;\n    DWORD           dwOutsideConeAngle;\n    D3DVECTOR       vConeOrientation;\n    LONG            lConeOutsideVolume;\n    D3DVALUE        flMinDistance;\n    D3DVALUE        flMaxDistance;\n    DWORD           dwMode;\n} DS3DBUFFER, *LPDS3DBUFFER;\n\ntypedef const DS3DBUFFER *LPCDS3DBUFFER;\n\ntypedef struct _DS3DLISTENER\n{\n    DWORD           dwSize;\n    D3DVECTOR       vPosition;\n    D3DVECTOR       vVelocity;\n    D3DVECTOR       vOrientFront;\n    D3DVECTOR       vOrientTop;\n    D3DVALUE        flDistanceFactor;\n    D3DVALUE        flRolloffFactor;\n    D3DVALUE        flDopplerFactor;\n} DS3DLISTENER, *LPDS3DLISTENER;\n\ntypedef const DS3DLISTENER *LPCDS3DLISTENER;\n\ntypedef struct _DSCCAPS\n{\n    DWORD           dwSize;\n    DWORD           dwFlags;\n    DWORD           dwFormats;\n    DWORD           dwChannels;\n} DSCCAPS, *LPDSCCAPS;\n\ntypedef const DSCCAPS *LPCDSCCAPS;\n\ntypedef struct _DSCBUFFERDESC1\n{\n    DWORD           dwSize;\n    DWORD           dwFlags;\n    DWORD           dwBufferBytes;\n    DWORD           dwReserved;\n    LPWAVEFORMATEX  lpwfxFormat;\n} DSCBUFFERDESC1, *LPDSCBUFFERDESC1;\n\ntypedef struct _DSCBUFFERDESC\n{\n    DWORD           dwSize;\n    DWORD           dwFlags;\n    DWORD           dwBufferBytes;\n    DWORD           dwReserved;\n    LPWAVEFORMATEX  lpwfxFormat;\n#if DIRECTSOUND_VERSION >= 0x0800\n    DWORD           dwFXCount;\n    LPDSCEFFECTDESC lpDSCFXDesc;\n#endif\n} DSCBUFFERDESC, *LPDSCBUFFERDESC;\n\ntypedef const DSCBUFFERDESC *LPCDSCBUFFERDESC;\n\ntypedef struct _DSCBCAPS\n{\n    DWORD           dwSize;\n    DWORD           dwFlags;\n    DWORD           dwBufferBytes;\n    DWORD           dwReserved;\n} DSCBCAPS, *LPDSCBCAPS;\n\ntypedef const DSCBCAPS *LPCDSCBCAPS;\n\ntypedef struct _DSBPOSITIONNOTIFY\n{\n    DWORD           dwOffset;\n    HANDLE          hEventNotify;\n} DSBPOSITIONNOTIFY, *LPDSBPOSITIONNOTIFY;\n\ntypedef const DSBPOSITIONNOTIFY *LPCDSBPOSITIONNOTIFY;\n\n//\n// DirectSound API\n//\n\ntypedef BOOL (CALLBACK *LPDSENUMCALLBACKA)(LPGUID, LPCSTR, LPCSTR, LPVOID);\ntypedef BOOL (CALLBACK *LPDSENUMCALLBACKW)(LPGUID, LPCWSTR, LPCWSTR, LPVOID);\n\nextern HRESULT WINAPI DirectSoundCreate(LPCGUID pcGuidDevice, LPDIRECTSOUND *ppDS, LPUNKNOWN pUnkOuter);\nextern HRESULT WINAPI DirectSoundEnumerateA(LPDSENUMCALLBACKA pDSEnumCallback, LPVOID pContext);\nextern HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW pDSEnumCallback, LPVOID pContext);\n\nextern HRESULT WINAPI DirectSoundCaptureCreate(LPCGUID pcGuidDevice, LPDIRECTSOUNDCAPTURE *ppDSC, LPUNKNOWN pUnkOuter);\nextern HRESULT WINAPI DirectSoundCaptureEnumerateA(LPDSENUMCALLBACKA pDSEnumCallback, LPVOID pContext);\nextern HRESULT WINAPI DirectSoundCaptureEnumerateW(LPDSENUMCALLBACKW pDSEnumCallback, LPVOID pContext);\n\n#if DIRECTSOUND_VERSION >= 0x0800\nextern HRESULT WINAPI DirectSoundCreate8(LPCGUID pcGuidDevice, LPDIRECTSOUND8 *ppDS8, LPUNKNOWN pUnkOuter);\nextern HRESULT WINAPI DirectSoundCaptureCreate8(LPCGUID pcGuidDevice, LPDIRECTSOUNDCAPTURE8 *ppDSC8, LPUNKNOWN pUnkOuter);\nextern HRESULT WINAPI DirectSoundFullDuplexCreate(LPCGUID pcGuidCaptureDevice, LPCGUID pcGuidRenderDevice,\n        LPCDSCBUFFERDESC pcDSCBufferDesc, LPCDSBUFFERDESC pcDSBufferDesc, HWND hWnd,\n        DWORD dwLevel, LPDIRECTSOUNDFULLDUPLEX* ppDSFD, LPDIRECTSOUNDCAPTUREBUFFER8 *ppDSCBuffer8,\n        LPDIRECTSOUNDBUFFER8 *ppDSBuffer8, LPUNKNOWN pUnkOuter);\n#define DirectSoundFullDuplexCreate8 DirectSoundFullDuplexCreate\n\nextern HRESULT WINAPI GetDeviceID(LPCGUID pGuidSrc, LPGUID pGuidDest);\n#endif // DIRECTSOUND_VERSION >= 0x0800\n\n#ifdef UNICODE\n#define LPDSENUMCALLBACK            LPDSENUMCALLBACKW\n#define DirectSoundEnumerate        DirectSoundEnumerateW\n#define DirectSoundCaptureEnumerate DirectSoundCaptureEnumerateW\n#else // UNICODE\n#define LPDSENUMCALLBACK            LPDSENUMCALLBACKA\n#define DirectSoundEnumerate        DirectSoundEnumerateA\n#define DirectSoundCaptureEnumerate DirectSoundCaptureEnumerateA\n#endif // UNICODE\n\n//\n// IUnknown\n//\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#ifndef IUnknown_QueryInterface\n#define IUnknown_QueryInterface(p,a,b)  (p)->lpVtbl->QueryInterface(p,a,b)\n#endif // IUnknown_QueryInterface\n#ifndef IUnknown_AddRef\n#define IUnknown_AddRef(p)              (p)->lpVtbl->AddRef(p)\n#endif // IUnknown_AddRef\n#ifndef IUnknown_Release\n#define IUnknown_Release(p)             (p)->lpVtbl->Release(p)\n#endif // IUnknown_Release\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#ifndef IUnknown_QueryInterface\n#define IUnknown_QueryInterface(p,a,b)  (p)->QueryInterface(a,b)\n#endif // IUnknown_QueryInterface\n#ifndef IUnknown_AddRef\n#define IUnknown_AddRef(p)              (p)->AddRef()\n#endif // IUnknown_AddRef\n#ifndef IUnknown_Release\n#define IUnknown_Release(p)             (p)->Release()\n#endif // IUnknown_Release\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n#ifndef __IReferenceClock_INTERFACE_DEFINED__\n#define __IReferenceClock_INTERFACE_DEFINED__\n\ntypedef LONGLONG REFERENCE_TIME;\ntypedef REFERENCE_TIME *LPREFERENCE_TIME;\n\nDEFINE_GUID(IID_IReferenceClock, 0x56a86897, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);\n\n#undef INTERFACE\n#define INTERFACE IReferenceClock\n\nDECLARE_INTERFACE_(IReferenceClock, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IReferenceClock methods\n    STDMETHOD(GetTime)              (THIS_ REFERENCE_TIME *pTime) PURE;\n    STDMETHOD(AdviseTime)           (THIS_ REFERENCE_TIME rtBaseTime, REFERENCE_TIME rtStreamTime,\n                                           HANDLE hEvent, LPDWORD pdwAdviseCookie) PURE;\n    STDMETHOD(AdvisePeriodic)       (THIS_ REFERENCE_TIME rtStartTime, REFERENCE_TIME rtPeriodTime,\n                                           HANDLE hSemaphore, LPDWORD pdwAdviseCookie) PURE;\n    STDMETHOD(Unadvise)             (THIS_ DWORD dwAdviseCookie) PURE;\n};\n\n#endif // __IReferenceClock_INTERFACE_DEFINED__\n\n#ifndef IReferenceClock_QueryInterface\n\n#define IReferenceClock_QueryInterface(p,a,b)      IUnknown_QueryInterface(p,a,b)\n#define IReferenceClock_AddRef(p)                  IUnknown_AddRef(p)\n#define IReferenceClock_Release(p)                 IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IReferenceClock_GetTime(p,a)               (p)->lpVtbl->GetTime(p,a)\n#define IReferenceClock_AdviseTime(p,a,b,c,d)      (p)->lpVtbl->AdviseTime(p,a,b,c,d)\n#define IReferenceClock_AdvisePeriodic(p,a,b,c,d)  (p)->lpVtbl->AdvisePeriodic(p,a,b,c,d)\n#define IReferenceClock_Unadvise(p,a)              (p)->lpVtbl->Unadvise(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IReferenceClock_GetTime(p,a)               (p)->GetTime(a)\n#define IReferenceClock_AdviseTime(p,a,b,c,d)      (p)->AdviseTime(a,b,c,d)\n#define IReferenceClock_AdvisePeriodic(p,a,b,c,d)  (p)->AdvisePeriodic(a,b,c,d)\n#define IReferenceClock_Unadvise(p,a)              (p)->Unadvise(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n#endif // IReferenceClock_QueryInterface\n\n//\n// IDirectSound\n//\n\nDEFINE_GUID(IID_IDirectSound, 0x279AFA83, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60);\n\n#undef INTERFACE\n#define INTERFACE IDirectSound\n\nDECLARE_INTERFACE_(IDirectSound, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSound methods\n    STDMETHOD(CreateSoundBuffer)    (THIS_ LPCDSBUFFERDESC pcDSBufferDesc, LPDIRECTSOUNDBUFFER *ppDSBuffer, LPUNKNOWN pUnkOuter) PURE;\n    STDMETHOD(GetCaps)              (THIS_ LPDSCAPS pDSCaps) PURE;\n    STDMETHOD(DuplicateSoundBuffer) (THIS_ LPDIRECTSOUNDBUFFER pDSBufferOriginal, LPDIRECTSOUNDBUFFER *ppDSBufferDuplicate) PURE;\n    STDMETHOD(SetCooperativeLevel)  (THIS_ HWND hwnd, DWORD dwLevel) PURE;\n    STDMETHOD(Compact)              (THIS) PURE;\n    STDMETHOD(GetSpeakerConfig)     (THIS_ LPDWORD pdwSpeakerConfig) PURE;\n    STDMETHOD(SetSpeakerConfig)     (THIS_ DWORD dwSpeakerConfig) PURE;\n    STDMETHOD(Initialize)           (THIS_ LPCGUID pcGuidDevice) PURE;\n};\n\n#define IDirectSound_QueryInterface(p,a,b)       IUnknown_QueryInterface(p,a,b)\n#define IDirectSound_AddRef(p)                   IUnknown_AddRef(p)\n#define IDirectSound_Release(p)                  IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSound_CreateSoundBuffer(p,a,b,c)  (p)->lpVtbl->CreateSoundBuffer(p,a,b,c)\n#define IDirectSound_GetCaps(p,a)                (p)->lpVtbl->GetCaps(p,a)\n#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b)\n#define IDirectSound_SetCooperativeLevel(p,a,b)  (p)->lpVtbl->SetCooperativeLevel(p,a,b)\n#define IDirectSound_Compact(p)                  (p)->lpVtbl->Compact(p)\n#define IDirectSound_GetSpeakerConfig(p,a)       (p)->lpVtbl->GetSpeakerConfig(p,a)\n#define IDirectSound_SetSpeakerConfig(p,b)       (p)->lpVtbl->SetSpeakerConfig(p,b)\n#define IDirectSound_Initialize(p,a)             (p)->lpVtbl->Initialize(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSound_CreateSoundBuffer(p,a,b,c)  (p)->CreateSoundBuffer(a,b,c)\n#define IDirectSound_GetCaps(p,a)                (p)->GetCaps(a)\n#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b)\n#define IDirectSound_SetCooperativeLevel(p,a,b)  (p)->SetCooperativeLevel(a,b)\n#define IDirectSound_Compact(p)                  (p)->Compact()\n#define IDirectSound_GetSpeakerConfig(p,a)       (p)->GetSpeakerConfig(a)\n#define IDirectSound_SetSpeakerConfig(p,b)       (p)->SetSpeakerConfig(b)\n#define IDirectSound_Initialize(p,a)             (p)->Initialize(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n#if DIRECTSOUND_VERSION >= 0x0800\n\n//\n// IDirectSound8\n//\n\nDEFINE_GUID(IID_IDirectSound8, 0xC50A7E93, 0xF395, 0x4834, 0x9E, 0xF6, 0x7F, 0xA9, 0x9D, 0xE5, 0x09, 0x66);\n\n#undef INTERFACE\n#define INTERFACE IDirectSound8\n\nDECLARE_INTERFACE_(IDirectSound8, IDirectSound)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSound methods\n    STDMETHOD(CreateSoundBuffer)    (THIS_ LPCDSBUFFERDESC pcDSBufferDesc, LPDIRECTSOUNDBUFFER *ppDSBuffer, LPUNKNOWN pUnkOuter) PURE;\n    STDMETHOD(GetCaps)              (THIS_ LPDSCAPS pDSCaps) PURE;\n    STDMETHOD(DuplicateSoundBuffer) (THIS_ LPDIRECTSOUNDBUFFER pDSBufferOriginal, LPDIRECTSOUNDBUFFER *ppDSBufferDuplicate) PURE;\n    STDMETHOD(SetCooperativeLevel)  (THIS_ HWND hwnd, DWORD dwLevel) PURE;\n    STDMETHOD(Compact)              (THIS) PURE;\n    STDMETHOD(GetSpeakerConfig)     (THIS_ LPDWORD pdwSpeakerConfig) PURE;\n    STDMETHOD(SetSpeakerConfig)     (THIS_ DWORD dwSpeakerConfig) PURE;\n    STDMETHOD(Initialize)           (THIS_ LPCGUID pcGuidDevice) PURE;\n\n    // IDirectSound8 methods\n    STDMETHOD(VerifyCertification)  (THIS_ LPDWORD pdwCertified) PURE;\n};\n\n#define IDirectSound8_QueryInterface(p,a,b)       IDirectSound_QueryInterface(p,a,b)\n#define IDirectSound8_AddRef(p)                   IDirectSound_AddRef(p)\n#define IDirectSound8_Release(p)                  IDirectSound_Release(p)\n#define IDirectSound8_CreateSoundBuffer(p,a,b,c)  IDirectSound_CreateSoundBuffer(p,a,b,c)\n#define IDirectSound8_GetCaps(p,a)                IDirectSound_GetCaps(p,a)\n#define IDirectSound8_DuplicateSoundBuffer(p,a,b) IDirectSound_DuplicateSoundBuffer(p,a,b)\n#define IDirectSound8_SetCooperativeLevel(p,a,b)  IDirectSound_SetCooperativeLevel(p,a,b)\n#define IDirectSound8_Compact(p)                  IDirectSound_Compact(p)\n#define IDirectSound8_GetSpeakerConfig(p,a)       IDirectSound_GetSpeakerConfig(p,a)\n#define IDirectSound8_SetSpeakerConfig(p,a)       IDirectSound_SetSpeakerConfig(p,a)\n#define IDirectSound8_Initialize(p,a)             IDirectSound_Initialize(p,a)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSound8_VerifyCertification(p,a)           (p)->lpVtbl->VerifyCertification(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSound8_VerifyCertification(p,a)           (p)->VerifyCertification(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n#endif // DIRECTSOUND_VERSION >= 0x0800\n\n//\n// IDirectSoundBuffer\n//\n\nDEFINE_GUID(IID_IDirectSoundBuffer, 0x279AFA85, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60);\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundBuffer\n\nDECLARE_INTERFACE_(IDirectSoundBuffer, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundBuffer methods\n    STDMETHOD(GetCaps)              (THIS_ LPDSBCAPS pDSBufferCaps) PURE;\n    STDMETHOD(GetCurrentPosition)   (THIS_ LPDWORD pdwCurrentPlayCursor, LPDWORD pdwCurrentWriteCursor) PURE;\n    STDMETHOD(GetFormat)            (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE;\n    STDMETHOD(GetVolume)            (THIS_ LPLONG plVolume) PURE;\n    STDMETHOD(GetPan)               (THIS_ LPLONG plPan) PURE;\n    STDMETHOD(GetFrequency)         (THIS_ LPDWORD pdwFrequency) PURE;\n    STDMETHOD(GetStatus)            (THIS_ LPDWORD pdwStatus) PURE;\n    STDMETHOD(Initialize)           (THIS_ LPDIRECTSOUND pDirectSound, LPCDSBUFFERDESC pcDSBufferDesc) PURE;\n    STDMETHOD(Lock)                 (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1,\n                                           LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE;\n    STDMETHOD(Play)                 (THIS_ DWORD dwReserved1, DWORD dwPriority, DWORD dwFlags) PURE;\n    STDMETHOD(SetCurrentPosition)   (THIS_ DWORD dwNewPosition) PURE;\n    STDMETHOD(SetFormat)            (THIS_ LPCWAVEFORMATEX pcfxFormat) PURE;\n    STDMETHOD(SetVolume)            (THIS_ LONG lVolume) PURE;\n    STDMETHOD(SetPan)               (THIS_ LONG lPan) PURE;\n    STDMETHOD(SetFrequency)         (THIS_ DWORD dwFrequency) PURE;\n    STDMETHOD(Stop)                 (THIS) PURE;\n    STDMETHOD(Unlock)               (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE;\n    STDMETHOD(Restore)              (THIS) PURE;\n};\n\n#define IDirectSoundBuffer_QueryInterface(p,a,b)        IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundBuffer_AddRef(p)                    IUnknown_AddRef(p)\n#define IDirectSoundBuffer_Release(p)                   IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundBuffer_GetCaps(p,a)                 (p)->lpVtbl->GetCaps(p,a)\n#define IDirectSoundBuffer_GetCurrentPosition(p,a,b)    (p)->lpVtbl->GetCurrentPosition(p,a,b)\n#define IDirectSoundBuffer_GetFormat(p,a,b,c)           (p)->lpVtbl->GetFormat(p,a,b,c)\n#define IDirectSoundBuffer_GetVolume(p,a)               (p)->lpVtbl->GetVolume(p,a)\n#define IDirectSoundBuffer_GetPan(p,a)                  (p)->lpVtbl->GetPan(p,a)\n#define IDirectSoundBuffer_GetFrequency(p,a)            (p)->lpVtbl->GetFrequency(p,a)\n#define IDirectSoundBuffer_GetStatus(p,a)               (p)->lpVtbl->GetStatus(p,a)\n#define IDirectSoundBuffer_Initialize(p,a,b)            (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g)        (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)\n#define IDirectSoundBuffer_Play(p,a,b,c)                (p)->lpVtbl->Play(p,a,b,c)\n#define IDirectSoundBuffer_SetCurrentPosition(p,a)      (p)->lpVtbl->SetCurrentPosition(p,a)\n#define IDirectSoundBuffer_SetFormat(p,a)               (p)->lpVtbl->SetFormat(p,a)\n#define IDirectSoundBuffer_SetVolume(p,a)               (p)->lpVtbl->SetVolume(p,a)\n#define IDirectSoundBuffer_SetPan(p,a)                  (p)->lpVtbl->SetPan(p,a)\n#define IDirectSoundBuffer_SetFrequency(p,a)            (p)->lpVtbl->SetFrequency(p,a)\n#define IDirectSoundBuffer_Stop(p)                      (p)->lpVtbl->Stop(p)\n#define IDirectSoundBuffer_Unlock(p,a,b,c,d)            (p)->lpVtbl->Unlock(p,a,b,c,d)\n#define IDirectSoundBuffer_Restore(p)                   (p)->lpVtbl->Restore(p)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundBuffer_GetCaps(p,a)                 (p)->GetCaps(a)\n#define IDirectSoundBuffer_GetCurrentPosition(p,a,b)    (p)->GetCurrentPosition(a,b)\n#define IDirectSoundBuffer_GetFormat(p,a,b,c)           (p)->GetFormat(a,b,c)\n#define IDirectSoundBuffer_GetVolume(p,a)               (p)->GetVolume(a)\n#define IDirectSoundBuffer_GetPan(p,a)                  (p)->GetPan(a)\n#define IDirectSoundBuffer_GetFrequency(p,a)            (p)->GetFrequency(a)\n#define IDirectSoundBuffer_GetStatus(p,a)               (p)->GetStatus(a)\n#define IDirectSoundBuffer_Initialize(p,a,b)            (p)->Initialize(a,b)\n#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g)        (p)->Lock(a,b,c,d,e,f,g)\n#define IDirectSoundBuffer_Play(p,a,b,c)                (p)->Play(a,b,c)\n#define IDirectSoundBuffer_SetCurrentPosition(p,a)      (p)->SetCurrentPosition(a)\n#define IDirectSoundBuffer_SetFormat(p,a)               (p)->SetFormat(a)\n#define IDirectSoundBuffer_SetVolume(p,a)               (p)->SetVolume(a)\n#define IDirectSoundBuffer_SetPan(p,a)                  (p)->SetPan(a)\n#define IDirectSoundBuffer_SetFrequency(p,a)            (p)->SetFrequency(a)\n#define IDirectSoundBuffer_Stop(p)                      (p)->Stop()\n#define IDirectSoundBuffer_Unlock(p,a,b,c,d)            (p)->Unlock(a,b,c,d)\n#define IDirectSoundBuffer_Restore(p)                   (p)->Restore()\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n#if DIRECTSOUND_VERSION >= 0x0800\n\n//\n// IDirectSoundBuffer8\n//\n\nDEFINE_GUID(IID_IDirectSoundBuffer8, 0x6825a449, 0x7524, 0x4d82, 0x92, 0x0f, 0x50, 0xe3, 0x6a, 0xb3, 0xab, 0x1e);\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundBuffer8\n\nDECLARE_INTERFACE_(IDirectSoundBuffer8, IDirectSoundBuffer)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundBuffer methods\n    STDMETHOD(GetCaps)              (THIS_ LPDSBCAPS pDSBufferCaps) PURE;\n    STDMETHOD(GetCurrentPosition)   (THIS_ LPDWORD pdwCurrentPlayCursor, LPDWORD pdwCurrentWriteCursor) PURE;\n    STDMETHOD(GetFormat)            (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE;\n    STDMETHOD(GetVolume)            (THIS_ LPLONG plVolume) PURE;\n    STDMETHOD(GetPan)               (THIS_ LPLONG plPan) PURE;\n    STDMETHOD(GetFrequency)         (THIS_ LPDWORD pdwFrequency) PURE;\n    STDMETHOD(GetStatus)            (THIS_ LPDWORD pdwStatus) PURE;\n    STDMETHOD(Initialize)           (THIS_ LPDIRECTSOUND pDirectSound, LPCDSBUFFERDESC pcDSBufferDesc) PURE;\n    STDMETHOD(Lock)                 (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1,\n                                           LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE;\n    STDMETHOD(Play)                 (THIS_ DWORD dwReserved1, DWORD dwPriority, DWORD dwFlags) PURE;\n    STDMETHOD(SetCurrentPosition)   (THIS_ DWORD dwNewPosition) PURE;\n    STDMETHOD(SetFormat)            (THIS_ LPCWAVEFORMATEX pcfxFormat) PURE;\n    STDMETHOD(SetVolume)            (THIS_ LONG lVolume) PURE;\n    STDMETHOD(SetPan)               (THIS_ LONG lPan) PURE;\n    STDMETHOD(SetFrequency)         (THIS_ DWORD dwFrequency) PURE;\n    STDMETHOD(Stop)                 (THIS) PURE;\n    STDMETHOD(Unlock)               (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE;\n    STDMETHOD(Restore)              (THIS) PURE;\n\n    // IDirectSoundBuffer8 methods\n    STDMETHOD(SetFX)                (THIS_ DWORD dwEffectsCount, LPDSEFFECTDESC pDSFXDesc, LPDWORD pdwResultCodes) PURE;\n    STDMETHOD(AcquireResources)     (THIS_ DWORD dwFlags, DWORD dwEffectsCount, LPDWORD pdwResultCodes) PURE;\n    STDMETHOD(GetObjectInPath)      (THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE;\n};\n\n// Special GUID meaning \"select all objects\" for use in GetObjectInPath()\nDEFINE_GUID(GUID_All_Objects, 0xaa114de5, 0xc262, 0x4169, 0xa1, 0xc8, 0x23, 0xd6, 0x98, 0xcc, 0x73, 0xb5);\n\n#define IDirectSoundBuffer8_QueryInterface(p,a,b)           IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundBuffer8_AddRef(p)                       IUnknown_AddRef(p)\n#define IDirectSoundBuffer8_Release(p)                      IUnknown_Release(p)\n\n#define IDirectSoundBuffer8_GetCaps(p,a)                    IDirectSoundBuffer_GetCaps(p,a)\n#define IDirectSoundBuffer8_GetCurrentPosition(p,a,b)       IDirectSoundBuffer_GetCurrentPosition(p,a,b)\n#define IDirectSoundBuffer8_GetFormat(p,a,b,c)              IDirectSoundBuffer_GetFormat(p,a,b,c)\n#define IDirectSoundBuffer8_GetVolume(p,a)                  IDirectSoundBuffer_GetVolume(p,a)\n#define IDirectSoundBuffer8_GetPan(p,a)                     IDirectSoundBuffer_GetPan(p,a)\n#define IDirectSoundBuffer8_GetFrequency(p,a)               IDirectSoundBuffer_GetFrequency(p,a)\n#define IDirectSoundBuffer8_GetStatus(p,a)                  IDirectSoundBuffer_GetStatus(p,a)\n#define IDirectSoundBuffer8_Initialize(p,a,b)               IDirectSoundBuffer_Initialize(p,a,b)\n#define IDirectSoundBuffer8_Lock(p,a,b,c,d,e,f,g)           IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g)\n#define IDirectSoundBuffer8_Play(p,a,b,c)                   IDirectSoundBuffer_Play(p,a,b,c)\n#define IDirectSoundBuffer8_SetCurrentPosition(p,a)         IDirectSoundBuffer_SetCurrentPosition(p,a)\n#define IDirectSoundBuffer8_SetFormat(p,a)                  IDirectSoundBuffer_SetFormat(p,a)\n#define IDirectSoundBuffer8_SetVolume(p,a)                  IDirectSoundBuffer_SetVolume(p,a)\n#define IDirectSoundBuffer8_SetPan(p,a)                     IDirectSoundBuffer_SetPan(p,a)\n#define IDirectSoundBuffer8_SetFrequency(p,a)               IDirectSoundBuffer_SetFrequency(p,a)\n#define IDirectSoundBuffer8_Stop(p)                         IDirectSoundBuffer_Stop(p)\n#define IDirectSoundBuffer8_Unlock(p,a,b,c,d)               IDirectSoundBuffer_Unlock(p,a,b,c,d)\n#define IDirectSoundBuffer8_Restore(p)                      IDirectSoundBuffer_Restore(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundBuffer8_SetFX(p,a,b,c)                  (p)->lpVtbl->SetFX(p,a,b,c)\n#define IDirectSoundBuffer8_AcquireResources(p,a,b,c)       (p)->lpVtbl->AcquireResources(p,a,b,c)\n#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d)      (p)->lpVtbl->GetObjectInPath(p,a,b,c,d)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundBuffer8_SetFX(p,a,b,c)                  (p)->SetFX(a,b,c)\n#define IDirectSoundBuffer8_AcquireResources(p,a,b,c)       (p)->AcquireResources(a,b,c)\n#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d)      (p)->GetObjectInPath(a,b,c,d)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n#endif // DIRECTSOUND_VERSION >= 0x0800\n\n//\n// IDirectSound3DListener\n//\n\nDEFINE_GUID(IID_IDirectSound3DListener, 0x279AFA84, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60);\n\n#undef INTERFACE\n#define INTERFACE IDirectSound3DListener\n\nDECLARE_INTERFACE_(IDirectSound3DListener, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)           (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)            (THIS) PURE;\n    STDMETHOD_(ULONG,Release)           (THIS) PURE;\n\n    // IDirectSound3DListener methods\n    STDMETHOD(GetAllParameters)         (THIS_ LPDS3DLISTENER pListener) PURE;\n    STDMETHOD(GetDistanceFactor)        (THIS_ D3DVALUE* pflDistanceFactor) PURE;\n    STDMETHOD(GetDopplerFactor)         (THIS_ D3DVALUE* pflDopplerFactor) PURE;\n    STDMETHOD(GetOrientation)           (THIS_ D3DVECTOR* pvOrientFront, D3DVECTOR* pvOrientTop) PURE;\n    STDMETHOD(GetPosition)              (THIS_ D3DVECTOR* pvPosition) PURE;\n    STDMETHOD(GetRolloffFactor)         (THIS_ D3DVALUE* pflRolloffFactor) PURE;\n    STDMETHOD(GetVelocity)              (THIS_ D3DVECTOR* pvVelocity) PURE;\n    STDMETHOD(SetAllParameters)         (THIS_ LPCDS3DLISTENER pcListener, DWORD dwApply) PURE;\n    STDMETHOD(SetDistanceFactor)        (THIS_ D3DVALUE flDistanceFactor, DWORD dwApply) PURE;\n    STDMETHOD(SetDopplerFactor)         (THIS_ D3DVALUE flDopplerFactor, DWORD dwApply) PURE;\n    STDMETHOD(SetOrientation)           (THIS_ D3DVALUE xFront, D3DVALUE yFront, D3DVALUE zFront,\n                                               D3DVALUE xTop, D3DVALUE yTop, D3DVALUE zTop, DWORD dwApply) PURE;\n    STDMETHOD(SetPosition)              (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;\n    STDMETHOD(SetRolloffFactor)         (THIS_ D3DVALUE flRolloffFactor, DWORD dwApply) PURE;\n    STDMETHOD(SetVelocity)              (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;\n    STDMETHOD(CommitDeferredSettings)   (THIS) PURE;\n};\n\n#define IDirectSound3DListener_QueryInterface(p,a,b)            IUnknown_QueryInterface(p,a,b)\n#define IDirectSound3DListener_AddRef(p)                        IUnknown_AddRef(p)\n#define IDirectSound3DListener_Release(p)                       IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSound3DListener_GetAllParameters(p,a)            (p)->lpVtbl->GetAllParameters(p,a)\n#define IDirectSound3DListener_GetDistanceFactor(p,a)           (p)->lpVtbl->GetDistanceFactor(p,a)\n#define IDirectSound3DListener_GetDopplerFactor(p,a)            (p)->lpVtbl->GetDopplerFactor(p,a)\n#define IDirectSound3DListener_GetOrientation(p,a,b)            (p)->lpVtbl->GetOrientation(p,a,b)\n#define IDirectSound3DListener_GetPosition(p,a)                 (p)->lpVtbl->GetPosition(p,a)\n#define IDirectSound3DListener_GetRolloffFactor(p,a)            (p)->lpVtbl->GetRolloffFactor(p,a)\n#define IDirectSound3DListener_GetVelocity(p,a)                 (p)->lpVtbl->GetVelocity(p,a)\n#define IDirectSound3DListener_SetAllParameters(p,a,b)          (p)->lpVtbl->SetAllParameters(p,a,b)\n#define IDirectSound3DListener_SetDistanceFactor(p,a,b)         (p)->lpVtbl->SetDistanceFactor(p,a,b)\n#define IDirectSound3DListener_SetDopplerFactor(p,a,b)          (p)->lpVtbl->SetDopplerFactor(p,a,b)\n#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g)  (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g)\n#define IDirectSound3DListener_SetPosition(p,a,b,c,d)           (p)->lpVtbl->SetPosition(p,a,b,c,d)\n#define IDirectSound3DListener_SetRolloffFactor(p,a,b)          (p)->lpVtbl->SetRolloffFactor(p,a,b)\n#define IDirectSound3DListener_SetVelocity(p,a,b,c,d)           (p)->lpVtbl->SetVelocity(p,a,b,c,d)\n#define IDirectSound3DListener_CommitDeferredSettings(p)        (p)->lpVtbl->CommitDeferredSettings(p)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSound3DListener_GetAllParameters(p,a)            (p)->GetAllParameters(a)\n#define IDirectSound3DListener_GetDistanceFactor(p,a)           (p)->GetDistanceFactor(a)\n#define IDirectSound3DListener_GetDopplerFactor(p,a)            (p)->GetDopplerFactor(a)\n#define IDirectSound3DListener_GetOrientation(p,a,b)            (p)->GetOrientation(a,b)\n#define IDirectSound3DListener_GetPosition(p,a)                 (p)->GetPosition(a)\n#define IDirectSound3DListener_GetRolloffFactor(p,a)            (p)->GetRolloffFactor(a)\n#define IDirectSound3DListener_GetVelocity(p,a)                 (p)->GetVelocity(a)\n#define IDirectSound3DListener_SetAllParameters(p,a,b)          (p)->SetAllParameters(a,b)\n#define IDirectSound3DListener_SetDistanceFactor(p,a,b)         (p)->SetDistanceFactor(a,b)\n#define IDirectSound3DListener_SetDopplerFactor(p,a,b)          (p)->SetDopplerFactor(a,b)\n#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g)  (p)->SetOrientation(a,b,c,d,e,f,g)\n#define IDirectSound3DListener_SetPosition(p,a,b,c,d)           (p)->SetPosition(a,b,c,d)\n#define IDirectSound3DListener_SetRolloffFactor(p,a,b)          (p)->SetRolloffFactor(a,b)\n#define IDirectSound3DListener_SetVelocity(p,a,b,c,d)           (p)->SetVelocity(a,b,c,d)\n#define IDirectSound3DListener_CommitDeferredSettings(p)        (p)->CommitDeferredSettings()\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSound3DBuffer\n//\n\nDEFINE_GUID(IID_IDirectSound3DBuffer, 0x279AFA86, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60);\n\n#undef INTERFACE\n#define INTERFACE IDirectSound3DBuffer\n\nDECLARE_INTERFACE_(IDirectSound3DBuffer, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSound3DBuffer methods\n    STDMETHOD(GetAllParameters)     (THIS_ LPDS3DBUFFER pDs3dBuffer) PURE;\n    STDMETHOD(GetConeAngles)        (THIS_ LPDWORD pdwInsideConeAngle, LPDWORD pdwOutsideConeAngle) PURE;\n    STDMETHOD(GetConeOrientation)   (THIS_ D3DVECTOR* pvOrientation) PURE;\n    STDMETHOD(GetConeOutsideVolume) (THIS_ LPLONG plConeOutsideVolume) PURE;\n    STDMETHOD(GetMaxDistance)       (THIS_ D3DVALUE* pflMaxDistance) PURE;\n    STDMETHOD(GetMinDistance)       (THIS_ D3DVALUE* pflMinDistance) PURE;\n    STDMETHOD(GetMode)              (THIS_ LPDWORD pdwMode) PURE;\n    STDMETHOD(GetPosition)          (THIS_ D3DVECTOR* pvPosition) PURE;\n    STDMETHOD(GetVelocity)          (THIS_ D3DVECTOR* pvVelocity) PURE;\n    STDMETHOD(SetAllParameters)     (THIS_ LPCDS3DBUFFER pcDs3dBuffer, DWORD dwApply) PURE;\n    STDMETHOD(SetConeAngles)        (THIS_ DWORD dwInsideConeAngle, DWORD dwOutsideConeAngle, DWORD dwApply) PURE;\n    STDMETHOD(SetConeOrientation)   (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;\n    STDMETHOD(SetConeOutsideVolume) (THIS_ LONG lConeOutsideVolume, DWORD dwApply) PURE;\n    STDMETHOD(SetMaxDistance)       (THIS_ D3DVALUE flMaxDistance, DWORD dwApply) PURE;\n    STDMETHOD(SetMinDistance)       (THIS_ D3DVALUE flMinDistance, DWORD dwApply) PURE;\n    STDMETHOD(SetMode)              (THIS_ DWORD dwMode, DWORD dwApply) PURE;\n    STDMETHOD(SetPosition)          (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;\n    STDMETHOD(SetVelocity)          (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;\n};\n\n#define IDirectSound3DBuffer_QueryInterface(p,a,b)          IUnknown_QueryInterface(p,a,b)\n#define IDirectSound3DBuffer_AddRef(p)                      IUnknown_AddRef(p)\n#define IDirectSound3DBuffer_Release(p)                     IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSound3DBuffer_GetAllParameters(p,a)          (p)->lpVtbl->GetAllParameters(p,a)\n#define IDirectSound3DBuffer_GetConeAngles(p,a,b)           (p)->lpVtbl->GetConeAngles(p,a,b)\n#define IDirectSound3DBuffer_GetConeOrientation(p,a)        (p)->lpVtbl->GetConeOrientation(p,a)\n#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a)      (p)->lpVtbl->GetConeOutsideVolume(p,a)\n#define IDirectSound3DBuffer_GetPosition(p,a)               (p)->lpVtbl->GetPosition(p,a)\n#define IDirectSound3DBuffer_GetMinDistance(p,a)            (p)->lpVtbl->GetMinDistance(p,a)\n#define IDirectSound3DBuffer_GetMaxDistance(p,a)            (p)->lpVtbl->GetMaxDistance(p,a)\n#define IDirectSound3DBuffer_GetMode(p,a)                   (p)->lpVtbl->GetMode(p,a)\n#define IDirectSound3DBuffer_GetVelocity(p,a)               (p)->lpVtbl->GetVelocity(p,a)\n#define IDirectSound3DBuffer_SetAllParameters(p,a,b)        (p)->lpVtbl->SetAllParameters(p,a,b)\n#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c)         (p)->lpVtbl->SetConeAngles(p,a,b,c)\n#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d)  (p)->lpVtbl->SetConeOrientation(p,a,b,c,d)\n#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b)    (p)->lpVtbl->SetConeOutsideVolume(p,a,b)\n#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d)         (p)->lpVtbl->SetPosition(p,a,b,c,d)\n#define IDirectSound3DBuffer_SetMinDistance(p,a,b)          (p)->lpVtbl->SetMinDistance(p,a,b)\n#define IDirectSound3DBuffer_SetMaxDistance(p,a,b)          (p)->lpVtbl->SetMaxDistance(p,a,b)\n#define IDirectSound3DBuffer_SetMode(p,a,b)                 (p)->lpVtbl->SetMode(p,a,b)\n#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d)         (p)->lpVtbl->SetVelocity(p,a,b,c,d)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSound3DBuffer_GetAllParameters(p,a)          (p)->GetAllParameters(a)\n#define IDirectSound3DBuffer_GetConeAngles(p,a,b)           (p)->GetConeAngles(a,b)\n#define IDirectSound3DBuffer_GetConeOrientation(p,a)        (p)->GetConeOrientation(a)\n#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a)      (p)->GetConeOutsideVolume(a)\n#define IDirectSound3DBuffer_GetPosition(p,a)               (p)->GetPosition(a)\n#define IDirectSound3DBuffer_GetMinDistance(p,a)            (p)->GetMinDistance(a)\n#define IDirectSound3DBuffer_GetMaxDistance(p,a)            (p)->GetMaxDistance(a)\n#define IDirectSound3DBuffer_GetMode(p,a)                   (p)->GetMode(a)\n#define IDirectSound3DBuffer_GetVelocity(p,a)               (p)->GetVelocity(a)\n#define IDirectSound3DBuffer_SetAllParameters(p,a,b)        (p)->SetAllParameters(a,b)\n#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c)         (p)->SetConeAngles(a,b,c)\n#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d)  (p)->SetConeOrientation(a,b,c,d)\n#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b)    (p)->SetConeOutsideVolume(a,b)\n#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d)         (p)->SetPosition(a,b,c,d)\n#define IDirectSound3DBuffer_SetMinDistance(p,a,b)          (p)->SetMinDistance(a,b)\n#define IDirectSound3DBuffer_SetMaxDistance(p,a,b)          (p)->SetMaxDistance(a,b)\n#define IDirectSound3DBuffer_SetMode(p,a,b)                 (p)->SetMode(a,b)\n#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d)         (p)->SetVelocity(a,b,c,d)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSoundCapture\n//\n\nDEFINE_GUID(IID_IDirectSoundCapture, 0xb0210781, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16);\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundCapture\n\nDECLARE_INTERFACE_(IDirectSoundCapture, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundCapture methods\n    STDMETHOD(CreateCaptureBuffer)  (THIS_ LPCDSCBUFFERDESC pcDSCBufferDesc, LPDIRECTSOUNDCAPTUREBUFFER *ppDSCBuffer, LPUNKNOWN pUnkOuter) PURE;\n    STDMETHOD(GetCaps)              (THIS_ LPDSCCAPS pDSCCaps) PURE;\n    STDMETHOD(Initialize)           (THIS_ LPCGUID pcGuidDevice) PURE;\n};\n\n#define IDirectSoundCapture_QueryInterface(p,a,b)           IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundCapture_AddRef(p)                       IUnknown_AddRef(p)\n#define IDirectSoundCapture_Release(p)                      IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c)    (p)->lpVtbl->CreateCaptureBuffer(p,a,b,c)\n#define IDirectSoundCapture_GetCaps(p,a)                    (p)->lpVtbl->GetCaps(p,a)\n#define IDirectSoundCapture_Initialize(p,a)                 (p)->lpVtbl->Initialize(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c)    (p)->CreateCaptureBuffer(a,b,c)\n#define IDirectSoundCapture_GetCaps(p,a)                    (p)->GetCaps(a)\n#define IDirectSoundCapture_Initialize(p,a)                 (p)->Initialize(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSoundCaptureBuffer\n//\n\nDEFINE_GUID(IID_IDirectSoundCaptureBuffer, 0xb0210782, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16);\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundCaptureBuffer\n\nDECLARE_INTERFACE_(IDirectSoundCaptureBuffer, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundCaptureBuffer methods\n    STDMETHOD(GetCaps)              (THIS_ LPDSCBCAPS pDSCBCaps) PURE;\n    STDMETHOD(GetCurrentPosition)   (THIS_ LPDWORD pdwCapturePosition, LPDWORD pdwReadPosition) PURE;\n    STDMETHOD(GetFormat)            (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE;\n    STDMETHOD(GetStatus)            (THIS_ LPDWORD pdwStatus) PURE;\n    STDMETHOD(Initialize)           (THIS_ LPDIRECTSOUNDCAPTURE pDirectSoundCapture, LPCDSCBUFFERDESC pcDSCBufferDesc) PURE;\n    STDMETHOD(Lock)                 (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1,\n                                           LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE;\n    STDMETHOD(Start)                (THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(Stop)                 (THIS) PURE;\n    STDMETHOD(Unlock)               (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE;\n};\n\n#define IDirectSoundCaptureBuffer_QueryInterface(p,a,b)         IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundCaptureBuffer_AddRef(p)                     IUnknown_AddRef(p)\n#define IDirectSoundCaptureBuffer_Release(p)                    IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundCaptureBuffer_GetCaps(p,a)                  (p)->lpVtbl->GetCaps(p,a)\n#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b)     (p)->lpVtbl->GetCurrentPosition(p,a,b)\n#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c)            (p)->lpVtbl->GetFormat(p,a,b,c)\n#define IDirectSoundCaptureBuffer_GetStatus(p,a)                (p)->lpVtbl->GetStatus(p,a)\n#define IDirectSoundCaptureBuffer_Initialize(p,a,b)             (p)->lpVtbl->Initialize(p,a,b)\n#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g)         (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)\n#define IDirectSoundCaptureBuffer_Start(p,a)                    (p)->lpVtbl->Start(p,a)\n#define IDirectSoundCaptureBuffer_Stop(p)                       (p)->lpVtbl->Stop(p)\n#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d)             (p)->lpVtbl->Unlock(p,a,b,c,d)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundCaptureBuffer_GetCaps(p,a)                  (p)->GetCaps(a)\n#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b)     (p)->GetCurrentPosition(a,b)\n#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c)            (p)->GetFormat(a,b,c)\n#define IDirectSoundCaptureBuffer_GetStatus(p,a)                (p)->GetStatus(a)\n#define IDirectSoundCaptureBuffer_Initialize(p,a,b)             (p)->Initialize(a,b)\n#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g)         (p)->Lock(a,b,c,d,e,f,g)\n#define IDirectSoundCaptureBuffer_Start(p,a)                    (p)->Start(a)\n#define IDirectSoundCaptureBuffer_Stop(p)                       (p)->Stop()\n#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d)             (p)->Unlock(a,b,c,d)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n\n#if DIRECTSOUND_VERSION >= 0x0800\n\n//\n// IDirectSoundCaptureBuffer8\n//\n\nDEFINE_GUID(IID_IDirectSoundCaptureBuffer8, 0x990df4, 0xdbb, 0x4872, 0x83, 0x3e, 0x6d, 0x30, 0x3e, 0x80, 0xae, 0xb6);\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundCaptureBuffer8\n\nDECLARE_INTERFACE_(IDirectSoundCaptureBuffer8, IDirectSoundCaptureBuffer)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundCaptureBuffer methods\n    STDMETHOD(GetCaps)              (THIS_ LPDSCBCAPS pDSCBCaps) PURE;\n    STDMETHOD(GetCurrentPosition)   (THIS_ LPDWORD pdwCapturePosition, LPDWORD pdwReadPosition) PURE;\n    STDMETHOD(GetFormat)            (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE;\n    STDMETHOD(GetStatus)            (THIS_ LPDWORD pdwStatus) PURE;\n    STDMETHOD(Initialize)           (THIS_ LPDIRECTSOUNDCAPTURE pDirectSoundCapture, LPCDSCBUFFERDESC pcDSCBufferDesc) PURE;\n    STDMETHOD(Lock)                 (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1,\n                                           LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE;\n    STDMETHOD(Start)                (THIS_ DWORD dwFlags) PURE;\n    STDMETHOD(Stop)                 (THIS) PURE;\n    STDMETHOD(Unlock)               (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE;\n\n    // IDirectSoundCaptureBuffer8 methods\n    STDMETHOD(GetObjectInPath)      (THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE;\n    STDMETHOD(GetFXStatus)          (DWORD dwFXCount, LPDWORD pdwFXStatus) PURE;\n};\n\n#define IDirectSoundCaptureBuffer8_QueryInterface(p,a,b)            IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundCaptureBuffer8_AddRef(p)                        IUnknown_AddRef(p)\n#define IDirectSoundCaptureBuffer8_Release(p)                       IUnknown_Release(p)\n\n#define IDirectSoundCaptureBuffer8_GetCaps(p,a)                     IDirectSoundCaptureBuffer_GetCaps(p,a)\n#define IDirectSoundCaptureBuffer8_GetCurrentPosition(p,a,b)        IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b)\n#define IDirectSoundCaptureBuffer8_GetFormat(p,a,b,c)               IDirectSoundCaptureBuffer_GetFormat(p,a,b,c)\n#define IDirectSoundCaptureBuffer8_GetStatus(p,a)                   IDirectSoundCaptureBuffer_GetStatus(p,a)\n#define IDirectSoundCaptureBuffer8_Initialize(p,a,b)                IDirectSoundCaptureBuffer_Initialize(p,a,b)\n#define IDirectSoundCaptureBuffer8_Lock(p,a,b,c,d,e,f,g)            IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g)\n#define IDirectSoundCaptureBuffer8_Start(p,a)                       IDirectSoundCaptureBuffer_Start(p,a)\n#define IDirectSoundCaptureBuffer8_Stop(p)                          IDirectSoundCaptureBuffer_Stop(p))\n#define IDirectSoundCaptureBuffer8_Unlock(p,a,b,c,d)                IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d)       (p)->lpVtbl->GetObjectInPath(p,a,b,c,d)\n#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b)               (p)->lpVtbl->GetFXStatus(p,a,b)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d)       (p)->GetObjectInPath(a,b,c,d)\n#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b)               (p)->GetFXStatus(a,b)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n#endif // DIRECTSOUND_VERSION >= 0x0800\n\n//\n// IDirectSoundNotify\n//\n\nDEFINE_GUID(IID_IDirectSoundNotify, 0xb0210783, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16);\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundNotify\n\nDECLARE_INTERFACE_(IDirectSoundNotify, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)           (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)            (THIS) PURE;\n    STDMETHOD_(ULONG,Release)           (THIS) PURE;\n\n    // IDirectSoundNotify methods\n    STDMETHOD(SetNotificationPositions) (THIS_ DWORD dwPositionNotifies, LPCDSBPOSITIONNOTIFY pcPositionNotifies) PURE;\n};\n\n#define IDirectSoundNotify_QueryInterface(p,a,b)            IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundNotify_AddRef(p)                        IUnknown_AddRef(p)\n#define IDirectSoundNotify_Release(p)                       IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundNotify_SetNotificationPositions(p,a,b)  (p)->lpVtbl->SetNotificationPositions(p,a,b)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundNotify_SetNotificationPositions(p,a,b)  (p)->SetNotificationPositions(a,b)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IKsPropertySet\n//\n\n#ifndef _IKsPropertySet_\n#define _IKsPropertySet_\n\n#ifdef __cplusplus\n// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined\nstruct IKsPropertySet;\n#endif // __cplusplus\n\ntypedef struct IKsPropertySet *LPKSPROPERTYSET;\n\n#define KSPROPERTY_SUPPORT_GET  0x00000001\n#define KSPROPERTY_SUPPORT_SET  0x00000002\n\nDEFINE_GUID(IID_IKsPropertySet, 0x31efac30, 0x515c, 0x11d0, 0xa9, 0xaa, 0x00, 0xaa, 0x00, 0x61, 0xbe, 0x93);\n\n#undef INTERFACE\n#define INTERFACE IKsPropertySet\n\nDECLARE_INTERFACE_(IKsPropertySet, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)   (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)    (THIS) PURE;\n    STDMETHOD_(ULONG,Release)   (THIS) PURE;\n\n    // IKsPropertySet methods\n    STDMETHOD(Get)              (THIS_ REFGUID rguidPropSet, ULONG ulId, LPVOID pInstanceData, ULONG ulInstanceLength,\n                                       LPVOID pPropertyData, ULONG ulDataLength, PULONG pulBytesReturned) PURE;\n    STDMETHOD(Set)              (THIS_ REFGUID rguidPropSet, ULONG ulId, LPVOID pInstanceData, ULONG ulInstanceLength,\n                                       LPVOID pPropertyData, ULONG ulDataLength) PURE;\n    STDMETHOD(QuerySupport)     (THIS_ REFGUID rguidPropSet, ULONG ulId, PULONG pulTypeSupport) PURE;\n};\n\n#define IKsPropertySet_QueryInterface(p,a,b)       IUnknown_QueryInterface(p,a,b)\n#define IKsPropertySet_AddRef(p)                   IUnknown_AddRef(p)\n#define IKsPropertySet_Release(p)                  IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IKsPropertySet_Get(p,a,b,c,d,e,f,g)        (p)->lpVtbl->Get(p,a,b,c,d,e,f,g)\n#define IKsPropertySet_Set(p,a,b,c,d,e,f)          (p)->lpVtbl->Set(p,a,b,c,d,e,f)\n#define IKsPropertySet_QuerySupport(p,a,b,c)       (p)->lpVtbl->QuerySupport(p,a,b,c)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IKsPropertySet_Get(p,a,b,c,d,e,f,g)        (p)->Get(a,b,c,d,e,f,g)\n#define IKsPropertySet_Set(p,a,b,c,d,e,f)          (p)->Set(a,b,c,d,e,f)\n#define IKsPropertySet_QuerySupport(p,a,b,c)       (p)->QuerySupport(a,b,c)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n#endif // _IKsPropertySet_\n\n#if DIRECTSOUND_VERSION >= 0x0800\n\n//\n// IDirectSoundFXGargle\n//\n\nDEFINE_GUID(IID_IDirectSoundFXGargle, 0xd616f352, 0xd622, 0x11ce, 0xaa, 0xc5, 0x00, 0x20, 0xaf, 0x0b, 0x99, 0xa3);\n\ntypedef struct _DSFXGargle\n{\n    DWORD       dwRateHz;               // Rate of modulation in hz\n    DWORD       dwWaveShape;            // DSFXGARGLE_WAVE_xxx\n} DSFXGargle, *LPDSFXGargle;\n\n#define DSFXGARGLE_WAVE_TRIANGLE        0\n#define DSFXGARGLE_WAVE_SQUARE          1\n\ntypedef const DSFXGargle *LPCDSFXGargle;\n\n#define DSFXGARGLE_RATEHZ_MIN           1\n#define DSFXGARGLE_RATEHZ_MAX           1000\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundFXGargle\n\nDECLARE_INTERFACE_(IDirectSoundFXGargle, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundFXGargle methods\n    STDMETHOD(SetAllParameters)     (THIS_ LPCDSFXGargle pcDsFxGargle) PURE;\n    STDMETHOD(GetAllParameters)     (THIS_ LPDSFXGargle pDsFxGargle) PURE;\n};\n\n#define IDirectSoundFXGargle_QueryInterface(p,a,b)          IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundFXGargle_AddRef(p)                      IUnknown_AddRef(p)\n#define IDirectSoundFXGargle_Release(p)                     IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXGargle_SetAllParameters(p,a)          (p)->lpVtbl->SetAllParameters(p,a)\n#define IDirectSoundFXGargle_GetAllParameters(p,a)          (p)->lpVtbl->GetAllParameters(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXGargle_SetAllParameters(p,a)          (p)->SetAllParameters(a)\n#define IDirectSoundFXGargle_GetAllParameters(p,a)          (p)->GetAllParameters(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSoundFXChorus\n//\n\nDEFINE_GUID(IID_IDirectSoundFXChorus, 0x880842e3, 0x145f, 0x43e6, 0xa9, 0x34, 0xa7, 0x18, 0x06, 0xe5, 0x05, 0x47);\n\ntypedef struct _DSFXChorus\n{\n    FLOAT       fWetDryMix;\n    FLOAT       fDepth;\n    FLOAT       fFeedback;\n    FLOAT       fFrequency;\n    LONG        lWaveform;          // LFO shape; DSFXCHORUS_WAVE_xxx\n    FLOAT       fDelay;\n    LONG        lPhase;\n} DSFXChorus, *LPDSFXChorus;\n\ntypedef const DSFXChorus *LPCDSFXChorus;\n\n#define DSFXCHORUS_WAVE_TRIANGLE        0\n#define DSFXCHORUS_WAVE_SIN             1\n\n#define DSFXCHORUS_WETDRYMIX_MIN        0.0f\n#define DSFXCHORUS_WETDRYMIX_MAX        100.0f\n#define DSFXCHORUS_DEPTH_MIN            0.0f\n#define DSFXCHORUS_DEPTH_MAX            100.0f\n#define DSFXCHORUS_FEEDBACK_MIN         -99.0f\n#define DSFXCHORUS_FEEDBACK_MAX         99.0f\n#define DSFXCHORUS_FREQUENCY_MIN        0.0f\n#define DSFXCHORUS_FREQUENCY_MAX        10.0f\n#define DSFXCHORUS_DELAY_MIN            0.0f\n#define DSFXCHORUS_DELAY_MAX            20.0f\n#define DSFXCHORUS_PHASE_MIN            0\n#define DSFXCHORUS_PHASE_MAX            4\n\n#define DSFXCHORUS_PHASE_NEG_180        0\n#define DSFXCHORUS_PHASE_NEG_90         1\n#define DSFXCHORUS_PHASE_ZERO           2\n#define DSFXCHORUS_PHASE_90             3\n#define DSFXCHORUS_PHASE_180            4\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundFXChorus\n\nDECLARE_INTERFACE_(IDirectSoundFXChorus, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundFXChorus methods\n    STDMETHOD(SetAllParameters)     (THIS_ LPCDSFXChorus pcDsFxChorus) PURE;\n    STDMETHOD(GetAllParameters)     (THIS_ LPDSFXChorus pDsFxChorus) PURE;\n};\n\n#define IDirectSoundFXChorus_QueryInterface(p,a,b)          IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundFXChorus_AddRef(p)                      IUnknown_AddRef(p)\n#define IDirectSoundFXChorus_Release(p)                     IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXChorus_SetAllParameters(p,a)          (p)->lpVtbl->SetAllParameters(p,a)\n#define IDirectSoundFXChorus_GetAllParameters(p,a)          (p)->lpVtbl->GetAllParameters(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXChorus_SetAllParameters(p,a)          (p)->SetAllParameters(a)\n#define IDirectSoundFXChorus_GetAllParameters(p,a)          (p)->GetAllParameters(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSoundFXFlanger\n//\n\nDEFINE_GUID(IID_IDirectSoundFXFlanger, 0x903e9878, 0x2c92, 0x4072, 0x9b, 0x2c, 0xea, 0x68, 0xf5, 0x39, 0x67, 0x83);\n\ntypedef struct _DSFXFlanger\n{\n    FLOAT       fWetDryMix;\n    FLOAT       fDepth;\n    FLOAT       fFeedback;\n    FLOAT       fFrequency;\n    LONG        lWaveform;\n    FLOAT       fDelay;\n    LONG        lPhase;\n} DSFXFlanger, *LPDSFXFlanger;\n\ntypedef const DSFXFlanger *LPCDSFXFlanger;\n\n#define DSFXFLANGER_WAVE_TRIANGLE       0\n#define DSFXFLANGER_WAVE_SIN            1\n\n#define DSFXFLANGER_WETDRYMIX_MIN       0.0f\n#define DSFXFLANGER_WETDRYMIX_MAX       100.0f\n#define DSFXFLANGER_FREQUENCY_MIN       0.0f\n#define DSFXFLANGER_FREQUENCY_MAX       10.0f\n#define DSFXFLANGER_DEPTH_MIN           0.0f\n#define DSFXFLANGER_DEPTH_MAX           100.0f\n#define DSFXFLANGER_PHASE_MIN           0\n#define DSFXFLANGER_PHASE_MAX           4\n#define DSFXFLANGER_FEEDBACK_MIN        -99.0f\n#define DSFXFLANGER_FEEDBACK_MAX        99.0f\n#define DSFXFLANGER_DELAY_MIN           0.0f\n#define DSFXFLANGER_DELAY_MAX           4.0f\n\n#define DSFXFLANGER_PHASE_NEG_180       0\n#define DSFXFLANGER_PHASE_NEG_90        1\n#define DSFXFLANGER_PHASE_ZERO          2\n#define DSFXFLANGER_PHASE_90            3\n#define DSFXFLANGER_PHASE_180           4\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundFXFlanger\n\nDECLARE_INTERFACE_(IDirectSoundFXFlanger, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundFXFlanger methods\n    STDMETHOD(SetAllParameters)     (THIS_ LPCDSFXFlanger pcDsFxFlanger) PURE;\n    STDMETHOD(GetAllParameters)     (THIS_ LPDSFXFlanger pDsFxFlanger) PURE;\n};\n\n#define IDirectSoundFXFlanger_QueryInterface(p,a,b)         IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundFXFlanger_AddRef(p)                     IUnknown_AddRef(p)\n#define IDirectSoundFXFlanger_Release(p)                    IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXFlanger_SetAllParameters(p,a)         (p)->lpVtbl->SetAllParameters(p,a)\n#define IDirectSoundFXFlanger_GetAllParameters(p,a)         (p)->lpVtbl->GetAllParameters(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXFlanger_SetAllParameters(p,a)         (p)->SetAllParameters(a)\n#define IDirectSoundFXFlanger_GetAllParameters(p,a)         (p)->GetAllParameters(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSoundFXEcho\n//\n\nDEFINE_GUID(IID_IDirectSoundFXEcho, 0x8bd28edf, 0x50db, 0x4e92, 0xa2, 0xbd, 0x44, 0x54, 0x88, 0xd1, 0xed, 0x42);\n\ntypedef struct _DSFXEcho\n{\n    FLOAT   fWetDryMix;\n    FLOAT   fFeedback;\n    FLOAT   fLeftDelay;\n    FLOAT   fRightDelay;\n    LONG    lPanDelay;\n} DSFXEcho, *LPDSFXEcho;\n\ntypedef const DSFXEcho *LPCDSFXEcho;\n\n#define DSFXECHO_WETDRYMIX_MIN      0.0f\n#define DSFXECHO_WETDRYMIX_MAX      100.0f\n#define DSFXECHO_FEEDBACK_MIN       0.0f\n#define DSFXECHO_FEEDBACK_MAX       100.0f\n#define DSFXECHO_LEFTDELAY_MIN      1.0f\n#define DSFXECHO_LEFTDELAY_MAX      2000.0f\n#define DSFXECHO_RIGHTDELAY_MIN     1.0f\n#define DSFXECHO_RIGHTDELAY_MAX     2000.0f\n#define DSFXECHO_PANDELAY_MIN       0\n#define DSFXECHO_PANDELAY_MAX       1\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundFXEcho\n\nDECLARE_INTERFACE_(IDirectSoundFXEcho, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundFXEcho methods\n    STDMETHOD(SetAllParameters)     (THIS_ LPCDSFXEcho pcDsFxEcho) PURE;\n    STDMETHOD(GetAllParameters)     (THIS_ LPDSFXEcho pDsFxEcho) PURE;\n};\n\n#define IDirectSoundFXEcho_QueryInterface(p,a,b)            IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundFXEcho_AddRef(p)                        IUnknown_AddRef(p)\n#define IDirectSoundFXEcho_Release(p)                       IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXEcho_SetAllParameters(p,a)            (p)->lpVtbl->SetAllParameters(p,a)\n#define IDirectSoundFXEcho_GetAllParameters(p,a)            (p)->lpVtbl->GetAllParameters(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXEcho_SetAllParameters(p,a)            (p)->SetAllParameters(a)\n#define IDirectSoundFXEcho_GetAllParameters(p,a)            (p)->GetAllParameters(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSoundFXDistortion\n//\n\nDEFINE_GUID(IID_IDirectSoundFXDistortion, 0x8ecf4326, 0x455f, 0x4d8b, 0xbd, 0xa9, 0x8d, 0x5d, 0x3e, 0x9e, 0x3e, 0x0b);\n\ntypedef struct _DSFXDistortion\n{\n    FLOAT   fGain;\n    FLOAT   fEdge;\n    FLOAT   fPostEQCenterFrequency;\n    FLOAT   fPostEQBandwidth;\n    FLOAT   fPreLowpassCutoff;\n} DSFXDistortion, *LPDSFXDistortion;\n\ntypedef const DSFXDistortion *LPCDSFXDistortion;\n\n#define DSFXDISTORTION_GAIN_MIN                     -60.0f\n#define DSFXDISTORTION_GAIN_MAX                     0.0f\n#define DSFXDISTORTION_EDGE_MIN                     0.0f\n#define DSFXDISTORTION_EDGE_MAX                     100.0f\n#define DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN    100.0f\n#define DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX    8000.0f\n#define DSFXDISTORTION_POSTEQBANDWIDTH_MIN          100.0f\n#define DSFXDISTORTION_POSTEQBANDWIDTH_MAX          8000.0f\n#define DSFXDISTORTION_PRELOWPASSCUTOFF_MIN         100.0f\n#define DSFXDISTORTION_PRELOWPASSCUTOFF_MAX         8000.0f\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundFXDistortion\n\nDECLARE_INTERFACE_(IDirectSoundFXDistortion, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundFXDistortion methods\n    STDMETHOD(SetAllParameters)     (THIS_ LPCDSFXDistortion pcDsFxDistortion) PURE;\n    STDMETHOD(GetAllParameters)     (THIS_ LPDSFXDistortion pDsFxDistortion) PURE;\n};\n\n#define IDirectSoundFXDistortion_QueryInterface(p,a,b)      IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundFXDistortion_AddRef(p)                  IUnknown_AddRef(p)\n#define IDirectSoundFXDistortion_Release(p)                 IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXDistortion_SetAllParameters(p,a)      (p)->lpVtbl->SetAllParameters(p,a)\n#define IDirectSoundFXDistortion_GetAllParameters(p,a)      (p)->lpVtbl->GetAllParameters(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXDistortion_SetAllParameters(p,a)      (p)->SetAllParameters(a)\n#define IDirectSoundFXDistortion_GetAllParameters(p,a)      (p)->GetAllParameters(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSoundFXCompressor\n//\n\nDEFINE_GUID(IID_IDirectSoundFXCompressor, 0x4bbd1154, 0x62f6, 0x4e2c, 0xa1, 0x5c, 0xd3, 0xb6, 0xc4, 0x17, 0xf7, 0xa0);\n\ntypedef struct _DSFXCompressor\n{\n    FLOAT   fGain;\n    FLOAT   fAttack;\n    FLOAT   fRelease;\n    FLOAT   fThreshold;\n    FLOAT   fRatio;\n    FLOAT   fPredelay;\n} DSFXCompressor, *LPDSFXCompressor;\n\ntypedef const DSFXCompressor *LPCDSFXCompressor;\n\n#define DSFXCOMPRESSOR_GAIN_MIN             -60.0f\n#define DSFXCOMPRESSOR_GAIN_MAX             60.0f\n#define DSFXCOMPRESSOR_ATTACK_MIN           0.01f\n#define DSFXCOMPRESSOR_ATTACK_MAX           500.0f\n#define DSFXCOMPRESSOR_RELEASE_MIN          50.0f\n#define DSFXCOMPRESSOR_RELEASE_MAX          3000.0f\n#define DSFXCOMPRESSOR_THRESHOLD_MIN        -60.0f\n#define DSFXCOMPRESSOR_THRESHOLD_MAX        0.0f\n#define DSFXCOMPRESSOR_RATIO_MIN            1.0f\n#define DSFXCOMPRESSOR_RATIO_MAX            100.0f\n#define DSFXCOMPRESSOR_PREDELAY_MIN         0.0f\n#define DSFXCOMPRESSOR_PREDELAY_MAX         4.0f\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundFXCompressor\n\nDECLARE_INTERFACE_(IDirectSoundFXCompressor, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundFXCompressor methods\n    STDMETHOD(SetAllParameters)     (THIS_ LPCDSFXCompressor pcDsFxCompressor) PURE;\n    STDMETHOD(GetAllParameters)     (THIS_ LPDSFXCompressor pDsFxCompressor) PURE;\n};\n\n#define IDirectSoundFXCompressor_QueryInterface(p,a,b)      IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundFXCompressor_AddRef(p)                  IUnknown_AddRef(p)\n#define IDirectSoundFXCompressor_Release(p)                 IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXCompressor_SetAllParameters(p,a)      (p)->lpVtbl->SetAllParameters(p,a)\n#define IDirectSoundFXCompressor_GetAllParameters(p,a)      (p)->lpVtbl->GetAllParameters(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXCompressor_SetAllParameters(p,a)      (p)->SetAllParameters(a)\n#define IDirectSoundFXCompressor_GetAllParameters(p,a)      (p)->GetAllParameters(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSoundFXParamEq\n//\n\nDEFINE_GUID(IID_IDirectSoundFXParamEq, 0xc03ca9fe, 0xfe90, 0x4204, 0x80, 0x78, 0x82, 0x33, 0x4c, 0xd1, 0x77, 0xda);\n\ntypedef struct _DSFXParamEq\n{\n    FLOAT   fCenter;\n    FLOAT   fBandwidth;\n    FLOAT   fGain;\n} DSFXParamEq, *LPDSFXParamEq;\n\ntypedef const DSFXParamEq *LPCDSFXParamEq;\n\n#define DSFXPARAMEQ_CENTER_MIN      80.0f\n#define DSFXPARAMEQ_CENTER_MAX      16000.0f\n#define DSFXPARAMEQ_BANDWIDTH_MIN   1.0f\n#define DSFXPARAMEQ_BANDWIDTH_MAX   36.0f\n#define DSFXPARAMEQ_GAIN_MIN        -15.0f\n#define DSFXPARAMEQ_GAIN_MAX        15.0f\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundFXParamEq\n\nDECLARE_INTERFACE_(IDirectSoundFXParamEq, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundFXParamEq methods\n    STDMETHOD(SetAllParameters)     (THIS_ LPCDSFXParamEq pcDsFxParamEq) PURE;\n    STDMETHOD(GetAllParameters)     (THIS_ LPDSFXParamEq pDsFxParamEq) PURE;\n};\n\n#define IDirectSoundFXParamEq_QueryInterface(p,a,b)      IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundFXParamEq_AddRef(p)                  IUnknown_AddRef(p)\n#define IDirectSoundFXParamEq_Release(p)                 IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXParamEq_SetAllParameters(p,a)      (p)->lpVtbl->SetAllParameters(p,a)\n#define IDirectSoundFXParamEq_GetAllParameters(p,a)      (p)->lpVtbl->GetAllParameters(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXParamEq_SetAllParameters(p,a)      (p)->SetAllParameters(a)\n#define IDirectSoundFXParamEq_GetAllParameters(p,a)      (p)->GetAllParameters(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSoundFXI3DL2Reverb\n//\n\nDEFINE_GUID(IID_IDirectSoundFXI3DL2Reverb, 0x4b166a6a, 0x0d66, 0x43f3, 0x80, 0xe3, 0xee, 0x62, 0x80, 0xde, 0xe1, 0xa4);\n\ntypedef struct _DSFXI3DL2Reverb\n{\n    LONG    lRoom;                  // [-10000, 0]      default: -1000 mB\n    LONG    lRoomHF;                // [-10000, 0]      default: 0 mB\n    FLOAT   flRoomRolloffFactor;    // [0.0, 10.0]      default: 0.0\n    FLOAT   flDecayTime;            // [0.1, 20.0]      default: 1.49s\n    FLOAT   flDecayHFRatio;         // [0.1, 2.0]       default: 0.83\n    LONG    lReflections;           // [-10000, 1000]   default: -2602 mB\n    FLOAT   flReflectionsDelay;     // [0.0, 0.3]       default: 0.007 s\n    LONG    lReverb;                // [-10000, 2000]   default: 200 mB\n    FLOAT   flReverbDelay;          // [0.0, 0.1]       default: 0.011 s\n    FLOAT   flDiffusion;            // [0.0, 100.0]     default: 100.0 %\n    FLOAT   flDensity;              // [0.0, 100.0]     default: 100.0 %\n    FLOAT   flHFReference;          // [20.0, 20000.0]  default: 5000.0 Hz\n} DSFXI3DL2Reverb, *LPDSFXI3DL2Reverb;\n\ntypedef const DSFXI3DL2Reverb *LPCDSFXI3DL2Reverb;\n\n#define DSFX_I3DL2REVERB_ROOM_MIN                   (-10000)\n#define DSFX_I3DL2REVERB_ROOM_MAX                   0\n#define DSFX_I3DL2REVERB_ROOM_DEFAULT               (-1000)\n\n#define DSFX_I3DL2REVERB_ROOMHF_MIN                 (-10000)\n#define DSFX_I3DL2REVERB_ROOMHF_MAX                 0\n#define DSFX_I3DL2REVERB_ROOMHF_DEFAULT             (-100)\n\n#define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN      0.0f\n#define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX      10.0f\n#define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT  0.0f\n\n#define DSFX_I3DL2REVERB_DECAYTIME_MIN              0.1f\n#define DSFX_I3DL2REVERB_DECAYTIME_MAX              20.0f\n#define DSFX_I3DL2REVERB_DECAYTIME_DEFAULT          1.49f\n\n#define DSFX_I3DL2REVERB_DECAYHFRATIO_MIN           0.1f\n#define DSFX_I3DL2REVERB_DECAYHFRATIO_MAX           2.0f\n#define DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT       0.83f\n\n#define DSFX_I3DL2REVERB_REFLECTIONS_MIN            (-10000)\n#define DSFX_I3DL2REVERB_REFLECTIONS_MAX            1000\n#define DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT        (-2602)\n\n#define DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN       0.0f\n#define DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX       0.3f\n#define DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT   0.007f\n\n#define DSFX_I3DL2REVERB_REVERB_MIN                 (-10000)\n#define DSFX_I3DL2REVERB_REVERB_MAX                 2000\n#define DSFX_I3DL2REVERB_REVERB_DEFAULT             (200)\n\n#define DSFX_I3DL2REVERB_REVERBDELAY_MIN            0.0f\n#define DSFX_I3DL2REVERB_REVERBDELAY_MAX            0.1f\n#define DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT        0.011f\n\n#define DSFX_I3DL2REVERB_DIFFUSION_MIN              0.0f\n#define DSFX_I3DL2REVERB_DIFFUSION_MAX              100.0f\n#define DSFX_I3DL2REVERB_DIFFUSION_DEFAULT          100.0f\n\n#define DSFX_I3DL2REVERB_DENSITY_MIN                0.0f\n#define DSFX_I3DL2REVERB_DENSITY_MAX                100.0f\n#define DSFX_I3DL2REVERB_DENSITY_DEFAULT            100.0f\n\n#define DSFX_I3DL2REVERB_HFREFERENCE_MIN            20.0f\n#define DSFX_I3DL2REVERB_HFREFERENCE_MAX            20000.0f\n#define DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT        5000.0f\n\n#define DSFX_I3DL2REVERB_QUALITY_MIN                0\n#define DSFX_I3DL2REVERB_QUALITY_MAX                3\n#define DSFX_I3DL2REVERB_QUALITY_DEFAULT            2\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundFXI3DL2Reverb\n\nDECLARE_INTERFACE_(IDirectSoundFXI3DL2Reverb, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundFXI3DL2Reverb methods\n    STDMETHOD(SetAllParameters)     (THIS_ LPCDSFXI3DL2Reverb pcDsFxI3DL2Reverb) PURE;\n    STDMETHOD(GetAllParameters)     (THIS_ LPDSFXI3DL2Reverb pDsFxI3DL2Reverb) PURE;\n    STDMETHOD(SetPreset)            (THIS_ DWORD dwPreset) PURE;\n    STDMETHOD(GetPreset)            (THIS_ LPDWORD pdwPreset) PURE;\n    STDMETHOD(SetQuality)           (THIS_ LONG lQuality) PURE;\n    STDMETHOD(GetQuality)           (THIS_ LONG *plQuality) PURE;\n};\n\n#define IDirectSoundFXI3DL2Reverb_QueryInterface(p,a,b)     IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundFXI3DL2Reverb_AddRef(p)                 IUnknown_AddRef(p)\n#define IDirectSoundFXI3DL2Reverb_Release(p)                IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXI3DL2Reverb_SetAllParameters(p,a)     (p)->lpVtbl->SetAllParameters(p,a)\n#define IDirectSoundFXI3DL2Reverb_GetAllParameters(p,a)     (p)->lpVtbl->GetAllParameters(p,a)\n#define IDirectSoundFXI3DL2Reverb_SetPreset(p,a)            (p)->lpVtbl->SetPreset(p,a)\n#define IDirectSoundFXI3DL2Reverb_GetPreset(p,a)            (p)->lpVtbl->GetPreset(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXI3DL2Reverb_SetAllParameters(p,a)     (p)->SetAllParameters(a)\n#define IDirectSoundFXI3DL2Reverb_GetAllParameters(p,a)     (p)->GetAllParameters(a)\n#define IDirectSoundFXI3DL2Reverb_SetPreset(p,a)            (p)->SetPreset(a)\n#define IDirectSoundFXI3DL2Reverb_GetPreset(p,a)            (p)->GetPreset(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSoundFXWavesReverb\n//\n\nDEFINE_GUID(IID_IDirectSoundFXWavesReverb,0x46858c3a,0x0dc6,0x45e3,0xb7,0x60,0xd4,0xee,0xf1,0x6c,0xb3,0x25);\n\ntypedef struct _DSFXWavesReverb\n{\n    FLOAT   fInGain;                // [-96.0,0.0]            default: 0.0 dB\n    FLOAT   fReverbMix;             // [-96.0,0.0]            default: 0.0 db\n    FLOAT   fReverbTime;            // [0.001,3000.0]         default: 1000.0 ms\n    FLOAT   fHighFreqRTRatio;       // [0.001,0.999]          default: 0.001\n} DSFXWavesReverb, *LPDSFXWavesReverb;\n\ntypedef const DSFXWavesReverb *LPCDSFXWavesReverb;\n\n#define DSFX_WAVESREVERB_INGAIN_MIN                 -96.0f\n#define DSFX_WAVESREVERB_INGAIN_MAX                 0.0f\n#define DSFX_WAVESREVERB_INGAIN_DEFAULT             0.0f\n#define DSFX_WAVESREVERB_REVERBMIX_MIN              -96.0f\n#define DSFX_WAVESREVERB_REVERBMIX_MAX              0.0f\n#define DSFX_WAVESREVERB_REVERBMIX_DEFAULT          0.0f\n#define DSFX_WAVESREVERB_REVERBTIME_MIN             0.001f\n#define DSFX_WAVESREVERB_REVERBTIME_MAX             3000.0f\n#define DSFX_WAVESREVERB_REVERBTIME_DEFAULT         1000.0f\n#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN        0.001f\n#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX        0.999f\n#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT    0.001f\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundFXWavesReverb\n\nDECLARE_INTERFACE_(IDirectSoundFXWavesReverb, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundFXWavesReverb methods\n    STDMETHOD(SetAllParameters)     (THIS_ LPCDSFXWavesReverb pcDsFxWavesReverb) PURE;\n    STDMETHOD(GetAllParameters)     (THIS_ LPDSFXWavesReverb pDsFxWavesReverb) PURE;\n};\n\n#define IDirectSoundFXWavesReverb_QueryInterface(p,a,b)     IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundFXWavesReverb_AddRef(p)                 IUnknown_AddRef(p)\n#define IDirectSoundFXWavesReverb_Release(p)                IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXWavesReverb_SetAllParameters(p,a)     (p)->lpVtbl->SetAllParameters(p,a)\n#define IDirectSoundFXWavesReverb_GetAllParameters(p,a)     (p)->lpVtbl->GetAllParameters(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFXWavesReverb_SetAllParameters(p,a)     (p)->SetAllParameters(a)\n#define IDirectSoundFXWavesReverb_GetAllParameters(p,a)     (p)->GetAllParameters(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n//\n// IDirectSoundCaptureFXAec\n//\n\nDEFINE_GUID(IID_IDirectSoundCaptureFXAec, 0xad74143d, 0x903d, 0x4ab7, 0x80, 0x66, 0x28, 0xd3, 0x63, 0x03, 0x6d, 0x65);\n\ntypedef struct _DSCFXAec\n{\n    BOOL    fEnable;\n    BOOL    fNoiseFill;\n    DWORD   dwMode;\n} DSCFXAec, *LPDSCFXAec;\n\ntypedef const DSCFXAec *LPCDSCFXAec;\n\n// These match the AEC_MODE_* constants in the DDK's ksmedia.h file\n#define DSCFX_AEC_MODE_PASS_THROUGH                     0x0\n#define DSCFX_AEC_MODE_HALF_DUPLEX                      0x1\n#define DSCFX_AEC_MODE_FULL_DUPLEX                      0x2\n\n// These match the AEC_STATUS_* constants in ksmedia.h\n#define DSCFX_AEC_STATUS_HISTORY_UNINITIALIZED          0x0\n#define DSCFX_AEC_STATUS_HISTORY_CONTINUOUSLY_CONVERGED 0x1\n#define DSCFX_AEC_STATUS_HISTORY_PREVIOUSLY_DIVERGED    0x2\n#define DSCFX_AEC_STATUS_CURRENTLY_CONVERGED            0x8\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundCaptureFXAec\n\nDECLARE_INTERFACE_(IDirectSoundCaptureFXAec, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundCaptureFXAec methods\n    STDMETHOD(SetAllParameters)     (THIS_ LPCDSCFXAec pDscFxAec) PURE;\n    STDMETHOD(GetAllParameters)     (THIS_ LPDSCFXAec pDscFxAec) PURE;\n    STDMETHOD(GetStatus)            (THIS_ PDWORD pdwStatus) PURE;\n    STDMETHOD(Reset)                (THIS) PURE;\n};\n\n#define IDirectSoundCaptureFXAec_QueryInterface(p,a,b)     IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundCaptureFXAec_AddRef(p)                 IUnknown_AddRef(p)\n#define IDirectSoundCaptureFXAec_Release(p)                IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundCaptureFXAec_SetAllParameters(p,a)     (p)->lpVtbl->SetAllParameters(p,a)\n#define IDirectSoundCaptureFXAec_GetAllParameters(p,a)     (p)->lpVtbl->GetAllParameters(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundCaptureFXAec_SetAllParameters(p,a)     (p)->SetAllParameters(a)\n#define IDirectSoundCaptureFXAec_GetAllParameters(p,a)     (p)->GetAllParameters(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n\n//\n// IDirectSoundCaptureFXNoiseSuppress\n//\n\nDEFINE_GUID(IID_IDirectSoundCaptureFXNoiseSuppress, 0xed311e41, 0xfbae, 0x4175, 0x96, 0x25, 0xcd, 0x8, 0x54, 0xf6, 0x93, 0xca);\n\ntypedef struct _DSCFXNoiseSuppress\n{\n    BOOL    fEnable;\n} DSCFXNoiseSuppress, *LPDSCFXNoiseSuppress;\n\ntypedef const DSCFXNoiseSuppress *LPCDSCFXNoiseSuppress;\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundCaptureFXNoiseSuppress\n\nDECLARE_INTERFACE_(IDirectSoundCaptureFXNoiseSuppress, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)       (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)        (THIS) PURE;\n    STDMETHOD_(ULONG,Release)       (THIS) PURE;\n\n    // IDirectSoundCaptureFXNoiseSuppress methods\n    STDMETHOD(SetAllParameters)     (THIS_ LPCDSCFXNoiseSuppress pcDscFxNoiseSuppress) PURE;\n    STDMETHOD(GetAllParameters)     (THIS_ LPDSCFXNoiseSuppress pDscFxNoiseSuppress) PURE;\n    STDMETHOD(Reset)                (THIS) PURE;\n};\n\n#define IDirectSoundCaptureFXNoiseSuppress_QueryInterface(p,a,b)     IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundCaptureFXNoiseSuppress_AddRef(p)                 IUnknown_AddRef(p)\n#define IDirectSoundCaptureFXNoiseSuppress_Release(p)                IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundCaptureFXNoiseSuppress_SetAllParameters(p,a)     (p)->lpVtbl->SetAllParameters(p,a)\n#define IDirectSoundCaptureFXNoiseSuppress_GetAllParameters(p,a)     (p)->lpVtbl->GetAllParameters(p,a)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundCaptureFXNoiseSuppress_SetAllParameters(p,a)     (p)->SetAllParameters(a)\n#define IDirectSoundCaptureFXNoiseSuppress_GetAllParameters(p,a)     (p)->GetAllParameters(a)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n\n//\n// IDirectSoundFullDuplex\n//\n\n#ifndef _IDirectSoundFullDuplex_\n#define _IDirectSoundFullDuplex_\n\n#ifdef __cplusplus\n// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined\nstruct IDirectSoundFullDuplex;\n#endif // __cplusplus\n\ntypedef struct IDirectSoundFullDuplex *LPDIRECTSOUNDFULLDUPLEX;\n\nDEFINE_GUID(IID_IDirectSoundFullDuplex, 0xedcb4c7a, 0xdaab, 0x4216, 0xa4, 0x2e, 0x6c, 0x50, 0x59, 0x6d, 0xdc, 0x1d);\n\n#undef INTERFACE\n#define INTERFACE IDirectSoundFullDuplex\n\nDECLARE_INTERFACE_(IDirectSoundFullDuplex, IUnknown)\n{\n    // IUnknown methods\n    STDMETHOD(QueryInterface)   (THIS_ REFIID, LPVOID *) PURE;\n    STDMETHOD_(ULONG,AddRef)    (THIS) PURE;\n    STDMETHOD_(ULONG,Release)   (THIS) PURE;\n\n    // IDirectSoundFullDuplex methods\n    STDMETHOD(Initialize)     (THIS_ LPCGUID pCaptureGuid, LPCGUID pRenderGuid, LPCDSCBUFFERDESC lpDscBufferDesc, LPCDSBUFFERDESC lpDsBufferDesc, HWND hWnd, DWORD dwLevel, LPLPDIRECTSOUNDCAPTUREBUFFER8 lplpDirectSoundCaptureBuffer8, LPLPDIRECTSOUNDBUFFER8 lplpDirectSoundBuffer8) PURE;\n};\n\n#define IDirectSoundFullDuplex_QueryInterface(p,a,b)    IUnknown_QueryInterface(p,a,b)\n#define IDirectSoundFullDuplex_AddRef(p)                IUnknown_AddRef(p)\n#define IDirectSoundFullDuplex_Release(p)               IUnknown_Release(p)\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h)     (p)->lpVtbl->Initialize(p,a,b,c,d,e,f,g,h)\n#else // !defined(__cplusplus) || defined(CINTERFACE)\n#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h)     (p)->Initialize(a,b,c,d,e,f,g,h)\n#endif // !defined(__cplusplus) || defined(CINTERFACE)\n\n#endif // _IDirectSoundFullDuplex_\n\n#endif // DIRECTSOUND_VERSION >= 0x0800\n\n//\n// Return Codes\n//\n\n// The function completed successfully\n#define DS_OK                           S_OK\n\n// The call succeeded, but we had to substitute the 3D algorithm\n#define DS_NO_VIRTUALIZATION            MAKE_HRESULT(0, _FACDS, 10)\n\n// The call failed because resources (such as a priority level)\n// were already being used by another caller\n#define DSERR_ALLOCATED                 MAKE_DSHRESULT(10)\n\n// The control (vol, pan, etc.) requested by the caller is not available\n#define DSERR_CONTROLUNAVAIL            MAKE_DSHRESULT(30)\n\n// An invalid parameter was passed to the returning function\n#define DSERR_INVALIDPARAM              E_INVALIDARG\n\n// This call is not valid for the current state of this object\n#define DSERR_INVALIDCALL               MAKE_DSHRESULT(50)\n\n// An undetermined error occurred inside the DirectSound subsystem\n#define DSERR_GENERIC                   E_FAIL\n\n// The caller does not have the priority level required for the function to\n// succeed\n#define DSERR_PRIOLEVELNEEDED           MAKE_DSHRESULT(70)\n\n// Not enough free memory is available to complete the operation\n#define DSERR_OUTOFMEMORY               E_OUTOFMEMORY\n\n// The specified WAVE format is not supported\n#define DSERR_BADFORMAT                 MAKE_DSHRESULT(100)\n\n// The function called is not supported at this time\n#define DSERR_UNSUPPORTED               E_NOTIMPL\n\n// No sound driver is available for use\n#define DSERR_NODRIVER                  MAKE_DSHRESULT(120)\n// This object is already initialized\n#define DSERR_ALREADYINITIALIZED        MAKE_DSHRESULT(130)\n\n// This object does not support aggregation\n#define DSERR_NOAGGREGATION             CLASS_E_NOAGGREGATION\n\n// The buffer memory has been lost, and must be restored\n#define DSERR_BUFFERLOST                MAKE_DSHRESULT(150)\n\n// Another app has a higher priority level, preventing this call from\n// succeeding\n#define DSERR_OTHERAPPHASPRIO           MAKE_DSHRESULT(160)\n\n// This object has not been initialized\n#define DSERR_UNINITIALIZED             MAKE_DSHRESULT(170)\n\n// The requested COM interface is not available\n#define DSERR_NOINTERFACE               E_NOINTERFACE\n\n// Access is denied\n#define DSERR_ACCESSDENIED              E_ACCESSDENIED\n\n// Tried to create a DSBCAPS_CTRLFX buffer shorter than DSBSIZE_FX_MIN milliseconds\n#define DSERR_BUFFERTOOSMALL            MAKE_DSHRESULT(180)\n\n// Attempt to use DirectSound 8 functionality on an older DirectSound object\n#define DSERR_DS8_REQUIRED              MAKE_DSHRESULT(190)\n\n// A circular loop of send effects was detected\n#define DSERR_SENDLOOP                  MAKE_DSHRESULT(200)\n\n// The GUID specified in an audiopath file does not match a valid MIXIN buffer\n#define DSERR_BADSENDBUFFERGUID         MAKE_DSHRESULT(210)\n\n// The object requested was not found (numerically equal to DMUS_E_NOT_FOUND)\n#define DSERR_OBJECTNOTFOUND            MAKE_DSHRESULT(4449)\n\n// The effects requested could not be found on the system, or they were found\n// but in the wrong order, or in the wrong hardware/software locations.\n#define DSERR_FXUNAVAILABLE             MAKE_DSHRESULT(220)\n\n//\n// Flags\n//\n\n#define DSCAPS_PRIMARYMONO          0x00000001\n#define DSCAPS_PRIMARYSTEREO        0x00000002\n#define DSCAPS_PRIMARY8BIT          0x00000004\n#define DSCAPS_PRIMARY16BIT         0x00000008\n#define DSCAPS_CONTINUOUSRATE       0x00000010\n#define DSCAPS_EMULDRIVER           0x00000020\n#define DSCAPS_CERTIFIED            0x00000040\n#define DSCAPS_SECONDARYMONO        0x00000100\n#define DSCAPS_SECONDARYSTEREO      0x00000200\n#define DSCAPS_SECONDARY8BIT        0x00000400\n#define DSCAPS_SECONDARY16BIT       0x00000800\n\n#define DSSCL_NORMAL                0x00000001\n#define DSSCL_PRIORITY              0x00000002\n#define DSSCL_EXCLUSIVE             0x00000003\n#define DSSCL_WRITEPRIMARY          0x00000004\n\n#define DSSPEAKER_DIRECTOUT         0x00000000\n#define DSSPEAKER_HEADPHONE         0x00000001\n#define DSSPEAKER_MONO              0x00000002\n#define DSSPEAKER_QUAD              0x00000003\n#define DSSPEAKER_STEREO            0x00000004\n#define DSSPEAKER_SURROUND          0x00000005\n#define DSSPEAKER_5POINT1           0x00000006  // obsolete 5.1 setting\n#define DSSPEAKER_7POINT1           0x00000007  // obsolete 7.1 setting\n#define DSSPEAKER_7POINT1_SURROUND  0x00000008  // correct 7.1 Home Theater setting\n#define DSSPEAKER_7POINT1_WIDE      DSSPEAKER_7POINT1\n#if (DIRECTSOUND_VERSION >= 0x1000)\n    #define DSSPEAKER_5POINT1_SURROUND  0x00000009  // correct 5.1 setting\n    #define DSSPEAKER_5POINT1_BACK      DSSPEAKER_5POINT1\n#endif\n\n#define DSSPEAKER_GEOMETRY_MIN      0x00000005  //   5 degrees\n#define DSSPEAKER_GEOMETRY_NARROW   0x0000000A  //  10 degrees\n#define DSSPEAKER_GEOMETRY_WIDE     0x00000014  //  20 degrees\n#define DSSPEAKER_GEOMETRY_MAX      0x000000B4  // 180 degrees\n\n#define DSSPEAKER_COMBINED(c, g)    ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16))\n#define DSSPEAKER_CONFIG(a)         ((BYTE)(a))\n#define DSSPEAKER_GEOMETRY(a)       ((BYTE)(((DWORD)(a) >> 16) & 0x00FF))\n\n#define DSBCAPS_PRIMARYBUFFER       0x00000001\n#define DSBCAPS_STATIC              0x00000002\n#define DSBCAPS_LOCHARDWARE         0x00000004\n#define DSBCAPS_LOCSOFTWARE         0x00000008\n#define DSBCAPS_CTRL3D              0x00000010\n#define DSBCAPS_CTRLFREQUENCY       0x00000020\n#define DSBCAPS_CTRLPAN             0x00000040\n#define DSBCAPS_CTRLVOLUME          0x00000080\n#define DSBCAPS_CTRLPOSITIONNOTIFY  0x00000100\n#define DSBCAPS_CTRLFX              0x00000200\n#define DSBCAPS_STICKYFOCUS         0x00004000\n#define DSBCAPS_GLOBALFOCUS         0x00008000\n#define DSBCAPS_GETCURRENTPOSITION2 0x00010000\n#define DSBCAPS_MUTE3DATMAXDISTANCE 0x00020000\n#define DSBCAPS_LOCDEFER            0x00040000\n#if (DIRECTSOUND_VERSION >= 0x1000)\n    // Force GetCurrentPosition() to return a buffer's true play position;\n    // unmodified by aids to enhance backward compatibility.\n    #define DSBCAPS_TRUEPLAYPOSITION    0x00080000\n#endif\n\n#define DSBPLAY_LOOPING             0x00000001\n#define DSBPLAY_LOCHARDWARE         0x00000002\n#define DSBPLAY_LOCSOFTWARE         0x00000004\n#define DSBPLAY_TERMINATEBY_TIME    0x00000008\n#define DSBPLAY_TERMINATEBY_DISTANCE    0x000000010\n#define DSBPLAY_TERMINATEBY_PRIORITY    0x000000020\n\n#define DSBSTATUS_PLAYING           0x00000001\n#define DSBSTATUS_BUFFERLOST        0x00000002\n#define DSBSTATUS_LOOPING           0x00000004\n#define DSBSTATUS_LOCHARDWARE       0x00000008\n#define DSBSTATUS_LOCSOFTWARE       0x00000010\n#define DSBSTATUS_TERMINATED        0x00000020\n\n#define DSBLOCK_FROMWRITECURSOR     0x00000001\n#define DSBLOCK_ENTIREBUFFER        0x00000002\n\n#define DSBFREQUENCY_ORIGINAL       0\n#define DSBFREQUENCY_MIN            100\n#if DIRECTSOUND_VERSION >= 0x0900\n#define DSBFREQUENCY_MAX            200000\n#else\n#define DSBFREQUENCY_MAX            100000\n#endif\n\n#define DSBPAN_LEFT                 -10000\n#define DSBPAN_CENTER               0\n#define DSBPAN_RIGHT                10000\n\n#define DSBVOLUME_MIN               -10000\n#define DSBVOLUME_MAX               0\n\n#define DSBSIZE_MIN                 4\n#define DSBSIZE_MAX                 0x0FFFFFFF\n#define DSBSIZE_FX_MIN              150  // NOTE: Milliseconds, not bytes\n\n#define DSBNOTIFICATIONS_MAX        100000UL\n\n#define DS3DMODE_NORMAL             0x00000000\n#define DS3DMODE_HEADRELATIVE       0x00000001\n#define DS3DMODE_DISABLE            0x00000002\n\n#define DS3D_IMMEDIATE              0x00000000\n#define DS3D_DEFERRED               0x00000001\n\n#define DS3D_MINDISTANCEFACTOR      FLT_MIN\n#define DS3D_MAXDISTANCEFACTOR      FLT_MAX\n#define DS3D_DEFAULTDISTANCEFACTOR  1.0f\n\n#define DS3D_MINROLLOFFFACTOR       0.0f\n#define DS3D_MAXROLLOFFFACTOR       10.0f\n#define DS3D_DEFAULTROLLOFFFACTOR   1.0f\n\n#define DS3D_MINDOPPLERFACTOR       0.0f\n#define DS3D_MAXDOPPLERFACTOR       10.0f\n#define DS3D_DEFAULTDOPPLERFACTOR   1.0f\n\n#define DS3D_DEFAULTMINDISTANCE     1.0f\n#define DS3D_DEFAULTMAXDISTANCE     1000000000.0f\n\n#define DS3D_MINCONEANGLE           0\n#define DS3D_MAXCONEANGLE           360\n#define DS3D_DEFAULTCONEANGLE       360\n\n#define DS3D_DEFAULTCONEOUTSIDEVOLUME DSBVOLUME_MAX\n\n// IDirectSoundCapture attributes\n\n#define DSCCAPS_EMULDRIVER          DSCAPS_EMULDRIVER\n#define DSCCAPS_CERTIFIED           DSCAPS_CERTIFIED\n#define DSCCAPS_MULTIPLECAPTURE     0x00000001\n\n// IDirectSoundCaptureBuffer attributes\n\n#define DSCBCAPS_WAVEMAPPED         0x80000000\n\n#if DIRECTSOUND_VERSION >= 0x0800\n#define DSCBCAPS_CTRLFX             0x00000200\n#endif\n\n\n#define DSCBLOCK_ENTIREBUFFER       0x00000001\n\n#define DSCBSTATUS_CAPTURING        0x00000001\n#define DSCBSTATUS_LOOPING          0x00000002\n\n#define DSCBSTART_LOOPING           0x00000001\n\n#define DSBPN_OFFSETSTOP            0xFFFFFFFF\n\n#define DS_CERTIFIED                0x00000000\n#define DS_UNCERTIFIED              0x00000001\n\n\n//\n// Flags for the I3DL2 effects\n//\n\n//\n// I3DL2 Material Presets\n//\n\nenum\n{\n    DSFX_I3DL2_MATERIAL_PRESET_SINGLEWINDOW,\n    DSFX_I3DL2_MATERIAL_PRESET_DOUBLEWINDOW,\n    DSFX_I3DL2_MATERIAL_PRESET_THINDOOR,\n    DSFX_I3DL2_MATERIAL_PRESET_THICKDOOR,\n    DSFX_I3DL2_MATERIAL_PRESET_WOODWALL,\n    DSFX_I3DL2_MATERIAL_PRESET_BRICKWALL,\n    DSFX_I3DL2_MATERIAL_PRESET_STONEWALL,\n    DSFX_I3DL2_MATERIAL_PRESET_CURTAIN\n};\n\n#define I3DL2_MATERIAL_PRESET_SINGLEWINDOW    -2800,0.71f\n#define I3DL2_MATERIAL_PRESET_DOUBLEWINDOW    -5000,0.40f\n#define I3DL2_MATERIAL_PRESET_THINDOOR        -1800,0.66f\n#define I3DL2_MATERIAL_PRESET_THICKDOOR       -4400,0.64f\n#define I3DL2_MATERIAL_PRESET_WOODWALL        -4000,0.50f\n#define I3DL2_MATERIAL_PRESET_BRICKWALL       -5000,0.60f\n#define I3DL2_MATERIAL_PRESET_STONEWALL       -6000,0.68f\n#define I3DL2_MATERIAL_PRESET_CURTAIN         -1200,0.15f\n\nenum\n{\n    DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_CITY,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL,\n    DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE\n};\n\n//\n// I3DL2 Reverberation Presets Values\n//\n\n#define I3DL2_ENVIRONMENT_PRESET_DEFAULT         -1000, -100, 0.0f, 1.49f, 0.83f, -2602, 0.007f,   200, 0.011f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_GENERIC         -1000, -100, 0.0f, 1.49f, 0.83f, -2602, 0.007f,   200, 0.011f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_PADDEDCELL      -1000,-6000, 0.0f, 0.17f, 0.10f, -1204, 0.001f,   207, 0.002f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_ROOM            -1000, -454, 0.0f, 0.40f, 0.83f, -1646, 0.002f,    53, 0.003f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_BATHROOM        -1000,-1200, 0.0f, 1.49f, 0.54f,  -370, 0.007f,  1030, 0.011f, 100.0f,  60.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_LIVINGROOM      -1000,-6000, 0.0f, 0.50f, 0.10f, -1376, 0.003f, -1104, 0.004f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_STONEROOM       -1000, -300, 0.0f, 2.31f, 0.64f,  -711, 0.012f,    83, 0.017f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_AUDITORIUM      -1000, -476, 0.0f, 4.32f, 0.59f,  -789, 0.020f,  -289, 0.030f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_CONCERTHALL     -1000, -500, 0.0f, 3.92f, 0.70f, -1230, 0.020f,    -2, 0.029f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_CAVE            -1000,    0, 0.0f, 2.91f, 1.30f,  -602, 0.015f,  -302, 0.022f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_ARENA           -1000, -698, 0.0f, 7.24f, 0.33f, -1166, 0.020f,    16, 0.030f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_HANGAR          -1000,-1000, 0.0f,10.05f, 0.23f,  -602, 0.020f,   198, 0.030f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY -1000,-4000, 0.0f, 0.30f, 0.10f, -1831, 0.002f, -1630, 0.030f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_HALLWAY         -1000, -300, 0.0f, 1.49f, 0.59f, -1219, 0.007f,   441, 0.011f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR   -1000, -237, 0.0f, 2.70f, 0.79f, -1214, 0.013f,   395, 0.020f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_ALLEY           -1000, -270, 0.0f, 1.49f, 0.86f, -1204, 0.007f,    -4, 0.011f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_FOREST          -1000,-3300, 0.0f, 1.49f, 0.54f, -2560, 0.162f,  -613, 0.088f,  79.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_CITY            -1000, -800, 0.0f, 1.49f, 0.67f, -2273, 0.007f, -2217, 0.011f,  50.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_MOUNTAINS       -1000,-2500, 0.0f, 1.49f, 0.21f, -2780, 0.300f, -2014, 0.100f,  27.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_QUARRY          -1000,-1000, 0.0f, 1.49f, 0.83f,-10000, 0.061f,   500, 0.025f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_PLAIN           -1000,-2000, 0.0f, 1.49f, 0.50f, -2466, 0.179f, -2514, 0.100f,  21.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_PARKINGLOT      -1000,    0, 0.0f, 1.65f, 1.50f, -1363, 0.008f, -1153, 0.012f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_SEWERPIPE       -1000,-1000, 0.0f, 2.81f, 0.14f,   429, 0.014f,   648, 0.021f,  80.0f,  60.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_UNDERWATER      -1000,-4000, 0.0f, 1.49f, 0.10f,  -449, 0.007f,  1700, 0.011f, 100.0f, 100.0f, 5000.0f\n\n//\n// Examples simulating 'musical' reverb presets\n//\n// Name       Decay time   Description\n// Small Room    1.1s      A small size room with a length of 5m or so.\n// Medium Room   1.3s      A medium size room with a length of 10m or so.\n// Large Room    1.5s      A large size room suitable for live performances.\n// Medium Hall   1.8s      A medium size concert hall.\n// Large Hall    1.8s      A large size concert hall suitable for a full orchestra.\n// Plate         1.3s      A plate reverb simulation.\n//\n\n#define I3DL2_ENVIRONMENT_PRESET_SMALLROOM       -1000, -600, 0.0f, 1.10f, 0.83f,  -400, 0.005f,   500, 0.010f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM      -1000, -600, 0.0f, 1.30f, 0.83f, -1000, 0.010f,  -200, 0.020f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_LARGEROOM       -1000, -600, 0.0f, 1.50f, 0.83f, -1600, 0.020f, -1000, 0.040f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL      -1000, -600, 0.0f, 1.80f, 0.70f, -1300, 0.015f,  -800, 0.030f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_LARGEHALL       -1000, -600, 0.0f, 1.80f, 0.70f, -2000, 0.030f, -1400, 0.060f, 100.0f, 100.0f, 5000.0f\n#define I3DL2_ENVIRONMENT_PRESET_PLATE           -1000, -200, 0.0f, 1.30f, 0.90f,     0, 0.002f,     0, 0.010f, 100.0f,  75.0f, 5000.0f\n\n//\n// DirectSound3D Algorithms\n//\n\n// Default DirectSound3D algorithm {00000000-0000-0000-0000-000000000000}\n#define DS3DALG_DEFAULT GUID_NULL\n\n// No virtualization (Pan3D) {C241333F-1C1B-11d2-94F5-00C04FC28ACA}\nDEFINE_GUID(DS3DALG_NO_VIRTUALIZATION, 0xc241333f, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca);\n\n// High-quality HRTF algorithm {C2413340-1C1B-11d2-94F5-00C04FC28ACA}\nDEFINE_GUID(DS3DALG_HRTF_FULL, 0xc2413340, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca);\n\n// Lower-quality HRTF algorithm {C2413342-1C1B-11d2-94F5-00C04FC28ACA}\nDEFINE_GUID(DS3DALG_HRTF_LIGHT, 0xc2413342, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca);\n\n\n#if DIRECTSOUND_VERSION >= 0x0800\n\n//\n// DirectSound Internal Effect Algorithms\n//\n\n\n// Gargle {DAFD8210-5711-4B91-9FE3-F75B7AE279BF}\nDEFINE_GUID(GUID_DSFX_STANDARD_GARGLE, 0xdafd8210, 0x5711, 0x4b91, 0x9f, 0xe3, 0xf7, 0x5b, 0x7a, 0xe2, 0x79, 0xbf);\n\n// Chorus {EFE6629C-81F7-4281-BD91-C9D604A95AF6}\nDEFINE_GUID(GUID_DSFX_STANDARD_CHORUS, 0xefe6629c, 0x81f7, 0x4281, 0xbd, 0x91, 0xc9, 0xd6, 0x04, 0xa9, 0x5a, 0xf6);\n\n// Flanger {EFCA3D92-DFD8-4672-A603-7420894BAD98}\nDEFINE_GUID(GUID_DSFX_STANDARD_FLANGER, 0xefca3d92, 0xdfd8, 0x4672, 0xa6, 0x03, 0x74, 0x20, 0x89, 0x4b, 0xad, 0x98);\n\n// Echo/Delay {EF3E932C-D40B-4F51-8CCF-3F98F1B29D5D}\nDEFINE_GUID(GUID_DSFX_STANDARD_ECHO, 0xef3e932c, 0xd40b, 0x4f51, 0x8c, 0xcf, 0x3f, 0x98, 0xf1, 0xb2, 0x9d, 0x5d);\n\n// Distortion {EF114C90-CD1D-484E-96E5-09CFAF912A21}\nDEFINE_GUID(GUID_DSFX_STANDARD_DISTORTION, 0xef114c90, 0xcd1d, 0x484e, 0x96, 0xe5, 0x09, 0xcf, 0xaf, 0x91, 0x2a, 0x21);\n\n// Compressor/Limiter {EF011F79-4000-406D-87AF-BFFB3FC39D57}\nDEFINE_GUID(GUID_DSFX_STANDARD_COMPRESSOR, 0xef011f79, 0x4000, 0x406d, 0x87, 0xaf, 0xbf, 0xfb, 0x3f, 0xc3, 0x9d, 0x57);\n\n// Parametric Equalization {120CED89-3BF4-4173-A132-3CB406CF3231}\nDEFINE_GUID(GUID_DSFX_STANDARD_PARAMEQ, 0x120ced89, 0x3bf4, 0x4173, 0xa1, 0x32, 0x3c, 0xb4, 0x06, 0xcf, 0x32, 0x31);\n\n// I3DL2 Environmental Reverberation: Reverb (Listener) Effect {EF985E71-D5C7-42D4-BA4D-2D073E2E96F4}\nDEFINE_GUID(GUID_DSFX_STANDARD_I3DL2REVERB, 0xef985e71, 0xd5c7, 0x42d4, 0xba, 0x4d, 0x2d, 0x07, 0x3e, 0x2e, 0x96, 0xf4);\n\n// Waves Reverberation {87FC0268-9A55-4360-95AA-004A1D9DE26C}\nDEFINE_GUID(GUID_DSFX_WAVES_REVERB, 0x87fc0268, 0x9a55, 0x4360, 0x95, 0xaa, 0x00, 0x4a, 0x1d, 0x9d, 0xe2, 0x6c);\n\n//\n// DirectSound Capture Effect Algorithms\n//\n\n\n// Acoustic Echo Canceller {BF963D80-C559-11D0-8A2B-00A0C9255AC1}\n// Matches KSNODETYPE_ACOUSTIC_ECHO_CANCEL in ksmedia.h\nDEFINE_GUID(GUID_DSCFX_CLASS_AEC, 0xBF963D80L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1);\n\n// Microsoft AEC {CDEBB919-379A-488a-8765-F53CFD36DE40}\nDEFINE_GUID(GUID_DSCFX_MS_AEC, 0xcdebb919, 0x379a, 0x488a, 0x87, 0x65, 0xf5, 0x3c, 0xfd, 0x36, 0xde, 0x40);\n\n// System AEC {1C22C56D-9879-4f5b-A389-27996DDC2810}\nDEFINE_GUID(GUID_DSCFX_SYSTEM_AEC, 0x1c22c56d, 0x9879, 0x4f5b, 0xa3, 0x89, 0x27, 0x99, 0x6d, 0xdc, 0x28, 0x10);\n\n// Noise Supression {E07F903F-62FD-4e60-8CDD-DEA7236665B5}\n// Matches KSNODETYPE_NOISE_SUPPRESS in post Windows ME DDK's ksmedia.h\nDEFINE_GUID(GUID_DSCFX_CLASS_NS, 0xe07f903f, 0x62fd, 0x4e60, 0x8c, 0xdd, 0xde, 0xa7, 0x23, 0x66, 0x65, 0xb5);\n\n// Microsoft Noise Suppresion {11C5C73B-66E9-4ba1-A0BA-E814C6EED92D}\nDEFINE_GUID(GUID_DSCFX_MS_NS, 0x11c5c73b, 0x66e9, 0x4ba1, 0xa0, 0xba, 0xe8, 0x14, 0xc6, 0xee, 0xd9, 0x2d);\n\n// System Noise Suppresion {5AB0882E-7274-4516-877D-4EEE99BA4FD0}\nDEFINE_GUID(GUID_DSCFX_SYSTEM_NS, 0x5ab0882e, 0x7274, 0x4516, 0x87, 0x7d, 0x4e, 0xee, 0x99, 0xba, 0x4f, 0xd0);\n\n#endif // DIRECTSOUND_VERSION >= 0x0800\n\n#endif // __DSOUND_INCLUDED__\n\n\n\n#ifdef __cplusplus\n};\n#endif // __cplusplus\n\n"
  },
  {
    "path": "Include/dxdiag.h",
    "content": "/*==========================================================================;\n *\n *  Copyright (C) Microsoft Corporation.  All Rights Reserved.\n *\n *  File:       dxdiag.h\n *  Content:    DirectX Diagnostic Tool include file\n *\n ****************************************************************************/\n\n#ifndef _DXDIAG_H_\n#define _DXDIAG_H_\n\n#include <ole2.h>      // for DECLARE_INTERFACE_ and HRESULT\n\n// This identifier is passed to IDxDiagProvider::Initialize in order to ensure that an\n// application was built against the correct header files. This number is\n// incremented whenever a header (or other) change would require applications\n// to be rebuilt. If the version doesn't match, IDxDiagProvider::Initialize will fail.\n// (The number itself has no meaning.)\n#define DXDIAG_DX9_SDK_VERSION 111\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/****************************************************************************\n *\n * DxDiag Errors\n *\n ****************************************************************************/\n#define DXDIAG_E_INSUFFICIENT_BUFFER       ((HRESULT)0x8007007AL)  // HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)\n\n\n/****************************************************************************\n *\n * DxDiag CLSIDs\n *\n ****************************************************************************/\n\n// {A65B8071-3BFE-4213-9A5B-491DA4461CA7}\nDEFINE_GUID(CLSID_DxDiagProvider,\n0xA65B8071, 0x3BFE, 0x4213, 0x9A, 0x5B, 0x49, 0x1D, 0xA4, 0x46, 0x1C, 0xA7);\n\n\n/****************************************************************************\n *\n * DxDiag Interface IIDs\n *\n ****************************************************************************/\n\n// {9C6B4CB0-23F8-49CC-A3ED-45A55000A6D2}\nDEFINE_GUID(IID_IDxDiagProvider,\n0x9C6B4CB0, 0x23F8, 0x49CC, 0xA3, 0xED, 0x45, 0xA5, 0x50, 0x00, 0xA6, 0xD2);\n\n// {0x7D0F462F-0x4064-0x4862-BC7F-933E5058C10F}\nDEFINE_GUID(IID_IDxDiagContainer,\n0x7D0F462F, 0x4064, 0x4862, 0xBC, 0x7F, 0x93, 0x3E, 0x50, 0x58, 0xC1, 0x0F);\n\n\n/****************************************************************************\n *\n * DxDiag Interface Pointer definitions\n *\n ****************************************************************************/\n\ntypedef struct IDxDiagProvider *LPDXDIAGPROVIDER, *PDXDIAGPROVIDER;\n\ntypedef struct IDxDiagContainer *LPDXDIAGCONTAINER, *PDXDIAGCONTAINER;\n\n\n/****************************************************************************\n *\n * DxDiag Structures\n *\n ****************************************************************************/\n\ntypedef struct _DXDIAG_INIT_PARAMS\n{\n    DWORD   dwSize;                 // Size of this structure.\n    DWORD   dwDxDiagHeaderVersion;  // Pass in DXDIAG_DX9_SDK_VERSION.  This verifies\n                                    // the header and dll are correctly matched.\n    BOOL    bAllowWHQLChecks;       // If true, allow dxdiag to check if drivers are\n                                    // digital signed as logo'd by WHQL which may\n                                    // connect via internet to update WHQL certificates.\n    VOID*   pReserved;              // Reserved. Must be NULL.\n} DXDIAG_INIT_PARAMS;\n\n\n/****************************************************************************\n *\n * DxDiag Application Interfaces\n *\n ****************************************************************************/\n\n//\n// COM definition for IDxDiagProvider\n//\n#undef INTERFACE                // External COM Implementation\n#define INTERFACE IDxDiagProvider\nDECLARE_INTERFACE_(IDxDiagProvider,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)               (THIS_ REFIID riid, LPVOID *ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)                (THIS) PURE;\n    STDMETHOD_(ULONG,Release)               (THIS) PURE;\n   \n    /*** IDxDiagProvider methods ***/\n    STDMETHOD(Initialize)                   (THIS_ DXDIAG_INIT_PARAMS* pParams) PURE;\n    STDMETHOD(GetRootContainer)             (THIS_ IDxDiagContainer **ppInstance) PURE;\n};\n\n\n//\n// COM definition for IDxDiagContainer\n//\n#undef INTERFACE                // External COM Implementation\n#define INTERFACE IDxDiagContainer\nDECLARE_INTERFACE_(IDxDiagContainer,IUnknown)\n{\n    /*** IUnknown methods ***/\n    STDMETHOD(QueryInterface)               (THIS_ REFIID riid, LPVOID *ppvObj) PURE;\n    STDMETHOD_(ULONG,AddRef)                (THIS) PURE;\n    STDMETHOD_(ULONG,Release)               (THIS) PURE;\n   \n    /*** IDxDiagContainer methods ***/\n    STDMETHOD(GetNumberOfChildContainers)   (THIS_ DWORD *pdwCount) PURE;\n    STDMETHOD(EnumChildContainerNames)      (THIS_ DWORD dwIndex, LPWSTR pwszContainer, DWORD cchContainer) PURE;\n    STDMETHOD(GetChildContainer)            (THIS_ LPCWSTR pwszContainer, IDxDiagContainer **ppInstance) PURE;  \n    STDMETHOD(GetNumberOfProps)             (THIS_ DWORD *pdwCount) PURE;\n    STDMETHOD(EnumPropNames)                (THIS_ DWORD dwIndex, LPWSTR pwszPropName, DWORD cchPropName) PURE;\n    STDMETHOD(GetProp)                      (THIS_ LPCWSTR pwszPropName, VARIANT *pvarProp) PURE;\n};\n\n\n/****************************************************************************\n *\n * DxDiag application interface macros\n *\n ****************************************************************************/\n\n#if !defined(__cplusplus) || defined(CINTERFACE)\n\n#define IDxDiagProvider_QueryInterface(p,a,b)                   (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDxDiagProvider_AddRef(p)                               (p)->lpVtbl->AddRef(p)\n#define IDxDiagProvider_Release(p)                              (p)->lpVtbl->Release(p)\n#define IDxDiagProvider_Initialize(p,a,b)                       (p)->lpVtbl->Initialize(p,a,b)\n#define IDxDiagProvider_GetRootContainer(p,a)                   (p)->lpVtbl->GetRootContainer(p,a)\n\n#define IDxDiagContainer_QueryInterface(p,a,b)                  (p)->lpVtbl->QueryInterface(p,a,b)\n#define IDxDiagContainer_AddRef(p)                              (p)->lpVtbl->AddRef(p)\n#define IDxDiagContainer_Release(p)                             (p)->lpVtbl->Release(p)\n#define IDxDiagContainer_GetNumberOfChildContainers(p,a)        (p)->lpVtbl->GetNumberOfChildContainers(p,a)\n#define IDxDiagContainer_EnumChildContainerNames(p,a,b,c)       (p)->lpVtbl->EnumChildContainerNames(p,a,b,c)\n#define IDxDiagContainer_GetChildContainer(p,a,b)               (p)->lpVtbl->GetChildContainer(p,a,b)\n#define IDxDiagContainer_GetNumberOfProps(p,a)                  (p)->lpVtbl->GetNumberOfProps(p,a)\n#define IDxDiagContainer_EnumProps(p,a,b)                       (p)->lpVtbl->EnumProps(p,a,b,c)\n#define IDxDiagContainer_GetProp(p,a,b)                         (p)->lpVtbl->GetProp(p,a,b)\n\n#else /* C++ */\n\n#define IDxDiagProvider_QueryInterface(p,a,b)                   (p)->QueryInterface(p,a,b)\n#define IDxDiagProvider_AddRef(p)                               (p)->AddRef(p)\n#define IDxDiagProvider_Release(p)                              (p)->Release(p)\n#define IDxDiagProvider_Initialize(p,a,b)                       (p)->Initialize(p,a,b)\n#define IDxDiagProvider_GetRootContainer(p,a)                   (p)->GetRootContainer(p,a)\n\n#define IDxDiagContainer_QueryInterface(p,a,b)                  (p)->QueryInterface(p,a,b)\n#define IDxDiagContainer_AddRef(p)                              (p)->AddRef(p)\n#define IDxDiagContainer_Release(p)                             (p)->Release(p)\n#define IDxDiagContainer_GetNumberOfChildContainers(p,a)        (p)->GetNumberOfChildContainers(p,a)\n#define IDxDiagContainer_EnumChildContainerNames(p,a,b,c)       (p)->EnumChildContainerNames(p,a,b,c)\n#define IDxDiagContainer_GetChildContainer(p,a,b)               (p)->GetChildContainer(p,a,b)\n#define IDxDiagContainer_GetNumberOfProps(p,a)                  (p)->GetNumberOfProps(p,a)\n#define IDxDiagContainer_EnumProps(p,a,b)                       (p)->EnumProps(p,a,b,c)\n#define IDxDiagContainer_GetProp(p,a,b)                         (p)->GetProp(p,a,b)\n\n#endif\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* _DXDIAG_H_ */\n"
  },
  {
    "path": "Include/dxwnd.h",
    "content": "#include <ddraw.h>\n//#include \"dxwcore.hpp\"\n\n#define DXW_IDLE\t\t0\n#define DXW_ACTIVE\t\t1\n#define DXW_RUNNING\t\t2\n\n#define MAXTARGETS\t\t\t256\n\n#define ONEPIXELFIX 1 \n#define HOOKDDRAWNONE 12\n\n// first flags DWORD dwFlags1:\n#define UNNOTIFY\t\t\t0x00000001 \n#define EMULATESURFACE\t\t0x00000002\n#define CLIPCURSOR\t\t \t0x00000004 // Force cursor clipping within window\n#define NEEDADMINCAPS\t\t0x00000008 // DxWnd needs administrator's privileges to hook this program\n#define HOOKDI\t\t\t\t0x00000010\n#define MODIFYMOUSE\t\t\t0x00000020\n#define HANDLEEXCEPTIONS\t0x00000040 // Handles exceptions: Div by 0 ....\n#define SAVELOAD\t\t\t0x00000080\n#define EMULATEBUFFER\t\t0x00000100\n#define HOOKDI8\t\t\t\t0x00000200\n#define BLITFROMBACKBUFFER\t0x00000400\n#define SUPPRESSCLIPPING\t0x00000800\n#define AUTOREFRESH\t\t\t0x00001000\n#define FIXWINFRAME\t\t\t0x00002000\n#define HIDEHWCURSOR\t\t0x00004000\n#define SLOWDOWN\t\t\t0x00008000 \n#define DISABLECLIPPING\t\t0x00010000\n#define LOCKWINSTYLE\t\t0x00020000\n#define MAPGDITOPRIMARY\t \t0x00040000 \n#define FIXTEXTOUT\t\t\t0x00080000\n#define KEEPCURSORWITHIN\t0x00100000\n#define USERGB565\t\t\t0x00200000\n#define SUPPRESSDXERRORS\t0x00400000 // suppresses some common dx errors (BUSY)\n#define PREVENTMAXIMIZE\t\t0x00800000 // struggle to avoid window maximize\n#define LOCKEDSURFACE\t\t0x01000000 // emulates the buffer of the primary surface when locked and written directly\n#define FIXPARENTWIN\t\t0x02000000 // fixes parent window size & position\n#define SWITCHVIDEOMEMORY \t0x04000000 // when VIDEO memory is over, switches to SYSTEM memory\n#define CLIENTREMAPPING\t\t0x08000000 // hooks ClientToRect, RectToClient, GetClientRect, GetWinRect\n#define HANDLEALTF4\t\t\t0x10000000 // forces quitting the program when receiving Alt-F4 key\n#define LOCKWINPOS\t\t\t0x20000000 // prevent the program to change its own windows properties\n#define HOOKCHILDWIN\t\t0x40000000 // hook CHILD windows to alter placement coordinates\n#define MESSAGEPROC\t\t\t0x80000000 // process peek/get messages\n\n// second flags DWORD dxw.dwFlags2:\n#define RECOVERSCREENMODE\t0x00000001 // actively set screen mode to initial state after hooking\n#define REFRESHONRESIZE\t\t0x00000002 // forces a refresh (blitting from backbuffer to primary) upon win resize\n#define BACKBUFATTACH\t\t0x00000004 // sets backbuf wxh dim. equal to primary surface so that ZBUFFER is attachable.....\n#define MODALSTYLE\t\t\t0x00000008 // window with no borders\n#define KEEPASPECTRATIO\t\t0x00000010 // when resizing, keep original aspect ratio\n#define INIT8BPP\t\t\t0x00000020 // simulate a 8BPP initial desktop setting (in GetDeviceCaps API)\n#define FORCEWINRESIZE\t\t0x00000040 // adds NCMOUSEUP/DOWN processing to the win procedure if missing\n#define INIT16BPP\t\t\t0x00000080 // simulate a 16BPP initial desktop setting (in GetDeviceCaps API)\n#define KEEPCURSORFIXED\t\t0x00000100 // inhibit SetCursorPos operation\n#define DISABLEGAMMARAMP\t0x00000200 // let the application retrieve the desktop DC (for capability queries)\n#define INDEPENDENTREFRESH\t0x00000400 // Makes automatic primary surface refresh but independently from the message loop processing\n#define FIXNCHITTEST\t\t0x00000800 // fixes WM_NCHITTEST message X,Y coordinates \n#define LIMITFPS\t\t\t0x00001000 // delays primary blit operations to limit FPS \n#define SKIPFPS\t\t\t\t0x00002000 // skips primary blit operations up to limit\n#define SHOWFPS\t\t\t\t0x00004000 // shows FPS value to status win / log / title bar\n#define HIDEMULTIMONITOR\t0x00008000 // hide multimonitor configurations: GetAdapterCount returns 1.\n#define TIMESTRETCH\t\t\t0x00010000 // make system time stretchable \n#define HOOKOPENGL\t\t\t0x00020000 // Hook OpenGL calls\n#define LOCKEDSIZE\t\t\t0x00040000 // window resizzing is not allowed\n#define SHOWHWCURSOR\t\t0x00080000 // enable hardware cursor\n#define GDISTRETCHED\t\t0x00100000 // Stretch GDI/user32 coordinates to adapt to window size\n#define SHOWFPSOVERLAY\t\t0x00200000 // shows FPS value to status win / log / screen overlay\n#define FAKEVERSION\t\t\t0x00400000 // pretends the platvorm is a given window version / subversion\n#define FULLRECTBLT\t\t\t0x00800000 // blit to primary surface using NULL source & dest rect\n#define NOPALETTEUPDATE\t\t0x01000000 // Do not refresh primary surface on palette updates\n#define SUPPRESSIME\t\t\t0x02000000 // suppress IME \n#define NOBANNER\t\t\t0x04000000 // suppress fancy logo & banneer effects \n#define WINDOWIZE\t\t\t0x08000000 // Run in a Window (default TRUE) \n#define LIMITRESOURCES\t\t0x10000000 // Limit resources to fit an old program's expectations \n#define STARTDEBUG\t\t\t0x20000000 // Start in DEBUG mode\n#define SETCOMPATIBILITY\t0x40000000 // invoke ddraw SetAppCompatData to set aero compatibility mode\n#define WIREFRAME\t\t\t0x80000000 // forces wireframe display for D3D and Glide games\n\n// third flags DWORD dxw.dwFlags3:\n#define FORCEHOOKOPENGL\t\t0x00000001 // loads OpenGL32.dll and hooks it\n#define MARKBLIT\t\t\t0x00000002 // higlights the blit to primary surface operation by surroundig the rect in color\n#define HOOKDLLS\t\t\t0x00000004 // Hook all DLLs referenced in PE\n#define SUPPRESSD3DEXT\t\t0x00000008 // Disables extended d3d APIs for Vista/Win7/Win8 platforms\n#define HOOKENABLED\t\t\t0x00000010 // Enables task hooking\n#define FIXD3DFRAME\t\t\t0x00000020 // Preserve windows frame in D3D9 programs\n#define FORCE16BPP\t\t\t0x00000040 // Forces 16BPP desktop color depth\n#define BLACKWHITE\t\t\t0x00000080 // Simulate a B&W screen monitor mapping colors to grayscales\n#define MARKLOCK\t\t\t0x00000100 // higlights the locked/unlocked surfaces by surroundig the rect in color\n#define SINGLEPROCAFFINITY\t0x00000200 // Set Process Affinity to a single core\n#define EMULATEREGISTRY\t\t0x00000400 // Emulate registry api to read extra keys\n#define CDROMDRIVETYPE\t\t0x00000800 // Pretends that GetDriveType() always returns DRIVE_CDROM\n#define NOWINDOWMOVE\t\t0x00001000 // Do not try to update window position & size on D3D rendering\n#define FORCECLIPPER\t\t0x00002000 // Set ddraw clipping for real primary surface and primary window - but FastBlt cannot be used!\n#define LOCKSYSCOLORS\t\t0x00004000 // Lock Sys Colors changes by SetSysColors() call\n#define GDIEMULATEDC\t\t0x00008000 // Map GDI/user32 calls to primary to a memory surface to be stretch-blitted to the primary\n#define FULLSCREENONLY\t\t0x00010000 // assume that the program is always in fullscreen mode\n#define FONTBYPASS\t\t\t0x00020000 // bypass font unsupported API\n#define MINIMALCAPS\t\t\t0x00040000 // Simulate minimal HW caps (copied from VMWare virtual screen)\n#define DEFAULTMESSAGES\t\t0x00080000 // peocess  offending messages that are typical of a window with default action\n#define BUFFEREDIOFIX\t\t0x00100000 // fix buffered IO incompatibilities between pre-Win98 and post-WinNT\n#define FILTERMESSAGES\t\t0x00200000 // ignore offending messages that are typical of a window and are hot handled by a fullscreeen app\n#define PEEKALLMESSAGES\t\t0x00400000 // force Peek-ing all sort of messages to avoid Win7 message queue saturation that leads to program halt \n#define SURFACEWARN\t\t\t0x00800000 // warn when a unclassified surface capability is met (debug only!)\n#define ANALYTICMODE\t\t0x01000000 // activate analytic mode (debug only!)\n#define FORCESHEL\t\t\t0x02000000 // Forces HEL  (DDCREATE_EMULATIONONLY)\n#define CAPMASK\t\t\t\t0x04000000 // Enable capability mask (according to ini file)\n#define COLORFIX\t\t\t0x08000000 // Win7 color fix for 8bpp paletized modes\n#define NODDRAWBLT\t\t\t0x10000000 // Suppress ddraw Blt to primary\n#define NODDRAWFLIP\t\t\t0x20000000 // Suppress ddraw Flip to primary\n#define NOGDIBLT\t\t\t0x40000000 // Suppress GDI Blt to video device\n#define NOPIXELFORMAT\t\t0x80000000 // Don't fix the pixel format for plain surfaces\n\n// fourth flags DWORD dxw.dwFlags4:\n#define NOALPHACHANNEL\t\t0x00000001 // By default, create surfaces with no DDPF_ALPHAPIXELS capability\n#define SUPPRESSCHILD\t\t0x00000002 // suppress child process generation (CreateProcessA, ...?)\n#define FIXREFCOUNTER\t\t0x00000004 // fixes the reference counter for the main directdraw session (the one connected to primary surfaces)\n#define SHOWTIMESTRETCH\t\t0x00000008 // Shows time stretching multiplier on screen overlay\n#define ZBUFFERCLEAN\t\t0x00000010 // Clean ZBUFFER upon (fix for \"Star Wars  Ep. I - Racer\")\n#define ZBUFFER0CLEAN\t\t0x00000020 // Clean ZBUFFER upon (fix for \"Star Wars  Ep. I - Racer\")\n#define ZBUFFERALWAYS\t\t0x00000040 // Forces ZBUFFER D3DCMP_ALWAYS condition to show all planes....\n#define DISABLEFOGGING\t\t0x00000080 // Disable D3D fogging\n#define NOPOWER2FIX\t\t\t0x00000100 // Handle textures whose size is not a power of 2 (32, 64, 128 ...)\n#define NOPERFCOUNTER\t\t0x00000200 // Disables the GetPerfCounter performance metrics API,as if it was not supported....\n#define BILINEAR2XFILTER\t0x00000400 // attempt to smooth low-res graphic by applying simplified bilinear filtering in emulation mode\n#define INTERCEPTRDTSC\t\t0x00000800 // Intercapts RDTSC opcodes to hook at assembly level\n#define LIMITSCREENRES\t\t0x00001000 // Limit available screen resolution up to defined maximum\n#define NOFILLRECT\t\t\t0x00002000 // Suppress FillRect calls\n#define HOOKGLIDE\t\t\t0x00004000 // Hook glide calls\n#define HIDEDESKTOP\t\t\t0x00008000 // Hide desktop background\n#define STRETCHTIMERS\t\t0x00010000 // Enables timers stretching when TIMESTRETCH is on\n#define NOFLIPEMULATION\t\t0x00020000 // Compensate the effect of Flip-ping through Blt operations\n#define NOTEXTURES\t\t\t0x00040000 // Disabled (whitened) textures\n#define RETURNNULLREF\t\t0x00080000 // IDirectDraw::Release and IDDrawSurface::Release will always return 0 ref. counter\n#define FINETIMING\t\t\t0x00100000 // Fine timeslider coarse, by 10% steps ranging from about :2 to x2 \n#define NATIVERES\t\t\t0x00200000 // Supports hardware native resolutions (depending on your PC)\n#define SUPPORTSVGA\t\t\t0x00400000 // Supports SVGA standard resolutions\n#define SUPPORTHDTV\t\t\t0x00800000 // Supports HDTV standard resolutions\n#define RELEASEMOUSE\t\t0x01000000 // GetCursorPos returns centered coordinates when the mouse cursor is moved outside the window\n#define ENABLETIMEFREEZE\t0x02000000 // Enable Time Freeze functionality and toggle key\n#define HOTPATCH\t\t\t0x04000000 // Use hot patching technique to handle obfuscated IAT\n#define ENABLEHOTKEYS\t\t0x08000000 // Enables hot keys\n#define HOTPATCHALWAYS\t\t0x10000000 // Force hot patching to every call\n#define NOD3DRESET\t\t\t0x20000000 // Disables D3D8/9 D3DDevice::Reset method\n#define OVERRIDEREGISTRY\t0x40000000 // same as EMULATEREGISTRY, but fake keys takeprecedence\n#define HIDECDROMEMPTY\t\t0x80000000 // hide empty CDROM drivers\n\n// fifth flags DWORD dxw.dwFlags5:\n#define DIABLOTWEAK\t\t\t0x00000001 // ... ??? ...\n#define CLEARTARGET\t\t\t0x00000002 // forces a D3D clean on target surface upon each BeginScene invocation\n#define NOWINPOSCHANGES\t\t0x00000004 // suppress WM_WINDOWPOSCHANGING/CHANGED messages (RollerCoaster Tycoon...)\n#define ANSIWIDE\t\t\t0x00000008 // by default uses Widechar version of API intead od ANSI\n#define NOBLT\t\t\t\t0x00000010 // suppress blit to primary surface\n#define USELASTCORE\t\t\t0x00000020 // Same as single core process affinity, but using the last availabe core instead of first one\n#define DOFASTBLT\t\t\t0x00000040 // use FastBlt to primary surface\n#define AEROBOOST\t\t\t0x00000080 // Optimize for AERO environment: does all stretching in sysmemory surfaces\n#define QUARTERBLT\t\t\t0x00000100 // Consider a screen update (to count or limit FPS) only  blt operations bigger than a quarter of the whole primary surface\n#define NOIMAGEHLP\t\t\t0x00000200 // Interceptd Imagehlp.dll unsupported calls (used by \"the 5th element\")\n#define BILINEARFILTER\t\t0x00000400 // experimental bilinear filtering\n#define REPLACEPRIVOPS\t\t0x00000800 // replace privileged opcodes, such as IN (Ubik)\n#define REMAPMCI\t\t\t0x00001000 // remap MCI calls coordinates in mciSendString\n#define TEXTUREHIGHLIGHT\t0x00002000 // highlight textures with random color & grid\n#define TEXTUREDUMP\t\t\t0x00004000 // dump textures to file system as bmp files\n#define TEXTUREHACK\t\t\t0x00008000 // load (replace) hacked textures from file system (bmp files)\n#define TEXTURETRANSP\t\t0x00010000 // transparent textures (unimplemented)\n#define NORMALIZEPERFCOUNT\t0x00020000 // Normalize Performance Counter to a Performance Frequency of 1MHz\n#define HYBRIDMODE\t\t\t0x00040000 // ?????\n#define GDICOLORCONV\t\t0x00080000 // do color conversion using GDI\n#define INJECTSON\t\t\t0x00100000 // when starting a son process, inject dxwnd.dll at the beginning of execution\n#define ENABLESONHOOK\t\t0x00200000 // forward hooking capability to son processes\n#define FREEZEINJECTEDSON\t0x00400000 // BEWARE!!!! you must know what you're doing. Leaves the injected son in an endless loop \n#define GDIMODE\t\t\t\t0x00800000 // Use GDI to both stretch and color conversion. It seems faster....\n#define CENTERTOWIN\t\t\t0x01000000 // do NOT stretch the image to the whole window client area, but center to it.\n#define STRESSRESOURCES\t\t0x02000000 // simulates a lack of resources condition, for testing (debug opt.)\n#define MESSAGEPUMP\t\t\t0x04000000 // inserts a \"message pump\" loop between repeated operation that may stop the task on Win7 and greater\n#define TEXTUREFORMAT\t\t0x08000000 // Apply virtual pixel format to texture surfaces without DDSD_PIXELFORMAT attribute\n#define DEINTERLACE\t\t\t0x10000000 // Deinterlace movies / screens that have black odd lines by interpolating even lines\n#define LOCKRESERVEDPALETTE 0x20000000 // lock the reserved palette entries (usually 20: 0-9 and 246-255)\n#define UNLOCKZORDER\t\t0x40000000 // Inhibit attempts to keep the main win on top of ZORDER by stripping BringWindowToTop and SetForegroundWindow calls\n#define EASPORTSHACK\t\t0X80000000 // Hack to intercept and neutralize some of the hooks set internally by EA Sports games\n\n// sixth flags DWORD dxw.dwFlags6:\n#define FORCESWAPEFFECT\t\t0x00000001 // in D3D8/9, forces the SwapEffect value in CreateDevice/Reset operations\n#define LEGACYALLOC\t\t\t0x00000002 // reserve legacy memory segments\n#define NODESTROYWINDOW\t\t0x00000004 // suppress the main window destruction\n#define NOMOVIES\t\t\t0x00000008 // suppress MCI Movies\n#define SUPPRESSRELEASE\t\t0x00000010 // Avoid releasing critical emulated surfaces - the backbuffer\n#define FIXMOVIESCOLOR\t\t0x00000020 // Fixes vfw movies color depth forcing the virtual value \n#define WOW64REGISTRY\t\t0x00000040 // Sets KEY_WOW64_64KEY registry flag\n#define DISABLEMAXWINMODE\t0x00000080 // invoke ddraw SetAppCompatData(12,0) to set DisableMaxWindowedMode\n#define FIXPITCH\t\t\t0x00000100 // Fixes surface filling made with no concern to actual pitch value\n#define POWER2WIDTH\t\t\t0x00000200 // Fixes .....\n#define HIDETASKBAR\t\t\t0x00000400 // Hides taskbar & start menu during game execution\n#define ACTIVATEAPP\t\t\t0x00000800 // sends WM_ACTIVATEAPP message after every WM_WINPOSCHANGED message\n#define NOSYSMEMPRIMARY\t\t0x00001000 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on emulated primary surface\n#define NOSYSMEMBACKBUF\t\t0x00002000 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on emulated backbuffer surface\n#define CONFIRMONCLOSE\t\t0x00004000 // on close button, ask the user before closing the window / terminating the program\n#define TERMINATEONCLOSE\t0x00008000 // on WM_CLOSE message, also terminates the program\n#define FLIPEMULATION\t\t0x00010000 // create virtual primary and backbuffer as un-attached surfaces and replace Flip with Blt\n#define SETZBUFFERBITDEPTHS\t0x00020000 // when not set, set the legacy dwZBufferBitDepths field in the directdraw capability from GetCaps()\n#define SHAREDDC\t\t\t0x00040000 // enable sharing window DC and primary surface DC\n#define WOW32REGISTRY\t\t0x00080000 // Sets KEY_WOW32_64KEY registry flag\n#define STRETCHMOVIES\t\t0x00100000 // Stretches ActiveMovie Windows to the whole window size\n#define BYPASSMCI\t\t\t0x00200000 // bypass all MCI calls returning OK.\n#define FIXPIXELZOOM\t\t0x00400000\n#define REUSEEMULATEDDC\t\t0x00800000\n#define CREATEDESKTOP\t\t0x01000000 // creates a virtual desktop window to replace the real one\n#define NOWINDOWHOOKS\t\t0x02000000 // do not intercept window callback routines\n#define SYNCPALETTE\t\t\t0x04000000 // Syncronize GDI to DDRAW palette\n#define VIRTUALJOYSTICK\t\t0x08000000 // Enables the DxWnd virtual joystick\n#define UNACQUIRE\t\t\t0x10000000 // Unacquire DirectInput devices when losing focus and acquire back when gaining focus\n#define HOOKGOGLIBS\t\t\t0x20000000 // Hook additional libraries provided by GOG with different names but same functionalities as system ones\n#define BYPASSGOGLIBS\t\t0x40000000 // Bypass GOG proxy system libraries loading directly the system libraries from the system folder\n#define EMULATERELMOUSE\t\t0x80000000 // Emulates the dinput detection of relative mouse position by keeping the mouse at the center of window and looking for movements\n\n// seventh flags DWORD dxw.dwFlags7:\n#define LIMITDDRAW\t\t\t0x00000001 // Limit the maximum available ddraw object version\n#define DISABLEDISABLEALTTAB 0x00000002 // Disables the compatibility patch that disables the Alt-Tab key and other special combinations\n#define FIXCLIPPERAREA\t\t0x00000004 // fix clipper area in ddraw & GDI shared DC mode\n#define HOOKDIRECTSOUND\t\t0x00000008 // Hook DirectSound dll\n#define HOOKSMACKW32\t\t0x00000010 // hook Smackw32 functions\n#define BLOCKPRIORITYCLASS  0x00000020 // blocks attempts to change the process priority class\n#define CPUSLOWDOWN\t\t\t0x00000040 // reduces CPU time dedicated to non time critical threads\n#define CPUMAXUSAGE\t\t\t0x00000080 // reduces CPU time to non time critical threads that consume more than the given ratio\n#define NOWINERRORS\t\t\t0x00000100 // suppress some possible window errors returning OK also in case of failure\n#define SUPPRESSOVERLAY\t\t0x00000200 // Supress ddraw overlay capabilities (moto racer 2)\n#define INIT24BPP\t\t\t0x00000400 // simulate a 24BPP initial desktop setting (in GetDeviceCaps API)\n#define INIT32BPP\t\t\t0x00000800 // simulate a 24BPP initial desktop setting (in GetDeviceCaps API)\n#define FIXGLOBALUNLOCK\t\t0x00001000 // Fix GlobalUnlock kernel32 API when it keeps returning the 1 retcode. \n#define SHOWHINTS\t\t\t0x00002000 // show configuration hints at runtime\n#define SKIPDEVTYPEHID\t\t0x00004000 // do not enumerate HID device types, some programs are not properly coded!\n#define INJECTSUSPENDED\t\t0x00008000 // Inject the suspended process while running infinite loop ad starting address\n#define SUPPRESSDIERRORS\t0x00010000 // Suppress DirectInput common errors\n#define HOOKNORUN\t\t\t0x00020000 // Hook process but don't start it from DxWnd interface\n#define FIXBINDTEXTURE\t\t0x00040000 // Fix the problems caused by the lack of glActiveTexture on some Windows OpenGL32.dll versions\n#define ENUM16BITMODES\t\t0x00080000 // Enumerates 16 bit video modes when using DirectDraw8/9::EnumAdapterModes on a Win10 OS\n#define SHAREDKEYBOARD\t\t0x00100000 // Forces DirectInput cooperative level to NONEXCLUSIVE mode for the keyboard\n#define HOOKNOUPDATE\t\t0x00200000 // Updates the original addresses when changed\n#define HOOKGLUT32\t\t\t0x00400000 // Hook glut32.dll opengl extension library\n#define INITIALRES\t\t\t0x00800000 // Set initial screen resolution accorting to sizw x sizh fields\n#define MAXIMUMRES\t\t\t0x01000000 // Set maximum screen resolution accorting to sizw x sizh fields\n#define LOCKCOLORDEPTH\t\t0x02000000 // lock ddraw color depth to current desktop value (used in SetDisplayMode)\n#define FIXSMACKLOOP\t\t0x04000000 // fix Smack loop by insert processmessage and blit between frames\n#define FIXFREELIBRARY\t\t0x08000000 // fix FreeLibrary simulating retcode 0(error) when attempting free of unallocated module\n#define ANCHORED\t\t\t0x10000000 // Anchored position & size, mo stretching or sliding is allowed\n#define CLEARTEXTUREFOURCC\t0x20000000 // Clear DDSCAPS2_FOURCC bit and makes texture load without codec\n#define NODDEXCLUSIVEMODE\t0x40000000 // Do not allow ddraw EXCLUSIVE mode also in non windowed mode\n#define COPYNOSHIMS\t\t\t0x80000000 // Create a hiden and temporary copy of the target exe so that shims are not applied\n\n// eighth flags DWORD dxw.dwFlags8:\n#define FORCEWAIT\t\t\t0x00000001 // Forces DDBLT/DDFLIP WAIT flags\n#define FORCENOWAIT\t\t\t0x00000002 // Forces DDBLT/DDFLIP NOWAIT flags\n#define FORCEVSYNC\t\t\t0x00000004 // Forces hardware VSync \n#define FORCENOVSYNC\t\t0x00000008 // Forces NO hardware VSync \n#define VSYNCSCANLINE\t\t0x00000010 // Activates WaitForVerticalBlank algorythm based on reaching a given scan line\n#define TRIMTEXTUREFORMATS\t0x00000020 // Emulates \"DirectXTrimTextureFormats\" shim to fix textures in Heavy Gear II\n#define NOHALDEVICE\t\t\t0x00000040 // Simulates a situation of lack of 3D hardware support, like in presence of remote desktop\n#define CLIPLOCKED\t\t\t0x00000080 // never destroy cursor clipper on window move events ....\n#define PRETENDVISIBLE\t\t0x00000100 // Pretend the main window is visible (IsWindowVisible) and on Z-order top (GetTopWindow)\n#define RAWFORMAT\t\t\t0x00000200 // texture dump / hack are performed in raw format, compression / decompression to be made offline\n#define WININSULATION\t\t0x00000400 // EnumerateWin finds no windows!\n#define FIXMOUSEHOOK\t\t0x00000800 // fixes mouse coordinates retrieved through MouseProc routine associated to SetWindowsHook(WH_MOUSE,..)\n#define DDSFORMAT\t\t\t0x00001000 // texture dump / hack are performed in MS DDS format\n#define HOOKWING32\t\t\t0x00002000 // Hook WinG32.dll\n#define SEQUENCEDIAT\t\t0x00004000 // IFT has sequential format, DLL entries before and API next\n#define D3D8BACK16\t\t\t0x00008000 // D3D8 emulate 16 bpp backbuffer on a 32 bpp desktop (Win8-10 needed feature)\n#define MARKWING32\t\t\t0x00010000 // Marks (highlights with colored frames) all WinG32 operations\n#define DYNAMICZCLEAN\t\t0x00020000 // Performs ZBUFFER cleaning also every time the ZBUFFER is activated\n#define MARKGDI32\t\t\t0x00040000 // Marks (highlights with colored frames) the main GDI32 operations\n#define DUMPDIBSECTION\t\t0x00080000 // dumps DIBs to BMP files for debugging purposes\n#define DUMPDEVCONTEXT\t\t0x00100000 // dumps source HDC to BMP files for debugging purposes\n#define QUALITYFONTS\t\t0x00200000 // Forces adoption of high quality fonts (CLEARTYPE_NATURAL_QUALITY)\n#define ALLOWSYSMEMON3DDEV\t0x00400000 // Suppress DDSCAPS_SYSTEMMEMORY option when DDSCAPS_3DDEVICE is set\n#define CLIPMENU\t\t\t0x00800000 // Include window menu in mouse clipper area\n#define BACKGROUNDPRIORITY\t0x01000000 // Lower process priority when in background state\n#define OFFSCREENZBUFFER\t0x02000000 // Allow building plain surfaces and ZBuffer on offscreen videomemory surfaces\n#define VIRTUALHEAP\t\t\t0x04000000 // Remap heap calls to C library memory allocation routines\n#define ZBUFFERHARDCLEAN\t0x08000000 // Clean ZBUFFER the hard way (memset 0xFF on whole surface buffer ....)\n#define LOADLIBRARYERR\t\t0x10000000 // When LoadLibrary* fail for missing file returns ... instead of ....\n#define SHAREDDCHYBRID\t\t0x20000000 // Hybrid mode for shared dc GDI emulation - blits both on ddraw surface and window surface\n#define FIXADJUSTWINRECT\t0x40000000 // Hybrid mode for shared dc GDI emulation - blits both on ddraw surface and window surface\n#define HOOKDLGWIN\t\t\t0x80000000 // Hook dialog WindowProc\n\n// 9th flags DWORD dxw.dwFlags9:\n#define FIXTHINFRAME\t\t0x00000001 // Fix window style like OVERLAPPEDWINDOW but with thin border\n\n// 10th flags DWORD dxw.dwFlags10:\n\n// logging Tflags DWORD:\n#define OUTTRACE\t\t\t0x00000001 // enables tracing to dxwnd.log in general\n#define OUTDDRAWTRACE\t\t0x00000002 // traces DxWnd directdraw screen handling\n#define OUTWINMESSAGES\t\t0x00000004 // traces windows messages\n#define OUTCURSORTRACE\t\t0x00000008 // traces cursor positions & operations\n#define OUTSEPARATED\t\t0x00000010 // write the log on a separate file named dxwnd(n).log where n is the figure of first non-existent file\n//#define DXPROXED\t\t\t0x00000020 // hook DX proxy methods to log each call in original behaviour\n#define ASSERTDIALOG\t\t0x00000040 // show assert messages in Dialog Box\n#define OUTIMPORTTABLE\t\t0x00000080 // dump import table contents\n#define OUTDEBUG\t\t\t0x00000100 // detailed debugging information\n#define OUTREGISTRY\t\t\t0x00000200 // log registry operations\n#define TRACEHOOKS\t\t\t0x00000400 // log hook operations\n#define OUTD3DTRACE\t\t\t0x00000800 // traces DxWnd direct3d screen handling\n#define OUTDXWINTRACE\t\t0x00001000 // traces DxWnd internal operations\n#define OUTWINGTRACE\t\t0x00002000 // traces WinG32 hooked calls\n#define OUTOGLTRACE\t\t\t0x00004000 // traces OpenGL hooked calls\n#define OUTHEXTRACE\t\t\t0x00008000 // traces hexdump of critical structures\n#define ADDRELATIVETIME\t\t0x08000000 // log timestamp is relative to previous line\n//#define NOLOGCLOSE\t\t\t0x10000000 // avoid closing the log file handle (\"Riven, during CD changes ...)\n#define ADDTIMESTAMP\t\t0x20000000 // add timestamp (GetTickCount) to log file\n#define OUTDEBUGSTRING\t\t0x40000000 // duplicate logs through OutputDebugString()\n#define ERASELOGFILE\t\t0x80000000 // clears old trace file before writing new logs\n\n#define EMULATEFLAGS\t\t(EMULATEBUFFER | EMULATESURFACE | LOCKEDSURFACE)\n#define HANDLEFPS\t\t\t(SHOWFPS | SHOWFPSOVERLAY | LIMITFPS | SKIPFPS)\n#define TEXTUREMASK\t\t\t(TEXTUREHIGHLIGHT|TEXTUREDUMP|TEXTUREHACK|TEXTURETRANSP)\n\n// DxWnd host app data to be passed to the hook callback\ntypedef struct TARGETMAP\n{\n\tint index;\n\tchar path[MAX_PATH+1];\n\tchar module[60+1];\n\tchar OpenGLLib[20+1];\n\tint dxversion;\n\tint coordinates;\n\tint flags;\n\tint flags2;\n\tint flags3;\n\tint flags4;\n\tint flags5;\n\tint flags6;\n\tint flags7;\n\tint flags8;\n\tint flags9;\n\tint flags10;\n\tint tflags; // trace flags (cleared when exported/imported)\n\tint dflags; // debug flags (cleared when exported/imported)\n\tint monitorid;\n\tshort posx;\n\tshort posy;\n\tshort sizx;\n\tshort sizy;\n\tshort resw;\n\tshort resh;\n\tshort MaxFPS;\n\tshort InitTS;\n\tshort FakeVersionId;\n\tshort MaxScreenRes;\n\tshort SwapEffect;\n\tshort MaxDdrawInterface;\n\tshort SlowRatio;\n\tshort ScanLine;\n}TARGETMAP;\n\n// VJoyStatus flags\n#define VJOYPRESENT\t\t0x00000001 // Virtual joystick configured for the program\n#define VJOYENABLED\t\t0x00000002 // Virtual Joystick enabled and sending input coordinates\n#define CROSSENABLED\t0x00000004 // Crossfire display enabled\n#define INVERTYAXIS\t\t0x00000008 // Invert virtual joystick Y axis\n#define INVERTXAXIS\t\t0x00000010 // Invert virtual joystick X axis\n#define B1AUTOFIRE\t\t0x00000020 // Button 1 auto fire\n#define B2AUTOFIRE\t\t0x00000040 // Button 2 auto fire\n#define VJAUTOCENTER\t0x00000080 // auto-center feature\n#define VJKEYBOARDMAP\t0x00000100 // mapvirtual joystick lever & buttons to keyboard\n#define VJMOUSEMAP\t\t0x00000200 // mapvirtual joystick lever & buttons to mouse\n#define VJSENSIVITY\t\t0x00000400 // tune sensibility through mouse wheel\n#define VJMOUSEWHEEL\t0x00000800 // tune sensibility through mouse wheel\n\ntypedef struct\n{\n\tshort Status;\n\tshort TaskIdx;\n\tshort OrigIdx;\n\tshort IsFullScreen;\n\tshort Width, Height;\n\tshort ColorDepth;\n\tDDPIXELFORMAT pfd;\n\tshort DXVersion;\n\tHWND hWnd;\n\tDWORD dwPid;\n\tBOOL isLogging;\n\tDWORD FPSCount;\n\tint TimeShift;\n\tshort CursorX, CursorY;\n\tPALETTEENTRY Palette[256];\n\tBOOL AllowMultiTask;\n\tDWORD VJoyStatus;\n\tDWORD VJoySensivity;\n\tshort joyposx;\n\tshort joyposy;\n} DXWNDSTATUS;\n\nextern DXWNDSTATUS DxWndStatus;\n\nint SetTarget(DXWNDSTATUS *, TARGETMAP *);\nint StartHook(void);\nint EndHook(void);\nvoid GetDllVersion(char *);\nint GetHookStatus(DXWNDSTATUS *);\nDXWNDSTATUS *GetHookInfo();\nvoid HookInit(TARGETMAP *, HWND);\nvoid ShowHint(int);\nLPCSTR GetFlagCaption(int, int);\n\nchar *GetDxWndPath();\nvoid *SetHook(void *, void *);\nvoid SetHook(void *, void *, void **, char *);\nvoid OutTrace(const char *, ...);\nvoid OutTraceHex(BYTE *, int);\nvoid *HookAPI(HMODULE, char *, void *, const char *, void *);\nvoid AdjustWindowFrame(HWND, DWORD, DWORD);\nchar *hexdump(unsigned char *, int);\nvoid HexTrace(unsigned char *, int);\n\nLRESULT CALLBACK extWindowProc(HWND, UINT, WPARAM, LPARAM);\nLRESULT CALLBACK extChildWindowProc(HWND, UINT, WPARAM, LPARAM);\nLRESULT CALLBACK extDialogWindowProc(HWND, UINT, WPARAM, LPARAM);\nLRESULT CALLBACK dw_Hider_Message_Handler(HWND, UINT, WPARAM, LPARAM);\n\n// defines below to condition debug message handling\n\n#define OutTraceW if(dxw.dwTFlags & OUTWINMESSAGES) OutTrace\n//#define OutTraceX if(dxw.dwTFlags & OUTPROXYTRACE) OutTrace\n#define OutTraceDW if(dxw.dwTFlags & OUTDXWINTRACE) OutTrace\n#define OutTraceDDRAW if(dxw.dwTFlags & OUTDDRAWTRACE) OutTrace\n#define OutTraceD3D if(dxw.dwTFlags & OUTD3DTRACE) OutTrace\n#define OutTraceC if(dxw.dwTFlags & OUTCURSORTRACE) OutTrace\n#define OutTraceB if(dxw.dwTFlags & OUTDEBUG) OutTrace\n#define OutTraceR if(dxw.dwTFlags & OUTREGISTRY) OutTrace\n#define OutTraceH if(dxw.dwTFlags & TRACEHOOKS) OutTrace\n#define OutTraceP OutTrace\n#define OutTraceE OutTrace\n#define OutTraceWG if(dxw.dwTFlags & OUTWINGTRACE) OutTrace\n#define OutTraceOGL if(dxw.dwTFlags & OUTOGLTRACE) OutTrace\n#define OutHex if(dxw.dwTFlags & OUTHEXTRACE) OutTrace\n\n#define IsTraceW (dxw.dwTFlags & OUTWINMESSAGES)\n//#define IsTraceX (dxw.dwTFlags & OUTPROXYTRACE)\n#define IsTraceDW (dxw.dwTFlags & OUTDXWINTRACE)\n#define IsTraceDDRAW (dxw.dwTFlags & OUTDDRAWTRACE)\n#define IsTraceD3D (dxw.dwTFlags & OUTD3DTRACE)\n#define IsTraceC (dxw.dwTFlags & OUTCURSORTRACE)\n#define IsTraceR (dxw.dwTFlags & OUTREGISTRY)\n#define IsTraceH (dxw.dwTFlags & TRACEHOOKS)\n#define IsTraceP (TRUE)\n#define IsTraceE (TRUE)\n#define IsTraceWG (dxw.dwTFlags & OUTWINGTRACE)\n#define IsTraceOGL (dxw.dwTFlags & OUTOGLTRACE)\n#define IsTraceHex (dxw.dwTFlags & OUTHEXTRACE)\n#define IsDebug  (dxw.dwTFlags & OUTDEBUG)\n#define IsAssertEnabled (dxw.dwTFlags & ASSERTDIALOG)\n#define STEP OutTrace(\"STEP at %s:%d\\n\", __FILE__, __LINE__)\n\ntypedef enum {\n\tDXW_SET_COORDINATES = 0,\n\tDXW_DESKTOP_CENTER,\n\tDXW_DESKTOP_WORKAREA,\n\tDXW_DESKTOP_FULL\n} Coordinates_Types;\n\ntypedef enum {\n\tDXW_NO_LIMIT = 0,\n\tDXW_LIMIT_320x200,\n\tDXW_LIMIT_400x300,\n\tDXW_LIMIT_640x480,\n\tDXW_LIMIT_800x600,\n\tDXW_LIMIT_1024x768,\n\tDXW_LIMIT_1280x960,\n\tDXW_LIMIT_1280x1024\n} ResolutionLimits_Types;\n\ntypedef enum {\n\tTIMER_TYPE_NONE = 0,\n\tTIMER_TYPE_USER32,\n\tTIMER_TYPE_WINMM\n} Timer_Types;\n\ntypedef struct {\n\tint w; \n\tint h;\n} SupportedRes_Type;\n\nextern SupportedRes_Type SupportedSVGARes[];\nextern SupportedRes_Type SupportedHDTVRes[];\nextern int SupportedDepths[];\n\n#define SUPPORTED_DEPTHS_NUMBER 4\n"
  },
  {
    "path": "Include/gl/gl.h",
    "content": "/*\n * Mesa 3-D graphics library\n * Version:  4.0\n *\n * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\n * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\n/************************************************************************\n * 2002-Apr-22, Jos Fonseca:\n *   Removed non Win32 system-specific stuff\n *\n * 2002-Apr-17, Marcus Geelnard:\n *   For win32, OpenGL 1.2 & 1.3 definitions are not made in this file\n *   anymore, since under Windows those are regarded as extensions, and\n *   are better defined in glext.h (especially the function prototypes may\n *   conflict with extension function pointers). A few \"cosmetical\"\n *   changes were also made to this file.\n *\n * 2002-Apr-15, Marcus Geelnard:\n *   Modified this file to better fit a wider range of compilers, removed\n *   Mesa specific stuff, and removed extension definitions (this file now\n *   relies on GL/glext.h). Hopefully this file should now function as a\n *   generic OpenGL gl.h include file for most compilers and environments.\n *   Changed GLAPIENTRY to APIENTRY (to be consistent with GL/glext.h).\n ************************************************************************/\n\n\n#ifndef __gl_h_\n#define __gl_h_\n\n\n\n/************************************************************************\n * Begin system-specific stuff.\n */\n/* __WIN32__ */\n#if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__))\n#  define __WIN32__\n#endif\n\n/* GLAPI, part 1 (use WINGDIAPI, if defined) */\n#if defined(__WIN32__) && defined(WINGDIAPI)\n#  define GLAPI WINGDIAPI\n#endif\n\n/* GLAPI, part 2 */\n#if !defined(GLAPI)\n#  if defined(_MSC_VER)                        /* Microsoft Visual C++ */\n#    define GLAPI __declspec(dllimport)\n#  elif defined(__LCC__) && defined(__WIN32__) /* LCC-Win32 */\n#    define GLAPI __stdcall\n#  else                                        /* Others (e.g. MinGW, Cygwin, non-win32) */\n#    define GLAPI extern\n#  endif\n#endif\n\n/* APIENTRY */\n#if !defined(APIENTRY)\n#  if defined(__WIN32__)\n#    define APIENTRY __stdcall\n#  else\n#    define APIENTRY\n#  endif\n#endif\n/*\n * End system-specific stuff.\n ************************************************************************/\n\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#define GL_VERSION_1_1   1\n\n#if !defined(__WIN32__)\n#define GL_VERSION_1_2   1\n#define GL_VERSION_1_3   1\n#define GL_ARB_imaging   1\n#endif\n\n\n/*\n *\n * Datatypes\n *\n */\n#ifdef CENTERLINE_CLPP\n#define signed\n#endif\ntypedef unsigned int    GLenum;\ntypedef unsigned char   GLboolean;\ntypedef unsigned int    GLbitfield;\ntypedef void            GLvoid;\ntypedef signed char     GLbyte;         /* 1-byte signed */\ntypedef short           GLshort;        /* 2-byte signed */\ntypedef int             GLint;          /* 4-byte signed */\ntypedef unsigned char   GLubyte;        /* 1-byte unsigned */\ntypedef unsigned short  GLushort;       /* 2-byte unsigned */\ntypedef unsigned int    GLuint;         /* 4-byte unsigned */\ntypedef int             GLsizei;        /* 4-byte signed */\ntypedef float           GLfloat;        /* single precision float */\ntypedef float           GLclampf;       /* single precision float in [0,1] */\ntypedef double          GLdouble;       /* double precision float */\ntypedef double          GLclampd;       /* double precision float in [0,1] */\n\n\n\n/************************************************************************\n *\n * Constants\n *\n ************************************************************************/\n\n/* Boolean values */\n#define GL_FALSE                                0x0\n#define GL_TRUE                                 0x1\n\n/* Data types */\n#define GL_BYTE                                 0x1400\n#define GL_UNSIGNED_BYTE                        0x1401\n#define GL_SHORT                                0x1402\n#define GL_UNSIGNED_SHORT                       0x1403\n#define GL_INT                                  0x1404\n#define GL_UNSIGNED_INT                         0x1405\n#define GL_FLOAT                                0x1406\n#define GL_DOUBLE                               0x140A\n#define GL_2_BYTES                              0x1407\n#define GL_3_BYTES                              0x1408\n#define GL_4_BYTES                              0x1409\n\n/* Primitives */\n#define GL_POINTS                               0x0000\n#define GL_LINES                                0x0001\n#define GL_LINE_LOOP                            0x0002\n#define GL_LINE_STRIP                           0x0003\n#define GL_TRIANGLES                            0x0004\n#define GL_TRIANGLE_STRIP                       0x0005\n#define GL_TRIANGLE_FAN                         0x0006\n#define GL_QUADS                                0x0007\n#define GL_QUAD_STRIP                           0x0008\n#define GL_POLYGON                              0x0009\n\n/* Vertex Arrays */\n#define GL_VERTEX_ARRAY                         0x8074\n#define GL_NORMAL_ARRAY                         0x8075\n#define GL_COLOR_ARRAY                          0x8076\n#define GL_INDEX_ARRAY                          0x8077\n#define GL_TEXTURE_COORD_ARRAY                  0x8078\n#define GL_EDGE_FLAG_ARRAY                      0x8079\n#define GL_VERTEX_ARRAY_SIZE                    0x807A\n#define GL_VERTEX_ARRAY_TYPE                    0x807B\n#define GL_VERTEX_ARRAY_STRIDE                  0x807C\n#define GL_NORMAL_ARRAY_TYPE                    0x807E\n#define GL_NORMAL_ARRAY_STRIDE                  0x807F\n#define GL_COLOR_ARRAY_SIZE                     0x8081\n#define GL_COLOR_ARRAY_TYPE                     0x8082\n#define GL_COLOR_ARRAY_STRIDE                   0x8083\n#define GL_INDEX_ARRAY_TYPE                     0x8085\n#define GL_INDEX_ARRAY_STRIDE                   0x8086\n#define GL_TEXTURE_COORD_ARRAY_SIZE             0x8088\n#define GL_TEXTURE_COORD_ARRAY_TYPE             0x8089\n#define GL_TEXTURE_COORD_ARRAY_STRIDE           0x808A\n#define GL_EDGE_FLAG_ARRAY_STRIDE               0x808C\n#define GL_VERTEX_ARRAY_POINTER                 0x808E\n#define GL_NORMAL_ARRAY_POINTER                 0x808F\n#define GL_COLOR_ARRAY_POINTER                  0x8090\n#define GL_INDEX_ARRAY_POINTER                  0x8091\n#define GL_TEXTURE_COORD_ARRAY_POINTER          0x8092\n#define GL_EDGE_FLAG_ARRAY_POINTER              0x8093\n#define GL_V2F                                  0x2A20\n#define GL_V3F                                  0x2A21\n#define GL_C4UB_V2F                             0x2A22\n#define GL_C4UB_V3F                             0x2A23\n#define GL_C3F_V3F                              0x2A24\n#define GL_N3F_V3F                              0x2A25\n#define GL_C4F_N3F_V3F                          0x2A26\n#define GL_T2F_V3F                              0x2A27\n#define GL_T4F_V4F                              0x2A28\n#define GL_T2F_C4UB_V3F                         0x2A29\n#define GL_T2F_C3F_V3F                          0x2A2A\n#define GL_T2F_N3F_V3F                          0x2A2B\n#define GL_T2F_C4F_N3F_V3F                      0x2A2C\n#define GL_T4F_C4F_N3F_V4F                      0x2A2D\n\n/* Matrix Mode */\n#define GL_MATRIX_MODE                          0x0BA0\n#define GL_MODELVIEW                            0x1700\n#define GL_PROJECTION                           0x1701\n#define GL_TEXTURE                              0x1702\n\n/* Points */\n#define GL_POINT_SMOOTH                         0x0B10\n#define GL_POINT_SIZE                           0x0B11\n#define GL_POINT_SIZE_GRANULARITY               0x0B13\n#define GL_POINT_SIZE_RANGE                     0x0B12\n\n/* Lines */\n#define GL_LINE_SMOOTH                          0x0B20\n#define GL_LINE_STIPPLE                         0x0B24\n#define GL_LINE_STIPPLE_PATTERN                 0x0B25\n#define GL_LINE_STIPPLE_REPEAT                  0x0B26\n#define GL_LINE_WIDTH                           0x0B21\n#define GL_LINE_WIDTH_GRANULARITY               0x0B23\n#define GL_LINE_WIDTH_RANGE                     0x0B22\n\n/* Polygons */\n#define GL_POINT                                0x1B00\n#define GL_LINE                                 0x1B01\n#define GL_FILL                                 0x1B02\n#define GL_CW                                   0x0900\n#define GL_CCW                                  0x0901\n#define GL_FRONT                                0x0404\n#define GL_BACK                                 0x0405\n#define GL_POLYGON_MODE                         0x0B40\n#define GL_POLYGON_SMOOTH                       0x0B41\n#define GL_POLYGON_STIPPLE                      0x0B42\n#define GL_EDGE_FLAG                            0x0B43\n#define GL_CULL_FACE                            0x0B44\n#define GL_CULL_FACE_MODE                       0x0B45\n#define GL_FRONT_FACE                           0x0B46\n#define GL_POLYGON_OFFSET_FACTOR                0x8038\n#define GL_POLYGON_OFFSET_UNITS                 0x2A00\n#define GL_POLYGON_OFFSET_POINT                 0x2A01\n#define GL_POLYGON_OFFSET_LINE                  0x2A02\n#define GL_POLYGON_OFFSET_FILL                  0x8037\n\n/* Display Lists */\n#define GL_COMPILE                              0x1300\n#define GL_COMPILE_AND_EXECUTE                  0x1301\n#define GL_LIST_BASE                            0x0B32\n#define GL_LIST_INDEX                           0x0B33\n#define GL_LIST_MODE                            0x0B30\n\n/* Depth buffer */\n#define GL_NEVER                                0x0200\n#define GL_LESS                                 0x0201\n#define GL_EQUAL                                0x0202\n#define GL_LEQUAL                               0x0203\n#define GL_GREATER                              0x0204\n#define GL_NOTEQUAL                             0x0205\n#define GL_GEQUAL                               0x0206\n#define GL_ALWAYS                               0x0207\n#define GL_DEPTH_TEST                           0x0B71\n#define GL_DEPTH_BITS                           0x0D56\n#define GL_DEPTH_CLEAR_VALUE                    0x0B73\n#define GL_DEPTH_FUNC                           0x0B74\n#define GL_DEPTH_RANGE                          0x0B70\n#define GL_DEPTH_WRITEMASK                      0x0B72\n#define GL_DEPTH_COMPONENT                      0x1902\n\n/* Lighting */\n#define GL_LIGHTING                             0x0B50\n#define GL_LIGHT0                               0x4000\n#define GL_LIGHT1                               0x4001\n#define GL_LIGHT2                               0x4002\n#define GL_LIGHT3                               0x4003\n#define GL_LIGHT4                               0x4004\n#define GL_LIGHT5                               0x4005\n#define GL_LIGHT6                               0x4006\n#define GL_LIGHT7                               0x4007\n#define GL_SPOT_EXPONENT                        0x1205\n#define GL_SPOT_CUTOFF                          0x1206\n#define GL_CONSTANT_ATTENUATION                 0x1207\n#define GL_LINEAR_ATTENUATION                   0x1208\n#define GL_QUADRATIC_ATTENUATION                0x1209\n#define GL_AMBIENT                              0x1200\n#define GL_DIFFUSE                              0x1201\n#define GL_SPECULAR                             0x1202\n#define GL_SHININESS                            0x1601\n#define GL_EMISSION                             0x1600\n#define GL_POSITION                             0x1203\n#define GL_SPOT_DIRECTION                       0x1204\n#define GL_AMBIENT_AND_DIFFUSE                  0x1602\n#define GL_COLOR_INDEXES                        0x1603\n#define GL_LIGHT_MODEL_TWO_SIDE                 0x0B52\n#define GL_LIGHT_MODEL_LOCAL_VIEWER             0x0B51\n#define GL_LIGHT_MODEL_AMBIENT                  0x0B53\n#define GL_FRONT_AND_BACK                       0x0408\n#define GL_SHADE_MODEL                          0x0B54\n#define GL_FLAT                                 0x1D00\n#define GL_SMOOTH                               0x1D01\n#define GL_COLOR_MATERIAL                       0x0B57\n#define GL_COLOR_MATERIAL_FACE                  0x0B55\n#define GL_COLOR_MATERIAL_PARAMETER             0x0B56\n#define GL_NORMALIZE                            0x0BA1\n\n/* User clipping planes */\n#define GL_CLIP_PLANE0                          0x3000\n#define GL_CLIP_PLANE1                          0x3001\n#define GL_CLIP_PLANE2                          0x3002\n#define GL_CLIP_PLANE3                          0x3003\n#define GL_CLIP_PLANE4                          0x3004\n#define GL_CLIP_PLANE5                          0x3005\n\n/* Accumulation buffer */\n#define GL_ACCUM_RED_BITS                       0x0D58\n#define GL_ACCUM_GREEN_BITS                     0x0D59\n#define GL_ACCUM_BLUE_BITS                      0x0D5A\n#define GL_ACCUM_ALPHA_BITS                     0x0D5B\n#define GL_ACCUM_CLEAR_VALUE                    0x0B80\n#define GL_ACCUM                                0x0100\n#define GL_ADD                                  0x0104\n#define GL_LOAD                                 0x0101\n#define GL_MULT                                 0x0103\n#define GL_RETURN                               0x0102\n\n/* Alpha testing */\n#define GL_ALPHA_TEST                           0x0BC0\n#define GL_ALPHA_TEST_REF                       0x0BC2\n#define GL_ALPHA_TEST_FUNC                      0x0BC1\n\n/* Blending */\n#define GL_BLEND                                0x0BE2\n#define GL_BLEND_SRC                            0x0BE1\n#define GL_BLEND_DST                            0x0BE0\n#define GL_ZERO                                 0x0\n#define GL_ONE                                  0x1\n#define GL_SRC_COLOR                            0x0300\n#define GL_ONE_MINUS_SRC_COLOR                  0x0301\n#define GL_SRC_ALPHA                            0x0302\n#define GL_ONE_MINUS_SRC_ALPHA                  0x0303\n#define GL_DST_ALPHA                            0x0304\n#define GL_ONE_MINUS_DST_ALPHA                  0x0305\n#define GL_DST_COLOR                            0x0306\n#define GL_ONE_MINUS_DST_COLOR                  0x0307\n#define GL_SRC_ALPHA_SATURATE                   0x0308\n#define GL_CONSTANT_COLOR                       0x8001\n#define GL_ONE_MINUS_CONSTANT_COLOR             0x8002\n#define GL_CONSTANT_ALPHA                       0x8003\n#define GL_ONE_MINUS_CONSTANT_ALPHA             0x8004\n\n/* Render Mode */\n#define GL_FEEDBACK                             0x1C01\n#define GL_RENDER                               0x1C00\n#define GL_SELECT                               0x1C02\n\n/* Feedback */\n#define GL_2D                                   0x0600\n#define GL_3D                                   0x0601\n#define GL_3D_COLOR                             0x0602\n#define GL_3D_COLOR_TEXTURE                     0x0603\n#define GL_4D_COLOR_TEXTURE                     0x0604\n#define GL_POINT_TOKEN                          0x0701\n#define GL_LINE_TOKEN                           0x0702\n#define GL_LINE_RESET_TOKEN                     0x0707\n#define GL_POLYGON_TOKEN                        0x0703\n#define GL_BITMAP_TOKEN                         0x0704\n#define GL_DRAW_PIXEL_TOKEN                     0x0705\n#define GL_COPY_PIXEL_TOKEN                     0x0706\n#define GL_PASS_THROUGH_TOKEN                   0x0700\n#define GL_FEEDBACK_BUFFER_POINTER              0x0DF0\n#define GL_FEEDBACK_BUFFER_SIZE                 0x0DF1\n#define GL_FEEDBACK_BUFFER_TYPE                 0x0DF2\n\n/* Selection */\n#define GL_SELECTION_BUFFER_POINTER             0x0DF3\n#define GL_SELECTION_BUFFER_SIZE                0x0DF4\n\n/* Fog */\n#define GL_FOG                                  0x0B60\n#define GL_FOG_MODE                             0x0B65\n#define GL_FOG_DENSITY                          0x0B62\n#define GL_FOG_COLOR                            0x0B66\n#define GL_FOG_INDEX                            0x0B61\n#define GL_FOG_START                            0x0B63\n#define GL_FOG_END                              0x0B64\n#define GL_LINEAR                               0x2601\n#define GL_EXP                                  0x0800\n#define GL_EXP2                                 0x0801\n\n/* Logic Ops */\n#define GL_LOGIC_OP                             0x0BF1\n#define GL_INDEX_LOGIC_OP                       0x0BF1\n#define GL_COLOR_LOGIC_OP                       0x0BF2\n#define GL_LOGIC_OP_MODE                        0x0BF0\n#define GL_CLEAR                                0x1500\n#define GL_SET                                  0x150F\n#define GL_COPY                                 0x1503\n#define GL_COPY_INVERTED                        0x150C\n#define GL_NOOP                                 0x1505\n#define GL_INVERT                               0x150A\n#define GL_AND                                  0x1501\n#define GL_NAND                                 0x150E\n#define GL_OR                                   0x1507\n#define GL_NOR                                  0x1508\n#define GL_XOR                                  0x1506\n#define GL_EQUIV                                0x1509\n#define GL_AND_REVERSE                          0x1502\n#define GL_AND_INVERTED                         0x1504\n#define GL_OR_REVERSE                           0x150B\n#define GL_OR_INVERTED                          0x150D\n\n/* Stencil */\n#define GL_STENCIL_TEST                         0x0B90\n#define GL_STENCIL_WRITEMASK                    0x0B98\n#define GL_STENCIL_BITS                         0x0D57\n#define GL_STENCIL_FUNC                         0x0B92\n#define GL_STENCIL_VALUE_MASK                   0x0B93\n#define GL_STENCIL_REF                          0x0B97\n#define GL_STENCIL_FAIL                         0x0B94\n#define GL_STENCIL_PASS_DEPTH_PASS              0x0B96\n#define GL_STENCIL_PASS_DEPTH_FAIL              0x0B95\n#define GL_STENCIL_CLEAR_VALUE                  0x0B91\n#define GL_STENCIL_INDEX                        0x1901\n#define GL_KEEP                                 0x1E00\n#define GL_REPLACE                              0x1E01\n#define GL_INCR                                 0x1E02\n#define GL_DECR                                 0x1E03\n\n/* Buffers, Pixel Drawing/Reading */\n#define GL_NONE                                 0x0\n#define GL_LEFT                                 0x0406\n#define GL_RIGHT                                0x0407\n/*GL_FRONT                                      0x0404 */\n/*GL_BACK                                       0x0405 */\n/*GL_FRONT_AND_BACK                             0x0408 */\n#define GL_FRONT_LEFT                           0x0400\n#define GL_FRONT_RIGHT                          0x0401\n#define GL_BACK_LEFT                            0x0402\n#define GL_BACK_RIGHT                           0x0403\n#define GL_AUX0                                 0x0409\n#define GL_AUX1                                 0x040A\n#define GL_AUX2                                 0x040B\n#define GL_AUX3                                 0x040C\n#define GL_COLOR_INDEX                          0x1900\n#define GL_RED                                  0x1903\n#define GL_GREEN                                0x1904\n#define GL_BLUE                                 0x1905\n#define GL_ALPHA                                0x1906\n#define GL_LUMINANCE                            0x1909\n#define GL_LUMINANCE_ALPHA                      0x190A\n#define GL_ALPHA_BITS                           0x0D55\n#define GL_RED_BITS                             0x0D52\n#define GL_GREEN_BITS                           0x0D53\n#define GL_BLUE_BITS                            0x0D54\n#define GL_INDEX_BITS                           0x0D51\n#define GL_SUBPIXEL_BITS                        0x0D50\n#define GL_AUX_BUFFERS                          0x0C00\n#define GL_READ_BUFFER                          0x0C02\n#define GL_DRAW_BUFFER                          0x0C01\n#define GL_DOUBLEBUFFER                         0x0C32\n#define GL_STEREO                               0x0C33\n#define GL_BITMAP                               0x1A00\n#define GL_COLOR                                0x1800\n#define GL_DEPTH                                0x1801\n#define GL_STENCIL                              0x1802\n#define GL_DITHER                               0x0BD0\n#define GL_RGB                                  0x1907\n#define GL_RGBA                                 0x1908\n\n/* Implementation limits */\n#define GL_MAX_LIST_NESTING                     0x0B31\n#define GL_MAX_ATTRIB_STACK_DEPTH               0x0D35\n#define GL_MAX_MODELVIEW_STACK_DEPTH            0x0D36\n#define GL_MAX_NAME_STACK_DEPTH                 0x0D37\n#define GL_MAX_PROJECTION_STACK_DEPTH           0x0D38\n#define GL_MAX_TEXTURE_STACK_DEPTH              0x0D39\n#define GL_MAX_EVAL_ORDER                       0x0D30\n#define GL_MAX_LIGHTS                           0x0D31\n#define GL_MAX_CLIP_PLANES                      0x0D32\n#define GL_MAX_TEXTURE_SIZE                     0x0D33\n#define GL_MAX_PIXEL_MAP_TABLE                  0x0D34\n#define GL_MAX_VIEWPORT_DIMS                    0x0D3A\n#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH        0x0D3B\n\n/* Gets */\n#define GL_ATTRIB_STACK_DEPTH                   0x0BB0\n#define GL_CLIENT_ATTRIB_STACK_DEPTH            0x0BB1\n#define GL_COLOR_CLEAR_VALUE                    0x0C22\n#define GL_COLOR_WRITEMASK                      0x0C23\n#define GL_CURRENT_INDEX                        0x0B01\n#define GL_CURRENT_COLOR                        0x0B00\n#define GL_CURRENT_NORMAL                       0x0B02\n#define GL_CURRENT_RASTER_COLOR                 0x0B04\n#define GL_CURRENT_RASTER_DISTANCE              0x0B09\n#define GL_CURRENT_RASTER_INDEX                 0x0B05\n#define GL_CURRENT_RASTER_POSITION              0x0B07\n#define GL_CURRENT_RASTER_TEXTURE_COORDS        0x0B06\n#define GL_CURRENT_RASTER_POSITION_VALID        0x0B08\n#define GL_CURRENT_TEXTURE_COORDS               0x0B03\n#define GL_INDEX_CLEAR_VALUE                    0x0C20\n#define GL_INDEX_MODE                           0x0C30\n#define GL_INDEX_WRITEMASK                      0x0C21\n#define GL_MODELVIEW_MATRIX                     0x0BA6\n#define GL_MODELVIEW_STACK_DEPTH                0x0BA3\n#define GL_NAME_STACK_DEPTH                     0x0D70\n#define GL_PROJECTION_MATRIX                    0x0BA7\n#define GL_PROJECTION_STACK_DEPTH               0x0BA4\n#define GL_RENDER_MODE                          0x0C40\n#define GL_RGBA_MODE                            0x0C31\n#define GL_TEXTURE_MATRIX                       0x0BA8\n#define GL_TEXTURE_STACK_DEPTH                  0x0BA5\n#define GL_VIEWPORT                             0x0BA2\n\n/* Evaluators */\n#define GL_AUTO_NORMAL                          0x0D80\n#define GL_MAP1_COLOR_4                         0x0D90\n#define GL_MAP1_GRID_DOMAIN                     0x0DD0\n#define GL_MAP1_GRID_SEGMENTS                   0x0DD1\n#define GL_MAP1_INDEX                           0x0D91\n#define GL_MAP1_NORMAL                          0x0D92\n#define GL_MAP1_TEXTURE_COORD_1                 0x0D93\n#define GL_MAP1_TEXTURE_COORD_2                 0x0D94\n#define GL_MAP1_TEXTURE_COORD_3                 0x0D95\n#define GL_MAP1_TEXTURE_COORD_4                 0x0D96\n#define GL_MAP1_VERTEX_3                        0x0D97\n#define GL_MAP1_VERTEX_4                        0x0D98\n#define GL_MAP2_COLOR_4                         0x0DB0\n#define GL_MAP2_GRID_DOMAIN                     0x0DD2\n#define GL_MAP2_GRID_SEGMENTS                   0x0DD3\n#define GL_MAP2_INDEX                           0x0DB1\n#define GL_MAP2_NORMAL                          0x0DB2\n#define GL_MAP2_TEXTURE_COORD_1                 0x0DB3\n#define GL_MAP2_TEXTURE_COORD_2                 0x0DB4\n#define GL_MAP2_TEXTURE_COORD_3                 0x0DB5\n#define GL_MAP2_TEXTURE_COORD_4                 0x0DB6\n#define GL_MAP2_VERTEX_3                        0x0DB7\n#define GL_MAP2_VERTEX_4                        0x0DB8\n#define GL_COEFF                                0x0A00\n#define GL_DOMAIN                               0x0A02\n#define GL_ORDER                                0x0A01\n\n/* Hints */\n#define GL_FOG_HINT                             0x0C54\n#define GL_LINE_SMOOTH_HINT                     0x0C52\n#define GL_PERSPECTIVE_CORRECTION_HINT          0x0C50\n#define GL_POINT_SMOOTH_HINT                    0x0C51\n#define GL_POLYGON_SMOOTH_HINT                  0x0C53\n#define GL_DONT_CARE                            0x1100\n#define GL_FASTEST                              0x1101\n#define GL_NICEST                               0x1102\n\n/* Scissor box */\n#define GL_SCISSOR_TEST                         0x0C11\n#define GL_SCISSOR_BOX                          0x0C10\n\n/* Pixel Mode / Transfer */\n#define GL_MAP_COLOR                            0x0D10\n#define GL_MAP_STENCIL                          0x0D11\n#define GL_INDEX_SHIFT                          0x0D12\n#define GL_INDEX_OFFSET                         0x0D13\n#define GL_RED_SCALE                            0x0D14\n#define GL_RED_BIAS                             0x0D15\n#define GL_GREEN_SCALE                          0x0D18\n#define GL_GREEN_BIAS                           0x0D19\n#define GL_BLUE_SCALE                           0x0D1A\n#define GL_BLUE_BIAS                            0x0D1B\n#define GL_ALPHA_SCALE                          0x0D1C\n#define GL_ALPHA_BIAS                           0x0D1D\n#define GL_DEPTH_SCALE                          0x0D1E\n#define GL_DEPTH_BIAS                           0x0D1F\n#define GL_PIXEL_MAP_S_TO_S_SIZE                0x0CB1\n#define GL_PIXEL_MAP_I_TO_I_SIZE                0x0CB0\n#define GL_PIXEL_MAP_I_TO_R_SIZE                0x0CB2\n#define GL_PIXEL_MAP_I_TO_G_SIZE                0x0CB3\n#define GL_PIXEL_MAP_I_TO_B_SIZE                0x0CB4\n#define GL_PIXEL_MAP_I_TO_A_SIZE                0x0CB5\n#define GL_PIXEL_MAP_R_TO_R_SIZE                0x0CB6\n#define GL_PIXEL_MAP_G_TO_G_SIZE                0x0CB7\n#define GL_PIXEL_MAP_B_TO_B_SIZE                0x0CB8\n#define GL_PIXEL_MAP_A_TO_A_SIZE                0x0CB9\n#define GL_PIXEL_MAP_S_TO_S                     0x0C71\n#define GL_PIXEL_MAP_I_TO_I                     0x0C70\n#define GL_PIXEL_MAP_I_TO_R                     0x0C72\n#define GL_PIXEL_MAP_I_TO_G                     0x0C73\n#define GL_PIXEL_MAP_I_TO_B                     0x0C74\n#define GL_PIXEL_MAP_I_TO_A                     0x0C75\n#define GL_PIXEL_MAP_R_TO_R                     0x0C76\n#define GL_PIXEL_MAP_G_TO_G                     0x0C77\n#define GL_PIXEL_MAP_B_TO_B                     0x0C78\n#define GL_PIXEL_MAP_A_TO_A                     0x0C79\n#define GL_PACK_ALIGNMENT                       0x0D05\n#define GL_PACK_LSB_FIRST                       0x0D01\n#define GL_PACK_ROW_LENGTH                      0x0D02\n#define GL_PACK_SKIP_PIXELS                     0x0D04\n#define GL_PACK_SKIP_ROWS                       0x0D03\n#define GL_PACK_SWAP_BYTES                      0x0D00\n#define GL_UNPACK_ALIGNMENT                     0x0CF5\n#define GL_UNPACK_LSB_FIRST                     0x0CF1\n#define GL_UNPACK_ROW_LENGTH                    0x0CF2\n#define GL_UNPACK_SKIP_PIXELS                   0x0CF4\n#define GL_UNPACK_SKIP_ROWS                     0x0CF3\n#define GL_UNPACK_SWAP_BYTES                    0x0CF0\n#define GL_ZOOM_X                               0x0D16\n#define GL_ZOOM_Y                               0x0D17\n\n/* Texture mapping */\n#define GL_TEXTURE_ENV                          0x2300\n#define GL_TEXTURE_ENV_MODE                     0x2200\n#define GL_TEXTURE_1D                           0x0DE0\n#define GL_TEXTURE_2D                           0x0DE1\n#define GL_TEXTURE_WRAP_S                       0x2802\n#define GL_TEXTURE_WRAP_T                       0x2803\n#define GL_TEXTURE_MAG_FILTER                   0x2800\n#define GL_TEXTURE_MIN_FILTER                   0x2801\n#define GL_TEXTURE_ENV_COLOR                    0x2201\n#define GL_TEXTURE_GEN_S                        0x0C60\n#define GL_TEXTURE_GEN_T                        0x0C61\n#define GL_TEXTURE_GEN_MODE                     0x2500\n#define GL_TEXTURE_BORDER_COLOR                 0x1004\n#define GL_TEXTURE_WIDTH                        0x1000\n#define GL_TEXTURE_HEIGHT                       0x1001\n#define GL_TEXTURE_BORDER                       0x1005\n#define GL_TEXTURE_COMPONENTS                   0x1003\n#define GL_TEXTURE_RED_SIZE                     0x805C\n#define GL_TEXTURE_GREEN_SIZE                   0x805D\n#define GL_TEXTURE_BLUE_SIZE                    0x805E\n#define GL_TEXTURE_ALPHA_SIZE                   0x805F\n#define GL_TEXTURE_LUMINANCE_SIZE               0x8060\n#define GL_TEXTURE_INTENSITY_SIZE               0x8061\n#define GL_NEAREST_MIPMAP_NEAREST               0x2700\n#define GL_NEAREST_MIPMAP_LINEAR                0x2702\n#define GL_LINEAR_MIPMAP_NEAREST                0x2701\n#define GL_LINEAR_MIPMAP_LINEAR                 0x2703\n#define GL_OBJECT_LINEAR                        0x2401\n#define GL_OBJECT_PLANE                         0x2501\n#define GL_EYE_LINEAR                           0x2400\n#define GL_EYE_PLANE                            0x2502\n#define GL_SPHERE_MAP                           0x2402\n#define GL_DECAL                                0x2101\n#define GL_MODULATE                             0x2100\n#define GL_NEAREST                              0x2600\n#define GL_REPEAT                               0x2901\n#define GL_CLAMP                                0x2900\n#define GL_S                                    0x2000\n#define GL_T                                    0x2001\n#define GL_R                                    0x2002\n#define GL_Q                                    0x2003\n#define GL_TEXTURE_GEN_R                        0x0C62\n#define GL_TEXTURE_GEN_Q                        0x0C63\n\n/* Utility */\n#define GL_VENDOR                               0x1F00\n#define GL_RENDERER                             0x1F01\n#define GL_VERSION                              0x1F02\n#define GL_EXTENSIONS                           0x1F03\n\n/* Errors */\n#define GL_NO_ERROR                             0x0\n#define GL_INVALID_VALUE                        0x0501\n#define GL_INVALID_ENUM                         0x0500\n#define GL_INVALID_OPERATION                    0x0502\n#define GL_STACK_OVERFLOW                       0x0503\n#define GL_STACK_UNDERFLOW                      0x0504\n#define GL_OUT_OF_MEMORY                        0x0505\n\n/* glPush/PopAttrib bits */\n#define GL_CURRENT_BIT                          0x00000001\n#define GL_POINT_BIT                            0x00000002\n#define GL_LINE_BIT                             0x00000004\n#define GL_POLYGON_BIT                          0x00000008\n#define GL_POLYGON_STIPPLE_BIT                  0x00000010\n#define GL_PIXEL_MODE_BIT                       0x00000020\n#define GL_LIGHTING_BIT                         0x00000040\n#define GL_FOG_BIT                              0x00000080\n#define GL_DEPTH_BUFFER_BIT                     0x00000100\n#define GL_ACCUM_BUFFER_BIT                     0x00000200\n#define GL_STENCIL_BUFFER_BIT                   0x00000400\n#define GL_VIEWPORT_BIT                         0x00000800\n#define GL_TRANSFORM_BIT                        0x00001000\n#define GL_ENABLE_BIT                           0x00002000\n#define GL_COLOR_BUFFER_BIT                     0x00004000\n#define GL_HINT_BIT                             0x00008000\n#define GL_EVAL_BIT                             0x00010000\n#define GL_LIST_BIT                             0x00020000\n#define GL_TEXTURE_BIT                          0x00040000\n#define GL_SCISSOR_BIT                          0x00080000\n#define GL_ALL_ATTRIB_BITS                      0x000FFFFF\n\n\n/* OpenGL 1.1 */\n#define GL_PROXY_TEXTURE_1D                     0x8063\n#define GL_PROXY_TEXTURE_2D                     0x8064\n#define GL_TEXTURE_PRIORITY                     0x8066\n#define GL_TEXTURE_RESIDENT                     0x8067\n#define GL_TEXTURE_BINDING_1D                   0x8068\n#define GL_TEXTURE_BINDING_2D                   0x8069\n#define GL_TEXTURE_INTERNAL_FORMAT              0x1003\n#define GL_ALPHA4                               0x803B\n#define GL_ALPHA8                               0x803C\n#define GL_ALPHA12                              0x803D\n#define GL_ALPHA16                              0x803E\n#define GL_LUMINANCE4                           0x803F\n#define GL_LUMINANCE8                           0x8040\n#define GL_LUMINANCE12                          0x8041\n#define GL_LUMINANCE16                          0x8042\n#define GL_LUMINANCE4_ALPHA4                    0x8043\n#define GL_LUMINANCE6_ALPHA2                    0x8044\n#define GL_LUMINANCE8_ALPHA8                    0x8045\n#define GL_LUMINANCE12_ALPHA4                   0x8046\n#define GL_LUMINANCE12_ALPHA12                  0x8047\n#define GL_LUMINANCE16_ALPHA16                  0x8048\n#define GL_INTENSITY                            0x8049\n#define GL_INTENSITY4                           0x804A\n#define GL_INTENSITY8                           0x804B\n#define GL_INTENSITY12                          0x804C\n#define GL_INTENSITY16                          0x804D\n#define GL_R3_G3_B2                             0x2A10\n#define GL_RGB4                                 0x804F\n#define GL_RGB5                                 0x8050\n#define GL_RGB8                                 0x8051\n#define GL_RGB10                                0x8052\n#define GL_RGB12                                0x8053\n#define GL_RGB16                                0x8054\n#define GL_RGBA2                                0x8055\n#define GL_RGBA4                                0x8056\n#define GL_RGB5_A1                              0x8057\n#define GL_RGBA8                                0x8058\n#define GL_RGB10_A2                             0x8059\n#define GL_RGBA12                               0x805A\n#define GL_RGBA16                               0x805B\n#define GL_CLIENT_PIXEL_STORE_BIT               0x00000001\n#define GL_CLIENT_VERTEX_ARRAY_BIT              0x00000002\n#define GL_ALL_CLIENT_ATTRIB_BITS               0xFFFFFFFF\n#define GL_CLIENT_ALL_ATTRIB_BITS               0xFFFFFFFF\n\n\n/* Under Windows, we do not define OpenGL 1.2 & 1.3 functionality, since\n   it is treated as extensions (defined in glext.h) */\n#if !defined(__WIN32__)\n\n/* OpenGL 1.2 */\n#define GL_RESCALE_NORMAL                       0x803A\n#define GL_CLAMP_TO_EDGE                        0x812F\n#define GL_MAX_ELEMENTS_VERTICES                0x80E8\n#define GL_MAX_ELEMENTS_INDICES                 0x80E9\n#define GL_BGR                                  0x80E0\n#define GL_BGRA                                 0x80E1\n#define GL_UNSIGNED_BYTE_3_3_2                  0x8032\n#define GL_UNSIGNED_BYTE_2_3_3_REV              0x8362\n#define GL_UNSIGNED_SHORT_5_6_5                 0x8363\n#define GL_UNSIGNED_SHORT_5_6_5_REV             0x8364\n#define GL_UNSIGNED_SHORT_4_4_4_4               0x8033\n#define GL_UNSIGNED_SHORT_4_4_4_4_REV           0x8365\n#define GL_UNSIGNED_SHORT_5_5_5_1               0x8034\n#define GL_UNSIGNED_SHORT_1_5_5_5_REV           0x8366\n#define GL_UNSIGNED_INT_8_8_8_8                 0x8035\n#define GL_UNSIGNED_INT_8_8_8_8_REV             0x8367\n#define GL_UNSIGNED_INT_10_10_10_2              0x8036\n#define GL_UNSIGNED_INT_2_10_10_10_REV          0x8368\n#define GL_LIGHT_MODEL_COLOR_CONTROL            0x81F8\n#define GL_SINGLE_COLOR                         0x81F9\n#define GL_SEPARATE_SPECULAR_COLOR              0x81FA\n#define GL_TEXTURE_MIN_LOD                      0x813A\n#define GL_TEXTURE_MAX_LOD                      0x813B\n#define GL_TEXTURE_BASE_LEVEL                   0x813C\n#define GL_TEXTURE_MAX_LEVEL                    0x813D\n#define GL_SMOOTH_POINT_SIZE_RANGE              0x0B12\n#define GL_SMOOTH_POINT_SIZE_GRANULARITY        0x0B13\n#define GL_SMOOTH_LINE_WIDTH_RANGE              0x0B22\n#define GL_SMOOTH_LINE_WIDTH_GRANULARITY        0x0B23\n#define GL_ALIASED_POINT_SIZE_RANGE             0x846D\n#define GL_ALIASED_LINE_WIDTH_RANGE             0x846E\n#define GL_PACK_SKIP_IMAGES                     0x806B\n#define GL_PACK_IMAGE_HEIGHT                    0x806C\n#define GL_UNPACK_SKIP_IMAGES                   0x806D\n#define GL_UNPACK_IMAGE_HEIGHT                  0x806E\n#define GL_TEXTURE_3D                           0x806F\n#define GL_PROXY_TEXTURE_3D                     0x8070\n#define GL_TEXTURE_DEPTH                        0x8071\n#define GL_TEXTURE_WRAP_R                       0x8072\n#define GL_MAX_3D_TEXTURE_SIZE                  0x8073\n#define GL_TEXTURE_BINDING_3D                   0x806A\n\n/* OpenGL 1.2 imaging subset */\n/* GL_EXT_color_table */\n#define GL_COLOR_TABLE                          0x80D0\n#define GL_POST_CONVOLUTION_COLOR_TABLE         0x80D1\n#define GL_POST_COLOR_MATRIX_COLOR_TABLE        0x80D2\n#define GL_PROXY_COLOR_TABLE                    0x80D3\n#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE   0x80D4\n#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE  0x80D5\n#define GL_COLOR_TABLE_SCALE                    0x80D6\n#define GL_COLOR_TABLE_BIAS                     0x80D7\n#define GL_COLOR_TABLE_FORMAT                   0x80D8\n#define GL_COLOR_TABLE_WIDTH                    0x80D9\n#define GL_COLOR_TABLE_RED_SIZE                 0x80DA\n#define GL_COLOR_TABLE_GREEN_SIZE               0x80DB\n#define GL_COLOR_TABLE_BLUE_SIZE                0x80DC\n#define GL_COLOR_TABLE_ALPHA_SIZE               0x80DD\n#define GL_COLOR_TABLE_LUMINANCE_SIZE           0x80DE\n#define GL_COLOR_TABLE_INTENSITY_SIZE           0x80DF\n/* GL_EXT_convolution and GL_HP_convolution_border_modes */\n#define GL_CONVOLUTION_1D                       0x8010\n#define GL_CONVOLUTION_2D                       0x8011\n#define GL_SEPARABLE_2D                         0x8012\n#define GL_CONVOLUTION_BORDER_MODE              0x8013\n#define GL_CONVOLUTION_FILTER_SCALE             0x8014\n#define GL_CONVOLUTION_FILTER_BIAS              0x8015\n#define GL_REDUCE                               0x8016\n#define GL_CONVOLUTION_FORMAT                   0x8017\n#define GL_CONVOLUTION_WIDTH                    0x8018\n#define GL_CONVOLUTION_HEIGHT                   0x8019\n#define GL_MAX_CONVOLUTION_WIDTH                0x801A\n#define GL_MAX_CONVOLUTION_HEIGHT               0x801B\n#define GL_POST_CONVOLUTION_RED_SCALE           0x801C\n#define GL_POST_CONVOLUTION_GREEN_SCALE         0x801D\n#define GL_POST_CONVOLUTION_BLUE_SCALE          0x801E\n#define GL_POST_CONVOLUTION_ALPHA_SCALE         0x801F\n#define GL_POST_CONVOLUTION_RED_BIAS            0x8020\n#define GL_POST_CONVOLUTION_GREEN_BIAS          0x8021\n#define GL_POST_CONVOLUTION_BLUE_BIAS           0x8022\n#define GL_POST_CONVOLUTION_ALPHA_BIAS          0x8023\n#define GL_CONSTANT_BORDER                      0x8151\n#define GL_REPLICATE_BORDER                     0x8153\n#define GL_CONVOLUTION_BORDER_COLOR             0x8154\n/* GL_SGI_color_matrix */\n#define GL_COLOR_MATRIX                         0x80B1\n#define GL_COLOR_MATRIX_STACK_DEPTH             0x80B2\n#define GL_MAX_COLOR_MATRIX_STACK_DEPTH         0x80B3\n#define GL_POST_COLOR_MATRIX_RED_SCALE          0x80B4\n#define GL_POST_COLOR_MATRIX_GREEN_SCALE        0x80B5\n#define GL_POST_COLOR_MATRIX_BLUE_SCALE         0x80B6\n#define GL_POST_COLOR_MATRIX_ALPHA_SCALE        0x80B7\n#define GL_POST_COLOR_MATRIX_RED_BIAS           0x80B8\n#define GL_POST_COLOR_MATRIX_GREEN_BIAS         0x80B9\n#define GL_POST_COLOR_MATRIX_BLUE_BIAS          0x80BA\n#define GL_POST_COLOR_MATRIX_ALPHA_BIAS         0x80BB\n/* GL_EXT_histogram */\n#define GL_HISTOGRAM                            0x8024\n#define GL_PROXY_HISTOGRAM                      0x8025\n#define GL_HISTOGRAM_WIDTH                      0x8026\n#define GL_HISTOGRAM_FORMAT                     0x8027\n#define GL_HISTOGRAM_RED_SIZE                   0x8028\n#define GL_HISTOGRAM_GREEN_SIZE                 0x8029\n#define GL_HISTOGRAM_BLUE_SIZE                  0x802A\n#define GL_HISTOGRAM_ALPHA_SIZE                 0x802B\n#define GL_HISTOGRAM_LUMINANCE_SIZE             0x802C\n#define GL_HISTOGRAM_SINK                       0x802D\n#define GL_MINMAX                               0x802E\n#define GL_MINMAX_FORMAT                        0x802F\n#define GL_MINMAX_SINK                          0x8030\n#define GL_TABLE_TOO_LARGE                      0x8031\n/* GL_EXT_blend_color, GL_EXT_blend_minmax */\n#define GL_BLEND_EQUATION                       0x8009\n#define GL_MIN                                  0x8007\n#define GL_MAX                                  0x8008\n#define GL_FUNC_ADD                             0x8006\n#define GL_FUNC_SUBTRACT                        0x800A\n#define GL_FUNC_REVERSE_SUBTRACT                0x800B\n#define GL_BLEND_COLOR                          0x8005\n\n\n/* OpenGL 1.3 */\n/* multitexture */\n#define GL_TEXTURE0                             0x84C0\n#define GL_TEXTURE1                             0x84C1\n#define GL_TEXTURE2                             0x84C2\n#define GL_TEXTURE3                             0x84C3\n#define GL_TEXTURE4                             0x84C4\n#define GL_TEXTURE5                             0x84C5\n#define GL_TEXTURE6                             0x84C6\n#define GL_TEXTURE7                             0x84C7\n#define GL_TEXTURE8                             0x84C8\n#define GL_TEXTURE9                             0x84C9\n#define GL_TEXTURE10                            0x84CA\n#define GL_TEXTURE11                            0x84CB\n#define GL_TEXTURE12                            0x84CC\n#define GL_TEXTURE13                            0x84CD\n#define GL_TEXTURE14                            0x84CE\n#define GL_TEXTURE15                            0x84CF\n#define GL_TEXTURE16                            0x84D0\n#define GL_TEXTURE17                            0x84D1\n#define GL_TEXTURE18                            0x84D2\n#define GL_TEXTURE19                            0x84D3\n#define GL_TEXTURE20                            0x84D4\n#define GL_TEXTURE21                            0x84D5\n#define GL_TEXTURE22                            0x84D6\n#define GL_TEXTURE23                            0x84D7\n#define GL_TEXTURE24                            0x84D8\n#define GL_TEXTURE25                            0x84D9\n#define GL_TEXTURE26                            0x84DA\n#define GL_TEXTURE27                            0x84DB\n#define GL_TEXTURE28                            0x84DC\n#define GL_TEXTURE29                            0x84DD\n#define GL_TEXTURE30                            0x84DE\n#define GL_TEXTURE31                            0x84DF\n#define GL_ACTIVE_TEXTURE                       0x84E0\n#define GL_CLIENT_ACTIVE_TEXTURE                0x84E1\n#define GL_MAX_TEXTURE_UNITS                    0x84E2\n/* texture_cube_map */\n#define GL_NORMAL_MAP                           0x8511\n#define GL_REFLECTION_MAP                       0x8512\n#define GL_TEXTURE_CUBE_MAP                     0x8513\n#define GL_TEXTURE_BINDING_CUBE_MAP             0x8514\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_X          0x8515\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X          0x8516\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y          0x8517\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y          0x8518\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z          0x8519\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z          0x851A\n#define GL_PROXY_TEXTURE_CUBE_MAP               0x851B\n#define GL_MAX_CUBE_MAP_TEXTURE_SIZE            0x851C\n/* texture_compression */\n#define GL_COMPRESSED_ALPHA                     0x84E9\n#define GL_COMPRESSED_LUMINANCE                 0x84EA\n#define GL_COMPRESSED_LUMINANCE_ALPHA           0x84EB\n#define GL_COMPRESSED_INTENSITY                 0x84EC\n#define GL_COMPRESSED_RGB                       0x84ED\n#define GL_COMPRESSED_RGBA                      0x84EE\n#define GL_TEXTURE_COMPRESSION_HINT             0x84EF\n#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE        0x86A0\n#define GL_TEXTURE_COMPRESSED                   0x86A1\n#define GL_NUM_COMPRESSED_TEXTURE_FORMATS       0x86A2\n#define GL_COMPRESSED_TEXTURE_FORMATS           0x86A3\n/* multisample */\n#define GL_MULTISAMPLE                          0x809D\n#define GL_SAMPLE_ALPHA_TO_COVERAGE             0x809E\n#define GL_SAMPLE_ALPHA_TO_ONE                  0x809F\n#define GL_SAMPLE_COVERAGE                      0x80A0\n#define GL_SAMPLE_BUFFERS                       0x80A8\n#define GL_SAMPLES                              0x80A9\n#define GL_SAMPLE_COVERAGE_VALUE                0x80AA\n#define GL_SAMPLE_COVERAGE_INVERT               0x80AB\n#define GL_MULTISAMPLE_BIT                      0x20000000\n/* transpose_matrix */\n#define GL_TRANSPOSE_MODELVIEW_MATRIX           0x84E3\n#define GL_TRANSPOSE_PROJECTION_MATRIX          0x84E4\n#define GL_TRANSPOSE_TEXTURE_MATRIX             0x84E5\n#define GL_TRANSPOSE_COLOR_MATRIX               0x84E6\n/* texture_env_combine */\n#define GL_COMBINE                              0x8570\n#define GL_COMBINE_RGB                          0x8571\n#define GL_COMBINE_ALPHA                        0x8572\n#define GL_SOURCE0_RGB                          0x8580\n#define GL_SOURCE1_RGB                          0x8581\n#define GL_SOURCE2_RGB                          0x8582\n#define GL_SOURCE0_ALPHA                        0x8588\n#define GL_SOURCE1_ALPHA                        0x8589\n#define GL_SOURCE2_ALPHA                        0x858A\n#define GL_OPERAND0_RGB                         0x8590\n#define GL_OPERAND1_RGB                         0x8591\n#define GL_OPERAND2_RGB                         0x8592\n#define GL_OPERAND0_ALPHA                       0x8598\n#define GL_OPERAND1_ALPHA                       0x8599\n#define GL_OPERAND2_ALPHA                       0x859A\n#define GL_RGB_SCALE                            0x8573\n#define GL_ADD_SIGNED                           0x8574\n#define GL_INTERPOLATE                          0x8575\n#define GL_SUBTRACT                             0x84E7\n#define GL_CONSTANT                             0x8576\n#define GL_PRIMARY_COLOR                        0x8577\n#define GL_PREVIOUS                             0x8578\n/* texture_env_dot3 */\n#define GL_DOT3_RGB                             0x86AE\n#define GL_DOT3_RGBA                            0x86AF\n/* texture_border_clamp */\n#define GL_CLAMP_TO_BORDER                      0x812D\n\n#endif /* __WIN32__ */\n\n\n\n/************************************************************************\n *\n * Function prototypes\n *\n ************************************************************************/\n\n/* Miscellaneous */\nGLAPI void APIENTRY glClearIndex( GLfloat c );\nGLAPI void APIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha );\nGLAPI void APIENTRY glClear( GLbitfield mask );\nGLAPI void APIENTRY glIndexMask( GLuint mask );\nGLAPI void APIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha );\nGLAPI void APIENTRY glAlphaFunc( GLenum func, GLclampf ref );\nGLAPI void APIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor );\nGLAPI void APIENTRY glLogicOp( GLenum opcode );\nGLAPI void APIENTRY glCullFace( GLenum mode );\nGLAPI void APIENTRY glFrontFace( GLenum mode );\nGLAPI void APIENTRY glPointSize( GLfloat size );\nGLAPI void APIENTRY glLineWidth( GLfloat width );\nGLAPI void APIENTRY glLineStipple( GLint factor, GLushort pattern );\nGLAPI void APIENTRY glPolygonMode( GLenum face, GLenum mode );\nGLAPI void APIENTRY glPolygonOffset( GLfloat factor, GLfloat units );\nGLAPI void APIENTRY glPolygonStipple( const GLubyte *mask );\nGLAPI void APIENTRY glGetPolygonStipple( GLubyte *mask );\nGLAPI void APIENTRY glEdgeFlag( GLboolean flag );\nGLAPI void APIENTRY glEdgeFlagv( const GLboolean *flag );\nGLAPI void APIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glClipPlane( GLenum plane, const GLdouble *equation );\nGLAPI void APIENTRY glGetClipPlane( GLenum plane, GLdouble *equation );\nGLAPI void APIENTRY glDrawBuffer( GLenum mode );\nGLAPI void APIENTRY glReadBuffer( GLenum mode );\nGLAPI void APIENTRY glEnable( GLenum cap );\nGLAPI void APIENTRY glDisable( GLenum cap );\nGLAPI GLboolean APIENTRY glIsEnabled( GLenum cap );\nGLAPI void APIENTRY glEnableClientState( GLenum cap );  /* 1.1 */\nGLAPI void APIENTRY glDisableClientState( GLenum cap );  /* 1.1 */\nGLAPI void APIENTRY glGetBooleanv( GLenum pname, GLboolean *params );\nGLAPI void APIENTRY glGetDoublev( GLenum pname, GLdouble *params );\nGLAPI void APIENTRY glGetFloatv( GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetIntegerv( GLenum pname, GLint *params );\nGLAPI void APIENTRY glPushAttrib( GLbitfield mask );\nGLAPI void APIENTRY glPopAttrib( void );\nGLAPI void APIENTRY glPushClientAttrib( GLbitfield mask );  /* 1.1 */\nGLAPI void APIENTRY glPopClientAttrib( void );  /* 1.1 */\nGLAPI GLint APIENTRY glRenderMode( GLenum mode );\nGLAPI GLenum APIENTRY glGetError( void );\nGLAPI const GLubyte* APIENTRY glGetString( GLenum name );\nGLAPI void APIENTRY glFinish( void );\nGLAPI void APIENTRY glFlush( void );\nGLAPI void APIENTRY glHint( GLenum target, GLenum mode );\n\n/* Depth Buffer */\nGLAPI void APIENTRY glClearDepth( GLclampd depth );\nGLAPI void APIENTRY glDepthFunc( GLenum func );\nGLAPI void APIENTRY glDepthMask( GLboolean flag );\nGLAPI void APIENTRY glDepthRange( GLclampd near_val, GLclampd far_val );\n\n/* Accumulation Buffer */\nGLAPI void APIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha );\nGLAPI void APIENTRY glAccum( GLenum op, GLfloat value );\n\n/* Transformation */\nGLAPI void APIENTRY glMatrixMode( GLenum mode );\nGLAPI void APIENTRY glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );\nGLAPI void APIENTRY glFrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );\nGLAPI void APIENTRY glViewport( GLint x, GLint y, GLsizei width, GLsizei height );\nGLAPI void APIENTRY glPushMatrix( void );\nGLAPI void APIENTRY glPopMatrix( void );\nGLAPI void APIENTRY glLoadIdentity( void );\nGLAPI void APIENTRY glLoadMatrixd( const GLdouble *m );\nGLAPI void APIENTRY glLoadMatrixf( const GLfloat *m );\nGLAPI void APIENTRY glMultMatrixd( const GLdouble *m );\nGLAPI void APIENTRY glMultMatrixf( const GLfloat *m );\nGLAPI void APIENTRY glRotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z );\nGLAPI void APIENTRY glRotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z );\nGLAPI void APIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z );\nGLAPI void APIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z );\nGLAPI void APIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z );\nGLAPI void APIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z );\n\n/* Display Lists */\nGLAPI GLboolean APIENTRY glIsList( GLuint list );\nGLAPI void APIENTRY glDeleteLists( GLuint list, GLsizei range );\nGLAPI GLuint APIENTRY glGenLists( GLsizei range );\nGLAPI void APIENTRY glNewList( GLuint list, GLenum mode );\nGLAPI void APIENTRY glEndList( void );\nGLAPI void APIENTRY glCallList( GLuint list );\nGLAPI void APIENTRY glCallLists( GLsizei n, GLenum type, const GLvoid *lists );\nGLAPI void APIENTRY glListBase( GLuint base );\n\n/* Drawing Functions */\nGLAPI void APIENTRY glBegin( GLenum mode );\nGLAPI void APIENTRY glEnd( void );\nGLAPI void APIENTRY glVertex2d( GLdouble x, GLdouble y );\nGLAPI void APIENTRY glVertex2f( GLfloat x, GLfloat y );\nGLAPI void APIENTRY glVertex2i( GLint x, GLint y );\nGLAPI void APIENTRY glVertex2s( GLshort x, GLshort y );\nGLAPI void APIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z );\nGLAPI void APIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z );\nGLAPI void APIENTRY glVertex3i( GLint x, GLint y, GLint z );\nGLAPI void APIENTRY glVertex3s( GLshort x, GLshort y, GLshort z );\nGLAPI void APIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w );\nGLAPI void APIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w );\nGLAPI void APIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w );\nGLAPI void APIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w );\nGLAPI void APIENTRY glVertex2dv( const GLdouble *v );\nGLAPI void APIENTRY glVertex2fv( const GLfloat *v );\nGLAPI void APIENTRY glVertex2iv( const GLint *v );\nGLAPI void APIENTRY glVertex2sv( const GLshort *v );\nGLAPI void APIENTRY glVertex3dv( const GLdouble *v );\nGLAPI void APIENTRY glVertex3fv( const GLfloat *v );\nGLAPI void APIENTRY glVertex3iv( const GLint *v );\nGLAPI void APIENTRY glVertex3sv( const GLshort *v );\nGLAPI void APIENTRY glVertex4dv( const GLdouble *v );\nGLAPI void APIENTRY glVertex4fv( const GLfloat *v );\nGLAPI void APIENTRY glVertex4iv( const GLint *v );\nGLAPI void APIENTRY glVertex4sv( const GLshort *v );\nGLAPI void APIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz );\nGLAPI void APIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz );\nGLAPI void APIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz );\nGLAPI void APIENTRY glNormal3i( GLint nx, GLint ny, GLint nz );\nGLAPI void APIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz );\nGLAPI void APIENTRY glNormal3bv( const GLbyte *v );\nGLAPI void APIENTRY glNormal3dv( const GLdouble *v );\nGLAPI void APIENTRY glNormal3fv( const GLfloat *v );\nGLAPI void APIENTRY glNormal3iv( const GLint *v );\nGLAPI void APIENTRY glNormal3sv( const GLshort *v );\nGLAPI void APIENTRY glIndexd( GLdouble c );\nGLAPI void APIENTRY glIndexf( GLfloat c );\nGLAPI void APIENTRY glIndexi( GLint c );\nGLAPI void APIENTRY glIndexs( GLshort c );\nGLAPI void APIENTRY glIndexub( GLubyte c );  /* 1.1 */\nGLAPI void APIENTRY glIndexdv( const GLdouble *c );\nGLAPI void APIENTRY glIndexfv( const GLfloat *c );\nGLAPI void APIENTRY glIndexiv( const GLint *c );\nGLAPI void APIENTRY glIndexsv( const GLshort *c );\nGLAPI void APIENTRY glIndexubv( const GLubyte *c );  /* 1.1 */\nGLAPI void APIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue );\nGLAPI void APIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue );\nGLAPI void APIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue );\nGLAPI void APIENTRY glColor3i( GLint red, GLint green, GLint blue );\nGLAPI void APIENTRY glColor3s( GLshort red, GLshort green, GLshort blue );\nGLAPI void APIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue );\nGLAPI void APIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue );\nGLAPI void APIENTRY glColor3us( GLushort red, GLushort green, GLushort blue );\nGLAPI void APIENTRY glColor4b( GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha );\nGLAPI void APIENTRY glColor4d( GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha );\nGLAPI void APIENTRY glColor4f( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha );\nGLAPI void APIENTRY glColor4i( GLint red, GLint green, GLint blue, GLint alpha );\nGLAPI void APIENTRY glColor4s( GLshort red, GLshort green, GLshort blue, GLshort alpha );\nGLAPI void APIENTRY glColor4ub( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha );\nGLAPI void APIENTRY glColor4ui( GLuint red, GLuint green, GLuint blue, GLuint alpha );\nGLAPI void APIENTRY glColor4us( GLushort red, GLushort green, GLushort blue, GLushort alpha );\nGLAPI void APIENTRY glColor3bv( const GLbyte *v );\nGLAPI void APIENTRY glColor3dv( const GLdouble *v );\nGLAPI void APIENTRY glColor3fv( const GLfloat *v );\nGLAPI void APIENTRY glColor3iv( const GLint *v );\nGLAPI void APIENTRY glColor3sv( const GLshort *v );\nGLAPI void APIENTRY glColor3ubv( const GLubyte *v );\nGLAPI void APIENTRY glColor3uiv( const GLuint *v );\nGLAPI void APIENTRY glColor3usv( const GLushort *v );\nGLAPI void APIENTRY glColor4bv( const GLbyte *v );\nGLAPI void APIENTRY glColor4dv( const GLdouble *v );\nGLAPI void APIENTRY glColor4fv( const GLfloat *v );\nGLAPI void APIENTRY glColor4iv( const GLint *v );\nGLAPI void APIENTRY glColor4sv( const GLshort *v );\nGLAPI void APIENTRY glColor4ubv( const GLubyte *v );\nGLAPI void APIENTRY glColor4uiv( const GLuint *v );\nGLAPI void APIENTRY glColor4usv( const GLushort *v );\nGLAPI void APIENTRY glTexCoord1d( GLdouble s );\nGLAPI void APIENTRY glTexCoord1f( GLfloat s );\nGLAPI void APIENTRY glTexCoord1i( GLint s );\nGLAPI void APIENTRY glTexCoord1s( GLshort s );\nGLAPI void APIENTRY glTexCoord2d( GLdouble s, GLdouble t );\nGLAPI void APIENTRY glTexCoord2f( GLfloat s, GLfloat t );\nGLAPI void APIENTRY glTexCoord2i( GLint s, GLint t );\nGLAPI void APIENTRY glTexCoord2s( GLshort s, GLshort t );\nGLAPI void APIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r );\nGLAPI void APIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r );\nGLAPI void APIENTRY glTexCoord3i( GLint s, GLint t, GLint r );\nGLAPI void APIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r );\nGLAPI void APIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q );\nGLAPI void APIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q );\nGLAPI void APIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q );\nGLAPI void APIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q );\nGLAPI void APIENTRY glTexCoord1dv( const GLdouble *v );\nGLAPI void APIENTRY glTexCoord1fv( const GLfloat *v );\nGLAPI void APIENTRY glTexCoord1iv( const GLint *v );\nGLAPI void APIENTRY glTexCoord1sv( const GLshort *v );\nGLAPI void APIENTRY glTexCoord2dv( const GLdouble *v );\nGLAPI void APIENTRY glTexCoord2fv( const GLfloat *v );\nGLAPI void APIENTRY glTexCoord2iv( const GLint *v );\nGLAPI void APIENTRY glTexCoord2sv( const GLshort *v );\nGLAPI void APIENTRY glTexCoord3dv( const GLdouble *v );\nGLAPI void APIENTRY glTexCoord3fv( const GLfloat *v );\nGLAPI void APIENTRY glTexCoord3iv( const GLint *v );\nGLAPI void APIENTRY glTexCoord3sv( const GLshort *v );\nGLAPI void APIENTRY glTexCoord4dv( const GLdouble *v );\nGLAPI void APIENTRY glTexCoord4fv( const GLfloat *v );\nGLAPI void APIENTRY glTexCoord4iv( const GLint *v );\nGLAPI void APIENTRY glTexCoord4sv( const GLshort *v );\nGLAPI void APIENTRY glRasterPos2d( GLdouble x, GLdouble y );\nGLAPI void APIENTRY glRasterPos2f( GLfloat x, GLfloat y );\nGLAPI void APIENTRY glRasterPos2i( GLint x, GLint y );\nGLAPI void APIENTRY glRasterPos2s( GLshort x, GLshort y );\nGLAPI void APIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z );\nGLAPI void APIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z );\nGLAPI void APIENTRY glRasterPos3i( GLint x, GLint y, GLint z );\nGLAPI void APIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z );\nGLAPI void APIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w );\nGLAPI void APIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w );\nGLAPI void APIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w );\nGLAPI void APIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w );\nGLAPI void APIENTRY glRasterPos2dv( const GLdouble *v );\nGLAPI void APIENTRY glRasterPos2fv( const GLfloat *v );\nGLAPI void APIENTRY glRasterPos2iv( const GLint *v );\nGLAPI void APIENTRY glRasterPos2sv( const GLshort *v );\nGLAPI void APIENTRY glRasterPos3dv( const GLdouble *v );\nGLAPI void APIENTRY glRasterPos3fv( const GLfloat *v );\nGLAPI void APIENTRY glRasterPos3iv( const GLint *v );\nGLAPI void APIENTRY glRasterPos3sv( const GLshort *v );\nGLAPI void APIENTRY glRasterPos4dv( const GLdouble *v );\nGLAPI void APIENTRY glRasterPos4fv( const GLfloat *v );\nGLAPI void APIENTRY glRasterPos4iv( const GLint *v );\nGLAPI void APIENTRY glRasterPos4sv( const GLshort *v );\nGLAPI void APIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 );\nGLAPI void APIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 );\nGLAPI void APIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 );\nGLAPI void APIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 );\nGLAPI void APIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 );\nGLAPI void APIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 );\nGLAPI void APIENTRY glRectiv( const GLint *v1, const GLint *v2 );\nGLAPI void APIENTRY glRectsv( const GLshort *v1, const GLshort *v2 );\n\n/* Lighting */\nGLAPI void APIENTRY glShadeModel( GLenum mode );\nGLAPI void APIENTRY glLightf( GLenum light, GLenum pname, GLfloat param );\nGLAPI void APIENTRY glLighti( GLenum light, GLenum pname, GLint param );\nGLAPI void APIENTRY glLightfv( GLenum light, GLenum pname, const GLfloat *params );\nGLAPI void APIENTRY glLightiv( GLenum light, GLenum pname, const GLint *params );\nGLAPI void APIENTRY glGetLightfv( GLenum light, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetLightiv( GLenum light, GLenum pname, GLint *params );\nGLAPI void APIENTRY glLightModelf( GLenum pname, GLfloat param );\nGLAPI void APIENTRY glLightModeli( GLenum pname, GLint param );\nGLAPI void APIENTRY glLightModelfv( GLenum pname, const GLfloat *params );\nGLAPI void APIENTRY glLightModeliv( GLenum pname, const GLint *params );\nGLAPI void APIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param );\nGLAPI void APIENTRY glMateriali( GLenum face, GLenum pname, GLint param );\nGLAPI void APIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params );\nGLAPI void APIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params );\nGLAPI void APIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params );\nGLAPI void APIENTRY glColorMaterial( GLenum face, GLenum mode );\n\n/* Raster functions */\nGLAPI void APIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor );\nGLAPI void APIENTRY glPixelStoref( GLenum pname, GLfloat param );\nGLAPI void APIENTRY glPixelStorei( GLenum pname, GLint param );\nGLAPI void APIENTRY glPixelTransferf( GLenum pname, GLfloat param );\nGLAPI void APIENTRY glPixelTransferi( GLenum pname, GLint param );\nGLAPI void APIENTRY glPixelMapfv( GLenum map, GLint mapsize, const GLfloat *values );\nGLAPI void APIENTRY glPixelMapuiv( GLenum map, GLint mapsize, const GLuint *values );\nGLAPI void APIENTRY glPixelMapusv( GLenum map, GLint mapsize, const GLushort *values );\nGLAPI void APIENTRY glGetPixelMapfv( GLenum map, GLfloat *values );\nGLAPI void APIENTRY glGetPixelMapuiv( GLenum map, GLuint *values );\nGLAPI void APIENTRY glGetPixelMapusv( GLenum map, GLushort *values );\nGLAPI void APIENTRY glBitmap( GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap );\nGLAPI void APIENTRY glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels );\nGLAPI void APIENTRY glDrawPixels( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels );\nGLAPI void APIENTRY glCopyPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum type );\n\n/* Stenciling */\nGLAPI void APIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask );\nGLAPI void APIENTRY glStencilMask( GLuint mask );\nGLAPI void APIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass );\nGLAPI void APIENTRY glClearStencil( GLint s );\n\n/* Texture mapping */\nGLAPI void APIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param );\nGLAPI void APIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param );\nGLAPI void APIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param );\nGLAPI void APIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params );\nGLAPI void APIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params );\nGLAPI void APIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params );\nGLAPI void APIENTRY glGetTexGendv( GLenum coord, GLenum pname, GLdouble *params );\nGLAPI void APIENTRY glGetTexGenfv( GLenum coord, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetTexGeniv( GLenum coord, GLenum pname, GLint *params );\nGLAPI void APIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param );\nGLAPI void APIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param );\nGLAPI void APIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params );\nGLAPI void APIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params );\nGLAPI void APIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params );\nGLAPI void APIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param );\nGLAPI void APIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param );\nGLAPI void APIENTRY glTexParameterfv( GLenum target, GLenum pname, const GLfloat *params );\nGLAPI void APIENTRY glTexParameteriv( GLenum target, GLenum pname, const GLint *params );\nGLAPI void APIENTRY glGetTexParameterfv( GLenum target, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetTexParameteriv( GLenum target, GLenum pname, GLint *params );\nGLAPI void APIENTRY glGetTexLevelParameterfv( GLenum target, GLint level, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, GLenum pname, GLint *params );\nGLAPI void APIENTRY glTexImage1D( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels );\nGLAPI void APIENTRY glTexImage2D( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels );\nGLAPI void APIENTRY glGetTexImage( GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels );\n\n/* Evaluators */\nGLAPI void APIENTRY glMap1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points );\nGLAPI void APIENTRY glMap1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points );\nGLAPI void APIENTRY glMap2d( GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points );\nGLAPI void APIENTRY glMap2f( GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points );\nGLAPI void APIENTRY glGetMapdv( GLenum target, GLenum query, GLdouble *v );\nGLAPI void APIENTRY glGetMapfv( GLenum target, GLenum query, GLfloat *v );\nGLAPI void APIENTRY glGetMapiv( GLenum target, GLenum query, GLint *v );\nGLAPI void APIENTRY glEvalCoord1d( GLdouble u );\nGLAPI void APIENTRY glEvalCoord1f( GLfloat u );\nGLAPI void APIENTRY glEvalCoord1dv( const GLdouble *u );\nGLAPI void APIENTRY glEvalCoord1fv( const GLfloat *u );\nGLAPI void APIENTRY glEvalCoord2d( GLdouble u, GLdouble v );\nGLAPI void APIENTRY glEvalCoord2f( GLfloat u, GLfloat v );\nGLAPI void APIENTRY glEvalCoord2dv( const GLdouble *u );\nGLAPI void APIENTRY glEvalCoord2fv( const GLfloat *u );\nGLAPI void APIENTRY glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 );\nGLAPI void APIENTRY glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 );\nGLAPI void APIENTRY glMapGrid2d( GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2 );\nGLAPI void APIENTRY glMapGrid2f( GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2 );\nGLAPI void APIENTRY glEvalPoint1( GLint i );\nGLAPI void APIENTRY glEvalPoint2( GLint i, GLint j );\nGLAPI void APIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 );\nGLAPI void APIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );\n\n/* Fog */\nGLAPI void APIENTRY glFogf( GLenum pname, GLfloat param );\nGLAPI void APIENTRY glFogi( GLenum pname, GLint param );\nGLAPI void APIENTRY glFogfv( GLenum pname, const GLfloat *params );\nGLAPI void APIENTRY glFogiv( GLenum pname, const GLint *params );\n\n/* Selection and Feedback */\nGLAPI void APIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer );\nGLAPI void APIENTRY glPassThrough( GLfloat token );\nGLAPI void APIENTRY glSelectBuffer( GLsizei size, GLuint *buffer );\nGLAPI void APIENTRY glInitNames( void );\nGLAPI void APIENTRY glLoadName( GLuint name );\nGLAPI void APIENTRY glPushName( GLuint name );\nGLAPI void APIENTRY glPopName( void );\n\n\n/* 1.1 functions */\n/* texture objects */\nGLAPI void APIENTRY glGenTextures( GLsizei n, GLuint *textures );\nGLAPI void APIENTRY glDeleteTextures( GLsizei n, const GLuint *textures);\nGLAPI void APIENTRY glBindTexture( GLenum target, GLuint texture );\nGLAPI void APIENTRY glPrioritizeTextures( GLsizei n, const GLuint *textures, const GLclampf *priorities );\nGLAPI GLboolean APIENTRY glAreTexturesResident( GLsizei n, const GLuint *textures, GLboolean *residences );\nGLAPI GLboolean APIENTRY glIsTexture( GLuint texture );\n/* texture mapping */\nGLAPI void APIENTRY glTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels );\nGLAPI void APIENTRY glTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels );\nGLAPI void APIENTRY glCopyTexImage1D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border );\nGLAPI void APIENTRY glCopyTexImage2D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border );\nGLAPI void APIENTRY glCopyTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width );\nGLAPI void APIENTRY glCopyTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height );\n/* vertex arrays */\nGLAPI void APIENTRY glVertexPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );\nGLAPI void APIENTRY glNormalPointer( GLenum type, GLsizei stride, const GLvoid *ptr );\nGLAPI void APIENTRY glColorPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );\nGLAPI void APIENTRY glIndexPointer( GLenum type, GLsizei stride, const GLvoid *ptr );\nGLAPI void APIENTRY glTexCoordPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );\nGLAPI void APIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr );\nGLAPI void APIENTRY glGetPointerv( GLenum pname, GLvoid **params );\nGLAPI void APIENTRY glArrayElement( GLint i );\nGLAPI void APIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count );\nGLAPI void APIENTRY glDrawElements( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices );\nGLAPI void APIENTRY glInterleavedArrays( GLenum format, GLsizei stride, const GLvoid *pointer );\n\n\n\n/* Under Windows, we do not define OpenGL 1.2 & 1.3 functionality, since\n   it is treated as extensions (defined in glext.h) */\n#if !defined(__WIN32__)\n\n/* 1.2 functions */\nGLAPI void APIENTRY glDrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices );\nGLAPI void APIENTRY glTexImage3D( GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels );\nGLAPI void APIENTRY glTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glCopyTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height );\n\n/* 1.2 imaging extension functions */\nGLAPI void APIENTRY glColorTable( GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table );\nGLAPI void APIENTRY glColorSubTable( GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data );\nGLAPI void APIENTRY glColorTableParameteriv(GLenum target, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glColorTableParameterfv(GLenum target, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glCopyColorSubTable( GLenum target, GLsizei start, GLint x, GLint y, GLsizei width );\nGLAPI void APIENTRY glCopyColorTable( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width );\nGLAPI void APIENTRY glGetColorTable( GLenum target, GLenum format, GLenum type, GLvoid *table );\nGLAPI void APIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, GLint *params );\nGLAPI void APIENTRY glBlendEquation( GLenum mode );\nGLAPI void APIENTRY glBlendColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha );\nGLAPI void APIENTRY glHistogram( GLenum target, GLsizei width, GLenum internalformat, GLboolean sink );\nGLAPI void APIENTRY glResetHistogram( GLenum target );\nGLAPI void APIENTRY glGetHistogram( GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values );\nGLAPI void APIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, GLint *params );\nGLAPI void APIENTRY glMinmax( GLenum target, GLenum internalformat, GLboolean sink );\nGLAPI void APIENTRY glResetMinmax( GLenum target );\nGLAPI void APIENTRY glGetMinmax( GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values );\nGLAPI void APIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, GLint *params );\nGLAPI void APIENTRY glConvolutionFilter1D( GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image );\nGLAPI void APIENTRY glConvolutionFilter2D( GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image );\nGLAPI void APIENTRY glConvolutionParameterf( GLenum target, GLenum pname, GLfloat params );\nGLAPI void APIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, const GLfloat *params );\nGLAPI void APIENTRY glConvolutionParameteri( GLenum target, GLenum pname, GLint params );\nGLAPI void APIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, const GLint *params );\nGLAPI void APIENTRY glCopyConvolutionFilter1D( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width );\nGLAPI void APIENTRY glCopyConvolutionFilter2D( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glGetConvolutionFilter( GLenum target, GLenum format, GLenum type, GLvoid *image );\nGLAPI void APIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, GLint *params );\nGLAPI void APIENTRY glSeparableFilter2D( GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column );\nGLAPI void APIENTRY glGetSeparableFilter( GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span );\n\n/* 1.3 functions */\nGLAPI void APIENTRY glActiveTexture( GLenum texture );\nGLAPI void APIENTRY glClientActiveTexture( GLenum texture );\nGLAPI void APIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data );\nGLAPI void APIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data );\nGLAPI void APIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data );\nGLAPI void APIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data );\nGLAPI void APIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data );\nGLAPI void APIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data );\nGLAPI void APIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img );\nGLAPI void APIENTRY glMultiTexCoord1d( GLenum target, GLdouble s );\nGLAPI void APIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v );\nGLAPI void APIENTRY glMultiTexCoord1f( GLenum target, GLfloat s );\nGLAPI void APIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v );\nGLAPI void APIENTRY glMultiTexCoord1i( GLenum target, GLint s );\nGLAPI void APIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v );\nGLAPI void APIENTRY glMultiTexCoord1s( GLenum target, GLshort s );\nGLAPI void APIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v );\nGLAPI void APIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t );\nGLAPI void APIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v );\nGLAPI void APIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t );\nGLAPI void APIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v );\nGLAPI void APIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t );\nGLAPI void APIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v );\nGLAPI void APIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t );\nGLAPI void APIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v );\nGLAPI void APIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r );\nGLAPI void APIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v );\nGLAPI void APIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r );\nGLAPI void APIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v );\nGLAPI void APIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r );\nGLAPI void APIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v );\nGLAPI void APIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r );\nGLAPI void APIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v );\nGLAPI void APIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q );\nGLAPI void APIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v );\nGLAPI void APIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q );\nGLAPI void APIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v );\nGLAPI void APIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q );\nGLAPI void APIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v );\nGLAPI void APIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q );\nGLAPI void APIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v );\nGLAPI void APIENTRY glLoadTransposeMatrixd( const GLdouble m[16] );\nGLAPI void APIENTRY glLoadTransposeMatrixf( const GLfloat m[16] );\nGLAPI void APIENTRY glMultTransposeMatrixd( const GLdouble m[16] );\nGLAPI void APIENTRY glMultTransposeMatrixf( const GLfloat m[16] );\nGLAPI void APIENTRY glSampleCoverage( GLclampf value, GLboolean invert );\nGLAPI void APIENTRY glSamplePass( GLenum pass );\n\n#endif /* __WIN32__ */\n\n\n/* Include external definitions of OpenGL extensions */\n/* Removed, see this bug report for reference:\n * http://sourceforge.net/tracker/index.php?func=detail&aid=610178&group_id=2435&atid=102435\n * \n * #include <GL/glext.h>\n */\n\n\n/************************************************************************\n * Begin system-specific stuff\n */\n/*\n * End system-specific stuff\n ************************************************************************/\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __gl_h_ */\n"
  },
  {
    "path": "Include/gl/glext.h",
    "content": "#ifndef __glext_h_\n#define __glext_h_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n** THIS FILE IS OBSOLETE. Please migrate away from using the\n** \".spec\" files and the headers generated from them to the\n** XML Registry and headers generated from that. See\n**   http://www.opengl.org/registry/api/README.txt\n** for more information.\n** \n** \n** Copyright (c) 2007-2013 The Khronos Group Inc.\n** \n** Permission is hereby granted, free of charge, to any person obtaining a\n** copy of this software and/or associated documentation files (the\n** \"Materials\"), to deal in the Materials without restriction, including\n** without limitation the rights to use, copy, modify, merge, publish,\n** distribute, sublicense, and/or sell copies of the Materials, and to\n** permit persons to whom the Materials are furnished to do so, subject to\n** the following conditions:\n** \n** The above copyright notice and this permission notice shall be included\n** in all copies or substantial portions of the Materials.\n** \n** THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\n*/\n\n/* Header file version number, required by OpenGL ABI for Linux */\n/* glext.h last updated $Date: 2013-06-13 02:52:31 -0700 (Thu, 13 Jun 2013) $ */\n/* Current version at http://www.opengl.org/registry/ */\n#define GL_GLEXT_VERSION 87\n/* Function declaration macros - to move into glplatform.h */\n\n#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)\n#define WIN32_LEAN_AND_MEAN 1\n#include <windows.h>\n#endif\n\n#ifndef APIENTRY\n#define APIENTRY\n#endif\n#ifndef APIENTRYP\n#define APIENTRYP APIENTRY *\n#endif\n#ifndef GLAPI\n#define GLAPI extern\n#endif\n\n/*************************************************************/\n\n#ifndef GL_VERSION_1_2\n#define GL_UNSIGNED_BYTE_3_3_2            0x8032\n#define GL_UNSIGNED_SHORT_4_4_4_4         0x8033\n#define GL_UNSIGNED_SHORT_5_5_5_1         0x8034\n#define GL_UNSIGNED_INT_8_8_8_8           0x8035\n#define GL_UNSIGNED_INT_10_10_10_2        0x8036\n#define GL_TEXTURE_BINDING_3D             0x806A\n#define GL_PACK_SKIP_IMAGES               0x806B\n#define GL_PACK_IMAGE_HEIGHT              0x806C\n#define GL_UNPACK_SKIP_IMAGES             0x806D\n#define GL_UNPACK_IMAGE_HEIGHT            0x806E\n#define GL_TEXTURE_3D                     0x806F\n#define GL_PROXY_TEXTURE_3D               0x8070\n#define GL_TEXTURE_DEPTH                  0x8071\n#define GL_TEXTURE_WRAP_R                 0x8072\n#define GL_MAX_3D_TEXTURE_SIZE            0x8073\n#define GL_UNSIGNED_BYTE_2_3_3_REV        0x8362\n#define GL_UNSIGNED_SHORT_5_6_5           0x8363\n#define GL_UNSIGNED_SHORT_5_6_5_REV       0x8364\n#define GL_UNSIGNED_SHORT_4_4_4_4_REV     0x8365\n#define GL_UNSIGNED_SHORT_1_5_5_5_REV     0x8366\n#define GL_UNSIGNED_INT_8_8_8_8_REV       0x8367\n#define GL_UNSIGNED_INT_2_10_10_10_REV    0x8368\n#define GL_BGR                            0x80E0\n#define GL_BGRA                           0x80E1\n#define GL_MAX_ELEMENTS_VERTICES          0x80E8\n#define GL_MAX_ELEMENTS_INDICES           0x80E9\n#define GL_CLAMP_TO_EDGE                  0x812F\n#define GL_TEXTURE_MIN_LOD                0x813A\n#define GL_TEXTURE_MAX_LOD                0x813B\n#define GL_TEXTURE_BASE_LEVEL             0x813C\n#define GL_TEXTURE_MAX_LEVEL              0x813D\n#define GL_SMOOTH_POINT_SIZE_RANGE        0x0B12\n#define GL_SMOOTH_POINT_SIZE_GRANULARITY  0x0B13\n#define GL_SMOOTH_LINE_WIDTH_RANGE        0x0B22\n#define GL_SMOOTH_LINE_WIDTH_GRANULARITY  0x0B23\n#define GL_ALIASED_LINE_WIDTH_RANGE       0x846E\n#define GL_RESCALE_NORMAL                 0x803A\n#define GL_LIGHT_MODEL_COLOR_CONTROL      0x81F8\n#define GL_SINGLE_COLOR                   0x81F9\n#define GL_SEPARATE_SPECULAR_COLOR        0x81FA\n#define GL_ALIASED_POINT_SIZE_RANGE       0x846D\n#endif\n\n#ifndef GL_ARB_imaging\n#define GL_CONSTANT_COLOR                 0x8001\n#define GL_ONE_MINUS_CONSTANT_COLOR       0x8002\n#define GL_CONSTANT_ALPHA                 0x8003\n#define GL_ONE_MINUS_CONSTANT_ALPHA       0x8004\n#define GL_BLEND_COLOR                    0x8005\n#define GL_FUNC_ADD                       0x8006\n#define GL_MIN                            0x8007\n#define GL_MAX                            0x8008\n#define GL_BLEND_EQUATION                 0x8009\n#define GL_FUNC_SUBTRACT                  0x800A\n#define GL_FUNC_REVERSE_SUBTRACT          0x800B\n#define GL_CONVOLUTION_1D                 0x8010\n#define GL_CONVOLUTION_2D                 0x8011\n#define GL_SEPARABLE_2D                   0x8012\n#define GL_CONVOLUTION_BORDER_MODE        0x8013\n#define GL_CONVOLUTION_FILTER_SCALE       0x8014\n#define GL_CONVOLUTION_FILTER_BIAS        0x8015\n#define GL_REDUCE                         0x8016\n#define GL_CONVOLUTION_FORMAT             0x8017\n#define GL_CONVOLUTION_WIDTH              0x8018\n#define GL_CONVOLUTION_HEIGHT             0x8019\n#define GL_MAX_CONVOLUTION_WIDTH          0x801A\n#define GL_MAX_CONVOLUTION_HEIGHT         0x801B\n#define GL_POST_CONVOLUTION_RED_SCALE     0x801C\n#define GL_POST_CONVOLUTION_GREEN_SCALE   0x801D\n#define GL_POST_CONVOLUTION_BLUE_SCALE    0x801E\n#define GL_POST_CONVOLUTION_ALPHA_SCALE   0x801F\n#define GL_POST_CONVOLUTION_RED_BIAS      0x8020\n#define GL_POST_CONVOLUTION_GREEN_BIAS    0x8021\n#define GL_POST_CONVOLUTION_BLUE_BIAS     0x8022\n#define GL_POST_CONVOLUTION_ALPHA_BIAS    0x8023\n#define GL_HISTOGRAM                      0x8024\n#define GL_PROXY_HISTOGRAM                0x8025\n#define GL_HISTOGRAM_WIDTH                0x8026\n#define GL_HISTOGRAM_FORMAT               0x8027\n#define GL_HISTOGRAM_RED_SIZE             0x8028\n#define GL_HISTOGRAM_GREEN_SIZE           0x8029\n#define GL_HISTOGRAM_BLUE_SIZE            0x802A\n#define GL_HISTOGRAM_ALPHA_SIZE           0x802B\n#define GL_HISTOGRAM_LUMINANCE_SIZE       0x802C\n#define GL_HISTOGRAM_SINK                 0x802D\n#define GL_MINMAX                         0x802E\n#define GL_MINMAX_FORMAT                  0x802F\n#define GL_MINMAX_SINK                    0x8030\n#define GL_TABLE_TOO_LARGE                0x8031\n#define GL_COLOR_MATRIX                   0x80B1\n#define GL_COLOR_MATRIX_STACK_DEPTH       0x80B2\n#define GL_MAX_COLOR_MATRIX_STACK_DEPTH   0x80B3\n#define GL_POST_COLOR_MATRIX_RED_SCALE    0x80B4\n#define GL_POST_COLOR_MATRIX_GREEN_SCALE  0x80B5\n#define GL_POST_COLOR_MATRIX_BLUE_SCALE   0x80B6\n#define GL_POST_COLOR_MATRIX_ALPHA_SCALE  0x80B7\n#define GL_POST_COLOR_MATRIX_RED_BIAS     0x80B8\n#define GL_POST_COLOR_MATRIX_GREEN_BIAS   0x80B9\n#define GL_POST_COLOR_MATRIX_BLUE_BIAS    0x80BA\n#define GL_POST_COLOR_MATRIX_ALPHA_BIAS   0x80BB\n#define GL_COLOR_TABLE                    0x80D0\n#define GL_POST_CONVOLUTION_COLOR_TABLE   0x80D1\n#define GL_POST_COLOR_MATRIX_COLOR_TABLE  0x80D2\n#define GL_PROXY_COLOR_TABLE              0x80D3\n#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4\n#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5\n#define GL_COLOR_TABLE_SCALE              0x80D6\n#define GL_COLOR_TABLE_BIAS               0x80D7\n#define GL_COLOR_TABLE_FORMAT             0x80D8\n#define GL_COLOR_TABLE_WIDTH              0x80D9\n#define GL_COLOR_TABLE_RED_SIZE           0x80DA\n#define GL_COLOR_TABLE_GREEN_SIZE         0x80DB\n#define GL_COLOR_TABLE_BLUE_SIZE          0x80DC\n#define GL_COLOR_TABLE_ALPHA_SIZE         0x80DD\n#define GL_COLOR_TABLE_LUMINANCE_SIZE     0x80DE\n#define GL_COLOR_TABLE_INTENSITY_SIZE     0x80DF\n#define GL_CONSTANT_BORDER                0x8151\n#define GL_REPLICATE_BORDER               0x8153\n#define GL_CONVOLUTION_BORDER_COLOR       0x8154\n#endif\n\n#ifndef GL_VERSION_1_3\n#define GL_TEXTURE0                       0x84C0\n#define GL_TEXTURE1                       0x84C1\n#define GL_TEXTURE2                       0x84C2\n#define GL_TEXTURE3                       0x84C3\n#define GL_TEXTURE4                       0x84C4\n#define GL_TEXTURE5                       0x84C5\n#define GL_TEXTURE6                       0x84C6\n#define GL_TEXTURE7                       0x84C7\n#define GL_TEXTURE8                       0x84C8\n#define GL_TEXTURE9                       0x84C9\n#define GL_TEXTURE10                      0x84CA\n#define GL_TEXTURE11                      0x84CB\n#define GL_TEXTURE12                      0x84CC\n#define GL_TEXTURE13                      0x84CD\n#define GL_TEXTURE14                      0x84CE\n#define GL_TEXTURE15                      0x84CF\n#define GL_TEXTURE16                      0x84D0\n#define GL_TEXTURE17                      0x84D1\n#define GL_TEXTURE18                      0x84D2\n#define GL_TEXTURE19                      0x84D3\n#define GL_TEXTURE20                      0x84D4\n#define GL_TEXTURE21                      0x84D5\n#define GL_TEXTURE22                      0x84D6\n#define GL_TEXTURE23                      0x84D7\n#define GL_TEXTURE24                      0x84D8\n#define GL_TEXTURE25                      0x84D9\n#define GL_TEXTURE26                      0x84DA\n#define GL_TEXTURE27                      0x84DB\n#define GL_TEXTURE28                      0x84DC\n#define GL_TEXTURE29                      0x84DD\n#define GL_TEXTURE30                      0x84DE\n#define GL_TEXTURE31                      0x84DF\n#define GL_ACTIVE_TEXTURE                 0x84E0\n#define GL_MULTISAMPLE                    0x809D\n#define GL_SAMPLE_ALPHA_TO_COVERAGE       0x809E\n#define GL_SAMPLE_ALPHA_TO_ONE            0x809F\n#define GL_SAMPLE_COVERAGE                0x80A0\n#define GL_SAMPLE_BUFFERS                 0x80A8\n#define GL_SAMPLES                        0x80A9\n#define GL_SAMPLE_COVERAGE_VALUE          0x80AA\n#define GL_SAMPLE_COVERAGE_INVERT         0x80AB\n#define GL_TEXTURE_CUBE_MAP               0x8513\n#define GL_TEXTURE_BINDING_CUBE_MAP       0x8514\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_X    0x8515\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X    0x8516\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y    0x8517\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y    0x8518\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z    0x8519\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z    0x851A\n#define GL_PROXY_TEXTURE_CUBE_MAP         0x851B\n#define GL_MAX_CUBE_MAP_TEXTURE_SIZE      0x851C\n#define GL_COMPRESSED_RGB                 0x84ED\n#define GL_COMPRESSED_RGBA                0x84EE\n#define GL_TEXTURE_COMPRESSION_HINT       0x84EF\n#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE  0x86A0\n#define GL_TEXTURE_COMPRESSED             0x86A1\n#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2\n#define GL_COMPRESSED_TEXTURE_FORMATS     0x86A3\n#define GL_CLAMP_TO_BORDER                0x812D\n#define GL_CLIENT_ACTIVE_TEXTURE          0x84E1\n#define GL_MAX_TEXTURE_UNITS              0x84E2\n#define GL_TRANSPOSE_MODELVIEW_MATRIX     0x84E3\n#define GL_TRANSPOSE_PROJECTION_MATRIX    0x84E4\n#define GL_TRANSPOSE_TEXTURE_MATRIX       0x84E5\n#define GL_TRANSPOSE_COLOR_MATRIX         0x84E6\n#define GL_MULTISAMPLE_BIT                0x20000000\n#define GL_NORMAL_MAP                     0x8511\n#define GL_REFLECTION_MAP                 0x8512\n#define GL_COMPRESSED_ALPHA               0x84E9\n#define GL_COMPRESSED_LUMINANCE           0x84EA\n#define GL_COMPRESSED_LUMINANCE_ALPHA     0x84EB\n#define GL_COMPRESSED_INTENSITY           0x84EC\n#define GL_COMBINE                        0x8570\n#define GL_COMBINE_RGB                    0x8571\n#define GL_COMBINE_ALPHA                  0x8572\n#define GL_SOURCE0_RGB                    0x8580\n#define GL_SOURCE1_RGB                    0x8581\n#define GL_SOURCE2_RGB                    0x8582\n#define GL_SOURCE0_ALPHA                  0x8588\n#define GL_SOURCE1_ALPHA                  0x8589\n#define GL_SOURCE2_ALPHA                  0x858A\n#define GL_OPERAND0_RGB                   0x8590\n#define GL_OPERAND1_RGB                   0x8591\n#define GL_OPERAND2_RGB                   0x8592\n#define GL_OPERAND0_ALPHA                 0x8598\n#define GL_OPERAND1_ALPHA                 0x8599\n#define GL_OPERAND2_ALPHA                 0x859A\n#define GL_RGB_SCALE                      0x8573\n#define GL_ADD_SIGNED                     0x8574\n#define GL_INTERPOLATE                    0x8575\n#define GL_SUBTRACT                       0x84E7\n#define GL_CONSTANT                       0x8576\n#define GL_PRIMARY_COLOR                  0x8577\n#define GL_PREVIOUS                       0x8578\n#define GL_DOT3_RGB                       0x86AE\n#define GL_DOT3_RGBA                      0x86AF\n#endif\n\n#ifndef GL_VERSION_1_4\n#define GL_BLEND_DST_RGB                  0x80C8\n#define GL_BLEND_SRC_RGB                  0x80C9\n#define GL_BLEND_DST_ALPHA                0x80CA\n#define GL_BLEND_SRC_ALPHA                0x80CB\n#define GL_POINT_FADE_THRESHOLD_SIZE      0x8128\n#define GL_DEPTH_COMPONENT16              0x81A5\n#define GL_DEPTH_COMPONENT24              0x81A6\n#define GL_DEPTH_COMPONENT32              0x81A7\n#define GL_MIRRORED_REPEAT                0x8370\n#define GL_MAX_TEXTURE_LOD_BIAS           0x84FD\n#define GL_TEXTURE_LOD_BIAS               0x8501\n#define GL_INCR_WRAP                      0x8507\n#define GL_DECR_WRAP                      0x8508\n#define GL_TEXTURE_DEPTH_SIZE             0x884A\n#define GL_TEXTURE_COMPARE_MODE           0x884C\n#define GL_TEXTURE_COMPARE_FUNC           0x884D\n#define GL_POINT_SIZE_MIN                 0x8126\n#define GL_POINT_SIZE_MAX                 0x8127\n#define GL_POINT_DISTANCE_ATTENUATION     0x8129\n#define GL_GENERATE_MIPMAP                0x8191\n#define GL_GENERATE_MIPMAP_HINT           0x8192\n#define GL_FOG_COORDINATE_SOURCE          0x8450\n#define GL_FOG_COORDINATE                 0x8451\n#define GL_FRAGMENT_DEPTH                 0x8452\n#define GL_CURRENT_FOG_COORDINATE         0x8453\n#define GL_FOG_COORDINATE_ARRAY_TYPE      0x8454\n#define GL_FOG_COORDINATE_ARRAY_STRIDE    0x8455\n#define GL_FOG_COORDINATE_ARRAY_POINTER   0x8456\n#define GL_FOG_COORDINATE_ARRAY           0x8457\n#define GL_COLOR_SUM                      0x8458\n#define GL_CURRENT_SECONDARY_COLOR        0x8459\n#define GL_SECONDARY_COLOR_ARRAY_SIZE     0x845A\n#define GL_SECONDARY_COLOR_ARRAY_TYPE     0x845B\n#define GL_SECONDARY_COLOR_ARRAY_STRIDE   0x845C\n#define GL_SECONDARY_COLOR_ARRAY_POINTER  0x845D\n#define GL_SECONDARY_COLOR_ARRAY          0x845E\n#define GL_TEXTURE_FILTER_CONTROL         0x8500\n#define GL_DEPTH_TEXTURE_MODE             0x884B\n#define GL_COMPARE_R_TO_TEXTURE           0x884E\n#endif\n\n#ifndef GL_VERSION_1_5\n#define GL_BUFFER_SIZE                    0x8764\n#define GL_BUFFER_USAGE                   0x8765\n#define GL_QUERY_COUNTER_BITS             0x8864\n#define GL_CURRENT_QUERY                  0x8865\n#define GL_QUERY_RESULT                   0x8866\n#define GL_QUERY_RESULT_AVAILABLE         0x8867\n#define GL_ARRAY_BUFFER                   0x8892\n#define GL_ELEMENT_ARRAY_BUFFER           0x8893\n#define GL_ARRAY_BUFFER_BINDING           0x8894\n#define GL_ELEMENT_ARRAY_BUFFER_BINDING   0x8895\n#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F\n#define GL_READ_ONLY                      0x88B8\n#define GL_WRITE_ONLY                     0x88B9\n#define GL_READ_WRITE                     0x88BA\n#define GL_BUFFER_ACCESS                  0x88BB\n#define GL_BUFFER_MAPPED                  0x88BC\n#define GL_BUFFER_MAP_POINTER             0x88BD\n#define GL_STREAM_DRAW                    0x88E0\n#define GL_STREAM_READ                    0x88E1\n#define GL_STREAM_COPY                    0x88E2\n#define GL_STATIC_DRAW                    0x88E4\n#define GL_STATIC_READ                    0x88E5\n#define GL_STATIC_COPY                    0x88E6\n#define GL_DYNAMIC_DRAW                   0x88E8\n#define GL_DYNAMIC_READ                   0x88E9\n#define GL_DYNAMIC_COPY                   0x88EA\n#define GL_SAMPLES_PASSED                 0x8914\n#define GL_SRC1_ALPHA                     0x8589\n#define GL_VERTEX_ARRAY_BUFFER_BINDING    0x8896\n#define GL_NORMAL_ARRAY_BUFFER_BINDING    0x8897\n#define GL_COLOR_ARRAY_BUFFER_BINDING     0x8898\n#define GL_INDEX_ARRAY_BUFFER_BINDING     0x8899\n#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A\n#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B\n#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C\n#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D\n#define GL_WEIGHT_ARRAY_BUFFER_BINDING    0x889E\n#define GL_FOG_COORD_SRC                  0x8450\n#define GL_FOG_COORD                      0x8451\n#define GL_CURRENT_FOG_COORD              0x8453\n#define GL_FOG_COORD_ARRAY_TYPE           0x8454\n#define GL_FOG_COORD_ARRAY_STRIDE         0x8455\n#define GL_FOG_COORD_ARRAY_POINTER        0x8456\n#define GL_FOG_COORD_ARRAY                0x8457\n#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D\n#define GL_SRC0_RGB                       0x8580\n#define GL_SRC1_RGB                       0x8581\n#define GL_SRC2_RGB                       0x8582\n#define GL_SRC0_ALPHA                     0x8588\n#define GL_SRC2_ALPHA                     0x858A\n#endif\n\n#ifndef GL_VERSION_2_0\n#define GL_BLEND_EQUATION_RGB             0x8009\n#define GL_VERTEX_ATTRIB_ARRAY_ENABLED    0x8622\n#define GL_VERTEX_ATTRIB_ARRAY_SIZE       0x8623\n#define GL_VERTEX_ATTRIB_ARRAY_STRIDE     0x8624\n#define GL_VERTEX_ATTRIB_ARRAY_TYPE       0x8625\n#define GL_CURRENT_VERTEX_ATTRIB          0x8626\n#define GL_VERTEX_PROGRAM_POINT_SIZE      0x8642\n#define GL_VERTEX_ATTRIB_ARRAY_POINTER    0x8645\n#define GL_STENCIL_BACK_FUNC              0x8800\n#define GL_STENCIL_BACK_FAIL              0x8801\n#define GL_STENCIL_BACK_PASS_DEPTH_FAIL   0x8802\n#define GL_STENCIL_BACK_PASS_DEPTH_PASS   0x8803\n#define GL_MAX_DRAW_BUFFERS               0x8824\n#define GL_DRAW_BUFFER0                   0x8825\n#define GL_DRAW_BUFFER1                   0x8826\n#define GL_DRAW_BUFFER2                   0x8827\n#define GL_DRAW_BUFFER3                   0x8828\n#define GL_DRAW_BUFFER4                   0x8829\n#define GL_DRAW_BUFFER5                   0x882A\n#define GL_DRAW_BUFFER6                   0x882B\n#define GL_DRAW_BUFFER7                   0x882C\n#define GL_DRAW_BUFFER8                   0x882D\n#define GL_DRAW_BUFFER9                   0x882E\n#define GL_DRAW_BUFFER10                  0x882F\n#define GL_DRAW_BUFFER11                  0x8830\n#define GL_DRAW_BUFFER12                  0x8831\n#define GL_DRAW_BUFFER13                  0x8832\n#define GL_DRAW_BUFFER14                  0x8833\n#define GL_DRAW_BUFFER15                  0x8834\n#define GL_BLEND_EQUATION_ALPHA           0x883D\n#define GL_MAX_VERTEX_ATTRIBS             0x8869\n#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A\n#define GL_MAX_TEXTURE_IMAGE_UNITS        0x8872\n#define GL_FRAGMENT_SHADER                0x8B30\n#define GL_VERTEX_SHADER                  0x8B31\n#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49\n#define GL_MAX_VERTEX_UNIFORM_COMPONENTS  0x8B4A\n#define GL_MAX_VARYING_FLOATS             0x8B4B\n#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C\n#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D\n#define GL_SHADER_TYPE                    0x8B4F\n#define GL_FLOAT_VEC2                     0x8B50\n#define GL_FLOAT_VEC3                     0x8B51\n#define GL_FLOAT_VEC4                     0x8B52\n#define GL_INT_VEC2                       0x8B53\n#define GL_INT_VEC3                       0x8B54\n#define GL_INT_VEC4                       0x8B55\n#define GL_BOOL                           0x8B56\n#define GL_BOOL_VEC2                      0x8B57\n#define GL_BOOL_VEC3                      0x8B58\n#define GL_BOOL_VEC4                      0x8B59\n#define GL_FLOAT_MAT2                     0x8B5A\n#define GL_FLOAT_MAT3                     0x8B5B\n#define GL_FLOAT_MAT4                     0x8B5C\n#define GL_SAMPLER_1D                     0x8B5D\n#define GL_SAMPLER_2D                     0x8B5E\n#define GL_SAMPLER_3D                     0x8B5F\n#define GL_SAMPLER_CUBE                   0x8B60\n#define GL_SAMPLER_1D_SHADOW              0x8B61\n#define GL_SAMPLER_2D_SHADOW              0x8B62\n#define GL_DELETE_STATUS                  0x8B80\n#define GL_COMPILE_STATUS                 0x8B81\n#define GL_LINK_STATUS                    0x8B82\n#define GL_VALIDATE_STATUS                0x8B83\n#define GL_INFO_LOG_LENGTH                0x8B84\n#define GL_ATTACHED_SHADERS               0x8B85\n#define GL_ACTIVE_UNIFORMS                0x8B86\n#define GL_ACTIVE_UNIFORM_MAX_LENGTH      0x8B87\n#define GL_SHADER_SOURCE_LENGTH           0x8B88\n#define GL_ACTIVE_ATTRIBUTES              0x8B89\n#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH    0x8B8A\n#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B\n#define GL_SHADING_LANGUAGE_VERSION       0x8B8C\n#define GL_CURRENT_PROGRAM                0x8B8D\n#define GL_POINT_SPRITE_COORD_ORIGIN      0x8CA0\n#define GL_LOWER_LEFT                     0x8CA1\n#define GL_UPPER_LEFT                     0x8CA2\n#define GL_STENCIL_BACK_REF               0x8CA3\n#define GL_STENCIL_BACK_VALUE_MASK        0x8CA4\n#define GL_STENCIL_BACK_WRITEMASK         0x8CA5\n#define GL_VERTEX_PROGRAM_TWO_SIDE        0x8643\n#define GL_POINT_SPRITE                   0x8861\n#define GL_COORD_REPLACE                  0x8862\n#define GL_MAX_TEXTURE_COORDS             0x8871\n#endif\n\n#ifndef GL_VERSION_2_1\n#define GL_PIXEL_PACK_BUFFER              0x88EB\n#define GL_PIXEL_UNPACK_BUFFER            0x88EC\n#define GL_PIXEL_PACK_BUFFER_BINDING      0x88ED\n#define GL_PIXEL_UNPACK_BUFFER_BINDING    0x88EF\n#define GL_FLOAT_MAT2x3                   0x8B65\n#define GL_FLOAT_MAT2x4                   0x8B66\n#define GL_FLOAT_MAT3x2                   0x8B67\n#define GL_FLOAT_MAT3x4                   0x8B68\n#define GL_FLOAT_MAT4x2                   0x8B69\n#define GL_FLOAT_MAT4x3                   0x8B6A\n#define GL_SRGB                           0x8C40\n#define GL_SRGB8                          0x8C41\n#define GL_SRGB_ALPHA                     0x8C42\n#define GL_SRGB8_ALPHA8                   0x8C43\n#define GL_COMPRESSED_SRGB                0x8C48\n#define GL_COMPRESSED_SRGB_ALPHA          0x8C49\n#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F\n#define GL_SLUMINANCE_ALPHA               0x8C44\n#define GL_SLUMINANCE8_ALPHA8             0x8C45\n#define GL_SLUMINANCE                     0x8C46\n#define GL_SLUMINANCE8                    0x8C47\n#define GL_COMPRESSED_SLUMINANCE          0x8C4A\n#define GL_COMPRESSED_SLUMINANCE_ALPHA    0x8C4B\n#endif\n\n#ifndef GL_VERSION_3_0\n#define GL_COMPARE_REF_TO_TEXTURE         0x884E\n#define GL_CLIP_DISTANCE0                 0x3000\n#define GL_CLIP_DISTANCE1                 0x3001\n#define GL_CLIP_DISTANCE2                 0x3002\n#define GL_CLIP_DISTANCE3                 0x3003\n#define GL_CLIP_DISTANCE4                 0x3004\n#define GL_CLIP_DISTANCE5                 0x3005\n#define GL_CLIP_DISTANCE6                 0x3006\n#define GL_CLIP_DISTANCE7                 0x3007\n#define GL_MAX_CLIP_DISTANCES             0x0D32\n#define GL_MAJOR_VERSION                  0x821B\n#define GL_MINOR_VERSION                  0x821C\n#define GL_NUM_EXTENSIONS                 0x821D\n#define GL_CONTEXT_FLAGS                  0x821E\n#define GL_COMPRESSED_RED                 0x8225\n#define GL_COMPRESSED_RG                  0x8226\n#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001\n#define GL_RGBA32F                        0x8814\n#define GL_RGB32F                         0x8815\n#define GL_RGBA16F                        0x881A\n#define GL_RGB16F                         0x881B\n#define GL_VERTEX_ATTRIB_ARRAY_INTEGER    0x88FD\n#define GL_MAX_ARRAY_TEXTURE_LAYERS       0x88FF\n#define GL_MIN_PROGRAM_TEXEL_OFFSET       0x8904\n#define GL_MAX_PROGRAM_TEXEL_OFFSET       0x8905\n#define GL_CLAMP_READ_COLOR               0x891C\n#define GL_FIXED_ONLY                     0x891D\n#define GL_MAX_VARYING_COMPONENTS         0x8B4B\n#define GL_TEXTURE_1D_ARRAY               0x8C18\n#define GL_PROXY_TEXTURE_1D_ARRAY         0x8C19\n#define GL_TEXTURE_2D_ARRAY               0x8C1A\n#define GL_PROXY_TEXTURE_2D_ARRAY         0x8C1B\n#define GL_TEXTURE_BINDING_1D_ARRAY       0x8C1C\n#define GL_TEXTURE_BINDING_2D_ARRAY       0x8C1D\n#define GL_R11F_G11F_B10F                 0x8C3A\n#define GL_UNSIGNED_INT_10F_11F_11F_REV   0x8C3B\n#define GL_RGB9_E5                        0x8C3D\n#define GL_UNSIGNED_INT_5_9_9_9_REV       0x8C3E\n#define GL_TEXTURE_SHARED_SIZE            0x8C3F\n#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76\n#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F\n#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80\n#define GL_TRANSFORM_FEEDBACK_VARYINGS    0x8C83\n#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84\n#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85\n#define GL_PRIMITIVES_GENERATED           0x8C87\n#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88\n#define GL_RASTERIZER_DISCARD             0x8C89\n#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A\n#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B\n#define GL_INTERLEAVED_ATTRIBS            0x8C8C\n#define GL_SEPARATE_ATTRIBS               0x8C8D\n#define GL_TRANSFORM_FEEDBACK_BUFFER      0x8C8E\n#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F\n#define GL_RGBA32UI                       0x8D70\n#define GL_RGB32UI                        0x8D71\n#define GL_RGBA16UI                       0x8D76\n#define GL_RGB16UI                        0x8D77\n#define GL_RGBA8UI                        0x8D7C\n#define GL_RGB8UI                         0x8D7D\n#define GL_RGBA32I                        0x8D82\n#define GL_RGB32I                         0x8D83\n#define GL_RGBA16I                        0x8D88\n#define GL_RGB16I                         0x8D89\n#define GL_RGBA8I                         0x8D8E\n#define GL_RGB8I                          0x8D8F\n#define GL_RED_INTEGER                    0x8D94\n#define GL_GREEN_INTEGER                  0x8D95\n#define GL_BLUE_INTEGER                   0x8D96\n#define GL_RGB_INTEGER                    0x8D98\n#define GL_RGBA_INTEGER                   0x8D99\n#define GL_BGR_INTEGER                    0x8D9A\n#define GL_BGRA_INTEGER                   0x8D9B\n#define GL_SAMPLER_1D_ARRAY               0x8DC0\n#define GL_SAMPLER_2D_ARRAY               0x8DC1\n#define GL_SAMPLER_1D_ARRAY_SHADOW        0x8DC3\n#define GL_SAMPLER_2D_ARRAY_SHADOW        0x8DC4\n#define GL_SAMPLER_CUBE_SHADOW            0x8DC5\n#define GL_UNSIGNED_INT_VEC2              0x8DC6\n#define GL_UNSIGNED_INT_VEC3              0x8DC7\n#define GL_UNSIGNED_INT_VEC4              0x8DC8\n#define GL_INT_SAMPLER_1D                 0x8DC9\n#define GL_INT_SAMPLER_2D                 0x8DCA\n#define GL_INT_SAMPLER_3D                 0x8DCB\n#define GL_INT_SAMPLER_CUBE               0x8DCC\n#define GL_INT_SAMPLER_1D_ARRAY           0x8DCE\n#define GL_INT_SAMPLER_2D_ARRAY           0x8DCF\n#define GL_UNSIGNED_INT_SAMPLER_1D        0x8DD1\n#define GL_UNSIGNED_INT_SAMPLER_2D        0x8DD2\n#define GL_UNSIGNED_INT_SAMPLER_3D        0x8DD3\n#define GL_UNSIGNED_INT_SAMPLER_CUBE      0x8DD4\n#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY  0x8DD6\n#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY  0x8DD7\n#define GL_QUERY_WAIT                     0x8E13\n#define GL_QUERY_NO_WAIT                  0x8E14\n#define GL_QUERY_BY_REGION_WAIT           0x8E15\n#define GL_QUERY_BY_REGION_NO_WAIT        0x8E16\n#define GL_BUFFER_ACCESS_FLAGS            0x911F\n#define GL_BUFFER_MAP_LENGTH              0x9120\n#define GL_BUFFER_MAP_OFFSET              0x9121\n/* Reuse tokens from ARB_depth_buffer_float */\n/* reuse GL_DEPTH_COMPONENT32F */\n/* reuse GL_DEPTH32F_STENCIL8 */\n/* reuse GL_FLOAT_32_UNSIGNED_INT_24_8_REV */\n/* Reuse tokens from ARB_framebuffer_object */\n/* reuse GL_INVALID_FRAMEBUFFER_OPERATION */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */\n/* reuse GL_FRAMEBUFFER_DEFAULT */\n/* reuse GL_FRAMEBUFFER_UNDEFINED */\n/* reuse GL_DEPTH_STENCIL_ATTACHMENT */\n/* reuse GL_INDEX */\n/* reuse GL_MAX_RENDERBUFFER_SIZE */\n/* reuse GL_DEPTH_STENCIL */\n/* reuse GL_UNSIGNED_INT_24_8 */\n/* reuse GL_DEPTH24_STENCIL8 */\n/* reuse GL_TEXTURE_STENCIL_SIZE */\n/* reuse GL_TEXTURE_RED_TYPE */\n/* reuse GL_TEXTURE_GREEN_TYPE */\n/* reuse GL_TEXTURE_BLUE_TYPE */\n/* reuse GL_TEXTURE_ALPHA_TYPE */\n/* reuse GL_TEXTURE_DEPTH_TYPE */\n/* reuse GL_UNSIGNED_NORMALIZED */\n/* reuse GL_FRAMEBUFFER_BINDING */\n/* reuse GL_DRAW_FRAMEBUFFER_BINDING */\n/* reuse GL_RENDERBUFFER_BINDING */\n/* reuse GL_READ_FRAMEBUFFER */\n/* reuse GL_DRAW_FRAMEBUFFER */\n/* reuse GL_READ_FRAMEBUFFER_BINDING */\n/* reuse GL_RENDERBUFFER_SAMPLES */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */\n/* reuse GL_FRAMEBUFFER_COMPLETE */\n/* reuse GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */\n/* reuse GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */\n/* reuse GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */\n/* reuse GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */\n/* reuse GL_FRAMEBUFFER_UNSUPPORTED */\n/* reuse GL_MAX_COLOR_ATTACHMENTS */\n/* reuse GL_COLOR_ATTACHMENT0 */\n/* reuse GL_COLOR_ATTACHMENT1 */\n/* reuse GL_COLOR_ATTACHMENT2 */\n/* reuse GL_COLOR_ATTACHMENT3 */\n/* reuse GL_COLOR_ATTACHMENT4 */\n/* reuse GL_COLOR_ATTACHMENT5 */\n/* reuse GL_COLOR_ATTACHMENT6 */\n/* reuse GL_COLOR_ATTACHMENT7 */\n/* reuse GL_COLOR_ATTACHMENT8 */\n/* reuse GL_COLOR_ATTACHMENT9 */\n/* reuse GL_COLOR_ATTACHMENT10 */\n/* reuse GL_COLOR_ATTACHMENT11 */\n/* reuse GL_COLOR_ATTACHMENT12 */\n/* reuse GL_COLOR_ATTACHMENT13 */\n/* reuse GL_COLOR_ATTACHMENT14 */\n/* reuse GL_COLOR_ATTACHMENT15 */\n/* reuse GL_DEPTH_ATTACHMENT */\n/* reuse GL_STENCIL_ATTACHMENT */\n/* reuse GL_FRAMEBUFFER */\n/* reuse GL_RENDERBUFFER */\n/* reuse GL_RENDERBUFFER_WIDTH */\n/* reuse GL_RENDERBUFFER_HEIGHT */\n/* reuse GL_RENDERBUFFER_INTERNAL_FORMAT */\n/* reuse GL_STENCIL_INDEX1 */\n/* reuse GL_STENCIL_INDEX4 */\n/* reuse GL_STENCIL_INDEX8 */\n/* reuse GL_STENCIL_INDEX16 */\n/* reuse GL_RENDERBUFFER_RED_SIZE */\n/* reuse GL_RENDERBUFFER_GREEN_SIZE */\n/* reuse GL_RENDERBUFFER_BLUE_SIZE */\n/* reuse GL_RENDERBUFFER_ALPHA_SIZE */\n/* reuse GL_RENDERBUFFER_DEPTH_SIZE */\n/* reuse GL_RENDERBUFFER_STENCIL_SIZE */\n/* reuse GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */\n/* reuse GL_MAX_SAMPLES */\n/* Reuse tokens from ARB_framebuffer_sRGB */\n/* reuse GL_FRAMEBUFFER_SRGB */\n/* Reuse tokens from ARB_half_float_vertex */\n/* reuse GL_HALF_FLOAT */\n/* Reuse tokens from ARB_map_buffer_range */\n/* reuse GL_MAP_READ_BIT */\n/* reuse GL_MAP_WRITE_BIT */\n/* reuse GL_MAP_INVALIDATE_RANGE_BIT */\n/* reuse GL_MAP_INVALIDATE_BUFFER_BIT */\n/* reuse GL_MAP_FLUSH_EXPLICIT_BIT */\n/* reuse GL_MAP_UNSYNCHRONIZED_BIT */\n/* Reuse tokens from ARB_texture_compression_rgtc */\n/* reuse GL_COMPRESSED_RED_RGTC1 */\n/* reuse GL_COMPRESSED_SIGNED_RED_RGTC1 */\n/* reuse GL_COMPRESSED_RG_RGTC2 */\n/* reuse GL_COMPRESSED_SIGNED_RG_RGTC2 */\n/* Reuse tokens from ARB_texture_rg */\n/* reuse GL_RG */\n/* reuse GL_RG_INTEGER */\n/* reuse GL_R8 */\n/* reuse GL_R16 */\n/* reuse GL_RG8 */\n/* reuse GL_RG16 */\n/* reuse GL_R16F */\n/* reuse GL_R32F */\n/* reuse GL_RG16F */\n/* reuse GL_RG32F */\n/* reuse GL_R8I */\n/* reuse GL_R8UI */\n/* reuse GL_R16I */\n/* reuse GL_R16UI */\n/* reuse GL_R32I */\n/* reuse GL_R32UI */\n/* reuse GL_RG8I */\n/* reuse GL_RG8UI */\n/* reuse GL_RG16I */\n/* reuse GL_RG16UI */\n/* reuse GL_RG32I */\n/* reuse GL_RG32UI */\n/* Reuse tokens from ARB_vertex_array_object */\n/* reuse GL_VERTEX_ARRAY_BINDING */\n#define GL_CLAMP_VERTEX_COLOR             0x891A\n#define GL_CLAMP_FRAGMENT_COLOR           0x891B\n#define GL_ALPHA_INTEGER                  0x8D97\n/* Reuse tokens from ARB_framebuffer_object */\n/* reuse GL_TEXTURE_LUMINANCE_TYPE */\n/* reuse GL_TEXTURE_INTENSITY_TYPE */\n#endif\n\n#ifndef GL_VERSION_3_1\n#define GL_SAMPLER_2D_RECT                0x8B63\n#define GL_SAMPLER_2D_RECT_SHADOW         0x8B64\n#define GL_SAMPLER_BUFFER                 0x8DC2\n#define GL_INT_SAMPLER_2D_RECT            0x8DCD\n#define GL_INT_SAMPLER_BUFFER             0x8DD0\n#define GL_UNSIGNED_INT_SAMPLER_2D_RECT   0x8DD5\n#define GL_UNSIGNED_INT_SAMPLER_BUFFER    0x8DD8\n#define GL_TEXTURE_BUFFER                 0x8C2A\n#define GL_MAX_TEXTURE_BUFFER_SIZE        0x8C2B\n#define GL_TEXTURE_BINDING_BUFFER         0x8C2C\n#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D\n#define GL_TEXTURE_RECTANGLE              0x84F5\n#define GL_TEXTURE_BINDING_RECTANGLE      0x84F6\n#define GL_PROXY_TEXTURE_RECTANGLE        0x84F7\n#define GL_MAX_RECTANGLE_TEXTURE_SIZE     0x84F8\n#define GL_RED_SNORM                      0x8F90\n#define GL_RG_SNORM                       0x8F91\n#define GL_RGB_SNORM                      0x8F92\n#define GL_RGBA_SNORM                     0x8F93\n#define GL_R8_SNORM                       0x8F94\n#define GL_RG8_SNORM                      0x8F95\n#define GL_RGB8_SNORM                     0x8F96\n#define GL_RGBA8_SNORM                    0x8F97\n#define GL_R16_SNORM                      0x8F98\n#define GL_RG16_SNORM                     0x8F99\n#define GL_RGB16_SNORM                    0x8F9A\n#define GL_RGBA16_SNORM                   0x8F9B\n#define GL_SIGNED_NORMALIZED              0x8F9C\n#define GL_PRIMITIVE_RESTART              0x8F9D\n#define GL_PRIMITIVE_RESTART_INDEX        0x8F9E\n/* Reuse tokens from ARB_copy_buffer */\n/* reuse GL_COPY_READ_BUFFER */\n/* reuse GL_COPY_WRITE_BUFFER */\n/* Reuse tokens from ARB_draw_instanced (none) */\n/* Reuse tokens from ARB_uniform_buffer_object */\n/* reuse GL_UNIFORM_BUFFER */\n/* reuse GL_UNIFORM_BUFFER_BINDING */\n/* reuse GL_UNIFORM_BUFFER_START */\n/* reuse GL_UNIFORM_BUFFER_SIZE */\n/* reuse GL_MAX_VERTEX_UNIFORM_BLOCKS */\n/* reuse GL_MAX_FRAGMENT_UNIFORM_BLOCKS */\n/* reuse GL_MAX_COMBINED_UNIFORM_BLOCKS */\n/* reuse GL_MAX_UNIFORM_BUFFER_BINDINGS */\n/* reuse GL_MAX_UNIFORM_BLOCK_SIZE */\n/* reuse GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS */\n/* reuse GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS */\n/* reuse GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT */\n/* reuse GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH */\n/* reuse GL_ACTIVE_UNIFORM_BLOCKS */\n/* reuse GL_UNIFORM_TYPE */\n/* reuse GL_UNIFORM_SIZE */\n/* reuse GL_UNIFORM_NAME_LENGTH */\n/* reuse GL_UNIFORM_BLOCK_INDEX */\n/* reuse GL_UNIFORM_OFFSET */\n/* reuse GL_UNIFORM_ARRAY_STRIDE */\n/* reuse GL_UNIFORM_MATRIX_STRIDE */\n/* reuse GL_UNIFORM_IS_ROW_MAJOR */\n/* reuse GL_UNIFORM_BLOCK_BINDING */\n/* reuse GL_UNIFORM_BLOCK_DATA_SIZE */\n/* reuse GL_UNIFORM_BLOCK_NAME_LENGTH */\n/* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS */\n/* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES */\n/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER */\n/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER */\n/* reuse GL_INVALID_INDEX */\n#endif\n\n#ifndef GL_VERSION_3_2\n#define GL_CONTEXT_CORE_PROFILE_BIT       0x00000001\n#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002\n#define GL_LINES_ADJACENCY                0x000A\n#define GL_LINE_STRIP_ADJACENCY           0x000B\n#define GL_TRIANGLES_ADJACENCY            0x000C\n#define GL_TRIANGLE_STRIP_ADJACENCY       0x000D\n#define GL_PROGRAM_POINT_SIZE             0x8642\n#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29\n#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7\n#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8\n#define GL_GEOMETRY_SHADER                0x8DD9\n#define GL_GEOMETRY_VERTICES_OUT          0x8916\n#define GL_GEOMETRY_INPUT_TYPE            0x8917\n#define GL_GEOMETRY_OUTPUT_TYPE           0x8918\n#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF\n#define GL_MAX_GEOMETRY_OUTPUT_VERTICES   0x8DE0\n#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1\n#define GL_MAX_VERTEX_OUTPUT_COMPONENTS   0x9122\n#define GL_MAX_GEOMETRY_INPUT_COMPONENTS  0x9123\n#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124\n#define GL_MAX_FRAGMENT_INPUT_COMPONENTS  0x9125\n#define GL_CONTEXT_PROFILE_MASK           0x9126\n/* reuse GL_MAX_VARYING_COMPONENTS */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */\n/* Reuse tokens from ARB_depth_clamp */\n/* reuse GL_DEPTH_CLAMP */\n/* Reuse tokens from ARB_draw_elements_base_vertex (none) */\n/* Reuse tokens from ARB_fragment_coord_conventions (none) */\n/* Reuse tokens from ARB_provoking_vertex */\n/* reuse GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */\n/* reuse GL_FIRST_VERTEX_CONVENTION */\n/* reuse GL_LAST_VERTEX_CONVENTION */\n/* reuse GL_PROVOKING_VERTEX */\n/* Reuse tokens from ARB_seamless_cube_map */\n/* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS */\n/* Reuse tokens from ARB_sync */\n/* reuse GL_MAX_SERVER_WAIT_TIMEOUT */\n/* reuse GL_OBJECT_TYPE */\n/* reuse GL_SYNC_CONDITION */\n/* reuse GL_SYNC_STATUS */\n/* reuse GL_SYNC_FLAGS */\n/* reuse GL_SYNC_FENCE */\n/* reuse GL_SYNC_GPU_COMMANDS_COMPLETE */\n/* reuse GL_UNSIGNALED */\n/* reuse GL_SIGNALED */\n/* reuse GL_ALREADY_SIGNALED */\n/* reuse GL_TIMEOUT_EXPIRED */\n/* reuse GL_CONDITION_SATISFIED */\n/* reuse GL_WAIT_FAILED */\n/* reuse GL_TIMEOUT_IGNORED */\n/* reuse GL_SYNC_FLUSH_COMMANDS_BIT */\n/* reuse GL_TIMEOUT_IGNORED */\n/* Reuse tokens from ARB_texture_multisample */\n/* reuse GL_SAMPLE_POSITION */\n/* reuse GL_SAMPLE_MASK */\n/* reuse GL_SAMPLE_MASK_VALUE */\n/* reuse GL_MAX_SAMPLE_MASK_WORDS */\n/* reuse GL_TEXTURE_2D_MULTISAMPLE */\n/* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE */\n/* reuse GL_TEXTURE_2D_MULTISAMPLE_ARRAY */\n/* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY */\n/* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE */\n/* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY */\n/* reuse GL_TEXTURE_SAMPLES */\n/* reuse GL_TEXTURE_FIXED_SAMPLE_LOCATIONS */\n/* reuse GL_SAMPLER_2D_MULTISAMPLE */\n/* reuse GL_INT_SAMPLER_2D_MULTISAMPLE */\n/* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE */\n/* reuse GL_SAMPLER_2D_MULTISAMPLE_ARRAY */\n/* reuse GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */\n/* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */\n/* reuse GL_MAX_COLOR_TEXTURE_SAMPLES */\n/* reuse GL_MAX_DEPTH_TEXTURE_SAMPLES */\n/* reuse GL_MAX_INTEGER_SAMPLES */\n/* Don't need to reuse tokens from ARB_vertex_array_bgra since they're already in 1.2 core */\n#endif\n\n#ifndef GL_VERSION_3_3\n#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR    0x88FE\n/* Reuse tokens from ARB_blend_func_extended */\n/* reuse GL_SRC1_COLOR */\n/* reuse GL_ONE_MINUS_SRC1_COLOR */\n/* reuse GL_ONE_MINUS_SRC1_ALPHA */\n/* reuse GL_MAX_DUAL_SOURCE_DRAW_BUFFERS */\n/* Reuse tokens from ARB_explicit_attrib_location (none) */\n/* Reuse tokens from ARB_occlusion_query2 */\n/* reuse GL_ANY_SAMPLES_PASSED */\n/* Reuse tokens from ARB_sampler_objects */\n/* reuse GL_SAMPLER_BINDING */\n/* Reuse tokens from ARB_shader_bit_encoding (none) */\n/* Reuse tokens from ARB_texture_rgb10_a2ui */\n/* reuse GL_RGB10_A2UI */\n/* Reuse tokens from ARB_texture_swizzle */\n/* reuse GL_TEXTURE_SWIZZLE_R */\n/* reuse GL_TEXTURE_SWIZZLE_G */\n/* reuse GL_TEXTURE_SWIZZLE_B */\n/* reuse GL_TEXTURE_SWIZZLE_A */\n/* reuse GL_TEXTURE_SWIZZLE_RGBA */\n/* Reuse tokens from ARB_timer_query */\n/* reuse GL_TIME_ELAPSED */\n/* reuse GL_TIMESTAMP */\n/* Reuse tokens from ARB_vertex_type_2_10_10_10_rev */\n/* reuse GL_INT_2_10_10_10_REV */\n#endif\n\n#ifndef GL_VERSION_4_0\n#define GL_SAMPLE_SHADING                 0x8C36\n#define GL_MIN_SAMPLE_SHADING_VALUE       0x8C37\n#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E\n#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F\n#define GL_TEXTURE_CUBE_MAP_ARRAY         0x9009\n#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A\n#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY   0x900B\n#define GL_SAMPLER_CUBE_MAP_ARRAY         0x900C\n#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW  0x900D\n#define GL_INT_SAMPLER_CUBE_MAP_ARRAY     0x900E\n#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F\n/* Reuse tokens from ARB_texture_query_lod (none) */\n/* Reuse tokens from ARB_draw_buffers_blend (none) */\n/* Reuse tokens from ARB_draw_indirect */\n/* reuse GL_DRAW_INDIRECT_BUFFER */\n/* reuse GL_DRAW_INDIRECT_BUFFER_BINDING */\n/* Reuse tokens from ARB_gpu_shader5 */\n/* reuse GL_GEOMETRY_SHADER_INVOCATIONS */\n/* reuse GL_MAX_GEOMETRY_SHADER_INVOCATIONS */\n/* reuse GL_MIN_FRAGMENT_INTERPOLATION_OFFSET */\n/* reuse GL_MAX_FRAGMENT_INTERPOLATION_OFFSET */\n/* reuse GL_FRAGMENT_INTERPOLATION_OFFSET_BITS */\n/* Reuse tokens from ARB_gpu_shader_fp64 */\n/* reuse GL_DOUBLE_VEC2 */\n/* reuse GL_DOUBLE_VEC3 */\n/* reuse GL_DOUBLE_VEC4 */\n/* reuse GL_DOUBLE_MAT2 */\n/* reuse GL_DOUBLE_MAT3 */\n/* reuse GL_DOUBLE_MAT4 */\n/* reuse GL_DOUBLE_MAT2x3 */\n/* reuse GL_DOUBLE_MAT2x4 */\n/* reuse GL_DOUBLE_MAT3x2 */\n/* reuse GL_DOUBLE_MAT3x4 */\n/* reuse GL_DOUBLE_MAT4x2 */\n/* reuse GL_DOUBLE_MAT4x3 */\n/* Reuse tokens from ARB_shader_subroutine */\n/* reuse GL_ACTIVE_SUBROUTINES */\n/* reuse GL_ACTIVE_SUBROUTINE_UNIFORMS */\n/* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS */\n/* reuse GL_ACTIVE_SUBROUTINE_MAX_LENGTH */\n/* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH */\n/* reuse GL_MAX_SUBROUTINES */\n/* reuse GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS */\n/* reuse GL_NUM_COMPATIBLE_SUBROUTINES */\n/* reuse GL_COMPATIBLE_SUBROUTINES */\n/* Reuse tokens from ARB_tessellation_shader */\n/* reuse GL_PATCHES */\n/* reuse GL_PATCH_VERTICES */\n/* reuse GL_PATCH_DEFAULT_INNER_LEVEL */\n/* reuse GL_PATCH_DEFAULT_OUTER_LEVEL */\n/* reuse GL_TESS_CONTROL_OUTPUT_VERTICES */\n/* reuse GL_TESS_GEN_MODE */\n/* reuse GL_TESS_GEN_SPACING */\n/* reuse GL_TESS_GEN_VERTEX_ORDER */\n/* reuse GL_TESS_GEN_POINT_MODE */\n/* reuse GL_ISOLINES */\n/* reuse GL_FRACTIONAL_ODD */\n/* reuse GL_FRACTIONAL_EVEN */\n/* reuse GL_MAX_PATCH_VERTICES */\n/* reuse GL_MAX_TESS_GEN_LEVEL */\n/* reuse GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS */\n/* reuse GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS */\n/* reuse GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS */\n/* reuse GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS */\n/* reuse GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS */\n/* reuse GL_MAX_TESS_PATCH_COMPONENTS */\n/* reuse GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS */\n/* reuse GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS */\n/* reuse GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS */\n/* reuse GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS */\n/* reuse GL_MAX_TESS_CONTROL_INPUT_COMPONENTS */\n/* reuse GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS */\n/* reuse GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS */\n/* reuse GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS */\n/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER */\n/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER */\n/* reuse GL_TESS_EVALUATION_SHADER */\n/* reuse GL_TESS_CONTROL_SHADER */\n/* Reuse tokens from ARB_texture_buffer_object_rgb32 (none) */\n/* Reuse tokens from ARB_transform_feedback2 */\n/* reuse GL_TRANSFORM_FEEDBACK */\n/* reuse GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */\n/* reuse GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */\n/* reuse GL_TRANSFORM_FEEDBACK_BINDING */\n/* Reuse tokens from ARB_transform_feedback3 */\n/* reuse GL_MAX_TRANSFORM_FEEDBACK_BUFFERS */\n/* reuse GL_MAX_VERTEX_STREAMS */\n#endif\n\n#ifndef GL_VERSION_4_1\n/* Reuse tokens from ARB_ES2_compatibility */\n/* reuse GL_FIXED */\n/* reuse GL_IMPLEMENTATION_COLOR_READ_TYPE */\n/* reuse GL_IMPLEMENTATION_COLOR_READ_FORMAT */\n/* reuse GL_LOW_FLOAT */\n/* reuse GL_MEDIUM_FLOAT */\n/* reuse GL_HIGH_FLOAT */\n/* reuse GL_LOW_INT */\n/* reuse GL_MEDIUM_INT */\n/* reuse GL_HIGH_INT */\n/* reuse GL_SHADER_COMPILER */\n/* reuse GL_SHADER_BINARY_FORMATS */\n/* reuse GL_NUM_SHADER_BINARY_FORMATS */\n/* reuse GL_MAX_VERTEX_UNIFORM_VECTORS */\n/* reuse GL_MAX_VARYING_VECTORS */\n/* reuse GL_MAX_FRAGMENT_UNIFORM_VECTORS */\n/* reuse GL_RGB565 */\n/* Reuse tokens from ARB_get_program_binary */\n/* reuse GL_PROGRAM_BINARY_RETRIEVABLE_HINT */\n/* reuse GL_PROGRAM_BINARY_LENGTH */\n/* reuse GL_NUM_PROGRAM_BINARY_FORMATS */\n/* reuse GL_PROGRAM_BINARY_FORMATS */\n/* Reuse tokens from ARB_separate_shader_objects */\n/* reuse GL_VERTEX_SHADER_BIT */\n/* reuse GL_FRAGMENT_SHADER_BIT */\n/* reuse GL_GEOMETRY_SHADER_BIT */\n/* reuse GL_TESS_CONTROL_SHADER_BIT */\n/* reuse GL_TESS_EVALUATION_SHADER_BIT */\n/* reuse GL_ALL_SHADER_BITS */\n/* reuse GL_PROGRAM_SEPARABLE */\n/* reuse GL_ACTIVE_PROGRAM */\n/* reuse GL_PROGRAM_PIPELINE_BINDING */\n/* Reuse tokens from ARB_shader_precision (none) */\n/* Reuse tokens from ARB_vertex_attrib_64bit - all are in GL 3.0 and 4.0 already */\n/* Reuse tokens from ARB_viewport_array - some are in GL 1.1 and ARB_provoking_vertex already */\n/* reuse GL_MAX_VIEWPORTS */\n/* reuse GL_VIEWPORT_SUBPIXEL_BITS */\n/* reuse GL_VIEWPORT_BOUNDS_RANGE */\n/* reuse GL_LAYER_PROVOKING_VERTEX */\n/* reuse GL_VIEWPORT_INDEX_PROVOKING_VERTEX */\n/* reuse GL_UNDEFINED_VERTEX */\n#endif\n\n#ifndef GL_VERSION_4_2\n/* Reuse tokens from ARB_base_instance (none) */\n/* Reuse tokens from ARB_shading_language_420pack (none) */\n/* Reuse tokens from ARB_transform_feedback_instanced (none) */\n/* Reuse tokens from ARB_compressed_texture_pixel_storage */\n/* reuse GL_UNPACK_COMPRESSED_BLOCK_WIDTH */\n/* reuse GL_UNPACK_COMPRESSED_BLOCK_HEIGHT */\n/* reuse GL_UNPACK_COMPRESSED_BLOCK_DEPTH */\n/* reuse GL_UNPACK_COMPRESSED_BLOCK_SIZE */\n/* reuse GL_PACK_COMPRESSED_BLOCK_WIDTH */\n/* reuse GL_PACK_COMPRESSED_BLOCK_HEIGHT */\n/* reuse GL_PACK_COMPRESSED_BLOCK_DEPTH */\n/* reuse GL_PACK_COMPRESSED_BLOCK_SIZE */\n/* Reuse tokens from ARB_conservative_depth (none) */\n/* Reuse tokens from ARB_internalformat_query */\n/* reuse GL_NUM_SAMPLE_COUNTS */\n/* Reuse tokens from ARB_map_buffer_alignment */\n/* reuse GL_MIN_MAP_BUFFER_ALIGNMENT */\n/* Reuse tokens from ARB_shader_atomic_counters */\n/* reuse GL_ATOMIC_COUNTER_BUFFER */\n/* reuse GL_ATOMIC_COUNTER_BUFFER_BINDING */\n/* reuse GL_ATOMIC_COUNTER_BUFFER_START */\n/* reuse GL_ATOMIC_COUNTER_BUFFER_SIZE */\n/* reuse GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE */\n/* reuse GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS */\n/* reuse GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES */\n/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER */\n/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER */\n/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER */\n/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER */\n/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER */\n/* reuse GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS */\n/* reuse GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS */\n/* reuse GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS */\n/* reuse GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS */\n/* reuse GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS */\n/* reuse GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS */\n/* reuse GL_MAX_VERTEX_ATOMIC_COUNTERS */\n/* reuse GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS */\n/* reuse GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS */\n/* reuse GL_MAX_GEOMETRY_ATOMIC_COUNTERS */\n/* reuse GL_MAX_FRAGMENT_ATOMIC_COUNTERS */\n/* reuse GL_MAX_COMBINED_ATOMIC_COUNTERS */\n/* reuse GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE */\n/* reuse GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS */\n/* reuse GL_ACTIVE_ATOMIC_COUNTER_BUFFERS */\n/* reuse GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX */\n/* reuse GL_UNSIGNED_INT_ATOMIC_COUNTER */\n/* Reuse tokens from ARB_shader_image_load_store */\n/* reuse GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT */\n/* reuse GL_ELEMENT_ARRAY_BARRIER_BIT */\n/* reuse GL_UNIFORM_BARRIER_BIT */\n/* reuse GL_TEXTURE_FETCH_BARRIER_BIT */\n/* reuse GL_SHADER_IMAGE_ACCESS_BARRIER_BIT */\n/* reuse GL_COMMAND_BARRIER_BIT */\n/* reuse GL_PIXEL_BUFFER_BARRIER_BIT */\n/* reuse GL_TEXTURE_UPDATE_BARRIER_BIT */\n/* reuse GL_BUFFER_UPDATE_BARRIER_BIT */\n/* reuse GL_FRAMEBUFFER_BARRIER_BIT */\n/* reuse GL_TRANSFORM_FEEDBACK_BARRIER_BIT */\n/* reuse GL_ATOMIC_COUNTER_BARRIER_BIT */\n/* reuse GL_ALL_BARRIER_BITS */\n/* reuse GL_MAX_IMAGE_UNITS */\n/* reuse GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS */\n/* reuse GL_IMAGE_BINDING_NAME */\n/* reuse GL_IMAGE_BINDING_LEVEL */\n/* reuse GL_IMAGE_BINDING_LAYERED */\n/* reuse GL_IMAGE_BINDING_LAYER */\n/* reuse GL_IMAGE_BINDING_ACCESS */\n/* reuse GL_IMAGE_1D */\n/* reuse GL_IMAGE_2D */\n/* reuse GL_IMAGE_3D */\n/* reuse GL_IMAGE_2D_RECT */\n/* reuse GL_IMAGE_CUBE */\n/* reuse GL_IMAGE_BUFFER */\n/* reuse GL_IMAGE_1D_ARRAY */\n/* reuse GL_IMAGE_2D_ARRAY */\n/* reuse GL_IMAGE_CUBE_MAP_ARRAY */\n/* reuse GL_IMAGE_2D_MULTISAMPLE */\n/* reuse GL_IMAGE_2D_MULTISAMPLE_ARRAY */\n/* reuse GL_INT_IMAGE_1D */\n/* reuse GL_INT_IMAGE_2D */\n/* reuse GL_INT_IMAGE_3D */\n/* reuse GL_INT_IMAGE_2D_RECT */\n/* reuse GL_INT_IMAGE_CUBE */\n/* reuse GL_INT_IMAGE_BUFFER */\n/* reuse GL_INT_IMAGE_1D_ARRAY */\n/* reuse GL_INT_IMAGE_2D_ARRAY */\n/* reuse GL_INT_IMAGE_CUBE_MAP_ARRAY */\n/* reuse GL_INT_IMAGE_2D_MULTISAMPLE */\n/* reuse GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY */\n/* reuse GL_UNSIGNED_INT_IMAGE_1D */\n/* reuse GL_UNSIGNED_INT_IMAGE_2D */\n/* reuse GL_UNSIGNED_INT_IMAGE_3D */\n/* reuse GL_UNSIGNED_INT_IMAGE_2D_RECT */\n/* reuse GL_UNSIGNED_INT_IMAGE_CUBE */\n/* reuse GL_UNSIGNED_INT_IMAGE_BUFFER */\n/* reuse GL_UNSIGNED_INT_IMAGE_1D_ARRAY */\n/* reuse GL_UNSIGNED_INT_IMAGE_2D_ARRAY */\n/* reuse GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY */\n/* reuse GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE */\n/* reuse GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY */\n/* reuse GL_MAX_IMAGE_SAMPLES */\n/* reuse GL_IMAGE_BINDING_FORMAT */\n/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_TYPE */\n/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE */\n/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS */\n/* reuse GL_MAX_VERTEX_IMAGE_UNIFORMS */\n/* reuse GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS */\n/* reuse GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS */\n/* reuse GL_MAX_GEOMETRY_IMAGE_UNIFORMS */\n/* reuse GL_MAX_FRAGMENT_IMAGE_UNIFORMS */\n/* reuse GL_MAX_COMBINED_IMAGE_UNIFORMS */\n/* Reuse tokens from ARB_shading_language_packing (none) */\n/* Reuse tokens from ARB_texture_storage */\n/* reuse GL_TEXTURE_IMMUTABLE_FORMAT */\n#endif\n\n#ifndef GL_VERSION_4_3\n#define GL_NUM_SHADING_LANGUAGE_VERSIONS  0x82E9\n#define GL_VERTEX_ATTRIB_ARRAY_LONG       0x874E\n/* Reuse tokens from ARB_arrays_of_arrays (none, GLSL only) */\n/* Reuse tokens from ARB_fragment_layer_viewport (none, GLSL only) */\n/* Reuse tokens from ARB_shader_image_size (none, GLSL only) */\n/* Reuse tokens from ARB_ES3_compatibility */\n/* reuse GL_COMPRESSED_RGB8_ETC2 */\n/* reuse GL_COMPRESSED_SRGB8_ETC2 */\n/* reuse GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 */\n/* reuse GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 */\n/* reuse GL_COMPRESSED_RGBA8_ETC2_EAC */\n/* reuse GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC */\n/* reuse GL_COMPRESSED_R11_EAC */\n/* reuse GL_COMPRESSED_SIGNED_R11_EAC */\n/* reuse GL_COMPRESSED_RG11_EAC */\n/* reuse GL_COMPRESSED_SIGNED_RG11_EAC */\n/* reuse GL_PRIMITIVE_RESTART_FIXED_INDEX */\n/* reuse GL_ANY_SAMPLES_PASSED_CONSERVATIVE */\n/* reuse GL_MAX_ELEMENT_INDEX */\n/* Reuse tokens from ARB_clear_buffer_object (none) */\n/* Reuse tokens from ARB_compute_shader */\n/* reuse GL_COMPUTE_SHADER */\n/* reuse GL_MAX_COMPUTE_UNIFORM_BLOCKS */\n/* reuse GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS */\n/* reuse GL_MAX_COMPUTE_IMAGE_UNIFORMS */\n/* reuse GL_MAX_COMPUTE_SHARED_MEMORY_SIZE */\n/* reuse GL_MAX_COMPUTE_UNIFORM_COMPONENTS */\n/* reuse GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS */\n/* reuse GL_MAX_COMPUTE_ATOMIC_COUNTERS */\n/* reuse GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS */\n/* reuse GL_MAX_COMPUTE_LOCAL_INVOCATIONS */\n/* reuse GL_MAX_COMPUTE_WORK_GROUP_COUNT */\n/* reuse GL_MAX_COMPUTE_WORK_GROUP_SIZE */\n/* reuse GL_COMPUTE_LOCAL_WORK_SIZE */\n/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER */\n/* reuse GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER */\n/* reuse GL_DISPATCH_INDIRECT_BUFFER */\n/* reuse GL_DISPATCH_INDIRECT_BUFFER_BINDING */\n/* Reuse tokens from ARB_copy_image (none) */\n/* Reuse tokens from KHR_debug */\n/* reuse GL_DEBUG_OUTPUT_SYNCHRONOUS */\n/* reuse GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH */\n/* reuse GL_DEBUG_CALLBACK_FUNCTION */\n/* reuse GL_DEBUG_CALLBACK_USER_PARAM */\n/* reuse GL_DEBUG_SOURCE_API */\n/* reuse GL_DEBUG_SOURCE_WINDOW_SYSTEM */\n/* reuse GL_DEBUG_SOURCE_SHADER_COMPILER */\n/* reuse GL_DEBUG_SOURCE_THIRD_PARTY */\n/* reuse GL_DEBUG_SOURCE_APPLICATION */\n/* reuse GL_DEBUG_SOURCE_OTHER */\n/* reuse GL_DEBUG_TYPE_ERROR */\n/* reuse GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR */\n/* reuse GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR */\n/* reuse GL_DEBUG_TYPE_PORTABILITY */\n/* reuse GL_DEBUG_TYPE_PERFORMANCE */\n/* reuse GL_DEBUG_TYPE_OTHER */\n/* reuse GL_MAX_DEBUG_MESSAGE_LENGTH */\n/* reuse GL_MAX_DEBUG_LOGGED_MESSAGES */\n/* reuse GL_DEBUG_LOGGED_MESSAGES */\n/* reuse GL_DEBUG_SEVERITY_HIGH */\n/* reuse GL_DEBUG_SEVERITY_MEDIUM */\n/* reuse GL_DEBUG_SEVERITY_LOW */\n/* reuse GL_DEBUG_TYPE_MARKER */\n/* reuse GL_DEBUG_TYPE_PUSH_GROUP */\n/* reuse GL_DEBUG_TYPE_POP_GROUP */\n/* reuse GL_DEBUG_SEVERITY_NOTIFICATION */\n/* reuse GL_MAX_DEBUG_GROUP_STACK_DEPTH */\n/* reuse GL_DEBUG_GROUP_STACK_DEPTH */\n/* reuse GL_BUFFER */\n/* reuse GL_SHADER */\n/* reuse GL_PROGRAM */\n/* reuse GL_QUERY */\n/* reuse GL_PROGRAM_PIPELINE */\n/* reuse GL_SAMPLER */\n/* reuse GL_DISPLAY_LIST */\n/* reuse GL_MAX_LABEL_LENGTH */\n/* reuse GL_DEBUG_OUTPUT */\n/* reuse GL_CONTEXT_FLAG_DEBUG_BIT */\n/* reuse GL_STACK_UNDERFLOW */\n/* reuse GL_STACK_OVERFLOW */\n/* Reuse tokens from ARB_explicit_uniform_location */\n/* reuse GL_MAX_UNIFORM_LOCATIONS */\n/* Reuse tokens from ARB_framebuffer_no_attachments */\n/* reuse GL_FRAMEBUFFER_DEFAULT_WIDTH */\n/* reuse GL_FRAMEBUFFER_DEFAULT_HEIGHT */\n/* reuse GL_FRAMEBUFFER_DEFAULT_LAYERS */\n/* reuse GL_FRAMEBUFFER_DEFAULT_SAMPLES */\n/* reuse GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS */\n/* reuse GL_MAX_FRAMEBUFFER_WIDTH */\n/* reuse GL_MAX_FRAMEBUFFER_HEIGHT */\n/* reuse GL_MAX_FRAMEBUFFER_LAYERS */\n/* reuse GL_MAX_FRAMEBUFFER_SAMPLES */\n/* Reuse tokens from ARB_internalformat_query2 */\n/* reuse GL_INTERNALFORMAT_SUPPORTED */\n/* reuse GL_INTERNALFORMAT_PREFERRED */\n/* reuse GL_INTERNALFORMAT_RED_SIZE */\n/* reuse GL_INTERNALFORMAT_GREEN_SIZE */\n/* reuse GL_INTERNALFORMAT_BLUE_SIZE */\n/* reuse GL_INTERNALFORMAT_ALPHA_SIZE */\n/* reuse GL_INTERNALFORMAT_DEPTH_SIZE */\n/* reuse GL_INTERNALFORMAT_STENCIL_SIZE */\n/* reuse GL_INTERNALFORMAT_SHARED_SIZE */\n/* reuse GL_INTERNALFORMAT_RED_TYPE */\n/* reuse GL_INTERNALFORMAT_GREEN_TYPE */\n/* reuse GL_INTERNALFORMAT_BLUE_TYPE */\n/* reuse GL_INTERNALFORMAT_ALPHA_TYPE */\n/* reuse GL_INTERNALFORMAT_DEPTH_TYPE */\n/* reuse GL_INTERNALFORMAT_STENCIL_TYPE */\n/* reuse GL_MAX_WIDTH */\n/* reuse GL_MAX_HEIGHT */\n/* reuse GL_MAX_DEPTH */\n/* reuse GL_MAX_LAYERS */\n/* reuse GL_MAX_COMBINED_DIMENSIONS */\n/* reuse GL_COLOR_COMPONENTS */\n/* reuse GL_DEPTH_COMPONENTS */\n/* reuse GL_STENCIL_COMPONENTS */\n/* reuse GL_COLOR_RENDERABLE */\n/* reuse GL_DEPTH_RENDERABLE */\n/* reuse GL_STENCIL_RENDERABLE */\n/* reuse GL_FRAMEBUFFER_RENDERABLE */\n/* reuse GL_FRAMEBUFFER_RENDERABLE_LAYERED */\n/* reuse GL_FRAMEBUFFER_BLEND */\n/* reuse GL_READ_PIXELS */\n/* reuse GL_READ_PIXELS_FORMAT */\n/* reuse GL_READ_PIXELS_TYPE */\n/* reuse GL_TEXTURE_IMAGE_FORMAT */\n/* reuse GL_TEXTURE_IMAGE_TYPE */\n/* reuse GL_GET_TEXTURE_IMAGE_FORMAT */\n/* reuse GL_GET_TEXTURE_IMAGE_TYPE */\n/* reuse GL_MIPMAP */\n/* reuse GL_MANUAL_GENERATE_MIPMAP */\n/* reuse GL_AUTO_GENERATE_MIPMAP */\n/* reuse GL_COLOR_ENCODING */\n/* reuse GL_SRGB_READ */\n/* reuse GL_SRGB_WRITE */\n/* reuse GL_FILTER */\n/* reuse GL_VERTEX_TEXTURE */\n/* reuse GL_TESS_CONTROL_TEXTURE */\n/* reuse GL_TESS_EVALUATION_TEXTURE */\n/* reuse GL_GEOMETRY_TEXTURE */\n/* reuse GL_FRAGMENT_TEXTURE */\n/* reuse GL_COMPUTE_TEXTURE */\n/* reuse GL_TEXTURE_SHADOW */\n/* reuse GL_TEXTURE_GATHER */\n/* reuse GL_TEXTURE_GATHER_SHADOW */\n/* reuse GL_SHADER_IMAGE_LOAD */\n/* reuse GL_SHADER_IMAGE_STORE */\n/* reuse GL_SHADER_IMAGE_ATOMIC */\n/* reuse GL_IMAGE_TEXEL_SIZE */\n/* reuse GL_IMAGE_COMPATIBILITY_CLASS */\n/* reuse GL_IMAGE_PIXEL_FORMAT */\n/* reuse GL_IMAGE_PIXEL_TYPE */\n/* reuse GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST */\n/* reuse GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST */\n/* reuse GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE */\n/* reuse GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE */\n/* reuse GL_TEXTURE_COMPRESSED_BLOCK_WIDTH */\n/* reuse GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT */\n/* reuse GL_TEXTURE_COMPRESSED_BLOCK_SIZE */\n/* reuse GL_CLEAR_BUFFER */\n/* reuse GL_TEXTURE_VIEW */\n/* reuse GL_VIEW_COMPATIBILITY_CLASS */\n/* reuse GL_FULL_SUPPORT */\n/* reuse GL_CAVEAT_SUPPORT */\n/* reuse GL_IMAGE_CLASS_4_X_32 */\n/* reuse GL_IMAGE_CLASS_2_X_32 */\n/* reuse GL_IMAGE_CLASS_1_X_32 */\n/* reuse GL_IMAGE_CLASS_4_X_16 */\n/* reuse GL_IMAGE_CLASS_2_X_16 */\n/* reuse GL_IMAGE_CLASS_1_X_16 */\n/* reuse GL_IMAGE_CLASS_4_X_8 */\n/* reuse GL_IMAGE_CLASS_2_X_8 */\n/* reuse GL_IMAGE_CLASS_1_X_8 */\n/* reuse GL_IMAGE_CLASS_11_11_10 */\n/* reuse GL_IMAGE_CLASS_10_10_10_2 */\n/* reuse GL_VIEW_CLASS_128_BITS */\n/* reuse GL_VIEW_CLASS_96_BITS */\n/* reuse GL_VIEW_CLASS_64_BITS */\n/* reuse GL_VIEW_CLASS_48_BITS */\n/* reuse GL_VIEW_CLASS_32_BITS */\n/* reuse GL_VIEW_CLASS_24_BITS */\n/* reuse GL_VIEW_CLASS_16_BITS */\n/* reuse GL_VIEW_CLASS_8_BITS */\n/* reuse GL_VIEW_CLASS_S3TC_DXT1_RGB */\n/* reuse GL_VIEW_CLASS_S3TC_DXT1_RGBA */\n/* reuse GL_VIEW_CLASS_S3TC_DXT3_RGBA */\n/* reuse GL_VIEW_CLASS_S3TC_DXT5_RGBA */\n/* reuse GL_VIEW_CLASS_RGTC1_RED */\n/* reuse GL_VIEW_CLASS_RGTC2_RG */\n/* reuse GL_VIEW_CLASS_BPTC_UNORM */\n/* reuse GL_VIEW_CLASS_BPTC_FLOAT */\n/* Reuse tokens from ARB_invalidate_subdata (none) */\n/* Reuse tokens from ARB_multi_draw_indirect (none) */\n/* Reuse tokens from ARB_program_interface_query */\n/* reuse GL_UNIFORM */\n/* reuse GL_UNIFORM_BLOCK */\n/* reuse GL_PROGRAM_INPUT */\n/* reuse GL_PROGRAM_OUTPUT */\n/* reuse GL_BUFFER_VARIABLE */\n/* reuse GL_SHADER_STORAGE_BLOCK */\n/* reuse GL_VERTEX_SUBROUTINE */\n/* reuse GL_TESS_CONTROL_SUBROUTINE */\n/* reuse GL_TESS_EVALUATION_SUBROUTINE */\n/* reuse GL_GEOMETRY_SUBROUTINE */\n/* reuse GL_FRAGMENT_SUBROUTINE */\n/* reuse GL_COMPUTE_SUBROUTINE */\n/* reuse GL_VERTEX_SUBROUTINE_UNIFORM */\n/* reuse GL_TESS_CONTROL_SUBROUTINE_UNIFORM */\n/* reuse GL_TESS_EVALUATION_SUBROUTINE_UNIFORM */\n/* reuse GL_GEOMETRY_SUBROUTINE_UNIFORM */\n/* reuse GL_FRAGMENT_SUBROUTINE_UNIFORM */\n/* reuse GL_COMPUTE_SUBROUTINE_UNIFORM */\n/* reuse GL_TRANSFORM_FEEDBACK_VARYING */\n/* reuse GL_ACTIVE_RESOURCES */\n/* reuse GL_MAX_NAME_LENGTH */\n/* reuse GL_MAX_NUM_ACTIVE_VARIABLES */\n/* reuse GL_MAX_NUM_COMPATIBLE_SUBROUTINES */\n/* reuse GL_NAME_LENGTH */\n/* reuse GL_TYPE */\n/* reuse GL_ARRAY_SIZE */\n/* reuse GL_OFFSET */\n/* reuse GL_BLOCK_INDEX */\n/* reuse GL_ARRAY_STRIDE */\n/* reuse GL_MATRIX_STRIDE */\n/* reuse GL_IS_ROW_MAJOR */\n/* reuse GL_ATOMIC_COUNTER_BUFFER_INDEX */\n/* reuse GL_BUFFER_BINDING */\n/* reuse GL_BUFFER_DATA_SIZE */\n/* reuse GL_NUM_ACTIVE_VARIABLES */\n/* reuse GL_ACTIVE_VARIABLES */\n/* reuse GL_REFERENCED_BY_VERTEX_SHADER */\n/* reuse GL_REFERENCED_BY_TESS_CONTROL_SHADER */\n/* reuse GL_REFERENCED_BY_TESS_EVALUATION_SHADER */\n/* reuse GL_REFERENCED_BY_GEOMETRY_SHADER */\n/* reuse GL_REFERENCED_BY_FRAGMENT_SHADER */\n/* reuse GL_REFERENCED_BY_COMPUTE_SHADER */\n/* reuse GL_TOP_LEVEL_ARRAY_SIZE */\n/* reuse GL_TOP_LEVEL_ARRAY_STRIDE */\n/* reuse GL_LOCATION */\n/* reuse GL_LOCATION_INDEX */\n/* reuse GL_IS_PER_PATCH */\n/* Reuse tokens from ARB_robust_buffer_access_behavior (none) */\n/* Reuse tokens from ARB_shader_storage_buffer_object */\n/* reuse GL_SHADER_STORAGE_BUFFER */\n/* reuse GL_SHADER_STORAGE_BUFFER_BINDING */\n/* reuse GL_SHADER_STORAGE_BUFFER_START */\n/* reuse GL_SHADER_STORAGE_BUFFER_SIZE */\n/* reuse GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS */\n/* reuse GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS */\n/* reuse GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS */\n/* reuse GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS */\n/* reuse GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS */\n/* reuse GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS */\n/* reuse GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS */\n/* reuse GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS */\n/* reuse GL_MAX_SHADER_STORAGE_BLOCK_SIZE */\n/* reuse GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT */\n/* reuse GL_SHADER_STORAGE_BARRIER_BIT */\n/* reuse GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES */\n/* Reuse tokens from ARB_stencil_texturing */\n/* reuse GL_DEPTH_STENCIL_TEXTURE_MODE */\n/* Reuse tokens from ARB_texture_buffer_range */\n/* reuse GL_TEXTURE_BUFFER_OFFSET */\n/* reuse GL_TEXTURE_BUFFER_SIZE */\n/* reuse GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT */\n/* Reuse tokens from ARB_texture_query_levels (none) */\n/* Reuse tokens from ARB_texture_storage_multisample (none) */\n/* Reuse tokens from ARB_texture_view */\n/* reuse GL_TEXTURE_VIEW_MIN_LEVEL */\n/* reuse GL_TEXTURE_VIEW_NUM_LEVELS */\n/* reuse GL_TEXTURE_VIEW_MIN_LAYER */\n/* reuse GL_TEXTURE_VIEW_NUM_LAYERS */\n/* reuse GL_TEXTURE_IMMUTABLE_LEVELS */\n/* Reuse tokens from ARB_vertex_attrib_binding */\n/* reuse GL_VERTEX_ATTRIB_BINDING */\n/* reuse GL_VERTEX_ATTRIB_RELATIVE_OFFSET */\n/* reuse GL_VERTEX_BINDING_DIVISOR */\n/* reuse GL_VERTEX_BINDING_OFFSET */\n/* reuse GL_VERTEX_BINDING_STRIDE */\n/* reuse GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET */\n/* reuse GL_MAX_VERTEX_ATTRIB_BINDINGS */\n#endif\n\n#ifndef GL_ARB_multitexture\n#define GL_TEXTURE0_ARB                   0x84C0\n#define GL_TEXTURE1_ARB                   0x84C1\n#define GL_TEXTURE2_ARB                   0x84C2\n#define GL_TEXTURE3_ARB                   0x84C3\n#define GL_TEXTURE4_ARB                   0x84C4\n#define GL_TEXTURE5_ARB                   0x84C5\n#define GL_TEXTURE6_ARB                   0x84C6\n#define GL_TEXTURE7_ARB                   0x84C7\n#define GL_TEXTURE8_ARB                   0x84C8\n#define GL_TEXTURE9_ARB                   0x84C9\n#define GL_TEXTURE10_ARB                  0x84CA\n#define GL_TEXTURE11_ARB                  0x84CB\n#define GL_TEXTURE12_ARB                  0x84CC\n#define GL_TEXTURE13_ARB                  0x84CD\n#define GL_TEXTURE14_ARB                  0x84CE\n#define GL_TEXTURE15_ARB                  0x84CF\n#define GL_TEXTURE16_ARB                  0x84D0\n#define GL_TEXTURE17_ARB                  0x84D1\n#define GL_TEXTURE18_ARB                  0x84D2\n#define GL_TEXTURE19_ARB                  0x84D3\n#define GL_TEXTURE20_ARB                  0x84D4\n#define GL_TEXTURE21_ARB                  0x84D5\n#define GL_TEXTURE22_ARB                  0x84D6\n#define GL_TEXTURE23_ARB                  0x84D7\n#define GL_TEXTURE24_ARB                  0x84D8\n#define GL_TEXTURE25_ARB                  0x84D9\n#define GL_TEXTURE26_ARB                  0x84DA\n#define GL_TEXTURE27_ARB                  0x84DB\n#define GL_TEXTURE28_ARB                  0x84DC\n#define GL_TEXTURE29_ARB                  0x84DD\n#define GL_TEXTURE30_ARB                  0x84DE\n#define GL_TEXTURE31_ARB                  0x84DF\n#define GL_ACTIVE_TEXTURE_ARB             0x84E0\n#define GL_CLIENT_ACTIVE_TEXTURE_ARB      0x84E1\n#define GL_MAX_TEXTURE_UNITS_ARB          0x84E2\n#endif\n\n#ifndef GL_ARB_transpose_matrix\n#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3\n#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4\n#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB   0x84E5\n#define GL_TRANSPOSE_COLOR_MATRIX_ARB     0x84E6\n#endif\n\n#ifndef GL_ARB_multisample\n#define GL_MULTISAMPLE_ARB                0x809D\n#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB   0x809E\n#define GL_SAMPLE_ALPHA_TO_ONE_ARB        0x809F\n#define GL_SAMPLE_COVERAGE_ARB            0x80A0\n#define GL_SAMPLE_BUFFERS_ARB             0x80A8\n#define GL_SAMPLES_ARB                    0x80A9\n#define GL_SAMPLE_COVERAGE_VALUE_ARB      0x80AA\n#define GL_SAMPLE_COVERAGE_INVERT_ARB     0x80AB\n#define GL_MULTISAMPLE_BIT_ARB            0x20000000\n#endif\n\n#ifndef GL_ARB_texture_env_add\n#endif\n\n#ifndef GL_ARB_texture_cube_map\n#define GL_NORMAL_MAP_ARB                 0x8511\n#define GL_REFLECTION_MAP_ARB             0x8512\n#define GL_TEXTURE_CUBE_MAP_ARB           0x8513\n#define GL_TEXTURE_BINDING_CUBE_MAP_ARB   0x8514\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A\n#define GL_PROXY_TEXTURE_CUBE_MAP_ARB     0x851B\n#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB  0x851C\n#endif\n\n#ifndef GL_ARB_texture_compression\n#define GL_COMPRESSED_ALPHA_ARB           0x84E9\n#define GL_COMPRESSED_LUMINANCE_ARB       0x84EA\n#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB\n#define GL_COMPRESSED_INTENSITY_ARB       0x84EC\n#define GL_COMPRESSED_RGB_ARB             0x84ED\n#define GL_COMPRESSED_RGBA_ARB            0x84EE\n#define GL_TEXTURE_COMPRESSION_HINT_ARB   0x84EF\n#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0\n#define GL_TEXTURE_COMPRESSED_ARB         0x86A1\n#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2\n#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3\n#endif\n\n#ifndef GL_ARB_texture_border_clamp\n#define GL_CLAMP_TO_BORDER_ARB            0x812D\n#endif\n\n#ifndef GL_ARB_point_parameters\n#define GL_POINT_SIZE_MIN_ARB             0x8126\n#define GL_POINT_SIZE_MAX_ARB             0x8127\n#define GL_POINT_FADE_THRESHOLD_SIZE_ARB  0x8128\n#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129\n#endif\n\n#ifndef GL_ARB_vertex_blend\n#define GL_MAX_VERTEX_UNITS_ARB           0x86A4\n#define GL_ACTIVE_VERTEX_UNITS_ARB        0x86A5\n#define GL_WEIGHT_SUM_UNITY_ARB           0x86A6\n#define GL_VERTEX_BLEND_ARB               0x86A7\n#define GL_CURRENT_WEIGHT_ARB             0x86A8\n#define GL_WEIGHT_ARRAY_TYPE_ARB          0x86A9\n#define GL_WEIGHT_ARRAY_STRIDE_ARB        0x86AA\n#define GL_WEIGHT_ARRAY_SIZE_ARB          0x86AB\n#define GL_WEIGHT_ARRAY_POINTER_ARB       0x86AC\n#define GL_WEIGHT_ARRAY_ARB               0x86AD\n#define GL_MODELVIEW0_ARB                 0x1700\n#define GL_MODELVIEW1_ARB                 0x850A\n#define GL_MODELVIEW2_ARB                 0x8722\n#define GL_MODELVIEW3_ARB                 0x8723\n#define GL_MODELVIEW4_ARB                 0x8724\n#define GL_MODELVIEW5_ARB                 0x8725\n#define GL_MODELVIEW6_ARB                 0x8726\n#define GL_MODELVIEW7_ARB                 0x8727\n#define GL_MODELVIEW8_ARB                 0x8728\n#define GL_MODELVIEW9_ARB                 0x8729\n#define GL_MODELVIEW10_ARB                0x872A\n#define GL_MODELVIEW11_ARB                0x872B\n#define GL_MODELVIEW12_ARB                0x872C\n#define GL_MODELVIEW13_ARB                0x872D\n#define GL_MODELVIEW14_ARB                0x872E\n#define GL_MODELVIEW15_ARB                0x872F\n#define GL_MODELVIEW16_ARB                0x8730\n#define GL_MODELVIEW17_ARB                0x8731\n#define GL_MODELVIEW18_ARB                0x8732\n#define GL_MODELVIEW19_ARB                0x8733\n#define GL_MODELVIEW20_ARB                0x8734\n#define GL_MODELVIEW21_ARB                0x8735\n#define GL_MODELVIEW22_ARB                0x8736\n#define GL_MODELVIEW23_ARB                0x8737\n#define GL_MODELVIEW24_ARB                0x8738\n#define GL_MODELVIEW25_ARB                0x8739\n#define GL_MODELVIEW26_ARB                0x873A\n#define GL_MODELVIEW27_ARB                0x873B\n#define GL_MODELVIEW28_ARB                0x873C\n#define GL_MODELVIEW29_ARB                0x873D\n#define GL_MODELVIEW30_ARB                0x873E\n#define GL_MODELVIEW31_ARB                0x873F\n#endif\n\n#ifndef GL_ARB_matrix_palette\n#define GL_MATRIX_PALETTE_ARB             0x8840\n#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841\n#define GL_MAX_PALETTE_MATRICES_ARB       0x8842\n#define GL_CURRENT_PALETTE_MATRIX_ARB     0x8843\n#define GL_MATRIX_INDEX_ARRAY_ARB         0x8844\n#define GL_CURRENT_MATRIX_INDEX_ARB       0x8845\n#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB    0x8846\n#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB    0x8847\n#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB  0x8848\n#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849\n#endif\n\n#ifndef GL_ARB_texture_env_combine\n#define GL_COMBINE_ARB                    0x8570\n#define GL_COMBINE_RGB_ARB                0x8571\n#define GL_COMBINE_ALPHA_ARB              0x8572\n#define GL_SOURCE0_RGB_ARB                0x8580\n#define GL_SOURCE1_RGB_ARB                0x8581\n#define GL_SOURCE2_RGB_ARB                0x8582\n#define GL_SOURCE0_ALPHA_ARB              0x8588\n#define GL_SOURCE1_ALPHA_ARB              0x8589\n#define GL_SOURCE2_ALPHA_ARB              0x858A\n#define GL_OPERAND0_RGB_ARB               0x8590\n#define GL_OPERAND1_RGB_ARB               0x8591\n#define GL_OPERAND2_RGB_ARB               0x8592\n#define GL_OPERAND0_ALPHA_ARB             0x8598\n#define GL_OPERAND1_ALPHA_ARB             0x8599\n#define GL_OPERAND2_ALPHA_ARB             0x859A\n#define GL_RGB_SCALE_ARB                  0x8573\n#define GL_ADD_SIGNED_ARB                 0x8574\n#define GL_INTERPOLATE_ARB                0x8575\n#define GL_SUBTRACT_ARB                   0x84E7\n#define GL_CONSTANT_ARB                   0x8576\n#define GL_PRIMARY_COLOR_ARB              0x8577\n#define GL_PREVIOUS_ARB                   0x8578\n#endif\n\n#ifndef GL_ARB_texture_env_crossbar\n#endif\n\n#ifndef GL_ARB_texture_env_dot3\n#define GL_DOT3_RGB_ARB                   0x86AE\n#define GL_DOT3_RGBA_ARB                  0x86AF\n#endif\n\n#ifndef GL_ARB_texture_mirrored_repeat\n#define GL_MIRRORED_REPEAT_ARB            0x8370\n#endif\n\n#ifndef GL_ARB_depth_texture\n#define GL_DEPTH_COMPONENT16_ARB          0x81A5\n#define GL_DEPTH_COMPONENT24_ARB          0x81A6\n#define GL_DEPTH_COMPONENT32_ARB          0x81A7\n#define GL_TEXTURE_DEPTH_SIZE_ARB         0x884A\n#define GL_DEPTH_TEXTURE_MODE_ARB         0x884B\n#endif\n\n#ifndef GL_ARB_shadow\n#define GL_TEXTURE_COMPARE_MODE_ARB       0x884C\n#define GL_TEXTURE_COMPARE_FUNC_ARB       0x884D\n#define GL_COMPARE_R_TO_TEXTURE_ARB       0x884E\n#endif\n\n#ifndef GL_ARB_shadow_ambient\n#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF\n#endif\n\n#ifndef GL_ARB_window_pos\n#endif\n\n#ifndef GL_ARB_vertex_program\n#define GL_COLOR_SUM_ARB                  0x8458\n#define GL_VERTEX_PROGRAM_ARB             0x8620\n#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622\n#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB   0x8623\n#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624\n#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB   0x8625\n#define GL_CURRENT_VERTEX_ATTRIB_ARB      0x8626\n#define GL_PROGRAM_LENGTH_ARB             0x8627\n#define GL_PROGRAM_STRING_ARB             0x8628\n#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E\n#define GL_MAX_PROGRAM_MATRICES_ARB       0x862F\n#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640\n#define GL_CURRENT_MATRIX_ARB             0x8641\n#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB  0x8642\n#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB    0x8643\n#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645\n#define GL_PROGRAM_ERROR_POSITION_ARB     0x864B\n#define GL_PROGRAM_BINDING_ARB            0x8677\n#define GL_MAX_VERTEX_ATTRIBS_ARB         0x8869\n#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A\n#define GL_PROGRAM_ERROR_STRING_ARB       0x8874\n#define GL_PROGRAM_FORMAT_ASCII_ARB       0x8875\n#define GL_PROGRAM_FORMAT_ARB             0x8876\n#define GL_PROGRAM_INSTRUCTIONS_ARB       0x88A0\n#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB   0x88A1\n#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2\n#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3\n#define GL_PROGRAM_TEMPORARIES_ARB        0x88A4\n#define GL_MAX_PROGRAM_TEMPORARIES_ARB    0x88A5\n#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6\n#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7\n#define GL_PROGRAM_PARAMETERS_ARB         0x88A8\n#define GL_MAX_PROGRAM_PARAMETERS_ARB     0x88A9\n#define GL_PROGRAM_NATIVE_PARAMETERS_ARB  0x88AA\n#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB\n#define GL_PROGRAM_ATTRIBS_ARB            0x88AC\n#define GL_MAX_PROGRAM_ATTRIBS_ARB        0x88AD\n#define GL_PROGRAM_NATIVE_ATTRIBS_ARB     0x88AE\n#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF\n#define GL_PROGRAM_ADDRESS_REGISTERS_ARB  0x88B0\n#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1\n#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2\n#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3\n#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4\n#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5\n#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6\n#define GL_TRANSPOSE_CURRENT_MATRIX_ARB   0x88B7\n#define GL_MATRIX0_ARB                    0x88C0\n#define GL_MATRIX1_ARB                    0x88C1\n#define GL_MATRIX2_ARB                    0x88C2\n#define GL_MATRIX3_ARB                    0x88C3\n#define GL_MATRIX4_ARB                    0x88C4\n#define GL_MATRIX5_ARB                    0x88C5\n#define GL_MATRIX6_ARB                    0x88C6\n#define GL_MATRIX7_ARB                    0x88C7\n#define GL_MATRIX8_ARB                    0x88C8\n#define GL_MATRIX9_ARB                    0x88C9\n#define GL_MATRIX10_ARB                   0x88CA\n#define GL_MATRIX11_ARB                   0x88CB\n#define GL_MATRIX12_ARB                   0x88CC\n#define GL_MATRIX13_ARB                   0x88CD\n#define GL_MATRIX14_ARB                   0x88CE\n#define GL_MATRIX15_ARB                   0x88CF\n#define GL_MATRIX16_ARB                   0x88D0\n#define GL_MATRIX17_ARB                   0x88D1\n#define GL_MATRIX18_ARB                   0x88D2\n#define GL_MATRIX19_ARB                   0x88D3\n#define GL_MATRIX20_ARB                   0x88D4\n#define GL_MATRIX21_ARB                   0x88D5\n#define GL_MATRIX22_ARB                   0x88D6\n#define GL_MATRIX23_ARB                   0x88D7\n#define GL_MATRIX24_ARB                   0x88D8\n#define GL_MATRIX25_ARB                   0x88D9\n#define GL_MATRIX26_ARB                   0x88DA\n#define GL_MATRIX27_ARB                   0x88DB\n#define GL_MATRIX28_ARB                   0x88DC\n#define GL_MATRIX29_ARB                   0x88DD\n#define GL_MATRIX30_ARB                   0x88DE\n#define GL_MATRIX31_ARB                   0x88DF\n#endif\n\n#ifndef GL_ARB_fragment_program\n#define GL_FRAGMENT_PROGRAM_ARB           0x8804\n#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB   0x8805\n#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB   0x8806\n#define GL_PROGRAM_TEX_INDIRECTIONS_ARB   0x8807\n#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808\n#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809\n#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A\n#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B\n#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C\n#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D\n#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E\n#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F\n#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810\n#define GL_MAX_TEXTURE_COORDS_ARB         0x8871\n#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB    0x8872\n#endif\n\n#ifndef GL_ARB_vertex_buffer_object\n#define GL_BUFFER_SIZE_ARB                0x8764\n#define GL_BUFFER_USAGE_ARB               0x8765\n#define GL_ARRAY_BUFFER_ARB               0x8892\n#define GL_ELEMENT_ARRAY_BUFFER_ARB       0x8893\n#define GL_ARRAY_BUFFER_BINDING_ARB       0x8894\n#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895\n#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896\n#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897\n#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898\n#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899\n#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A\n#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B\n#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C\n#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D\n#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E\n#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F\n#define GL_READ_ONLY_ARB                  0x88B8\n#define GL_WRITE_ONLY_ARB                 0x88B9\n#define GL_READ_WRITE_ARB                 0x88BA\n#define GL_BUFFER_ACCESS_ARB              0x88BB\n#define GL_BUFFER_MAPPED_ARB              0x88BC\n#define GL_BUFFER_MAP_POINTER_ARB         0x88BD\n#define GL_STREAM_DRAW_ARB                0x88E0\n#define GL_STREAM_READ_ARB                0x88E1\n#define GL_STREAM_COPY_ARB                0x88E2\n#define GL_STATIC_DRAW_ARB                0x88E4\n#define GL_STATIC_READ_ARB                0x88E5\n#define GL_STATIC_COPY_ARB                0x88E6\n#define GL_DYNAMIC_DRAW_ARB               0x88E8\n#define GL_DYNAMIC_READ_ARB               0x88E9\n#define GL_DYNAMIC_COPY_ARB               0x88EA\n#endif\n\n#ifndef GL_ARB_occlusion_query\n#define GL_QUERY_COUNTER_BITS_ARB         0x8864\n#define GL_CURRENT_QUERY_ARB              0x8865\n#define GL_QUERY_RESULT_ARB               0x8866\n#define GL_QUERY_RESULT_AVAILABLE_ARB     0x8867\n#define GL_SAMPLES_PASSED_ARB             0x8914\n#endif\n\n#ifndef GL_ARB_shader_objects\n#define GL_PROGRAM_OBJECT_ARB             0x8B40\n#define GL_SHADER_OBJECT_ARB              0x8B48\n#define GL_OBJECT_TYPE_ARB                0x8B4E\n#define GL_OBJECT_SUBTYPE_ARB             0x8B4F\n#define GL_FLOAT_VEC2_ARB                 0x8B50\n#define GL_FLOAT_VEC3_ARB                 0x8B51\n#define GL_FLOAT_VEC4_ARB                 0x8B52\n#define GL_INT_VEC2_ARB                   0x8B53\n#define GL_INT_VEC3_ARB                   0x8B54\n#define GL_INT_VEC4_ARB                   0x8B55\n#define GL_BOOL_ARB                       0x8B56\n#define GL_BOOL_VEC2_ARB                  0x8B57\n#define GL_BOOL_VEC3_ARB                  0x8B58\n#define GL_BOOL_VEC4_ARB                  0x8B59\n#define GL_FLOAT_MAT2_ARB                 0x8B5A\n#define GL_FLOAT_MAT3_ARB                 0x8B5B\n#define GL_FLOAT_MAT4_ARB                 0x8B5C\n#define GL_SAMPLER_1D_ARB                 0x8B5D\n#define GL_SAMPLER_2D_ARB                 0x8B5E\n#define GL_SAMPLER_3D_ARB                 0x8B5F\n#define GL_SAMPLER_CUBE_ARB               0x8B60\n#define GL_SAMPLER_1D_SHADOW_ARB          0x8B61\n#define GL_SAMPLER_2D_SHADOW_ARB          0x8B62\n#define GL_SAMPLER_2D_RECT_ARB            0x8B63\n#define GL_SAMPLER_2D_RECT_SHADOW_ARB     0x8B64\n#define GL_OBJECT_DELETE_STATUS_ARB       0x8B80\n#define GL_OBJECT_COMPILE_STATUS_ARB      0x8B81\n#define GL_OBJECT_LINK_STATUS_ARB         0x8B82\n#define GL_OBJECT_VALIDATE_STATUS_ARB     0x8B83\n#define GL_OBJECT_INFO_LOG_LENGTH_ARB     0x8B84\n#define GL_OBJECT_ATTACHED_OBJECTS_ARB    0x8B85\n#define GL_OBJECT_ACTIVE_UNIFORMS_ARB     0x8B86\n#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87\n#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88\n#endif\n\n#ifndef GL_ARB_vertex_shader\n#define GL_VERTEX_SHADER_ARB              0x8B31\n#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A\n#define GL_MAX_VARYING_FLOATS_ARB         0x8B4B\n#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C\n#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D\n#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB   0x8B89\n#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A\n#endif\n\n#ifndef GL_ARB_fragment_shader\n#define GL_FRAGMENT_SHADER_ARB            0x8B30\n#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49\n#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B\n#endif\n\n#ifndef GL_ARB_shading_language_100\n#define GL_SHADING_LANGUAGE_VERSION_ARB   0x8B8C\n#endif\n\n#ifndef GL_ARB_texture_non_power_of_two\n#endif\n\n#ifndef GL_ARB_point_sprite\n#define GL_POINT_SPRITE_ARB               0x8861\n#define GL_COORD_REPLACE_ARB              0x8862\n#endif\n\n#ifndef GL_ARB_fragment_program_shadow\n#endif\n\n#ifndef GL_ARB_draw_buffers\n#define GL_MAX_DRAW_BUFFERS_ARB           0x8824\n#define GL_DRAW_BUFFER0_ARB               0x8825\n#define GL_DRAW_BUFFER1_ARB               0x8826\n#define GL_DRAW_BUFFER2_ARB               0x8827\n#define GL_DRAW_BUFFER3_ARB               0x8828\n#define GL_DRAW_BUFFER4_ARB               0x8829\n#define GL_DRAW_BUFFER5_ARB               0x882A\n#define GL_DRAW_BUFFER6_ARB               0x882B\n#define GL_DRAW_BUFFER7_ARB               0x882C\n#define GL_DRAW_BUFFER8_ARB               0x882D\n#define GL_DRAW_BUFFER9_ARB               0x882E\n#define GL_DRAW_BUFFER10_ARB              0x882F\n#define GL_DRAW_BUFFER11_ARB              0x8830\n#define GL_DRAW_BUFFER12_ARB              0x8831\n#define GL_DRAW_BUFFER13_ARB              0x8832\n#define GL_DRAW_BUFFER14_ARB              0x8833\n#define GL_DRAW_BUFFER15_ARB              0x8834\n#endif\n\n#ifndef GL_ARB_texture_rectangle\n#define GL_TEXTURE_RECTANGLE_ARB          0x84F5\n#define GL_TEXTURE_BINDING_RECTANGLE_ARB  0x84F6\n#define GL_PROXY_TEXTURE_RECTANGLE_ARB    0x84F7\n#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8\n#endif\n\n#ifndef GL_ARB_color_buffer_float\n#define GL_RGBA_FLOAT_MODE_ARB            0x8820\n#define GL_CLAMP_VERTEX_COLOR_ARB         0x891A\n#define GL_CLAMP_FRAGMENT_COLOR_ARB       0x891B\n#define GL_CLAMP_READ_COLOR_ARB           0x891C\n#define GL_FIXED_ONLY_ARB                 0x891D\n#endif\n\n#ifndef GL_ARB_half_float_pixel\n#define GL_HALF_FLOAT_ARB                 0x140B\n#endif\n\n#ifndef GL_ARB_texture_float\n#define GL_TEXTURE_RED_TYPE_ARB           0x8C10\n#define GL_TEXTURE_GREEN_TYPE_ARB         0x8C11\n#define GL_TEXTURE_BLUE_TYPE_ARB          0x8C12\n#define GL_TEXTURE_ALPHA_TYPE_ARB         0x8C13\n#define GL_TEXTURE_LUMINANCE_TYPE_ARB     0x8C14\n#define GL_TEXTURE_INTENSITY_TYPE_ARB     0x8C15\n#define GL_TEXTURE_DEPTH_TYPE_ARB         0x8C16\n#define GL_UNSIGNED_NORMALIZED_ARB        0x8C17\n#define GL_RGBA32F_ARB                    0x8814\n#define GL_RGB32F_ARB                     0x8815\n#define GL_ALPHA32F_ARB                   0x8816\n#define GL_INTENSITY32F_ARB               0x8817\n#define GL_LUMINANCE32F_ARB               0x8818\n#define GL_LUMINANCE_ALPHA32F_ARB         0x8819\n#define GL_RGBA16F_ARB                    0x881A\n#define GL_RGB16F_ARB                     0x881B\n#define GL_ALPHA16F_ARB                   0x881C\n#define GL_INTENSITY16F_ARB               0x881D\n#define GL_LUMINANCE16F_ARB               0x881E\n#define GL_LUMINANCE_ALPHA16F_ARB         0x881F\n#endif\n\n#ifndef GL_ARB_pixel_buffer_object\n#define GL_PIXEL_PACK_BUFFER_ARB          0x88EB\n#define GL_PIXEL_UNPACK_BUFFER_ARB        0x88EC\n#define GL_PIXEL_PACK_BUFFER_BINDING_ARB  0x88ED\n#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF\n#endif\n\n#ifndef GL_ARB_depth_buffer_float\n#define GL_DEPTH_COMPONENT32F             0x8CAC\n#define GL_DEPTH32F_STENCIL8              0x8CAD\n#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD\n#endif\n\n#ifndef GL_ARB_draw_instanced\n#endif\n\n#ifndef GL_ARB_framebuffer_object\n#define GL_INVALID_FRAMEBUFFER_OPERATION  0x0506\n#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210\n#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211\n#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212\n#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213\n#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214\n#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215\n#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216\n#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217\n#define GL_FRAMEBUFFER_DEFAULT            0x8218\n#define GL_FRAMEBUFFER_UNDEFINED          0x8219\n#define GL_DEPTH_STENCIL_ATTACHMENT       0x821A\n#define GL_MAX_RENDERBUFFER_SIZE          0x84E8\n#define GL_DEPTH_STENCIL                  0x84F9\n#define GL_UNSIGNED_INT_24_8              0x84FA\n#define GL_DEPTH24_STENCIL8               0x88F0\n#define GL_TEXTURE_STENCIL_SIZE           0x88F1\n#define GL_TEXTURE_RED_TYPE               0x8C10\n#define GL_TEXTURE_GREEN_TYPE             0x8C11\n#define GL_TEXTURE_BLUE_TYPE              0x8C12\n#define GL_TEXTURE_ALPHA_TYPE             0x8C13\n#define GL_TEXTURE_DEPTH_TYPE             0x8C16\n#define GL_UNSIGNED_NORMALIZED            0x8C17\n#define GL_FRAMEBUFFER_BINDING            0x8CA6\n#define GL_DRAW_FRAMEBUFFER_BINDING       0x8CA6\n#define GL_RENDERBUFFER_BINDING           0x8CA7\n#define GL_READ_FRAMEBUFFER               0x8CA8\n#define GL_DRAW_FRAMEBUFFER               0x8CA9\n#define GL_READ_FRAMEBUFFER_BINDING       0x8CAA\n#define GL_RENDERBUFFER_SAMPLES           0x8CAB\n#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0\n#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1\n#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2\n#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3\n#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4\n#define GL_FRAMEBUFFER_COMPLETE           0x8CD5\n#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6\n#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7\n#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB\n#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC\n#define GL_FRAMEBUFFER_UNSUPPORTED        0x8CDD\n#define GL_MAX_COLOR_ATTACHMENTS          0x8CDF\n#define GL_COLOR_ATTACHMENT0              0x8CE0\n#define GL_COLOR_ATTACHMENT1              0x8CE1\n#define GL_COLOR_ATTACHMENT2              0x8CE2\n#define GL_COLOR_ATTACHMENT3              0x8CE3\n#define GL_COLOR_ATTACHMENT4              0x8CE4\n#define GL_COLOR_ATTACHMENT5              0x8CE5\n#define GL_COLOR_ATTACHMENT6              0x8CE6\n#define GL_COLOR_ATTACHMENT7              0x8CE7\n#define GL_COLOR_ATTACHMENT8              0x8CE8\n#define GL_COLOR_ATTACHMENT9              0x8CE9\n#define GL_COLOR_ATTACHMENT10             0x8CEA\n#define GL_COLOR_ATTACHMENT11             0x8CEB\n#define GL_COLOR_ATTACHMENT12             0x8CEC\n#define GL_COLOR_ATTACHMENT13             0x8CED\n#define GL_COLOR_ATTACHMENT14             0x8CEE\n#define GL_COLOR_ATTACHMENT15             0x8CEF\n#define GL_DEPTH_ATTACHMENT               0x8D00\n#define GL_STENCIL_ATTACHMENT             0x8D20\n#define GL_FRAMEBUFFER                    0x8D40\n#define GL_RENDERBUFFER                   0x8D41\n#define GL_RENDERBUFFER_WIDTH             0x8D42\n#define GL_RENDERBUFFER_HEIGHT            0x8D43\n#define GL_RENDERBUFFER_INTERNAL_FORMAT   0x8D44\n#define GL_STENCIL_INDEX1                 0x8D46\n#define GL_STENCIL_INDEX4                 0x8D47\n#define GL_STENCIL_INDEX8                 0x8D48\n#define GL_STENCIL_INDEX16                0x8D49\n#define GL_RENDERBUFFER_RED_SIZE          0x8D50\n#define GL_RENDERBUFFER_GREEN_SIZE        0x8D51\n#define GL_RENDERBUFFER_BLUE_SIZE         0x8D52\n#define GL_RENDERBUFFER_ALPHA_SIZE        0x8D53\n#define GL_RENDERBUFFER_DEPTH_SIZE        0x8D54\n#define GL_RENDERBUFFER_STENCIL_SIZE      0x8D55\n#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56\n#define GL_MAX_SAMPLES                    0x8D57\n#define GL_INDEX                          0x8222\n#define GL_TEXTURE_LUMINANCE_TYPE         0x8C14\n#define GL_TEXTURE_INTENSITY_TYPE         0x8C15\n#endif\n\n#ifndef GL_ARB_framebuffer_sRGB\n#define GL_FRAMEBUFFER_SRGB               0x8DB9\n#endif\n\n#ifndef GL_ARB_geometry_shader4\n#define GL_LINES_ADJACENCY_ARB            0x000A\n#define GL_LINE_STRIP_ADJACENCY_ARB       0x000B\n#define GL_TRIANGLES_ADJACENCY_ARB        0x000C\n#define GL_TRIANGLE_STRIP_ADJACENCY_ARB   0x000D\n#define GL_PROGRAM_POINT_SIZE_ARB         0x8642\n#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29\n#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7\n#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8\n#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9\n#define GL_GEOMETRY_SHADER_ARB            0x8DD9\n#define GL_GEOMETRY_VERTICES_OUT_ARB      0x8DDA\n#define GL_GEOMETRY_INPUT_TYPE_ARB        0x8DDB\n#define GL_GEOMETRY_OUTPUT_TYPE_ARB       0x8DDC\n#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD\n#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE\n#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF\n#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0\n#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1\n/* reuse GL_MAX_VARYING_COMPONENTS */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */\n#endif\n\n#ifndef GL_ARB_half_float_vertex\n#define GL_HALF_FLOAT                     0x140B\n#endif\n\n#ifndef GL_ARB_instanced_arrays\n#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE\n#endif\n\n#ifndef GL_ARB_map_buffer_range\n#define GL_MAP_READ_BIT                   0x0001\n#define GL_MAP_WRITE_BIT                  0x0002\n#define GL_MAP_INVALIDATE_RANGE_BIT       0x0004\n#define GL_MAP_INVALIDATE_BUFFER_BIT      0x0008\n#define GL_MAP_FLUSH_EXPLICIT_BIT         0x0010\n#define GL_MAP_UNSYNCHRONIZED_BIT         0x0020\n#endif\n\n#ifndef GL_ARB_texture_buffer_object\n#define GL_TEXTURE_BUFFER_ARB             0x8C2A\n#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB    0x8C2B\n#define GL_TEXTURE_BINDING_BUFFER_ARB     0x8C2C\n#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D\n#define GL_TEXTURE_BUFFER_FORMAT_ARB      0x8C2E\n#endif\n\n#ifndef GL_ARB_texture_compression_rgtc\n#define GL_COMPRESSED_RED_RGTC1           0x8DBB\n#define GL_COMPRESSED_SIGNED_RED_RGTC1    0x8DBC\n#define GL_COMPRESSED_RG_RGTC2            0x8DBD\n#define GL_COMPRESSED_SIGNED_RG_RGTC2     0x8DBE\n#endif\n\n#ifndef GL_ARB_texture_rg\n#define GL_RG                             0x8227\n#define GL_RG_INTEGER                     0x8228\n#define GL_R8                             0x8229\n#define GL_R16                            0x822A\n#define GL_RG8                            0x822B\n#define GL_RG16                           0x822C\n#define GL_R16F                           0x822D\n#define GL_R32F                           0x822E\n#define GL_RG16F                          0x822F\n#define GL_RG32F                          0x8230\n#define GL_R8I                            0x8231\n#define GL_R8UI                           0x8232\n#define GL_R16I                           0x8233\n#define GL_R16UI                          0x8234\n#define GL_R32I                           0x8235\n#define GL_R32UI                          0x8236\n#define GL_RG8I                           0x8237\n#define GL_RG8UI                          0x8238\n#define GL_RG16I                          0x8239\n#define GL_RG16UI                         0x823A\n#define GL_RG32I                          0x823B\n#define GL_RG32UI                         0x823C\n#endif\n\n#ifndef GL_ARB_vertex_array_object\n#define GL_VERTEX_ARRAY_BINDING           0x85B5\n#endif\n\n#ifndef GL_ARB_uniform_buffer_object\n#define GL_UNIFORM_BUFFER                 0x8A11\n#define GL_UNIFORM_BUFFER_BINDING         0x8A28\n#define GL_UNIFORM_BUFFER_START           0x8A29\n#define GL_UNIFORM_BUFFER_SIZE            0x8A2A\n#define GL_MAX_VERTEX_UNIFORM_BLOCKS      0x8A2B\n#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS    0x8A2C\n#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS    0x8A2D\n#define GL_MAX_COMBINED_UNIFORM_BLOCKS    0x8A2E\n#define GL_MAX_UNIFORM_BUFFER_BINDINGS    0x8A2F\n#define GL_MAX_UNIFORM_BLOCK_SIZE         0x8A30\n#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31\n#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32\n#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33\n#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34\n#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35\n#define GL_ACTIVE_UNIFORM_BLOCKS          0x8A36\n#define GL_UNIFORM_TYPE                   0x8A37\n#define GL_UNIFORM_SIZE                   0x8A38\n#define GL_UNIFORM_NAME_LENGTH            0x8A39\n#define GL_UNIFORM_BLOCK_INDEX            0x8A3A\n#define GL_UNIFORM_OFFSET                 0x8A3B\n#define GL_UNIFORM_ARRAY_STRIDE           0x8A3C\n#define GL_UNIFORM_MATRIX_STRIDE          0x8A3D\n#define GL_UNIFORM_IS_ROW_MAJOR           0x8A3E\n#define GL_UNIFORM_BLOCK_BINDING          0x8A3F\n#define GL_UNIFORM_BLOCK_DATA_SIZE        0x8A40\n#define GL_UNIFORM_BLOCK_NAME_LENGTH      0x8A41\n#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS  0x8A42\n#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43\n#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44\n#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45\n#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46\n#define GL_INVALID_INDEX                  0xFFFFFFFFu\n#endif\n\n#ifndef GL_ARB_compatibility\n/* ARB_compatibility just defines tokens from core 3.0 */\n#endif\n\n#ifndef GL_ARB_copy_buffer\n#define GL_COPY_READ_BUFFER_BINDING       0x8F36\n#define GL_COPY_READ_BUFFER               0x8F36\n#define GL_COPY_WRITE_BUFFER_BINDING      0x8F37\n#define GL_COPY_WRITE_BUFFER              0x8F37\n#endif\n\n#ifndef GL_ARB_shader_texture_lod\n#endif\n\n#ifndef GL_ARB_depth_clamp\n#define GL_DEPTH_CLAMP                    0x864F\n#endif\n\n#ifndef GL_ARB_draw_elements_base_vertex\n#endif\n\n#ifndef GL_ARB_fragment_coord_conventions\n#endif\n\n#ifndef GL_ARB_provoking_vertex\n#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C\n#define GL_FIRST_VERTEX_CONVENTION        0x8E4D\n#define GL_LAST_VERTEX_CONVENTION         0x8E4E\n#define GL_PROVOKING_VERTEX               0x8E4F\n#endif\n\n#ifndef GL_ARB_seamless_cube_map\n#define GL_TEXTURE_CUBE_MAP_SEAMLESS      0x884F\n#endif\n\n#ifndef GL_ARB_sync\n#define GL_MAX_SERVER_WAIT_TIMEOUT        0x9111\n#define GL_OBJECT_TYPE                    0x9112\n#define GL_SYNC_CONDITION                 0x9113\n#define GL_SYNC_STATUS                    0x9114\n#define GL_SYNC_FLAGS                     0x9115\n#define GL_SYNC_FENCE                     0x9116\n#define GL_SYNC_GPU_COMMANDS_COMPLETE     0x9117\n#define GL_UNSIGNALED                     0x9118\n#define GL_SIGNALED                       0x9119\n#define GL_ALREADY_SIGNALED               0x911A\n#define GL_TIMEOUT_EXPIRED                0x911B\n#define GL_CONDITION_SATISFIED            0x911C\n#define GL_WAIT_FAILED                    0x911D\n#define GL_SYNC_FLUSH_COMMANDS_BIT        0x00000001\n#define GL_TIMEOUT_IGNORED                0xFFFFFFFFFFFFFFFFull\n#endif\n\n#ifndef GL_ARB_texture_multisample\n#define GL_SAMPLE_POSITION                0x8E50\n#define GL_SAMPLE_MASK                    0x8E51\n#define GL_SAMPLE_MASK_VALUE              0x8E52\n#define GL_MAX_SAMPLE_MASK_WORDS          0x8E59\n#define GL_TEXTURE_2D_MULTISAMPLE         0x9100\n#define GL_PROXY_TEXTURE_2D_MULTISAMPLE   0x9101\n#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY   0x9102\n#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103\n#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104\n#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105\n#define GL_TEXTURE_SAMPLES                0x9106\n#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107\n#define GL_SAMPLER_2D_MULTISAMPLE         0x9108\n#define GL_INT_SAMPLER_2D_MULTISAMPLE     0x9109\n#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A\n#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY   0x910B\n#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C\n#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D\n#define GL_MAX_COLOR_TEXTURE_SAMPLES      0x910E\n#define GL_MAX_DEPTH_TEXTURE_SAMPLES      0x910F\n#define GL_MAX_INTEGER_SAMPLES            0x9110\n#endif\n\n#ifndef GL_ARB_vertex_array_bgra\n/* reuse GL_BGRA */\n#endif\n\n#ifndef GL_ARB_draw_buffers_blend\n#endif\n\n#ifndef GL_ARB_sample_shading\n#define GL_SAMPLE_SHADING_ARB             0x8C36\n#define GL_MIN_SAMPLE_SHADING_VALUE_ARB   0x8C37\n#endif\n\n#ifndef GL_ARB_texture_cube_map_array\n#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB     0x9009\n#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A\n#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B\n#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB     0x900C\n#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D\n#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E\n#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F\n#endif\n\n#ifndef GL_ARB_texture_gather\n#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E\n#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F\n#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F\n#endif\n\n#ifndef GL_ARB_texture_query_lod\n#endif\n\n#ifndef GL_ARB_shading_language_include\n#define GL_SHADER_INCLUDE_ARB             0x8DAE\n#define GL_NAMED_STRING_LENGTH_ARB        0x8DE9\n#define GL_NAMED_STRING_TYPE_ARB          0x8DEA\n#endif\n\n#ifndef GL_ARB_texture_compression_bptc\n#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C\n#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D\n#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E\n#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F\n#endif\n\n#ifndef GL_ARB_blend_func_extended\n#define GL_SRC1_COLOR                     0x88F9\n/* reuse GL_SRC1_ALPHA */\n#define GL_ONE_MINUS_SRC1_COLOR           0x88FA\n#define GL_ONE_MINUS_SRC1_ALPHA           0x88FB\n#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS   0x88FC\n#endif\n\n#ifndef GL_ARB_explicit_attrib_location\n#endif\n\n#ifndef GL_ARB_occlusion_query2\n#define GL_ANY_SAMPLES_PASSED             0x8C2F\n#endif\n\n#ifndef GL_ARB_sampler_objects\n#define GL_SAMPLER_BINDING                0x8919\n#endif\n\n#ifndef GL_ARB_shader_bit_encoding\n#endif\n\n#ifndef GL_ARB_texture_rgb10_a2ui\n#define GL_RGB10_A2UI                     0x906F\n#endif\n\n#ifndef GL_ARB_texture_swizzle\n#define GL_TEXTURE_SWIZZLE_R              0x8E42\n#define GL_TEXTURE_SWIZZLE_G              0x8E43\n#define GL_TEXTURE_SWIZZLE_B              0x8E44\n#define GL_TEXTURE_SWIZZLE_A              0x8E45\n#define GL_TEXTURE_SWIZZLE_RGBA           0x8E46\n#endif\n\n#ifndef GL_ARB_timer_query\n#define GL_TIME_ELAPSED                   0x88BF\n#define GL_TIMESTAMP                      0x8E28\n#endif\n\n#ifndef GL_ARB_vertex_type_2_10_10_10_rev\n/* reuse GL_UNSIGNED_INT_2_10_10_10_REV */\n#define GL_INT_2_10_10_10_REV             0x8D9F\n#endif\n\n#ifndef GL_ARB_draw_indirect\n#define GL_DRAW_INDIRECT_BUFFER           0x8F3F\n#define GL_DRAW_INDIRECT_BUFFER_BINDING   0x8F43\n#endif\n\n#ifndef GL_ARB_gpu_shader5\n#define GL_GEOMETRY_SHADER_INVOCATIONS    0x887F\n#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A\n#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B\n#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C\n#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D\n/* reuse GL_MAX_VERTEX_STREAMS */\n#endif\n\n#ifndef GL_ARB_gpu_shader_fp64\n/* reuse GL_DOUBLE */\n#define GL_DOUBLE_VEC2                    0x8FFC\n#define GL_DOUBLE_VEC3                    0x8FFD\n#define GL_DOUBLE_VEC4                    0x8FFE\n#define GL_DOUBLE_MAT2                    0x8F46\n#define GL_DOUBLE_MAT3                    0x8F47\n#define GL_DOUBLE_MAT4                    0x8F48\n#define GL_DOUBLE_MAT2x3                  0x8F49\n#define GL_DOUBLE_MAT2x4                  0x8F4A\n#define GL_DOUBLE_MAT3x2                  0x8F4B\n#define GL_DOUBLE_MAT3x4                  0x8F4C\n#define GL_DOUBLE_MAT4x2                  0x8F4D\n#define GL_DOUBLE_MAT4x3                  0x8F4E\n#endif\n\n#ifndef GL_ARB_shader_subroutine\n#define GL_ACTIVE_SUBROUTINES             0x8DE5\n#define GL_ACTIVE_SUBROUTINE_UNIFORMS     0x8DE6\n#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47\n#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH   0x8E48\n#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49\n#define GL_MAX_SUBROUTINES                0x8DE7\n#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8\n#define GL_NUM_COMPATIBLE_SUBROUTINES     0x8E4A\n#define GL_COMPATIBLE_SUBROUTINES         0x8E4B\n/* reuse GL_UNIFORM_SIZE */\n/* reuse GL_UNIFORM_NAME_LENGTH */\n#endif\n\n#ifndef GL_ARB_tessellation_shader\n#define GL_PATCHES                        0x000E\n#define GL_PATCH_VERTICES                 0x8E72\n#define GL_PATCH_DEFAULT_INNER_LEVEL      0x8E73\n#define GL_PATCH_DEFAULT_OUTER_LEVEL      0x8E74\n#define GL_TESS_CONTROL_OUTPUT_VERTICES   0x8E75\n#define GL_TESS_GEN_MODE                  0x8E76\n#define GL_TESS_GEN_SPACING               0x8E77\n#define GL_TESS_GEN_VERTEX_ORDER          0x8E78\n#define GL_TESS_GEN_POINT_MODE            0x8E79\n/* reuse GL_TRIANGLES */\n/* reuse GL_QUADS */\n#define GL_ISOLINES                       0x8E7A\n/* reuse GL_EQUAL */\n#define GL_FRACTIONAL_ODD                 0x8E7B\n#define GL_FRACTIONAL_EVEN                0x8E7C\n/* reuse GL_CCW */\n/* reuse GL_CW */\n#define GL_MAX_PATCH_VERTICES             0x8E7D\n#define GL_MAX_TESS_GEN_LEVEL             0x8E7E\n#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F\n#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80\n#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81\n#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82\n#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83\n#define GL_MAX_TESS_PATCH_COMPONENTS      0x8E84\n#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85\n#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86\n#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89\n#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A\n#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C\n#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D\n#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E\n#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F\n#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0\n#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1\n#define GL_TESS_EVALUATION_SHADER         0x8E87\n#define GL_TESS_CONTROL_SHADER            0x8E88\n#endif\n\n#ifndef GL_ARB_texture_buffer_object_rgb32\n/* reuse GL_RGB32F */\n/* reuse GL_RGB32UI */\n/* reuse GL_RGB32I */\n#endif\n\n#ifndef GL_ARB_transform_feedback2\n#define GL_TRANSFORM_FEEDBACK             0x8E22\n#define GL_TRANSFORM_FEEDBACK_PAUSED      0x8E23\n#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23\n#define GL_TRANSFORM_FEEDBACK_ACTIVE      0x8E24\n#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24\n#define GL_TRANSFORM_FEEDBACK_BINDING     0x8E25\n#endif\n\n#ifndef GL_ARB_transform_feedback3\n#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70\n#define GL_MAX_VERTEX_STREAMS             0x8E71\n#endif\n\n#ifndef GL_ARB_ES2_compatibility\n#define GL_FIXED                          0x140C\n#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A\n#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B\n#define GL_LOW_FLOAT                      0x8DF0\n#define GL_MEDIUM_FLOAT                   0x8DF1\n#define GL_HIGH_FLOAT                     0x8DF2\n#define GL_LOW_INT                        0x8DF3\n#define GL_MEDIUM_INT                     0x8DF4\n#define GL_HIGH_INT                       0x8DF5\n#define GL_SHADER_COMPILER                0x8DFA\n#define GL_SHADER_BINARY_FORMATS          0x8DF8\n#define GL_NUM_SHADER_BINARY_FORMATS      0x8DF9\n#define GL_MAX_VERTEX_UNIFORM_VECTORS     0x8DFB\n#define GL_MAX_VARYING_VECTORS            0x8DFC\n#define GL_MAX_FRAGMENT_UNIFORM_VECTORS   0x8DFD\n#define GL_RGB565                         0x8D62\n#endif\n\n#ifndef GL_ARB_get_program_binary\n#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257\n#define GL_PROGRAM_BINARY_LENGTH          0x8741\n#define GL_NUM_PROGRAM_BINARY_FORMATS     0x87FE\n#define GL_PROGRAM_BINARY_FORMATS         0x87FF\n#endif\n\n#ifndef GL_ARB_separate_shader_objects\n#define GL_VERTEX_SHADER_BIT              0x00000001\n#define GL_FRAGMENT_SHADER_BIT            0x00000002\n#define GL_GEOMETRY_SHADER_BIT            0x00000004\n#define GL_TESS_CONTROL_SHADER_BIT        0x00000008\n#define GL_TESS_EVALUATION_SHADER_BIT     0x00000010\n#define GL_ALL_SHADER_BITS                0xFFFFFFFF\n#define GL_PROGRAM_SEPARABLE              0x8258\n#define GL_ACTIVE_PROGRAM                 0x8259\n#define GL_PROGRAM_PIPELINE_BINDING       0x825A\n#endif\n\n#ifndef GL_ARB_shader_precision\n#endif\n\n#ifndef GL_ARB_vertex_attrib_64bit\n/* reuse GL_RGB32I */\n/* reuse GL_DOUBLE_VEC2 */\n/* reuse GL_DOUBLE_VEC3 */\n/* reuse GL_DOUBLE_VEC4 */\n/* reuse GL_DOUBLE_MAT2 */\n/* reuse GL_DOUBLE_MAT3 */\n/* reuse GL_DOUBLE_MAT4 */\n/* reuse GL_DOUBLE_MAT2x3 */\n/* reuse GL_DOUBLE_MAT2x4 */\n/* reuse GL_DOUBLE_MAT3x2 */\n/* reuse GL_DOUBLE_MAT3x4 */\n/* reuse GL_DOUBLE_MAT4x2 */\n/* reuse GL_DOUBLE_MAT4x3 */\n#endif\n\n#ifndef GL_ARB_viewport_array\n/* reuse GL_SCISSOR_BOX */\n/* reuse GL_VIEWPORT */\n/* reuse GL_DEPTH_RANGE */\n/* reuse GL_SCISSOR_TEST */\n#define GL_MAX_VIEWPORTS                  0x825B\n#define GL_VIEWPORT_SUBPIXEL_BITS         0x825C\n#define GL_VIEWPORT_BOUNDS_RANGE          0x825D\n#define GL_LAYER_PROVOKING_VERTEX         0x825E\n#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F\n#define GL_UNDEFINED_VERTEX               0x8260\n/* reuse GL_FIRST_VERTEX_CONVENTION */\n/* reuse GL_LAST_VERTEX_CONVENTION */\n/* reuse GL_PROVOKING_VERTEX */\n#endif\n\n#ifndef GL_ARB_cl_event\n#define GL_SYNC_CL_EVENT_ARB              0x8240\n#define GL_SYNC_CL_EVENT_COMPLETE_ARB     0x8241\n#endif\n\n#ifndef GL_ARB_debug_output\n#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB   0x8242\n#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243\n#define GL_DEBUG_CALLBACK_FUNCTION_ARB    0x8244\n#define GL_DEBUG_CALLBACK_USER_PARAM_ARB  0x8245\n#define GL_DEBUG_SOURCE_API_ARB           0x8246\n#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247\n#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248\n#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB   0x8249\n#define GL_DEBUG_SOURCE_APPLICATION_ARB   0x824A\n#define GL_DEBUG_SOURCE_OTHER_ARB         0x824B\n#define GL_DEBUG_TYPE_ERROR_ARB           0x824C\n#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D\n#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E\n#define GL_DEBUG_TYPE_PORTABILITY_ARB     0x824F\n#define GL_DEBUG_TYPE_PERFORMANCE_ARB     0x8250\n#define GL_DEBUG_TYPE_OTHER_ARB           0x8251\n#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB   0x9143\n#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB  0x9144\n#define GL_DEBUG_LOGGED_MESSAGES_ARB      0x9145\n#define GL_DEBUG_SEVERITY_HIGH_ARB        0x9146\n#define GL_DEBUG_SEVERITY_MEDIUM_ARB      0x9147\n#define GL_DEBUG_SEVERITY_LOW_ARB         0x9148\n#endif\n\n#ifndef GL_ARB_robustness\n/* reuse GL_NO_ERROR */\n#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004\n#define GL_LOSE_CONTEXT_ON_RESET_ARB      0x8252\n#define GL_GUILTY_CONTEXT_RESET_ARB       0x8253\n#define GL_INNOCENT_CONTEXT_RESET_ARB     0x8254\n#define GL_UNKNOWN_CONTEXT_RESET_ARB      0x8255\n#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256\n#define GL_NO_RESET_NOTIFICATION_ARB      0x8261\n#endif\n\n#ifndef GL_ARB_shader_stencil_export\n#endif\n\n#ifndef GL_ARB_base_instance\n#endif\n\n#ifndef GL_ARB_shading_language_420pack\n#endif\n\n#ifndef GL_ARB_transform_feedback_instanced\n#endif\n\n#ifndef GL_ARB_compressed_texture_pixel_storage\n#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH  0x9127\n#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128\n#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH  0x9129\n#define GL_UNPACK_COMPRESSED_BLOCK_SIZE   0x912A\n#define GL_PACK_COMPRESSED_BLOCK_WIDTH    0x912B\n#define GL_PACK_COMPRESSED_BLOCK_HEIGHT   0x912C\n#define GL_PACK_COMPRESSED_BLOCK_DEPTH    0x912D\n#define GL_PACK_COMPRESSED_BLOCK_SIZE     0x912E\n#endif\n\n#ifndef GL_ARB_conservative_depth\n#endif\n\n#ifndef GL_ARB_internalformat_query\n#define GL_NUM_SAMPLE_COUNTS              0x9380\n#endif\n\n#ifndef GL_ARB_map_buffer_alignment\n#define GL_MIN_MAP_BUFFER_ALIGNMENT       0x90BC\n#endif\n\n#ifndef GL_ARB_shader_atomic_counters\n#define GL_ATOMIC_COUNTER_BUFFER          0x92C0\n#define GL_ATOMIC_COUNTER_BUFFER_BINDING  0x92C1\n#define GL_ATOMIC_COUNTER_BUFFER_START    0x92C2\n#define GL_ATOMIC_COUNTER_BUFFER_SIZE     0x92C3\n#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4\n#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5\n#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6\n#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7\n#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8\n#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9\n#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA\n#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB\n#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC\n#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD\n#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE\n#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF\n#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0\n#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1\n#define GL_MAX_VERTEX_ATOMIC_COUNTERS     0x92D2\n#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3\n#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4\n#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS   0x92D5\n#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS   0x92D6\n#define GL_MAX_COMBINED_ATOMIC_COUNTERS   0x92D7\n#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8\n#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC\n#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS  0x92D9\n#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA\n#define GL_UNSIGNED_INT_ATOMIC_COUNTER    0x92DB\n#endif\n\n#ifndef GL_ARB_shader_image_load_store\n#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001\n#define GL_ELEMENT_ARRAY_BARRIER_BIT      0x00000002\n#define GL_UNIFORM_BARRIER_BIT            0x00000004\n#define GL_TEXTURE_FETCH_BARRIER_BIT      0x00000008\n#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020\n#define GL_COMMAND_BARRIER_BIT            0x00000040\n#define GL_PIXEL_BUFFER_BARRIER_BIT       0x00000080\n#define GL_TEXTURE_UPDATE_BARRIER_BIT     0x00000100\n#define GL_BUFFER_UPDATE_BARRIER_BIT      0x00000200\n#define GL_FRAMEBUFFER_BARRIER_BIT        0x00000400\n#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800\n#define GL_ATOMIC_COUNTER_BARRIER_BIT     0x00001000\n#define GL_ALL_BARRIER_BITS               0xFFFFFFFF\n#define GL_MAX_IMAGE_UNITS                0x8F38\n#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39\n#define GL_IMAGE_BINDING_NAME             0x8F3A\n#define GL_IMAGE_BINDING_LEVEL            0x8F3B\n#define GL_IMAGE_BINDING_LAYERED          0x8F3C\n#define GL_IMAGE_BINDING_LAYER            0x8F3D\n#define GL_IMAGE_BINDING_ACCESS           0x8F3E\n#define GL_IMAGE_1D                       0x904C\n#define GL_IMAGE_2D                       0x904D\n#define GL_IMAGE_3D                       0x904E\n#define GL_IMAGE_2D_RECT                  0x904F\n#define GL_IMAGE_CUBE                     0x9050\n#define GL_IMAGE_BUFFER                   0x9051\n#define GL_IMAGE_1D_ARRAY                 0x9052\n#define GL_IMAGE_2D_ARRAY                 0x9053\n#define GL_IMAGE_CUBE_MAP_ARRAY           0x9054\n#define GL_IMAGE_2D_MULTISAMPLE           0x9055\n#define GL_IMAGE_2D_MULTISAMPLE_ARRAY     0x9056\n#define GL_INT_IMAGE_1D                   0x9057\n#define GL_INT_IMAGE_2D                   0x9058\n#define GL_INT_IMAGE_3D                   0x9059\n#define GL_INT_IMAGE_2D_RECT              0x905A\n#define GL_INT_IMAGE_CUBE                 0x905B\n#define GL_INT_IMAGE_BUFFER               0x905C\n#define GL_INT_IMAGE_1D_ARRAY             0x905D\n#define GL_INT_IMAGE_2D_ARRAY             0x905E\n#define GL_INT_IMAGE_CUBE_MAP_ARRAY       0x905F\n#define GL_INT_IMAGE_2D_MULTISAMPLE       0x9060\n#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061\n#define GL_UNSIGNED_INT_IMAGE_1D          0x9062\n#define GL_UNSIGNED_INT_IMAGE_2D          0x9063\n#define GL_UNSIGNED_INT_IMAGE_3D          0x9064\n#define GL_UNSIGNED_INT_IMAGE_2D_RECT     0x9065\n#define GL_UNSIGNED_INT_IMAGE_CUBE        0x9066\n#define GL_UNSIGNED_INT_IMAGE_BUFFER      0x9067\n#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY    0x9068\n#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY    0x9069\n#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A\n#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B\n#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C\n#define GL_MAX_IMAGE_SAMPLES              0x906D\n#define GL_IMAGE_BINDING_FORMAT           0x906E\n#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7\n#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8\n#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9\n#define GL_MAX_VERTEX_IMAGE_UNIFORMS      0x90CA\n#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB\n#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC\n#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS    0x90CD\n#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS    0x90CE\n#define GL_MAX_COMBINED_IMAGE_UNIFORMS    0x90CF\n#endif\n\n#ifndef GL_ARB_shading_language_packing\n#endif\n\n#ifndef GL_ARB_texture_storage\n#define GL_TEXTURE_IMMUTABLE_FORMAT       0x912F\n#endif\n\n#ifndef GL_KHR_texture_compression_astc_ldr\n#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR   0x93B0\n#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR   0x93B1\n#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR   0x93B2\n#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR   0x93B3\n#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR   0x93B4\n#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR   0x93B5\n#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR   0x93B6\n#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR   0x93B7\n#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR  0x93B8\n#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR  0x93B9\n#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR  0x93BA\n#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB\n#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC\n#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD\n#endif\n\n#ifndef GL_KHR_debug\n#define GL_DEBUG_OUTPUT_SYNCHRONOUS       0x8242\n#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243\n#define GL_DEBUG_CALLBACK_FUNCTION        0x8244\n#define GL_DEBUG_CALLBACK_USER_PARAM      0x8245\n#define GL_DEBUG_SOURCE_API               0x8246\n#define GL_DEBUG_SOURCE_WINDOW_SYSTEM     0x8247\n#define GL_DEBUG_SOURCE_SHADER_COMPILER   0x8248\n#define GL_DEBUG_SOURCE_THIRD_PARTY       0x8249\n#define GL_DEBUG_SOURCE_APPLICATION       0x824A\n#define GL_DEBUG_SOURCE_OTHER             0x824B\n#define GL_DEBUG_TYPE_ERROR               0x824C\n#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D\n#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR  0x824E\n#define GL_DEBUG_TYPE_PORTABILITY         0x824F\n#define GL_DEBUG_TYPE_PERFORMANCE         0x8250\n#define GL_DEBUG_TYPE_OTHER               0x8251\n#define GL_DEBUG_TYPE_MARKER              0x8268\n#define GL_DEBUG_TYPE_PUSH_GROUP          0x8269\n#define GL_DEBUG_TYPE_POP_GROUP           0x826A\n#define GL_DEBUG_SEVERITY_NOTIFICATION    0x826B\n#define GL_MAX_DEBUG_GROUP_STACK_DEPTH    0x826C\n#define GL_DEBUG_GROUP_STACK_DEPTH        0x826D\n#define GL_BUFFER                         0x82E0\n#define GL_SHADER                         0x82E1\n#define GL_PROGRAM                        0x82E2\n#define GL_QUERY                          0x82E3\n#define GL_PROGRAM_PIPELINE               0x82E4\n#define GL_SAMPLER                        0x82E6\n#define GL_DISPLAY_LIST                   0x82E7\n/* DISPLAY_LIST used in compatibility profile only */\n#define GL_MAX_LABEL_LENGTH               0x82E8\n#define GL_MAX_DEBUG_MESSAGE_LENGTH       0x9143\n#define GL_MAX_DEBUG_LOGGED_MESSAGES      0x9144\n#define GL_DEBUG_LOGGED_MESSAGES          0x9145\n#define GL_DEBUG_SEVERITY_HIGH            0x9146\n#define GL_DEBUG_SEVERITY_MEDIUM          0x9147\n#define GL_DEBUG_SEVERITY_LOW             0x9148\n#define GL_DEBUG_OUTPUT                   0x92E0\n#define GL_CONTEXT_FLAG_DEBUG_BIT         0x00000002\n/* reuse GL_STACK_UNDERFLOW */\n/* reuse GL_STACK_OVERFLOW */\n#endif\n\n#ifndef GL_ARB_arrays_of_arrays\n#endif\n\n#ifndef GL_ARB_clear_buffer_object\n#endif\n\n#ifndef GL_ARB_compute_shader\n#define GL_COMPUTE_SHADER                 0x91B9\n#define GL_MAX_COMPUTE_UNIFORM_BLOCKS     0x91BB\n#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC\n#define GL_MAX_COMPUTE_IMAGE_UNIFORMS     0x91BD\n#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262\n#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263\n#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264\n#define GL_MAX_COMPUTE_ATOMIC_COUNTERS    0x8265\n#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266\n#define GL_MAX_COMPUTE_LOCAL_INVOCATIONS  0x90EB\n#define GL_MAX_COMPUTE_WORK_GROUP_COUNT   0x91BE\n#define GL_MAX_COMPUTE_WORK_GROUP_SIZE    0x91BF\n#define GL_COMPUTE_LOCAL_WORK_SIZE        0x8267\n#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC\n#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED\n#define GL_DISPATCH_INDIRECT_BUFFER       0x90EE\n#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF\n#define GL_COMPUTE_SHADER_BIT             0x00000020\n#endif\n\n#ifndef GL_ARB_copy_image\n#endif\n\n#ifndef GL_ARB_texture_view\n#define GL_TEXTURE_VIEW_MIN_LEVEL         0x82DB\n#define GL_TEXTURE_VIEW_NUM_LEVELS        0x82DC\n#define GL_TEXTURE_VIEW_MIN_LAYER         0x82DD\n#define GL_TEXTURE_VIEW_NUM_LAYERS        0x82DE\n#define GL_TEXTURE_IMMUTABLE_LEVELS       0x82DF\n#endif\n\n#ifndef GL_ARB_vertex_attrib_binding\n#define GL_VERTEX_ATTRIB_BINDING          0x82D4\n#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET  0x82D5\n#define GL_VERTEX_BINDING_DIVISOR         0x82D6\n#define GL_VERTEX_BINDING_OFFSET          0x82D7\n#define GL_VERTEX_BINDING_STRIDE          0x82D8\n#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9\n#define GL_MAX_VERTEX_ATTRIB_BINDINGS     0x82DA\n#endif\n\n#ifndef GL_ARB_robustness_isolation\n#endif\n\n#ifndef GL_ARB_ES3_compatibility\n#define GL_COMPRESSED_RGB8_ETC2           0x9274\n#define GL_COMPRESSED_SRGB8_ETC2          0x9275\n#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276\n#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277\n#define GL_COMPRESSED_RGBA8_ETC2_EAC      0x9278\n#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279\n#define GL_COMPRESSED_R11_EAC             0x9270\n#define GL_COMPRESSED_SIGNED_R11_EAC      0x9271\n#define GL_COMPRESSED_RG11_EAC            0x9272\n#define GL_COMPRESSED_SIGNED_RG11_EAC     0x9273\n#define GL_PRIMITIVE_RESTART_FIXED_INDEX  0x8D69\n#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A\n#define GL_MAX_ELEMENT_INDEX              0x8D6B\n#endif\n\n#ifndef GL_ARB_explicit_uniform_location\n#define GL_MAX_UNIFORM_LOCATIONS          0x826E\n#endif\n\n#ifndef GL_ARB_fragment_layer_viewport\n#endif\n\n#ifndef GL_ARB_framebuffer_no_attachments\n#define GL_FRAMEBUFFER_DEFAULT_WIDTH      0x9310\n#define GL_FRAMEBUFFER_DEFAULT_HEIGHT     0x9311\n#define GL_FRAMEBUFFER_DEFAULT_LAYERS     0x9312\n#define GL_FRAMEBUFFER_DEFAULT_SAMPLES    0x9313\n#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314\n#define GL_MAX_FRAMEBUFFER_WIDTH          0x9315\n#define GL_MAX_FRAMEBUFFER_HEIGHT         0x9316\n#define GL_MAX_FRAMEBUFFER_LAYERS         0x9317\n#define GL_MAX_FRAMEBUFFER_SAMPLES        0x9318\n#endif\n\n#ifndef GL_ARB_internalformat_query2\n/* reuse GL_IMAGE_FORMAT_COMPATIBILITY_TYPE */\n/* reuse GL_NUM_SAMPLE_COUNTS */\n/* reuse GL_RENDERBUFFER */\n/* reuse GL_SAMPLES */\n/* reuse GL_TEXTURE_1D */\n/* reuse GL_TEXTURE_1D_ARRAY */\n/* reuse GL_TEXTURE_2D */\n/* reuse GL_TEXTURE_2D_ARRAY */\n/* reuse GL_TEXTURE_3D */\n/* reuse GL_TEXTURE_CUBE_MAP */\n/* reuse GL_TEXTURE_CUBE_MAP_ARRAY */\n/* reuse GL_TEXTURE_RECTANGLE */\n/* reuse GL_TEXTURE_BUFFER */\n/* reuse GL_TEXTURE_2D_MULTISAMPLE */\n/* reuse GL_TEXTURE_2D_MULTISAMPLE_ARRAY */\n/* reuse GL_TEXTURE_COMPRESSED */\n#define GL_INTERNALFORMAT_SUPPORTED       0x826F\n#define GL_INTERNALFORMAT_PREFERRED       0x8270\n#define GL_INTERNALFORMAT_RED_SIZE        0x8271\n#define GL_INTERNALFORMAT_GREEN_SIZE      0x8272\n#define GL_INTERNALFORMAT_BLUE_SIZE       0x8273\n#define GL_INTERNALFORMAT_ALPHA_SIZE      0x8274\n#define GL_INTERNALFORMAT_DEPTH_SIZE      0x8275\n#define GL_INTERNALFORMAT_STENCIL_SIZE    0x8276\n#define GL_INTERNALFORMAT_SHARED_SIZE     0x8277\n#define GL_INTERNALFORMAT_RED_TYPE        0x8278\n#define GL_INTERNALFORMAT_GREEN_TYPE      0x8279\n#define GL_INTERNALFORMAT_BLUE_TYPE       0x827A\n#define GL_INTERNALFORMAT_ALPHA_TYPE      0x827B\n#define GL_INTERNALFORMAT_DEPTH_TYPE      0x827C\n#define GL_INTERNALFORMAT_STENCIL_TYPE    0x827D\n#define GL_MAX_WIDTH                      0x827E\n#define GL_MAX_HEIGHT                     0x827F\n#define GL_MAX_DEPTH                      0x8280\n#define GL_MAX_LAYERS                     0x8281\n#define GL_MAX_COMBINED_DIMENSIONS        0x8282\n#define GL_COLOR_COMPONENTS               0x8283\n#define GL_DEPTH_COMPONENTS               0x8284\n#define GL_STENCIL_COMPONENTS             0x8285\n#define GL_COLOR_RENDERABLE               0x8286\n#define GL_DEPTH_RENDERABLE               0x8287\n#define GL_STENCIL_RENDERABLE             0x8288\n#define GL_FRAMEBUFFER_RENDERABLE         0x8289\n#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A\n#define GL_FRAMEBUFFER_BLEND              0x828B\n#define GL_READ_PIXELS                    0x828C\n#define GL_READ_PIXELS_FORMAT             0x828D\n#define GL_READ_PIXELS_TYPE               0x828E\n#define GL_TEXTURE_IMAGE_FORMAT           0x828F\n#define GL_TEXTURE_IMAGE_TYPE             0x8290\n#define GL_GET_TEXTURE_IMAGE_FORMAT       0x8291\n#define GL_GET_TEXTURE_IMAGE_TYPE         0x8292\n#define GL_MIPMAP                         0x8293\n#define GL_MANUAL_GENERATE_MIPMAP         0x8294\n#define GL_AUTO_GENERATE_MIPMAP           0x8295\n#define GL_COLOR_ENCODING                 0x8296\n#define GL_SRGB_READ                      0x8297\n#define GL_SRGB_WRITE                     0x8298\n#define GL_SRGB_DECODE_ARB                0x8299\n#define GL_FILTER                         0x829A\n#define GL_VERTEX_TEXTURE                 0x829B\n#define GL_TESS_CONTROL_TEXTURE           0x829C\n#define GL_TESS_EVALUATION_TEXTURE        0x829D\n#define GL_GEOMETRY_TEXTURE               0x829E\n#define GL_FRAGMENT_TEXTURE               0x829F\n#define GL_COMPUTE_TEXTURE                0x82A0\n#define GL_TEXTURE_SHADOW                 0x82A1\n#define GL_TEXTURE_GATHER                 0x82A2\n#define GL_TEXTURE_GATHER_SHADOW          0x82A3\n#define GL_SHADER_IMAGE_LOAD              0x82A4\n#define GL_SHADER_IMAGE_STORE             0x82A5\n#define GL_SHADER_IMAGE_ATOMIC            0x82A6\n#define GL_IMAGE_TEXEL_SIZE               0x82A7\n#define GL_IMAGE_COMPATIBILITY_CLASS      0x82A8\n#define GL_IMAGE_PIXEL_FORMAT             0x82A9\n#define GL_IMAGE_PIXEL_TYPE               0x82AA\n#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC\n#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD\n#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE\n#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF\n#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1\n#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2\n#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE  0x82B3\n#define GL_CLEAR_BUFFER                   0x82B4\n#define GL_TEXTURE_VIEW                   0x82B5\n#define GL_VIEW_COMPATIBILITY_CLASS       0x82B6\n#define GL_FULL_SUPPORT                   0x82B7\n#define GL_CAVEAT_SUPPORT                 0x82B8\n#define GL_IMAGE_CLASS_4_X_32             0x82B9\n#define GL_IMAGE_CLASS_2_X_32             0x82BA\n#define GL_IMAGE_CLASS_1_X_32             0x82BB\n#define GL_IMAGE_CLASS_4_X_16             0x82BC\n#define GL_IMAGE_CLASS_2_X_16             0x82BD\n#define GL_IMAGE_CLASS_1_X_16             0x82BE\n#define GL_IMAGE_CLASS_4_X_8              0x82BF\n#define GL_IMAGE_CLASS_2_X_8              0x82C0\n#define GL_IMAGE_CLASS_1_X_8              0x82C1\n#define GL_IMAGE_CLASS_11_11_10           0x82C2\n#define GL_IMAGE_CLASS_10_10_10_2         0x82C3\n#define GL_VIEW_CLASS_128_BITS            0x82C4\n#define GL_VIEW_CLASS_96_BITS             0x82C5\n#define GL_VIEW_CLASS_64_BITS             0x82C6\n#define GL_VIEW_CLASS_48_BITS             0x82C7\n#define GL_VIEW_CLASS_32_BITS             0x82C8\n#define GL_VIEW_CLASS_24_BITS             0x82C9\n#define GL_VIEW_CLASS_16_BITS             0x82CA\n#define GL_VIEW_CLASS_8_BITS              0x82CB\n#define GL_VIEW_CLASS_S3TC_DXT1_RGB       0x82CC\n#define GL_VIEW_CLASS_S3TC_DXT1_RGBA      0x82CD\n#define GL_VIEW_CLASS_S3TC_DXT3_RGBA      0x82CE\n#define GL_VIEW_CLASS_S3TC_DXT5_RGBA      0x82CF\n#define GL_VIEW_CLASS_RGTC1_RED           0x82D0\n#define GL_VIEW_CLASS_RGTC2_RG            0x82D1\n#define GL_VIEW_CLASS_BPTC_UNORM          0x82D2\n#define GL_VIEW_CLASS_BPTC_FLOAT          0x82D3\n#endif\n\n#ifndef GL_ARB_invalidate_subdata\n#endif\n\n#ifndef GL_ARB_multi_draw_indirect\n#endif\n\n#ifndef GL_ARB_program_interface_query\n#define GL_UNIFORM                        0x92E1\n#define GL_UNIFORM_BLOCK                  0x92E2\n#define GL_PROGRAM_INPUT                  0x92E3\n#define GL_PROGRAM_OUTPUT                 0x92E4\n#define GL_BUFFER_VARIABLE                0x92E5\n#define GL_SHADER_STORAGE_BLOCK           0x92E6\n/* reuse GL_ATOMIC_COUNTER_BUFFER */\n#define GL_VERTEX_SUBROUTINE              0x92E8\n#define GL_TESS_CONTROL_SUBROUTINE        0x92E9\n#define GL_TESS_EVALUATION_SUBROUTINE     0x92EA\n#define GL_GEOMETRY_SUBROUTINE            0x92EB\n#define GL_FRAGMENT_SUBROUTINE            0x92EC\n#define GL_COMPUTE_SUBROUTINE             0x92ED\n#define GL_VERTEX_SUBROUTINE_UNIFORM      0x92EE\n#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF\n#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0\n#define GL_GEOMETRY_SUBROUTINE_UNIFORM    0x92F1\n#define GL_FRAGMENT_SUBROUTINE_UNIFORM    0x92F2\n#define GL_COMPUTE_SUBROUTINE_UNIFORM     0x92F3\n#define GL_TRANSFORM_FEEDBACK_VARYING     0x92F4\n#define GL_ACTIVE_RESOURCES               0x92F5\n#define GL_MAX_NAME_LENGTH                0x92F6\n#define GL_MAX_NUM_ACTIVE_VARIABLES       0x92F7\n#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8\n#define GL_NAME_LENGTH                    0x92F9\n#define GL_TYPE                           0x92FA\n#define GL_ARRAY_SIZE                     0x92FB\n#define GL_OFFSET                         0x92FC\n#define GL_BLOCK_INDEX                    0x92FD\n#define GL_ARRAY_STRIDE                   0x92FE\n#define GL_MATRIX_STRIDE                  0x92FF\n#define GL_IS_ROW_MAJOR                   0x9300\n#define GL_ATOMIC_COUNTER_BUFFER_INDEX    0x9301\n#define GL_BUFFER_BINDING                 0x9302\n#define GL_BUFFER_DATA_SIZE               0x9303\n#define GL_NUM_ACTIVE_VARIABLES           0x9304\n#define GL_ACTIVE_VARIABLES               0x9305\n#define GL_REFERENCED_BY_VERTEX_SHADER    0x9306\n#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307\n#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308\n#define GL_REFERENCED_BY_GEOMETRY_SHADER  0x9309\n#define GL_REFERENCED_BY_FRAGMENT_SHADER  0x930A\n#define GL_REFERENCED_BY_COMPUTE_SHADER   0x930B\n#define GL_TOP_LEVEL_ARRAY_SIZE           0x930C\n#define GL_TOP_LEVEL_ARRAY_STRIDE         0x930D\n#define GL_LOCATION                       0x930E\n#define GL_LOCATION_INDEX                 0x930F\n#define GL_IS_PER_PATCH                   0x92E7\n/* reuse GL_NUM_COMPATIBLE_SUBROUTINES */\n/* reuse GL_COMPATIBLE_SUBROUTINES */\n#endif\n\n#ifndef GL_ARB_robust_buffer_access_behavior\n#endif\n\n#ifndef GL_ARB_shader_image_size\n#endif\n\n#ifndef GL_ARB_shader_storage_buffer_object\n#define GL_SHADER_STORAGE_BUFFER          0x90D2\n#define GL_SHADER_STORAGE_BUFFER_BINDING  0x90D3\n#define GL_SHADER_STORAGE_BUFFER_START    0x90D4\n#define GL_SHADER_STORAGE_BUFFER_SIZE     0x90D5\n#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6\n#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7\n#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8\n#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9\n#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA\n#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB\n#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC\n#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD\n#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE  0x90DE\n#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF\n#define GL_SHADER_STORAGE_BARRIER_BIT     0x00002000\n#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39\n/* reuse GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS */\n#endif\n\n#ifndef GL_ARB_stencil_texturing\n#define GL_DEPTH_STENCIL_TEXTURE_MODE     0x90EA\n#endif\n\n#ifndef GL_ARB_texture_buffer_range\n#define GL_TEXTURE_BUFFER_OFFSET          0x919D\n#define GL_TEXTURE_BUFFER_SIZE            0x919E\n#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F\n#endif\n\n#ifndef GL_ARB_texture_query_levels\n#endif\n\n#ifndef GL_ARB_texture_storage_multisample\n#endif\n\n#ifndef GL_EXT_abgr\n#define GL_ABGR_EXT                       0x8000\n#endif\n\n#ifndef GL_EXT_blend_color\n#define GL_CONSTANT_COLOR_EXT             0x8001\n#define GL_ONE_MINUS_CONSTANT_COLOR_EXT   0x8002\n#define GL_CONSTANT_ALPHA_EXT             0x8003\n#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT   0x8004\n#define GL_BLEND_COLOR_EXT                0x8005\n#endif\n\n#ifndef GL_EXT_polygon_offset\n#define GL_POLYGON_OFFSET_EXT             0x8037\n#define GL_POLYGON_OFFSET_FACTOR_EXT      0x8038\n#define GL_POLYGON_OFFSET_BIAS_EXT        0x8039\n#endif\n\n#ifndef GL_EXT_texture\n#define GL_ALPHA4_EXT                     0x803B\n#define GL_ALPHA8_EXT                     0x803C\n#define GL_ALPHA12_EXT                    0x803D\n#define GL_ALPHA16_EXT                    0x803E\n#define GL_LUMINANCE4_EXT                 0x803F\n#define GL_LUMINANCE8_EXT                 0x8040\n#define GL_LUMINANCE12_EXT                0x8041\n#define GL_LUMINANCE16_EXT                0x8042\n#define GL_LUMINANCE4_ALPHA4_EXT          0x8043\n#define GL_LUMINANCE6_ALPHA2_EXT          0x8044\n#define GL_LUMINANCE8_ALPHA8_EXT          0x8045\n#define GL_LUMINANCE12_ALPHA4_EXT         0x8046\n#define GL_LUMINANCE12_ALPHA12_EXT        0x8047\n#define GL_LUMINANCE16_ALPHA16_EXT        0x8048\n#define GL_INTENSITY_EXT                  0x8049\n#define GL_INTENSITY4_EXT                 0x804A\n#define GL_INTENSITY8_EXT                 0x804B\n#define GL_INTENSITY12_EXT                0x804C\n#define GL_INTENSITY16_EXT                0x804D\n#define GL_RGB2_EXT                       0x804E\n#define GL_RGB4_EXT                       0x804F\n#define GL_RGB5_EXT                       0x8050\n#define GL_RGB8_EXT                       0x8051\n#define GL_RGB10_EXT                      0x8052\n#define GL_RGB12_EXT                      0x8053\n#define GL_RGB16_EXT                      0x8054\n#define GL_RGBA2_EXT                      0x8055\n#define GL_RGBA4_EXT                      0x8056\n#define GL_RGB5_A1_EXT                    0x8057\n#define GL_RGBA8_EXT                      0x8058\n#define GL_RGB10_A2_EXT                   0x8059\n#define GL_RGBA12_EXT                     0x805A\n#define GL_RGBA16_EXT                     0x805B\n#define GL_TEXTURE_RED_SIZE_EXT           0x805C\n#define GL_TEXTURE_GREEN_SIZE_EXT         0x805D\n#define GL_TEXTURE_BLUE_SIZE_EXT          0x805E\n#define GL_TEXTURE_ALPHA_SIZE_EXT         0x805F\n#define GL_TEXTURE_LUMINANCE_SIZE_EXT     0x8060\n#define GL_TEXTURE_INTENSITY_SIZE_EXT     0x8061\n#define GL_REPLACE_EXT                    0x8062\n#define GL_PROXY_TEXTURE_1D_EXT           0x8063\n#define GL_PROXY_TEXTURE_2D_EXT           0x8064\n#define GL_TEXTURE_TOO_LARGE_EXT          0x8065\n#endif\n\n#ifndef GL_EXT_texture3D\n#define GL_PACK_SKIP_IMAGES_EXT           0x806B\n#define GL_PACK_IMAGE_HEIGHT_EXT          0x806C\n#define GL_UNPACK_SKIP_IMAGES_EXT         0x806D\n#define GL_UNPACK_IMAGE_HEIGHT_EXT        0x806E\n#define GL_TEXTURE_3D_EXT                 0x806F\n#define GL_PROXY_TEXTURE_3D_EXT           0x8070\n#define GL_TEXTURE_DEPTH_EXT              0x8071\n#define GL_TEXTURE_WRAP_R_EXT             0x8072\n#define GL_MAX_3D_TEXTURE_SIZE_EXT        0x8073\n#endif\n\n#ifndef GL_SGIS_texture_filter4\n#define GL_FILTER4_SGIS                   0x8146\n#define GL_TEXTURE_FILTER4_SIZE_SGIS      0x8147\n#endif\n\n#ifndef GL_EXT_subtexture\n#endif\n\n#ifndef GL_EXT_copy_texture\n#endif\n\n#ifndef GL_EXT_histogram\n#define GL_HISTOGRAM_EXT                  0x8024\n#define GL_PROXY_HISTOGRAM_EXT            0x8025\n#define GL_HISTOGRAM_WIDTH_EXT            0x8026\n#define GL_HISTOGRAM_FORMAT_EXT           0x8027\n#define GL_HISTOGRAM_RED_SIZE_EXT         0x8028\n#define GL_HISTOGRAM_GREEN_SIZE_EXT       0x8029\n#define GL_HISTOGRAM_BLUE_SIZE_EXT        0x802A\n#define GL_HISTOGRAM_ALPHA_SIZE_EXT       0x802B\n#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT   0x802C\n#define GL_HISTOGRAM_SINK_EXT             0x802D\n#define GL_MINMAX_EXT                     0x802E\n#define GL_MINMAX_FORMAT_EXT              0x802F\n#define GL_MINMAX_SINK_EXT                0x8030\n#define GL_TABLE_TOO_LARGE_EXT            0x8031\n#endif\n\n#ifndef GL_EXT_convolution\n#define GL_CONVOLUTION_1D_EXT             0x8010\n#define GL_CONVOLUTION_2D_EXT             0x8011\n#define GL_SEPARABLE_2D_EXT               0x8012\n#define GL_CONVOLUTION_BORDER_MODE_EXT    0x8013\n#define GL_CONVOLUTION_FILTER_SCALE_EXT   0x8014\n#define GL_CONVOLUTION_FILTER_BIAS_EXT    0x8015\n#define GL_REDUCE_EXT                     0x8016\n#define GL_CONVOLUTION_FORMAT_EXT         0x8017\n#define GL_CONVOLUTION_WIDTH_EXT          0x8018\n#define GL_CONVOLUTION_HEIGHT_EXT         0x8019\n#define GL_MAX_CONVOLUTION_WIDTH_EXT      0x801A\n#define GL_MAX_CONVOLUTION_HEIGHT_EXT     0x801B\n#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C\n#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D\n#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E\n#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F\n#define GL_POST_CONVOLUTION_RED_BIAS_EXT  0x8020\n#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021\n#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022\n#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023\n#endif\n\n#ifndef GL_SGI_color_matrix\n#define GL_COLOR_MATRIX_SGI               0x80B1\n#define GL_COLOR_MATRIX_STACK_DEPTH_SGI   0x80B2\n#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3\n#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4\n#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5\n#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6\n#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7\n#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8\n#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9\n#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA\n#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB\n#endif\n\n#ifndef GL_SGI_color_table\n#define GL_COLOR_TABLE_SGI                0x80D0\n#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1\n#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2\n#define GL_PROXY_COLOR_TABLE_SGI          0x80D3\n#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4\n#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5\n#define GL_COLOR_TABLE_SCALE_SGI          0x80D6\n#define GL_COLOR_TABLE_BIAS_SGI           0x80D7\n#define GL_COLOR_TABLE_FORMAT_SGI         0x80D8\n#define GL_COLOR_TABLE_WIDTH_SGI          0x80D9\n#define GL_COLOR_TABLE_RED_SIZE_SGI       0x80DA\n#define GL_COLOR_TABLE_GREEN_SIZE_SGI     0x80DB\n#define GL_COLOR_TABLE_BLUE_SIZE_SGI      0x80DC\n#define GL_COLOR_TABLE_ALPHA_SIZE_SGI     0x80DD\n#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE\n#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF\n#endif\n\n#ifndef GL_SGIS_pixel_texture\n#define GL_PIXEL_TEXTURE_SGIS             0x8353\n#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354\n#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355\n#define GL_PIXEL_GROUP_COLOR_SGIS         0x8356\n#endif\n\n#ifndef GL_SGIX_pixel_texture\n#define GL_PIXEL_TEX_GEN_SGIX             0x8139\n#define GL_PIXEL_TEX_GEN_MODE_SGIX        0x832B\n#endif\n\n#ifndef GL_SGIS_texture4D\n#define GL_PACK_SKIP_VOLUMES_SGIS         0x8130\n#define GL_PACK_IMAGE_DEPTH_SGIS          0x8131\n#define GL_UNPACK_SKIP_VOLUMES_SGIS       0x8132\n#define GL_UNPACK_IMAGE_DEPTH_SGIS        0x8133\n#define GL_TEXTURE_4D_SGIS                0x8134\n#define GL_PROXY_TEXTURE_4D_SGIS          0x8135\n#define GL_TEXTURE_4DSIZE_SGIS            0x8136\n#define GL_TEXTURE_WRAP_Q_SGIS            0x8137\n#define GL_MAX_4D_TEXTURE_SIZE_SGIS       0x8138\n#define GL_TEXTURE_4D_BINDING_SGIS        0x814F\n#endif\n\n#ifndef GL_SGI_texture_color_table\n#define GL_TEXTURE_COLOR_TABLE_SGI        0x80BC\n#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI  0x80BD\n#endif\n\n#ifndef GL_EXT_cmyka\n#define GL_CMYK_EXT                       0x800C\n#define GL_CMYKA_EXT                      0x800D\n#define GL_PACK_CMYK_HINT_EXT             0x800E\n#define GL_UNPACK_CMYK_HINT_EXT           0x800F\n#endif\n\n#ifndef GL_EXT_texture_object\n#define GL_TEXTURE_PRIORITY_EXT           0x8066\n#define GL_TEXTURE_RESIDENT_EXT           0x8067\n#define GL_TEXTURE_1D_BINDING_EXT         0x8068\n#define GL_TEXTURE_2D_BINDING_EXT         0x8069\n#define GL_TEXTURE_3D_BINDING_EXT         0x806A\n#endif\n\n#ifndef GL_SGIS_detail_texture\n#define GL_DETAIL_TEXTURE_2D_SGIS         0x8095\n#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096\n#define GL_LINEAR_DETAIL_SGIS             0x8097\n#define GL_LINEAR_DETAIL_ALPHA_SGIS       0x8098\n#define GL_LINEAR_DETAIL_COLOR_SGIS       0x8099\n#define GL_DETAIL_TEXTURE_LEVEL_SGIS      0x809A\n#define GL_DETAIL_TEXTURE_MODE_SGIS       0x809B\n#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C\n#endif\n\n#ifndef GL_SGIS_sharpen_texture\n#define GL_LINEAR_SHARPEN_SGIS            0x80AD\n#define GL_LINEAR_SHARPEN_ALPHA_SGIS      0x80AE\n#define GL_LINEAR_SHARPEN_COLOR_SGIS      0x80AF\n#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0\n#endif\n\n#ifndef GL_EXT_packed_pixels\n#define GL_UNSIGNED_BYTE_3_3_2_EXT        0x8032\n#define GL_UNSIGNED_SHORT_4_4_4_4_EXT     0x8033\n#define GL_UNSIGNED_SHORT_5_5_5_1_EXT     0x8034\n#define GL_UNSIGNED_INT_8_8_8_8_EXT       0x8035\n#define GL_UNSIGNED_INT_10_10_10_2_EXT    0x8036\n#endif\n\n#ifndef GL_SGIS_texture_lod\n#define GL_TEXTURE_MIN_LOD_SGIS           0x813A\n#define GL_TEXTURE_MAX_LOD_SGIS           0x813B\n#define GL_TEXTURE_BASE_LEVEL_SGIS        0x813C\n#define GL_TEXTURE_MAX_LEVEL_SGIS         0x813D\n#endif\n\n#ifndef GL_SGIS_multisample\n#define GL_MULTISAMPLE_SGIS               0x809D\n#define GL_SAMPLE_ALPHA_TO_MASK_SGIS      0x809E\n#define GL_SAMPLE_ALPHA_TO_ONE_SGIS       0x809F\n#define GL_SAMPLE_MASK_SGIS               0x80A0\n#define GL_1PASS_SGIS                     0x80A1\n#define GL_2PASS_0_SGIS                   0x80A2\n#define GL_2PASS_1_SGIS                   0x80A3\n#define GL_4PASS_0_SGIS                   0x80A4\n#define GL_4PASS_1_SGIS                   0x80A5\n#define GL_4PASS_2_SGIS                   0x80A6\n#define GL_4PASS_3_SGIS                   0x80A7\n#define GL_SAMPLE_BUFFERS_SGIS            0x80A8\n#define GL_SAMPLES_SGIS                   0x80A9\n#define GL_SAMPLE_MASK_VALUE_SGIS         0x80AA\n#define GL_SAMPLE_MASK_INVERT_SGIS        0x80AB\n#define GL_SAMPLE_PATTERN_SGIS            0x80AC\n#endif\n\n#ifndef GL_EXT_rescale_normal\n#define GL_RESCALE_NORMAL_EXT             0x803A\n#endif\n\n#ifndef GL_EXT_vertex_array\n#define GL_VERTEX_ARRAY_EXT               0x8074\n#define GL_NORMAL_ARRAY_EXT               0x8075\n#define GL_COLOR_ARRAY_EXT                0x8076\n#define GL_INDEX_ARRAY_EXT                0x8077\n#define GL_TEXTURE_COORD_ARRAY_EXT        0x8078\n#define GL_EDGE_FLAG_ARRAY_EXT            0x8079\n#define GL_VERTEX_ARRAY_SIZE_EXT          0x807A\n#define GL_VERTEX_ARRAY_TYPE_EXT          0x807B\n#define GL_VERTEX_ARRAY_STRIDE_EXT        0x807C\n#define GL_VERTEX_ARRAY_COUNT_EXT         0x807D\n#define GL_NORMAL_ARRAY_TYPE_EXT          0x807E\n#define GL_NORMAL_ARRAY_STRIDE_EXT        0x807F\n#define GL_NORMAL_ARRAY_COUNT_EXT         0x8080\n#define GL_COLOR_ARRAY_SIZE_EXT           0x8081\n#define GL_COLOR_ARRAY_TYPE_EXT           0x8082\n#define GL_COLOR_ARRAY_STRIDE_EXT         0x8083\n#define GL_COLOR_ARRAY_COUNT_EXT          0x8084\n#define GL_INDEX_ARRAY_TYPE_EXT           0x8085\n#define GL_INDEX_ARRAY_STRIDE_EXT         0x8086\n#define GL_INDEX_ARRAY_COUNT_EXT          0x8087\n#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT   0x8088\n#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT   0x8089\n#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A\n#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT  0x808B\n#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT     0x808C\n#define GL_EDGE_FLAG_ARRAY_COUNT_EXT      0x808D\n#define GL_VERTEX_ARRAY_POINTER_EXT       0x808E\n#define GL_NORMAL_ARRAY_POINTER_EXT       0x808F\n#define GL_COLOR_ARRAY_POINTER_EXT        0x8090\n#define GL_INDEX_ARRAY_POINTER_EXT        0x8091\n#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092\n#define GL_EDGE_FLAG_ARRAY_POINTER_EXT    0x8093\n#endif\n\n#ifndef GL_EXT_misc_attribute\n#endif\n\n#ifndef GL_SGIS_generate_mipmap\n#define GL_GENERATE_MIPMAP_SGIS           0x8191\n#define GL_GENERATE_MIPMAP_HINT_SGIS      0x8192\n#endif\n\n#ifndef GL_SGIX_clipmap\n#define GL_LINEAR_CLIPMAP_LINEAR_SGIX     0x8170\n#define GL_TEXTURE_CLIPMAP_CENTER_SGIX    0x8171\n#define GL_TEXTURE_CLIPMAP_FRAME_SGIX     0x8172\n#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX    0x8173\n#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174\n#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175\n#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX     0x8176\n#define GL_MAX_CLIPMAP_DEPTH_SGIX         0x8177\n#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178\n#define GL_NEAREST_CLIPMAP_NEAREST_SGIX   0x844D\n#define GL_NEAREST_CLIPMAP_LINEAR_SGIX    0x844E\n#define GL_LINEAR_CLIPMAP_NEAREST_SGIX    0x844F\n#endif\n\n#ifndef GL_SGIX_shadow\n#define GL_TEXTURE_COMPARE_SGIX           0x819A\n#define GL_TEXTURE_COMPARE_OPERATOR_SGIX  0x819B\n#define GL_TEXTURE_LEQUAL_R_SGIX          0x819C\n#define GL_TEXTURE_GEQUAL_R_SGIX          0x819D\n#endif\n\n#ifndef GL_SGIS_texture_edge_clamp\n#define GL_CLAMP_TO_EDGE_SGIS             0x812F\n#endif\n\n#ifndef GL_SGIS_texture_border_clamp\n#define GL_CLAMP_TO_BORDER_SGIS           0x812D\n#endif\n\n#ifndef GL_EXT_blend_minmax\n#define GL_FUNC_ADD_EXT                   0x8006\n#define GL_MIN_EXT                        0x8007\n#define GL_MAX_EXT                        0x8008\n#define GL_BLEND_EQUATION_EXT             0x8009\n#endif\n\n#ifndef GL_EXT_blend_subtract\n#define GL_FUNC_SUBTRACT_EXT              0x800A\n#define GL_FUNC_REVERSE_SUBTRACT_EXT      0x800B\n#endif\n\n#ifndef GL_EXT_blend_logic_op\n#endif\n\n#ifndef GL_SGIX_interlace\n#define GL_INTERLACE_SGIX                 0x8094\n#endif\n\n#ifndef GL_SGIX_pixel_tiles\n#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E\n#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F\n#define GL_PIXEL_TILE_WIDTH_SGIX          0x8140\n#define GL_PIXEL_TILE_HEIGHT_SGIX         0x8141\n#define GL_PIXEL_TILE_GRID_WIDTH_SGIX     0x8142\n#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX    0x8143\n#define GL_PIXEL_TILE_GRID_DEPTH_SGIX     0x8144\n#define GL_PIXEL_TILE_CACHE_SIZE_SGIX     0x8145\n#endif\n\n#ifndef GL_SGIS_texture_select\n#define GL_DUAL_ALPHA4_SGIS               0x8110\n#define GL_DUAL_ALPHA8_SGIS               0x8111\n#define GL_DUAL_ALPHA12_SGIS              0x8112\n#define GL_DUAL_ALPHA16_SGIS              0x8113\n#define GL_DUAL_LUMINANCE4_SGIS           0x8114\n#define GL_DUAL_LUMINANCE8_SGIS           0x8115\n#define GL_DUAL_LUMINANCE12_SGIS          0x8116\n#define GL_DUAL_LUMINANCE16_SGIS          0x8117\n#define GL_DUAL_INTENSITY4_SGIS           0x8118\n#define GL_DUAL_INTENSITY8_SGIS           0x8119\n#define GL_DUAL_INTENSITY12_SGIS          0x811A\n#define GL_DUAL_INTENSITY16_SGIS          0x811B\n#define GL_DUAL_LUMINANCE_ALPHA4_SGIS     0x811C\n#define GL_DUAL_LUMINANCE_ALPHA8_SGIS     0x811D\n#define GL_QUAD_ALPHA4_SGIS               0x811E\n#define GL_QUAD_ALPHA8_SGIS               0x811F\n#define GL_QUAD_LUMINANCE4_SGIS           0x8120\n#define GL_QUAD_LUMINANCE8_SGIS           0x8121\n#define GL_QUAD_INTENSITY4_SGIS           0x8122\n#define GL_QUAD_INTENSITY8_SGIS           0x8123\n#define GL_DUAL_TEXTURE_SELECT_SGIS       0x8124\n#define GL_QUAD_TEXTURE_SELECT_SGIS       0x8125\n#endif\n\n#ifndef GL_SGIX_sprite\n#define GL_SPRITE_SGIX                    0x8148\n#define GL_SPRITE_MODE_SGIX               0x8149\n#define GL_SPRITE_AXIS_SGIX               0x814A\n#define GL_SPRITE_TRANSLATION_SGIX        0x814B\n#define GL_SPRITE_AXIAL_SGIX              0x814C\n#define GL_SPRITE_OBJECT_ALIGNED_SGIX     0x814D\n#define GL_SPRITE_EYE_ALIGNED_SGIX        0x814E\n#endif\n\n#ifndef GL_SGIX_texture_multi_buffer\n#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E\n#endif\n\n#ifndef GL_EXT_point_parameters\n#define GL_POINT_SIZE_MIN_EXT             0x8126\n#define GL_POINT_SIZE_MAX_EXT             0x8127\n#define GL_POINT_FADE_THRESHOLD_SIZE_EXT  0x8128\n#define GL_DISTANCE_ATTENUATION_EXT       0x8129\n#endif\n\n#ifndef GL_SGIS_point_parameters\n#define GL_POINT_SIZE_MIN_SGIS            0x8126\n#define GL_POINT_SIZE_MAX_SGIS            0x8127\n#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128\n#define GL_DISTANCE_ATTENUATION_SGIS      0x8129\n#endif\n\n#ifndef GL_SGIX_instruments\n#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180\n#define GL_INSTRUMENT_MEASUREMENTS_SGIX   0x8181\n#endif\n\n#ifndef GL_SGIX_texture_scale_bias\n#define GL_POST_TEXTURE_FILTER_BIAS_SGIX  0x8179\n#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A\n#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B\n#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C\n#endif\n\n#ifndef GL_SGIX_framezoom\n#define GL_FRAMEZOOM_SGIX                 0x818B\n#define GL_FRAMEZOOM_FACTOR_SGIX          0x818C\n#define GL_MAX_FRAMEZOOM_FACTOR_SGIX      0x818D\n#endif\n\n#ifndef GL_SGIX_tag_sample_buffer\n#endif\n\n#ifndef GL_SGIX_polynomial_ffd\n#define GL_TEXTURE_DEFORMATION_BIT_SGIX   0x00000001\n#define GL_GEOMETRY_DEFORMATION_BIT_SGIX  0x00000002\n#define GL_GEOMETRY_DEFORMATION_SGIX      0x8194\n#define GL_TEXTURE_DEFORMATION_SGIX       0x8195\n#define GL_DEFORMATIONS_MASK_SGIX         0x8196\n#define GL_MAX_DEFORMATION_ORDER_SGIX     0x8197\n#endif\n\n#ifndef GL_SGIX_reference_plane\n#define GL_REFERENCE_PLANE_SGIX           0x817D\n#define GL_REFERENCE_PLANE_EQUATION_SGIX  0x817E\n#endif\n\n#ifndef GL_SGIX_flush_raster\n#endif\n\n#ifndef GL_SGIX_depth_texture\n#define GL_DEPTH_COMPONENT16_SGIX         0x81A5\n#define GL_DEPTH_COMPONENT24_SGIX         0x81A6\n#define GL_DEPTH_COMPONENT32_SGIX         0x81A7\n#endif\n\n#ifndef GL_SGIS_fog_function\n#define GL_FOG_FUNC_SGIS                  0x812A\n#define GL_FOG_FUNC_POINTS_SGIS           0x812B\n#define GL_MAX_FOG_FUNC_POINTS_SGIS       0x812C\n#endif\n\n#ifndef GL_SGIX_fog_offset\n#define GL_FOG_OFFSET_SGIX                0x8198\n#define GL_FOG_OFFSET_VALUE_SGIX          0x8199\n#endif\n\n#ifndef GL_HP_image_transform\n#define GL_IMAGE_SCALE_X_HP               0x8155\n#define GL_IMAGE_SCALE_Y_HP               0x8156\n#define GL_IMAGE_TRANSLATE_X_HP           0x8157\n#define GL_IMAGE_TRANSLATE_Y_HP           0x8158\n#define GL_IMAGE_ROTATE_ANGLE_HP          0x8159\n#define GL_IMAGE_ROTATE_ORIGIN_X_HP       0x815A\n#define GL_IMAGE_ROTATE_ORIGIN_Y_HP       0x815B\n#define GL_IMAGE_MAG_FILTER_HP            0x815C\n#define GL_IMAGE_MIN_FILTER_HP            0x815D\n#define GL_IMAGE_CUBIC_WEIGHT_HP          0x815E\n#define GL_CUBIC_HP                       0x815F\n#define GL_AVERAGE_HP                     0x8160\n#define GL_IMAGE_TRANSFORM_2D_HP          0x8161\n#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162\n#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163\n#endif\n\n#ifndef GL_HP_convolution_border_modes\n#define GL_IGNORE_BORDER_HP               0x8150\n#define GL_CONSTANT_BORDER_HP             0x8151\n#define GL_REPLICATE_BORDER_HP            0x8153\n#define GL_CONVOLUTION_BORDER_COLOR_HP    0x8154\n#endif\n\n#ifndef GL_INGR_palette_buffer\n#endif\n\n#ifndef GL_SGIX_texture_add_env\n#define GL_TEXTURE_ENV_BIAS_SGIX          0x80BE\n#endif\n\n#ifndef GL_EXT_color_subtable\n#endif\n\n#ifndef GL_PGI_vertex_hints\n#define GL_VERTEX_DATA_HINT_PGI           0x1A22A\n#define GL_VERTEX_CONSISTENT_HINT_PGI     0x1A22B\n#define GL_MATERIAL_SIDE_HINT_PGI         0x1A22C\n#define GL_MAX_VERTEX_HINT_PGI            0x1A22D\n#define GL_VERTEX23_BIT_PGI               0x00000004\n#define GL_VERTEX4_BIT_PGI                0x00000008\n#define GL_COLOR3_BIT_PGI                 0x00010000\n#define GL_COLOR4_BIT_PGI                 0x00020000\n#define GL_EDGEFLAG_BIT_PGI               0x00040000\n#define GL_INDEX_BIT_PGI                  0x00080000\n#define GL_MAT_AMBIENT_BIT_PGI            0x00100000\n#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000\n#define GL_MAT_DIFFUSE_BIT_PGI            0x00400000\n#define GL_MAT_EMISSION_BIT_PGI           0x00800000\n#define GL_MAT_COLOR_INDEXES_BIT_PGI      0x01000000\n#define GL_MAT_SHININESS_BIT_PGI          0x02000000\n#define GL_MAT_SPECULAR_BIT_PGI           0x04000000\n#define GL_NORMAL_BIT_PGI                 0x08000000\n#define GL_TEXCOORD1_BIT_PGI              0x10000000\n#define GL_TEXCOORD2_BIT_PGI              0x20000000\n#define GL_TEXCOORD3_BIT_PGI              0x40000000\n#define GL_TEXCOORD4_BIT_PGI              0x80000000\n#endif\n\n#ifndef GL_PGI_misc_hints\n#define GL_PREFER_DOUBLEBUFFER_HINT_PGI   0x1A1F8\n#define GL_CONSERVE_MEMORY_HINT_PGI       0x1A1FD\n#define GL_RECLAIM_MEMORY_HINT_PGI        0x1A1FE\n#define GL_NATIVE_GRAPHICS_HANDLE_PGI     0x1A202\n#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203\n#define GL_NATIVE_GRAPHICS_END_HINT_PGI   0x1A204\n#define GL_ALWAYS_FAST_HINT_PGI           0x1A20C\n#define GL_ALWAYS_SOFT_HINT_PGI           0x1A20D\n#define GL_ALLOW_DRAW_OBJ_HINT_PGI        0x1A20E\n#define GL_ALLOW_DRAW_WIN_HINT_PGI        0x1A20F\n#define GL_ALLOW_DRAW_FRG_HINT_PGI        0x1A210\n#define GL_ALLOW_DRAW_MEM_HINT_PGI        0x1A211\n#define GL_STRICT_DEPTHFUNC_HINT_PGI      0x1A216\n#define GL_STRICT_LIGHTING_HINT_PGI       0x1A217\n#define GL_STRICT_SCISSOR_HINT_PGI        0x1A218\n#define GL_FULL_STIPPLE_HINT_PGI          0x1A219\n#define GL_CLIP_NEAR_HINT_PGI             0x1A220\n#define GL_CLIP_FAR_HINT_PGI              0x1A221\n#define GL_WIDE_LINE_HINT_PGI             0x1A222\n#define GL_BACK_NORMALS_HINT_PGI          0x1A223\n#endif\n\n#ifndef GL_EXT_paletted_texture\n#define GL_COLOR_INDEX1_EXT               0x80E2\n#define GL_COLOR_INDEX2_EXT               0x80E3\n#define GL_COLOR_INDEX4_EXT               0x80E4\n#define GL_COLOR_INDEX8_EXT               0x80E5\n#define GL_COLOR_INDEX12_EXT              0x80E6\n#define GL_COLOR_INDEX16_EXT              0x80E7\n#define GL_TEXTURE_INDEX_SIZE_EXT         0x80ED\n#endif\n\n#ifndef GL_EXT_clip_volume_hint\n#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT  0x80F0\n#endif\n\n#ifndef GL_SGIX_list_priority\n#define GL_LIST_PRIORITY_SGIX             0x8182\n#endif\n\n#ifndef GL_SGIX_ir_instrument1\n#define GL_IR_INSTRUMENT1_SGIX            0x817F\n#endif\n\n#ifndef GL_SGIX_calligraphic_fragment\n#define GL_CALLIGRAPHIC_FRAGMENT_SGIX     0x8183\n#endif\n\n#ifndef GL_SGIX_texture_lod_bias\n#define GL_TEXTURE_LOD_BIAS_S_SGIX        0x818E\n#define GL_TEXTURE_LOD_BIAS_T_SGIX        0x818F\n#define GL_TEXTURE_LOD_BIAS_R_SGIX        0x8190\n#endif\n\n#ifndef GL_SGIX_shadow_ambient\n#define GL_SHADOW_AMBIENT_SGIX            0x80BF\n#endif\n\n#ifndef GL_EXT_index_texture\n#endif\n\n#ifndef GL_EXT_index_material\n#define GL_INDEX_MATERIAL_EXT             0x81B8\n#define GL_INDEX_MATERIAL_PARAMETER_EXT   0x81B9\n#define GL_INDEX_MATERIAL_FACE_EXT        0x81BA\n#endif\n\n#ifndef GL_EXT_index_func\n#define GL_INDEX_TEST_EXT                 0x81B5\n#define GL_INDEX_TEST_FUNC_EXT            0x81B6\n#define GL_INDEX_TEST_REF_EXT             0x81B7\n#endif\n\n#ifndef GL_EXT_index_array_formats\n#define GL_IUI_V2F_EXT                    0x81AD\n#define GL_IUI_V3F_EXT                    0x81AE\n#define GL_IUI_N3F_V2F_EXT                0x81AF\n#define GL_IUI_N3F_V3F_EXT                0x81B0\n#define GL_T2F_IUI_V2F_EXT                0x81B1\n#define GL_T2F_IUI_V3F_EXT                0x81B2\n#define GL_T2F_IUI_N3F_V2F_EXT            0x81B3\n#define GL_T2F_IUI_N3F_V3F_EXT            0x81B4\n#endif\n\n#ifndef GL_EXT_compiled_vertex_array\n#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT   0x81A8\n#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT   0x81A9\n#endif\n\n#ifndef GL_EXT_cull_vertex\n#define GL_CULL_VERTEX_EXT                0x81AA\n#define GL_CULL_VERTEX_EYE_POSITION_EXT   0x81AB\n#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC\n#endif\n\n#ifndef GL_SGIX_ycrcb\n#define GL_YCRCB_422_SGIX                 0x81BB\n#define GL_YCRCB_444_SGIX                 0x81BC\n#endif\n\n#ifndef GL_SGIX_fragment_lighting\n#define GL_FRAGMENT_LIGHTING_SGIX         0x8400\n#define GL_FRAGMENT_COLOR_MATERIAL_SGIX   0x8401\n#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402\n#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403\n#define GL_MAX_FRAGMENT_LIGHTS_SGIX       0x8404\n#define GL_MAX_ACTIVE_LIGHTS_SGIX         0x8405\n#define GL_CURRENT_RASTER_NORMAL_SGIX     0x8406\n#define GL_LIGHT_ENV_MODE_SGIX            0x8407\n#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408\n#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409\n#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A\n#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B\n#define GL_FRAGMENT_LIGHT0_SGIX           0x840C\n#define GL_FRAGMENT_LIGHT1_SGIX           0x840D\n#define GL_FRAGMENT_LIGHT2_SGIX           0x840E\n#define GL_FRAGMENT_LIGHT3_SGIX           0x840F\n#define GL_FRAGMENT_LIGHT4_SGIX           0x8410\n#define GL_FRAGMENT_LIGHT5_SGIX           0x8411\n#define GL_FRAGMENT_LIGHT6_SGIX           0x8412\n#define GL_FRAGMENT_LIGHT7_SGIX           0x8413\n#endif\n\n#ifndef GL_IBM_rasterpos_clip\n#define GL_RASTER_POSITION_UNCLIPPED_IBM  0x19262\n#endif\n\n#ifndef GL_HP_texture_lighting\n#define GL_TEXTURE_LIGHTING_MODE_HP       0x8167\n#define GL_TEXTURE_POST_SPECULAR_HP       0x8168\n#define GL_TEXTURE_PRE_SPECULAR_HP        0x8169\n#endif\n\n#ifndef GL_EXT_draw_range_elements\n#define GL_MAX_ELEMENTS_VERTICES_EXT      0x80E8\n#define GL_MAX_ELEMENTS_INDICES_EXT       0x80E9\n#endif\n\n#ifndef GL_WIN_phong_shading\n#define GL_PHONG_WIN                      0x80EA\n#define GL_PHONG_HINT_WIN                 0x80EB\n#endif\n\n#ifndef GL_WIN_specular_fog\n#define GL_FOG_SPECULAR_TEXTURE_WIN       0x80EC\n#endif\n\n#ifndef GL_EXT_light_texture\n#define GL_FRAGMENT_MATERIAL_EXT          0x8349\n#define GL_FRAGMENT_NORMAL_EXT            0x834A\n#define GL_FRAGMENT_COLOR_EXT             0x834C\n#define GL_ATTENUATION_EXT                0x834D\n#define GL_SHADOW_ATTENUATION_EXT         0x834E\n#define GL_TEXTURE_APPLICATION_MODE_EXT   0x834F\n#define GL_TEXTURE_LIGHT_EXT              0x8350\n#define GL_TEXTURE_MATERIAL_FACE_EXT      0x8351\n#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352\n/* reuse GL_FRAGMENT_DEPTH_EXT */\n#endif\n\n#ifndef GL_SGIX_blend_alpha_minmax\n#define GL_ALPHA_MIN_SGIX                 0x8320\n#define GL_ALPHA_MAX_SGIX                 0x8321\n#endif\n\n#ifndef GL_EXT_bgra\n#define GL_BGR_EXT                        0x80E0\n#define GL_BGRA_EXT                       0x80E1\n#endif\n\n#ifndef GL_SGIX_async\n#define GL_ASYNC_MARKER_SGIX              0x8329\n#endif\n\n#ifndef GL_SGIX_async_pixel\n#define GL_ASYNC_TEX_IMAGE_SGIX           0x835C\n#define GL_ASYNC_DRAW_PIXELS_SGIX         0x835D\n#define GL_ASYNC_READ_PIXELS_SGIX         0x835E\n#define GL_MAX_ASYNC_TEX_IMAGE_SGIX       0x835F\n#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX     0x8360\n#define GL_MAX_ASYNC_READ_PIXELS_SGIX     0x8361\n#endif\n\n#ifndef GL_SGIX_async_histogram\n#define GL_ASYNC_HISTOGRAM_SGIX           0x832C\n#define GL_MAX_ASYNC_HISTOGRAM_SGIX       0x832D\n#endif\n\n#ifndef GL_INTEL_texture_scissor\n#endif\n\n#ifndef GL_INTEL_parallel_arrays\n#define GL_PARALLEL_ARRAYS_INTEL          0x83F4\n#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5\n#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6\n#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7\n#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8\n#endif\n\n#ifndef GL_HP_occlusion_test\n#define GL_OCCLUSION_TEST_HP              0x8165\n#define GL_OCCLUSION_TEST_RESULT_HP       0x8166\n#endif\n\n#ifndef GL_EXT_pixel_transform\n#define GL_PIXEL_TRANSFORM_2D_EXT         0x8330\n#define GL_PIXEL_MAG_FILTER_EXT           0x8331\n#define GL_PIXEL_MIN_FILTER_EXT           0x8332\n#define GL_PIXEL_CUBIC_WEIGHT_EXT         0x8333\n#define GL_CUBIC_EXT                      0x8334\n#define GL_AVERAGE_EXT                    0x8335\n#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336\n#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337\n#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT  0x8338\n#endif\n\n#ifndef GL_EXT_pixel_transform_color_table\n#endif\n\n#ifndef GL_EXT_shared_texture_palette\n#define GL_SHARED_TEXTURE_PALETTE_EXT     0x81FB\n#endif\n\n#ifndef GL_EXT_separate_specular_color\n#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT  0x81F8\n#define GL_SINGLE_COLOR_EXT               0x81F9\n#define GL_SEPARATE_SPECULAR_COLOR_EXT    0x81FA\n#endif\n\n#ifndef GL_EXT_secondary_color\n#define GL_COLOR_SUM_EXT                  0x8458\n#define GL_CURRENT_SECONDARY_COLOR_EXT    0x8459\n#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A\n#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B\n#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C\n#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D\n#define GL_SECONDARY_COLOR_ARRAY_EXT      0x845E\n#endif\n\n#ifndef GL_EXT_texture_perturb_normal\n#define GL_PERTURB_EXT                    0x85AE\n#define GL_TEXTURE_NORMAL_EXT             0x85AF\n#endif\n\n#ifndef GL_EXT_multi_draw_arrays\n#endif\n\n#ifndef GL_EXT_fog_coord\n#define GL_FOG_COORDINATE_SOURCE_EXT      0x8450\n#define GL_FOG_COORDINATE_EXT             0x8451\n#define GL_FRAGMENT_DEPTH_EXT             0x8452\n#define GL_CURRENT_FOG_COORDINATE_EXT     0x8453\n#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT  0x8454\n#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455\n#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456\n#define GL_FOG_COORDINATE_ARRAY_EXT       0x8457\n#endif\n\n#ifndef GL_REND_screen_coordinates\n#define GL_SCREEN_COORDINATES_REND        0x8490\n#define GL_INVERTED_SCREEN_W_REND         0x8491\n#endif\n\n#ifndef GL_EXT_coordinate_frame\n#define GL_TANGENT_ARRAY_EXT              0x8439\n#define GL_BINORMAL_ARRAY_EXT             0x843A\n#define GL_CURRENT_TANGENT_EXT            0x843B\n#define GL_CURRENT_BINORMAL_EXT           0x843C\n#define GL_TANGENT_ARRAY_TYPE_EXT         0x843E\n#define GL_TANGENT_ARRAY_STRIDE_EXT       0x843F\n#define GL_BINORMAL_ARRAY_TYPE_EXT        0x8440\n#define GL_BINORMAL_ARRAY_STRIDE_EXT      0x8441\n#define GL_TANGENT_ARRAY_POINTER_EXT      0x8442\n#define GL_BINORMAL_ARRAY_POINTER_EXT     0x8443\n#define GL_MAP1_TANGENT_EXT               0x8444\n#define GL_MAP2_TANGENT_EXT               0x8445\n#define GL_MAP1_BINORMAL_EXT              0x8446\n#define GL_MAP2_BINORMAL_EXT              0x8447\n#endif\n\n#ifndef GL_EXT_texture_env_combine\n#define GL_COMBINE_EXT                    0x8570\n#define GL_COMBINE_RGB_EXT                0x8571\n#define GL_COMBINE_ALPHA_EXT              0x8572\n#define GL_RGB_SCALE_EXT                  0x8573\n#define GL_ADD_SIGNED_EXT                 0x8574\n#define GL_INTERPOLATE_EXT                0x8575\n#define GL_CONSTANT_EXT                   0x8576\n#define GL_PRIMARY_COLOR_EXT              0x8577\n#define GL_PREVIOUS_EXT                   0x8578\n#define GL_SOURCE0_RGB_EXT                0x8580\n#define GL_SOURCE1_RGB_EXT                0x8581\n#define GL_SOURCE2_RGB_EXT                0x8582\n#define GL_SOURCE0_ALPHA_EXT              0x8588\n#define GL_SOURCE1_ALPHA_EXT              0x8589\n#define GL_SOURCE2_ALPHA_EXT              0x858A\n#define GL_OPERAND0_RGB_EXT               0x8590\n#define GL_OPERAND1_RGB_EXT               0x8591\n#define GL_OPERAND2_RGB_EXT               0x8592\n#define GL_OPERAND0_ALPHA_EXT             0x8598\n#define GL_OPERAND1_ALPHA_EXT             0x8599\n#define GL_OPERAND2_ALPHA_EXT             0x859A\n#endif\n\n#ifndef GL_APPLE_specular_vector\n#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0\n#endif\n\n#ifndef GL_APPLE_transform_hint\n#define GL_TRANSFORM_HINT_APPLE           0x85B1\n#endif\n\n#ifndef GL_SUNX_constant_data\n#define GL_UNPACK_CONSTANT_DATA_SUNX      0x81D5\n#define GL_TEXTURE_CONSTANT_DATA_SUNX     0x81D6\n#endif\n\n#ifndef GL_SUN_global_alpha\n#define GL_GLOBAL_ALPHA_SUN               0x81D9\n#define GL_GLOBAL_ALPHA_FACTOR_SUN        0x81DA\n#endif\n\n#ifndef GL_SUN_triangle_list\n#define GL_RESTART_SUN                    0x0001\n#define GL_REPLACE_MIDDLE_SUN             0x0002\n#define GL_REPLACE_OLDEST_SUN             0x0003\n#define GL_TRIANGLE_LIST_SUN              0x81D7\n#define GL_REPLACEMENT_CODE_SUN           0x81D8\n#define GL_REPLACEMENT_CODE_ARRAY_SUN     0x85C0\n#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1\n#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2\n#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3\n#define GL_R1UI_V3F_SUN                   0x85C4\n#define GL_R1UI_C4UB_V3F_SUN              0x85C5\n#define GL_R1UI_C3F_V3F_SUN               0x85C6\n#define GL_R1UI_N3F_V3F_SUN               0x85C7\n#define GL_R1UI_C4F_N3F_V3F_SUN           0x85C8\n#define GL_R1UI_T2F_V3F_SUN               0x85C9\n#define GL_R1UI_T2F_N3F_V3F_SUN           0x85CA\n#define GL_R1UI_T2F_C4F_N3F_V3F_SUN       0x85CB\n#endif\n\n#ifndef GL_SUN_vertex\n#endif\n\n#ifndef GL_EXT_blend_func_separate\n#define GL_BLEND_DST_RGB_EXT              0x80C8\n#define GL_BLEND_SRC_RGB_EXT              0x80C9\n#define GL_BLEND_DST_ALPHA_EXT            0x80CA\n#define GL_BLEND_SRC_ALPHA_EXT            0x80CB\n#endif\n\n#ifndef GL_INGR_color_clamp\n#define GL_RED_MIN_CLAMP_INGR             0x8560\n#define GL_GREEN_MIN_CLAMP_INGR           0x8561\n#define GL_BLUE_MIN_CLAMP_INGR            0x8562\n#define GL_ALPHA_MIN_CLAMP_INGR           0x8563\n#define GL_RED_MAX_CLAMP_INGR             0x8564\n#define GL_GREEN_MAX_CLAMP_INGR           0x8565\n#define GL_BLUE_MAX_CLAMP_INGR            0x8566\n#define GL_ALPHA_MAX_CLAMP_INGR           0x8567\n#endif\n\n#ifndef GL_INGR_interlace_read\n#define GL_INTERLACE_READ_INGR            0x8568\n#endif\n\n#ifndef GL_EXT_stencil_wrap\n#define GL_INCR_WRAP_EXT                  0x8507\n#define GL_DECR_WRAP_EXT                  0x8508\n#endif\n\n#ifndef GL_EXT_422_pixels\n#define GL_422_EXT                        0x80CC\n#define GL_422_REV_EXT                    0x80CD\n#define GL_422_AVERAGE_EXT                0x80CE\n#define GL_422_REV_AVERAGE_EXT            0x80CF\n#endif\n\n#ifndef GL_NV_texgen_reflection\n#define GL_NORMAL_MAP_NV                  0x8511\n#define GL_REFLECTION_MAP_NV              0x8512\n#endif\n\n#ifndef GL_EXT_texture_cube_map\n#define GL_NORMAL_MAP_EXT                 0x8511\n#define GL_REFLECTION_MAP_EXT             0x8512\n#define GL_TEXTURE_CUBE_MAP_EXT           0x8513\n#define GL_TEXTURE_BINDING_CUBE_MAP_EXT   0x8514\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A\n#define GL_PROXY_TEXTURE_CUBE_MAP_EXT     0x851B\n#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT  0x851C\n#endif\n\n#ifndef GL_SUN_convolution_border_modes\n#define GL_WRAP_BORDER_SUN                0x81D4\n#endif\n\n#ifndef GL_EXT_texture_env_add\n#endif\n\n#ifndef GL_EXT_texture_lod_bias\n#define GL_MAX_TEXTURE_LOD_BIAS_EXT       0x84FD\n#define GL_TEXTURE_FILTER_CONTROL_EXT     0x8500\n#define GL_TEXTURE_LOD_BIAS_EXT           0x8501\n#endif\n\n#ifndef GL_EXT_texture_filter_anisotropic\n#define GL_TEXTURE_MAX_ANISOTROPY_EXT     0x84FE\n#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF\n#endif\n\n#ifndef GL_EXT_vertex_weighting\n#define GL_MODELVIEW0_STACK_DEPTH_EXT     0x0BA3\n#define GL_MODELVIEW1_STACK_DEPTH_EXT     0x8502\n#define GL_MODELVIEW0_MATRIX_EXT          0x0BA6\n#define GL_MODELVIEW1_MATRIX_EXT          0x8506\n#define GL_VERTEX_WEIGHTING_EXT           0x8509\n#define GL_MODELVIEW0_EXT                 0x1700\n#define GL_MODELVIEW1_EXT                 0x850A\n#define GL_CURRENT_VERTEX_WEIGHT_EXT      0x850B\n#define GL_VERTEX_WEIGHT_ARRAY_EXT        0x850C\n#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT   0x850D\n#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT   0x850E\n#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F\n#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510\n#endif\n\n#ifndef GL_NV_light_max_exponent\n#define GL_MAX_SHININESS_NV               0x8504\n#define GL_MAX_SPOT_EXPONENT_NV           0x8505\n#endif\n\n#ifndef GL_NV_vertex_array_range\n#define GL_VERTEX_ARRAY_RANGE_NV          0x851D\n#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV   0x851E\n#define GL_VERTEX_ARRAY_RANGE_VALID_NV    0x851F\n#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520\n#define GL_VERTEX_ARRAY_RANGE_POINTER_NV  0x8521\n#endif\n\n#ifndef GL_NV_register_combiners\n#define GL_REGISTER_COMBINERS_NV          0x8522\n#define GL_VARIABLE_A_NV                  0x8523\n#define GL_VARIABLE_B_NV                  0x8524\n#define GL_VARIABLE_C_NV                  0x8525\n#define GL_VARIABLE_D_NV                  0x8526\n#define GL_VARIABLE_E_NV                  0x8527\n#define GL_VARIABLE_F_NV                  0x8528\n#define GL_VARIABLE_G_NV                  0x8529\n#define GL_CONSTANT_COLOR0_NV             0x852A\n#define GL_CONSTANT_COLOR1_NV             0x852B\n#define GL_PRIMARY_COLOR_NV               0x852C\n#define GL_SECONDARY_COLOR_NV             0x852D\n#define GL_SPARE0_NV                      0x852E\n#define GL_SPARE1_NV                      0x852F\n#define GL_DISCARD_NV                     0x8530\n#define GL_E_TIMES_F_NV                   0x8531\n#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532\n#define GL_UNSIGNED_IDENTITY_NV           0x8536\n#define GL_UNSIGNED_INVERT_NV             0x8537\n#define GL_EXPAND_NORMAL_NV               0x8538\n#define GL_EXPAND_NEGATE_NV               0x8539\n#define GL_HALF_BIAS_NORMAL_NV            0x853A\n#define GL_HALF_BIAS_NEGATE_NV            0x853B\n#define GL_SIGNED_IDENTITY_NV             0x853C\n#define GL_SIGNED_NEGATE_NV               0x853D\n#define GL_SCALE_BY_TWO_NV                0x853E\n#define GL_SCALE_BY_FOUR_NV               0x853F\n#define GL_SCALE_BY_ONE_HALF_NV           0x8540\n#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV   0x8541\n#define GL_COMBINER_INPUT_NV              0x8542\n#define GL_COMBINER_MAPPING_NV            0x8543\n#define GL_COMBINER_COMPONENT_USAGE_NV    0x8544\n#define GL_COMBINER_AB_DOT_PRODUCT_NV     0x8545\n#define GL_COMBINER_CD_DOT_PRODUCT_NV     0x8546\n#define GL_COMBINER_MUX_SUM_NV            0x8547\n#define GL_COMBINER_SCALE_NV              0x8548\n#define GL_COMBINER_BIAS_NV               0x8549\n#define GL_COMBINER_AB_OUTPUT_NV          0x854A\n#define GL_COMBINER_CD_OUTPUT_NV          0x854B\n#define GL_COMBINER_SUM_OUTPUT_NV         0x854C\n#define GL_MAX_GENERAL_COMBINERS_NV       0x854D\n#define GL_NUM_GENERAL_COMBINERS_NV       0x854E\n#define GL_COLOR_SUM_CLAMP_NV             0x854F\n#define GL_COMBINER0_NV                   0x8550\n#define GL_COMBINER1_NV                   0x8551\n#define GL_COMBINER2_NV                   0x8552\n#define GL_COMBINER3_NV                   0x8553\n#define GL_COMBINER4_NV                   0x8554\n#define GL_COMBINER5_NV                   0x8555\n#define GL_COMBINER6_NV                   0x8556\n#define GL_COMBINER7_NV                   0x8557\n/* reuse GL_TEXTURE0_ARB */\n/* reuse GL_TEXTURE1_ARB */\n/* reuse GL_ZERO */\n/* reuse GL_NONE */\n/* reuse GL_FOG */\n#endif\n\n#ifndef GL_NV_fog_distance\n#define GL_FOG_DISTANCE_MODE_NV           0x855A\n#define GL_EYE_RADIAL_NV                  0x855B\n#define GL_EYE_PLANE_ABSOLUTE_NV          0x855C\n/* reuse GL_EYE_PLANE */\n#endif\n\n#ifndef GL_NV_texgen_emboss\n#define GL_EMBOSS_LIGHT_NV                0x855D\n#define GL_EMBOSS_CONSTANT_NV             0x855E\n#define GL_EMBOSS_MAP_NV                  0x855F\n#endif\n\n#ifndef GL_NV_blend_square\n#endif\n\n#ifndef GL_NV_texture_env_combine4\n#define GL_COMBINE4_NV                    0x8503\n#define GL_SOURCE3_RGB_NV                 0x8583\n#define GL_SOURCE3_ALPHA_NV               0x858B\n#define GL_OPERAND3_RGB_NV                0x8593\n#define GL_OPERAND3_ALPHA_NV              0x859B\n#endif\n\n#ifndef GL_MESA_resize_buffers\n#endif\n\n#ifndef GL_MESA_window_pos\n#endif\n\n#ifndef GL_EXT_texture_compression_s3tc\n#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT   0x83F0\n#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT  0x83F1\n#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT  0x83F2\n#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT  0x83F3\n#endif\n\n#ifndef GL_IBM_cull_vertex\n#define GL_CULL_VERTEX_IBM                103050\n#endif\n\n#ifndef GL_IBM_multimode_draw_arrays\n#endif\n\n#ifndef GL_IBM_vertex_array_lists\n#define GL_VERTEX_ARRAY_LIST_IBM          103070\n#define GL_NORMAL_ARRAY_LIST_IBM          103071\n#define GL_COLOR_ARRAY_LIST_IBM           103072\n#define GL_INDEX_ARRAY_LIST_IBM           103073\n#define GL_TEXTURE_COORD_ARRAY_LIST_IBM   103074\n#define GL_EDGE_FLAG_ARRAY_LIST_IBM       103075\n#define GL_FOG_COORDINATE_ARRAY_LIST_IBM  103076\n#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077\n#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM   103080\n#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM   103081\n#define GL_COLOR_ARRAY_LIST_STRIDE_IBM    103082\n#define GL_INDEX_ARRAY_LIST_STRIDE_IBM    103083\n#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084\n#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085\n#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086\n#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087\n#endif\n\n#ifndef GL_SGIX_subsample\n#define GL_PACK_SUBSAMPLE_RATE_SGIX       0x85A0\n#define GL_UNPACK_SUBSAMPLE_RATE_SGIX     0x85A1\n#define GL_PIXEL_SUBSAMPLE_4444_SGIX      0x85A2\n#define GL_PIXEL_SUBSAMPLE_2424_SGIX      0x85A3\n#define GL_PIXEL_SUBSAMPLE_4242_SGIX      0x85A4\n#endif\n\n#ifndef GL_SGIX_ycrcb_subsample\n#endif\n\n#ifndef GL_SGIX_ycrcba\n#define GL_YCRCB_SGIX                     0x8318\n#define GL_YCRCBA_SGIX                    0x8319\n#endif\n\n#ifndef GL_3DFX_texture_compression_FXT1\n#define GL_COMPRESSED_RGB_FXT1_3DFX       0x86B0\n#define GL_COMPRESSED_RGBA_FXT1_3DFX      0x86B1\n#endif\n\n#ifndef GL_3DFX_multisample\n#define GL_MULTISAMPLE_3DFX               0x86B2\n#define GL_SAMPLE_BUFFERS_3DFX            0x86B3\n#define GL_SAMPLES_3DFX                   0x86B4\n#define GL_MULTISAMPLE_BIT_3DFX           0x20000000\n#endif\n\n#ifndef GL_3DFX_tbuffer\n#endif\n\n#ifndef GL_EXT_multisample\n#define GL_MULTISAMPLE_EXT                0x809D\n#define GL_SAMPLE_ALPHA_TO_MASK_EXT       0x809E\n#define GL_SAMPLE_ALPHA_TO_ONE_EXT        0x809F\n#define GL_SAMPLE_MASK_EXT                0x80A0\n#define GL_1PASS_EXT                      0x80A1\n#define GL_2PASS_0_EXT                    0x80A2\n#define GL_2PASS_1_EXT                    0x80A3\n#define GL_4PASS_0_EXT                    0x80A4\n#define GL_4PASS_1_EXT                    0x80A5\n#define GL_4PASS_2_EXT                    0x80A6\n#define GL_4PASS_3_EXT                    0x80A7\n#define GL_SAMPLE_BUFFERS_EXT             0x80A8\n#define GL_SAMPLES_EXT                    0x80A9\n#define GL_SAMPLE_MASK_VALUE_EXT          0x80AA\n#define GL_SAMPLE_MASK_INVERT_EXT         0x80AB\n#define GL_SAMPLE_PATTERN_EXT             0x80AC\n#define GL_MULTISAMPLE_BIT_EXT            0x20000000\n#endif\n\n#ifndef GL_SGIX_vertex_preclip\n#define GL_VERTEX_PRECLIP_SGIX            0x83EE\n#define GL_VERTEX_PRECLIP_HINT_SGIX       0x83EF\n#endif\n\n#ifndef GL_SGIX_convolution_accuracy\n#define GL_CONVOLUTION_HINT_SGIX          0x8316\n#endif\n\n#ifndef GL_SGIX_resample\n#define GL_PACK_RESAMPLE_SGIX             0x842C\n#define GL_UNPACK_RESAMPLE_SGIX           0x842D\n#define GL_RESAMPLE_REPLICATE_SGIX        0x842E\n#define GL_RESAMPLE_ZERO_FILL_SGIX        0x842F\n#define GL_RESAMPLE_DECIMATE_SGIX         0x8430\n#endif\n\n#ifndef GL_SGIS_point_line_texgen\n#define GL_EYE_DISTANCE_TO_POINT_SGIS     0x81F0\n#define GL_OBJECT_DISTANCE_TO_POINT_SGIS  0x81F1\n#define GL_EYE_DISTANCE_TO_LINE_SGIS      0x81F2\n#define GL_OBJECT_DISTANCE_TO_LINE_SGIS   0x81F3\n#define GL_EYE_POINT_SGIS                 0x81F4\n#define GL_OBJECT_POINT_SGIS              0x81F5\n#define GL_EYE_LINE_SGIS                  0x81F6\n#define GL_OBJECT_LINE_SGIS               0x81F7\n#endif\n\n#ifndef GL_SGIS_texture_color_mask\n#define GL_TEXTURE_COLOR_WRITEMASK_SGIS   0x81EF\n#endif\n\n#ifndef GL_EXT_texture_env_dot3\n#define GL_DOT3_RGB_EXT                   0x8740\n#define GL_DOT3_RGBA_EXT                  0x8741\n#endif\n\n#ifndef GL_ATI_texture_mirror_once\n#define GL_MIRROR_CLAMP_ATI               0x8742\n#define GL_MIRROR_CLAMP_TO_EDGE_ATI       0x8743\n#endif\n\n#ifndef GL_NV_fence\n#define GL_ALL_COMPLETED_NV               0x84F2\n#define GL_FENCE_STATUS_NV                0x84F3\n#define GL_FENCE_CONDITION_NV             0x84F4\n#endif\n\n#ifndef GL_IBM_static_data\n#define GL_ALL_STATIC_DATA_IBM            103060\n#define GL_STATIC_VERTEX_ARRAY_IBM        103061\n#endif\n\n#ifndef GL_IBM_texture_mirrored_repeat\n#define GL_MIRRORED_REPEAT_IBM            0x8370\n#endif\n\n#ifndef GL_NV_evaluators\n#define GL_EVAL_2D_NV                     0x86C0\n#define GL_EVAL_TRIANGULAR_2D_NV          0x86C1\n#define GL_MAP_TESSELLATION_NV            0x86C2\n#define GL_MAP_ATTRIB_U_ORDER_NV          0x86C3\n#define GL_MAP_ATTRIB_V_ORDER_NV          0x86C4\n#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5\n#define GL_EVAL_VERTEX_ATTRIB0_NV         0x86C6\n#define GL_EVAL_VERTEX_ATTRIB1_NV         0x86C7\n#define GL_EVAL_VERTEX_ATTRIB2_NV         0x86C8\n#define GL_EVAL_VERTEX_ATTRIB3_NV         0x86C9\n#define GL_EVAL_VERTEX_ATTRIB4_NV         0x86CA\n#define GL_EVAL_VERTEX_ATTRIB5_NV         0x86CB\n#define GL_EVAL_VERTEX_ATTRIB6_NV         0x86CC\n#define GL_EVAL_VERTEX_ATTRIB7_NV         0x86CD\n#define GL_EVAL_VERTEX_ATTRIB8_NV         0x86CE\n#define GL_EVAL_VERTEX_ATTRIB9_NV         0x86CF\n#define GL_EVAL_VERTEX_ATTRIB10_NV        0x86D0\n#define GL_EVAL_VERTEX_ATTRIB11_NV        0x86D1\n#define GL_EVAL_VERTEX_ATTRIB12_NV        0x86D2\n#define GL_EVAL_VERTEX_ATTRIB13_NV        0x86D3\n#define GL_EVAL_VERTEX_ATTRIB14_NV        0x86D4\n#define GL_EVAL_VERTEX_ATTRIB15_NV        0x86D5\n#define GL_MAX_MAP_TESSELLATION_NV        0x86D6\n#define GL_MAX_RATIONAL_EVAL_ORDER_NV     0x86D7\n#endif\n\n#ifndef GL_NV_packed_depth_stencil\n#define GL_DEPTH_STENCIL_NV               0x84F9\n#define GL_UNSIGNED_INT_24_8_NV           0x84FA\n#endif\n\n#ifndef GL_NV_register_combiners2\n#define GL_PER_STAGE_CONSTANTS_NV         0x8535\n#endif\n\n#ifndef GL_NV_texture_compression_vtc\n#endif\n\n#ifndef GL_NV_texture_rectangle\n#define GL_TEXTURE_RECTANGLE_NV           0x84F5\n#define GL_TEXTURE_BINDING_RECTANGLE_NV   0x84F6\n#define GL_PROXY_TEXTURE_RECTANGLE_NV     0x84F7\n#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV  0x84F8\n#endif\n\n#ifndef GL_NV_texture_shader\n#define GL_OFFSET_TEXTURE_RECTANGLE_NV    0x864C\n#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D\n#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E\n#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9\n#define GL_UNSIGNED_INT_S8_S8_8_8_NV      0x86DA\n#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV  0x86DB\n#define GL_DSDT_MAG_INTENSITY_NV          0x86DC\n#define GL_SHADER_CONSISTENT_NV           0x86DD\n#define GL_TEXTURE_SHADER_NV              0x86DE\n#define GL_SHADER_OPERATION_NV            0x86DF\n#define GL_CULL_MODES_NV                  0x86E0\n#define GL_OFFSET_TEXTURE_MATRIX_NV       0x86E1\n#define GL_OFFSET_TEXTURE_2D_MATRIX_NV    0x86E1\n#define GL_OFFSET_TEXTURE_SCALE_NV        0x86E2\n#define GL_OFFSET_TEXTURE_2D_SCALE_NV     0x86E2\n#define GL_OFFSET_TEXTURE_BIAS_NV         0x86E3\n#define GL_OFFSET_TEXTURE_2D_BIAS_NV      0x86E3\n#define GL_PREVIOUS_TEXTURE_INPUT_NV      0x86E4\n#define GL_CONST_EYE_NV                   0x86E5\n#define GL_PASS_THROUGH_NV                0x86E6\n#define GL_CULL_FRAGMENT_NV               0x86E7\n#define GL_OFFSET_TEXTURE_2D_NV           0x86E8\n#define GL_DEPENDENT_AR_TEXTURE_2D_NV     0x86E9\n#define GL_DEPENDENT_GB_TEXTURE_2D_NV     0x86EA\n#define GL_DOT_PRODUCT_NV                 0x86EC\n#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV   0x86ED\n#define GL_DOT_PRODUCT_TEXTURE_2D_NV      0x86EE\n#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0\n#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1\n#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2\n#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3\n#define GL_HILO_NV                        0x86F4\n#define GL_DSDT_NV                        0x86F5\n#define GL_DSDT_MAG_NV                    0x86F6\n#define GL_DSDT_MAG_VIB_NV                0x86F7\n#define GL_HILO16_NV                      0x86F8\n#define GL_SIGNED_HILO_NV                 0x86F9\n#define GL_SIGNED_HILO16_NV               0x86FA\n#define GL_SIGNED_RGBA_NV                 0x86FB\n#define GL_SIGNED_RGBA8_NV                0x86FC\n#define GL_SIGNED_RGB_NV                  0x86FE\n#define GL_SIGNED_RGB8_NV                 0x86FF\n#define GL_SIGNED_LUMINANCE_NV            0x8701\n#define GL_SIGNED_LUMINANCE8_NV           0x8702\n#define GL_SIGNED_LUMINANCE_ALPHA_NV      0x8703\n#define GL_SIGNED_LUMINANCE8_ALPHA8_NV    0x8704\n#define GL_SIGNED_ALPHA_NV                0x8705\n#define GL_SIGNED_ALPHA8_NV               0x8706\n#define GL_SIGNED_INTENSITY_NV            0x8707\n#define GL_SIGNED_INTENSITY8_NV           0x8708\n#define GL_DSDT8_NV                       0x8709\n#define GL_DSDT8_MAG8_NV                  0x870A\n#define GL_DSDT8_MAG8_INTENSITY8_NV       0x870B\n#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV   0x870C\n#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D\n#define GL_HI_SCALE_NV                    0x870E\n#define GL_LO_SCALE_NV                    0x870F\n#define GL_DS_SCALE_NV                    0x8710\n#define GL_DT_SCALE_NV                    0x8711\n#define GL_MAGNITUDE_SCALE_NV             0x8712\n#define GL_VIBRANCE_SCALE_NV              0x8713\n#define GL_HI_BIAS_NV                     0x8714\n#define GL_LO_BIAS_NV                     0x8715\n#define GL_DS_BIAS_NV                     0x8716\n#define GL_DT_BIAS_NV                     0x8717\n#define GL_MAGNITUDE_BIAS_NV              0x8718\n#define GL_VIBRANCE_BIAS_NV               0x8719\n#define GL_TEXTURE_BORDER_VALUES_NV       0x871A\n#define GL_TEXTURE_HI_SIZE_NV             0x871B\n#define GL_TEXTURE_LO_SIZE_NV             0x871C\n#define GL_TEXTURE_DS_SIZE_NV             0x871D\n#define GL_TEXTURE_DT_SIZE_NV             0x871E\n#define GL_TEXTURE_MAG_SIZE_NV            0x871F\n#endif\n\n#ifndef GL_NV_texture_shader2\n#define GL_DOT_PRODUCT_TEXTURE_3D_NV      0x86EF\n#endif\n\n#ifndef GL_NV_vertex_array_range2\n#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533\n#endif\n\n#ifndef GL_NV_vertex_program\n#define GL_VERTEX_PROGRAM_NV              0x8620\n#define GL_VERTEX_STATE_PROGRAM_NV        0x8621\n#define GL_ATTRIB_ARRAY_SIZE_NV           0x8623\n#define GL_ATTRIB_ARRAY_STRIDE_NV         0x8624\n#define GL_ATTRIB_ARRAY_TYPE_NV           0x8625\n#define GL_CURRENT_ATTRIB_NV              0x8626\n#define GL_PROGRAM_LENGTH_NV              0x8627\n#define GL_PROGRAM_STRING_NV              0x8628\n#define GL_MODELVIEW_PROJECTION_NV        0x8629\n#define GL_IDENTITY_NV                    0x862A\n#define GL_INVERSE_NV                     0x862B\n#define GL_TRANSPOSE_NV                   0x862C\n#define GL_INVERSE_TRANSPOSE_NV           0x862D\n#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E\n#define GL_MAX_TRACK_MATRICES_NV          0x862F\n#define GL_MATRIX0_NV                     0x8630\n#define GL_MATRIX1_NV                     0x8631\n#define GL_MATRIX2_NV                     0x8632\n#define GL_MATRIX3_NV                     0x8633\n#define GL_MATRIX4_NV                     0x8634\n#define GL_MATRIX5_NV                     0x8635\n#define GL_MATRIX6_NV                     0x8636\n#define GL_MATRIX7_NV                     0x8637\n#define GL_CURRENT_MATRIX_STACK_DEPTH_NV  0x8640\n#define GL_CURRENT_MATRIX_NV              0x8641\n#define GL_VERTEX_PROGRAM_POINT_SIZE_NV   0x8642\n#define GL_VERTEX_PROGRAM_TWO_SIDE_NV     0x8643\n#define GL_PROGRAM_PARAMETER_NV           0x8644\n#define GL_ATTRIB_ARRAY_POINTER_NV        0x8645\n#define GL_PROGRAM_TARGET_NV              0x8646\n#define GL_PROGRAM_RESIDENT_NV            0x8647\n#define GL_TRACK_MATRIX_NV                0x8648\n#define GL_TRACK_MATRIX_TRANSFORM_NV      0x8649\n#define GL_VERTEX_PROGRAM_BINDING_NV      0x864A\n#define GL_PROGRAM_ERROR_POSITION_NV      0x864B\n#define GL_VERTEX_ATTRIB_ARRAY0_NV        0x8650\n#define GL_VERTEX_ATTRIB_ARRAY1_NV        0x8651\n#define GL_VERTEX_ATTRIB_ARRAY2_NV        0x8652\n#define GL_VERTEX_ATTRIB_ARRAY3_NV        0x8653\n#define GL_VERTEX_ATTRIB_ARRAY4_NV        0x8654\n#define GL_VERTEX_ATTRIB_ARRAY5_NV        0x8655\n#define GL_VERTEX_ATTRIB_ARRAY6_NV        0x8656\n#define GL_VERTEX_ATTRIB_ARRAY7_NV        0x8657\n#define GL_VERTEX_ATTRIB_ARRAY8_NV        0x8658\n#define GL_VERTEX_ATTRIB_ARRAY9_NV        0x8659\n#define GL_VERTEX_ATTRIB_ARRAY10_NV       0x865A\n#define GL_VERTEX_ATTRIB_ARRAY11_NV       0x865B\n#define GL_VERTEX_ATTRIB_ARRAY12_NV       0x865C\n#define GL_VERTEX_ATTRIB_ARRAY13_NV       0x865D\n#define GL_VERTEX_ATTRIB_ARRAY14_NV       0x865E\n#define GL_VERTEX_ATTRIB_ARRAY15_NV       0x865F\n#define GL_MAP1_VERTEX_ATTRIB0_4_NV       0x8660\n#define GL_MAP1_VERTEX_ATTRIB1_4_NV       0x8661\n#define GL_MAP1_VERTEX_ATTRIB2_4_NV       0x8662\n#define GL_MAP1_VERTEX_ATTRIB3_4_NV       0x8663\n#define GL_MAP1_VERTEX_ATTRIB4_4_NV       0x8664\n#define GL_MAP1_VERTEX_ATTRIB5_4_NV       0x8665\n#define GL_MAP1_VERTEX_ATTRIB6_4_NV       0x8666\n#define GL_MAP1_VERTEX_ATTRIB7_4_NV       0x8667\n#define GL_MAP1_VERTEX_ATTRIB8_4_NV       0x8668\n#define GL_MAP1_VERTEX_ATTRIB9_4_NV       0x8669\n#define GL_MAP1_VERTEX_ATTRIB10_4_NV      0x866A\n#define GL_MAP1_VERTEX_ATTRIB11_4_NV      0x866B\n#define GL_MAP1_VERTEX_ATTRIB12_4_NV      0x866C\n#define GL_MAP1_VERTEX_ATTRIB13_4_NV      0x866D\n#define GL_MAP1_VERTEX_ATTRIB14_4_NV      0x866E\n#define GL_MAP1_VERTEX_ATTRIB15_4_NV      0x866F\n#define GL_MAP2_VERTEX_ATTRIB0_4_NV       0x8670\n#define GL_MAP2_VERTEX_ATTRIB1_4_NV       0x8671\n#define GL_MAP2_VERTEX_ATTRIB2_4_NV       0x8672\n#define GL_MAP2_VERTEX_ATTRIB3_4_NV       0x8673\n#define GL_MAP2_VERTEX_ATTRIB4_4_NV       0x8674\n#define GL_MAP2_VERTEX_ATTRIB5_4_NV       0x8675\n#define GL_MAP2_VERTEX_ATTRIB6_4_NV       0x8676\n#define GL_MAP2_VERTEX_ATTRIB7_4_NV       0x8677\n#define GL_MAP2_VERTEX_ATTRIB8_4_NV       0x8678\n#define GL_MAP2_VERTEX_ATTRIB9_4_NV       0x8679\n#define GL_MAP2_VERTEX_ATTRIB10_4_NV      0x867A\n#define GL_MAP2_VERTEX_ATTRIB11_4_NV      0x867B\n#define GL_MAP2_VERTEX_ATTRIB12_4_NV      0x867C\n#define GL_MAP2_VERTEX_ATTRIB13_4_NV      0x867D\n#define GL_MAP2_VERTEX_ATTRIB14_4_NV      0x867E\n#define GL_MAP2_VERTEX_ATTRIB15_4_NV      0x867F\n#endif\n\n#ifndef GL_SGIX_texture_coordinate_clamp\n#define GL_TEXTURE_MAX_CLAMP_S_SGIX       0x8369\n#define GL_TEXTURE_MAX_CLAMP_T_SGIX       0x836A\n#define GL_TEXTURE_MAX_CLAMP_R_SGIX       0x836B\n#endif\n\n#ifndef GL_SGIX_scalebias_hint\n#define GL_SCALEBIAS_HINT_SGIX            0x8322\n#endif\n\n#ifndef GL_OML_interlace\n#define GL_INTERLACE_OML                  0x8980\n#define GL_INTERLACE_READ_OML             0x8981\n#endif\n\n#ifndef GL_OML_subsample\n#define GL_FORMAT_SUBSAMPLE_24_24_OML     0x8982\n#define GL_FORMAT_SUBSAMPLE_244_244_OML   0x8983\n#endif\n\n#ifndef GL_OML_resample\n#define GL_PACK_RESAMPLE_OML              0x8984\n#define GL_UNPACK_RESAMPLE_OML            0x8985\n#define GL_RESAMPLE_REPLICATE_OML         0x8986\n#define GL_RESAMPLE_ZERO_FILL_OML         0x8987\n#define GL_RESAMPLE_AVERAGE_OML           0x8988\n#define GL_RESAMPLE_DECIMATE_OML          0x8989\n#endif\n\n#ifndef GL_NV_copy_depth_to_color\n#define GL_DEPTH_STENCIL_TO_RGBA_NV       0x886E\n#define GL_DEPTH_STENCIL_TO_BGRA_NV       0x886F\n#endif\n\n#ifndef GL_ATI_envmap_bumpmap\n#define GL_BUMP_ROT_MATRIX_ATI            0x8775\n#define GL_BUMP_ROT_MATRIX_SIZE_ATI       0x8776\n#define GL_BUMP_NUM_TEX_UNITS_ATI         0x8777\n#define GL_BUMP_TEX_UNITS_ATI             0x8778\n#define GL_DUDV_ATI                       0x8779\n#define GL_DU8DV8_ATI                     0x877A\n#define GL_BUMP_ENVMAP_ATI                0x877B\n#define GL_BUMP_TARGET_ATI                0x877C\n#endif\n\n#ifndef GL_ATI_fragment_shader\n#define GL_FRAGMENT_SHADER_ATI            0x8920\n#define GL_REG_0_ATI                      0x8921\n#define GL_REG_1_ATI                      0x8922\n#define GL_REG_2_ATI                      0x8923\n#define GL_REG_3_ATI                      0x8924\n#define GL_REG_4_ATI                      0x8925\n#define GL_REG_5_ATI                      0x8926\n#define GL_REG_6_ATI                      0x8927\n#define GL_REG_7_ATI                      0x8928\n#define GL_REG_8_ATI                      0x8929\n#define GL_REG_9_ATI                      0x892A\n#define GL_REG_10_ATI                     0x892B\n#define GL_REG_11_ATI                     0x892C\n#define GL_REG_12_ATI                     0x892D\n#define GL_REG_13_ATI                     0x892E\n#define GL_REG_14_ATI                     0x892F\n#define GL_REG_15_ATI                     0x8930\n#define GL_REG_16_ATI                     0x8931\n#define GL_REG_17_ATI                     0x8932\n#define GL_REG_18_ATI                     0x8933\n#define GL_REG_19_ATI                     0x8934\n#define GL_REG_20_ATI                     0x8935\n#define GL_REG_21_ATI                     0x8936\n#define GL_REG_22_ATI                     0x8937\n#define GL_REG_23_ATI                     0x8938\n#define GL_REG_24_ATI                     0x8939\n#define GL_REG_25_ATI                     0x893A\n#define GL_REG_26_ATI                     0x893B\n#define GL_REG_27_ATI                     0x893C\n#define GL_REG_28_ATI                     0x893D\n#define GL_REG_29_ATI                     0x893E\n#define GL_REG_30_ATI                     0x893F\n#define GL_REG_31_ATI                     0x8940\n#define GL_CON_0_ATI                      0x8941\n#define GL_CON_1_ATI                      0x8942\n#define GL_CON_2_ATI                      0x8943\n#define GL_CON_3_ATI                      0x8944\n#define GL_CON_4_ATI                      0x8945\n#define GL_CON_5_ATI                      0x8946\n#define GL_CON_6_ATI                      0x8947\n#define GL_CON_7_ATI                      0x8948\n#define GL_CON_8_ATI                      0x8949\n#define GL_CON_9_ATI                      0x894A\n#define GL_CON_10_ATI                     0x894B\n#define GL_CON_11_ATI                     0x894C\n#define GL_CON_12_ATI                     0x894D\n#define GL_CON_13_ATI                     0x894E\n#define GL_CON_14_ATI                     0x894F\n#define GL_CON_15_ATI                     0x8950\n#define GL_CON_16_ATI                     0x8951\n#define GL_CON_17_ATI                     0x8952\n#define GL_CON_18_ATI                     0x8953\n#define GL_CON_19_ATI                     0x8954\n#define GL_CON_20_ATI                     0x8955\n#define GL_CON_21_ATI                     0x8956\n#define GL_CON_22_ATI                     0x8957\n#define GL_CON_23_ATI                     0x8958\n#define GL_CON_24_ATI                     0x8959\n#define GL_CON_25_ATI                     0x895A\n#define GL_CON_26_ATI                     0x895B\n#define GL_CON_27_ATI                     0x895C\n#define GL_CON_28_ATI                     0x895D\n#define GL_CON_29_ATI                     0x895E\n#define GL_CON_30_ATI                     0x895F\n#define GL_CON_31_ATI                     0x8960\n#define GL_MOV_ATI                        0x8961\n#define GL_ADD_ATI                        0x8963\n#define GL_MUL_ATI                        0x8964\n#define GL_SUB_ATI                        0x8965\n#define GL_DOT3_ATI                       0x8966\n#define GL_DOT4_ATI                       0x8967\n#define GL_MAD_ATI                        0x8968\n#define GL_LERP_ATI                       0x8969\n#define GL_CND_ATI                        0x896A\n#define GL_CND0_ATI                       0x896B\n#define GL_DOT2_ADD_ATI                   0x896C\n#define GL_SECONDARY_INTERPOLATOR_ATI     0x896D\n#define GL_NUM_FRAGMENT_REGISTERS_ATI     0x896E\n#define GL_NUM_FRAGMENT_CONSTANTS_ATI     0x896F\n#define GL_NUM_PASSES_ATI                 0x8970\n#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI  0x8971\n#define GL_NUM_INSTRUCTIONS_TOTAL_ATI     0x8972\n#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973\n#define GL_NUM_LOOPBACK_COMPONENTS_ATI    0x8974\n#define GL_COLOR_ALPHA_PAIRING_ATI        0x8975\n#define GL_SWIZZLE_STR_ATI                0x8976\n#define GL_SWIZZLE_STQ_ATI                0x8977\n#define GL_SWIZZLE_STR_DR_ATI             0x8978\n#define GL_SWIZZLE_STQ_DQ_ATI             0x8979\n#define GL_SWIZZLE_STRQ_ATI               0x897A\n#define GL_SWIZZLE_STRQ_DQ_ATI            0x897B\n#define GL_RED_BIT_ATI                    0x00000001\n#define GL_GREEN_BIT_ATI                  0x00000002\n#define GL_BLUE_BIT_ATI                   0x00000004\n#define GL_2X_BIT_ATI                     0x00000001\n#define GL_4X_BIT_ATI                     0x00000002\n#define GL_8X_BIT_ATI                     0x00000004\n#define GL_HALF_BIT_ATI                   0x00000008\n#define GL_QUARTER_BIT_ATI                0x00000010\n#define GL_EIGHTH_BIT_ATI                 0x00000020\n#define GL_SATURATE_BIT_ATI               0x00000040\n#define GL_COMP_BIT_ATI                   0x00000002\n#define GL_NEGATE_BIT_ATI                 0x00000004\n#define GL_BIAS_BIT_ATI                   0x00000008\n#endif\n\n#ifndef GL_ATI_pn_triangles\n#define GL_PN_TRIANGLES_ATI               0x87F0\n#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1\n#define GL_PN_TRIANGLES_POINT_MODE_ATI    0x87F2\n#define GL_PN_TRIANGLES_NORMAL_MODE_ATI   0x87F3\n#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4\n#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5\n#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6\n#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7\n#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8\n#endif\n\n#ifndef GL_ATI_vertex_array_object\n#define GL_STATIC_ATI                     0x8760\n#define GL_DYNAMIC_ATI                    0x8761\n#define GL_PRESERVE_ATI                   0x8762\n#define GL_DISCARD_ATI                    0x8763\n#define GL_OBJECT_BUFFER_SIZE_ATI         0x8764\n#define GL_OBJECT_BUFFER_USAGE_ATI        0x8765\n#define GL_ARRAY_OBJECT_BUFFER_ATI        0x8766\n#define GL_ARRAY_OBJECT_OFFSET_ATI        0x8767\n#endif\n\n#ifndef GL_EXT_vertex_shader\n#define GL_VERTEX_SHADER_EXT              0x8780\n#define GL_VERTEX_SHADER_BINDING_EXT      0x8781\n#define GL_OP_INDEX_EXT                   0x8782\n#define GL_OP_NEGATE_EXT                  0x8783\n#define GL_OP_DOT3_EXT                    0x8784\n#define GL_OP_DOT4_EXT                    0x8785\n#define GL_OP_MUL_EXT                     0x8786\n#define GL_OP_ADD_EXT                     0x8787\n#define GL_OP_MADD_EXT                    0x8788\n#define GL_OP_FRAC_EXT                    0x8789\n#define GL_OP_MAX_EXT                     0x878A\n#define GL_OP_MIN_EXT                     0x878B\n#define GL_OP_SET_GE_EXT                  0x878C\n#define GL_OP_SET_LT_EXT                  0x878D\n#define GL_OP_CLAMP_EXT                   0x878E\n#define GL_OP_FLOOR_EXT                   0x878F\n#define GL_OP_ROUND_EXT                   0x8790\n#define GL_OP_EXP_BASE_2_EXT              0x8791\n#define GL_OP_LOG_BASE_2_EXT              0x8792\n#define GL_OP_POWER_EXT                   0x8793\n#define GL_OP_RECIP_EXT                   0x8794\n#define GL_OP_RECIP_SQRT_EXT              0x8795\n#define GL_OP_SUB_EXT                     0x8796\n#define GL_OP_CROSS_PRODUCT_EXT           0x8797\n#define GL_OP_MULTIPLY_MATRIX_EXT         0x8798\n#define GL_OP_MOV_EXT                     0x8799\n#define GL_OUTPUT_VERTEX_EXT              0x879A\n#define GL_OUTPUT_COLOR0_EXT              0x879B\n#define GL_OUTPUT_COLOR1_EXT              0x879C\n#define GL_OUTPUT_TEXTURE_COORD0_EXT      0x879D\n#define GL_OUTPUT_TEXTURE_COORD1_EXT      0x879E\n#define GL_OUTPUT_TEXTURE_COORD2_EXT      0x879F\n#define GL_OUTPUT_TEXTURE_COORD3_EXT      0x87A0\n#define GL_OUTPUT_TEXTURE_COORD4_EXT      0x87A1\n#define GL_OUTPUT_TEXTURE_COORD5_EXT      0x87A2\n#define GL_OUTPUT_TEXTURE_COORD6_EXT      0x87A3\n#define GL_OUTPUT_TEXTURE_COORD7_EXT      0x87A4\n#define GL_OUTPUT_TEXTURE_COORD8_EXT      0x87A5\n#define GL_OUTPUT_TEXTURE_COORD9_EXT      0x87A6\n#define GL_OUTPUT_TEXTURE_COORD10_EXT     0x87A7\n#define GL_OUTPUT_TEXTURE_COORD11_EXT     0x87A8\n#define GL_OUTPUT_TEXTURE_COORD12_EXT     0x87A9\n#define GL_OUTPUT_TEXTURE_COORD13_EXT     0x87AA\n#define GL_OUTPUT_TEXTURE_COORD14_EXT     0x87AB\n#define GL_OUTPUT_TEXTURE_COORD15_EXT     0x87AC\n#define GL_OUTPUT_TEXTURE_COORD16_EXT     0x87AD\n#define GL_OUTPUT_TEXTURE_COORD17_EXT     0x87AE\n#define GL_OUTPUT_TEXTURE_COORD18_EXT     0x87AF\n#define GL_OUTPUT_TEXTURE_COORD19_EXT     0x87B0\n#define GL_OUTPUT_TEXTURE_COORD20_EXT     0x87B1\n#define GL_OUTPUT_TEXTURE_COORD21_EXT     0x87B2\n#define GL_OUTPUT_TEXTURE_COORD22_EXT     0x87B3\n#define GL_OUTPUT_TEXTURE_COORD23_EXT     0x87B4\n#define GL_OUTPUT_TEXTURE_COORD24_EXT     0x87B5\n#define GL_OUTPUT_TEXTURE_COORD25_EXT     0x87B6\n#define GL_OUTPUT_TEXTURE_COORD26_EXT     0x87B7\n#define GL_OUTPUT_TEXTURE_COORD27_EXT     0x87B8\n#define GL_OUTPUT_TEXTURE_COORD28_EXT     0x87B9\n#define GL_OUTPUT_TEXTURE_COORD29_EXT     0x87BA\n#define GL_OUTPUT_TEXTURE_COORD30_EXT     0x87BB\n#define GL_OUTPUT_TEXTURE_COORD31_EXT     0x87BC\n#define GL_OUTPUT_FOG_EXT                 0x87BD\n#define GL_SCALAR_EXT                     0x87BE\n#define GL_VECTOR_EXT                     0x87BF\n#define GL_MATRIX_EXT                     0x87C0\n#define GL_VARIANT_EXT                    0x87C1\n#define GL_INVARIANT_EXT                  0x87C2\n#define GL_LOCAL_CONSTANT_EXT             0x87C3\n#define GL_LOCAL_EXT                      0x87C4\n#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5\n#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6\n#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7\n#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8\n#define GL_MAX_VERTEX_SHADER_LOCALS_EXT   0x87C9\n#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA\n#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB\n#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC\n#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD\n#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE\n#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF\n#define GL_VERTEX_SHADER_VARIANTS_EXT     0x87D0\n#define GL_VERTEX_SHADER_INVARIANTS_EXT   0x87D1\n#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2\n#define GL_VERTEX_SHADER_LOCALS_EXT       0x87D3\n#define GL_VERTEX_SHADER_OPTIMIZED_EXT    0x87D4\n#define GL_X_EXT                          0x87D5\n#define GL_Y_EXT                          0x87D6\n#define GL_Z_EXT                          0x87D7\n#define GL_W_EXT                          0x87D8\n#define GL_NEGATIVE_X_EXT                 0x87D9\n#define GL_NEGATIVE_Y_EXT                 0x87DA\n#define GL_NEGATIVE_Z_EXT                 0x87DB\n#define GL_NEGATIVE_W_EXT                 0x87DC\n#define GL_ZERO_EXT                       0x87DD\n#define GL_ONE_EXT                        0x87DE\n#define GL_NEGATIVE_ONE_EXT               0x87DF\n#define GL_NORMALIZED_RANGE_EXT           0x87E0\n#define GL_FULL_RANGE_EXT                 0x87E1\n#define GL_CURRENT_VERTEX_EXT             0x87E2\n#define GL_MVP_MATRIX_EXT                 0x87E3\n#define GL_VARIANT_VALUE_EXT              0x87E4\n#define GL_VARIANT_DATATYPE_EXT           0x87E5\n#define GL_VARIANT_ARRAY_STRIDE_EXT       0x87E6\n#define GL_VARIANT_ARRAY_TYPE_EXT         0x87E7\n#define GL_VARIANT_ARRAY_EXT              0x87E8\n#define GL_VARIANT_ARRAY_POINTER_EXT      0x87E9\n#define GL_INVARIANT_VALUE_EXT            0x87EA\n#define GL_INVARIANT_DATATYPE_EXT         0x87EB\n#define GL_LOCAL_CONSTANT_VALUE_EXT       0x87EC\n#define GL_LOCAL_CONSTANT_DATATYPE_EXT    0x87ED\n#endif\n\n#ifndef GL_ATI_vertex_streams\n#define GL_MAX_VERTEX_STREAMS_ATI         0x876B\n#define GL_VERTEX_STREAM0_ATI             0x876C\n#define GL_VERTEX_STREAM1_ATI             0x876D\n#define GL_VERTEX_STREAM2_ATI             0x876E\n#define GL_VERTEX_STREAM3_ATI             0x876F\n#define GL_VERTEX_STREAM4_ATI             0x8770\n#define GL_VERTEX_STREAM5_ATI             0x8771\n#define GL_VERTEX_STREAM6_ATI             0x8772\n#define GL_VERTEX_STREAM7_ATI             0x8773\n#define GL_VERTEX_SOURCE_ATI              0x8774\n#endif\n\n#ifndef GL_ATI_element_array\n#define GL_ELEMENT_ARRAY_ATI              0x8768\n#define GL_ELEMENT_ARRAY_TYPE_ATI         0x8769\n#define GL_ELEMENT_ARRAY_POINTER_ATI      0x876A\n#endif\n\n#ifndef GL_SUN_mesh_array\n#define GL_QUAD_MESH_SUN                  0x8614\n#define GL_TRIANGLE_MESH_SUN              0x8615\n#endif\n\n#ifndef GL_SUN_slice_accum\n#define GL_SLICE_ACCUM_SUN                0x85CC\n#endif\n\n#ifndef GL_NV_multisample_filter_hint\n#define GL_MULTISAMPLE_FILTER_HINT_NV     0x8534\n#endif\n\n#ifndef GL_NV_depth_clamp\n#define GL_DEPTH_CLAMP_NV                 0x864F\n#endif\n\n#ifndef GL_NV_occlusion_query\n#define GL_PIXEL_COUNTER_BITS_NV          0x8864\n#define GL_CURRENT_OCCLUSION_QUERY_ID_NV  0x8865\n#define GL_PIXEL_COUNT_NV                 0x8866\n#define GL_PIXEL_COUNT_AVAILABLE_NV       0x8867\n#endif\n\n#ifndef GL_NV_point_sprite\n#define GL_POINT_SPRITE_NV                0x8861\n#define GL_COORD_REPLACE_NV               0x8862\n#define GL_POINT_SPRITE_R_MODE_NV         0x8863\n#endif\n\n#ifndef GL_NV_texture_shader3\n#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850\n#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851\n#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852\n#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853\n#define GL_OFFSET_HILO_TEXTURE_2D_NV      0x8854\n#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855\n#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856\n#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857\n#define GL_DEPENDENT_HILO_TEXTURE_2D_NV   0x8858\n#define GL_DEPENDENT_RGB_TEXTURE_3D_NV    0x8859\n#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A\n#define GL_DOT_PRODUCT_PASS_THROUGH_NV    0x885B\n#define GL_DOT_PRODUCT_TEXTURE_1D_NV      0x885C\n#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D\n#define GL_HILO8_NV                       0x885E\n#define GL_SIGNED_HILO8_NV                0x885F\n#define GL_FORCE_BLUE_TO_ONE_NV           0x8860\n#endif\n\n#ifndef GL_NV_vertex_program1_1\n#endif\n\n#ifndef GL_EXT_shadow_funcs\n#endif\n\n#ifndef GL_EXT_stencil_two_side\n#define GL_STENCIL_TEST_TWO_SIDE_EXT      0x8910\n#define GL_ACTIVE_STENCIL_FACE_EXT        0x8911\n#endif\n\n#ifndef GL_ATI_text_fragment_shader\n#define GL_TEXT_FRAGMENT_SHADER_ATI       0x8200\n#endif\n\n#ifndef GL_APPLE_client_storage\n#define GL_UNPACK_CLIENT_STORAGE_APPLE    0x85B2\n#endif\n\n#ifndef GL_APPLE_element_array\n#define GL_ELEMENT_ARRAY_APPLE            0x8A0C\n#define GL_ELEMENT_ARRAY_TYPE_APPLE       0x8A0D\n#define GL_ELEMENT_ARRAY_POINTER_APPLE    0x8A0E\n#endif\n\n#ifndef GL_APPLE_fence\n#define GL_DRAW_PIXELS_APPLE              0x8A0A\n#define GL_FENCE_APPLE                    0x8A0B\n#endif\n\n#ifndef GL_APPLE_vertex_array_object\n#define GL_VERTEX_ARRAY_BINDING_APPLE     0x85B5\n#endif\n\n#ifndef GL_APPLE_vertex_array_range\n#define GL_VERTEX_ARRAY_RANGE_APPLE       0x851D\n#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E\n#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F\n#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521\n#define GL_STORAGE_CLIENT_APPLE           0x85B4\n#define GL_STORAGE_CACHED_APPLE           0x85BE\n#define GL_STORAGE_SHARED_APPLE           0x85BF\n#endif\n\n#ifndef GL_APPLE_ycbcr_422\n#define GL_YCBCR_422_APPLE                0x85B9\n#define GL_UNSIGNED_SHORT_8_8_APPLE       0x85BA\n#define GL_UNSIGNED_SHORT_8_8_REV_APPLE   0x85BB\n#endif\n\n#ifndef GL_S3_s3tc\n#define GL_RGB_S3TC                       0x83A0\n#define GL_RGB4_S3TC                      0x83A1\n#define GL_RGBA_S3TC                      0x83A2\n#define GL_RGBA4_S3TC                     0x83A3\n#define GL_RGBA_DXT5_S3TC                 0x83A4\n#define GL_RGBA4_DXT5_S3TC                0x83A5\n#endif\n\n#ifndef GL_ATI_draw_buffers\n#define GL_MAX_DRAW_BUFFERS_ATI           0x8824\n#define GL_DRAW_BUFFER0_ATI               0x8825\n#define GL_DRAW_BUFFER1_ATI               0x8826\n#define GL_DRAW_BUFFER2_ATI               0x8827\n#define GL_DRAW_BUFFER3_ATI               0x8828\n#define GL_DRAW_BUFFER4_ATI               0x8829\n#define GL_DRAW_BUFFER5_ATI               0x882A\n#define GL_DRAW_BUFFER6_ATI               0x882B\n#define GL_DRAW_BUFFER7_ATI               0x882C\n#define GL_DRAW_BUFFER8_ATI               0x882D\n#define GL_DRAW_BUFFER9_ATI               0x882E\n#define GL_DRAW_BUFFER10_ATI              0x882F\n#define GL_DRAW_BUFFER11_ATI              0x8830\n#define GL_DRAW_BUFFER12_ATI              0x8831\n#define GL_DRAW_BUFFER13_ATI              0x8832\n#define GL_DRAW_BUFFER14_ATI              0x8833\n#define GL_DRAW_BUFFER15_ATI              0x8834\n#endif\n\n#ifndef GL_ATI_pixel_format_float\n#define GL_RGBA_FLOAT_MODE_ATI            0x8820\n#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835\n#endif\n\n#ifndef GL_ATI_texture_env_combine3\n#define GL_MODULATE_ADD_ATI               0x8744\n#define GL_MODULATE_SIGNED_ADD_ATI        0x8745\n#define GL_MODULATE_SUBTRACT_ATI          0x8746\n#endif\n\n#ifndef GL_ATI_texture_float\n#define GL_RGBA_FLOAT32_ATI               0x8814\n#define GL_RGB_FLOAT32_ATI                0x8815\n#define GL_ALPHA_FLOAT32_ATI              0x8816\n#define GL_INTENSITY_FLOAT32_ATI          0x8817\n#define GL_LUMINANCE_FLOAT32_ATI          0x8818\n#define GL_LUMINANCE_ALPHA_FLOAT32_ATI    0x8819\n#define GL_RGBA_FLOAT16_ATI               0x881A\n#define GL_RGB_FLOAT16_ATI                0x881B\n#define GL_ALPHA_FLOAT16_ATI              0x881C\n#define GL_INTENSITY_FLOAT16_ATI          0x881D\n#define GL_LUMINANCE_FLOAT16_ATI          0x881E\n#define GL_LUMINANCE_ALPHA_FLOAT16_ATI    0x881F\n#endif\n\n#ifndef GL_NV_float_buffer\n#define GL_FLOAT_R_NV                     0x8880\n#define GL_FLOAT_RG_NV                    0x8881\n#define GL_FLOAT_RGB_NV                   0x8882\n#define GL_FLOAT_RGBA_NV                  0x8883\n#define GL_FLOAT_R16_NV                   0x8884\n#define GL_FLOAT_R32_NV                   0x8885\n#define GL_FLOAT_RG16_NV                  0x8886\n#define GL_FLOAT_RG32_NV                  0x8887\n#define GL_FLOAT_RGB16_NV                 0x8888\n#define GL_FLOAT_RGB32_NV                 0x8889\n#define GL_FLOAT_RGBA16_NV                0x888A\n#define GL_FLOAT_RGBA32_NV                0x888B\n#define GL_TEXTURE_FLOAT_COMPONENTS_NV    0x888C\n#define GL_FLOAT_CLEAR_COLOR_VALUE_NV     0x888D\n#define GL_FLOAT_RGBA_MODE_NV             0x888E\n#endif\n\n#ifndef GL_NV_fragment_program\n#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868\n#define GL_FRAGMENT_PROGRAM_NV            0x8870\n#define GL_MAX_TEXTURE_COORDS_NV          0x8871\n#define GL_MAX_TEXTURE_IMAGE_UNITS_NV     0x8872\n#define GL_FRAGMENT_PROGRAM_BINDING_NV    0x8873\n#define GL_PROGRAM_ERROR_STRING_NV        0x8874\n#endif\n\n#ifndef GL_NV_half_float\n#define GL_HALF_FLOAT_NV                  0x140B\n#endif\n\n#ifndef GL_NV_pixel_data_range\n#define GL_WRITE_PIXEL_DATA_RANGE_NV      0x8878\n#define GL_READ_PIXEL_DATA_RANGE_NV       0x8879\n#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A\n#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B\n#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C\n#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D\n#endif\n\n#ifndef GL_NV_primitive_restart\n#define GL_PRIMITIVE_RESTART_NV           0x8558\n#define GL_PRIMITIVE_RESTART_INDEX_NV     0x8559\n#endif\n\n#ifndef GL_NV_texture_expand_normal\n#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F\n#endif\n\n#ifndef GL_NV_vertex_program2\n#endif\n\n#ifndef GL_ATI_map_object_buffer\n#endif\n\n#ifndef GL_ATI_separate_stencil\n#define GL_STENCIL_BACK_FUNC_ATI          0x8800\n#define GL_STENCIL_BACK_FAIL_ATI          0x8801\n#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802\n#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803\n#endif\n\n#ifndef GL_ATI_vertex_attrib_array_object\n#endif\n\n#ifndef GL_OES_byte_coordinates\n#endif\n\n#ifndef GL_OES_fixed_point\n#define GL_FIXED_OES                      0x140C\n#endif\n\n#ifndef GL_OES_single_precision\n#endif\n\n#ifndef GL_OES_compressed_paletted_texture\n#define GL_PALETTE4_RGB8_OES              0x8B90\n#define GL_PALETTE4_RGBA8_OES             0x8B91\n#define GL_PALETTE4_R5_G6_B5_OES          0x8B92\n#define GL_PALETTE4_RGBA4_OES             0x8B93\n#define GL_PALETTE4_RGB5_A1_OES           0x8B94\n#define GL_PALETTE8_RGB8_OES              0x8B95\n#define GL_PALETTE8_RGBA8_OES             0x8B96\n#define GL_PALETTE8_R5_G6_B5_OES          0x8B97\n#define GL_PALETTE8_RGBA4_OES             0x8B98\n#define GL_PALETTE8_RGB5_A1_OES           0x8B99\n#endif\n\n#ifndef GL_OES_read_format\n#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A\n#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B\n#endif\n\n#ifndef GL_OES_query_matrix\n#endif\n\n#ifndef GL_EXT_depth_bounds_test\n#define GL_DEPTH_BOUNDS_TEST_EXT          0x8890\n#define GL_DEPTH_BOUNDS_EXT               0x8891\n#endif\n\n#ifndef GL_EXT_texture_mirror_clamp\n#define GL_MIRROR_CLAMP_EXT               0x8742\n#define GL_MIRROR_CLAMP_TO_EDGE_EXT       0x8743\n#define GL_MIRROR_CLAMP_TO_BORDER_EXT     0x8912\n#endif\n\n#ifndef GL_EXT_blend_equation_separate\n#define GL_BLEND_EQUATION_RGB_EXT         0x8009\n#define GL_BLEND_EQUATION_ALPHA_EXT       0x883D\n#endif\n\n#ifndef GL_MESA_pack_invert\n#define GL_PACK_INVERT_MESA               0x8758\n#endif\n\n#ifndef GL_MESA_ycbcr_texture\n#define GL_UNSIGNED_SHORT_8_8_MESA        0x85BA\n#define GL_UNSIGNED_SHORT_8_8_REV_MESA    0x85BB\n#define GL_YCBCR_MESA                     0x8757\n#endif\n\n#ifndef GL_EXT_pixel_buffer_object\n#define GL_PIXEL_PACK_BUFFER_EXT          0x88EB\n#define GL_PIXEL_UNPACK_BUFFER_EXT        0x88EC\n#define GL_PIXEL_PACK_BUFFER_BINDING_EXT  0x88ED\n#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF\n#endif\n\n#ifndef GL_NV_fragment_program_option\n#endif\n\n#ifndef GL_NV_fragment_program2\n#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4\n#define GL_MAX_PROGRAM_CALL_DEPTH_NV      0x88F5\n#define GL_MAX_PROGRAM_IF_DEPTH_NV        0x88F6\n#define GL_MAX_PROGRAM_LOOP_DEPTH_NV      0x88F7\n#define GL_MAX_PROGRAM_LOOP_COUNT_NV      0x88F8\n#endif\n\n#ifndef GL_NV_vertex_program2_option\n/* reuse GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */\n/* reuse GL_MAX_PROGRAM_CALL_DEPTH_NV */\n#endif\n\n#ifndef GL_NV_vertex_program3\n/* reuse GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */\n#endif\n\n#ifndef GL_EXT_framebuffer_object\n#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506\n#define GL_MAX_RENDERBUFFER_SIZE_EXT      0x84E8\n#define GL_FRAMEBUFFER_BINDING_EXT        0x8CA6\n#define GL_RENDERBUFFER_BINDING_EXT       0x8CA7\n#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0\n#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1\n#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2\n#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3\n#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4\n#define GL_FRAMEBUFFER_COMPLETE_EXT       0x8CD5\n#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6\n#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7\n#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9\n#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA\n#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB\n#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC\n#define GL_FRAMEBUFFER_UNSUPPORTED_EXT    0x8CDD\n#define GL_MAX_COLOR_ATTACHMENTS_EXT      0x8CDF\n#define GL_COLOR_ATTACHMENT0_EXT          0x8CE0\n#define GL_COLOR_ATTACHMENT1_EXT          0x8CE1\n#define GL_COLOR_ATTACHMENT2_EXT          0x8CE2\n#define GL_COLOR_ATTACHMENT3_EXT          0x8CE3\n#define GL_COLOR_ATTACHMENT4_EXT          0x8CE4\n#define GL_COLOR_ATTACHMENT5_EXT          0x8CE5\n#define GL_COLOR_ATTACHMENT6_EXT          0x8CE6\n#define GL_COLOR_ATTACHMENT7_EXT          0x8CE7\n#define GL_COLOR_ATTACHMENT8_EXT          0x8CE8\n#define GL_COLOR_ATTACHMENT9_EXT          0x8CE9\n#define GL_COLOR_ATTACHMENT10_EXT         0x8CEA\n#define GL_COLOR_ATTACHMENT11_EXT         0x8CEB\n#define GL_COLOR_ATTACHMENT12_EXT         0x8CEC\n#define GL_COLOR_ATTACHMENT13_EXT         0x8CED\n#define GL_COLOR_ATTACHMENT14_EXT         0x8CEE\n#define GL_COLOR_ATTACHMENT15_EXT         0x8CEF\n#define GL_DEPTH_ATTACHMENT_EXT           0x8D00\n#define GL_STENCIL_ATTACHMENT_EXT         0x8D20\n#define GL_FRAMEBUFFER_EXT                0x8D40\n#define GL_RENDERBUFFER_EXT               0x8D41\n#define GL_RENDERBUFFER_WIDTH_EXT         0x8D42\n#define GL_RENDERBUFFER_HEIGHT_EXT        0x8D43\n#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44\n#define GL_STENCIL_INDEX1_EXT             0x8D46\n#define GL_STENCIL_INDEX4_EXT             0x8D47\n#define GL_STENCIL_INDEX8_EXT             0x8D48\n#define GL_STENCIL_INDEX16_EXT            0x8D49\n#define GL_RENDERBUFFER_RED_SIZE_EXT      0x8D50\n#define GL_RENDERBUFFER_GREEN_SIZE_EXT    0x8D51\n#define GL_RENDERBUFFER_BLUE_SIZE_EXT     0x8D52\n#define GL_RENDERBUFFER_ALPHA_SIZE_EXT    0x8D53\n#define GL_RENDERBUFFER_DEPTH_SIZE_EXT    0x8D54\n#define GL_RENDERBUFFER_STENCIL_SIZE_EXT  0x8D55\n#endif\n\n#ifndef GL_GREMEDY_string_marker\n#endif\n\n#ifndef GL_EXT_packed_depth_stencil\n#define GL_DEPTH_STENCIL_EXT              0x84F9\n#define GL_UNSIGNED_INT_24_8_EXT          0x84FA\n#define GL_DEPTH24_STENCIL8_EXT           0x88F0\n#define GL_TEXTURE_STENCIL_SIZE_EXT       0x88F1\n#endif\n\n#ifndef GL_EXT_stencil_clear_tag\n#define GL_STENCIL_TAG_BITS_EXT           0x88F2\n#define GL_STENCIL_CLEAR_TAG_VALUE_EXT    0x88F3\n#endif\n\n#ifndef GL_EXT_texture_sRGB\n#define GL_SRGB_EXT                       0x8C40\n#define GL_SRGB8_EXT                      0x8C41\n#define GL_SRGB_ALPHA_EXT                 0x8C42\n#define GL_SRGB8_ALPHA8_EXT               0x8C43\n#define GL_SLUMINANCE_ALPHA_EXT           0x8C44\n#define GL_SLUMINANCE8_ALPHA8_EXT         0x8C45\n#define GL_SLUMINANCE_EXT                 0x8C46\n#define GL_SLUMINANCE8_EXT                0x8C47\n#define GL_COMPRESSED_SRGB_EXT            0x8C48\n#define GL_COMPRESSED_SRGB_ALPHA_EXT      0x8C49\n#define GL_COMPRESSED_SLUMINANCE_EXT      0x8C4A\n#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B\n#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT  0x8C4C\n#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D\n#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E\n#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F\n#endif\n\n#ifndef GL_EXT_framebuffer_blit\n#define GL_READ_FRAMEBUFFER_EXT           0x8CA8\n#define GL_DRAW_FRAMEBUFFER_EXT           0x8CA9\n#define GL_DRAW_FRAMEBUFFER_BINDING_EXT   0x8CA6\n#define GL_READ_FRAMEBUFFER_BINDING_EXT   0x8CAA\n#endif\n\n#ifndef GL_EXT_framebuffer_multisample\n#define GL_RENDERBUFFER_SAMPLES_EXT       0x8CAB\n#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56\n#define GL_MAX_SAMPLES_EXT                0x8D57\n#endif\n\n#ifndef GL_MESAX_texture_stack\n#define GL_TEXTURE_1D_STACK_MESAX         0x8759\n#define GL_TEXTURE_2D_STACK_MESAX         0x875A\n#define GL_PROXY_TEXTURE_1D_STACK_MESAX   0x875B\n#define GL_PROXY_TEXTURE_2D_STACK_MESAX   0x875C\n#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D\n#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E\n#endif\n\n#ifndef GL_EXT_timer_query\n#define GL_TIME_ELAPSED_EXT               0x88BF\n#endif\n\n#ifndef GL_EXT_gpu_program_parameters\n#endif\n\n#ifndef GL_APPLE_flush_buffer_range\n#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12\n#define GL_BUFFER_FLUSHING_UNMAP_APPLE    0x8A13\n#endif\n\n#ifndef GL_NV_gpu_program4\n#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV    0x8904\n#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV    0x8905\n#define GL_PROGRAM_ATTRIB_COMPONENTS_NV   0x8906\n#define GL_PROGRAM_RESULT_COMPONENTS_NV   0x8907\n#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908\n#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909\n#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5\n#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6\n#endif\n\n#ifndef GL_NV_geometry_program4\n#define GL_LINES_ADJACENCY_EXT            0x000A\n#define GL_LINE_STRIP_ADJACENCY_EXT       0x000B\n#define GL_TRIANGLES_ADJACENCY_EXT        0x000C\n#define GL_TRIANGLE_STRIP_ADJACENCY_EXT   0x000D\n#define GL_GEOMETRY_PROGRAM_NV            0x8C26\n#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27\n#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28\n#define GL_GEOMETRY_VERTICES_OUT_EXT      0x8DDA\n#define GL_GEOMETRY_INPUT_TYPE_EXT        0x8DDB\n#define GL_GEOMETRY_OUTPUT_TYPE_EXT       0x8DDC\n#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29\n#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7\n#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8\n#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9\n#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4\n#define GL_PROGRAM_POINT_SIZE_EXT         0x8642\n#endif\n\n#ifndef GL_EXT_geometry_shader4\n#define GL_GEOMETRY_SHADER_EXT            0x8DD9\n/* reuse GL_GEOMETRY_VERTICES_OUT_EXT */\n/* reuse GL_GEOMETRY_INPUT_TYPE_EXT */\n/* reuse GL_GEOMETRY_OUTPUT_TYPE_EXT */\n/* reuse GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT */\n#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD\n#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE\n#define GL_MAX_VARYING_COMPONENTS_EXT     0x8B4B\n#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF\n#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0\n#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1\n/* reuse GL_LINES_ADJACENCY_EXT */\n/* reuse GL_LINE_STRIP_ADJACENCY_EXT */\n/* reuse GL_TRIANGLES_ADJACENCY_EXT */\n/* reuse GL_TRIANGLE_STRIP_ADJACENCY_EXT */\n/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT */\n/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT */\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */\n/* reuse GL_PROGRAM_POINT_SIZE_EXT */\n#endif\n\n#ifndef GL_NV_vertex_program4\n#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD\n#endif\n\n#ifndef GL_EXT_gpu_shader4\n#define GL_SAMPLER_1D_ARRAY_EXT           0x8DC0\n#define GL_SAMPLER_2D_ARRAY_EXT           0x8DC1\n#define GL_SAMPLER_BUFFER_EXT             0x8DC2\n#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT    0x8DC3\n#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT    0x8DC4\n#define GL_SAMPLER_CUBE_SHADOW_EXT        0x8DC5\n#define GL_UNSIGNED_INT_VEC2_EXT          0x8DC6\n#define GL_UNSIGNED_INT_VEC3_EXT          0x8DC7\n#define GL_UNSIGNED_INT_VEC4_EXT          0x8DC8\n#define GL_INT_SAMPLER_1D_EXT             0x8DC9\n#define GL_INT_SAMPLER_2D_EXT             0x8DCA\n#define GL_INT_SAMPLER_3D_EXT             0x8DCB\n#define GL_INT_SAMPLER_CUBE_EXT           0x8DCC\n#define GL_INT_SAMPLER_2D_RECT_EXT        0x8DCD\n#define GL_INT_SAMPLER_1D_ARRAY_EXT       0x8DCE\n#define GL_INT_SAMPLER_2D_ARRAY_EXT       0x8DCF\n#define GL_INT_SAMPLER_BUFFER_EXT         0x8DD0\n#define GL_UNSIGNED_INT_SAMPLER_1D_EXT    0x8DD1\n#define GL_UNSIGNED_INT_SAMPLER_2D_EXT    0x8DD2\n#define GL_UNSIGNED_INT_SAMPLER_3D_EXT    0x8DD3\n#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT  0x8DD4\n#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5\n#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6\n#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7\n#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8\n#endif\n\n#ifndef GL_EXT_draw_instanced\n#endif\n\n#ifndef GL_EXT_packed_float\n#define GL_R11F_G11F_B10F_EXT             0x8C3A\n#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B\n#define GL_RGBA_SIGNED_COMPONENTS_EXT     0x8C3C\n#endif\n\n#ifndef GL_EXT_texture_array\n#define GL_TEXTURE_1D_ARRAY_EXT           0x8C18\n#define GL_PROXY_TEXTURE_1D_ARRAY_EXT     0x8C19\n#define GL_TEXTURE_2D_ARRAY_EXT           0x8C1A\n#define GL_PROXY_TEXTURE_2D_ARRAY_EXT     0x8C1B\n#define GL_TEXTURE_BINDING_1D_ARRAY_EXT   0x8C1C\n#define GL_TEXTURE_BINDING_2D_ARRAY_EXT   0x8C1D\n#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT   0x88FF\n#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E\n/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */\n#endif\n\n#ifndef GL_EXT_texture_buffer_object\n#define GL_TEXTURE_BUFFER_EXT             0x8C2A\n#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT    0x8C2B\n#define GL_TEXTURE_BINDING_BUFFER_EXT     0x8C2C\n#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D\n#define GL_TEXTURE_BUFFER_FORMAT_EXT      0x8C2E\n#endif\n\n#ifndef GL_EXT_texture_compression_latc\n#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70\n#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71\n#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72\n#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73\n#endif\n\n#ifndef GL_EXT_texture_compression_rgtc\n#define GL_COMPRESSED_RED_RGTC1_EXT       0x8DBB\n#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC\n#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD\n#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE\n#endif\n\n#ifndef GL_EXT_texture_shared_exponent\n#define GL_RGB9_E5_EXT                    0x8C3D\n#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT   0x8C3E\n#define GL_TEXTURE_SHARED_SIZE_EXT        0x8C3F\n#endif\n\n#ifndef GL_NV_depth_buffer_float\n#define GL_DEPTH_COMPONENT32F_NV          0x8DAB\n#define GL_DEPTH32F_STENCIL8_NV           0x8DAC\n#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD\n#define GL_DEPTH_BUFFER_FLOAT_MODE_NV     0x8DAF\n#endif\n\n#ifndef GL_NV_fragment_program4\n#endif\n\n#ifndef GL_NV_framebuffer_multisample_coverage\n#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB\n#define GL_RENDERBUFFER_COLOR_SAMPLES_NV  0x8E10\n#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11\n#define GL_MULTISAMPLE_COVERAGE_MODES_NV  0x8E12\n#endif\n\n#ifndef GL_EXT_framebuffer_sRGB\n#define GL_FRAMEBUFFER_SRGB_EXT           0x8DB9\n#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT   0x8DBA\n#endif\n\n#ifndef GL_NV_geometry_shader4\n#endif\n\n#ifndef GL_NV_parameter_buffer_object\n#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0\n#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1\n#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2\n#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3\n#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4\n#endif\n\n#ifndef GL_EXT_draw_buffers2\n#endif\n\n#ifndef GL_NV_transform_feedback\n#define GL_BACK_PRIMARY_COLOR_NV          0x8C77\n#define GL_BACK_SECONDARY_COLOR_NV        0x8C78\n#define GL_TEXTURE_COORD_NV               0x8C79\n#define GL_CLIP_DISTANCE_NV               0x8C7A\n#define GL_VERTEX_ID_NV                   0x8C7B\n#define GL_PRIMITIVE_ID_NV                0x8C7C\n#define GL_GENERIC_ATTRIB_NV              0x8C7D\n#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV  0x8C7E\n#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F\n#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80\n#define GL_ACTIVE_VARYINGS_NV             0x8C81\n#define GL_ACTIVE_VARYING_MAX_LENGTH_NV   0x8C82\n#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83\n#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84\n#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85\n#define GL_TRANSFORM_FEEDBACK_RECORD_NV   0x8C86\n#define GL_PRIMITIVES_GENERATED_NV        0x8C87\n#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88\n#define GL_RASTERIZER_DISCARD_NV          0x8C89\n#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A\n#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B\n#define GL_INTERLEAVED_ATTRIBS_NV         0x8C8C\n#define GL_SEPARATE_ATTRIBS_NV            0x8C8D\n#define GL_TRANSFORM_FEEDBACK_BUFFER_NV   0x8C8E\n#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F\n#define GL_LAYER_NV                       0x8DAA\n#define GL_NEXT_BUFFER_NV                 -2\n#define GL_SKIP_COMPONENTS4_NV            -3\n#define GL_SKIP_COMPONENTS3_NV            -4\n#define GL_SKIP_COMPONENTS2_NV            -5\n#define GL_SKIP_COMPONENTS1_NV            -6\n#endif\n\n#ifndef GL_EXT_bindable_uniform\n#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2\n#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3\n#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4\n#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT  0x8DED\n#define GL_UNIFORM_BUFFER_EXT             0x8DEE\n#define GL_UNIFORM_BUFFER_BINDING_EXT     0x8DEF\n#endif\n\n#ifndef GL_EXT_texture_integer\n#define GL_RGBA32UI_EXT                   0x8D70\n#define GL_RGB32UI_EXT                    0x8D71\n#define GL_ALPHA32UI_EXT                  0x8D72\n#define GL_INTENSITY32UI_EXT              0x8D73\n#define GL_LUMINANCE32UI_EXT              0x8D74\n#define GL_LUMINANCE_ALPHA32UI_EXT        0x8D75\n#define GL_RGBA16UI_EXT                   0x8D76\n#define GL_RGB16UI_EXT                    0x8D77\n#define GL_ALPHA16UI_EXT                  0x8D78\n#define GL_INTENSITY16UI_EXT              0x8D79\n#define GL_LUMINANCE16UI_EXT              0x8D7A\n#define GL_LUMINANCE_ALPHA16UI_EXT        0x8D7B\n#define GL_RGBA8UI_EXT                    0x8D7C\n#define GL_RGB8UI_EXT                     0x8D7D\n#define GL_ALPHA8UI_EXT                   0x8D7E\n#define GL_INTENSITY8UI_EXT               0x8D7F\n#define GL_LUMINANCE8UI_EXT               0x8D80\n#define GL_LUMINANCE_ALPHA8UI_EXT         0x8D81\n#define GL_RGBA32I_EXT                    0x8D82\n#define GL_RGB32I_EXT                     0x8D83\n#define GL_ALPHA32I_EXT                   0x8D84\n#define GL_INTENSITY32I_EXT               0x8D85\n#define GL_LUMINANCE32I_EXT               0x8D86\n#define GL_LUMINANCE_ALPHA32I_EXT         0x8D87\n#define GL_RGBA16I_EXT                    0x8D88\n#define GL_RGB16I_EXT                     0x8D89\n#define GL_ALPHA16I_EXT                   0x8D8A\n#define GL_INTENSITY16I_EXT               0x8D8B\n#define GL_LUMINANCE16I_EXT               0x8D8C\n#define GL_LUMINANCE_ALPHA16I_EXT         0x8D8D\n#define GL_RGBA8I_EXT                     0x8D8E\n#define GL_RGB8I_EXT                      0x8D8F\n#define GL_ALPHA8I_EXT                    0x8D90\n#define GL_INTENSITY8I_EXT                0x8D91\n#define GL_LUMINANCE8I_EXT                0x8D92\n#define GL_LUMINANCE_ALPHA8I_EXT          0x8D93\n#define GL_RED_INTEGER_EXT                0x8D94\n#define GL_GREEN_INTEGER_EXT              0x8D95\n#define GL_BLUE_INTEGER_EXT               0x8D96\n#define GL_ALPHA_INTEGER_EXT              0x8D97\n#define GL_RGB_INTEGER_EXT                0x8D98\n#define GL_RGBA_INTEGER_EXT               0x8D99\n#define GL_BGR_INTEGER_EXT                0x8D9A\n#define GL_BGRA_INTEGER_EXT               0x8D9B\n#define GL_LUMINANCE_INTEGER_EXT          0x8D9C\n#define GL_LUMINANCE_ALPHA_INTEGER_EXT    0x8D9D\n#define GL_RGBA_INTEGER_MODE_EXT          0x8D9E\n#endif\n\n#ifndef GL_GREMEDY_frame_terminator\n#endif\n\n#ifndef GL_NV_conditional_render\n#define GL_QUERY_WAIT_NV                  0x8E13\n#define GL_QUERY_NO_WAIT_NV               0x8E14\n#define GL_QUERY_BY_REGION_WAIT_NV        0x8E15\n#define GL_QUERY_BY_REGION_NO_WAIT_NV     0x8E16\n#endif\n\n#ifndef GL_NV_present_video\n#define GL_FRAME_NV                       0x8E26\n#define GL_FIELDS_NV                      0x8E27\n#define GL_CURRENT_TIME_NV                0x8E28\n#define GL_NUM_FILL_STREAMS_NV            0x8E29\n#define GL_PRESENT_TIME_NV                0x8E2A\n#define GL_PRESENT_DURATION_NV            0x8E2B\n#endif\n\n#ifndef GL_EXT_transform_feedback\n#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT  0x8C8E\n#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84\n#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85\n#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F\n#define GL_INTERLEAVED_ATTRIBS_EXT        0x8C8C\n#define GL_SEPARATE_ATTRIBS_EXT           0x8C8D\n#define GL_PRIMITIVES_GENERATED_EXT       0x8C87\n#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88\n#define GL_RASTERIZER_DISCARD_EXT         0x8C89\n#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A\n#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B\n#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80\n#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83\n#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F\n#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76\n#endif\n\n#ifndef GL_EXT_direct_state_access\n#define GL_PROGRAM_MATRIX_EXT             0x8E2D\n#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT   0x8E2E\n#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F\n#endif\n\n#ifndef GL_EXT_vertex_array_bgra\n/* reuse GL_BGRA */\n#endif\n\n#ifndef GL_EXT_texture_swizzle\n#define GL_TEXTURE_SWIZZLE_R_EXT          0x8E42\n#define GL_TEXTURE_SWIZZLE_G_EXT          0x8E43\n#define GL_TEXTURE_SWIZZLE_B_EXT          0x8E44\n#define GL_TEXTURE_SWIZZLE_A_EXT          0x8E45\n#define GL_TEXTURE_SWIZZLE_RGBA_EXT       0x8E46\n#endif\n\n#ifndef GL_NV_explicit_multisample\n#define GL_SAMPLE_POSITION_NV             0x8E50\n#define GL_SAMPLE_MASK_NV                 0x8E51\n#define GL_SAMPLE_MASK_VALUE_NV           0x8E52\n#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53\n#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54\n#define GL_TEXTURE_RENDERBUFFER_NV        0x8E55\n#define GL_SAMPLER_RENDERBUFFER_NV        0x8E56\n#define GL_INT_SAMPLER_RENDERBUFFER_NV    0x8E57\n#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58\n#define GL_MAX_SAMPLE_MASK_WORDS_NV       0x8E59\n#endif\n\n#ifndef GL_NV_transform_feedback2\n#define GL_TRANSFORM_FEEDBACK_NV          0x8E22\n#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23\n#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24\n#define GL_TRANSFORM_FEEDBACK_BINDING_NV  0x8E25\n#endif\n\n#ifndef GL_ATI_meminfo\n#define GL_VBO_FREE_MEMORY_ATI            0x87FB\n#define GL_TEXTURE_FREE_MEMORY_ATI        0x87FC\n#define GL_RENDERBUFFER_FREE_MEMORY_ATI   0x87FD\n#endif\n\n#ifndef GL_AMD_performance_monitor\n#define GL_COUNTER_TYPE_AMD               0x8BC0\n#define GL_COUNTER_RANGE_AMD              0x8BC1\n#define GL_UNSIGNED_INT64_AMD             0x8BC2\n#define GL_PERCENTAGE_AMD                 0x8BC3\n#define GL_PERFMON_RESULT_AVAILABLE_AMD   0x8BC4\n#define GL_PERFMON_RESULT_SIZE_AMD        0x8BC5\n#define GL_PERFMON_RESULT_AMD             0x8BC6\n#endif\n\n#ifndef GL_AMD_texture_texture4\n#endif\n\n#ifndef GL_AMD_vertex_shader_tessellator\n#define GL_SAMPLER_BUFFER_AMD             0x9001\n#define GL_INT_SAMPLER_BUFFER_AMD         0x9002\n#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003\n#define GL_TESSELLATION_MODE_AMD          0x9004\n#define GL_TESSELLATION_FACTOR_AMD        0x9005\n#define GL_DISCRETE_AMD                   0x9006\n#define GL_CONTINUOUS_AMD                 0x9007\n#endif\n\n#ifndef GL_EXT_provoking_vertex\n#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C\n#define GL_FIRST_VERTEX_CONVENTION_EXT    0x8E4D\n#define GL_LAST_VERTEX_CONVENTION_EXT     0x8E4E\n#define GL_PROVOKING_VERTEX_EXT           0x8E4F\n#endif\n\n#ifndef GL_EXT_texture_snorm\n#define GL_ALPHA_SNORM                    0x9010\n#define GL_LUMINANCE_SNORM                0x9011\n#define GL_LUMINANCE_ALPHA_SNORM          0x9012\n#define GL_INTENSITY_SNORM                0x9013\n#define GL_ALPHA8_SNORM                   0x9014\n#define GL_LUMINANCE8_SNORM               0x9015\n#define GL_LUMINANCE8_ALPHA8_SNORM        0x9016\n#define GL_INTENSITY8_SNORM               0x9017\n#define GL_ALPHA16_SNORM                  0x9018\n#define GL_LUMINANCE16_SNORM              0x9019\n#define GL_LUMINANCE16_ALPHA16_SNORM      0x901A\n#define GL_INTENSITY16_SNORM              0x901B\n/* reuse GL_RED_SNORM */\n/* reuse GL_RG_SNORM */\n/* reuse GL_RGB_SNORM */\n/* reuse GL_RGBA_SNORM */\n/* reuse GL_R8_SNORM */\n/* reuse GL_RG8_SNORM */\n/* reuse GL_RGB8_SNORM */\n/* reuse GL_RGBA8_SNORM */\n/* reuse GL_R16_SNORM */\n/* reuse GL_RG16_SNORM */\n/* reuse GL_RGB16_SNORM */\n/* reuse GL_RGBA16_SNORM */\n/* reuse GL_SIGNED_NORMALIZED */\n#endif\n\n#ifndef GL_AMD_draw_buffers_blend\n#endif\n\n#ifndef GL_APPLE_texture_range\n#define GL_TEXTURE_RANGE_LENGTH_APPLE     0x85B7\n#define GL_TEXTURE_RANGE_POINTER_APPLE    0x85B8\n#define GL_TEXTURE_STORAGE_HINT_APPLE     0x85BC\n#define GL_STORAGE_PRIVATE_APPLE          0x85BD\n/* reuse GL_STORAGE_CACHED_APPLE */\n/* reuse GL_STORAGE_SHARED_APPLE */\n#endif\n\n#ifndef GL_APPLE_float_pixels\n#define GL_HALF_APPLE                     0x140B\n#define GL_RGBA_FLOAT32_APPLE             0x8814\n#define GL_RGB_FLOAT32_APPLE              0x8815\n#define GL_ALPHA_FLOAT32_APPLE            0x8816\n#define GL_INTENSITY_FLOAT32_APPLE        0x8817\n#define GL_LUMINANCE_FLOAT32_APPLE        0x8818\n#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE  0x8819\n#define GL_RGBA_FLOAT16_APPLE             0x881A\n#define GL_RGB_FLOAT16_APPLE              0x881B\n#define GL_ALPHA_FLOAT16_APPLE            0x881C\n#define GL_INTENSITY_FLOAT16_APPLE        0x881D\n#define GL_LUMINANCE_FLOAT16_APPLE        0x881E\n#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE  0x881F\n#define GL_COLOR_FLOAT_APPLE              0x8A0F\n#endif\n\n#ifndef GL_APPLE_vertex_program_evaluators\n#define GL_VERTEX_ATTRIB_MAP1_APPLE       0x8A00\n#define GL_VERTEX_ATTRIB_MAP2_APPLE       0x8A01\n#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE  0x8A02\n#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03\n#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04\n#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05\n#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE  0x8A06\n#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07\n#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08\n#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09\n#endif\n\n#ifndef GL_APPLE_aux_depth_stencil\n#define GL_AUX_DEPTH_STENCIL_APPLE        0x8A14\n#endif\n\n#ifndef GL_APPLE_object_purgeable\n#define GL_BUFFER_OBJECT_APPLE            0x85B3\n#define GL_RELEASED_APPLE                 0x8A19\n#define GL_VOLATILE_APPLE                 0x8A1A\n#define GL_RETAINED_APPLE                 0x8A1B\n#define GL_UNDEFINED_APPLE                0x8A1C\n#define GL_PURGEABLE_APPLE                0x8A1D\n#endif\n\n#ifndef GL_APPLE_row_bytes\n#define GL_PACK_ROW_BYTES_APPLE           0x8A15\n#define GL_UNPACK_ROW_BYTES_APPLE         0x8A16\n#endif\n\n#ifndef GL_APPLE_rgb_422\n#define GL_RGB_422_APPLE                  0x8A1F\n/* reuse GL_UNSIGNED_SHORT_8_8_APPLE */\n/* reuse GL_UNSIGNED_SHORT_8_8_REV_APPLE */\n#endif\n\n#ifndef GL_NV_video_capture\n#define GL_VIDEO_BUFFER_NV                0x9020\n#define GL_VIDEO_BUFFER_BINDING_NV        0x9021\n#define GL_FIELD_UPPER_NV                 0x9022\n#define GL_FIELD_LOWER_NV                 0x9023\n#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV   0x9024\n#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025\n#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026\n#define GL_LAST_VIDEO_CAPTURE_STATUS_NV   0x9027\n#define GL_VIDEO_BUFFER_PITCH_NV          0x9028\n#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029\n#define GL_VIDEO_COLOR_CONVERSION_MAX_NV  0x902A\n#define GL_VIDEO_COLOR_CONVERSION_MIN_NV  0x902B\n#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C\n#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D\n#define GL_PARTIAL_SUCCESS_NV             0x902E\n#define GL_SUCCESS_NV                     0x902F\n#define GL_FAILURE_NV                     0x9030\n#define GL_YCBYCR8_422_NV                 0x9031\n#define GL_YCBAYCR8A_4224_NV              0x9032\n#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV  0x9033\n#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034\n#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV  0x9035\n#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036\n#define GL_Z4Y12Z4CB12Z4CR12_444_NV       0x9037\n#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV   0x9038\n#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV  0x9039\n#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A\n#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B\n#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C\n#endif\n\n#ifndef GL_NV_copy_image\n#endif\n\n#ifndef GL_EXT_separate_shader_objects\n#define GL_ACTIVE_PROGRAM_EXT             0x8B8D\n#endif\n\n#ifndef GL_NV_parameter_buffer_object2\n#endif\n\n#ifndef GL_NV_shader_buffer_load\n#define GL_BUFFER_GPU_ADDRESS_NV          0x8F1D\n#define GL_GPU_ADDRESS_NV                 0x8F34\n#define GL_MAX_SHADER_BUFFER_ADDRESS_NV   0x8F35\n#endif\n\n#ifndef GL_NV_vertex_buffer_unified_memory\n#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E\n#define GL_ELEMENT_ARRAY_UNIFIED_NV       0x8F1F\n#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20\n#define GL_VERTEX_ARRAY_ADDRESS_NV        0x8F21\n#define GL_NORMAL_ARRAY_ADDRESS_NV        0x8F22\n#define GL_COLOR_ARRAY_ADDRESS_NV         0x8F23\n#define GL_INDEX_ARRAY_ADDRESS_NV         0x8F24\n#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25\n#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV     0x8F26\n#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27\n#define GL_FOG_COORD_ARRAY_ADDRESS_NV     0x8F28\n#define GL_ELEMENT_ARRAY_ADDRESS_NV       0x8F29\n#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV  0x8F2A\n#define GL_VERTEX_ARRAY_LENGTH_NV         0x8F2B\n#define GL_NORMAL_ARRAY_LENGTH_NV         0x8F2C\n#define GL_COLOR_ARRAY_LENGTH_NV          0x8F2D\n#define GL_INDEX_ARRAY_LENGTH_NV          0x8F2E\n#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV  0x8F2F\n#define GL_EDGE_FLAG_ARRAY_LENGTH_NV      0x8F30\n#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31\n#define GL_FOG_COORD_ARRAY_LENGTH_NV      0x8F32\n#define GL_ELEMENT_ARRAY_LENGTH_NV        0x8F33\n#define GL_DRAW_INDIRECT_UNIFIED_NV       0x8F40\n#define GL_DRAW_INDIRECT_ADDRESS_NV       0x8F41\n#define GL_DRAW_INDIRECT_LENGTH_NV        0x8F42\n#endif\n\n#ifndef GL_NV_texture_barrier\n#endif\n\n#ifndef GL_AMD_shader_stencil_export\n#endif\n\n#ifndef GL_AMD_seamless_cubemap_per_texture\n/* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS */\n#endif\n\n#ifndef GL_AMD_conservative_depth\n#endif\n\n#ifndef GL_EXT_shader_image_load_store\n#define GL_MAX_IMAGE_UNITS_EXT            0x8F38\n#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39\n#define GL_IMAGE_BINDING_NAME_EXT         0x8F3A\n#define GL_IMAGE_BINDING_LEVEL_EXT        0x8F3B\n#define GL_IMAGE_BINDING_LAYERED_EXT      0x8F3C\n#define GL_IMAGE_BINDING_LAYER_EXT        0x8F3D\n#define GL_IMAGE_BINDING_ACCESS_EXT       0x8F3E\n#define GL_IMAGE_1D_EXT                   0x904C\n#define GL_IMAGE_2D_EXT                   0x904D\n#define GL_IMAGE_3D_EXT                   0x904E\n#define GL_IMAGE_2D_RECT_EXT              0x904F\n#define GL_IMAGE_CUBE_EXT                 0x9050\n#define GL_IMAGE_BUFFER_EXT               0x9051\n#define GL_IMAGE_1D_ARRAY_EXT             0x9052\n#define GL_IMAGE_2D_ARRAY_EXT             0x9053\n#define GL_IMAGE_CUBE_MAP_ARRAY_EXT       0x9054\n#define GL_IMAGE_2D_MULTISAMPLE_EXT       0x9055\n#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056\n#define GL_INT_IMAGE_1D_EXT               0x9057\n#define GL_INT_IMAGE_2D_EXT               0x9058\n#define GL_INT_IMAGE_3D_EXT               0x9059\n#define GL_INT_IMAGE_2D_RECT_EXT          0x905A\n#define GL_INT_IMAGE_CUBE_EXT             0x905B\n#define GL_INT_IMAGE_BUFFER_EXT           0x905C\n#define GL_INT_IMAGE_1D_ARRAY_EXT         0x905D\n#define GL_INT_IMAGE_2D_ARRAY_EXT         0x905E\n#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT   0x905F\n#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT   0x9060\n#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061\n#define GL_UNSIGNED_INT_IMAGE_1D_EXT      0x9062\n#define GL_UNSIGNED_INT_IMAGE_2D_EXT      0x9063\n#define GL_UNSIGNED_INT_IMAGE_3D_EXT      0x9064\n#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065\n#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT    0x9066\n#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT  0x9067\n#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068\n#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069\n#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A\n#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B\n#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C\n#define GL_MAX_IMAGE_SAMPLES_EXT          0x906D\n#define GL_IMAGE_BINDING_FORMAT_EXT       0x906E\n#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001\n#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT  0x00000002\n#define GL_UNIFORM_BARRIER_BIT_EXT        0x00000004\n#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT  0x00000008\n#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020\n#define GL_COMMAND_BARRIER_BIT_EXT        0x00000040\n#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT   0x00000080\n#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100\n#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT  0x00000200\n#define GL_FRAMEBUFFER_BARRIER_BIT_EXT    0x00000400\n#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800\n#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000\n#define GL_ALL_BARRIER_BITS_EXT           0xFFFFFFFF\n#endif\n\n#ifndef GL_EXT_vertex_attrib_64bit\n/* reuse GL_DOUBLE */\n#define GL_DOUBLE_VEC2_EXT                0x8FFC\n#define GL_DOUBLE_VEC3_EXT                0x8FFD\n#define GL_DOUBLE_VEC4_EXT                0x8FFE\n#define GL_DOUBLE_MAT2_EXT                0x8F46\n#define GL_DOUBLE_MAT3_EXT                0x8F47\n#define GL_DOUBLE_MAT4_EXT                0x8F48\n#define GL_DOUBLE_MAT2x3_EXT              0x8F49\n#define GL_DOUBLE_MAT2x4_EXT              0x8F4A\n#define GL_DOUBLE_MAT3x2_EXT              0x8F4B\n#define GL_DOUBLE_MAT3x4_EXT              0x8F4C\n#define GL_DOUBLE_MAT4x2_EXT              0x8F4D\n#define GL_DOUBLE_MAT4x3_EXT              0x8F4E\n#endif\n\n#ifndef GL_NV_gpu_program5\n#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A\n#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B\n#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C\n#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D\n#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E\n#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F\n#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44\n#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV  0x8F45\n#endif\n\n#ifndef GL_NV_gpu_shader5\n#define GL_INT64_NV                       0x140E\n#define GL_UNSIGNED_INT64_NV              0x140F\n#define GL_INT8_NV                        0x8FE0\n#define GL_INT8_VEC2_NV                   0x8FE1\n#define GL_INT8_VEC3_NV                   0x8FE2\n#define GL_INT8_VEC4_NV                   0x8FE3\n#define GL_INT16_NV                       0x8FE4\n#define GL_INT16_VEC2_NV                  0x8FE5\n#define GL_INT16_VEC3_NV                  0x8FE6\n#define GL_INT16_VEC4_NV                  0x8FE7\n#define GL_INT64_VEC2_NV                  0x8FE9\n#define GL_INT64_VEC3_NV                  0x8FEA\n#define GL_INT64_VEC4_NV                  0x8FEB\n#define GL_UNSIGNED_INT8_NV               0x8FEC\n#define GL_UNSIGNED_INT8_VEC2_NV          0x8FED\n#define GL_UNSIGNED_INT8_VEC3_NV          0x8FEE\n#define GL_UNSIGNED_INT8_VEC4_NV          0x8FEF\n#define GL_UNSIGNED_INT16_NV              0x8FF0\n#define GL_UNSIGNED_INT16_VEC2_NV         0x8FF1\n#define GL_UNSIGNED_INT16_VEC3_NV         0x8FF2\n#define GL_UNSIGNED_INT16_VEC4_NV         0x8FF3\n#define GL_UNSIGNED_INT64_VEC2_NV         0x8FF5\n#define GL_UNSIGNED_INT64_VEC3_NV         0x8FF6\n#define GL_UNSIGNED_INT64_VEC4_NV         0x8FF7\n#define GL_FLOAT16_NV                     0x8FF8\n#define GL_FLOAT16_VEC2_NV                0x8FF9\n#define GL_FLOAT16_VEC3_NV                0x8FFA\n#define GL_FLOAT16_VEC4_NV                0x8FFB\n/* reuse GL_PATCHES */\n#endif\n\n#ifndef GL_NV_shader_buffer_store\n#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010\n/* reuse GL_READ_WRITE */\n/* reuse GL_WRITE_ONLY */\n#endif\n\n#ifndef GL_NV_tessellation_program5\n#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV   0x86D8\n#define GL_TESS_CONTROL_PROGRAM_NV        0x891E\n#define GL_TESS_EVALUATION_PROGRAM_NV     0x891F\n#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74\n#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75\n#endif\n\n#ifndef GL_NV_vertex_attrib_integer_64bit\n/* reuse GL_INT64_NV */\n/* reuse GL_UNSIGNED_INT64_NV */\n#endif\n\n#ifndef GL_NV_multisample_coverage\n#define GL_COLOR_SAMPLES_NV               0x8E20\n/* reuse GL_SAMPLES_ARB */\n#endif\n\n#ifndef GL_AMD_name_gen_delete\n#define GL_DATA_BUFFER_AMD                0x9151\n#define GL_PERFORMANCE_MONITOR_AMD        0x9152\n#define GL_QUERY_OBJECT_AMD               0x9153\n#define GL_VERTEX_ARRAY_OBJECT_AMD        0x9154\n#define GL_SAMPLER_OBJECT_AMD             0x9155\n#endif\n\n#ifndef GL_AMD_debug_output\n#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD   0x9143\n#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD  0x9144\n#define GL_DEBUG_LOGGED_MESSAGES_AMD      0x9145\n#define GL_DEBUG_SEVERITY_HIGH_AMD        0x9146\n#define GL_DEBUG_SEVERITY_MEDIUM_AMD      0x9147\n#define GL_DEBUG_SEVERITY_LOW_AMD         0x9148\n#define GL_DEBUG_CATEGORY_API_ERROR_AMD   0x9149\n#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A\n#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B\n#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C\n#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D\n#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E\n#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F\n#define GL_DEBUG_CATEGORY_OTHER_AMD       0x9150\n#endif\n\n#ifndef GL_NV_vdpau_interop\n#define GL_SURFACE_STATE_NV               0x86EB\n#define GL_SURFACE_REGISTERED_NV          0x86FD\n#define GL_SURFACE_MAPPED_NV              0x8700\n#define GL_WRITE_DISCARD_NV               0x88BE\n#endif\n\n#ifndef GL_AMD_transform_feedback3_lines_triangles\n#endif\n\n#ifndef GL_AMD_depth_clamp_separate\n#define GL_DEPTH_CLAMP_NEAR_AMD           0x901E\n#define GL_DEPTH_CLAMP_FAR_AMD            0x901F\n#endif\n\n#ifndef GL_EXT_texture_sRGB_decode\n#define GL_TEXTURE_SRGB_DECODE_EXT        0x8A48\n#define GL_DECODE_EXT                     0x8A49\n#define GL_SKIP_DECODE_EXT                0x8A4A\n#endif\n\n#ifndef GL_NV_texture_multisample\n#define GL_TEXTURE_COVERAGE_SAMPLES_NV    0x9045\n#define GL_TEXTURE_COLOR_SAMPLES_NV       0x9046\n#endif\n\n#ifndef GL_AMD_blend_minmax_factor\n#define GL_FACTOR_MIN_AMD                 0x901C\n#define GL_FACTOR_MAX_AMD                 0x901D\n#endif\n\n#ifndef GL_AMD_sample_positions\n#define GL_SUBSAMPLE_DISTANCE_AMD         0x883F\n#endif\n\n#ifndef GL_EXT_x11_sync_object\n#define GL_SYNC_X11_FENCE_EXT             0x90E1\n#endif\n\n#ifndef GL_AMD_multi_draw_indirect\n#endif\n\n#ifndef GL_EXT_framebuffer_multisample_blit_scaled\n#define GL_SCALED_RESOLVE_FASTEST_EXT     0x90BA\n#define GL_SCALED_RESOLVE_NICEST_EXT      0x90BB\n#endif\n\n#ifndef GL_NV_path_rendering\n#define GL_PATH_FORMAT_SVG_NV             0x9070\n#define GL_PATH_FORMAT_PS_NV              0x9071\n#define GL_STANDARD_FONT_NAME_NV          0x9072\n#define GL_SYSTEM_FONT_NAME_NV            0x9073\n#define GL_FILE_NAME_NV                   0x9074\n#define GL_PATH_STROKE_WIDTH_NV           0x9075\n#define GL_PATH_END_CAPS_NV               0x9076\n#define GL_PATH_INITIAL_END_CAP_NV        0x9077\n#define GL_PATH_TERMINAL_END_CAP_NV       0x9078\n#define GL_PATH_JOIN_STYLE_NV             0x9079\n#define GL_PATH_MITER_LIMIT_NV            0x907A\n#define GL_PATH_DASH_CAPS_NV              0x907B\n#define GL_PATH_INITIAL_DASH_CAP_NV       0x907C\n#define GL_PATH_TERMINAL_DASH_CAP_NV      0x907D\n#define GL_PATH_DASH_OFFSET_NV            0x907E\n#define GL_PATH_CLIENT_LENGTH_NV          0x907F\n#define GL_PATH_FILL_MODE_NV              0x9080\n#define GL_PATH_FILL_MASK_NV              0x9081\n#define GL_PATH_FILL_COVER_MODE_NV        0x9082\n#define GL_PATH_STROKE_COVER_MODE_NV      0x9083\n#define GL_PATH_STROKE_MASK_NV            0x9084\n#define GL_COUNT_UP_NV                    0x9088\n#define GL_COUNT_DOWN_NV                  0x9089\n#define GL_PATH_OBJECT_BOUNDING_BOX_NV    0x908A\n#define GL_CONVEX_HULL_NV                 0x908B\n#define GL_BOUNDING_BOX_NV                0x908D\n#define GL_TRANSLATE_X_NV                 0x908E\n#define GL_TRANSLATE_Y_NV                 0x908F\n#define GL_TRANSLATE_2D_NV                0x9090\n#define GL_TRANSLATE_3D_NV                0x9091\n#define GL_AFFINE_2D_NV                   0x9092\n#define GL_AFFINE_3D_NV                   0x9094\n#define GL_TRANSPOSE_AFFINE_2D_NV         0x9096\n#define GL_TRANSPOSE_AFFINE_3D_NV         0x9098\n#define GL_UTF8_NV                        0x909A\n#define GL_UTF16_NV                       0x909B\n#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C\n#define GL_PATH_COMMAND_COUNT_NV          0x909D\n#define GL_PATH_COORD_COUNT_NV            0x909E\n#define GL_PATH_DASH_ARRAY_COUNT_NV       0x909F\n#define GL_PATH_COMPUTED_LENGTH_NV        0x90A0\n#define GL_PATH_FILL_BOUNDING_BOX_NV      0x90A1\n#define GL_PATH_STROKE_BOUNDING_BOX_NV    0x90A2\n#define GL_SQUARE_NV                      0x90A3\n#define GL_ROUND_NV                       0x90A4\n#define GL_TRIANGULAR_NV                  0x90A5\n#define GL_BEVEL_NV                       0x90A6\n#define GL_MITER_REVERT_NV                0x90A7\n#define GL_MITER_TRUNCATE_NV              0x90A8\n#define GL_SKIP_MISSING_GLYPH_NV          0x90A9\n#define GL_USE_MISSING_GLYPH_NV           0x90AA\n#define GL_PATH_ERROR_POSITION_NV         0x90AB\n#define GL_PATH_FOG_GEN_MODE_NV           0x90AC\n#define GL_ACCUM_ADJACENT_PAIRS_NV        0x90AD\n#define GL_ADJACENT_PAIRS_NV              0x90AE\n#define GL_FIRST_TO_REST_NV               0x90AF\n#define GL_PATH_GEN_MODE_NV               0x90B0\n#define GL_PATH_GEN_COEFF_NV              0x90B1\n#define GL_PATH_GEN_COLOR_FORMAT_NV       0x90B2\n#define GL_PATH_GEN_COMPONENTS_NV         0x90B3\n#define GL_PATH_STENCIL_FUNC_NV           0x90B7\n#define GL_PATH_STENCIL_REF_NV            0x90B8\n#define GL_PATH_STENCIL_VALUE_MASK_NV     0x90B9\n#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD\n#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE\n#define GL_PATH_COVER_DEPTH_FUNC_NV       0x90BF\n#define GL_PATH_DASH_OFFSET_RESET_NV      0x90B4\n#define GL_MOVE_TO_RESETS_NV              0x90B5\n#define GL_MOVE_TO_CONTINUES_NV           0x90B6\n#define GL_CLOSE_PATH_NV                  0x00\n#define GL_MOVE_TO_NV                     0x02\n#define GL_RELATIVE_MOVE_TO_NV            0x03\n#define GL_LINE_TO_NV                     0x04\n#define GL_RELATIVE_LINE_TO_NV            0x05\n#define GL_HORIZONTAL_LINE_TO_NV          0x06\n#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07\n#define GL_VERTICAL_LINE_TO_NV            0x08\n#define GL_RELATIVE_VERTICAL_LINE_TO_NV   0x09\n#define GL_QUADRATIC_CURVE_TO_NV          0x0A\n#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B\n#define GL_CUBIC_CURVE_TO_NV              0x0C\n#define GL_RELATIVE_CUBIC_CURVE_TO_NV     0x0D\n#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV   0x0E\n#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F\n#define GL_SMOOTH_CUBIC_CURVE_TO_NV       0x10\n#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11\n#define GL_SMALL_CCW_ARC_TO_NV            0x12\n#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV   0x13\n#define GL_SMALL_CW_ARC_TO_NV             0x14\n#define GL_RELATIVE_SMALL_CW_ARC_TO_NV    0x15\n#define GL_LARGE_CCW_ARC_TO_NV            0x16\n#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV   0x17\n#define GL_LARGE_CW_ARC_TO_NV             0x18\n#define GL_RELATIVE_LARGE_CW_ARC_TO_NV    0x19\n#define GL_RESTART_PATH_NV                0xF0\n#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV    0xF2\n#define GL_DUP_LAST_CUBIC_CURVE_TO_NV     0xF4\n#define GL_RECT_NV                        0xF6\n#define GL_CIRCULAR_CCW_ARC_TO_NV         0xF8\n#define GL_CIRCULAR_CW_ARC_TO_NV          0xFA\n#define GL_CIRCULAR_TANGENT_ARC_TO_NV     0xFC\n#define GL_ARC_TO_NV                      0xFE\n#define GL_RELATIVE_ARC_TO_NV             0xFF\n#define GL_BOLD_BIT_NV                    0x01\n#define GL_ITALIC_BIT_NV                  0x02\n#define GL_GLYPH_WIDTH_BIT_NV             0x01\n#define GL_GLYPH_HEIGHT_BIT_NV            0x02\n#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04\n#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08\n#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10\n#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20\n#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40\n#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80\n#define GL_GLYPH_HAS_KERNING_BIT_NV       0x100\n#define GL_FONT_X_MIN_BOUNDS_BIT_NV       0x00010000\n#define GL_FONT_Y_MIN_BOUNDS_BIT_NV       0x00020000\n#define GL_FONT_X_MAX_BOUNDS_BIT_NV       0x00040000\n#define GL_FONT_Y_MAX_BOUNDS_BIT_NV       0x00080000\n#define GL_FONT_UNITS_PER_EM_BIT_NV       0x00100000\n#define GL_FONT_ASCENDER_BIT_NV           0x00200000\n#define GL_FONT_DESCENDER_BIT_NV          0x00400000\n#define GL_FONT_HEIGHT_BIT_NV             0x00800000\n#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV  0x01000000\n#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000\n#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000\n#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000\n#define GL_FONT_HAS_KERNING_BIT_NV        0x10000000\n/* reuse GL_PRIMARY_COLOR */\n/* reuse GL_PRIMARY_COLOR_NV */\n/* reuse GL_SECONDARY_COLOR_NV */\n#endif\n\n#ifndef GL_AMD_pinned_memory\n#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160\n#endif\n\n#ifndef GL_AMD_stencil_operation_extended\n#define GL_SET_AMD                        0x874A\n#define GL_REPLACE_VALUE_AMD              0x874B\n#define GL_STENCIL_OP_VALUE_AMD           0x874C\n#define GL_STENCIL_BACK_OP_VALUE_AMD      0x874D\n#endif\n\n#ifndef GL_AMD_vertex_shader_viewport_index\n#endif\n\n#ifndef GL_AMD_vertex_shader_layer\n#endif\n\n#ifndef GL_NV_bindless_texture\n#endif\n\n#ifndef GL_NV_shader_atomic_float\n#endif\n\n#ifndef GL_AMD_query_buffer_object\n#define GL_QUERY_BUFFER_AMD               0x9192\n#define GL_QUERY_BUFFER_BINDING_AMD       0x9193\n#define GL_QUERY_RESULT_NO_WAIT_AMD       0x9194\n#endif\n\n#ifndef GL_NV_compute_program5\n#define GL_COMPUTE_PROGRAM_NV             0x90FB\n#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC\n#endif\n\n#ifndef GL_NV_shader_storage_buffer_object\n#endif\n\n#ifndef GL_NV_shader_atomic_counters\n#endif\n\n#ifndef GL_NV_deep_texture3D\n#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0\n#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV   0x90D1\n#endif\n\n#ifndef GL_NVX_conditional_render\n#endif\n\n#ifndef GL_AMD_sparse_texture\n#define GL_VIRTUAL_PAGE_SIZE_X_AMD        0x9195\n#define GL_VIRTUAL_PAGE_SIZE_Y_AMD        0x9196\n#define GL_VIRTUAL_PAGE_SIZE_Z_AMD        0x9197\n#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD    0x9198\n#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199\n#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A\n#define GL_MIN_SPARSE_LEVEL_AMD           0x919B\n#define GL_MIN_LOD_WARNING_AMD            0x919C\n#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001\n#endif\n\n#ifndef GL_AMD_shader_trinary_minmax\n#endif\n\n#ifndef GL_INTEL_map_texture\n#define GL_TEXTURE_MEMORY_LAYOUT_INTEL    0x83FF\n#define GL_LAYOUT_DEFAULT_INTEL           0\n#define GL_LAYOUT_LINEAR_INTEL            1\n#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2\n#endif\n\n#ifndef GL_NV_draw_texture\n#endif\n\n\n/*************************************************************/\n\n#include <stddef.h>\n#ifndef GL_VERSION_2_0\n/* GL type for program/shader text */\ntypedef char GLchar;\n#endif\n\n#ifndef GL_VERSION_1_5\n/* GL types for handling large vertex buffer objects */\ntypedef ptrdiff_t GLintptr;\ntypedef ptrdiff_t GLsizeiptr;\n#endif\n\n#ifndef GL_ARB_vertex_buffer_object\n/* GL types for handling large vertex buffer objects */\ntypedef ptrdiff_t GLintptrARB;\ntypedef ptrdiff_t GLsizeiptrARB;\n#endif\n\n#ifndef GL_ARB_shader_objects\n/* GL types for program/shader text and shader object handles */\ntypedef char GLcharARB;\ntypedef unsigned int GLhandleARB;\n#endif\n\n/* GL type for \"half\" precision (s10e5) float data in host memory */\n#ifndef GL_ARB_half_float_pixel\ntypedef unsigned short GLhalfARB;\n#endif\n\n#ifndef GL_NV_half_float\ntypedef unsigned short GLhalfNV;\n#endif\n\n#ifndef GLEXT_64_TYPES_DEFINED\n/* This code block is duplicated in glxext.h, so must be protected */\n#define GLEXT_64_TYPES_DEFINED\n/* Define int32_t, int64_t, and uint64_t types for UST/MSC */\n/* (as used in the GL_EXT_timer_query extension). */\n#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L\n#include <inttypes.h>\n#elif defined(__sun__) || defined(__digital__)\n#include <inttypes.h>\n#if defined(__STDC__)\n#if defined(__arch64__) || defined(_LP64)\ntypedef long int int64_t;\ntypedef unsigned long int uint64_t;\n#else\ntypedef long long int int64_t;\ntypedef unsigned long long int uint64_t;\n#endif /* __arch64__ */\n#endif /* __STDC__ */\n#elif defined( __VMS ) || defined(__sgi)\n#include <inttypes.h>\n#elif defined(__SCO__) || defined(__USLC__)\n#include <stdint.h>\n#elif defined(__UNIXOS2__) || defined(__SOL64__)\ntypedef long int int32_t;\ntypedef long long int int64_t;\ntypedef unsigned long long int uint64_t;\n#elif defined(_WIN32) && defined(__GNUC__)\n#include <stdint.h>\n#elif defined(_WIN32)\ntypedef __int32 int32_t;\ntypedef __int64 int64_t;\ntypedef unsigned __int64 uint64_t;\n#else\n/* Fallback if nothing above works */\n#include <inttypes.h>\n#endif\n#endif\n\n#ifndef GL_EXT_timer_query\ntypedef int64_t GLint64EXT;\ntypedef uint64_t GLuint64EXT;\n#endif\n\n#ifndef GL_ARB_sync\ntypedef int64_t GLint64;\ntypedef uint64_t GLuint64;\ntypedef struct __GLsync *GLsync;\n#endif\n\n#ifndef GL_ARB_cl_event\n/* These incomplete types let us declare types compatible with OpenCL's cl_context and cl_event */\nstruct _cl_context;\nstruct _cl_event;\n#endif\n\n#ifndef GL_ARB_debug_output\ntypedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam);\n#endif\n\n#ifndef GL_AMD_debug_output\ntypedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam);\n#endif\n\n#ifndef GL_KHR_debug\ntypedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam);\n#endif\n\n#ifndef GL_NV_vdpau_interop\ntypedef GLintptr GLvdpauSurfaceNV;\n#endif\n\n#ifndef GL_OES_fixed_point\n/* GLint must be 32 bits, a relatively safe assumption on modern CPUs */\ntypedef GLint GLfixed;\n#endif\n\n#ifndef GL_VERSION_1_2\n#define GL_VERSION_1_2 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);\nGLAPI void APIENTRY glBlendEquation (GLenum mode);\nGLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);\nGLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);\nGLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);\nGLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, GLvoid *table);\nGLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);\nGLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);\nGLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);\nGLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);\nGLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params);\nGLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params);\nGLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);\nGLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, GLvoid *image);\nGLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);\nGLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);\nGLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);\nGLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);\nGLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);\nGLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink);\nGLAPI void APIENTRY glResetHistogram (GLenum target);\nGLAPI void APIENTRY glResetMinmax (GLenum target);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);\ntypedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);\ntypedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);\ntypedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);\ntypedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);\ntypedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);\ntypedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);\ntypedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);\ntypedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);\ntypedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);\ntypedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params);\ntypedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params);\ntypedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);\ntypedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);\ntypedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);\ntypedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);\ntypedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);\ntypedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);\ntypedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);\ntypedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink);\ntypedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target);\ntypedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target);\n#endif\n\n#ifndef GL_VERSION_1_3\n#define GL_VERSION_1_3 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glActiveTexture (GLenum texture);\nGLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert);\nGLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);\nGLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);\nGLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);\nGLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);\nGLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);\nGLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);\nGLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, GLvoid *img);\nGLAPI void APIENTRY glClientActiveTexture (GLenum texture);\nGLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s);\nGLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v);\nGLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s);\nGLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v);\nGLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s);\nGLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v);\nGLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s);\nGLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v);\nGLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t);\nGLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v);\nGLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t);\nGLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v);\nGLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t);\nGLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v);\nGLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t);\nGLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v);\nGLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r);\nGLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v);\nGLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r);\nGLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v);\nGLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r);\nGLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v);\nGLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r);\nGLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v);\nGLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);\nGLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v);\nGLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);\nGLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v);\nGLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q);\nGLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v);\nGLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);\nGLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v);\nGLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m);\nGLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m);\nGLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m);\nGLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);\ntypedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img);\ntypedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v);\ntypedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m);\ntypedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m);\ntypedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m);\ntypedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m);\n#endif\n\n#ifndef GL_VERSION_1_4\n#define GL_VERSION_1_4 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);\nGLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);\nGLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount);\nGLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param);\nGLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param);\nGLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params);\nGLAPI void APIENTRY glFogCoordf (GLfloat coord);\nGLAPI void APIENTRY glFogCoordfv (const GLfloat *coord);\nGLAPI void APIENTRY glFogCoordd (GLdouble coord);\nGLAPI void APIENTRY glFogCoorddv (const GLdouble *coord);\nGLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const GLvoid *pointer);\nGLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue);\nGLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v);\nGLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue);\nGLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v);\nGLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue);\nGLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v);\nGLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue);\nGLAPI void APIENTRY glSecondaryColor3iv (const GLint *v);\nGLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue);\nGLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v);\nGLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue);\nGLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v);\nGLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue);\nGLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v);\nGLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue);\nGLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v);\nGLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\nGLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y);\nGLAPI void APIENTRY glWindowPos2dv (const GLdouble *v);\nGLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y);\nGLAPI void APIENTRY glWindowPos2fv (const GLfloat *v);\nGLAPI void APIENTRY glWindowPos2i (GLint x, GLint y);\nGLAPI void APIENTRY glWindowPos2iv (const GLint *v);\nGLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y);\nGLAPI void APIENTRY glWindowPos2sv (const GLshort *v);\nGLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z);\nGLAPI void APIENTRY glWindowPos3dv (const GLdouble *v);\nGLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glWindowPos3fv (const GLfloat *v);\nGLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z);\nGLAPI void APIENTRY glWindowPos3iv (const GLint *v);\nGLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z);\nGLAPI void APIENTRY glWindowPos3sv (const GLshort *v);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);\ntypedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount);\ntypedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount);\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord);\ntypedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord);\ntypedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord);\ntypedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord);\ntypedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v);\n#endif\n\n#ifndef GL_VERSION_1_5\n#define GL_VERSION_1_5 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids);\nGLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids);\nGLAPI GLboolean APIENTRY glIsQuery (GLuint id);\nGLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id);\nGLAPI void APIENTRY glEndQuery (GLenum target);\nGLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params);\nGLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer);\nGLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers);\nGLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers);\nGLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer);\nGLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);\nGLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);\nGLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);\nGLAPI GLvoid* APIENTRY glMapBuffer (GLenum target, GLenum access);\nGLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target);\nGLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, GLvoid* *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids);\ntypedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids);\ntypedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id);\ntypedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);\ntypedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target);\ntypedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params);\ntypedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);\ntypedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);\ntypedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);\ntypedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);\ntypedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);\ntypedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);\ntypedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);\ntypedef GLvoid* (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access);\ntypedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target);\ntypedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params);\n#endif\n\n#ifndef GL_VERSION_2_0\n#define GL_VERSION_2_0 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha);\nGLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs);\nGLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);\nGLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask);\nGLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask);\nGLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader);\nGLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name);\nGLAPI void APIENTRY glCompileShader (GLuint shader);\nGLAPI GLuint APIENTRY glCreateProgram (void);\nGLAPI GLuint APIENTRY glCreateShader (GLenum type);\nGLAPI void APIENTRY glDeleteProgram (GLuint program);\nGLAPI void APIENTRY glDeleteShader (GLuint shader);\nGLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader);\nGLAPI void APIENTRY glDisableVertexAttribArray (GLuint index);\nGLAPI void APIENTRY glEnableVertexAttribArray (GLuint index);\nGLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);\nGLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);\nGLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj);\nGLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name);\nGLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);\nGLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);\nGLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);\nGLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name);\nGLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params);\nGLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params);\nGLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params);\nGLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid* *pointer);\nGLAPI GLboolean APIENTRY glIsProgram (GLuint program);\nGLAPI GLboolean APIENTRY glIsShader (GLuint shader);\nGLAPI void APIENTRY glLinkProgram (GLuint program);\nGLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const *string, const GLint *length);\nGLAPI void APIENTRY glUseProgram (GLuint program);\nGLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0);\nGLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1);\nGLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);\nGLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);\nGLAPI void APIENTRY glUniform1i (GLint location, GLint v0);\nGLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1);\nGLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2);\nGLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);\nGLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value);\nGLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value);\nGLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value);\nGLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value);\nGLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value);\nGLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value);\nGLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value);\nGLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value);\nGLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glValidateProgram (GLuint program);\nGLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x);\nGLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x);\nGLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v);\nGLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x);\nGLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v);\nGLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y);\nGLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y);\nGLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v);\nGLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y);\nGLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v);\nGLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z);\nGLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v);\nGLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z);\nGLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v);\nGLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v);\nGLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v);\nGLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v);\nGLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);\nGLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v);\nGLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v);\nGLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v);\nGLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v);\nGLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\nGLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v);\nGLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v);\nGLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);\nGLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v);\nGLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v);\nGLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v);\nGLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v);\nGLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);\ntypedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs);\ntypedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);\ntypedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask);\ntypedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);\ntypedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);\ntypedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);\ntypedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);\ntypedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void);\ntypedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);\ntypedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);\ntypedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);\ntypedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);\ntypedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);\ntypedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);\ntypedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);\ntypedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);\ntypedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj);\ntypedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);\ntypedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);\ntypedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);\ntypedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);\ntypedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);\ntypedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);\ntypedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);\ntypedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader);\ntypedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);\ntypedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* const *string, const GLint *length);\ntypedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);\ntypedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);\ntypedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);\ntypedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);\ntypedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);\ntypedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);\ntypedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);\ntypedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);\ntypedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);\ntypedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);\ntypedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);\ntypedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);\ntypedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);\n#endif\n\n#ifndef GL_VERSION_2_1\n#define GL_VERSION_2_1 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\n#endif\n\n#ifndef GL_VERSION_3_0\n#define GL_VERSION_3_0 1\n/* OpenGL 3.0 also reuses entry points from these extensions: */\n/* ARB_framebuffer_object */\n/* ARB_map_buffer_range */\n/* ARB_vertex_array_object */\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);\nGLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data);\nGLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data);\nGLAPI void APIENTRY glEnablei (GLenum target, GLuint index);\nGLAPI void APIENTRY glDisablei (GLenum target, GLuint index);\nGLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index);\nGLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode);\nGLAPI void APIENTRY glEndTransformFeedback (void);\nGLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);\nGLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer);\nGLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar* const *varyings, GLenum bufferMode);\nGLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);\nGLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp);\nGLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode);\nGLAPI void APIENTRY glEndConditionalRender (void);\nGLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\nGLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params);\nGLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x);\nGLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y);\nGLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z);\nGLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w);\nGLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x);\nGLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y);\nGLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z);\nGLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);\nGLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v);\nGLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v);\nGLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v);\nGLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v);\nGLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v);\nGLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v);\nGLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v);\nGLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v);\nGLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v);\nGLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v);\nGLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v);\nGLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v);\nGLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params);\nGLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name);\nGLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name);\nGLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0);\nGLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1);\nGLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2);\nGLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);\nGLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value);\nGLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value);\nGLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value);\nGLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value);\nGLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params);\nGLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params);\nGLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value);\nGLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value);\nGLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value);\nGLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);\nGLAPI const GLubyte * APIENTRY glGetStringi (GLenum name, GLuint index);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);\ntypedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data);\ntypedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data);\ntypedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index);\ntypedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index);\ntypedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index);\ntypedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode);\ntypedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void);\ntypedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);\ntypedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer);\ntypedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar* const *varyings, GLenum bufferMode);\ntypedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);\ntypedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp);\ntypedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode);\ntypedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v);\ntypedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params);\ntypedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name);\ntypedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name);\ntypedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0);\ntypedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1);\ntypedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);\ntypedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);\ntypedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value);\ntypedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value);\ntypedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value);\ntypedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value);\ntypedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params);\ntypedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params);\ntypedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value);\ntypedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value);\ntypedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);\ntypedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index);\n#endif\n\n#ifndef GL_VERSION_3_1\n#define GL_VERSION_3_1 1\n/* OpenGL 3.1 also reuses entry points from these extensions: */\n/* ARB_copy_buffer */\n/* ARB_uniform_buffer_object */\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);\nGLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount);\nGLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer);\nGLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount);\ntypedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount);\ntypedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer);\ntypedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index);\n#endif\n\n#ifndef GL_VERSION_3_2\n#define GL_VERSION_3_2 1\n/* OpenGL 3.2 also reuses entry points from these extensions: */\n/* ARB_draw_elements_base_vertex */\n/* ARB_provoking_vertex */\n/* ARB_sync */\n/* ARB_texture_multisample */\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data);\nGLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params);\nGLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data);\ntypedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);\n#endif\n\n#ifndef GL_VERSION_3_3\n#define GL_VERSION_3_3 1\n/* OpenGL 3.3 also reuses entry points from these extensions: */\n/* ARB_blend_func_extended */\n/* ARB_sampler_objects */\n/* ARB_explicit_attrib_location, but it has none */\n/* ARB_occlusion_query2 (no entry points) */\n/* ARB_shader_bit_encoding (no entry points) */\n/* ARB_texture_rgb10_a2ui (no entry points) */\n/* ARB_texture_swizzle (no entry points) */\n/* ARB_timer_query */\n/* ARB_vertex_type_2_10_10_10_rev */\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor);\n#endif\n\n#ifndef GL_VERSION_4_0\n#define GL_VERSION_4_0 1\n/* OpenGL 4.0 also reuses entry points from these extensions: */\n/* ARB_texture_query_lod (no entry points) */\n/* ARB_draw_indirect */\n/* ARB_gpu_shader5 (no entry points) */\n/* ARB_gpu_shader_fp64 */\n/* ARB_shader_subroutine */\n/* ARB_tessellation_shader */\n/* ARB_texture_buffer_object_rgb32 (no entry points) */\n/* ARB_texture_cube_map_array (no entry points) */\n/* ARB_texture_gather (no entry points) */\n/* ARB_transform_feedback2 */\n/* ARB_transform_feedback3 */\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glMinSampleShading (GLfloat value);\nGLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode);\nGLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha);\nGLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst);\nGLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value);\ntypedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode);\ntypedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);\ntypedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst);\ntypedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);\n#endif\n\n#ifndef GL_VERSION_4_1\n#define GL_VERSION_4_1 1\n/* OpenGL 4.1 reuses entry points from these extensions: */\n/* ARB_ES2_compatibility */\n/* ARB_get_program_binary */\n/* ARB_separate_shader_objects */\n/* ARB_shader_precision (no entry points) */\n/* ARB_vertex_attrib_64bit */\n/* ARB_viewport_array */\n#endif\n\n#ifndef GL_VERSION_4_2\n#define GL_VERSION_4_2 1\n/* OpenGL 4.2 reuses entry points from these extensions: */\n/* ARB_base_instance */\n/* ARB_shading_language_420pack (no entry points) */\n/* ARB_transform_feedback_instanced */\n/* ARB_compressed_texture_pixel_storage (no entry points) */\n/* ARB_conservative_depth (no entry points) */\n/* ARB_internalformat_query */\n/* ARB_map_buffer_alignment (no entry points) */\n/* ARB_shader_atomic_counters */\n/* ARB_shader_image_load_store */\n/* ARB_shading_language_packing (no entry points) */\n/* ARB_texture_storage */\n#endif\n\n#ifndef GL_VERSION_4_3\n#define GL_VERSION_4_3 1\n/* OpenGL 4.3 reuses entry points from these extensions: */\n/* ARB_arrays_of_arrays (no entry points, GLSL only) */\n/* ARB_fragment_layer_viewport (no entry points, GLSL only) */\n/* ARB_shader_image_size (no entry points, GLSL only) */\n/* ARB_ES3_compatibility (no entry points) */\n/* ARB_clear_buffer_object */\n/* ARB_compute_shader */\n/* ARB_copy_image */\n/* KHR_debug (includes ARB_debug_output commands promoted to KHR without suffixes) */\n/* ARB_explicit_uniform_location (no entry points) */\n/* ARB_framebuffer_no_attachments */\n/* ARB_internalformat_query2 */\n/* ARB_invalidate_subdata */\n/* ARB_multi_draw_indirect */\n/* ARB_program_interface_query */\n/* ARB_robust_buffer_access_behavior (no entry points) */\n/* ARB_shader_storage_buffer_object */\n/* ARB_stencil_texturing (no entry points) */\n/* ARB_texture_buffer_range */\n/* ARB_texture_query_levels (no entry points) */\n/* ARB_texture_storage_multisample */\n/* ARB_texture_view */\n/* ARB_vertex_attrib_binding */\n#endif\n\n#ifndef GL_ARB_multitexture\n#define GL_ARB_multitexture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glActiveTextureARB (GLenum texture);\nGLAPI void APIENTRY glClientActiveTextureARB (GLenum texture);\nGLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s);\nGLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v);\nGLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s);\nGLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v);\nGLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s);\nGLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v);\nGLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s);\nGLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v);\nGLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t);\nGLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v);\nGLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t);\nGLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v);\nGLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t);\nGLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v);\nGLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t);\nGLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v);\nGLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r);\nGLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v);\nGLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r);\nGLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v);\nGLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r);\nGLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v);\nGLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r);\nGLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v);\nGLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);\nGLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v);\nGLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);\nGLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v);\nGLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q);\nGLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v);\nGLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);\nGLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture);\ntypedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);\n#endif\n\n#ifndef GL_ARB_transpose_matrix\n#define GL_ARB_transpose_matrix 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m);\nGLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m);\nGLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m);\nGLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);\ntypedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);\ntypedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);\ntypedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);\n#endif\n\n#ifndef GL_ARB_multisample\n#define GL_ARB_multisample 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert);\n#endif\n\n#ifndef GL_ARB_texture_env_add\n#define GL_ARB_texture_env_add 1\n#endif\n\n#ifndef GL_ARB_texture_cube_map\n#define GL_ARB_texture_cube_map 1\n#endif\n\n#ifndef GL_ARB_texture_compression\n#define GL_ARB_texture_compression 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);\nGLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);\nGLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);\nGLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);\nGLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);\nGLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);\nGLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, GLvoid *img);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, GLvoid *img);\n#endif\n\n#ifndef GL_ARB_texture_border_clamp\n#define GL_ARB_texture_border_clamp 1\n#endif\n\n#ifndef GL_ARB_point_parameters\n#define GL_ARB_point_parameters 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param);\nGLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params);\n#endif\n\n#ifndef GL_ARB_vertex_blend\n#define GL_ARB_vertex_blend 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights);\nGLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights);\nGLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights);\nGLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights);\nGLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights);\nGLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights);\nGLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights);\nGLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights);\nGLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\nGLAPI void APIENTRY glVertexBlendARB (GLint count);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights);\ntypedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights);\ntypedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights);\ntypedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights);\ntypedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights);\ntypedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights);\ntypedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights);\ntypedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights);\ntypedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count);\n#endif\n\n#ifndef GL_ARB_matrix_palette\n#define GL_ARB_matrix_palette 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index);\nGLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices);\nGLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices);\nGLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices);\nGLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index);\ntypedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices);\ntypedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices);\ntypedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices);\ntypedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\n#endif\n\n#ifndef GL_ARB_texture_env_combine\n#define GL_ARB_texture_env_combine 1\n#endif\n\n#ifndef GL_ARB_texture_env_crossbar\n#define GL_ARB_texture_env_crossbar 1\n#endif\n\n#ifndef GL_ARB_texture_env_dot3\n#define GL_ARB_texture_env_dot3 1\n#endif\n\n#ifndef GL_ARB_texture_mirrored_repeat\n#define GL_ARB_texture_mirrored_repeat 1\n#endif\n\n#ifndef GL_ARB_depth_texture\n#define GL_ARB_depth_texture 1\n#endif\n\n#ifndef GL_ARB_shadow\n#define GL_ARB_shadow 1\n#endif\n\n#ifndef GL_ARB_shadow_ambient\n#define GL_ARB_shadow_ambient 1\n#endif\n\n#ifndef GL_ARB_window_pos\n#define GL_ARB_window_pos 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y);\nGLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v);\nGLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y);\nGLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v);\nGLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y);\nGLAPI void APIENTRY glWindowPos2ivARB (const GLint *v);\nGLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y);\nGLAPI void APIENTRY glWindowPos2svARB (const GLshort *v);\nGLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z);\nGLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v);\nGLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v);\nGLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z);\nGLAPI void APIENTRY glWindowPos3ivARB (const GLint *v);\nGLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z);\nGLAPI void APIENTRY glWindowPos3svARB (const GLshort *v);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v);\n#endif\n\n#ifndef GL_ARB_vertex_program\n#define GL_ARB_vertex_program 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x);\nGLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x);\nGLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v);\nGLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x);\nGLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v);\nGLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y);\nGLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y);\nGLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v);\nGLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y);\nGLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v);\nGLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z);\nGLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v);\nGLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z);\nGLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v);\nGLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v);\nGLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v);\nGLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v);\nGLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);\nGLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v);\nGLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v);\nGLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v);\nGLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v);\nGLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\nGLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v);\nGLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v);\nGLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);\nGLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v);\nGLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v);\nGLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v);\nGLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v);\nGLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);\nGLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index);\nGLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index);\nGLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const GLvoid *string);\nGLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program);\nGLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs);\nGLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs);\nGLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params);\nGLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\nGLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params);\nGLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params);\nGLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\nGLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params);\nGLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params);\nGLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params);\nGLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params);\nGLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params);\nGLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, GLvoid *string);\nGLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params);\nGLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, GLvoid* *pointer);\nGLAPI GLboolean APIENTRY glIsProgramARB (GLuint program);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);\ntypedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);\ntypedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string);\ntypedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program);\ntypedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs);\ntypedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs);\ntypedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);\ntypedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);\ntypedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* *pointer);\ntypedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program);\n#endif\n\n#ifndef GL_ARB_fragment_program\n#define GL_ARB_fragment_program 1\n/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */\n#endif\n\n#ifndef GL_ARB_vertex_buffer_object\n#define GL_ARB_vertex_buffer_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer);\nGLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers);\nGLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers);\nGLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer);\nGLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);\nGLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);\nGLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data);\nGLAPI GLvoid* APIENTRY glMapBufferARB (GLenum target, GLenum access);\nGLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target);\nGLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, GLvoid* *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);\ntypedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);\ntypedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers);\ntypedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer);\ntypedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);\ntypedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);\ntypedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data);\ntypedef GLvoid* (APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access);\ntypedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target);\ntypedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params);\n#endif\n\n#ifndef GL_ARB_occlusion_query\n#define GL_ARB_occlusion_query 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids);\nGLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids);\nGLAPI GLboolean APIENTRY glIsQueryARB (GLuint id);\nGLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id);\nGLAPI void APIENTRY glEndQueryARB (GLenum target);\nGLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids);\ntypedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids);\ntypedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id);\ntypedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id);\ntypedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target);\ntypedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params);\n#endif\n\n#ifndef GL_ARB_shader_objects\n#define GL_ARB_shader_objects 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj);\nGLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname);\nGLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj);\nGLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType);\nGLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length);\nGLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj);\nGLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void);\nGLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj);\nGLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj);\nGLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj);\nGLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj);\nGLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0);\nGLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1);\nGLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);\nGLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);\nGLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0);\nGLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1);\nGLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2);\nGLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);\nGLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value);\nGLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value);\nGLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value);\nGLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value);\nGLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value);\nGLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value);\nGLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value);\nGLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value);\nGLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);\nGLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);\nGLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name);\nGLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);\nGLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params);\nGLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params);\nGLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj);\ntypedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname);\ntypedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj);\ntypedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType);\ntypedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length);\ntypedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj);\ntypedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void);\ntypedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);\ntypedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj);\ntypedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj);\ntypedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj);\ntypedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0);\ntypedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1);\ntypedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);\ntypedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);\ntypedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0);\ntypedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1);\ntypedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2);\ntypedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);\ntypedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value);\ntypedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value);\ntypedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value);\ntypedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);\ntypedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);\ntypedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);\ntypedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);\ntypedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params);\ntypedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);\n#endif\n\n#ifndef GL_ARB_vertex_shader\n#define GL_ARB_vertex_shader 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name);\nGLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);\nGLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name);\ntypedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);\ntypedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);\n#endif\n\n#ifndef GL_ARB_fragment_shader\n#define GL_ARB_fragment_shader 1\n#endif\n\n#ifndef GL_ARB_shading_language_100\n#define GL_ARB_shading_language_100 1\n#endif\n\n#ifndef GL_ARB_texture_non_power_of_two\n#define GL_ARB_texture_non_power_of_two 1\n#endif\n\n#ifndef GL_ARB_point_sprite\n#define GL_ARB_point_sprite 1\n#endif\n\n#ifndef GL_ARB_fragment_program_shadow\n#define GL_ARB_fragment_program_shadow 1\n#endif\n\n#ifndef GL_ARB_draw_buffers\n#define GL_ARB_draw_buffers 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs);\n#endif\n\n#ifndef GL_ARB_texture_rectangle\n#define GL_ARB_texture_rectangle 1\n#endif\n\n#ifndef GL_ARB_color_buffer_float\n#define GL_ARB_color_buffer_float 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp);\n#endif\n\n#ifndef GL_ARB_half_float_pixel\n#define GL_ARB_half_float_pixel 1\n#endif\n\n#ifndef GL_ARB_texture_float\n#define GL_ARB_texture_float 1\n#endif\n\n#ifndef GL_ARB_pixel_buffer_object\n#define GL_ARB_pixel_buffer_object 1\n#endif\n\n#ifndef GL_ARB_depth_buffer_float\n#define GL_ARB_depth_buffer_float 1\n#endif\n\n#ifndef GL_ARB_draw_instanced\n#define GL_ARB_draw_instanced 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount);\nGLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);\ntypedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount);\n#endif\n\n#ifndef GL_ARB_framebuffer_object\n#define GL_ARB_framebuffer_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer);\nGLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer);\nGLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers);\nGLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers);\nGLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params);\nGLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer);\nGLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer);\nGLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers);\nGLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers);\nGLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target);\nGLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);\nGLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);\nGLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);\nGLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);\nGLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGenerateMipmap (GLenum target);\nGLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);\nGLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer);\ntypedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer);\ntypedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers);\ntypedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers);\ntypedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer);\ntypedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer);\ntypedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers);\ntypedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers);\ntypedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);\ntypedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target);\ntypedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);\ntypedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);\n#endif\n\n#ifndef GL_ARB_framebuffer_sRGB\n#define GL_ARB_framebuffer_sRGB 1\n#endif\n\n#ifndef GL_ARB_geometry_shader4\n#define GL_ARB_geometry_shader4 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value);\nGLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level);\nGLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);\nGLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);\n#endif\n\n#ifndef GL_ARB_half_float_vertex\n#define GL_ARB_half_float_vertex 1\n#endif\n\n#ifndef GL_ARB_instanced_arrays\n#define GL_ARB_instanced_arrays 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor);\n#endif\n\n#ifndef GL_ARB_map_buffer_range\n#define GL_ARB_map_buffer_range 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLvoid* APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);\nGLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLvoid* (APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);\ntypedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length);\n#endif\n\n#ifndef GL_ARB_texture_buffer_object\n#define GL_ARB_texture_buffer_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer);\n#endif\n\n#ifndef GL_ARB_texture_compression_rgtc\n#define GL_ARB_texture_compression_rgtc 1\n#endif\n\n#ifndef GL_ARB_texture_rg\n#define GL_ARB_texture_rg 1\n#endif\n\n#ifndef GL_ARB_vertex_array_object\n#define GL_ARB_vertex_array_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBindVertexArray (GLuint array);\nGLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays);\nGLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays);\nGLAPI GLboolean APIENTRY glIsVertexArray (GLuint array);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array);\ntypedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays);\ntypedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays);\ntypedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array);\n#endif\n\n#ifndef GL_ARB_uniform_buffer_object\n#define GL_ARB_uniform_buffer_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar* const *uniformNames, GLuint *uniformIndices);\nGLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);\nGLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName);\nGLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);\nGLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar* const *uniformNames, GLuint *uniformIndices);\ntypedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);\ntypedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName);\ntypedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);\ntypedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);\n#endif\n\n#ifndef GL_ARB_compatibility\n#define GL_ARB_compatibility 1\n#endif\n\n#ifndef GL_ARB_copy_buffer\n#define GL_ARB_copy_buffer 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);\n#endif\n\n#ifndef GL_ARB_shader_texture_lod\n#define GL_ARB_shader_texture_lod 1\n#endif\n\n#ifndef GL_ARB_depth_clamp\n#define GL_ARB_depth_clamp 1\n#endif\n\n#ifndef GL_ARB_draw_elements_base_vertex\n#define GL_ARB_draw_elements_base_vertex 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex);\nGLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex);\nGLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount, GLint basevertex);\nGLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount, const GLint *basevertex);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex);\ntypedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex);\ntypedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei instancecount, GLint basevertex);\ntypedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei drawcount, const GLint *basevertex);\n#endif\n\n#ifndef GL_ARB_fragment_coord_conventions\n#define GL_ARB_fragment_coord_conventions 1\n#endif\n\n#ifndef GL_ARB_provoking_vertex\n#define GL_ARB_provoking_vertex 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glProvokingVertex (GLenum mode);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode);\n#endif\n\n#ifndef GL_ARB_seamless_cube_map\n#define GL_ARB_seamless_cube_map 1\n#endif\n\n#ifndef GL_ARB_sync\n#define GL_ARB_sync 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags);\nGLAPI GLboolean APIENTRY glIsSync (GLsync sync);\nGLAPI void APIENTRY glDeleteSync (GLsync sync);\nGLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);\nGLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout);\nGLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *params);\nGLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags);\ntypedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync);\ntypedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync);\ntypedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);\ntypedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);\ntypedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *params);\ntypedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);\n#endif\n\n#ifndef GL_ARB_texture_multisample\n#define GL_ARB_texture_multisample 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);\nGLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);\nGLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val);\nGLAPI void APIENTRY glSampleMaski (GLuint index, GLbitfield mask);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);\ntypedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);\ntypedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val);\ntypedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint index, GLbitfield mask);\n#endif\n\n#ifndef GL_ARB_vertex_array_bgra\n#define GL_ARB_vertex_array_bgra 1\n#endif\n\n#ifndef GL_ARB_draw_buffers_blend\n#define GL_ARB_draw_buffers_blend 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode);\nGLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha);\nGLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst);\nGLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode);\ntypedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);\ntypedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst);\ntypedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);\n#endif\n\n#ifndef GL_ARB_sample_shading\n#define GL_ARB_sample_shading 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glMinSampleShadingARB (GLfloat value);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value);\n#endif\n\n#ifndef GL_ARB_texture_cube_map_array\n#define GL_ARB_texture_cube_map_array 1\n#endif\n\n#ifndef GL_ARB_texture_gather\n#define GL_ARB_texture_gather 1\n#endif\n\n#ifndef GL_ARB_texture_query_lod\n#define GL_ARB_texture_query_lod 1\n#endif\n\n#ifndef GL_ARB_shading_language_include\n#define GL_ARB_shading_language_include 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string);\nGLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name);\nGLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length);\nGLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name);\nGLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string);\nGLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string);\ntypedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name);\ntypedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length);\ntypedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name);\ntypedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string);\ntypedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params);\n#endif\n\n#ifndef GL_ARB_texture_compression_bptc\n#define GL_ARB_texture_compression_bptc 1\n#endif\n\n#ifndef GL_ARB_blend_func_extended\n#define GL_ARB_blend_func_extended 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);\nGLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name);\ntypedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name);\n#endif\n\n#ifndef GL_ARB_explicit_attrib_location\n#define GL_ARB_explicit_attrib_location 1\n#endif\n\n#ifndef GL_ARB_occlusion_query2\n#define GL_ARB_occlusion_query2 1\n#endif\n\n#ifndef GL_ARB_sampler_objects\n#define GL_ARB_sampler_objects 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers);\nGLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers);\nGLAPI GLboolean APIENTRY glIsSampler (GLuint sampler);\nGLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler);\nGLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param);\nGLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param);\nGLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param);\nGLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param);\nGLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param);\nGLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param);\nGLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers);\ntypedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers);\ntypedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler);\ntypedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler);\ntypedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param);\ntypedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param);\ntypedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param);\ntypedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param);\ntypedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params);\n#endif\n\n#ifndef GL_ARB_shader_bit_encoding\n#define GL_ARB_shader_bit_encoding 1\n#endif\n\n#ifndef GL_ARB_texture_rgb10_a2ui\n#define GL_ARB_texture_rgb10_a2ui 1\n#endif\n\n#ifndef GL_ARB_texture_swizzle\n#define GL_ARB_texture_swizzle 1\n#endif\n\n#ifndef GL_ARB_timer_query\n#define GL_ARB_timer_query 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target);\nGLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params);\nGLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target);\ntypedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params);\ntypedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params);\n#endif\n\n#ifndef GL_ARB_vertex_type_2_10_10_10_rev\n#define GL_ARB_vertex_type_2_10_10_10_rev 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value);\nGLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value);\nGLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value);\nGLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value);\nGLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value);\nGLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value);\nGLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords);\nGLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords);\nGLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords);\nGLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords);\nGLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords);\nGLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords);\nGLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords);\nGLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords);\nGLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords);\nGLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords);\nGLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords);\nGLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords);\nGLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords);\nGLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords);\nGLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords);\nGLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords);\nGLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords);\nGLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords);\nGLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color);\nGLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color);\nGLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color);\nGLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color);\nGLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color);\nGLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color);\nGLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);\nGLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);\nGLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);\nGLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);\nGLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);\nGLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);\nGLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value);\nGLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value);\ntypedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value);\ntypedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value);\ntypedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value);\ntypedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value);\ntypedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value);\ntypedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords);\ntypedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords);\ntypedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords);\ntypedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords);\ntypedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords);\ntypedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords);\ntypedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords);\ntypedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords);\ntypedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords);\ntypedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords);\ntypedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color);\ntypedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color);\ntypedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color);\ntypedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value);\n#endif\n\n#ifndef GL_ARB_draw_indirect\n#define GL_ARB_draw_indirect 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const GLvoid *indirect);\nGLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const GLvoid *indirect);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const GLvoid *indirect);\ntypedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const GLvoid *indirect);\n#endif\n\n#ifndef GL_ARB_gpu_shader5\n#define GL_ARB_gpu_shader5 1\n#endif\n\n#ifndef GL_ARB_gpu_shader_fp64\n#define GL_ARB_gpu_shader_fp64 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glUniform1d (GLint location, GLdouble x);\nGLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y);\nGLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z);\nGLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value);\nGLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value);\nGLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value);\nGLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value);\nGLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x);\ntypedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y);\ntypedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params);\n#endif\n\n#ifndef GL_ARB_shader_subroutine\n#define GL_ARB_shader_subroutine 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name);\nGLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name);\nGLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);\nGLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);\nGLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);\nGLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices);\nGLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params);\nGLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name);\ntypedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name);\ntypedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);\ntypedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);\ntypedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name);\ntypedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices);\ntypedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values);\n#endif\n\n#ifndef GL_ARB_tessellation_shader\n#define GL_ARB_tessellation_shader 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value);\nGLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value);\ntypedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values);\n#endif\n\n#ifndef GL_ARB_texture_buffer_object_rgb32\n#define GL_ARB_texture_buffer_object_rgb32 1\n#endif\n\n#ifndef GL_ARB_transform_feedback2\n#define GL_ARB_transform_feedback2 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id);\nGLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids);\nGLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids);\nGLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id);\nGLAPI void APIENTRY glPauseTransformFeedback (void);\nGLAPI void APIENTRY glResumeTransformFeedback (void);\nGLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id);\ntypedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids);\ntypedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids);\ntypedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id);\ntypedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void);\ntypedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void);\ntypedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id);\n#endif\n\n#ifndef GL_ARB_transform_feedback3\n#define GL_ARB_transform_feedback3 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream);\nGLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id);\nGLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index);\nGLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream);\ntypedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id);\ntypedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index);\ntypedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);\n#endif\n\n#ifndef GL_ARB_ES2_compatibility\n#define GL_ARB_ES2_compatibility 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glReleaseShaderCompiler (void);\nGLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length);\nGLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);\nGLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f);\nGLAPI void APIENTRY glClearDepthf (GLfloat d);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void);\ntypedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length);\ntypedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision);\ntypedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f);\ntypedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d);\n#endif\n\n#ifndef GL_ARB_get_program_binary\n#define GL_ARB_get_program_binary 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary);\nGLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length);\nGLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary);\ntypedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length);\ntypedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value);\n#endif\n\n#ifndef GL_ARB_separate_shader_objects\n#define GL_ARB_separate_shader_objects 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program);\nGLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program);\nGLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar* const *strings);\nGLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline);\nGLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines);\nGLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines);\nGLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline);\nGLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params);\nGLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0);\nGLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value);\nGLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0);\nGLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0);\nGLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0);\nGLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);\nGLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1);\nGLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value);\nGLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1);\nGLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1);\nGLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1);\nGLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);\nGLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);\nGLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value);\nGLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);\nGLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2);\nGLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);\nGLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);\nGLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);\nGLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value);\nGLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);\nGLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);\nGLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);\nGLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value);\nGLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline);\nGLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program);\ntypedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program);\ntypedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar* const *strings);\ntypedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline);\ntypedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines);\ntypedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines);\ntypedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline);\ntypedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline);\ntypedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);\n#endif\n\n#ifndef GL_ARB_vertex_attrib_64bit\n#define GL_ARB_vertex_attrib_64bit 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x);\nGLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y);\nGLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z);\nGLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\nGLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params);\n#endif\n\n#ifndef GL_ARB_viewport_array\n#define GL_ARB_viewport_array 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v);\nGLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);\nGLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v);\nGLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v);\nGLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v);\nGLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v);\nGLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f);\nGLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data);\nGLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);\ntypedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v);\ntypedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v);\ntypedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f);\ntypedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data);\ntypedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data);\n#endif\n\n#ifndef GL_ARB_cl_event\n#define GL_ARB_cl_event 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context * context, struct _cl_event * event, GLbitfield flags);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context * context, struct _cl_event * event, GLbitfield flags);\n#endif\n\n#ifndef GL_ARB_debug_output\n#define GL_ARB_debug_output 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);\nGLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);\nGLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const GLvoid *userParam);\nGLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);\ntypedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);\ntypedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const GLvoid *userParam);\ntypedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);\n#endif\n\n#ifndef GL_ARB_robustness\n#define GL_ARB_robustness 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void);\nGLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);\nGLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);\nGLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v);\nGLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values);\nGLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values);\nGLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values);\nGLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern);\nGLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *table);\nGLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *image);\nGLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid *row, GLsizei columnBufSize, GLvoid *column, GLvoid *span);\nGLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values);\nGLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values);\nGLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img);\nGLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data);\nGLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img);\nGLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);\nGLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params);\nGLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params);\nGLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void);\ntypedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v);\ntypedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v);\ntypedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v);\ntypedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values);\ntypedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values);\ntypedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values);\ntypedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern);\ntypedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *table);\ntypedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *image);\ntypedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid *row, GLsizei columnBufSize, GLvoid *column, GLvoid *span);\ntypedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values);\ntypedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values);\ntypedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img);\ntypedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data);\ntypedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img);\ntypedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params);\ntypedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params);\ntypedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params);\n#endif\n\n#ifndef GL_ARB_shader_stencil_export\n#define GL_ARB_shader_stencil_export 1\n#endif\n\n#ifndef GL_ARB_base_instance\n#define GL_ARB_base_instance 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);\nGLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);\nGLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance);\ntypedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance);\ntypedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance);\n#endif\n\n#ifndef GL_ARB_shading_language_420pack\n#define GL_ARB_shading_language_420pack 1\n#endif\n\n#ifndef GL_ARB_transform_feedback_instanced\n#define GL_ARB_transform_feedback_instanced 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount);\nGLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount);\ntypedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount);\n#endif\n\n#ifndef GL_ARB_compressed_texture_pixel_storage\n#define GL_ARB_compressed_texture_pixel_storage 1\n#endif\n\n#ifndef GL_ARB_conservative_depth\n#define GL_ARB_conservative_depth 1\n#endif\n\n#ifndef GL_ARB_internalformat_query\n#define GL_ARB_internalformat_query 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params);\n#endif\n\n#ifndef GL_ARB_map_buffer_alignment\n#define GL_ARB_map_buffer_alignment 1\n#endif\n\n#ifndef GL_ARB_shader_atomic_counters\n#define GL_ARB_shader_atomic_counters 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params);\n#endif\n\n#ifndef GL_ARB_shader_image_load_store\n#define GL_ARB_shader_image_load_store 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);\nGLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);\ntypedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers);\n#endif\n\n#ifndef GL_ARB_shading_language_packing\n#define GL_ARB_shading_language_packing 1\n#endif\n\n#ifndef GL_ARB_texture_storage\n#define GL_ARB_texture_storage 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);\nGLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);\nGLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);\nGLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);\ntypedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);\ntypedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);\ntypedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);\n#endif\n\n#ifndef GL_KHR_texture_compression_astc_ldr\n#define GL_KHR_texture_compression_astc_ldr 1\n#endif\n\n#ifndef GL_KHR_debug\n#define GL_KHR_debug 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);\nGLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);\nGLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam);\nGLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);\nGLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message);\nGLAPI void APIENTRY glPopDebugGroup (void);\nGLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);\nGLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);\nGLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label);\nGLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);\ntypedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf);\ntypedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam);\ntypedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog);\ntypedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message);\ntypedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void);\ntypedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label);\ntypedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label);\ntypedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label);\ntypedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label);\n#endif\n\n#ifndef GL_ARB_arrays_of_arrays\n#define GL_ARB_arrays_of_arrays 1\n#endif\n\n#ifndef GL_ARB_clear_buffer_object\n#define GL_ARB_clear_buffer_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data);\nGLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);\nGLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);\nGLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, GLsizeiptr offset, GLsizeiptr size, const void *data);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data);\ntypedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data);\ntypedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data);\ntypedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, GLsizeiptr offset, GLsizeiptr size, const void *data);\n#endif\n\n#ifndef GL_ARB_compute_shader\n#define GL_ARB_compute_shader 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);\nGLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z);\ntypedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect);\n#endif\n\n#ifndef GL_ARB_copy_image\n#define GL_ARB_copy_image 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth);\n#endif\n\n#ifndef GL_ARB_texture_view\n#define GL_ARB_texture_view 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers);\n#endif\n\n#ifndef GL_ARB_vertex_attrib_binding\n#define GL_ARB_vertex_attrib_binding 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);\nGLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);\nGLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);\nGLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);\nGLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex);\nGLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor);\nGLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);\nGLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);\nGLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);\nGLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);\nGLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex);\nGLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex);\ntypedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor);\ntypedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);\ntypedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset);\ntypedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);\ntypedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset);\ntypedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex);\ntypedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor);\n#endif\n\n#ifndef GL_ARB_robustness_isolation\n#define GL_ARB_robustness_isolation 1\n#endif\n\n#ifndef GL_ARB_ES3_compatibility\n#define GL_ARB_ES3_compatibility 1\n#endif\n\n#ifndef GL_ARB_explicit_uniform_location\n#define GL_ARB_explicit_uniform_location 1\n#endif\n\n#ifndef GL_ARB_fragment_layer_viewport\n#define GL_ARB_fragment_layer_viewport 1\n#endif\n\n#ifndef GL_ARB_framebuffer_no_attachments\n#define GL_ARB_framebuffer_no_attachments 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param);\nGLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param);\nGLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params);\n#endif\n\n#ifndef GL_ARB_internalformat_query2\n#define GL_ARB_internalformat_query2 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params);\n#endif\n\n#ifndef GL_ARB_invalidate_subdata\n#define GL_ARB_invalidate_subdata 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth);\nGLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level);\nGLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length);\nGLAPI void APIENTRY glInvalidateBufferData (GLuint buffer);\nGLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments);\nGLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth);\ntypedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level);\ntypedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length);\ntypedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer);\ntypedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments);\ntypedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height);\n#endif\n\n#ifndef GL_ARB_multi_draw_indirect\n#define GL_ARB_multi_draw_indirect 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);\nGLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride);\ntypedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride);\n#endif\n\n#ifndef GL_ARB_program_interface_query\n#define GL_ARB_program_interface_query 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params);\nGLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name);\nGLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);\nGLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);\nGLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name);\nGLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params);\ntypedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name);\ntypedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);\ntypedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params);\ntypedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name);\ntypedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name);\n#endif\n\n#ifndef GL_ARB_robust_buffer_access_behavior\n#define GL_ARB_robust_buffer_access_behavior 1\n#endif\n\n#ifndef GL_ARB_shader_image_size\n#define GL_ARB_shader_image_size 1\n#endif\n\n#ifndef GL_ARB_shader_storage_buffer_object\n#define GL_ARB_shader_storage_buffer_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding);\n#endif\n\n#ifndef GL_ARB_stencil_texturing\n#define GL_ARB_stencil_texturing 1\n#endif\n\n#ifndef GL_ARB_texture_buffer_range\n#define GL_ARB_texture_buffer_range 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);\nGLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);\ntypedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size);\n#endif\n\n#ifndef GL_ARB_texture_query_levels\n#define GL_ARB_texture_query_levels 1\n#endif\n\n#ifndef GL_ARB_texture_storage_multisample\n#define GL_ARB_texture_storage_multisample 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);\nGLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);\nGLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);\nGLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);\ntypedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);\ntypedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);\ntypedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);\n#endif\n\n#ifndef GL_EXT_abgr\n#define GL_EXT_abgr 1\n#endif\n\n#ifndef GL_EXT_blend_color\n#define GL_EXT_blend_color 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);\n#endif\n\n#ifndef GL_EXT_polygon_offset\n#define GL_EXT_polygon_offset 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias);\n#endif\n\n#ifndef GL_EXT_texture\n#define GL_EXT_texture 1\n#endif\n\n#ifndef GL_EXT_texture3D\n#define GL_EXT_texture3D 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);\n#endif\n\n#ifndef GL_SGIS_texture_filter4\n#define GL_SGIS_texture_filter4 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights);\nGLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights);\ntypedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);\n#endif\n\n#ifndef GL_EXT_subtexture\n#define GL_EXT_subtexture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);\n#endif\n\n#ifndef GL_EXT_copy_texture\n#define GL_EXT_copy_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);\nGLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);\nGLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);\nGLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);\ntypedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);\ntypedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);\ntypedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);\n#endif\n\n#ifndef GL_EXT_histogram\n#define GL_EXT_histogram 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);\nGLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);\nGLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);\nGLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink);\nGLAPI void APIENTRY glResetHistogramEXT (GLenum target);\nGLAPI void APIENTRY glResetMinmaxEXT (GLenum target);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);\ntypedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);\ntypedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);\ntypedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink);\ntypedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target);\ntypedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target);\n#endif\n\n#ifndef GL_EXT_convolution\n#define GL_EXT_convolution 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);\nGLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);\nGLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params);\nGLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params);\nGLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);\nGLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *image);\nGLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);\nGLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);\ntypedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);\ntypedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params);\ntypedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params);\ntypedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);\ntypedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);\ntypedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);\ntypedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);\n#endif\n\n#ifndef GL_SGI_color_matrix\n#define GL_SGI_color_matrix 1\n#endif\n\n#ifndef GL_SGI_color_table\n#define GL_SGI_color_table 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);\nGLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);\nGLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, GLvoid *table);\nGLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);\ntypedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);\ntypedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);\ntypedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params);\n#endif\n\n#ifndef GL_SGIX_pixel_texture\n#define GL_SGIX_pixel_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode);\n#endif\n\n#ifndef GL_SGIS_pixel_texture\n#define GL_SGIS_pixel_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param);\nGLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params);\nGLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param);\nGLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params);\n#endif\n\n#ifndef GL_SGIS_texture4D\n#define GL_SGIS_texture4D 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels);\n#endif\n\n#ifndef GL_SGI_texture_color_table\n#define GL_SGI_texture_color_table 1\n#endif\n\n#ifndef GL_EXT_cmyka\n#define GL_EXT_cmyka 1\n#endif\n\n#ifndef GL_EXT_texture_object\n#define GL_EXT_texture_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences);\nGLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture);\nGLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures);\nGLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures);\nGLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture);\nGLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences);\ntypedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture);\ntypedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures);\ntypedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures);\ntypedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture);\ntypedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities);\n#endif\n\n#ifndef GL_SGIS_detail_texture\n#define GL_SGIS_detail_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points);\nGLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);\ntypedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points);\n#endif\n\n#ifndef GL_SGIS_sharpen_texture\n#define GL_SGIS_sharpen_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points);\nGLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);\ntypedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points);\n#endif\n\n#ifndef GL_EXT_packed_pixels\n#define GL_EXT_packed_pixels 1\n#endif\n\n#ifndef GL_SGIS_texture_lod\n#define GL_SGIS_texture_lod 1\n#endif\n\n#ifndef GL_SGIS_multisample\n#define GL_SGIS_multisample 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert);\nGLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert);\ntypedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern);\n#endif\n\n#ifndef GL_EXT_rescale_normal\n#define GL_EXT_rescale_normal 1\n#endif\n\n#ifndef GL_EXT_vertex_array\n#define GL_EXT_vertex_array 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glArrayElementEXT (GLint i);\nGLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);\nGLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count);\nGLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer);\nGLAPI void APIENTRY glGetPointervEXT (GLenum pname, GLvoid* *params);\nGLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);\nGLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);\nGLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);\nGLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i);\ntypedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count);\ntypedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer);\ntypedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params);\ntypedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);\n#endif\n\n#ifndef GL_EXT_misc_attribute\n#define GL_EXT_misc_attribute 1\n#endif\n\n#ifndef GL_SGIS_generate_mipmap\n#define GL_SGIS_generate_mipmap 1\n#endif\n\n#ifndef GL_SGIX_clipmap\n#define GL_SGIX_clipmap 1\n#endif\n\n#ifndef GL_SGIX_shadow\n#define GL_SGIX_shadow 1\n#endif\n\n#ifndef GL_SGIS_texture_edge_clamp\n#define GL_SGIS_texture_edge_clamp 1\n#endif\n\n#ifndef GL_SGIS_texture_border_clamp\n#define GL_SGIS_texture_border_clamp 1\n#endif\n\n#ifndef GL_EXT_blend_minmax\n#define GL_EXT_blend_minmax 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBlendEquationEXT (GLenum mode);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode);\n#endif\n\n#ifndef GL_EXT_blend_subtract\n#define GL_EXT_blend_subtract 1\n#endif\n\n#ifndef GL_EXT_blend_logic_op\n#define GL_EXT_blend_logic_op 1\n#endif\n\n#ifndef GL_SGIX_interlace\n#define GL_SGIX_interlace 1\n#endif\n\n#ifndef GL_SGIX_pixel_tiles\n#define GL_SGIX_pixel_tiles 1\n#endif\n\n#ifndef GL_SGIS_texture_select\n#define GL_SGIS_texture_select 1\n/* This used to be SGIX prefix, which was an error in the header */\n#endif\n\n#ifndef GL_SGIX_sprite\n#define GL_SGIX_sprite 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param);\nGLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param);\nGLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params);\n#endif\n\n#ifndef GL_SGIX_texture_multi_buffer\n#define GL_SGIX_texture_multi_buffer 1\n#endif\n\n#ifndef GL_EXT_point_parameters\n#define GL_EXT_point_parameters 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param);\nGLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params);\n#endif\n\n#ifndef GL_SGIS_point_parameters\n#define GL_SGIS_point_parameters 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param);\nGLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);\n#endif\n\n#ifndef GL_SGIX_instruments\n#define GL_SGIX_instruments 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLint APIENTRY glGetInstrumentsSGIX (void);\nGLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer);\nGLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p);\nGLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker);\nGLAPI void APIENTRY glStartInstrumentsSGIX (void);\nGLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void);\ntypedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer);\ntypedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p);\ntypedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker);\ntypedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void);\ntypedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker);\n#endif\n\n#ifndef GL_SGIX_texture_scale_bias\n#define GL_SGIX_texture_scale_bias 1\n#endif\n\n#ifndef GL_SGIX_framezoom\n#define GL_SGIX_framezoom 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFrameZoomSGIX (GLint factor);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor);\n#endif\n\n#ifndef GL_SGIX_tag_sample_buffer\n#define GL_SGIX_tag_sample_buffer 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTagSampleBufferSGIX (void);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void);\n#endif\n\n#ifndef GL_SGIX_polynomial_ffd\n#define GL_SGIX_polynomial_ffd 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points);\nGLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points);\nGLAPI void APIENTRY glDeformSGIX (GLbitfield mask);\nGLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points);\ntypedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points);\ntypedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask);\ntypedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask);\n#endif\n\n#ifndef GL_SGIX_reference_plane\n#define GL_SGIX_reference_plane 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation);\n#endif\n\n#ifndef GL_SGIX_flush_raster\n#define GL_SGIX_flush_raster 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFlushRasterSGIX (void);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void);\n#endif\n\n#ifndef GL_SGIX_depth_texture\n#define GL_SGIX_depth_texture 1\n#endif\n\n#ifndef GL_SGIS_fog_function\n#define GL_SGIS_fog_function 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points);\nGLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points);\ntypedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points);\n#endif\n\n#ifndef GL_SGIX_fog_offset\n#define GL_SGIX_fog_offset 1\n#endif\n\n#ifndef GL_HP_image_transform\n#define GL_HP_image_transform 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param);\nGLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param);\nGLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params);\n#endif\n\n#ifndef GL_HP_convolution_border_modes\n#define GL_HP_convolution_border_modes 1\n#endif\n\n#ifndef GL_SGIX_texture_add_env\n#define GL_SGIX_texture_add_env 1\n#endif\n\n#ifndef GL_EXT_color_subtable\n#define GL_EXT_color_subtable 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);\nGLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);\ntypedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);\n#endif\n\n#ifndef GL_PGI_vertex_hints\n#define GL_PGI_vertex_hints 1\n#endif\n\n#ifndef GL_PGI_misc_hints\n#define GL_PGI_misc_hints 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glHintPGI (GLenum target, GLint mode);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode);\n#endif\n\n#ifndef GL_EXT_paletted_texture\n#define GL_EXT_paletted_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);\nGLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, GLvoid *data);\nGLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);\ntypedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data);\ntypedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);\n#endif\n\n#ifndef GL_EXT_clip_volume_hint\n#define GL_EXT_clip_volume_hint 1\n#endif\n\n#ifndef GL_SGIX_list_priority\n#define GL_SGIX_list_priority 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params);\nGLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param);\nGLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param);\nGLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params);\n#endif\n\n#ifndef GL_SGIX_ir_instrument1\n#define GL_SGIX_ir_instrument1 1\n#endif\n\n#ifndef GL_SGIX_calligraphic_fragment\n#define GL_SGIX_calligraphic_fragment 1\n#endif\n\n#ifndef GL_SGIX_texture_lod_bias\n#define GL_SGIX_texture_lod_bias 1\n#endif\n\n#ifndef GL_SGIX_shadow_ambient\n#define GL_SGIX_shadow_ambient 1\n#endif\n\n#ifndef GL_EXT_index_texture\n#define GL_EXT_index_texture 1\n#endif\n\n#ifndef GL_EXT_index_material\n#define GL_EXT_index_material 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode);\n#endif\n\n#ifndef GL_EXT_index_func\n#define GL_EXT_index_func 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref);\n#endif\n\n#ifndef GL_EXT_index_array_formats\n#define GL_EXT_index_array_formats 1\n#endif\n\n#ifndef GL_EXT_compiled_vertex_array\n#define GL_EXT_compiled_vertex_array 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count);\nGLAPI void APIENTRY glUnlockArraysEXT (void);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count);\ntypedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void);\n#endif\n\n#ifndef GL_EXT_cull_vertex\n#define GL_EXT_cull_vertex 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params);\nGLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params);\ntypedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params);\n#endif\n\n#ifndef GL_SGIX_ycrcb\n#define GL_SGIX_ycrcb 1\n#endif\n\n#ifndef GL_SGIX_fragment_lighting\n#define GL_SGIX_fragment_lighting 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode);\nGLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param);\nGLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param);\nGLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param);\nGLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param);\nGLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params);\nGLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param);\nGLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param);\nGLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params);\nGLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode);\ntypedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param);\n#endif\n\n#ifndef GL_IBM_rasterpos_clip\n#define GL_IBM_rasterpos_clip 1\n#endif\n\n#ifndef GL_HP_texture_lighting\n#define GL_HP_texture_lighting 1\n#endif\n\n#ifndef GL_EXT_draw_range_elements\n#define GL_EXT_draw_range_elements 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);\n#endif\n\n#ifndef GL_WIN_phong_shading\n#define GL_WIN_phong_shading 1\n#endif\n\n#ifndef GL_WIN_specular_fog\n#define GL_WIN_specular_fog 1\n#endif\n\n#ifndef GL_EXT_light_texture\n#define GL_EXT_light_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glApplyTextureEXT (GLenum mode);\nGLAPI void APIENTRY glTextureLightEXT (GLenum pname);\nGLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode);\ntypedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname);\ntypedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode);\n#endif\n\n#ifndef GL_SGIX_blend_alpha_minmax\n#define GL_SGIX_blend_alpha_minmax 1\n#endif\n\n#ifndef GL_EXT_bgra\n#define GL_EXT_bgra 1\n#endif\n\n#ifndef GL_SGIX_async\n#define GL_SGIX_async 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker);\nGLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp);\nGLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp);\nGLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range);\nGLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range);\nGLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker);\ntypedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp);\ntypedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp);\ntypedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range);\ntypedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range);\ntypedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker);\n#endif\n\n#ifndef GL_SGIX_async_pixel\n#define GL_SGIX_async_pixel 1\n#endif\n\n#ifndef GL_SGIX_async_histogram\n#define GL_SGIX_async_histogram 1\n#endif\n\n#ifndef GL_INTEL_parallel_arrays\n#define GL_INTEL_parallel_arrays 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer);\nGLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const GLvoid* *pointer);\nGLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer);\nGLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);\ntypedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer);\ntypedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);\ntypedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);\n#endif\n\n#ifndef GL_HP_occlusion_test\n#define GL_HP_occlusion_test 1\n#endif\n\n#ifndef GL_EXT_pixel_transform\n#define GL_EXT_pixel_transform 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param);\nGLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param);\nGLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);\n#endif\n\n#ifndef GL_EXT_pixel_transform_color_table\n#define GL_EXT_pixel_transform_color_table 1\n#endif\n\n#ifndef GL_EXT_shared_texture_palette\n#define GL_EXT_shared_texture_palette 1\n#endif\n\n#ifndef GL_EXT_separate_specular_color\n#define GL_EXT_separate_specular_color 1\n#endif\n\n#ifndef GL_EXT_secondary_color\n#define GL_EXT_secondary_color 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue);\nGLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v);\nGLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue);\nGLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v);\nGLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue);\nGLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v);\nGLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue);\nGLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v);\nGLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue);\nGLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v);\nGLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue);\nGLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v);\nGLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue);\nGLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v);\nGLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue);\nGLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v);\nGLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\n#endif\n\n#ifndef GL_EXT_texture_perturb_normal\n#define GL_EXT_texture_perturb_normal 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTextureNormalEXT (GLenum mode);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode);\n#endif\n\n#ifndef GL_EXT_multi_draw_arrays\n#define GL_EXT_multi_draw_arrays 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);\nGLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);\ntypedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);\n#endif\n\n#ifndef GL_EXT_fog_coord\n#define GL_EXT_fog_coord 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFogCoordfEXT (GLfloat coord);\nGLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord);\nGLAPI void APIENTRY glFogCoorddEXT (GLdouble coord);\nGLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord);\nGLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord);\ntypedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord);\ntypedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord);\ntypedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord);\ntypedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);\n#endif\n\n#ifndef GL_REND_screen_coordinates\n#define GL_REND_screen_coordinates 1\n#endif\n\n#ifndef GL_EXT_coordinate_frame\n#define GL_EXT_coordinate_frame 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz);\nGLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v);\nGLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz);\nGLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v);\nGLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz);\nGLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v);\nGLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz);\nGLAPI void APIENTRY glTangent3ivEXT (const GLint *v);\nGLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz);\nGLAPI void APIENTRY glTangent3svEXT (const GLshort *v);\nGLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz);\nGLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v);\nGLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz);\nGLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v);\nGLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz);\nGLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v);\nGLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz);\nGLAPI void APIENTRY glBinormal3ivEXT (const GLint *v);\nGLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz);\nGLAPI void APIENTRY glBinormal3svEXT (const GLshort *v);\nGLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer);\nGLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz);\ntypedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v);\ntypedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz);\ntypedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v);\ntypedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz);\ntypedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v);\ntypedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz);\ntypedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v);\ntypedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz);\ntypedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v);\ntypedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz);\ntypedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v);\ntypedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz);\ntypedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v);\ntypedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz);\ntypedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v);\ntypedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz);\ntypedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v);\ntypedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz);\ntypedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v);\ntypedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);\n#endif\n\n#ifndef GL_EXT_texture_env_combine\n#define GL_EXT_texture_env_combine 1\n#endif\n\n#ifndef GL_APPLE_specular_vector\n#define GL_APPLE_specular_vector 1\n#endif\n\n#ifndef GL_APPLE_transform_hint\n#define GL_APPLE_transform_hint 1\n#endif\n\n#ifndef GL_SGIX_fog_scale\n#define GL_SGIX_fog_scale 1\n#endif\n\n#ifndef GL_SUNX_constant_data\n#define GL_SUNX_constant_data 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFinishTextureSUNX (void);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void);\n#endif\n\n#ifndef GL_SUN_global_alpha\n#define GL_SUN_global_alpha 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor);\nGLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor);\nGLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor);\nGLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor);\nGLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor);\nGLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor);\nGLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor);\nGLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor);\ntypedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor);\ntypedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor);\ntypedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor);\ntypedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor);\ntypedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor);\ntypedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor);\ntypedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor);\n#endif\n\n#ifndef GL_SUN_triangle_list\n#define GL_SUN_triangle_list 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code);\nGLAPI void APIENTRY glReplacementCodeusSUN (GLushort code);\nGLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code);\nGLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code);\nGLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code);\nGLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code);\nGLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const GLvoid* *pointer);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer);\n#endif\n\n#ifndef GL_SUN_vertex\n#define GL_SUN_vertex 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);\nGLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v);\nGLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v);\nGLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v);\nGLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v);\nGLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v);\nGLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v);\nGLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\nGLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v);\nGLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v);\nGLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v);\nGLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v);\nGLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);\nGLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\nGLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);\nGLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v);\nGLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v);\nGLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v);\nGLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v);\nGLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);\nGLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v);\nGLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);\nGLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);\ntypedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);\n#endif\n\n#ifndef GL_EXT_blend_func_separate\n#define GL_EXT_blend_func_separate 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);\n#endif\n\n#ifndef GL_INGR_blend_func_separate\n#define GL_INGR_blend_func_separate 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);\n#endif\n\n#ifndef GL_INGR_color_clamp\n#define GL_INGR_color_clamp 1\n#endif\n\n#ifndef GL_INGR_interlace_read\n#define GL_INGR_interlace_read 1\n#endif\n\n#ifndef GL_EXT_stencil_wrap\n#define GL_EXT_stencil_wrap 1\n#endif\n\n#ifndef GL_EXT_422_pixels\n#define GL_EXT_422_pixels 1\n#endif\n\n#ifndef GL_NV_texgen_reflection\n#define GL_NV_texgen_reflection 1\n#endif\n\n#ifndef GL_SUN_convolution_border_modes\n#define GL_SUN_convolution_border_modes 1\n#endif\n\n#ifndef GL_EXT_texture_env_add\n#define GL_EXT_texture_env_add 1\n#endif\n\n#ifndef GL_EXT_texture_lod_bias\n#define GL_EXT_texture_lod_bias 1\n#endif\n\n#ifndef GL_EXT_texture_filter_anisotropic\n#define GL_EXT_texture_filter_anisotropic 1\n#endif\n\n#ifndef GL_EXT_vertex_weighting\n#define GL_EXT_vertex_weighting 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight);\nGLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight);\nGLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight);\ntypedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight);\ntypedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\n#endif\n\n#ifndef GL_NV_light_max_exponent\n#define GL_NV_light_max_exponent 1\n#endif\n\n#ifndef GL_NV_vertex_array_range\n#define GL_NV_vertex_array_range 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFlushVertexArrayRangeNV (void);\nGLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const GLvoid *pointer);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void);\ntypedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer);\n#endif\n\n#ifndef GL_NV_register_combiners\n#define GL_NV_register_combiners 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param);\nGLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params);\nGLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param);\nGLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);\nGLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);\nGLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);\nGLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);\ntypedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);\ntypedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);\ntypedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params);\n#endif\n\n#ifndef GL_NV_fog_distance\n#define GL_NV_fog_distance 1\n#endif\n\n#ifndef GL_NV_texgen_emboss\n#define GL_NV_texgen_emboss 1\n#endif\n\n#ifndef GL_NV_blend_square\n#define GL_NV_blend_square 1\n#endif\n\n#ifndef GL_NV_texture_env_combine4\n#define GL_NV_texture_env_combine4 1\n#endif\n\n#ifndef GL_MESA_resize_buffers\n#define GL_MESA_resize_buffers 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glResizeBuffersMESA (void);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void);\n#endif\n\n#ifndef GL_MESA_window_pos\n#define GL_MESA_window_pos 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y);\nGLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v);\nGLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y);\nGLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v);\nGLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y);\nGLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v);\nGLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y);\nGLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v);\nGLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z);\nGLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v);\nGLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v);\nGLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z);\nGLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v);\nGLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z);\nGLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v);\nGLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v);\nGLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w);\nGLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v);\nGLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w);\nGLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v);\nGLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w);\nGLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y);\ntypedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z);\ntypedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w);\ntypedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v);\ntypedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w);\ntypedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v);\n#endif\n\n#ifndef GL_EXT_texture_compression_s3tc\n#define GL_EXT_texture_compression_s3tc 1\n#endif\n\n#ifndef GL_IBM_cull_vertex\n#define GL_IBM_cull_vertex 1\n#endif\n\n#ifndef GL_IBM_multimode_draw_arrays\n#define GL_IBM_multimode_draw_arrays 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);\nGLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);\ntypedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride);\n#endif\n\n#ifndef GL_IBM_vertex_array_lists\n#define GL_IBM_vertex_array_lists 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\nGLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\nGLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean* *pointer, GLint ptrstride);\nGLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\nGLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\nGLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\nGLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\nGLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\ntypedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride);\ntypedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\ntypedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\ntypedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\ntypedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\ntypedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\n#endif\n\n#ifndef GL_SGIX_subsample\n#define GL_SGIX_subsample 1\n#endif\n\n#ifndef GL_SGIX_ycrcba\n#define GL_SGIX_ycrcba 1\n#endif\n\n#ifndef GL_SGIX_ycrcb_subsample\n#define GL_SGIX_ycrcb_subsample 1\n#endif\n\n#ifndef GL_SGIX_depth_pass_instrument\n#define GL_SGIX_depth_pass_instrument 1\n#endif\n\n#ifndef GL_3DFX_texture_compression_FXT1\n#define GL_3DFX_texture_compression_FXT1 1\n#endif\n\n#ifndef GL_3DFX_multisample\n#define GL_3DFX_multisample 1\n#endif\n\n#ifndef GL_3DFX_tbuffer\n#define GL_3DFX_tbuffer 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTbufferMask3DFX (GLuint mask);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask);\n#endif\n\n#ifndef GL_EXT_multisample\n#define GL_EXT_multisample 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert);\nGLAPI void APIENTRY glSamplePatternEXT (GLenum pattern);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert);\ntypedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern);\n#endif\n\n#ifndef GL_SGIX_vertex_preclip\n#define GL_SGIX_vertex_preclip 1\n#endif\n\n#ifndef GL_SGIX_convolution_accuracy\n#define GL_SGIX_convolution_accuracy 1\n#endif\n\n#ifndef GL_SGIX_resample\n#define GL_SGIX_resample 1\n#endif\n\n#ifndef GL_SGIS_point_line_texgen\n#define GL_SGIS_point_line_texgen 1\n#endif\n\n#ifndef GL_SGIS_texture_color_mask\n#define GL_SGIS_texture_color_mask 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);\n#endif\n\n#ifndef GL_SGIX_igloo_interface\n#define GL_SGIX_igloo_interface 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const GLvoid *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params);\n#endif\n\n#ifndef GL_EXT_texture_env_dot3\n#define GL_EXT_texture_env_dot3 1\n#endif\n\n#ifndef GL_ATI_texture_mirror_once\n#define GL_ATI_texture_mirror_once 1\n#endif\n\n#ifndef GL_NV_fence\n#define GL_NV_fence 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences);\nGLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences);\nGLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence);\nGLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence);\nGLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params);\nGLAPI void APIENTRY glFinishFenceNV (GLuint fence);\nGLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences);\ntypedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences);\ntypedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence);\ntypedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence);\ntypedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence);\ntypedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);\n#endif\n\n#ifndef GL_IBM_static_data\n#define GL_IBM_static_data 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFlushStaticDataIBM (GLenum target);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target);\n#endif\n\n#ifndef GL_IBM_texture_mirrored_repeat\n#define GL_IBM_texture_mirrored_repeat 1\n#endif\n\n#ifndef GL_NV_evaluators\n#define GL_NV_evaluators 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points);\nGLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points);\nGLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points);\ntypedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points);\ntypedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode);\n#endif\n\n#ifndef GL_NV_packed_depth_stencil\n#define GL_NV_packed_depth_stencil 1\n#endif\n\n#ifndef GL_NV_register_combiners2\n#define GL_NV_register_combiners2 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params);\n#endif\n\n#ifndef GL_NV_texture_compression_vtc\n#define GL_NV_texture_compression_vtc 1\n#endif\n\n#ifndef GL_NV_texture_rectangle\n#define GL_NV_texture_rectangle 1\n#endif\n\n#ifndef GL_NV_texture_shader\n#define GL_NV_texture_shader 1\n#endif\n\n#ifndef GL_NV_texture_shader2\n#define GL_NV_texture_shader2 1\n#endif\n\n#ifndef GL_NV_vertex_array_range2\n#define GL_NV_vertex_array_range2 1\n#endif\n\n#ifndef GL_NV_vertex_program\n#define GL_NV_vertex_program 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences);\nGLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id);\nGLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs);\nGLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params);\nGLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs);\nGLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params);\nGLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program);\nGLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params);\nGLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, GLvoid* *pointer);\nGLAPI GLboolean APIENTRY glIsProgramNV (GLuint id);\nGLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program);\nGLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\nGLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v);\nGLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v);\nGLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v);\nGLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs);\nGLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform);\nGLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer);\nGLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x);\nGLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x);\nGLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v);\nGLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x);\nGLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v);\nGLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y);\nGLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y);\nGLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v);\nGLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y);\nGLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v);\nGLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z);\nGLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v);\nGLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z);\nGLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v);\nGLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\nGLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v);\nGLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);\nGLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v);\nGLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);\nGLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v);\nGLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v);\nGLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v);\nGLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v);\nGLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v);\nGLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v);\nGLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v);\nGLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v);\nGLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v);\nGLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences);\ntypedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id);\ntypedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);\ntypedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs);\ntypedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program);\ntypedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);\ntypedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id);\ntypedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program);\ntypedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);\ntypedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v);\n#endif\n\n#ifndef GL_SGIX_texture_coordinate_clamp\n#define GL_SGIX_texture_coordinate_clamp 1\n#endif\n\n#ifndef GL_SGIX_scalebias_hint\n#define GL_SGIX_scalebias_hint 1\n#endif\n\n#ifndef GL_OML_interlace\n#define GL_OML_interlace 1\n#endif\n\n#ifndef GL_OML_subsample\n#define GL_OML_subsample 1\n#endif\n\n#ifndef GL_OML_resample\n#define GL_OML_resample 1\n#endif\n\n#ifndef GL_NV_copy_depth_to_color\n#define GL_NV_copy_depth_to_color 1\n#endif\n\n#ifndef GL_ATI_envmap_bumpmap\n#define GL_ATI_envmap_bumpmap 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param);\nGLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param);\nGLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param);\nGLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param);\ntypedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param);\ntypedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param);\ntypedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param);\n#endif\n\n#ifndef GL_ATI_fragment_shader\n#define GL_ATI_fragment_shader 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range);\nGLAPI void APIENTRY glBindFragmentShaderATI (GLuint id);\nGLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id);\nGLAPI void APIENTRY glBeginFragmentShaderATI (void);\nGLAPI void APIENTRY glEndFragmentShaderATI (void);\nGLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle);\nGLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle);\nGLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);\nGLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);\nGLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);\nGLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);\nGLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);\nGLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);\nGLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range);\ntypedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id);\ntypedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id);\ntypedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void);\ntypedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void);\ntypedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle);\ntypedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle);\ntypedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);\ntypedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);\ntypedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);\ntypedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);\ntypedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);\ntypedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);\ntypedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value);\n#endif\n\n#ifndef GL_ATI_pn_triangles\n#define GL_ATI_pn_triangles 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param);\nGLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param);\n#endif\n\n#ifndef GL_ATI_vertex_array_object\n#define GL_ATI_vertex_array_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const GLvoid *pointer, GLenum usage);\nGLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer);\nGLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve);\nGLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params);\nGLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer);\nGLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);\nGLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params);\nGLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);\nGLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage);\ntypedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer);\ntypedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve);\ntypedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer);\ntypedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);\ntypedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);\ntypedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params);\n#endif\n\n#ifndef GL_EXT_vertex_shader\n#define GL_EXT_vertex_shader 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBeginVertexShaderEXT (void);\nGLAPI void APIENTRY glEndVertexShaderEXT (void);\nGLAPI void APIENTRY glBindVertexShaderEXT (GLuint id);\nGLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range);\nGLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id);\nGLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1);\nGLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2);\nGLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);\nGLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);\nGLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);\nGLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num);\nGLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num);\nGLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components);\nGLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const GLvoid *addr);\nGLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const GLvoid *addr);\nGLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr);\nGLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr);\nGLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr);\nGLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr);\nGLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr);\nGLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr);\nGLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr);\nGLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr);\nGLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const GLvoid *addr);\nGLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id);\nGLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id);\nGLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value);\nGLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value);\nGLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value);\nGLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value);\nGLAPI GLuint APIENTRY glBindParameterEXT (GLenum value);\nGLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap);\nGLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data);\nGLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data);\nGLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data);\nGLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, GLvoid* *data);\nGLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data);\nGLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data);\nGLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data);\nGLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data);\nGLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data);\nGLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void);\ntypedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void);\ntypedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id);\ntypedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range);\ntypedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id);\ntypedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1);\ntypedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2);\ntypedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);\ntypedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);\ntypedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);\ntypedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);\ntypedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);\ntypedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components);\ntypedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr);\ntypedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr);\ntypedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr);\ntypedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr);\ntypedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr);\ntypedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr);\ntypedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr);\ntypedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr);\ntypedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr);\ntypedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr);\ntypedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const GLvoid *addr);\ntypedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);\ntypedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);\ntypedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value);\ntypedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value);\ntypedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value);\ntypedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value);\ntypedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value);\ntypedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap);\ntypedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);\ntypedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);\ntypedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);\ntypedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data);\ntypedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);\ntypedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);\ntypedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);\ntypedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);\ntypedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);\ntypedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);\n#endif\n\n#ifndef GL_ATI_vertex_streams\n#define GL_ATI_vertex_streams 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x);\nGLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords);\nGLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x);\nGLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords);\nGLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x);\nGLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords);\nGLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x);\nGLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords);\nGLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y);\nGLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords);\nGLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y);\nGLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords);\nGLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y);\nGLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords);\nGLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y);\nGLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords);\nGLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z);\nGLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords);\nGLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z);\nGLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords);\nGLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords);\nGLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z);\nGLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords);\nGLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);\nGLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords);\nGLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w);\nGLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords);\nGLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\nGLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords);\nGLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords);\nGLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz);\nGLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords);\nGLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz);\nGLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords);\nGLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz);\nGLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords);\nGLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz);\nGLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords);\nGLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz);\nGLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords);\nGLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream);\nGLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param);\nGLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords);\ntypedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz);\ntypedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords);\ntypedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz);\ntypedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);\ntypedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz);\ntypedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);\ntypedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz);\ntypedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);\ntypedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz);\ntypedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);\ntypedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream);\ntypedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param);\n#endif\n\n#ifndef GL_ATI_element_array\n#define GL_ATI_element_array 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glElementPointerATI (GLenum type, const GLvoid *pointer);\nGLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count);\nGLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count);\ntypedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count);\n#endif\n\n#ifndef GL_SUN_mesh_array\n#define GL_SUN_mesh_array 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width);\n#endif\n\n#ifndef GL_SUN_slice_accum\n#define GL_SUN_slice_accum 1\n#endif\n\n#ifndef GL_NV_multisample_filter_hint\n#define GL_NV_multisample_filter_hint 1\n#endif\n\n#ifndef GL_NV_depth_clamp\n#define GL_NV_depth_clamp 1\n#endif\n\n#ifndef GL_NV_occlusion_query\n#define GL_NV_occlusion_query 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids);\nGLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids);\nGLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id);\nGLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id);\nGLAPI void APIENTRY glEndOcclusionQueryNV (void);\nGLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids);\ntypedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids);\ntypedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id);\ntypedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id);\ntypedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void);\ntypedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params);\n#endif\n\n#ifndef GL_NV_point_sprite\n#define GL_NV_point_sprite 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param);\nGLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params);\n#endif\n\n#ifndef GL_NV_texture_shader3\n#define GL_NV_texture_shader3 1\n#endif\n\n#ifndef GL_NV_vertex_program1_1\n#define GL_NV_vertex_program1_1 1\n#endif\n\n#ifndef GL_EXT_shadow_funcs\n#define GL_EXT_shadow_funcs 1\n#endif\n\n#ifndef GL_EXT_stencil_two_side\n#define GL_EXT_stencil_two_side 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face);\n#endif\n\n#ifndef GL_ATI_text_fragment_shader\n#define GL_ATI_text_fragment_shader 1\n#endif\n\n#ifndef GL_APPLE_client_storage\n#define GL_APPLE_client_storage 1\n#endif\n\n#ifndef GL_APPLE_element_array\n#define GL_APPLE_element_array 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const GLvoid *pointer);\nGLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count);\nGLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);\nGLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);\nGLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count);\ntypedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);\ntypedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);\ntypedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);\n#endif\n\n#ifndef GL_APPLE_fence\n#define GL_APPLE_fence 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences);\nGLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences);\nGLAPI void APIENTRY glSetFenceAPPLE (GLuint fence);\nGLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence);\nGLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence);\nGLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence);\nGLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name);\nGLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences);\ntypedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences);\ntypedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence);\ntypedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence);\ntypedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence);\ntypedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence);\ntypedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name);\ntypedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name);\n#endif\n\n#ifndef GL_APPLE_vertex_array_object\n#define GL_APPLE_vertex_array_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array);\nGLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays);\nGLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays);\nGLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array);\ntypedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays);\ntypedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays);\ntypedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array);\n#endif\n\n#ifndef GL_APPLE_vertex_array_range\n#define GL_APPLE_vertex_array_range 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer);\nGLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer);\nGLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param);\n#endif\n\n#ifndef GL_APPLE_ycbcr_422\n#define GL_APPLE_ycbcr_422 1\n#endif\n\n#ifndef GL_S3_s3tc\n#define GL_S3_s3tc 1\n#endif\n\n#ifndef GL_ATI_draw_buffers\n#define GL_ATI_draw_buffers 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs);\n#endif\n\n#ifndef GL_ATI_pixel_format_float\n#define GL_ATI_pixel_format_float 1\n/* This is really a WGL extension, but defines some associated GL enums.\n * ATI does not export \"GL_ATI_pixel_format_float\" in the GL_EXTENSIONS string.\n */\n#endif\n\n#ifndef GL_ATI_texture_env_combine3\n#define GL_ATI_texture_env_combine3 1\n#endif\n\n#ifndef GL_ATI_texture_float\n#define GL_ATI_texture_float 1\n#endif\n\n#ifndef GL_NV_float_buffer\n#define GL_NV_float_buffer 1\n#endif\n\n#ifndef GL_NV_fragment_program\n#define GL_NV_fragment_program 1\n/* Some NV_fragment_program entry points are shared with ARB_vertex_program. */\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\nGLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v);\nGLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v);\nGLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params);\nGLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v);\ntypedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params);\n#endif\n\n#ifndef GL_NV_half_float\n#define GL_NV_half_float 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y);\nGLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v);\nGLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z);\nGLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v);\nGLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);\nGLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v);\nGLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);\nGLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v);\nGLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue);\nGLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v);\nGLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);\nGLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v);\nGLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s);\nGLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v);\nGLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t);\nGLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v);\nGLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r);\nGLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v);\nGLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);\nGLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v);\nGLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s);\nGLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v);\nGLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t);\nGLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v);\nGLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);\nGLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v);\nGLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);\nGLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v);\nGLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog);\nGLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog);\nGLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue);\nGLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v);\nGLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight);\nGLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight);\nGLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x);\nGLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v);\nGLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y);\nGLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v);\nGLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);\nGLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v);\nGLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);\nGLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v);\nGLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v);\nGLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v);\nGLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v);\nGLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y);\ntypedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z);\ntypedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);\ntypedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);\ntypedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);\ntypedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);\ntypedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s);\ntypedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t);\ntypedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r);\ntypedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);\ntypedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog);\ntypedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight);\ntypedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);\n#endif\n\n#ifndef GL_NV_pixel_data_range\n#define GL_NV_pixel_data_range 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const GLvoid *pointer);\nGLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target);\n#endif\n\n#ifndef GL_NV_primitive_restart\n#define GL_NV_primitive_restart 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPrimitiveRestartNV (void);\nGLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void);\ntypedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index);\n#endif\n\n#ifndef GL_NV_texture_expand_normal\n#define GL_NV_texture_expand_normal 1\n#endif\n\n#ifndef GL_NV_vertex_program2\n#define GL_NV_vertex_program2 1\n#endif\n\n#ifndef GL_ATI_map_object_buffer\n#define GL_ATI_map_object_buffer 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLvoid* APIENTRY glMapObjectBufferATI (GLuint buffer);\nGLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLvoid* (APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer);\ntypedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer);\n#endif\n\n#ifndef GL_ATI_separate_stencil\n#define GL_ATI_separate_stencil 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);\nGLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);\ntypedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);\n#endif\n\n#ifndef GL_ATI_vertex_attrib_array_object\n#define GL_ATI_vertex_attrib_array_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset);\nGLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params);\n#endif\n\n#ifndef GL_OES_byte_coordinates\n#define GL_OES_byte_coordinates 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s);\nGLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords);\nGLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t);\nGLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords);\nGLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r);\nGLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords);\nGLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q);\nGLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords);\nGLAPI void APIENTRY glTexCoord1bOES (GLbyte s);\nGLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords);\nGLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t);\nGLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords);\nGLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r);\nGLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords);\nGLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q);\nGLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords);\nGLAPI void APIENTRY glVertex2bOES (GLbyte x);\nGLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords);\nGLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y);\nGLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords);\nGLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z);\nGLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords);\ntypedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s);\ntypedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords);\ntypedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t);\ntypedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords);\ntypedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r);\ntypedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords);\ntypedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q);\ntypedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords);\ntypedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x);\ntypedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords);\ntypedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y);\ntypedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords);\ntypedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z);\ntypedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords);\n#endif\n\n#ifndef GL_OES_fixed_point\n#define GL_OES_fixed_point 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value);\nGLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref);\nGLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap);\nGLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);\nGLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);\nGLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);\nGLAPI void APIENTRY glClearDepthxOES (GLfixed depth);\nGLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation);\nGLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue);\nGLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);\nGLAPI void APIENTRY glColor3xvOES (const GLfixed *components);\nGLAPI void APIENTRY glColor4xvOES (const GLfixed *components);\nGLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param);\nGLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params);\nGLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f);\nGLAPI void APIENTRY glEvalCoord1xOES (GLfixed u);\nGLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v);\nGLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords);\nGLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords);\nGLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer);\nGLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param);\nGLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param);\nGLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);\nGLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation);\nGLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params);\nGLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params);\nGLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params);\nGLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params);\nGLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v);\nGLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param);\nGLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values);\nGLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params);\nGLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params);\nGLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params);\nGLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params);\nGLAPI void APIENTRY glIndexxOES (GLfixed component);\nGLAPI void APIENTRY glIndexxvOES (const GLfixed *component);\nGLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param);\nGLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param);\nGLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param);\nGLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params);\nGLAPI void APIENTRY glLineWidthxOES (GLfixed width);\nGLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m);\nGLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m);\nGLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points);\nGLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points);\nGLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2);\nGLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2);\nGLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param);\nGLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param);\nGLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m);\nGLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m);\nGLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s);\nGLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t);\nGLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r);\nGLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q);\nGLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords);\nGLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords);\nGLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords);\nGLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords);\nGLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz);\nGLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords);\nGLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);\nGLAPI void APIENTRY glPassThroughxOES (GLfixed token);\nGLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values);\nGLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param);\nGLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param);\nGLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor);\nGLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params);\nGLAPI void APIENTRY glPointSizexOES (GLfixed size);\nGLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units);\nGLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities);\nGLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y);\nGLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z);\nGLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w);\nGLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords);\nGLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords);\nGLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords);\nGLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2);\nGLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2);\nGLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);\nGLAPI void APIENTRY glSampleCoverageOES (GLfixed value, GLboolean invert);\nGLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z);\nGLAPI void APIENTRY glTexCoord1xOES (GLfixed s);\nGLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t);\nGLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r);\nGLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q);\nGLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords);\nGLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords);\nGLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords);\nGLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords);\nGLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param);\nGLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params);\nGLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param);\nGLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params);\nGLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param);\nGLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params);\nGLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z);\nGLAPI void APIENTRY glVertex2xOES (GLfixed x);\nGLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y);\nGLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z);\nGLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords);\nGLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords);\nGLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value);\ntypedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref);\ntypedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap);\ntypedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);\ntypedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);\ntypedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);\ntypedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth);\ntypedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation);\ntypedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue);\ntypedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha);\ntypedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components);\ntypedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components);\ntypedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param);\ntypedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);\ntypedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f);\ntypedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u);\ntypedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v);\ntypedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords);\ntypedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords);\ntypedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer);\ntypedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param);\ntypedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param);\ntypedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);\ntypedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation);\ntypedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);\ntypedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params);\ntypedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);\ntypedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params);\ntypedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v);\ntypedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param);\ntypedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values);\ntypedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);\ntypedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params);\ntypedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params);\ntypedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params);\ntypedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component);\ntypedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component);\ntypedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param);\ntypedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param);\ntypedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param);\ntypedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params);\ntypedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width);\ntypedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m);\ntypedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m);\ntypedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points);\ntypedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points);\ntypedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2);\ntypedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2);\ntypedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param);\ntypedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param);\ntypedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m);\ntypedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords);\ntypedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz);\ntypedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords);\ntypedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f);\ntypedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token);\ntypedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values);\ntypedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param);\ntypedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param);\ntypedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor);\ntypedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params);\ntypedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size);\ntypedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units);\ntypedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities);\ntypedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y);\ntypedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z);\ntypedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w);\ntypedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords);\ntypedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords);\ntypedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords);\ntypedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2);\ntypedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2);\ntypedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z);\ntypedef void (APIENTRYP PFNGLSAMPLECOVERAGEOESPROC) (GLfixed value, GLboolean invert);\ntypedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z);\ntypedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s);\ntypedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t);\ntypedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r);\ntypedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q);\ntypedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords);\ntypedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords);\ntypedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords);\ntypedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords);\ntypedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param);\ntypedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);\ntypedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param);\ntypedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params);\ntypedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param);\ntypedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params);\ntypedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z);\ntypedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x);\ntypedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y);\ntypedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z);\ntypedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords);\ntypedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords);\ntypedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords);\n#endif\n\n#ifndef GL_OES_single_precision\n#define GL_OES_single_precision 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f);\nGLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);\nGLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);\nGLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation);\nGLAPI void APIENTRY glClearDepthfOES (GLclampf depth);\nGLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f);\ntypedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);\ntypedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f);\ntypedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation);\ntypedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth);\ntypedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation);\n#endif\n\n#ifndef GL_OES_compressed_paletted_texture\n#define GL_OES_compressed_paletted_texture 1\n#endif\n\n#ifndef GL_OES_read_format\n#define GL_OES_read_format 1\n#endif\n\n#ifndef GL_OES_query_matrix\n#define GL_OES_query_matrix 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent);\n#endif\n\n#ifndef GL_EXT_depth_bounds_test\n#define GL_EXT_depth_bounds_test 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax);\n#endif\n\n#ifndef GL_EXT_texture_mirror_clamp\n#define GL_EXT_texture_mirror_clamp 1\n#endif\n\n#ifndef GL_EXT_blend_equation_separate\n#define GL_EXT_blend_equation_separate 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha);\n#endif\n\n#ifndef GL_MESA_pack_invert\n#define GL_MESA_pack_invert 1\n#endif\n\n#ifndef GL_MESA_ycbcr_texture\n#define GL_MESA_ycbcr_texture 1\n#endif\n\n#ifndef GL_EXT_pixel_buffer_object\n#define GL_EXT_pixel_buffer_object 1\n#endif\n\n#ifndef GL_NV_fragment_program_option\n#define GL_NV_fragment_program_option 1\n#endif\n\n#ifndef GL_NV_fragment_program2\n#define GL_NV_fragment_program2 1\n#endif\n\n#ifndef GL_NV_vertex_program2_option\n#define GL_NV_vertex_program2_option 1\n#endif\n\n#ifndef GL_NV_vertex_program3\n#define GL_NV_vertex_program3 1\n#endif\n\n#ifndef GL_EXT_framebuffer_object\n#define GL_EXT_framebuffer_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer);\nGLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer);\nGLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers);\nGLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers);\nGLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params);\nGLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer);\nGLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer);\nGLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers);\nGLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers);\nGLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target);\nGLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);\nGLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);\nGLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);\nGLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);\nGLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGenerateMipmapEXT (GLenum target);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer);\ntypedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer);\ntypedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers);\ntypedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers);\ntypedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer);\ntypedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer);\ntypedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers);\ntypedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers);\ntypedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);\ntypedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target);\n#endif\n\n#ifndef GL_GREMEDY_string_marker\n#define GL_GREMEDY_string_marker 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const GLvoid *string);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string);\n#endif\n\n#ifndef GL_EXT_packed_depth_stencil\n#define GL_EXT_packed_depth_stencil 1\n#endif\n\n#ifndef GL_EXT_stencil_clear_tag\n#define GL_EXT_stencil_clear_tag 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag);\n#endif\n\n#ifndef GL_EXT_texture_sRGB\n#define GL_EXT_texture_sRGB 1\n#endif\n\n#ifndef GL_EXT_framebuffer_blit\n#define GL_EXT_framebuffer_blit 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);\n#endif\n\n#ifndef GL_EXT_framebuffer_multisample\n#define GL_EXT_framebuffer_multisample 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);\n#endif\n\n#ifndef GL_MESAX_texture_stack\n#define GL_MESAX_texture_stack 1\n#endif\n\n#ifndef GL_EXT_timer_query\n#define GL_EXT_timer_query 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64EXT *params);\nGLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64EXT *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params);\ntypedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params);\n#endif\n\n#ifndef GL_EXT_gpu_program_parameters\n#define GL_EXT_gpu_program_parameters 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params);\nGLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params);\n#endif\n\n#ifndef GL_APPLE_flush_buffer_range\n#define GL_APPLE_flush_buffer_range 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param);\nGLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size);\n#endif\n\n#ifndef GL_NV_gpu_program4\n#define GL_NV_gpu_program4 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);\nGLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params);\nGLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params);\nGLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);\nGLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params);\nGLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params);\nGLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);\nGLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params);\nGLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params);\nGLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);\nGLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params);\nGLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params);\nGLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params);\nGLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params);\nGLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params);\nGLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);\ntypedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params);\ntypedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params);\ntypedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);\ntypedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params);\ntypedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params);\ntypedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);\ntypedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params);\ntypedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params);\ntypedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);\ntypedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params);\ntypedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params);\n#endif\n\n#ifndef GL_NV_geometry_program4\n#define GL_NV_geometry_program4 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit);\nGLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level);\nGLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);\nGLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face);\n#endif\n\n#ifndef GL_EXT_geometry_shader4\n#define GL_EXT_geometry_shader4 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value);\n#endif\n\n#ifndef GL_NV_vertex_program4\n#define GL_NV_vertex_program4 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x);\nGLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y);\nGLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z);\nGLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w);\nGLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x);\nGLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y);\nGLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z);\nGLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);\nGLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v);\nGLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v);\nGLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v);\nGLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v);\nGLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v);\nGLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v);\nGLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v);\nGLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v);\nGLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v);\nGLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v);\nGLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v);\nGLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v);\nGLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\nGLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params);\n#endif\n\n#ifndef GL_EXT_gpu_shader4\n#define GL_EXT_gpu_shader4 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params);\nGLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name);\nGLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name);\nGLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0);\nGLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1);\nGLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2);\nGLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);\nGLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value);\nGLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value);\nGLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value);\nGLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params);\ntypedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name);\ntypedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name);\ntypedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0);\ntypedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1);\ntypedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2);\ntypedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);\ntypedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);\ntypedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);\ntypedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);\ntypedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value);\n#endif\n\n#ifndef GL_EXT_draw_instanced\n#define GL_EXT_draw_instanced 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount);\nGLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount);\ntypedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount);\n#endif\n\n#ifndef GL_EXT_packed_float\n#define GL_EXT_packed_float 1\n#endif\n\n#ifndef GL_EXT_texture_array\n#define GL_EXT_texture_array 1\n#endif\n\n#ifndef GL_EXT_texture_buffer_object\n#define GL_EXT_texture_buffer_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer);\n#endif\n\n#ifndef GL_EXT_texture_compression_latc\n#define GL_EXT_texture_compression_latc 1\n#endif\n\n#ifndef GL_EXT_texture_compression_rgtc\n#define GL_EXT_texture_compression_rgtc 1\n#endif\n\n#ifndef GL_EXT_texture_shared_exponent\n#define GL_EXT_texture_shared_exponent 1\n#endif\n\n#ifndef GL_NV_depth_buffer_float\n#define GL_NV_depth_buffer_float 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar);\nGLAPI void APIENTRY glClearDepthdNV (GLdouble depth);\nGLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar);\ntypedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth);\ntypedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax);\n#endif\n\n#ifndef GL_NV_fragment_program4\n#define GL_NV_fragment_program4 1\n#endif\n\n#ifndef GL_NV_framebuffer_multisample_coverage\n#define GL_NV_framebuffer_multisample_coverage 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);\n#endif\n\n#ifndef GL_EXT_framebuffer_sRGB\n#define GL_EXT_framebuffer_sRGB 1\n#endif\n\n#ifndef GL_NV_geometry_shader4\n#define GL_NV_geometry_shader4 1\n#endif\n\n#ifndef GL_NV_parameter_buffer_object\n#define GL_NV_parameter_buffer_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params);\nGLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params);\nGLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params);\ntypedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params);\n#endif\n\n#ifndef GL_EXT_draw_buffers2\n#define GL_EXT_draw_buffers2 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);\nGLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data);\nGLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data);\nGLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index);\nGLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index);\nGLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a);\ntypedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data);\ntypedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data);\ntypedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index);\ntypedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index);\ntypedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index);\n#endif\n\n#ifndef GL_NV_transform_feedback\n#define GL_NV_transform_feedback 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode);\nGLAPI void APIENTRY glEndTransformFeedbackNV (void);\nGLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode);\nGLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);\nGLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset);\nGLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer);\nGLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode);\nGLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name);\nGLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name);\nGLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);\nGLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location);\nGLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode);\ntypedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void);\ntypedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode);\ntypedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);\ntypedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset);\ntypedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer);\ntypedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode);\ntypedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name);\ntypedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name);\ntypedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);\ntypedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location);\ntypedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode);\n#endif\n\n#ifndef GL_EXT_bindable_uniform\n#define GL_EXT_bindable_uniform 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer);\nGLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location);\nGLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer);\ntypedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location);\ntypedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location);\n#endif\n\n#ifndef GL_EXT_texture_integer\n#define GL_EXT_texture_integer 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params);\nGLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params);\nGLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha);\nGLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params);\ntypedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params);\ntypedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha);\ntypedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha);\n#endif\n\n#ifndef GL_GREMEDY_frame_terminator\n#define GL_GREMEDY_frame_terminator 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFrameTerminatorGREMEDY (void);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void);\n#endif\n\n#ifndef GL_NV_conditional_render\n#define GL_NV_conditional_render 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode);\nGLAPI void APIENTRY glEndConditionalRenderNV (void);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode);\ntypedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void);\n#endif\n\n#ifndef GL_NV_present_video\n#define GL_NV_present_video 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1);\nGLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3);\nGLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params);\nGLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params);\nGLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1);\ntypedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3);\ntypedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params);\ntypedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params);\ntypedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params);\n#endif\n\n#ifndef GL_EXT_transform_feedback\n#define GL_EXT_transform_feedback 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode);\nGLAPI void APIENTRY glEndTransformFeedbackEXT (void);\nGLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);\nGLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset);\nGLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer);\nGLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode);\nGLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode);\ntypedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void);\ntypedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);\ntypedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset);\ntypedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer);\ntypedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode);\ntypedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name);\n#endif\n\n#ifndef GL_EXT_direct_state_access\n#define GL_EXT_direct_state_access 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask);\nGLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask);\nGLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m);\nGLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m);\nGLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m);\nGLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m);\nGLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode);\nGLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z);\nGLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z);\nGLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z);\nGLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z);\nGLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);\nGLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);\nGLAPI void APIENTRY glMatrixPopEXT (GLenum mode);\nGLAPI void APIENTRY glMatrixPushEXT (GLenum mode);\nGLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m);\nGLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m);\nGLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m);\nGLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m);\nGLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param);\nGLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param);\nGLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);\nGLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);\nGLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);\nGLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);\nGLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params);\nGLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param);\nGLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param);\nGLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);\nGLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);\nGLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);\nGLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);\nGLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params);\nGLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture);\nGLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index);\nGLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index);\nGLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\nGLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param);\nGLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param);\nGLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param);\nGLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params);\nGLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param);\nGLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param);\nGLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params);\nGLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data);\nGLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data);\nGLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, GLvoid* *data);\nGLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits);\nGLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits);\nGLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits);\nGLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits);\nGLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits);\nGLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits);\nGLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, GLvoid *img);\nGLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits);\nGLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits);\nGLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits);\nGLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits);\nGLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits);\nGLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits);\nGLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, GLvoid *img);\nGLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string);\nGLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params);\nGLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\nGLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params);\nGLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params);\nGLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params);\nGLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, GLvoid *string);\nGLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params);\nGLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);\nGLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params);\nGLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params);\nGLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);\nGLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params);\nGLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params);\nGLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params);\nGLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params);\nGLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params);\nGLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params);\nGLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params);\nGLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params);\nGLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0);\nGLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1);\nGLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);\nGLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);\nGLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0);\nGLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1);\nGLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);\nGLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);\nGLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);\nGLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);\nGLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);\nGLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value);\nGLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\nGLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0);\nGLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1);\nGLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);\nGLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);\nGLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);\nGLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);\nGLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);\nGLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value);\nGLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage);\nGLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data);\nGLAPI GLvoid* APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access);\nGLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer);\nGLAPI GLvoid* APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access);\nGLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length);\nGLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);\nGLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, GLvoid* *params);\nGLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data);\nGLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer);\nGLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer);\nGLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params);\nGLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target);\nGLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);\nGLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);\nGLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);\nGLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);\nGLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target);\nGLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target);\nGLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode);\nGLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs);\nGLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode);\nGLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params);\nGLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);\nGLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);\nGLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face);\nGLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer);\nGLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer);\nGLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x);\nGLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y);\nGLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z);\nGLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\nGLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask);\ntypedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask);\ntypedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m);\ntypedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m);\ntypedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m);\ntypedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m);\ntypedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode);\ntypedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);\ntypedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar);\ntypedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode);\ntypedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode);\ntypedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m);\ntypedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m);\ntypedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m);\ntypedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m);\ntypedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);\ntypedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);\ntypedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);\ntypedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);\ntypedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);\ntypedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);\ntypedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture);\ntypedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index);\ntypedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index);\ntypedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param);\ntypedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params);\ntypedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param);\ntypedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param);\ntypedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params);\ntypedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data);\ntypedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data);\ntypedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLvoid* *data);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits);\ntypedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, GLvoid *img);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits);\ntypedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits);\ntypedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, GLvoid *img);\ntypedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string);\ntypedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params);\ntypedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params);\ntypedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, GLvoid *string);\ntypedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w);\ntypedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params);\ntypedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params);\ntypedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);\ntypedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params);\ntypedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params);\ntypedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params);\ntypedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params);\ntypedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params);\ntypedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params);\ntypedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params);\ntypedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value);\ntypedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage);\ntypedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data);\ntypedef GLvoid* (APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access);\ntypedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer);\ntypedef GLvoid* (APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access);\ntypedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length);\ntypedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);\ntypedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, GLvoid* *params);\ntypedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data);\ntypedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer);\ntypedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer);\ntypedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params);\ntypedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target);\ntypedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);\ntypedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level);\ntypedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);\ntypedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);\ntypedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target);\ntypedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs);\ntypedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode);\ntypedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height);\ntypedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);\ntypedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer);\ntypedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face);\ntypedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer);\ntypedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value);\n#endif\n\n#ifndef GL_EXT_vertex_array_bgra\n#define GL_EXT_vertex_array_bgra 1\n#endif\n\n#ifndef GL_EXT_texture_swizzle\n#define GL_EXT_texture_swizzle 1\n#endif\n\n#ifndef GL_NV_explicit_multisample\n#define GL_NV_explicit_multisample 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val);\nGLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask);\nGLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val);\ntypedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask);\ntypedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer);\n#endif\n\n#ifndef GL_NV_transform_feedback2\n#define GL_NV_transform_feedback2 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id);\nGLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids);\nGLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids);\nGLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id);\nGLAPI void APIENTRY glPauseTransformFeedbackNV (void);\nGLAPI void APIENTRY glResumeTransformFeedbackNV (void);\nGLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id);\ntypedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids);\ntypedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids);\ntypedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id);\ntypedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void);\ntypedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void);\ntypedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id);\n#endif\n\n#ifndef GL_ATI_meminfo\n#define GL_ATI_meminfo 1\n#endif\n\n#ifndef GL_AMD_performance_monitor\n#define GL_AMD_performance_monitor 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups);\nGLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);\nGLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);\nGLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);\nGLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data);\nGLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors);\nGLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors);\nGLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList);\nGLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor);\nGLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor);\nGLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups);\ntypedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters);\ntypedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString);\ntypedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString);\ntypedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data);\ntypedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);\ntypedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors);\ntypedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList);\ntypedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor);\ntypedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor);\ntypedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten);\n#endif\n\n#ifndef GL_AMD_texture_texture4\n#define GL_AMD_texture_texture4 1\n#endif\n\n#ifndef GL_AMD_vertex_shader_tessellator\n#define GL_AMD_vertex_shader_tessellator 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor);\nGLAPI void APIENTRY glTessellationModeAMD (GLenum mode);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor);\ntypedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode);\n#endif\n\n#ifndef GL_EXT_provoking_vertex\n#define GL_EXT_provoking_vertex 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glProvokingVertexEXT (GLenum mode);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode);\n#endif\n\n#ifndef GL_EXT_texture_snorm\n#define GL_EXT_texture_snorm 1\n#endif\n\n#ifndef GL_AMD_draw_buffers_blend\n#define GL_AMD_draw_buffers_blend 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst);\nGLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);\nGLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode);\nGLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst);\ntypedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);\ntypedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode);\ntypedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha);\n#endif\n\n#ifndef GL_APPLE_texture_range\n#define GL_APPLE_texture_range 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const GLvoid *pointer);\nGLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, GLvoid* *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, GLvoid* *params);\n#endif\n\n#ifndef GL_APPLE_float_pixels\n#define GL_APPLE_float_pixels 1\n#endif\n\n#ifndef GL_APPLE_vertex_program_evaluators\n#define GL_APPLE_vertex_program_evaluators 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname);\nGLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname);\nGLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname);\nGLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);\nGLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);\nGLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);\nGLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname);\ntypedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname);\ntypedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname);\ntypedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points);\ntypedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points);\ntypedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points);\ntypedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points);\n#endif\n\n#ifndef GL_APPLE_aux_depth_stencil\n#define GL_APPLE_aux_depth_stencil 1\n#endif\n\n#ifndef GL_APPLE_object_purgeable\n#define GL_APPLE_object_purgeable 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option);\nGLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option);\nGLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option);\ntypedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option);\ntypedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params);\n#endif\n\n#ifndef GL_APPLE_row_bytes\n#define GL_APPLE_row_bytes 1\n#endif\n\n#ifndef GL_APPLE_rgb_422\n#define GL_APPLE_rgb_422 1\n#endif\n\n#ifndef GL_NV_video_capture\n#define GL_NV_video_capture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot);\nGLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset);\nGLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture);\nGLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot);\nGLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params);\nGLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params);\nGLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time);\nGLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot);\ntypedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset);\ntypedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture);\ntypedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot);\ntypedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params);\ntypedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params);\ntypedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params);\ntypedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time);\ntypedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params);\ntypedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params);\n#endif\n\n#ifndef GL_NV_copy_image\n#define GL_NV_copy_image 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);\n#endif\n\n#ifndef GL_EXT_separate_shader_objects\n#define GL_EXT_separate_shader_objects 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program);\nGLAPI void APIENTRY glActiveProgramEXT (GLuint program);\nGLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program);\ntypedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program);\ntypedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string);\n#endif\n\n#ifndef GL_NV_parameter_buffer_object2\n#define GL_NV_parameter_buffer_object2 1\n#endif\n\n#ifndef GL_NV_shader_buffer_load\n#define GL_NV_shader_buffer_load 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access);\nGLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target);\nGLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target);\nGLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access);\nGLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer);\nGLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer);\nGLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params);\nGLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params);\nGLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result);\nGLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value);\nGLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);\nGLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params);\nGLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value);\nGLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access);\ntypedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target);\ntypedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target);\ntypedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access);\ntypedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer);\ntypedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer);\ntypedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params);\ntypedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params);\ntypedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result);\ntypedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value);\ntypedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);\ntypedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);\n#endif\n\n#ifndef GL_NV_vertex_buffer_unified_memory\n#define GL_NV_vertex_buffer_unified_memory 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length);\nGLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride);\nGLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride);\nGLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride);\nGLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride);\nGLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride);\nGLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride);\nGLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride);\nGLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride);\nGLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride);\nGLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride);\nGLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length);\ntypedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);\ntypedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride);\ntypedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);\ntypedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride);\ntypedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);\ntypedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride);\ntypedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride);\ntypedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride);\ntypedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result);\n#endif\n\n#ifndef GL_NV_texture_barrier\n#define GL_NV_texture_barrier 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTextureBarrierNV (void);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void);\n#endif\n\n#ifndef GL_AMD_shader_stencil_export\n#define GL_AMD_shader_stencil_export 1\n#endif\n\n#ifndef GL_AMD_seamless_cubemap_per_texture\n#define GL_AMD_seamless_cubemap_per_texture 1\n#endif\n\n#ifndef GL_AMD_conservative_depth\n#define GL_AMD_conservative_depth 1\n#endif\n\n#ifndef GL_EXT_shader_image_load_store\n#define GL_EXT_shader_image_load_store 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format);\nGLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format);\ntypedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers);\n#endif\n\n#ifndef GL_EXT_vertex_attrib_64bit\n#define GL_EXT_vertex_attrib_64bit 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x);\nGLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y);\nGLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z);\nGLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\nGLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v);\nGLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\nGLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params);\nGLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params);\ntypedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);\n#endif\n\n#ifndef GL_NV_gpu_program5\n#define GL_NV_gpu_program5 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params);\nGLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params);\ntypedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param);\n#endif\n\n#ifndef GL_NV_gpu_shader5\n#define GL_NV_gpu_shader5 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x);\nGLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y);\nGLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);\nGLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);\nGLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value);\nGLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value);\nGLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value);\nGLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value);\nGLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x);\nGLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y);\nGLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);\nGLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);\nGLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);\nGLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);\nGLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);\nGLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value);\nGLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params);\nGLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x);\nGLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y);\nGLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);\nGLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);\nGLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);\nGLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);\nGLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);\nGLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);\nGLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x);\nGLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y);\nGLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);\nGLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);\nGLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);\nGLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);\nGLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);\nGLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x);\ntypedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y);\ntypedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);\ntypedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);\ntypedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);\ntypedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);\ntypedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);\ntypedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value);\ntypedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x);\ntypedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y);\ntypedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);\ntypedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);\ntypedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);\ntypedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);\ntypedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);\ntypedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value);\ntypedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value);\n#endif\n\n#ifndef GL_NV_shader_buffer_store\n#define GL_NV_shader_buffer_store 1\n#endif\n\n#ifndef GL_NV_tessellation_program5\n#define GL_NV_tessellation_program5 1\n#endif\n\n#ifndef GL_NV_vertex_attrib_integer_64bit\n#define GL_NV_vertex_attrib_integer_64bit 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x);\nGLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y);\nGLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z);\nGLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);\nGLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v);\nGLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v);\nGLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v);\nGLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v);\nGLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x);\nGLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y);\nGLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);\nGLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);\nGLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v);\nGLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v);\nGLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v);\nGLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v);\nGLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params);\nGLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params);\nGLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params);\ntypedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params);\ntypedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride);\n#endif\n\n#ifndef GL_NV_multisample_coverage\n#define GL_NV_multisample_coverage 1\n#endif\n\n#ifndef GL_AMD_name_gen_delete\n#define GL_AMD_name_gen_delete 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names);\nGLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names);\nGLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names);\ntypedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names);\ntypedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name);\n#endif\n\n#ifndef GL_AMD_debug_output\n#define GL_AMD_debug_output 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);\nGLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf);\nGLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, GLvoid *userParam);\nGLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled);\ntypedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf);\ntypedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, GLvoid *userParam);\ntypedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message);\n#endif\n\n#ifndef GL_NV_vdpau_interop\n#define GL_NV_vdpau_interop 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVDPAUInitNV (const GLvoid *vdpDevice, const GLvoid *getProcAddress);\nGLAPI void APIENTRY glVDPAUFiniNV (void);\nGLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);\nGLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);\nGLAPI void APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface);\nGLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface);\nGLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);\nGLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access);\nGLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces);\nGLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const GLvoid *vdpDevice, const GLvoid *getProcAddress);\ntypedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void);\ntypedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);\ntypedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames);\ntypedef void (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface);\ntypedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface);\ntypedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);\ntypedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access);\ntypedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces);\ntypedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces);\n#endif\n\n#ifndef GL_AMD_transform_feedback3_lines_triangles\n#define GL_AMD_transform_feedback3_lines_triangles 1\n#endif\n\n#ifndef GL_AMD_depth_clamp_separate\n#define GL_AMD_depth_clamp_separate 1\n#endif\n\n#ifndef GL_EXT_texture_sRGB_decode\n#define GL_EXT_texture_sRGB_decode 1\n#endif\n\n#ifndef GL_NV_texture_multisample\n#define GL_NV_texture_multisample 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);\nGLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);\nGLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);\nGLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);\nGLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);\nGLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);\ntypedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);\ntypedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);\ntypedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);\ntypedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations);\ntypedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations);\n#endif\n\n#ifndef GL_AMD_blend_minmax_factor\n#define GL_AMD_blend_minmax_factor 1\n#endif\n\n#ifndef GL_AMD_sample_positions\n#define GL_AMD_sample_positions 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val);\n#endif\n\n#ifndef GL_EXT_x11_sync_object\n#define GL_EXT_x11_sync_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags);\n#endif\n\n#ifndef GL_AMD_multi_draw_indirect\n#define GL_AMD_multi_draw_indirect 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride);\nGLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride);\ntypedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride);\n#endif\n\n#ifndef GL_EXT_framebuffer_multisample_blit_scaled\n#define GL_EXT_framebuffer_multisample_blit_scaled 1\n#endif\n\n#ifndef GL_NV_path_rendering\n#define GL_NV_path_rendering 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLuint APIENTRY glGenPathsNV (GLsizei range);\nGLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range);\nGLAPI GLboolean APIENTRY glIsPathNV (GLuint path);\nGLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const GLvoid *coords);\nGLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const GLvoid *coords);\nGLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const GLvoid *coords);\nGLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const GLvoid *coords);\nGLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const GLvoid *pathString);\nGLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const GLvoid *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);\nGLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const GLvoid *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);\nGLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);\nGLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath);\nGLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);\nGLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);\nGLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value);\nGLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value);\nGLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value);\nGLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value);\nGLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray);\nGLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask);\nGLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units);\nGLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask);\nGLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask);\nGLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);\nGLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);\nGLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func);\nGLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs);\nGLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs);\nGLAPI void APIENTRY glPathFogGenNV (GLenum genMode);\nGLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode);\nGLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode);\nGLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);\nGLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);\nGLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value);\nGLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value);\nGLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands);\nGLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords);\nGLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray);\nGLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);\nGLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);\nGLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);\nGLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value);\nGLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value);\nGLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value);\nGLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value);\nGLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y);\nGLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y);\nGLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments);\nGLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range);\ntypedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range);\ntypedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path);\ntypedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const GLvoid *coords);\ntypedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const GLvoid *coords);\ntypedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const GLvoid *coords);\ntypedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const GLvoid *coords);\ntypedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const GLvoid *pathString);\ntypedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const GLvoid *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);\ntypedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const GLvoid *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale);\ntypedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights);\ntypedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath);\ntypedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight);\ntypedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues);\ntypedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value);\ntypedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value);\ntypedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value);\ntypedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value);\ntypedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray);\ntypedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask);\ntypedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units);\ntypedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask);\ntypedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask);\ntypedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues);\ntypedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues);\ntypedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func);\ntypedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs);\ntypedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs);\ntypedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode);\ntypedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode);\ntypedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode);\ntypedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);\ntypedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues);\ntypedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value);\ntypedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value);\ntypedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands);\ntypedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords);\ntypedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray);\ntypedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics);\ntypedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics);\ntypedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const GLvoid *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing);\ntypedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value);\ntypedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value);\ntypedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value);\ntypedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value);\ntypedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y);\ntypedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y);\ntypedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments);\ntypedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY);\n#endif\n\n#ifndef GL_AMD_pinned_memory\n#define GL_AMD_pinned_memory 1\n#endif\n\n#ifndef GL_AMD_stencil_operation_extended\n#define GL_AMD_stencil_operation_extended 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value);\n#endif\n\n#ifndef GL_AMD_vertex_shader_viewport_index\n#define GL_AMD_vertex_shader_viewport_index 1\n#endif\n\n#ifndef GL_AMD_vertex_shader_layer\n#define GL_AMD_vertex_shader_layer 1\n#endif\n\n#ifndef GL_NV_bindless_texture\n#define GL_NV_bindless_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture);\nGLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler);\nGLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle);\nGLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle);\nGLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);\nGLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access);\nGLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle);\nGLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value);\nGLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value);\nGLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value);\nGLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values);\nGLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle);\nGLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture);\ntypedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler);\ntypedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle);\ntypedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle);\ntypedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format);\ntypedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access);\ntypedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle);\ntypedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value);\ntypedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value);\ntypedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values);\ntypedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle);\ntypedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle);\n#endif\n\n#ifndef GL_NV_shader_atomic_float\n#define GL_NV_shader_atomic_float 1\n#endif\n\n#ifndef GL_AMD_query_buffer_object\n#define GL_AMD_query_buffer_object 1\n#endif\n\n#ifndef GL_NV_compute_program5\n#define GL_NV_compute_program5 1\n#endif\n\n#ifndef GL_NV_shader_storage_buffer_object\n#define GL_NV_shader_storage_buffer_object 1\n#endif\n\n#ifndef GL_NV_shader_atomic_counters\n#define GL_NV_shader_atomic_counters 1\n#endif\n\n#ifndef GL_NV_deep_texture3D\n#define GL_NV_deep_texture3D 1\n#endif\n\n#ifndef GL_NVX_conditional_render\n#define GL_NVX_conditional_render 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id);\nGLAPI void APIENTRY glEndConditionalRenderNVX (void);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id);\ntypedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void);\n#endif\n\n#ifndef GL_AMD_sparse_texture\n#define GL_AMD_sparse_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);\nGLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);\ntypedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags);\n#endif\n\n#ifndef GL_AMD_shader_trinary_minmax\n#define GL_AMD_shader_trinary_minmax 1\n#endif\n\n#ifndef GL_INTEL_map_texture\n#define GL_INTEL_map_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glSyncTextureINTEL (GLuint texture);\nGLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level);\nGLAPI GLvoid* APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, const GLint *stride, const GLenum *layout);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture);\ntypedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level);\ntypedef GLvoid* (APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, const GLint *stride, const GLenum *layout);\n#endif\n\n#ifndef GL_NV_draw_texture\n#define GL_NV_draw_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);\n#endif\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Include/gl/glxext.h",
    "content": "#ifndef __glxext_h_\n#define __glxext_h_ 1\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n** Copyright (c) 2013-2014 The Khronos Group Inc.\n**\n** Permission is hereby granted, free of charge, to any person obtaining a\n** copy of this software and/or associated documentation files (the\n** \"Materials\"), to deal in the Materials without restriction, including\n** without limitation the rights to use, copy, modify, merge, publish,\n** distribute, sublicense, and/or sell copies of the Materials, and to\n** permit persons to whom the Materials are furnished to do so, subject to\n** the following conditions:\n**\n** The above copyright notice and this permission notice shall be included\n** in all copies or substantial portions of the Materials.\n**\n** THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\n*/\n/*\n** This header is generated from the Khronos OpenGL / OpenGL ES XML\n** API Registry. The current version of the Registry, generator scripts\n** used to make the header, and the header can be found at\n**   http://www.opengl.org/registry/\n**\n** Khronos $Revision: 28198 $ on $Date: 2014-09-18 07:42:14 -0700 (Thu, 18 Sep 2014) $\n*/\n\n#define GLX_GLXEXT_VERSION 20140918\n\n/* Generated C header for:\n * API: glx\n * Versions considered: .*\n * Versions emitted: 1\\.[3-9]\n * Default extensions included: glx\n * Additional extensions included: _nomatch_^\n * Extensions removed: _nomatch_^\n */\n\n#ifndef GLX_VERSION_1_3\n#define GLX_VERSION_1_3 1\ntypedef XID GLXContextID;\ntypedef struct __GLXFBConfigRec *GLXFBConfig;\ntypedef XID GLXWindow;\ntypedef XID GLXPbuffer;\n#define GLX_WINDOW_BIT                    0x00000001\n#define GLX_PIXMAP_BIT                    0x00000002\n#define GLX_PBUFFER_BIT                   0x00000004\n#define GLX_RGBA_BIT                      0x00000001\n#define GLX_COLOR_INDEX_BIT               0x00000002\n#define GLX_PBUFFER_CLOBBER_MASK          0x08000000\n#define GLX_FRONT_LEFT_BUFFER_BIT         0x00000001\n#define GLX_FRONT_RIGHT_BUFFER_BIT        0x00000002\n#define GLX_BACK_LEFT_BUFFER_BIT          0x00000004\n#define GLX_BACK_RIGHT_BUFFER_BIT         0x00000008\n#define GLX_AUX_BUFFERS_BIT               0x00000010\n#define GLX_DEPTH_BUFFER_BIT              0x00000020\n#define GLX_STENCIL_BUFFER_BIT            0x00000040\n#define GLX_ACCUM_BUFFER_BIT              0x00000080\n#define GLX_CONFIG_CAVEAT                 0x20\n#define GLX_X_VISUAL_TYPE                 0x22\n#define GLX_TRANSPARENT_TYPE              0x23\n#define GLX_TRANSPARENT_INDEX_VALUE       0x24\n#define GLX_TRANSPARENT_RED_VALUE         0x25\n#define GLX_TRANSPARENT_GREEN_VALUE       0x26\n#define GLX_TRANSPARENT_BLUE_VALUE        0x27\n#define GLX_TRANSPARENT_ALPHA_VALUE       0x28\n#define GLX_DONT_CARE                     0xFFFFFFFF\n#define GLX_NONE                          0x8000\n#define GLX_SLOW_CONFIG                   0x8001\n#define GLX_TRUE_COLOR                    0x8002\n#define GLX_DIRECT_COLOR                  0x8003\n#define GLX_PSEUDO_COLOR                  0x8004\n#define GLX_STATIC_COLOR                  0x8005\n#define GLX_GRAY_SCALE                    0x8006\n#define GLX_STATIC_GRAY                   0x8007\n#define GLX_TRANSPARENT_RGB               0x8008\n#define GLX_TRANSPARENT_INDEX             0x8009\n#define GLX_VISUAL_ID                     0x800B\n#define GLX_SCREEN                        0x800C\n#define GLX_NON_CONFORMANT_CONFIG         0x800D\n#define GLX_DRAWABLE_TYPE                 0x8010\n#define GLX_RENDER_TYPE                   0x8011\n#define GLX_X_RENDERABLE                  0x8012\n#define GLX_FBCONFIG_ID                   0x8013\n#define GLX_RGBA_TYPE                     0x8014\n#define GLX_COLOR_INDEX_TYPE              0x8015\n#define GLX_MAX_PBUFFER_WIDTH             0x8016\n#define GLX_MAX_PBUFFER_HEIGHT            0x8017\n#define GLX_MAX_PBUFFER_PIXELS            0x8018\n#define GLX_PRESERVED_CONTENTS            0x801B\n#define GLX_LARGEST_PBUFFER               0x801C\n#define GLX_WIDTH                         0x801D\n#define GLX_HEIGHT                        0x801E\n#define GLX_EVENT_MASK                    0x801F\n#define GLX_DAMAGED                       0x8020\n#define GLX_SAVED                         0x8021\n#define GLX_WINDOW                        0x8022\n#define GLX_PBUFFER                       0x8023\n#define GLX_PBUFFER_HEIGHT                0x8040\n#define GLX_PBUFFER_WIDTH                 0x8041\ntypedef GLXFBConfig *( *PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements);\ntypedef GLXFBConfig *( *PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);\ntypedef int ( *PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value);\ntypedef XVisualInfo *( *PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config);\ntypedef GLXWindow ( *PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);\ntypedef void ( *PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win);\ntypedef GLXPixmap ( *PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);\ntypedef void ( *PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap);\ntypedef GLXPbuffer ( *PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list);\ntypedef void ( *PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf);\ntypedef void ( *PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);\ntypedef GLXContext ( *PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);\ntypedef Bool ( *PFNGLXMAKECONTEXTCURRENTPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);\ntypedef GLXDrawable ( *PFNGLXGETCURRENTREADDRAWABLEPROC) (void);\ntypedef int ( *PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value);\ntypedef void ( *PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask);\ntypedef void ( *PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask);\n#ifdef GLX_GLXEXT_PROTOTYPES\nGLXFBConfig *glXGetFBConfigs (Display *dpy, int screen, int *nelements);\nGLXFBConfig *glXChooseFBConfig (Display *dpy, int screen, const int *attrib_list, int *nelements);\nint glXGetFBConfigAttrib (Display *dpy, GLXFBConfig config, int attribute, int *value);\nXVisualInfo *glXGetVisualFromFBConfig (Display *dpy, GLXFBConfig config);\nGLXWindow glXCreateWindow (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);\nvoid glXDestroyWindow (Display *dpy, GLXWindow win);\nGLXPixmap glXCreatePixmap (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);\nvoid glXDestroyPixmap (Display *dpy, GLXPixmap pixmap);\nGLXPbuffer glXCreatePbuffer (Display *dpy, GLXFBConfig config, const int *attrib_list);\nvoid glXDestroyPbuffer (Display *dpy, GLXPbuffer pbuf);\nvoid glXQueryDrawable (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);\nGLXContext glXCreateNewContext (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);\nBool glXMakeContextCurrent (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);\nGLXDrawable glXGetCurrentReadDrawable (void);\nint glXQueryContext (Display *dpy, GLXContext ctx, int attribute, int *value);\nvoid glXSelectEvent (Display *dpy, GLXDrawable draw, unsigned long event_mask);\nvoid glXGetSelectedEvent (Display *dpy, GLXDrawable draw, unsigned long *event_mask);\n#endif\n#endif /* GLX_VERSION_1_3 */\n\n#ifndef GLX_VERSION_1_4\n#define GLX_VERSION_1_4 1\ntypedef void ( *__GLXextFuncPtr)(void);\n#define GLX_SAMPLE_BUFFERS                100000\n#define GLX_SAMPLES                       100001\ntypedef __GLXextFuncPtr ( *PFNGLXGETPROCADDRESSPROC) (const GLubyte *procName);\n#ifdef GLX_GLXEXT_PROTOTYPES\n__GLXextFuncPtr glXGetProcAddress (const GLubyte *procName);\n#endif\n#endif /* GLX_VERSION_1_4 */\n\n#ifndef GLX_ARB_context_flush_control\n#define GLX_ARB_context_flush_control 1\n#define GLX_CONTEXT_RELEASE_BEHAVIOR_ARB  0x2097\n#define GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0\n#define GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098\n#endif /* GLX_ARB_context_flush_control */\n\n#ifndef GLX_ARB_create_context\n#define GLX_ARB_create_context 1\n#define GLX_CONTEXT_DEBUG_BIT_ARB         0x00000001\n#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002\n#define GLX_CONTEXT_MAJOR_VERSION_ARB     0x2091\n#define GLX_CONTEXT_MINOR_VERSION_ARB     0x2092\n#define GLX_CONTEXT_FLAGS_ARB             0x2094\ntypedef GLXContext ( *PFNGLXCREATECONTEXTATTRIBSARBPROC) (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);\n#ifdef GLX_GLXEXT_PROTOTYPES\nGLXContext glXCreateContextAttribsARB (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list);\n#endif\n#endif /* GLX_ARB_create_context */\n\n#ifndef GLX_ARB_create_context_profile\n#define GLX_ARB_create_context_profile 1\n#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB  0x00000001\n#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002\n#define GLX_CONTEXT_PROFILE_MASK_ARB      0x9126\n#endif /* GLX_ARB_create_context_profile */\n\n#ifndef GLX_ARB_create_context_robustness\n#define GLX_ARB_create_context_robustness 1\n#define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004\n#define GLX_LOSE_CONTEXT_ON_RESET_ARB     0x8252\n#define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256\n#define GLX_NO_RESET_NOTIFICATION_ARB     0x8261\n#endif /* GLX_ARB_create_context_robustness */\n\n#ifndef GLX_ARB_fbconfig_float\n#define GLX_ARB_fbconfig_float 1\n#define GLX_RGBA_FLOAT_TYPE_ARB           0x20B9\n#define GLX_RGBA_FLOAT_BIT_ARB            0x00000004\n#endif /* GLX_ARB_fbconfig_float */\n\n#ifndef GLX_ARB_framebuffer_sRGB\n#define GLX_ARB_framebuffer_sRGB 1\n#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB  0x20B2\n#endif /* GLX_ARB_framebuffer_sRGB */\n\n#ifndef GLX_ARB_get_proc_address\n#define GLX_ARB_get_proc_address 1\ntypedef __GLXextFuncPtr ( *PFNGLXGETPROCADDRESSARBPROC) (const GLubyte *procName);\n#ifdef GLX_GLXEXT_PROTOTYPES\n__GLXextFuncPtr glXGetProcAddressARB (const GLubyte *procName);\n#endif\n#endif /* GLX_ARB_get_proc_address */\n\n#ifndef GLX_ARB_multisample\n#define GLX_ARB_multisample 1\n#define GLX_SAMPLE_BUFFERS_ARB            100000\n#define GLX_SAMPLES_ARB                   100001\n#endif /* GLX_ARB_multisample */\n\n#ifndef GLX_ARB_robustness_application_isolation\n#define GLX_ARB_robustness_application_isolation 1\n#define GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008\n#endif /* GLX_ARB_robustness_application_isolation */\n\n#ifndef GLX_ARB_robustness_share_group_isolation\n#define GLX_ARB_robustness_share_group_isolation 1\n#endif /* GLX_ARB_robustness_share_group_isolation */\n\n#ifndef GLX_ARB_vertex_buffer_object\n#define GLX_ARB_vertex_buffer_object 1\n#define GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095\n#endif /* GLX_ARB_vertex_buffer_object */\n\n#ifndef GLX_3DFX_multisample\n#define GLX_3DFX_multisample 1\n#define GLX_SAMPLE_BUFFERS_3DFX           0x8050\n#define GLX_SAMPLES_3DFX                  0x8051\n#endif /* GLX_3DFX_multisample */\n\n#ifndef GLX_AMD_gpu_association\n#define GLX_AMD_gpu_association 1\n#define GLX_GPU_VENDOR_AMD                0x1F00\n#define GLX_GPU_RENDERER_STRING_AMD       0x1F01\n#define GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02\n#define GLX_GPU_FASTEST_TARGET_GPUS_AMD   0x21A2\n#define GLX_GPU_RAM_AMD                   0x21A3\n#define GLX_GPU_CLOCK_AMD                 0x21A4\n#define GLX_GPU_NUM_PIPES_AMD             0x21A5\n#define GLX_GPU_NUM_SIMD_AMD              0x21A6\n#define GLX_GPU_NUM_RB_AMD                0x21A7\n#define GLX_GPU_NUM_SPI_AMD               0x21A8\ntypedef unsigned int ( *PFNGLXGETGPUIDSAMDPROC) (unsigned int maxCount, unsigned int *ids);\ntypedef int ( *PFNGLXGETGPUINFOAMDPROC) (unsigned int id, int property, GLenum dataType, unsigned int size, void *data);\ntypedef unsigned int ( *PFNGLXGETCONTEXTGPUIDAMDPROC) (GLXContext ctx);\ntypedef GLXContext ( *PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC) (unsigned int id, GLXContext share_list);\ntypedef GLXContext ( *PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (unsigned int id, GLXContext share_context, const int *attribList);\ntypedef Bool ( *PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC) (GLXContext ctx);\ntypedef Bool ( *PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (GLXContext ctx);\ntypedef GLXContext ( *PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void);\ntypedef void ( *PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC) (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);\n#ifdef GLX_GLXEXT_PROTOTYPES\nunsigned int glXGetGPUIDsAMD (unsigned int maxCount, unsigned int *ids);\nint glXGetGPUInfoAMD (unsigned int id, int property, GLenum dataType, unsigned int size, void *data);\nunsigned int glXGetContextGPUIDAMD (GLXContext ctx);\nGLXContext glXCreateAssociatedContextAMD (unsigned int id, GLXContext share_list);\nGLXContext glXCreateAssociatedContextAttribsAMD (unsigned int id, GLXContext share_context, const int *attribList);\nBool glXDeleteAssociatedContextAMD (GLXContext ctx);\nBool glXMakeAssociatedContextCurrentAMD (GLXContext ctx);\nGLXContext glXGetCurrentAssociatedContextAMD (void);\nvoid glXBlitContextFramebufferAMD (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);\n#endif\n#endif /* GLX_AMD_gpu_association */\n\n#ifndef GLX_EXT_buffer_age\n#define GLX_EXT_buffer_age 1\n#define GLX_BACK_BUFFER_AGE_EXT           0x20F4\n#endif /* GLX_EXT_buffer_age */\n\n#ifndef GLX_EXT_create_context_es2_profile\n#define GLX_EXT_create_context_es2_profile 1\n#define GLX_CONTEXT_ES2_PROFILE_BIT_EXT   0x00000004\n#endif /* GLX_EXT_create_context_es2_profile */\n\n#ifndef GLX_EXT_create_context_es_profile\n#define GLX_EXT_create_context_es_profile 1\n#define GLX_CONTEXT_ES_PROFILE_BIT_EXT    0x00000004\n#endif /* GLX_EXT_create_context_es_profile */\n\n#ifndef GLX_EXT_fbconfig_packed_float\n#define GLX_EXT_fbconfig_packed_float 1\n#define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT  0x20B1\n#define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT   0x00000008\n#endif /* GLX_EXT_fbconfig_packed_float */\n\n#ifndef GLX_EXT_framebuffer_sRGB\n#define GLX_EXT_framebuffer_sRGB 1\n#define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT  0x20B2\n#endif /* GLX_EXT_framebuffer_sRGB */\n\n#ifndef GLX_EXT_import_context\n#define GLX_EXT_import_context 1\n#define GLX_SHARE_CONTEXT_EXT             0x800A\n#define GLX_VISUAL_ID_EXT                 0x800B\n#define GLX_SCREEN_EXT                    0x800C\ntypedef Display *( *PFNGLXGETCURRENTDISPLAYEXTPROC) (void);\ntypedef int ( *PFNGLXQUERYCONTEXTINFOEXTPROC) (Display *dpy, GLXContext context, int attribute, int *value);\ntypedef GLXContextID ( *PFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context);\ntypedef GLXContext ( *PFNGLXIMPORTCONTEXTEXTPROC) (Display *dpy, GLXContextID contextID);\ntypedef void ( *PFNGLXFREECONTEXTEXTPROC) (Display *dpy, GLXContext context);\n#ifdef GLX_GLXEXT_PROTOTYPES\nDisplay *glXGetCurrentDisplayEXT (void);\nint glXQueryContextInfoEXT (Display *dpy, GLXContext context, int attribute, int *value);\nGLXContextID glXGetContextIDEXT (const GLXContext context);\nGLXContext glXImportContextEXT (Display *dpy, GLXContextID contextID);\nvoid glXFreeContextEXT (Display *dpy, GLXContext context);\n#endif\n#endif /* GLX_EXT_import_context */\n\n#ifndef GLX_EXT_stereo_tree\n#define GLX_EXT_stereo_tree 1\ntypedef struct {\n    int type;\n    unsigned long serial;\n    Bool send_event;\n    Display *display;\n    int extension;\n    int evtype;\n    GLXDrawable window;\n    Bool stereo_tree;\n} GLXStereoNotifyEventEXT;\n#define GLX_STEREO_TREE_EXT               0x20F5\n#define GLX_STEREO_NOTIFY_MASK_EXT        0x00000001\n#define GLX_STEREO_NOTIFY_EXT             0x00000000\n#endif /* GLX_EXT_stereo_tree */\n\n#ifndef GLX_EXT_swap_control\n#define GLX_EXT_swap_control 1\n#define GLX_SWAP_INTERVAL_EXT             0x20F1\n#define GLX_MAX_SWAP_INTERVAL_EXT         0x20F2\ntypedef void ( *PFNGLXSWAPINTERVALEXTPROC) (Display *dpy, GLXDrawable drawable, int interval);\n#ifdef GLX_GLXEXT_PROTOTYPES\nvoid glXSwapIntervalEXT (Display *dpy, GLXDrawable drawable, int interval);\n#endif\n#endif /* GLX_EXT_swap_control */\n\n#ifndef GLX_EXT_swap_control_tear\n#define GLX_EXT_swap_control_tear 1\n#define GLX_LATE_SWAPS_TEAR_EXT           0x20F3\n#endif /* GLX_EXT_swap_control_tear */\n\n#ifndef GLX_EXT_texture_from_pixmap\n#define GLX_EXT_texture_from_pixmap 1\n#define GLX_TEXTURE_1D_BIT_EXT            0x00000001\n#define GLX_TEXTURE_2D_BIT_EXT            0x00000002\n#define GLX_TEXTURE_RECTANGLE_BIT_EXT     0x00000004\n#define GLX_BIND_TO_TEXTURE_RGB_EXT       0x20D0\n#define GLX_BIND_TO_TEXTURE_RGBA_EXT      0x20D1\n#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT    0x20D2\n#define GLX_BIND_TO_TEXTURE_TARGETS_EXT   0x20D3\n#define GLX_Y_INVERTED_EXT                0x20D4\n#define GLX_TEXTURE_FORMAT_EXT            0x20D5\n#define GLX_TEXTURE_TARGET_EXT            0x20D6\n#define GLX_MIPMAP_TEXTURE_EXT            0x20D7\n#define GLX_TEXTURE_FORMAT_NONE_EXT       0x20D8\n#define GLX_TEXTURE_FORMAT_RGB_EXT        0x20D9\n#define GLX_TEXTURE_FORMAT_RGBA_EXT       0x20DA\n#define GLX_TEXTURE_1D_EXT                0x20DB\n#define GLX_TEXTURE_2D_EXT                0x20DC\n#define GLX_TEXTURE_RECTANGLE_EXT         0x20DD\n#define GLX_FRONT_LEFT_EXT                0x20DE\n#define GLX_FRONT_RIGHT_EXT               0x20DF\n#define GLX_BACK_LEFT_EXT                 0x20E0\n#define GLX_BACK_RIGHT_EXT                0x20E1\n#define GLX_FRONT_EXT                     0x20DE\n#define GLX_BACK_EXT                      0x20E0\n#define GLX_AUX0_EXT                      0x20E2\n#define GLX_AUX1_EXT                      0x20E3\n#define GLX_AUX2_EXT                      0x20E4\n#define GLX_AUX3_EXT                      0x20E5\n#define GLX_AUX4_EXT                      0x20E6\n#define GLX_AUX5_EXT                      0x20E7\n#define GLX_AUX6_EXT                      0x20E8\n#define GLX_AUX7_EXT                      0x20E9\n#define GLX_AUX8_EXT                      0x20EA\n#define GLX_AUX9_EXT                      0x20EB\ntypedef void ( *PFNGLXBINDTEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list);\ntypedef void ( *PFNGLXRELEASETEXIMAGEEXTPROC) (Display *dpy, GLXDrawable drawable, int buffer);\n#ifdef GLX_GLXEXT_PROTOTYPES\nvoid glXBindTexImageEXT (Display *dpy, GLXDrawable drawable, int buffer, const int *attrib_list);\nvoid glXReleaseTexImageEXT (Display *dpy, GLXDrawable drawable, int buffer);\n#endif\n#endif /* GLX_EXT_texture_from_pixmap */\n\n#ifndef GLX_EXT_visual_info\n#define GLX_EXT_visual_info 1\n#define GLX_X_VISUAL_TYPE_EXT             0x22\n#define GLX_TRANSPARENT_TYPE_EXT          0x23\n#define GLX_TRANSPARENT_INDEX_VALUE_EXT   0x24\n#define GLX_TRANSPARENT_RED_VALUE_EXT     0x25\n#define GLX_TRANSPARENT_GREEN_VALUE_EXT   0x26\n#define GLX_TRANSPARENT_BLUE_VALUE_EXT    0x27\n#define GLX_TRANSPARENT_ALPHA_VALUE_EXT   0x28\n#define GLX_NONE_EXT                      0x8000\n#define GLX_TRUE_COLOR_EXT                0x8002\n#define GLX_DIRECT_COLOR_EXT              0x8003\n#define GLX_PSEUDO_COLOR_EXT              0x8004\n#define GLX_STATIC_COLOR_EXT              0x8005\n#define GLX_GRAY_SCALE_EXT                0x8006\n#define GLX_STATIC_GRAY_EXT               0x8007\n#define GLX_TRANSPARENT_RGB_EXT           0x8008\n#define GLX_TRANSPARENT_INDEX_EXT         0x8009\n#endif /* GLX_EXT_visual_info */\n\n#ifndef GLX_EXT_visual_rating\n#define GLX_EXT_visual_rating 1\n#define GLX_VISUAL_CAVEAT_EXT             0x20\n#define GLX_SLOW_VISUAL_EXT               0x8001\n#define GLX_NON_CONFORMANT_VISUAL_EXT     0x800D\n#endif /* GLX_EXT_visual_rating */\n\n#ifndef GLX_INTEL_swap_event\n#define GLX_INTEL_swap_event 1\n#define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000\n#define GLX_EXCHANGE_COMPLETE_INTEL       0x8180\n#define GLX_COPY_COMPLETE_INTEL           0x8181\n#define GLX_FLIP_COMPLETE_INTEL           0x8182\n#endif /* GLX_INTEL_swap_event */\n\n#ifndef GLX_MESA_agp_offset\n#define GLX_MESA_agp_offset 1\ntypedef unsigned int ( *PFNGLXGETAGPOFFSETMESAPROC) (const void *pointer);\n#ifdef GLX_GLXEXT_PROTOTYPES\nunsigned int glXGetAGPOffsetMESA (const void *pointer);\n#endif\n#endif /* GLX_MESA_agp_offset */\n\n#ifndef GLX_MESA_copy_sub_buffer\n#define GLX_MESA_copy_sub_buffer 1\ntypedef void ( *PFNGLXCOPYSUBBUFFERMESAPROC) (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height);\n#ifdef GLX_GLXEXT_PROTOTYPES\nvoid glXCopySubBufferMESA (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height);\n#endif\n#endif /* GLX_MESA_copy_sub_buffer */\n\n#ifndef GLX_MESA_pixmap_colormap\n#define GLX_MESA_pixmap_colormap 1\ntypedef GLXPixmap ( *PFNGLXCREATEGLXPIXMAPMESAPROC) (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap);\n#ifdef GLX_GLXEXT_PROTOTYPES\nGLXPixmap glXCreateGLXPixmapMESA (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap);\n#endif\n#endif /* GLX_MESA_pixmap_colormap */\n\n#ifndef GLX_MESA_query_renderer\n#define GLX_MESA_query_renderer 1\n#define GLX_RENDERER_VENDOR_ID_MESA       0x8183\n#define GLX_RENDERER_DEVICE_ID_MESA       0x8184\n#define GLX_RENDERER_VERSION_MESA         0x8185\n#define GLX_RENDERER_ACCELERATED_MESA     0x8186\n#define GLX_RENDERER_VIDEO_MEMORY_MESA    0x8187\n#define GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA 0x8188\n#define GLX_RENDERER_PREFERRED_PROFILE_MESA 0x8189\n#define GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA 0x818A\n#define GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA 0x818B\n#define GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA 0x818C\n#define GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA 0x818D\n#define GLX_RENDERER_ID_MESA              0x818E\ntypedef Bool ( *PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC) (int attribute, unsigned int *value);\ntypedef const char *( *PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC) (int attribute);\ntypedef Bool ( *PFNGLXQUERYRENDERERINTEGERMESAPROC) (Display *dpy, int screen, int renderer, int attribute, unsigned int *value);\ntypedef const char *( *PFNGLXQUERYRENDERERSTRINGMESAPROC) (Display *dpy, int screen, int renderer, int attribute);\n#ifdef GLX_GLXEXT_PROTOTYPES\nBool glXQueryCurrentRendererIntegerMESA (int attribute, unsigned int *value);\nconst char *glXQueryCurrentRendererStringMESA (int attribute);\nBool glXQueryRendererIntegerMESA (Display *dpy, int screen, int renderer, int attribute, unsigned int *value);\nconst char *glXQueryRendererStringMESA (Display *dpy, int screen, int renderer, int attribute);\n#endif\n#endif /* GLX_MESA_query_renderer */\n\n#ifndef GLX_MESA_release_buffers\n#define GLX_MESA_release_buffers 1\ntypedef Bool ( *PFNGLXRELEASEBUFFERSMESAPROC) (Display *dpy, GLXDrawable drawable);\n#ifdef GLX_GLXEXT_PROTOTYPES\nBool glXReleaseBuffersMESA (Display *dpy, GLXDrawable drawable);\n#endif\n#endif /* GLX_MESA_release_buffers */\n\n#ifndef GLX_MESA_set_3dfx_mode\n#define GLX_MESA_set_3dfx_mode 1\n#define GLX_3DFX_WINDOW_MODE_MESA         0x1\n#define GLX_3DFX_FULLSCREEN_MODE_MESA     0x2\ntypedef Bool ( *PFNGLXSET3DFXMODEMESAPROC) (int mode);\n#ifdef GLX_GLXEXT_PROTOTYPES\nBool glXSet3DfxModeMESA (int mode);\n#endif\n#endif /* GLX_MESA_set_3dfx_mode */\n\n#ifndef GLX_NV_copy_buffer\n#define GLX_NV_copy_buffer 1\ntypedef void ( *PFNGLXCOPYBUFFERSUBDATANVPROC) (Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);\ntypedef void ( *PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC) (Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);\n#ifdef GLX_GLXEXT_PROTOTYPES\nvoid glXCopyBufferSubDataNV (Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);\nvoid glXNamedCopyBufferSubDataNV (Display *dpy, GLXContext readCtx, GLXContext writeCtx, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);\n#endif\n#endif /* GLX_NV_copy_buffer */\n\n#ifndef GLX_NV_copy_image\n#define GLX_NV_copy_image 1\ntypedef void ( *PFNGLXCOPYIMAGESUBDATANVPROC) (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);\n#ifdef GLX_GLXEXT_PROTOTYPES\nvoid glXCopyImageSubDataNV (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);\n#endif\n#endif /* GLX_NV_copy_image */\n\n#ifndef GLX_NV_delay_before_swap\n#define GLX_NV_delay_before_swap 1\ntypedef Bool ( *PFNGLXDELAYBEFORESWAPNVPROC) (Display *dpy, GLXDrawable drawable, GLfloat seconds);\n#ifdef GLX_GLXEXT_PROTOTYPES\nBool glXDelayBeforeSwapNV (Display *dpy, GLXDrawable drawable, GLfloat seconds);\n#endif\n#endif /* GLX_NV_delay_before_swap */\n\n#ifndef GLX_NV_float_buffer\n#define GLX_NV_float_buffer 1\n#define GLX_FLOAT_COMPONENTS_NV           0x20B0\n#endif /* GLX_NV_float_buffer */\n\n#ifndef GLX_NV_multisample_coverage\n#define GLX_NV_multisample_coverage 1\n#define GLX_COVERAGE_SAMPLES_NV           100001\n#define GLX_COLOR_SAMPLES_NV              0x20B3\n#endif /* GLX_NV_multisample_coverage */\n\n#ifndef GLX_NV_present_video\n#define GLX_NV_present_video 1\n#define GLX_NUM_VIDEO_SLOTS_NV            0x20F0\ntypedef unsigned int *( *PFNGLXENUMERATEVIDEODEVICESNVPROC) (Display *dpy, int screen, int *nelements);\ntypedef int ( *PFNGLXBINDVIDEODEVICENVPROC) (Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list);\n#ifdef GLX_GLXEXT_PROTOTYPES\nunsigned int *glXEnumerateVideoDevicesNV (Display *dpy, int screen, int *nelements);\nint glXBindVideoDeviceNV (Display *dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list);\n#endif\n#endif /* GLX_NV_present_video */\n\n#ifndef GLX_NV_swap_group\n#define GLX_NV_swap_group 1\ntypedef Bool ( *PFNGLXJOINSWAPGROUPNVPROC) (Display *dpy, GLXDrawable drawable, GLuint group);\ntypedef Bool ( *PFNGLXBINDSWAPBARRIERNVPROC) (Display *dpy, GLuint group, GLuint barrier);\ntypedef Bool ( *PFNGLXQUERYSWAPGROUPNVPROC) (Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier);\ntypedef Bool ( *PFNGLXQUERYMAXSWAPGROUPSNVPROC) (Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers);\ntypedef Bool ( *PFNGLXQUERYFRAMECOUNTNVPROC) (Display *dpy, int screen, GLuint *count);\ntypedef Bool ( *PFNGLXRESETFRAMECOUNTNVPROC) (Display *dpy, int screen);\n#ifdef GLX_GLXEXT_PROTOTYPES\nBool glXJoinSwapGroupNV (Display *dpy, GLXDrawable drawable, GLuint group);\nBool glXBindSwapBarrierNV (Display *dpy, GLuint group, GLuint barrier);\nBool glXQuerySwapGroupNV (Display *dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier);\nBool glXQueryMaxSwapGroupsNV (Display *dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers);\nBool glXQueryFrameCountNV (Display *dpy, int screen, GLuint *count);\nBool glXResetFrameCountNV (Display *dpy, int screen);\n#endif\n#endif /* GLX_NV_swap_group */\n\n#ifndef GLX_NV_video_capture\n#define GLX_NV_video_capture 1\ntypedef XID GLXVideoCaptureDeviceNV;\n#define GLX_DEVICE_ID_NV                  0x20CD\n#define GLX_UNIQUE_ID_NV                  0x20CE\n#define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV    0x20CF\ntypedef int ( *PFNGLXBINDVIDEOCAPTUREDEVICENVPROC) (Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device);\ntypedef GLXVideoCaptureDeviceNV *( *PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC) (Display *dpy, int screen, int *nelements);\ntypedef void ( *PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device);\ntypedef int ( *PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value);\ntypedef void ( *PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC) (Display *dpy, GLXVideoCaptureDeviceNV device);\n#ifdef GLX_GLXEXT_PROTOTYPES\nint glXBindVideoCaptureDeviceNV (Display *dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device);\nGLXVideoCaptureDeviceNV *glXEnumerateVideoCaptureDevicesNV (Display *dpy, int screen, int *nelements);\nvoid glXLockVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device);\nint glXQueryVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value);\nvoid glXReleaseVideoCaptureDeviceNV (Display *dpy, GLXVideoCaptureDeviceNV device);\n#endif\n#endif /* GLX_NV_video_capture */\n\n#ifndef GLX_NV_video_out\n#define GLX_NV_video_out 1\ntypedef unsigned int GLXVideoDeviceNV;\n#define GLX_VIDEO_OUT_COLOR_NV            0x20C3\n#define GLX_VIDEO_OUT_ALPHA_NV            0x20C4\n#define GLX_VIDEO_OUT_DEPTH_NV            0x20C5\n#define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV  0x20C6\n#define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV  0x20C7\n#define GLX_VIDEO_OUT_FRAME_NV            0x20C8\n#define GLX_VIDEO_OUT_FIELD_1_NV          0x20C9\n#define GLX_VIDEO_OUT_FIELD_2_NV          0x20CA\n#define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB\n#define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC\ntypedef int ( *PFNGLXGETVIDEODEVICENVPROC) (Display *dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice);\ntypedef int ( *PFNGLXRELEASEVIDEODEVICENVPROC) (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice);\ntypedef int ( *PFNGLXBINDVIDEOIMAGENVPROC) (Display *dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer);\ntypedef int ( *PFNGLXRELEASEVIDEOIMAGENVPROC) (Display *dpy, GLXPbuffer pbuf);\ntypedef int ( *PFNGLXSENDPBUFFERTOVIDEONVPROC) (Display *dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock);\ntypedef int ( *PFNGLXGETVIDEOINFONVPROC) (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);\n#ifdef GLX_GLXEXT_PROTOTYPES\nint glXGetVideoDeviceNV (Display *dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice);\nint glXReleaseVideoDeviceNV (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice);\nint glXBindVideoImageNV (Display *dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer);\nint glXReleaseVideoImageNV (Display *dpy, GLXPbuffer pbuf);\nint glXSendPbufferToVideoNV (Display *dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock);\nint glXGetVideoInfoNV (Display *dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);\n#endif\n#endif /* GLX_NV_video_out */\n\n#ifndef GLX_OML_swap_method\n#define GLX_OML_swap_method 1\n#define GLX_SWAP_METHOD_OML               0x8060\n#define GLX_SWAP_EXCHANGE_OML             0x8061\n#define GLX_SWAP_COPY_OML                 0x8062\n#define GLX_SWAP_UNDEFINED_OML            0x8063\n#endif /* GLX_OML_swap_method */\n\n#ifndef GLX_OML_sync_control\n#define GLX_OML_sync_control 1\n#ifndef GLEXT_64_TYPES_DEFINED\n/* This code block is duplicated in glext.h, so must be protected */\n#define GLEXT_64_TYPES_DEFINED\n/* Define int32_t, int64_t, and uint64_t types for UST/MSC */\n/* (as used in the GLX_OML_sync_control extension). */\n#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L\n#include <inttypes.h>\n#elif defined(__sun__) || defined(__digital__)\n#include <inttypes.h>\n#if defined(__STDC__)\n#if defined(__arch64__) || defined(_LP64)\ntypedef long int int64_t;\ntypedef unsigned long int uint64_t;\n#else\ntypedef long long int int64_t;\ntypedef unsigned long long int uint64_t;\n#endif /* __arch64__ */\n#endif /* __STDC__ */\n#elif defined( __VMS ) || defined(__sgi)\n#include <inttypes.h>\n#elif defined(__SCO__) || defined(__USLC__)\n#include <stdint.h>\n#elif defined(__UNIXOS2__) || defined(__SOL64__)\ntypedef long int int32_t;\ntypedef long long int int64_t;\ntypedef unsigned long long int uint64_t;\n#elif defined(_WIN32) && defined(__GNUC__)\n#include <stdint.h>\n#elif defined(_WIN32)\ntypedef __int32 int32_t;\ntypedef __int64 int64_t;\ntypedef unsigned __int64 uint64_t;\n#else\n/* Fallback if nothing above works */\n#include <inttypes.h>\n#endif\n#endif\ntypedef Bool ( *PFNGLXGETSYNCVALUESOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc);\ntypedef Bool ( *PFNGLXGETMSCRATEOMLPROC) (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator);\ntypedef int64_t ( *PFNGLXSWAPBUFFERSMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder);\ntypedef Bool ( *PFNGLXWAITFORMSCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc);\ntypedef Bool ( *PFNGLXWAITFORSBCOMLPROC) (Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc);\n#ifdef GLX_GLXEXT_PROTOTYPES\nBool glXGetSyncValuesOML (Display *dpy, GLXDrawable drawable, int64_t *ust, int64_t *msc, int64_t *sbc);\nBool glXGetMscRateOML (Display *dpy, GLXDrawable drawable, int32_t *numerator, int32_t *denominator);\nint64_t glXSwapBuffersMscOML (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder);\nBool glXWaitForMscOML (Display *dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t *ust, int64_t *msc, int64_t *sbc);\nBool glXWaitForSbcOML (Display *dpy, GLXDrawable drawable, int64_t target_sbc, int64_t *ust, int64_t *msc, int64_t *sbc);\n#endif\n#endif /* GLX_OML_sync_control */\n\n#ifndef GLX_SGIS_blended_overlay\n#define GLX_SGIS_blended_overlay 1\n#define GLX_BLENDED_RGBA_SGIS             0x8025\n#endif /* GLX_SGIS_blended_overlay */\n\n#ifndef GLX_SGIS_multisample\n#define GLX_SGIS_multisample 1\n#define GLX_SAMPLE_BUFFERS_SGIS           100000\n#define GLX_SAMPLES_SGIS                  100001\n#endif /* GLX_SGIS_multisample */\n\n#ifndef GLX_SGIS_shared_multisample\n#define GLX_SGIS_shared_multisample 1\n#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026\n#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027\n#endif /* GLX_SGIS_shared_multisample */\n\n#ifndef GLX_SGIX_dmbuffer\n#define GLX_SGIX_dmbuffer 1\ntypedef XID GLXPbufferSGIX;\n#ifdef _DM_BUFFER_H_\n#define GLX_DIGITAL_MEDIA_PBUFFER_SGIX    0x8024\ntypedef Bool ( *PFNGLXASSOCIATEDMPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer);\n#ifdef GLX_GLXEXT_PROTOTYPES\nBool glXAssociateDMPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer);\n#endif\n#endif /* _DM_BUFFER_H_ */\n#endif /* GLX_SGIX_dmbuffer */\n\n#ifndef GLX_SGIX_fbconfig\n#define GLX_SGIX_fbconfig 1\ntypedef struct __GLXFBConfigRec *GLXFBConfigSGIX;\n#define GLX_WINDOW_BIT_SGIX               0x00000001\n#define GLX_PIXMAP_BIT_SGIX               0x00000002\n#define GLX_RGBA_BIT_SGIX                 0x00000001\n#define GLX_COLOR_INDEX_BIT_SGIX          0x00000002\n#define GLX_DRAWABLE_TYPE_SGIX            0x8010\n#define GLX_RENDER_TYPE_SGIX              0x8011\n#define GLX_X_RENDERABLE_SGIX             0x8012\n#define GLX_FBCONFIG_ID_SGIX              0x8013\n#define GLX_RGBA_TYPE_SGIX                0x8014\n#define GLX_COLOR_INDEX_TYPE_SGIX         0x8015\ntypedef int ( *PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value);\ntypedef GLXFBConfigSGIX *( *PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, int *attrib_list, int *nelements);\ntypedef GLXPixmap ( *PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap);\ntypedef GLXContext ( *PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct);\ntypedef XVisualInfo *( *PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config);\ntypedef GLXFBConfigSGIX ( *PFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display *dpy, XVisualInfo *vis);\n#ifdef GLX_GLXEXT_PROTOTYPES\nint glXGetFBConfigAttribSGIX (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value);\nGLXFBConfigSGIX *glXChooseFBConfigSGIX (Display *dpy, int screen, int *attrib_list, int *nelements);\nGLXPixmap glXCreateGLXPixmapWithConfigSGIX (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap);\nGLXContext glXCreateContextWithConfigSGIX (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct);\nXVisualInfo *glXGetVisualFromFBConfigSGIX (Display *dpy, GLXFBConfigSGIX config);\nGLXFBConfigSGIX glXGetFBConfigFromVisualSGIX (Display *dpy, XVisualInfo *vis);\n#endif\n#endif /* GLX_SGIX_fbconfig */\n\n#ifndef GLX_SGIX_hyperpipe\n#define GLX_SGIX_hyperpipe 1\ntypedef struct {\n    char    pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */\n    int     networkId;\n} GLXHyperpipeNetworkSGIX;\ntypedef struct {\n    char    pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */\n    int     channel;\n    unsigned int participationType;\n    int     timeSlice;\n} GLXHyperpipeConfigSGIX;\ntypedef struct {\n    char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */\n    int srcXOrigin, srcYOrigin, srcWidth, srcHeight;\n    int destXOrigin, destYOrigin, destWidth, destHeight;\n} GLXPipeRect;\ntypedef struct {\n    char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */\n    int XOrigin, YOrigin, maxHeight, maxWidth;\n} GLXPipeRectLimits;\n#define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80\n#define GLX_BAD_HYPERPIPE_CONFIG_SGIX     91\n#define GLX_BAD_HYPERPIPE_SGIX            92\n#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX   0x00000001\n#define GLX_HYPERPIPE_RENDER_PIPE_SGIX    0x00000002\n#define GLX_PIPE_RECT_SGIX                0x00000001\n#define GLX_PIPE_RECT_LIMITS_SGIX         0x00000002\n#define GLX_HYPERPIPE_STEREO_SGIX         0x00000003\n#define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX  0x00000004\n#define GLX_HYPERPIPE_ID_SGIX             0x8030\ntypedef GLXHyperpipeNetworkSGIX *( *PFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Display *dpy, int *npipes);\ntypedef int ( *PFNGLXHYPERPIPECONFIGSGIXPROC) (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId);\ntypedef GLXHyperpipeConfigSGIX *( *PFNGLXQUERYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId, int *npipes);\ntypedef int ( *PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId);\ntypedef int ( *PFNGLXBINDHYPERPIPESGIXPROC) (Display *dpy, int hpId);\ntypedef int ( *PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList);\ntypedef int ( *PFNGLXHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList);\ntypedef int ( *PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList);\n#ifdef GLX_GLXEXT_PROTOTYPES\nGLXHyperpipeNetworkSGIX *glXQueryHyperpipeNetworkSGIX (Display *dpy, int *npipes);\nint glXHyperpipeConfigSGIX (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId);\nGLXHyperpipeConfigSGIX *glXQueryHyperpipeConfigSGIX (Display *dpy, int hpId, int *npipes);\nint glXDestroyHyperpipeConfigSGIX (Display *dpy, int hpId);\nint glXBindHyperpipeSGIX (Display *dpy, int hpId);\nint glXQueryHyperpipeBestAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList);\nint glXHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList);\nint glXQueryHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList);\n#endif\n#endif /* GLX_SGIX_hyperpipe */\n\n#ifndef GLX_SGIX_pbuffer\n#define GLX_SGIX_pbuffer 1\n#define GLX_PBUFFER_BIT_SGIX              0x00000004\n#define GLX_BUFFER_CLOBBER_MASK_SGIX      0x08000000\n#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX    0x00000001\n#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX   0x00000002\n#define GLX_BACK_LEFT_BUFFER_BIT_SGIX     0x00000004\n#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX    0x00000008\n#define GLX_AUX_BUFFERS_BIT_SGIX          0x00000010\n#define GLX_DEPTH_BUFFER_BIT_SGIX         0x00000020\n#define GLX_STENCIL_BUFFER_BIT_SGIX       0x00000040\n#define GLX_ACCUM_BUFFER_BIT_SGIX         0x00000080\n#define GLX_SAMPLE_BUFFERS_BIT_SGIX       0x00000100\n#define GLX_MAX_PBUFFER_WIDTH_SGIX        0x8016\n#define GLX_MAX_PBUFFER_HEIGHT_SGIX       0x8017\n#define GLX_MAX_PBUFFER_PIXELS_SGIX       0x8018\n#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX    0x8019\n#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX   0x801A\n#define GLX_PRESERVED_CONTENTS_SGIX       0x801B\n#define GLX_LARGEST_PBUFFER_SGIX          0x801C\n#define GLX_WIDTH_SGIX                    0x801D\n#define GLX_HEIGHT_SGIX                   0x801E\n#define GLX_EVENT_MASK_SGIX               0x801F\n#define GLX_DAMAGED_SGIX                  0x8020\n#define GLX_SAVED_SGIX                    0x8021\n#define GLX_WINDOW_SGIX                   0x8022\n#define GLX_PBUFFER_SGIX                  0x8023\ntypedef GLXPbufferSGIX ( *PFNGLXCREATEGLXPBUFFERSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list);\ntypedef void ( *PFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf);\ntypedef int ( *PFNGLXQUERYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value);\ntypedef void ( *PFNGLXSELECTEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long mask);\ntypedef void ( *PFNGLXGETSELECTEDEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long *mask);\n#ifdef GLX_GLXEXT_PROTOTYPES\nGLXPbufferSGIX glXCreateGLXPbufferSGIX (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list);\nvoid glXDestroyGLXPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuf);\nint glXQueryGLXPbufferSGIX (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value);\nvoid glXSelectEventSGIX (Display *dpy, GLXDrawable drawable, unsigned long mask);\nvoid glXGetSelectedEventSGIX (Display *dpy, GLXDrawable drawable, unsigned long *mask);\n#endif\n#endif /* GLX_SGIX_pbuffer */\n\n#ifndef GLX_SGIX_swap_barrier\n#define GLX_SGIX_swap_barrier 1\ntypedef void ( *PFNGLXBINDSWAPBARRIERSGIXPROC) (Display *dpy, GLXDrawable drawable, int barrier);\ntypedef Bool ( *PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display *dpy, int screen, int *max);\n#ifdef GLX_GLXEXT_PROTOTYPES\nvoid glXBindSwapBarrierSGIX (Display *dpy, GLXDrawable drawable, int barrier);\nBool glXQueryMaxSwapBarriersSGIX (Display *dpy, int screen, int *max);\n#endif\n#endif /* GLX_SGIX_swap_barrier */\n\n#ifndef GLX_SGIX_swap_group\n#define GLX_SGIX_swap_group 1\ntypedef void ( *PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawable, GLXDrawable member);\n#ifdef GLX_GLXEXT_PROTOTYPES\nvoid glXJoinSwapGroupSGIX (Display *dpy, GLXDrawable drawable, GLXDrawable member);\n#endif\n#endif /* GLX_SGIX_swap_group */\n\n#ifndef GLX_SGIX_video_resize\n#define GLX_SGIX_video_resize 1\n#define GLX_SYNC_FRAME_SGIX               0x00000000\n#define GLX_SYNC_SWAP_SGIX                0x00000001\ntypedef int ( *PFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display *display, int screen, int channel, Window window);\ntypedef int ( *PFNGLXCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int x, int y, int w, int h);\ntypedef int ( *PFNGLXQUERYCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh);\ntypedef int ( *PFNGLXQUERYCHANNELDELTASSGIXPROC) (Display *display, int screen, int channel, int *x, int *y, int *w, int *h);\ntypedef int ( *PFNGLXCHANNELRECTSYNCSGIXPROC) (Display *display, int screen, int channel, GLenum synctype);\n#ifdef GLX_GLXEXT_PROTOTYPES\nint glXBindChannelToWindowSGIX (Display *display, int screen, int channel, Window window);\nint glXChannelRectSGIX (Display *display, int screen, int channel, int x, int y, int w, int h);\nint glXQueryChannelRectSGIX (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh);\nint glXQueryChannelDeltasSGIX (Display *display, int screen, int channel, int *x, int *y, int *w, int *h);\nint glXChannelRectSyncSGIX (Display *display, int screen, int channel, GLenum synctype);\n#endif\n#endif /* GLX_SGIX_video_resize */\n\n#ifndef GLX_SGIX_video_source\n#define GLX_SGIX_video_source 1\ntypedef XID GLXVideoSourceSGIX;\n#ifdef _VL_H\ntypedef GLXVideoSourceSGIX ( *PFNGLXCREATEGLXVIDEOSOURCESGIXPROC) (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode);\ntypedef void ( *PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC) (Display *dpy, GLXVideoSourceSGIX glxvideosource);\n#ifdef GLX_GLXEXT_PROTOTYPES\nGLXVideoSourceSGIX glXCreateGLXVideoSourceSGIX (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode);\nvoid glXDestroyGLXVideoSourceSGIX (Display *dpy, GLXVideoSourceSGIX glxvideosource);\n#endif\n#endif /* _VL_H */\n#endif /* GLX_SGIX_video_source */\n\n#ifndef GLX_SGIX_visual_select_group\n#define GLX_SGIX_visual_select_group 1\n#define GLX_VISUAL_SELECT_GROUP_SGIX      0x8028\n#endif /* GLX_SGIX_visual_select_group */\n\n#ifndef GLX_SGI_cushion\n#define GLX_SGI_cushion 1\ntypedef void ( *PFNGLXCUSHIONSGIPROC) (Display *dpy, Window window, float cushion);\n#ifdef GLX_GLXEXT_PROTOTYPES\nvoid glXCushionSGI (Display *dpy, Window window, float cushion);\n#endif\n#endif /* GLX_SGI_cushion */\n\n#ifndef GLX_SGI_make_current_read\n#define GLX_SGI_make_current_read 1\ntypedef Bool ( *PFNGLXMAKECURRENTREADSGIPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);\ntypedef GLXDrawable ( *PFNGLXGETCURRENTREADDRAWABLESGIPROC) (void);\n#ifdef GLX_GLXEXT_PROTOTYPES\nBool glXMakeCurrentReadSGI (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);\nGLXDrawable glXGetCurrentReadDrawableSGI (void);\n#endif\n#endif /* GLX_SGI_make_current_read */\n\n#ifndef GLX_SGI_swap_control\n#define GLX_SGI_swap_control 1\ntypedef int ( *PFNGLXSWAPINTERVALSGIPROC) (int interval);\n#ifdef GLX_GLXEXT_PROTOTYPES\nint glXSwapIntervalSGI (int interval);\n#endif\n#endif /* GLX_SGI_swap_control */\n\n#ifndef GLX_SGI_video_sync\n#define GLX_SGI_video_sync 1\ntypedef int ( *PFNGLXGETVIDEOSYNCSGIPROC) (unsigned int *count);\ntypedef int ( *PFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int *count);\n#ifdef GLX_GLXEXT_PROTOTYPES\nint glXGetVideoSyncSGI (unsigned int *count);\nint glXWaitVideoSyncSGI (int divisor, int remainder, unsigned int *count);\n#endif\n#endif /* GLX_SGI_video_sync */\n\n#ifndef GLX_SUN_get_transparent_index\n#define GLX_SUN_get_transparent_index 1\ntypedef Status ( *PFNGLXGETTRANSPARENTINDEXSUNPROC) (Display *dpy, Window overlay, Window underlay, long *pTransparentIndex);\n#ifdef GLX_GLXEXT_PROTOTYPES\nStatus glXGetTransparentIndexSUN (Display *dpy, Window overlay, Window underlay, long *pTransparentIndex);\n#endif\n#endif /* GLX_SUN_get_transparent_index */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Include/gl/wglext.h",
    "content": "#ifndef __wglext_h_\n#define __wglext_h_ 1\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n** Copyright (c) 2013-2014 The Khronos Group Inc.\n**\n** Permission is hereby granted, free of charge, to any person obtaining a\n** copy of this software and/or associated documentation files (the\n** \"Materials\"), to deal in the Materials without restriction, including\n** without limitation the rights to use, copy, modify, merge, publish,\n** distribute, sublicense, and/or sell copies of the Materials, and to\n** permit persons to whom the Materials are furnished to do so, subject to\n** the following conditions:\n**\n** The above copyright notice and this permission notice shall be included\n** in all copies or substantial portions of the Materials.\n**\n** THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\n*/\n/*\n** This header is generated from the Khronos OpenGL / OpenGL ES XML\n** API Registry. The current version of the Registry, generator scripts\n** used to make the header, and the header can be found at\n**   http://www.opengl.org/registry/\n**\n** Khronos $Revision: 27684 $ on $Date: 2014-08-11 01:21:35 -0700 (Mon, 11 Aug 2014) $\n*/\n\n#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)\n#define WIN32_LEAN_AND_MEAN 1\n#include <windows.h>\n#endif\n\n#define WGL_WGLEXT_VERSION 20140810\n\n/* Generated C header for:\n * API: wgl\n * Versions considered: .*\n * Versions emitted: _nomatch_^\n * Default extensions included: wgl\n * Additional extensions included: _nomatch_^\n * Extensions removed: _nomatch_^\n */\n\n#ifndef WGL_ARB_buffer_region\n#define WGL_ARB_buffer_region 1\n#define WGL_FRONT_COLOR_BUFFER_BIT_ARB    0x00000001\n#define WGL_BACK_COLOR_BUFFER_BIT_ARB     0x00000002\n#define WGL_DEPTH_BUFFER_BIT_ARB          0x00000004\n#define WGL_STENCIL_BUFFER_BIT_ARB        0x00000008\ntypedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType);\ntypedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion);\ntypedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height);\ntypedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);\n#ifdef WGL_WGLEXT_PROTOTYPES\nHANDLE WINAPI wglCreateBufferRegionARB (HDC hDC, int iLayerPlane, UINT uType);\nVOID WINAPI wglDeleteBufferRegionARB (HANDLE hRegion);\nBOOL WINAPI wglSaveBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height);\nBOOL WINAPI wglRestoreBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);\n#endif\n#endif /* WGL_ARB_buffer_region */\n\n#ifndef WGL_ARB_context_flush_control\n#define WGL_ARB_context_flush_control 1\n#define WGL_CONTEXT_RELEASE_BEHAVIOR_ARB  0x2097\n#define WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0\n#define WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098\n#endif /* WGL_ARB_context_flush_control */\n\n#ifndef WGL_ARB_create_context\n#define WGL_ARB_create_context 1\n#define WGL_CONTEXT_DEBUG_BIT_ARB         0x00000001\n#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002\n#define WGL_CONTEXT_MAJOR_VERSION_ARB     0x2091\n#define WGL_CONTEXT_MINOR_VERSION_ARB     0x2092\n#define WGL_CONTEXT_LAYER_PLANE_ARB       0x2093\n#define WGL_CONTEXT_FLAGS_ARB             0x2094\n#define ERROR_INVALID_VERSION_ARB         0x2095\ntypedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int *attribList);\n#ifdef WGL_WGLEXT_PROTOTYPES\nHGLRC WINAPI wglCreateContextAttribsARB (HDC hDC, HGLRC hShareContext, const int *attribList);\n#endif\n#endif /* WGL_ARB_create_context */\n\n#ifndef WGL_ARB_create_context_profile\n#define WGL_ARB_create_context_profile 1\n#define WGL_CONTEXT_PROFILE_MASK_ARB      0x9126\n#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB  0x00000001\n#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002\n#define ERROR_INVALID_PROFILE_ARB         0x2096\n#endif /* WGL_ARB_create_context_profile */\n\n#ifndef WGL_ARB_create_context_robustness\n#define WGL_ARB_create_context_robustness 1\n#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004\n#define WGL_LOSE_CONTEXT_ON_RESET_ARB     0x8252\n#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256\n#define WGL_NO_RESET_NOTIFICATION_ARB     0x8261\n#endif /* WGL_ARB_create_context_robustness */\n\n#ifndef WGL_ARB_extensions_string\n#define WGL_ARB_extensions_string 1\ntypedef const char *(WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);\n#ifdef WGL_WGLEXT_PROTOTYPES\nconst char *WINAPI wglGetExtensionsStringARB (HDC hdc);\n#endif\n#endif /* WGL_ARB_extensions_string */\n\n#ifndef WGL_ARB_framebuffer_sRGB\n#define WGL_ARB_framebuffer_sRGB 1\n#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB  0x20A9\n#endif /* WGL_ARB_framebuffer_sRGB */\n\n#ifndef WGL_ARB_make_current_read\n#define WGL_ARB_make_current_read 1\n#define ERROR_INVALID_PIXEL_TYPE_ARB      0x2043\n#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054\ntypedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);\ntypedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (void);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglMakeContextCurrentARB (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);\nHDC WINAPI wglGetCurrentReadDCARB (void);\n#endif\n#endif /* WGL_ARB_make_current_read */\n\n#ifndef WGL_ARB_multisample\n#define WGL_ARB_multisample 1\n#define WGL_SAMPLE_BUFFERS_ARB            0x2041\n#define WGL_SAMPLES_ARB                   0x2042\n#endif /* WGL_ARB_multisample */\n\n#ifndef WGL_ARB_pbuffer\n#define WGL_ARB_pbuffer 1\nDECLARE_HANDLE(HPBUFFERARB);\n#define WGL_DRAW_TO_PBUFFER_ARB           0x202D\n#define WGL_MAX_PBUFFER_PIXELS_ARB        0x202E\n#define WGL_MAX_PBUFFER_WIDTH_ARB         0x202F\n#define WGL_MAX_PBUFFER_HEIGHT_ARB        0x2030\n#define WGL_PBUFFER_LARGEST_ARB           0x2033\n#define WGL_PBUFFER_WIDTH_ARB             0x2034\n#define WGL_PBUFFER_HEIGHT_ARB            0x2035\n#define WGL_PBUFFER_LOST_ARB              0x2036\ntypedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);\ntypedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer);\ntypedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC);\ntypedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer);\ntypedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);\n#ifdef WGL_WGLEXT_PROTOTYPES\nHPBUFFERARB WINAPI wglCreatePbufferARB (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);\nHDC WINAPI wglGetPbufferDCARB (HPBUFFERARB hPbuffer);\nint WINAPI wglReleasePbufferDCARB (HPBUFFERARB hPbuffer, HDC hDC);\nBOOL WINAPI wglDestroyPbufferARB (HPBUFFERARB hPbuffer);\nBOOL WINAPI wglQueryPbufferARB (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);\n#endif\n#endif /* WGL_ARB_pbuffer */\n\n#ifndef WGL_ARB_pixel_format\n#define WGL_ARB_pixel_format 1\n#define WGL_NUMBER_PIXEL_FORMATS_ARB      0x2000\n#define WGL_DRAW_TO_WINDOW_ARB            0x2001\n#define WGL_DRAW_TO_BITMAP_ARB            0x2002\n#define WGL_ACCELERATION_ARB              0x2003\n#define WGL_NEED_PALETTE_ARB              0x2004\n#define WGL_NEED_SYSTEM_PALETTE_ARB       0x2005\n#define WGL_SWAP_LAYER_BUFFERS_ARB        0x2006\n#define WGL_SWAP_METHOD_ARB               0x2007\n#define WGL_NUMBER_OVERLAYS_ARB           0x2008\n#define WGL_NUMBER_UNDERLAYS_ARB          0x2009\n#define WGL_TRANSPARENT_ARB               0x200A\n#define WGL_TRANSPARENT_RED_VALUE_ARB     0x2037\n#define WGL_TRANSPARENT_GREEN_VALUE_ARB   0x2038\n#define WGL_TRANSPARENT_BLUE_VALUE_ARB    0x2039\n#define WGL_TRANSPARENT_ALPHA_VALUE_ARB   0x203A\n#define WGL_TRANSPARENT_INDEX_VALUE_ARB   0x203B\n#define WGL_SHARE_DEPTH_ARB               0x200C\n#define WGL_SHARE_STENCIL_ARB             0x200D\n#define WGL_SHARE_ACCUM_ARB               0x200E\n#define WGL_SUPPORT_GDI_ARB               0x200F\n#define WGL_SUPPORT_OPENGL_ARB            0x2010\n#define WGL_DOUBLE_BUFFER_ARB             0x2011\n#define WGL_STEREO_ARB                    0x2012\n#define WGL_PIXEL_TYPE_ARB                0x2013\n#define WGL_COLOR_BITS_ARB                0x2014\n#define WGL_RED_BITS_ARB                  0x2015\n#define WGL_RED_SHIFT_ARB                 0x2016\n#define WGL_GREEN_BITS_ARB                0x2017\n#define WGL_GREEN_SHIFT_ARB               0x2018\n#define WGL_BLUE_BITS_ARB                 0x2019\n#define WGL_BLUE_SHIFT_ARB                0x201A\n#define WGL_ALPHA_BITS_ARB                0x201B\n#define WGL_ALPHA_SHIFT_ARB               0x201C\n#define WGL_ACCUM_BITS_ARB                0x201D\n#define WGL_ACCUM_RED_BITS_ARB            0x201E\n#define WGL_ACCUM_GREEN_BITS_ARB          0x201F\n#define WGL_ACCUM_BLUE_BITS_ARB           0x2020\n#define WGL_ACCUM_ALPHA_BITS_ARB          0x2021\n#define WGL_DEPTH_BITS_ARB                0x2022\n#define WGL_STENCIL_BITS_ARB              0x2023\n#define WGL_AUX_BUFFERS_ARB               0x2024\n#define WGL_NO_ACCELERATION_ARB           0x2025\n#define WGL_GENERIC_ACCELERATION_ARB      0x2026\n#define WGL_FULL_ACCELERATION_ARB         0x2027\n#define WGL_SWAP_EXCHANGE_ARB             0x2028\n#define WGL_SWAP_COPY_ARB                 0x2029\n#define WGL_SWAP_UNDEFINED_ARB            0x202A\n#define WGL_TYPE_RGBA_ARB                 0x202B\n#define WGL_TYPE_COLORINDEX_ARB           0x202C\ntypedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);\ntypedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);\ntypedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglGetPixelFormatAttribivARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);\nBOOL WINAPI wglGetPixelFormatAttribfvARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);\nBOOL WINAPI wglChoosePixelFormatARB (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);\n#endif\n#endif /* WGL_ARB_pixel_format */\n\n#ifndef WGL_ARB_pixel_format_float\n#define WGL_ARB_pixel_format_float 1\n#define WGL_TYPE_RGBA_FLOAT_ARB           0x21A0\n#endif /* WGL_ARB_pixel_format_float */\n\n#ifndef WGL_ARB_render_texture\n#define WGL_ARB_render_texture 1\n#define WGL_BIND_TO_TEXTURE_RGB_ARB       0x2070\n#define WGL_BIND_TO_TEXTURE_RGBA_ARB      0x2071\n#define WGL_TEXTURE_FORMAT_ARB            0x2072\n#define WGL_TEXTURE_TARGET_ARB            0x2073\n#define WGL_MIPMAP_TEXTURE_ARB            0x2074\n#define WGL_TEXTURE_RGB_ARB               0x2075\n#define WGL_TEXTURE_RGBA_ARB              0x2076\n#define WGL_NO_TEXTURE_ARB                0x2077\n#define WGL_TEXTURE_CUBE_MAP_ARB          0x2078\n#define WGL_TEXTURE_1D_ARB                0x2079\n#define WGL_TEXTURE_2D_ARB                0x207A\n#define WGL_MIPMAP_LEVEL_ARB              0x207B\n#define WGL_CUBE_MAP_FACE_ARB             0x207C\n#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D\n#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E\n#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F\n#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080\n#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081\n#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082\n#define WGL_FRONT_LEFT_ARB                0x2083\n#define WGL_FRONT_RIGHT_ARB               0x2084\n#define WGL_BACK_LEFT_ARB                 0x2085\n#define WGL_BACK_RIGHT_ARB                0x2086\n#define WGL_AUX0_ARB                      0x2087\n#define WGL_AUX1_ARB                      0x2088\n#define WGL_AUX2_ARB                      0x2089\n#define WGL_AUX3_ARB                      0x208A\n#define WGL_AUX4_ARB                      0x208B\n#define WGL_AUX5_ARB                      0x208C\n#define WGL_AUX6_ARB                      0x208D\n#define WGL_AUX7_ARB                      0x208E\n#define WGL_AUX8_ARB                      0x208F\n#define WGL_AUX9_ARB                      0x2090\ntypedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);\ntypedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);\ntypedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int *piAttribList);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer);\nBOOL WINAPI wglReleaseTexImageARB (HPBUFFERARB hPbuffer, int iBuffer);\nBOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB hPbuffer, const int *piAttribList);\n#endif\n#endif /* WGL_ARB_render_texture */\n\n#ifndef WGL_ARB_robustness_application_isolation\n#define WGL_ARB_robustness_application_isolation 1\n#define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008\n#endif /* WGL_ARB_robustness_application_isolation */\n\n#ifndef WGL_ARB_robustness_share_group_isolation\n#define WGL_ARB_robustness_share_group_isolation 1\n#endif /* WGL_ARB_robustness_share_group_isolation */\n\n#ifndef WGL_3DFX_multisample\n#define WGL_3DFX_multisample 1\n#define WGL_SAMPLE_BUFFERS_3DFX           0x2060\n#define WGL_SAMPLES_3DFX                  0x2061\n#endif /* WGL_3DFX_multisample */\n\n#ifndef WGL_3DL_stereo_control\n#define WGL_3DL_stereo_control 1\n#define WGL_STEREO_EMITTER_ENABLE_3DL     0x2055\n#define WGL_STEREO_EMITTER_DISABLE_3DL    0x2056\n#define WGL_STEREO_POLARITY_NORMAL_3DL    0x2057\n#define WGL_STEREO_POLARITY_INVERT_3DL    0x2058\ntypedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglSetStereoEmitterState3DL (HDC hDC, UINT uState);\n#endif\n#endif /* WGL_3DL_stereo_control */\n\n#ifndef WGL_AMD_gpu_association\n#define WGL_AMD_gpu_association 1\n#define WGL_GPU_VENDOR_AMD                0x1F00\n#define WGL_GPU_RENDERER_STRING_AMD       0x1F01\n#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02\n#define WGL_GPU_FASTEST_TARGET_GPUS_AMD   0x21A2\n#define WGL_GPU_RAM_AMD                   0x21A3\n#define WGL_GPU_CLOCK_AMD                 0x21A4\n#define WGL_GPU_NUM_PIPES_AMD             0x21A5\n#define WGL_GPU_NUM_SIMD_AMD              0x21A6\n#define WGL_GPU_NUM_RB_AMD                0x21A7\n#define WGL_GPU_NUM_SPI_AMD               0x21A8\ntypedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT *ids);\ntypedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, int property, GLenum dataType, UINT size, void *data);\ntypedef UINT (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc);\ntypedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id);\ntypedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int *attribList);\ntypedef BOOL (WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc);\ntypedef BOOL (WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc);\ntypedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void);\ntypedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);\n#ifdef WGL_WGLEXT_PROTOTYPES\nUINT WINAPI wglGetGPUIDsAMD (UINT maxCount, UINT *ids);\nINT WINAPI wglGetGPUInfoAMD (UINT id, int property, GLenum dataType, UINT size, void *data);\nUINT WINAPI wglGetContextGPUIDAMD (HGLRC hglrc);\nHGLRC WINAPI wglCreateAssociatedContextAMD (UINT id);\nHGLRC WINAPI wglCreateAssociatedContextAttribsAMD (UINT id, HGLRC hShareContext, const int *attribList);\nBOOL WINAPI wglDeleteAssociatedContextAMD (HGLRC hglrc);\nBOOL WINAPI wglMakeAssociatedContextCurrentAMD (HGLRC hglrc);\nHGLRC WINAPI wglGetCurrentAssociatedContextAMD (void);\nVOID WINAPI wglBlitContextFramebufferAMD (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);\n#endif\n#endif /* WGL_AMD_gpu_association */\n\n#ifndef WGL_ATI_pixel_format_float\n#define WGL_ATI_pixel_format_float 1\n#define WGL_TYPE_RGBA_FLOAT_ATI           0x21A0\n#endif /* WGL_ATI_pixel_format_float */\n\n#ifndef WGL_EXT_create_context_es2_profile\n#define WGL_EXT_create_context_es2_profile 1\n#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT   0x00000004\n#endif /* WGL_EXT_create_context_es2_profile */\n\n#ifndef WGL_EXT_create_context_es_profile\n#define WGL_EXT_create_context_es_profile 1\n#define WGL_CONTEXT_ES_PROFILE_BIT_EXT    0x00000004\n#endif /* WGL_EXT_create_context_es_profile */\n\n#ifndef WGL_EXT_depth_float\n#define WGL_EXT_depth_float 1\n#define WGL_DEPTH_FLOAT_EXT               0x2040\n#endif /* WGL_EXT_depth_float */\n\n#ifndef WGL_EXT_display_color_table\n#define WGL_EXT_display_color_table 1\ntypedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id);\ntypedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort *table, GLuint length);\ntypedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id);\ntypedef VOID (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id);\n#ifdef WGL_WGLEXT_PROTOTYPES\nGLboolean WINAPI wglCreateDisplayColorTableEXT (GLushort id);\nGLboolean WINAPI wglLoadDisplayColorTableEXT (const GLushort *table, GLuint length);\nGLboolean WINAPI wglBindDisplayColorTableEXT (GLushort id);\nVOID WINAPI wglDestroyDisplayColorTableEXT (GLushort id);\n#endif\n#endif /* WGL_EXT_display_color_table */\n\n#ifndef WGL_EXT_extensions_string\n#define WGL_EXT_extensions_string 1\ntypedef const char *(WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void);\n#ifdef WGL_WGLEXT_PROTOTYPES\nconst char *WINAPI wglGetExtensionsStringEXT (void);\n#endif\n#endif /* WGL_EXT_extensions_string */\n\n#ifndef WGL_EXT_framebuffer_sRGB\n#define WGL_EXT_framebuffer_sRGB 1\n#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT  0x20A9\n#endif /* WGL_EXT_framebuffer_sRGB */\n\n#ifndef WGL_EXT_make_current_read\n#define WGL_EXT_make_current_read 1\n#define ERROR_INVALID_PIXEL_TYPE_EXT      0x2043\ntypedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);\ntypedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (void);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglMakeContextCurrentEXT (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);\nHDC WINAPI wglGetCurrentReadDCEXT (void);\n#endif\n#endif /* WGL_EXT_make_current_read */\n\n#ifndef WGL_EXT_multisample\n#define WGL_EXT_multisample 1\n#define WGL_SAMPLE_BUFFERS_EXT            0x2041\n#define WGL_SAMPLES_EXT                   0x2042\n#endif /* WGL_EXT_multisample */\n\n#ifndef WGL_EXT_pbuffer\n#define WGL_EXT_pbuffer 1\nDECLARE_HANDLE(HPBUFFEREXT);\n#define WGL_DRAW_TO_PBUFFER_EXT           0x202D\n#define WGL_MAX_PBUFFER_PIXELS_EXT        0x202E\n#define WGL_MAX_PBUFFER_WIDTH_EXT         0x202F\n#define WGL_MAX_PBUFFER_HEIGHT_EXT        0x2030\n#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT     0x2031\n#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT    0x2032\n#define WGL_PBUFFER_LARGEST_EXT           0x2033\n#define WGL_PBUFFER_WIDTH_EXT             0x2034\n#define WGL_PBUFFER_HEIGHT_EXT            0x2035\ntypedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);\ntypedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer);\ntypedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC);\ntypedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer);\ntypedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue);\n#ifdef WGL_WGLEXT_PROTOTYPES\nHPBUFFEREXT WINAPI wglCreatePbufferEXT (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);\nHDC WINAPI wglGetPbufferDCEXT (HPBUFFEREXT hPbuffer);\nint WINAPI wglReleasePbufferDCEXT (HPBUFFEREXT hPbuffer, HDC hDC);\nBOOL WINAPI wglDestroyPbufferEXT (HPBUFFEREXT hPbuffer);\nBOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue);\n#endif\n#endif /* WGL_EXT_pbuffer */\n\n#ifndef WGL_EXT_pixel_format\n#define WGL_EXT_pixel_format 1\n#define WGL_NUMBER_PIXEL_FORMATS_EXT      0x2000\n#define WGL_DRAW_TO_WINDOW_EXT            0x2001\n#define WGL_DRAW_TO_BITMAP_EXT            0x2002\n#define WGL_ACCELERATION_EXT              0x2003\n#define WGL_NEED_PALETTE_EXT              0x2004\n#define WGL_NEED_SYSTEM_PALETTE_EXT       0x2005\n#define WGL_SWAP_LAYER_BUFFERS_EXT        0x2006\n#define WGL_SWAP_METHOD_EXT               0x2007\n#define WGL_NUMBER_OVERLAYS_EXT           0x2008\n#define WGL_NUMBER_UNDERLAYS_EXT          0x2009\n#define WGL_TRANSPARENT_EXT               0x200A\n#define WGL_TRANSPARENT_VALUE_EXT         0x200B\n#define WGL_SHARE_DEPTH_EXT               0x200C\n#define WGL_SHARE_STENCIL_EXT             0x200D\n#define WGL_SHARE_ACCUM_EXT               0x200E\n#define WGL_SUPPORT_GDI_EXT               0x200F\n#define WGL_SUPPORT_OPENGL_EXT            0x2010\n#define WGL_DOUBLE_BUFFER_EXT             0x2011\n#define WGL_STEREO_EXT                    0x2012\n#define WGL_PIXEL_TYPE_EXT                0x2013\n#define WGL_COLOR_BITS_EXT                0x2014\n#define WGL_RED_BITS_EXT                  0x2015\n#define WGL_RED_SHIFT_EXT                 0x2016\n#define WGL_GREEN_BITS_EXT                0x2017\n#define WGL_GREEN_SHIFT_EXT               0x2018\n#define WGL_BLUE_BITS_EXT                 0x2019\n#define WGL_BLUE_SHIFT_EXT                0x201A\n#define WGL_ALPHA_BITS_EXT                0x201B\n#define WGL_ALPHA_SHIFT_EXT               0x201C\n#define WGL_ACCUM_BITS_EXT                0x201D\n#define WGL_ACCUM_RED_BITS_EXT            0x201E\n#define WGL_ACCUM_GREEN_BITS_EXT          0x201F\n#define WGL_ACCUM_BLUE_BITS_EXT           0x2020\n#define WGL_ACCUM_ALPHA_BITS_EXT          0x2021\n#define WGL_DEPTH_BITS_EXT                0x2022\n#define WGL_STENCIL_BITS_EXT              0x2023\n#define WGL_AUX_BUFFERS_EXT               0x2024\n#define WGL_NO_ACCELERATION_EXT           0x2025\n#define WGL_GENERIC_ACCELERATION_EXT      0x2026\n#define WGL_FULL_ACCELERATION_EXT         0x2027\n#define WGL_SWAP_EXCHANGE_EXT             0x2028\n#define WGL_SWAP_COPY_EXT                 0x2029\n#define WGL_SWAP_UNDEFINED_EXT            0x202A\n#define WGL_TYPE_RGBA_EXT                 0x202B\n#define WGL_TYPE_COLORINDEX_EXT           0x202C\ntypedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues);\ntypedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues);\ntypedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglGetPixelFormatAttribivEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues);\nBOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues);\nBOOL WINAPI wglChoosePixelFormatEXT (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);\n#endif\n#endif /* WGL_EXT_pixel_format */\n\n#ifndef WGL_EXT_pixel_format_packed_float\n#define WGL_EXT_pixel_format_packed_float 1\n#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT  0x20A8\n#endif /* WGL_EXT_pixel_format_packed_float */\n\n#ifndef WGL_EXT_swap_control\n#define WGL_EXT_swap_control 1\ntypedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval);\ntypedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglSwapIntervalEXT (int interval);\nint WINAPI wglGetSwapIntervalEXT (void);\n#endif\n#endif /* WGL_EXT_swap_control */\n\n#ifndef WGL_EXT_swap_control_tear\n#define WGL_EXT_swap_control_tear 1\n#endif /* WGL_EXT_swap_control_tear */\n\n#ifndef WGL_I3D_digital_video_control\n#define WGL_I3D_digital_video_control 1\n#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050\n#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051\n#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052\n#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053\ntypedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);\ntypedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglGetDigitalVideoParametersI3D (HDC hDC, int iAttribute, int *piValue);\nBOOL WINAPI wglSetDigitalVideoParametersI3D (HDC hDC, int iAttribute, const int *piValue);\n#endif\n#endif /* WGL_I3D_digital_video_control */\n\n#ifndef WGL_I3D_gamma\n#define WGL_I3D_gamma 1\n#define WGL_GAMMA_TABLE_SIZE_I3D          0x204E\n#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D     0x204F\ntypedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);\ntypedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);\ntypedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue);\ntypedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglGetGammaTableParametersI3D (HDC hDC, int iAttribute, int *piValue);\nBOOL WINAPI wglSetGammaTableParametersI3D (HDC hDC, int iAttribute, const int *piValue);\nBOOL WINAPI wglGetGammaTableI3D (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue);\nBOOL WINAPI wglSetGammaTableI3D (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue);\n#endif\n#endif /* WGL_I3D_gamma */\n\n#ifndef WGL_I3D_genlock\n#define WGL_I3D_genlock 1\n#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D  0x2044\n#define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045\n#define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046\n#define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047\n#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048\n#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049\n#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A\n#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B\n#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D  0x204C\ntypedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC);\ntypedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC);\ntypedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag);\ntypedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource);\ntypedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource);\ntypedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge);\ntypedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge);\ntypedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate);\ntypedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate);\ntypedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay);\ntypedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay);\ntypedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglEnableGenlockI3D (HDC hDC);\nBOOL WINAPI wglDisableGenlockI3D (HDC hDC);\nBOOL WINAPI wglIsEnabledGenlockI3D (HDC hDC, BOOL *pFlag);\nBOOL WINAPI wglGenlockSourceI3D (HDC hDC, UINT uSource);\nBOOL WINAPI wglGetGenlockSourceI3D (HDC hDC, UINT *uSource);\nBOOL WINAPI wglGenlockSourceEdgeI3D (HDC hDC, UINT uEdge);\nBOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC hDC, UINT *uEdge);\nBOOL WINAPI wglGenlockSampleRateI3D (HDC hDC, UINT uRate);\nBOOL WINAPI wglGetGenlockSampleRateI3D (HDC hDC, UINT *uRate);\nBOOL WINAPI wglGenlockSourceDelayI3D (HDC hDC, UINT uDelay);\nBOOL WINAPI wglGetGenlockSourceDelayI3D (HDC hDC, UINT *uDelay);\nBOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay);\n#endif\n#endif /* WGL_I3D_genlock */\n\n#ifndef WGL_I3D_image_buffer\n#define WGL_I3D_image_buffer 1\n#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D   0x00000001\n#define WGL_IMAGE_BUFFER_LOCK_I3D         0x00000002\ntypedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags);\ntypedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress);\ntypedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count);\ntypedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count);\n#ifdef WGL_WGLEXT_PROTOTYPES\nLPVOID WINAPI wglCreateImageBufferI3D (HDC hDC, DWORD dwSize, UINT uFlags);\nBOOL WINAPI wglDestroyImageBufferI3D (HDC hDC, LPVOID pAddress);\nBOOL WINAPI wglAssociateImageBufferEventsI3D (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count);\nBOOL WINAPI wglReleaseImageBufferEventsI3D (HDC hDC, const LPVOID *pAddress, UINT count);\n#endif\n#endif /* WGL_I3D_image_buffer */\n\n#ifndef WGL_I3D_swap_frame_lock\n#define WGL_I3D_swap_frame_lock 1\ntypedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (void);\ntypedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (void);\ntypedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL *pFlag);\ntypedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL *pFlag);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglEnableFrameLockI3D (void);\nBOOL WINAPI wglDisableFrameLockI3D (void);\nBOOL WINAPI wglIsEnabledFrameLockI3D (BOOL *pFlag);\nBOOL WINAPI wglQueryFrameLockMasterI3D (BOOL *pFlag);\n#endif\n#endif /* WGL_I3D_swap_frame_lock */\n\n#ifndef WGL_I3D_swap_frame_usage\n#define WGL_I3D_swap_frame_usage 1\ntypedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float *pUsage);\ntypedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void);\ntypedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void);\ntypedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglGetFrameUsageI3D (float *pUsage);\nBOOL WINAPI wglBeginFrameTrackingI3D (void);\nBOOL WINAPI wglEndFrameTrackingI3D (void);\nBOOL WINAPI wglQueryFrameTrackingI3D (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);\n#endif\n#endif /* WGL_I3D_swap_frame_usage */\n\n#ifndef WGL_NV_DX_interop\n#define WGL_NV_DX_interop 1\n#define WGL_ACCESS_READ_ONLY_NV           0x00000000\n#define WGL_ACCESS_READ_WRITE_NV          0x00000001\n#define WGL_ACCESS_WRITE_DISCARD_NV       0x00000002\ntypedef BOOL (WINAPI * PFNWGLDXSETRESOURCESHAREHANDLENVPROC) (void *dxObject, HANDLE shareHandle);\ntypedef HANDLE (WINAPI * PFNWGLDXOPENDEVICENVPROC) (void *dxDevice);\ntypedef BOOL (WINAPI * PFNWGLDXCLOSEDEVICENVPROC) (HANDLE hDevice);\ntypedef HANDLE (WINAPI * PFNWGLDXREGISTEROBJECTNVPROC) (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access);\ntypedef BOOL (WINAPI * PFNWGLDXUNREGISTEROBJECTNVPROC) (HANDLE hDevice, HANDLE hObject);\ntypedef BOOL (WINAPI * PFNWGLDXOBJECTACCESSNVPROC) (HANDLE hObject, GLenum access);\ntypedef BOOL (WINAPI * PFNWGLDXLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects);\ntypedef BOOL (WINAPI * PFNWGLDXUNLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE *hObjects);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglDXSetResourceShareHandleNV (void *dxObject, HANDLE shareHandle);\nHANDLE WINAPI wglDXOpenDeviceNV (void *dxDevice);\nBOOL WINAPI wglDXCloseDeviceNV (HANDLE hDevice);\nHANDLE WINAPI wglDXRegisterObjectNV (HANDLE hDevice, void *dxObject, GLuint name, GLenum type, GLenum access);\nBOOL WINAPI wglDXUnregisterObjectNV (HANDLE hDevice, HANDLE hObject);\nBOOL WINAPI wglDXObjectAccessNV (HANDLE hObject, GLenum access);\nBOOL WINAPI wglDXLockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects);\nBOOL WINAPI wglDXUnlockObjectsNV (HANDLE hDevice, GLint count, HANDLE *hObjects);\n#endif\n#endif /* WGL_NV_DX_interop */\n\n#ifndef WGL_NV_DX_interop2\n#define WGL_NV_DX_interop2 1\n#endif /* WGL_NV_DX_interop2 */\n\n#ifndef WGL_NV_copy_image\n#define WGL_NV_copy_image 1\ntypedef BOOL (WINAPI * PFNWGLCOPYIMAGESUBDATANVPROC) (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglCopyImageSubDataNV (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth);\n#endif\n#endif /* WGL_NV_copy_image */\n\n#ifndef WGL_NV_delay_before_swap\n#define WGL_NV_delay_before_swap 1\ntypedef BOOL (WINAPI * PFNWGLDELAYBEFORESWAPNVPROC) (HDC hDC, GLfloat seconds);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglDelayBeforeSwapNV (HDC hDC, GLfloat seconds);\n#endif\n#endif /* WGL_NV_delay_before_swap */\n\n#ifndef WGL_NV_float_buffer\n#define WGL_NV_float_buffer 1\n#define WGL_FLOAT_COMPONENTS_NV           0x20B0\n#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1\n#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2\n#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3\n#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4\n#define WGL_TEXTURE_FLOAT_R_NV            0x20B5\n#define WGL_TEXTURE_FLOAT_RG_NV           0x20B6\n#define WGL_TEXTURE_FLOAT_RGB_NV          0x20B7\n#define WGL_TEXTURE_FLOAT_RGBA_NV         0x20B8\n#endif /* WGL_NV_float_buffer */\n\n#ifndef WGL_NV_gpu_affinity\n#define WGL_NV_gpu_affinity 1\nDECLARE_HANDLE(HGPUNV);\nstruct _GPU_DEVICE {\n    DWORD  cb;\n    CHAR   DeviceName[32];\n    CHAR   DeviceString[128];\n    DWORD  Flags;\n    RECT   rcVirtualScreen;\n};\ntypedef struct _GPU_DEVICE *PGPU_DEVICE;\n#define ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0\n#define ERROR_MISSING_AFFINITY_MASK_NV    0x20D1\ntypedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu);\ntypedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice);\ntypedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList);\ntypedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu);\ntypedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu);\nBOOL WINAPI wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice);\nHDC WINAPI wglCreateAffinityDCNV (const HGPUNV *phGpuList);\nBOOL WINAPI wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu);\nBOOL WINAPI wglDeleteDCNV (HDC hdc);\n#endif\n#endif /* WGL_NV_gpu_affinity */\n\n#ifndef WGL_NV_multisample_coverage\n#define WGL_NV_multisample_coverage 1\n#define WGL_COVERAGE_SAMPLES_NV           0x2042\n#define WGL_COLOR_SAMPLES_NV              0x20B9\n#endif /* WGL_NV_multisample_coverage */\n\n#ifndef WGL_NV_present_video\n#define WGL_NV_present_video 1\nDECLARE_HANDLE(HVIDEOOUTPUTDEVICENV);\n#define WGL_NUM_VIDEO_SLOTS_NV            0x20F0\ntypedef int (WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList);\ntypedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList);\ntypedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int *piValue);\n#ifdef WGL_WGLEXT_PROTOTYPES\nint WINAPI wglEnumerateVideoDevicesNV (HDC hDC, HVIDEOOUTPUTDEVICENV *phDeviceList);\nBOOL WINAPI wglBindVideoDeviceNV (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int *piAttribList);\nBOOL WINAPI wglQueryCurrentContextNV (int iAttribute, int *piValue);\n#endif\n#endif /* WGL_NV_present_video */\n\n#ifndef WGL_NV_render_depth_texture\n#define WGL_NV_render_depth_texture 1\n#define WGL_BIND_TO_TEXTURE_DEPTH_NV      0x20A3\n#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4\n#define WGL_DEPTH_TEXTURE_FORMAT_NV       0x20A5\n#define WGL_TEXTURE_DEPTH_COMPONENT_NV    0x20A6\n#define WGL_DEPTH_COMPONENT_NV            0x20A7\n#endif /* WGL_NV_render_depth_texture */\n\n#ifndef WGL_NV_render_texture_rectangle\n#define WGL_NV_render_texture_rectangle 1\n#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0\n#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1\n#define WGL_TEXTURE_RECTANGLE_NV          0x20A2\n#endif /* WGL_NV_render_texture_rectangle */\n\n#ifndef WGL_NV_swap_group\n#define WGL_NV_swap_group 1\ntypedef BOOL (WINAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group);\ntypedef BOOL (WINAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier);\ntypedef BOOL (WINAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint *group, GLuint *barrier);\ntypedef BOOL (WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers);\ntypedef BOOL (WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint *count);\ntypedef BOOL (WINAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglJoinSwapGroupNV (HDC hDC, GLuint group);\nBOOL WINAPI wglBindSwapBarrierNV (GLuint group, GLuint barrier);\nBOOL WINAPI wglQuerySwapGroupNV (HDC hDC, GLuint *group, GLuint *barrier);\nBOOL WINAPI wglQueryMaxSwapGroupsNV (HDC hDC, GLuint *maxGroups, GLuint *maxBarriers);\nBOOL WINAPI wglQueryFrameCountNV (HDC hDC, GLuint *count);\nBOOL WINAPI wglResetFrameCountNV (HDC hDC);\n#endif\n#endif /* WGL_NV_swap_group */\n\n#ifndef WGL_NV_vertex_array_range\n#define WGL_NV_vertex_array_range 1\ntypedef void *(WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);\ntypedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer);\n#ifdef WGL_WGLEXT_PROTOTYPES\nvoid *WINAPI wglAllocateMemoryNV (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);\nvoid WINAPI wglFreeMemoryNV (void *pointer);\n#endif\n#endif /* WGL_NV_vertex_array_range */\n\n#ifndef WGL_NV_video_capture\n#define WGL_NV_video_capture 1\nDECLARE_HANDLE(HVIDEOINPUTDEVICENV);\n#define WGL_UNIQUE_ID_NV                  0x20CE\n#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV    0x20CF\ntypedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice);\ntypedef UINT (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList);\ntypedef BOOL (WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);\ntypedef BOOL (WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue);\ntypedef BOOL (WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglBindVideoCaptureDeviceNV (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice);\nUINT WINAPI wglEnumerateVideoCaptureDevicesNV (HDC hDc, HVIDEOINPUTDEVICENV *phDeviceList);\nBOOL WINAPI wglLockVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice);\nBOOL WINAPI wglQueryVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int *piValue);\nBOOL WINAPI wglReleaseVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice);\n#endif\n#endif /* WGL_NV_video_capture */\n\n#ifndef WGL_NV_video_output\n#define WGL_NV_video_output 1\nDECLARE_HANDLE(HPVIDEODEV);\n#define WGL_BIND_TO_VIDEO_RGB_NV          0x20C0\n#define WGL_BIND_TO_VIDEO_RGBA_NV         0x20C1\n#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2\n#define WGL_VIDEO_OUT_COLOR_NV            0x20C3\n#define WGL_VIDEO_OUT_ALPHA_NV            0x20C4\n#define WGL_VIDEO_OUT_DEPTH_NV            0x20C5\n#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV  0x20C6\n#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV  0x20C7\n#define WGL_VIDEO_OUT_FRAME               0x20C8\n#define WGL_VIDEO_OUT_FIELD_1             0x20C9\n#define WGL_VIDEO_OUT_FIELD_2             0x20CA\n#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2  0x20CB\n#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1  0x20CC\ntypedef BOOL (WINAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice);\ntypedef BOOL (WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice);\ntypedef BOOL (WINAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer);\ntypedef BOOL (WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer);\ntypedef BOOL (WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock);\ntypedef BOOL (WINAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglGetVideoDeviceNV (HDC hDC, int numDevices, HPVIDEODEV *hVideoDevice);\nBOOL WINAPI wglReleaseVideoDeviceNV (HPVIDEODEV hVideoDevice);\nBOOL WINAPI wglBindVideoImageNV (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer);\nBOOL WINAPI wglReleaseVideoImageNV (HPBUFFERARB hPbuffer, int iVideoBuffer);\nBOOL WINAPI wglSendPbufferToVideoNV (HPBUFFERARB hPbuffer, int iBufferType, unsigned long *pulCounterPbuffer, BOOL bBlock);\nBOOL WINAPI wglGetVideoInfoNV (HPVIDEODEV hpVideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo);\n#endif\n#endif /* WGL_NV_video_output */\n\n#ifndef WGL_OML_sync_control\n#define WGL_OML_sync_control 1\ntypedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc);\ntypedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 *numerator, INT32 *denominator);\ntypedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);\ntypedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);\ntypedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc);\ntypedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc);\n#ifdef WGL_WGLEXT_PROTOTYPES\nBOOL WINAPI wglGetSyncValuesOML (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc);\nBOOL WINAPI wglGetMscRateOML (HDC hdc, INT32 *numerator, INT32 *denominator);\nINT64 WINAPI wglSwapBuffersMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);\nINT64 WINAPI wglSwapLayerBuffersMscOML (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);\nBOOL WINAPI wglWaitForMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc);\nBOOL WINAPI wglWaitForSbcOML (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc);\n#endif\n#endif /* WGL_OML_sync_control */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Include/gl.h",
    "content": "/*\n * Mesa 3-D graphics library\n * Version:  4.0\n *\n * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\n * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\n * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\n/************************************************************************\n * 2002-Apr-22, Jos Fonseca:\n *   Removed non Win32 system-specific stuff\n *\n * 2002-Apr-17, Marcus Geelnard:\n *   For win32, OpenGL 1.2 & 1.3 definitions are not made in this file\n *   anymore, since under Windows those are regarded as extensions, and\n *   are better defined in glext.h (especially the function prototypes may\n *   conflict with extension function pointers). A few \"cosmetical\"\n *   changes were also made to this file.\n *\n * 2002-Apr-15, Marcus Geelnard:\n *   Modified this file to better fit a wider range of compilers, removed\n *   Mesa specific stuff, and removed extension definitions (this file now\n *   relies on GL/glext.h). Hopefully this file should now function as a\n *   generic OpenGL gl.h include file for most compilers and environments.\n *   Changed GLAPIENTRY to APIENTRY (to be consistent with GL/glext.h).\n ************************************************************************/\n\n\n#ifndef __gl_h_\n#define __gl_h_\n\n\n\n/************************************************************************\n * Begin system-specific stuff.\n */\n/* __WIN32__ */\n#if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__))\n#  define __WIN32__\n#endif\n\n/* GLAPI, part 1 (use WINGDIAPI, if defined) */\n#if defined(__WIN32__) && defined(WINGDIAPI)\n#  define GLAPI WINGDIAPI\n#endif\n\n/* GLAPI, part 2 */\n#if !defined(GLAPI)\n#  if defined(_MSC_VER)                        /* Microsoft Visual C++ */\n#    define GLAPI __declspec(dllimport)\n#  elif defined(__LCC__) && defined(__WIN32__) /* LCC-Win32 */\n#    define GLAPI __stdcall\n#  else                                        /* Others (e.g. MinGW, Cygwin, non-win32) */\n#    define GLAPI extern\n#  endif\n#endif\n\n/* APIENTRY */\n#if !defined(APIENTRY)\n#  if defined(__WIN32__)\n#    define APIENTRY __stdcall\n#  else\n#    define APIENTRY\n#  endif\n#endif\n/*\n * End system-specific stuff.\n ************************************************************************/\n\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n\n#define GL_VERSION_1_1   1\n\n#if !defined(__WIN32__)\n#define GL_VERSION_1_2   1\n#define GL_VERSION_1_3   1\n#define GL_ARB_imaging   1\n#endif\n\n\n/*\n *\n * Datatypes\n *\n */\n#ifdef CENTERLINE_CLPP\n#define signed\n#endif\ntypedef unsigned int    GLenum;\ntypedef unsigned char   GLboolean;\ntypedef unsigned int    GLbitfield;\ntypedef void            GLvoid;\ntypedef signed char     GLbyte;         /* 1-byte signed */\ntypedef short           GLshort;        /* 2-byte signed */\ntypedef int             GLint;          /* 4-byte signed */\ntypedef unsigned char   GLubyte;        /* 1-byte unsigned */\ntypedef unsigned short  GLushort;       /* 2-byte unsigned */\ntypedef unsigned int    GLuint;         /* 4-byte unsigned */\ntypedef int             GLsizei;        /* 4-byte signed */\ntypedef float           GLfloat;        /* single precision float */\ntypedef float           GLclampf;       /* single precision float in [0,1] */\ntypedef double          GLdouble;       /* double precision float */\ntypedef double          GLclampd;       /* double precision float in [0,1] */\n\n\n\n/************************************************************************\n *\n * Constants\n *\n ************************************************************************/\n\n/* Boolean values */\n#define GL_FALSE                                0x0\n#define GL_TRUE                                 0x1\n\n/* Data types */\n#define GL_BYTE                                 0x1400\n#define GL_UNSIGNED_BYTE                        0x1401\n#define GL_SHORT                                0x1402\n#define GL_UNSIGNED_SHORT                       0x1403\n#define GL_INT                                  0x1404\n#define GL_UNSIGNED_INT                         0x1405\n#define GL_FLOAT                                0x1406\n#define GL_DOUBLE                               0x140A\n#define GL_2_BYTES                              0x1407\n#define GL_3_BYTES                              0x1408\n#define GL_4_BYTES                              0x1409\n\n/* Primitives */\n#define GL_POINTS                               0x0000\n#define GL_LINES                                0x0001\n#define GL_LINE_LOOP                            0x0002\n#define GL_LINE_STRIP                           0x0003\n#define GL_TRIANGLES                            0x0004\n#define GL_TRIANGLE_STRIP                       0x0005\n#define GL_TRIANGLE_FAN                         0x0006\n#define GL_QUADS                                0x0007\n#define GL_QUAD_STRIP                           0x0008\n#define GL_POLYGON                              0x0009\n\n/* Vertex Arrays */\n#define GL_VERTEX_ARRAY                         0x8074\n#define GL_NORMAL_ARRAY                         0x8075\n#define GL_COLOR_ARRAY                          0x8076\n#define GL_INDEX_ARRAY                          0x8077\n#define GL_TEXTURE_COORD_ARRAY                  0x8078\n#define GL_EDGE_FLAG_ARRAY                      0x8079\n#define GL_VERTEX_ARRAY_SIZE                    0x807A\n#define GL_VERTEX_ARRAY_TYPE                    0x807B\n#define GL_VERTEX_ARRAY_STRIDE                  0x807C\n#define GL_NORMAL_ARRAY_TYPE                    0x807E\n#define GL_NORMAL_ARRAY_STRIDE                  0x807F\n#define GL_COLOR_ARRAY_SIZE                     0x8081\n#define GL_COLOR_ARRAY_TYPE                     0x8082\n#define GL_COLOR_ARRAY_STRIDE                   0x8083\n#define GL_INDEX_ARRAY_TYPE                     0x8085\n#define GL_INDEX_ARRAY_STRIDE                   0x8086\n#define GL_TEXTURE_COORD_ARRAY_SIZE             0x8088\n#define GL_TEXTURE_COORD_ARRAY_TYPE             0x8089\n#define GL_TEXTURE_COORD_ARRAY_STRIDE           0x808A\n#define GL_EDGE_FLAG_ARRAY_STRIDE               0x808C\n#define GL_VERTEX_ARRAY_POINTER                 0x808E\n#define GL_NORMAL_ARRAY_POINTER                 0x808F\n#define GL_COLOR_ARRAY_POINTER                  0x8090\n#define GL_INDEX_ARRAY_POINTER                  0x8091\n#define GL_TEXTURE_COORD_ARRAY_POINTER          0x8092\n#define GL_EDGE_FLAG_ARRAY_POINTER              0x8093\n#define GL_V2F                                  0x2A20\n#define GL_V3F                                  0x2A21\n#define GL_C4UB_V2F                             0x2A22\n#define GL_C4UB_V3F                             0x2A23\n#define GL_C3F_V3F                              0x2A24\n#define GL_N3F_V3F                              0x2A25\n#define GL_C4F_N3F_V3F                          0x2A26\n#define GL_T2F_V3F                              0x2A27\n#define GL_T4F_V4F                              0x2A28\n#define GL_T2F_C4UB_V3F                         0x2A29\n#define GL_T2F_C3F_V3F                          0x2A2A\n#define GL_T2F_N3F_V3F                          0x2A2B\n#define GL_T2F_C4F_N3F_V3F                      0x2A2C\n#define GL_T4F_C4F_N3F_V4F                      0x2A2D\n\n/* Matrix Mode */\n#define GL_MATRIX_MODE                          0x0BA0\n#define GL_MODELVIEW                            0x1700\n#define GL_PROJECTION                           0x1701\n#define GL_TEXTURE                              0x1702\n\n/* Points */\n#define GL_POINT_SMOOTH                         0x0B10\n#define GL_POINT_SIZE                           0x0B11\n#define GL_POINT_SIZE_GRANULARITY               0x0B13\n#define GL_POINT_SIZE_RANGE                     0x0B12\n\n/* Lines */\n#define GL_LINE_SMOOTH                          0x0B20\n#define GL_LINE_STIPPLE                         0x0B24\n#define GL_LINE_STIPPLE_PATTERN                 0x0B25\n#define GL_LINE_STIPPLE_REPEAT                  0x0B26\n#define GL_LINE_WIDTH                           0x0B21\n#define GL_LINE_WIDTH_GRANULARITY               0x0B23\n#define GL_LINE_WIDTH_RANGE                     0x0B22\n\n/* Polygons */\n#define GL_POINT                                0x1B00\n#define GL_LINE                                 0x1B01\n#define GL_FILL                                 0x1B02\n#define GL_CW                                   0x0900\n#define GL_CCW                                  0x0901\n#define GL_FRONT                                0x0404\n#define GL_BACK                                 0x0405\n#define GL_POLYGON_MODE                         0x0B40\n#define GL_POLYGON_SMOOTH                       0x0B41\n#define GL_POLYGON_STIPPLE                      0x0B42\n#define GL_EDGE_FLAG                            0x0B43\n#define GL_CULL_FACE                            0x0B44\n#define GL_CULL_FACE_MODE                       0x0B45\n#define GL_FRONT_FACE                           0x0B46\n#define GL_POLYGON_OFFSET_FACTOR                0x8038\n#define GL_POLYGON_OFFSET_UNITS                 0x2A00\n#define GL_POLYGON_OFFSET_POINT                 0x2A01\n#define GL_POLYGON_OFFSET_LINE                  0x2A02\n#define GL_POLYGON_OFFSET_FILL                  0x8037\n\n/* Display Lists */\n#define GL_COMPILE                              0x1300\n#define GL_COMPILE_AND_EXECUTE                  0x1301\n#define GL_LIST_BASE                            0x0B32\n#define GL_LIST_INDEX                           0x0B33\n#define GL_LIST_MODE                            0x0B30\n\n/* Depth buffer */\n#define GL_NEVER                                0x0200\n#define GL_LESS                                 0x0201\n#define GL_EQUAL                                0x0202\n#define GL_LEQUAL                               0x0203\n#define GL_GREATER                              0x0204\n#define GL_NOTEQUAL                             0x0205\n#define GL_GEQUAL                               0x0206\n#define GL_ALWAYS                               0x0207\n#define GL_DEPTH_TEST                           0x0B71\n#define GL_DEPTH_BITS                           0x0D56\n#define GL_DEPTH_CLEAR_VALUE                    0x0B73\n#define GL_DEPTH_FUNC                           0x0B74\n#define GL_DEPTH_RANGE                          0x0B70\n#define GL_DEPTH_WRITEMASK                      0x0B72\n#define GL_DEPTH_COMPONENT                      0x1902\n\n/* Lighting */\n#define GL_LIGHTING                             0x0B50\n#define GL_LIGHT0                               0x4000\n#define GL_LIGHT1                               0x4001\n#define GL_LIGHT2                               0x4002\n#define GL_LIGHT3                               0x4003\n#define GL_LIGHT4                               0x4004\n#define GL_LIGHT5                               0x4005\n#define GL_LIGHT6                               0x4006\n#define GL_LIGHT7                               0x4007\n#define GL_SPOT_EXPONENT                        0x1205\n#define GL_SPOT_CUTOFF                          0x1206\n#define GL_CONSTANT_ATTENUATION                 0x1207\n#define GL_LINEAR_ATTENUATION                   0x1208\n#define GL_QUADRATIC_ATTENUATION                0x1209\n#define GL_AMBIENT                              0x1200\n#define GL_DIFFUSE                              0x1201\n#define GL_SPECULAR                             0x1202\n#define GL_SHININESS                            0x1601\n#define GL_EMISSION                             0x1600\n#define GL_POSITION                             0x1203\n#define GL_SPOT_DIRECTION                       0x1204\n#define GL_AMBIENT_AND_DIFFUSE                  0x1602\n#define GL_COLOR_INDEXES                        0x1603\n#define GL_LIGHT_MODEL_TWO_SIDE                 0x0B52\n#define GL_LIGHT_MODEL_LOCAL_VIEWER             0x0B51\n#define GL_LIGHT_MODEL_AMBIENT                  0x0B53\n#define GL_FRONT_AND_BACK                       0x0408\n#define GL_SHADE_MODEL                          0x0B54\n#define GL_FLAT                                 0x1D00\n#define GL_SMOOTH                               0x1D01\n#define GL_COLOR_MATERIAL                       0x0B57\n#define GL_COLOR_MATERIAL_FACE                  0x0B55\n#define GL_COLOR_MATERIAL_PARAMETER             0x0B56\n#define GL_NORMALIZE                            0x0BA1\n\n/* User clipping planes */\n#define GL_CLIP_PLANE0                          0x3000\n#define GL_CLIP_PLANE1                          0x3001\n#define GL_CLIP_PLANE2                          0x3002\n#define GL_CLIP_PLANE3                          0x3003\n#define GL_CLIP_PLANE4                          0x3004\n#define GL_CLIP_PLANE5                          0x3005\n\n/* Accumulation buffer */\n#define GL_ACCUM_RED_BITS                       0x0D58\n#define GL_ACCUM_GREEN_BITS                     0x0D59\n#define GL_ACCUM_BLUE_BITS                      0x0D5A\n#define GL_ACCUM_ALPHA_BITS                     0x0D5B\n#define GL_ACCUM_CLEAR_VALUE                    0x0B80\n#define GL_ACCUM                                0x0100\n#define GL_ADD                                  0x0104\n#define GL_LOAD                                 0x0101\n#define GL_MULT                                 0x0103\n#define GL_RETURN                               0x0102\n\n/* Alpha testing */\n#define GL_ALPHA_TEST                           0x0BC0\n#define GL_ALPHA_TEST_REF                       0x0BC2\n#define GL_ALPHA_TEST_FUNC                      0x0BC1\n\n/* Blending */\n#define GL_BLEND                                0x0BE2\n#define GL_BLEND_SRC                            0x0BE1\n#define GL_BLEND_DST                            0x0BE0\n#define GL_ZERO                                 0x0\n#define GL_ONE                                  0x1\n#define GL_SRC_COLOR                            0x0300\n#define GL_ONE_MINUS_SRC_COLOR                  0x0301\n#define GL_SRC_ALPHA                            0x0302\n#define GL_ONE_MINUS_SRC_ALPHA                  0x0303\n#define GL_DST_ALPHA                            0x0304\n#define GL_ONE_MINUS_DST_ALPHA                  0x0305\n#define GL_DST_COLOR                            0x0306\n#define GL_ONE_MINUS_DST_COLOR                  0x0307\n#define GL_SRC_ALPHA_SATURATE                   0x0308\n#define GL_CONSTANT_COLOR                       0x8001\n#define GL_ONE_MINUS_CONSTANT_COLOR             0x8002\n#define GL_CONSTANT_ALPHA                       0x8003\n#define GL_ONE_MINUS_CONSTANT_ALPHA             0x8004\n\n/* Render Mode */\n#define GL_FEEDBACK                             0x1C01\n#define GL_RENDER                               0x1C00\n#define GL_SELECT                               0x1C02\n\n/* Feedback */\n#define GL_2D                                   0x0600\n#define GL_3D                                   0x0601\n#define GL_3D_COLOR                             0x0602\n#define GL_3D_COLOR_TEXTURE                     0x0603\n#define GL_4D_COLOR_TEXTURE                     0x0604\n#define GL_POINT_TOKEN                          0x0701\n#define GL_LINE_TOKEN                           0x0702\n#define GL_LINE_RESET_TOKEN                     0x0707\n#define GL_POLYGON_TOKEN                        0x0703\n#define GL_BITMAP_TOKEN                         0x0704\n#define GL_DRAW_PIXEL_TOKEN                     0x0705\n#define GL_COPY_PIXEL_TOKEN                     0x0706\n#define GL_PASS_THROUGH_TOKEN                   0x0700\n#define GL_FEEDBACK_BUFFER_POINTER              0x0DF0\n#define GL_FEEDBACK_BUFFER_SIZE                 0x0DF1\n#define GL_FEEDBACK_BUFFER_TYPE                 0x0DF2\n\n/* Selection */\n#define GL_SELECTION_BUFFER_POINTER             0x0DF3\n#define GL_SELECTION_BUFFER_SIZE                0x0DF4\n\n/* Fog */\n#define GL_FOG                                  0x0B60\n#define GL_FOG_MODE                             0x0B65\n#define GL_FOG_DENSITY                          0x0B62\n#define GL_FOG_COLOR                            0x0B66\n#define GL_FOG_INDEX                            0x0B61\n#define GL_FOG_START                            0x0B63\n#define GL_FOG_END                              0x0B64\n#define GL_LINEAR                               0x2601\n#define GL_EXP                                  0x0800\n#define GL_EXP2                                 0x0801\n\n/* Logic Ops */\n#define GL_LOGIC_OP                             0x0BF1\n#define GL_INDEX_LOGIC_OP                       0x0BF1\n#define GL_COLOR_LOGIC_OP                       0x0BF2\n#define GL_LOGIC_OP_MODE                        0x0BF0\n#define GL_CLEAR                                0x1500\n#define GL_SET                                  0x150F\n#define GL_COPY                                 0x1503\n#define GL_COPY_INVERTED                        0x150C\n#define GL_NOOP                                 0x1505\n#define GL_INVERT                               0x150A\n#define GL_AND                                  0x1501\n#define GL_NAND                                 0x150E\n#define GL_OR                                   0x1507\n#define GL_NOR                                  0x1508\n#define GL_XOR                                  0x1506\n#define GL_EQUIV                                0x1509\n#define GL_AND_REVERSE                          0x1502\n#define GL_AND_INVERTED                         0x1504\n#define GL_OR_REVERSE                           0x150B\n#define GL_OR_INVERTED                          0x150D\n\n/* Stencil */\n#define GL_STENCIL_TEST                         0x0B90\n#define GL_STENCIL_WRITEMASK                    0x0B98\n#define GL_STENCIL_BITS                         0x0D57\n#define GL_STENCIL_FUNC                         0x0B92\n#define GL_STENCIL_VALUE_MASK                   0x0B93\n#define GL_STENCIL_REF                          0x0B97\n#define GL_STENCIL_FAIL                         0x0B94\n#define GL_STENCIL_PASS_DEPTH_PASS              0x0B96\n#define GL_STENCIL_PASS_DEPTH_FAIL              0x0B95\n#define GL_STENCIL_CLEAR_VALUE                  0x0B91\n#define GL_STENCIL_INDEX                        0x1901\n#define GL_KEEP                                 0x1E00\n#define GL_REPLACE                              0x1E01\n#define GL_INCR                                 0x1E02\n#define GL_DECR                                 0x1E03\n\n/* Buffers, Pixel Drawing/Reading */\n#define GL_NONE                                 0x0\n#define GL_LEFT                                 0x0406\n#define GL_RIGHT                                0x0407\n/*GL_FRONT                                      0x0404 */\n/*GL_BACK                                       0x0405 */\n/*GL_FRONT_AND_BACK                             0x0408 */\n#define GL_FRONT_LEFT                           0x0400\n#define GL_FRONT_RIGHT                          0x0401\n#define GL_BACK_LEFT                            0x0402\n#define GL_BACK_RIGHT                           0x0403\n#define GL_AUX0                                 0x0409\n#define GL_AUX1                                 0x040A\n#define GL_AUX2                                 0x040B\n#define GL_AUX3                                 0x040C\n#define GL_COLOR_INDEX                          0x1900\n#define GL_RED                                  0x1903\n#define GL_GREEN                                0x1904\n#define GL_BLUE                                 0x1905\n#define GL_ALPHA                                0x1906\n#define GL_LUMINANCE                            0x1909\n#define GL_LUMINANCE_ALPHA                      0x190A\n#define GL_ALPHA_BITS                           0x0D55\n#define GL_RED_BITS                             0x0D52\n#define GL_GREEN_BITS                           0x0D53\n#define GL_BLUE_BITS                            0x0D54\n#define GL_INDEX_BITS                           0x0D51\n#define GL_SUBPIXEL_BITS                        0x0D50\n#define GL_AUX_BUFFERS                          0x0C00\n#define GL_READ_BUFFER                          0x0C02\n#define GL_DRAW_BUFFER                          0x0C01\n#define GL_DOUBLEBUFFER                         0x0C32\n#define GL_STEREO                               0x0C33\n#define GL_BITMAP                               0x1A00\n#define GL_COLOR                                0x1800\n#define GL_DEPTH                                0x1801\n#define GL_STENCIL                              0x1802\n#define GL_DITHER                               0x0BD0\n#define GL_RGB                                  0x1907\n#define GL_RGBA                                 0x1908\n\n/* Implementation limits */\n#define GL_MAX_LIST_NESTING                     0x0B31\n#define GL_MAX_ATTRIB_STACK_DEPTH               0x0D35\n#define GL_MAX_MODELVIEW_STACK_DEPTH            0x0D36\n#define GL_MAX_NAME_STACK_DEPTH                 0x0D37\n#define GL_MAX_PROJECTION_STACK_DEPTH           0x0D38\n#define GL_MAX_TEXTURE_STACK_DEPTH              0x0D39\n#define GL_MAX_EVAL_ORDER                       0x0D30\n#define GL_MAX_LIGHTS                           0x0D31\n#define GL_MAX_CLIP_PLANES                      0x0D32\n#define GL_MAX_TEXTURE_SIZE                     0x0D33\n#define GL_MAX_PIXEL_MAP_TABLE                  0x0D34\n#define GL_MAX_VIEWPORT_DIMS                    0x0D3A\n#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH        0x0D3B\n\n/* Gets */\n#define GL_ATTRIB_STACK_DEPTH                   0x0BB0\n#define GL_CLIENT_ATTRIB_STACK_DEPTH            0x0BB1\n#define GL_COLOR_CLEAR_VALUE                    0x0C22\n#define GL_COLOR_WRITEMASK                      0x0C23\n#define GL_CURRENT_INDEX                        0x0B01\n#define GL_CURRENT_COLOR                        0x0B00\n#define GL_CURRENT_NORMAL                       0x0B02\n#define GL_CURRENT_RASTER_COLOR                 0x0B04\n#define GL_CURRENT_RASTER_DISTANCE              0x0B09\n#define GL_CURRENT_RASTER_INDEX                 0x0B05\n#define GL_CURRENT_RASTER_POSITION              0x0B07\n#define GL_CURRENT_RASTER_TEXTURE_COORDS        0x0B06\n#define GL_CURRENT_RASTER_POSITION_VALID        0x0B08\n#define GL_CURRENT_TEXTURE_COORDS               0x0B03\n#define GL_INDEX_CLEAR_VALUE                    0x0C20\n#define GL_INDEX_MODE                           0x0C30\n#define GL_INDEX_WRITEMASK                      0x0C21\n#define GL_MODELVIEW_MATRIX                     0x0BA6\n#define GL_MODELVIEW_STACK_DEPTH                0x0BA3\n#define GL_NAME_STACK_DEPTH                     0x0D70\n#define GL_PROJECTION_MATRIX                    0x0BA7\n#define GL_PROJECTION_STACK_DEPTH               0x0BA4\n#define GL_RENDER_MODE                          0x0C40\n#define GL_RGBA_MODE                            0x0C31\n#define GL_TEXTURE_MATRIX                       0x0BA8\n#define GL_TEXTURE_STACK_DEPTH                  0x0BA5\n#define GL_VIEWPORT                             0x0BA2\n\n/* Evaluators */\n#define GL_AUTO_NORMAL                          0x0D80\n#define GL_MAP1_COLOR_4                         0x0D90\n#define GL_MAP1_GRID_DOMAIN                     0x0DD0\n#define GL_MAP1_GRID_SEGMENTS                   0x0DD1\n#define GL_MAP1_INDEX                           0x0D91\n#define GL_MAP1_NORMAL                          0x0D92\n#define GL_MAP1_TEXTURE_COORD_1                 0x0D93\n#define GL_MAP1_TEXTURE_COORD_2                 0x0D94\n#define GL_MAP1_TEXTURE_COORD_3                 0x0D95\n#define GL_MAP1_TEXTURE_COORD_4                 0x0D96\n#define GL_MAP1_VERTEX_3                        0x0D97\n#define GL_MAP1_VERTEX_4                        0x0D98\n#define GL_MAP2_COLOR_4                         0x0DB0\n#define GL_MAP2_GRID_DOMAIN                     0x0DD2\n#define GL_MAP2_GRID_SEGMENTS                   0x0DD3\n#define GL_MAP2_INDEX                           0x0DB1\n#define GL_MAP2_NORMAL                          0x0DB2\n#define GL_MAP2_TEXTURE_COORD_1                 0x0DB3\n#define GL_MAP2_TEXTURE_COORD_2                 0x0DB4\n#define GL_MAP2_TEXTURE_COORD_3                 0x0DB5\n#define GL_MAP2_TEXTURE_COORD_4                 0x0DB6\n#define GL_MAP2_VERTEX_3                        0x0DB7\n#define GL_MAP2_VERTEX_4                        0x0DB8\n#define GL_COEFF                                0x0A00\n#define GL_DOMAIN                               0x0A02\n#define GL_ORDER                                0x0A01\n\n/* Hints */\n#define GL_FOG_HINT                             0x0C54\n#define GL_LINE_SMOOTH_HINT                     0x0C52\n#define GL_PERSPECTIVE_CORRECTION_HINT          0x0C50\n#define GL_POINT_SMOOTH_HINT                    0x0C51\n#define GL_POLYGON_SMOOTH_HINT                  0x0C53\n#define GL_DONT_CARE                            0x1100\n#define GL_FASTEST                              0x1101\n#define GL_NICEST                               0x1102\n\n/* Scissor box */\n#define GL_SCISSOR_TEST                         0x0C11\n#define GL_SCISSOR_BOX                          0x0C10\n\n/* Pixel Mode / Transfer */\n#define GL_MAP_COLOR                            0x0D10\n#define GL_MAP_STENCIL                          0x0D11\n#define GL_INDEX_SHIFT                          0x0D12\n#define GL_INDEX_OFFSET                         0x0D13\n#define GL_RED_SCALE                            0x0D14\n#define GL_RED_BIAS                             0x0D15\n#define GL_GREEN_SCALE                          0x0D18\n#define GL_GREEN_BIAS                           0x0D19\n#define GL_BLUE_SCALE                           0x0D1A\n#define GL_BLUE_BIAS                            0x0D1B\n#define GL_ALPHA_SCALE                          0x0D1C\n#define GL_ALPHA_BIAS                           0x0D1D\n#define GL_DEPTH_SCALE                          0x0D1E\n#define GL_DEPTH_BIAS                           0x0D1F\n#define GL_PIXEL_MAP_S_TO_S_SIZE                0x0CB1\n#define GL_PIXEL_MAP_I_TO_I_SIZE                0x0CB0\n#define GL_PIXEL_MAP_I_TO_R_SIZE                0x0CB2\n#define GL_PIXEL_MAP_I_TO_G_SIZE                0x0CB3\n#define GL_PIXEL_MAP_I_TO_B_SIZE                0x0CB4\n#define GL_PIXEL_MAP_I_TO_A_SIZE                0x0CB5\n#define GL_PIXEL_MAP_R_TO_R_SIZE                0x0CB6\n#define GL_PIXEL_MAP_G_TO_G_SIZE                0x0CB7\n#define GL_PIXEL_MAP_B_TO_B_SIZE                0x0CB8\n#define GL_PIXEL_MAP_A_TO_A_SIZE                0x0CB9\n#define GL_PIXEL_MAP_S_TO_S                     0x0C71\n#define GL_PIXEL_MAP_I_TO_I                     0x0C70\n#define GL_PIXEL_MAP_I_TO_R                     0x0C72\n#define GL_PIXEL_MAP_I_TO_G                     0x0C73\n#define GL_PIXEL_MAP_I_TO_B                     0x0C74\n#define GL_PIXEL_MAP_I_TO_A                     0x0C75\n#define GL_PIXEL_MAP_R_TO_R                     0x0C76\n#define GL_PIXEL_MAP_G_TO_G                     0x0C77\n#define GL_PIXEL_MAP_B_TO_B                     0x0C78\n#define GL_PIXEL_MAP_A_TO_A                     0x0C79\n#define GL_PACK_ALIGNMENT                       0x0D05\n#define GL_PACK_LSB_FIRST                       0x0D01\n#define GL_PACK_ROW_LENGTH                      0x0D02\n#define GL_PACK_SKIP_PIXELS                     0x0D04\n#define GL_PACK_SKIP_ROWS                       0x0D03\n#define GL_PACK_SWAP_BYTES                      0x0D00\n#define GL_UNPACK_ALIGNMENT                     0x0CF5\n#define GL_UNPACK_LSB_FIRST                     0x0CF1\n#define GL_UNPACK_ROW_LENGTH                    0x0CF2\n#define GL_UNPACK_SKIP_PIXELS                   0x0CF4\n#define GL_UNPACK_SKIP_ROWS                     0x0CF3\n#define GL_UNPACK_SWAP_BYTES                    0x0CF0\n#define GL_ZOOM_X                               0x0D16\n#define GL_ZOOM_Y                               0x0D17\n\n/* Texture mapping */\n#define GL_TEXTURE_ENV                          0x2300\n#define GL_TEXTURE_ENV_MODE                     0x2200\n#define GL_TEXTURE_1D                           0x0DE0\n#define GL_TEXTURE_2D                           0x0DE1\n#define GL_TEXTURE_WRAP_S                       0x2802\n#define GL_TEXTURE_WRAP_T                       0x2803\n#define GL_TEXTURE_MAG_FILTER                   0x2800\n#define GL_TEXTURE_MIN_FILTER                   0x2801\n#define GL_TEXTURE_ENV_COLOR                    0x2201\n#define GL_TEXTURE_GEN_S                        0x0C60\n#define GL_TEXTURE_GEN_T                        0x0C61\n#define GL_TEXTURE_GEN_MODE                     0x2500\n#define GL_TEXTURE_BORDER_COLOR                 0x1004\n#define GL_TEXTURE_WIDTH                        0x1000\n#define GL_TEXTURE_HEIGHT                       0x1001\n#define GL_TEXTURE_BORDER                       0x1005\n#define GL_TEXTURE_COMPONENTS                   0x1003\n#define GL_TEXTURE_RED_SIZE                     0x805C\n#define GL_TEXTURE_GREEN_SIZE                   0x805D\n#define GL_TEXTURE_BLUE_SIZE                    0x805E\n#define GL_TEXTURE_ALPHA_SIZE                   0x805F\n#define GL_TEXTURE_LUMINANCE_SIZE               0x8060\n#define GL_TEXTURE_INTENSITY_SIZE               0x8061\n#define GL_NEAREST_MIPMAP_NEAREST               0x2700\n#define GL_NEAREST_MIPMAP_LINEAR                0x2702\n#define GL_LINEAR_MIPMAP_NEAREST                0x2701\n#define GL_LINEAR_MIPMAP_LINEAR                 0x2703\n#define GL_OBJECT_LINEAR                        0x2401\n#define GL_OBJECT_PLANE                         0x2501\n#define GL_EYE_LINEAR                           0x2400\n#define GL_EYE_PLANE                            0x2502\n#define GL_SPHERE_MAP                           0x2402\n#define GL_DECAL                                0x2101\n#define GL_MODULATE                             0x2100\n#define GL_NEAREST                              0x2600\n#define GL_REPEAT                               0x2901\n#define GL_CLAMP                                0x2900\n#define GL_S                                    0x2000\n#define GL_T                                    0x2001\n#define GL_R                                    0x2002\n#define GL_Q                                    0x2003\n#define GL_TEXTURE_GEN_R                        0x0C62\n#define GL_TEXTURE_GEN_Q                        0x0C63\n\n/* Utility */\n#define GL_VENDOR                               0x1F00\n#define GL_RENDERER                             0x1F01\n#define GL_VERSION                              0x1F02\n#define GL_EXTENSIONS                           0x1F03\n\n/* Errors */\n#define GL_NO_ERROR                             0x0\n#define GL_INVALID_VALUE                        0x0501\n#define GL_INVALID_ENUM                         0x0500\n#define GL_INVALID_OPERATION                    0x0502\n#define GL_STACK_OVERFLOW                       0x0503\n#define GL_STACK_UNDERFLOW                      0x0504\n#define GL_OUT_OF_MEMORY                        0x0505\n\n/* glPush/PopAttrib bits */\n#define GL_CURRENT_BIT                          0x00000001\n#define GL_POINT_BIT                            0x00000002\n#define GL_LINE_BIT                             0x00000004\n#define GL_POLYGON_BIT                          0x00000008\n#define GL_POLYGON_STIPPLE_BIT                  0x00000010\n#define GL_PIXEL_MODE_BIT                       0x00000020\n#define GL_LIGHTING_BIT                         0x00000040\n#define GL_FOG_BIT                              0x00000080\n#define GL_DEPTH_BUFFER_BIT                     0x00000100\n#define GL_ACCUM_BUFFER_BIT                     0x00000200\n#define GL_STENCIL_BUFFER_BIT                   0x00000400\n#define GL_VIEWPORT_BIT                         0x00000800\n#define GL_TRANSFORM_BIT                        0x00001000\n#define GL_ENABLE_BIT                           0x00002000\n#define GL_COLOR_BUFFER_BIT                     0x00004000\n#define GL_HINT_BIT                             0x00008000\n#define GL_EVAL_BIT                             0x00010000\n#define GL_LIST_BIT                             0x00020000\n#define GL_TEXTURE_BIT                          0x00040000\n#define GL_SCISSOR_BIT                          0x00080000\n#define GL_ALL_ATTRIB_BITS                      0x000FFFFF\n\n\n/* OpenGL 1.1 */\n#define GL_PROXY_TEXTURE_1D                     0x8063\n#define GL_PROXY_TEXTURE_2D                     0x8064\n#define GL_TEXTURE_PRIORITY                     0x8066\n#define GL_TEXTURE_RESIDENT                     0x8067\n#define GL_TEXTURE_BINDING_1D                   0x8068\n#define GL_TEXTURE_BINDING_2D                   0x8069\n#define GL_TEXTURE_INTERNAL_FORMAT              0x1003\n#define GL_ALPHA4                               0x803B\n#define GL_ALPHA8                               0x803C\n#define GL_ALPHA12                              0x803D\n#define GL_ALPHA16                              0x803E\n#define GL_LUMINANCE4                           0x803F\n#define GL_LUMINANCE8                           0x8040\n#define GL_LUMINANCE12                          0x8041\n#define GL_LUMINANCE16                          0x8042\n#define GL_LUMINANCE4_ALPHA4                    0x8043\n#define GL_LUMINANCE6_ALPHA2                    0x8044\n#define GL_LUMINANCE8_ALPHA8                    0x8045\n#define GL_LUMINANCE12_ALPHA4                   0x8046\n#define GL_LUMINANCE12_ALPHA12                  0x8047\n#define GL_LUMINANCE16_ALPHA16                  0x8048\n#define GL_INTENSITY                            0x8049\n#define GL_INTENSITY4                           0x804A\n#define GL_INTENSITY8                           0x804B\n#define GL_INTENSITY12                          0x804C\n#define GL_INTENSITY16                          0x804D\n#define GL_R3_G3_B2                             0x2A10\n#define GL_RGB4                                 0x804F\n#define GL_RGB5                                 0x8050\n#define GL_RGB8                                 0x8051\n#define GL_RGB10                                0x8052\n#define GL_RGB12                                0x8053\n#define GL_RGB16                                0x8054\n#define GL_RGBA2                                0x8055\n#define GL_RGBA4                                0x8056\n#define GL_RGB5_A1                              0x8057\n#define GL_RGBA8                                0x8058\n#define GL_RGB10_A2                             0x8059\n#define GL_RGBA12                               0x805A\n#define GL_RGBA16                               0x805B\n#define GL_CLIENT_PIXEL_STORE_BIT               0x00000001\n#define GL_CLIENT_VERTEX_ARRAY_BIT              0x00000002\n#define GL_ALL_CLIENT_ATTRIB_BITS               0xFFFFFFFF\n#define GL_CLIENT_ALL_ATTRIB_BITS               0xFFFFFFFF\n\n\n/* Under Windows, we do not define OpenGL 1.2 & 1.3 functionality, since\n   it is treated as extensions (defined in glext.h) */\n#if !defined(__WIN32__)\n\n/* OpenGL 1.2 */\n#define GL_RESCALE_NORMAL                       0x803A\n#define GL_CLAMP_TO_EDGE                        0x812F\n#define GL_MAX_ELEMENTS_VERTICES                0x80E8\n#define GL_MAX_ELEMENTS_INDICES                 0x80E9\n#define GL_BGR                                  0x80E0\n#define GL_BGRA                                 0x80E1\n#define GL_UNSIGNED_BYTE_3_3_2                  0x8032\n#define GL_UNSIGNED_BYTE_2_3_3_REV              0x8362\n#define GL_UNSIGNED_SHORT_5_6_5                 0x8363\n#define GL_UNSIGNED_SHORT_5_6_5_REV             0x8364\n#define GL_UNSIGNED_SHORT_4_4_4_4               0x8033\n#define GL_UNSIGNED_SHORT_4_4_4_4_REV           0x8365\n#define GL_UNSIGNED_SHORT_5_5_5_1               0x8034\n#define GL_UNSIGNED_SHORT_1_5_5_5_REV           0x8366\n#define GL_UNSIGNED_INT_8_8_8_8                 0x8035\n#define GL_UNSIGNED_INT_8_8_8_8_REV             0x8367\n#define GL_UNSIGNED_INT_10_10_10_2              0x8036\n#define GL_UNSIGNED_INT_2_10_10_10_REV          0x8368\n#define GL_LIGHT_MODEL_COLOR_CONTROL            0x81F8\n#define GL_SINGLE_COLOR                         0x81F9\n#define GL_SEPARATE_SPECULAR_COLOR              0x81FA\n#define GL_TEXTURE_MIN_LOD                      0x813A\n#define GL_TEXTURE_MAX_LOD                      0x813B\n#define GL_TEXTURE_BASE_LEVEL                   0x813C\n#define GL_TEXTURE_MAX_LEVEL                    0x813D\n#define GL_SMOOTH_POINT_SIZE_RANGE              0x0B12\n#define GL_SMOOTH_POINT_SIZE_GRANULARITY        0x0B13\n#define GL_SMOOTH_LINE_WIDTH_RANGE              0x0B22\n#define GL_SMOOTH_LINE_WIDTH_GRANULARITY        0x0B23\n#define GL_ALIASED_POINT_SIZE_RANGE             0x846D\n#define GL_ALIASED_LINE_WIDTH_RANGE             0x846E\n#define GL_PACK_SKIP_IMAGES                     0x806B\n#define GL_PACK_IMAGE_HEIGHT                    0x806C\n#define GL_UNPACK_SKIP_IMAGES                   0x806D\n#define GL_UNPACK_IMAGE_HEIGHT                  0x806E\n#define GL_TEXTURE_3D                           0x806F\n#define GL_PROXY_TEXTURE_3D                     0x8070\n#define GL_TEXTURE_DEPTH                        0x8071\n#define GL_TEXTURE_WRAP_R                       0x8072\n#define GL_MAX_3D_TEXTURE_SIZE                  0x8073\n#define GL_TEXTURE_BINDING_3D                   0x806A\n\n/* OpenGL 1.2 imaging subset */\n/* GL_EXT_color_table */\n#define GL_COLOR_TABLE                          0x80D0\n#define GL_POST_CONVOLUTION_COLOR_TABLE         0x80D1\n#define GL_POST_COLOR_MATRIX_COLOR_TABLE        0x80D2\n#define GL_PROXY_COLOR_TABLE                    0x80D3\n#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE   0x80D4\n#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE  0x80D5\n#define GL_COLOR_TABLE_SCALE                    0x80D6\n#define GL_COLOR_TABLE_BIAS                     0x80D7\n#define GL_COLOR_TABLE_FORMAT                   0x80D8\n#define GL_COLOR_TABLE_WIDTH                    0x80D9\n#define GL_COLOR_TABLE_RED_SIZE                 0x80DA\n#define GL_COLOR_TABLE_GREEN_SIZE               0x80DB\n#define GL_COLOR_TABLE_BLUE_SIZE                0x80DC\n#define GL_COLOR_TABLE_ALPHA_SIZE               0x80DD\n#define GL_COLOR_TABLE_LUMINANCE_SIZE           0x80DE\n#define GL_COLOR_TABLE_INTENSITY_SIZE           0x80DF\n/* GL_EXT_convolution and GL_HP_convolution_border_modes */\n#define GL_CONVOLUTION_1D                       0x8010\n#define GL_CONVOLUTION_2D                       0x8011\n#define GL_SEPARABLE_2D                         0x8012\n#define GL_CONVOLUTION_BORDER_MODE              0x8013\n#define GL_CONVOLUTION_FILTER_SCALE             0x8014\n#define GL_CONVOLUTION_FILTER_BIAS              0x8015\n#define GL_REDUCE                               0x8016\n#define GL_CONVOLUTION_FORMAT                   0x8017\n#define GL_CONVOLUTION_WIDTH                    0x8018\n#define GL_CONVOLUTION_HEIGHT                   0x8019\n#define GL_MAX_CONVOLUTION_WIDTH                0x801A\n#define GL_MAX_CONVOLUTION_HEIGHT               0x801B\n#define GL_POST_CONVOLUTION_RED_SCALE           0x801C\n#define GL_POST_CONVOLUTION_GREEN_SCALE         0x801D\n#define GL_POST_CONVOLUTION_BLUE_SCALE          0x801E\n#define GL_POST_CONVOLUTION_ALPHA_SCALE         0x801F\n#define GL_POST_CONVOLUTION_RED_BIAS            0x8020\n#define GL_POST_CONVOLUTION_GREEN_BIAS          0x8021\n#define GL_POST_CONVOLUTION_BLUE_BIAS           0x8022\n#define GL_POST_CONVOLUTION_ALPHA_BIAS          0x8023\n#define GL_CONSTANT_BORDER                      0x8151\n#define GL_REPLICATE_BORDER                     0x8153\n#define GL_CONVOLUTION_BORDER_COLOR             0x8154\n/* GL_SGI_color_matrix */\n#define GL_COLOR_MATRIX                         0x80B1\n#define GL_COLOR_MATRIX_STACK_DEPTH             0x80B2\n#define GL_MAX_COLOR_MATRIX_STACK_DEPTH         0x80B3\n#define GL_POST_COLOR_MATRIX_RED_SCALE          0x80B4\n#define GL_POST_COLOR_MATRIX_GREEN_SCALE        0x80B5\n#define GL_POST_COLOR_MATRIX_BLUE_SCALE         0x80B6\n#define GL_POST_COLOR_MATRIX_ALPHA_SCALE        0x80B7\n#define GL_POST_COLOR_MATRIX_RED_BIAS           0x80B8\n#define GL_POST_COLOR_MATRIX_GREEN_BIAS         0x80B9\n#define GL_POST_COLOR_MATRIX_BLUE_BIAS          0x80BA\n#define GL_POST_COLOR_MATRIX_ALPHA_BIAS         0x80BB\n/* GL_EXT_histogram */\n#define GL_HISTOGRAM                            0x8024\n#define GL_PROXY_HISTOGRAM                      0x8025\n#define GL_HISTOGRAM_WIDTH                      0x8026\n#define GL_HISTOGRAM_FORMAT                     0x8027\n#define GL_HISTOGRAM_RED_SIZE                   0x8028\n#define GL_HISTOGRAM_GREEN_SIZE                 0x8029\n#define GL_HISTOGRAM_BLUE_SIZE                  0x802A\n#define GL_HISTOGRAM_ALPHA_SIZE                 0x802B\n#define GL_HISTOGRAM_LUMINANCE_SIZE             0x802C\n#define GL_HISTOGRAM_SINK                       0x802D\n#define GL_MINMAX                               0x802E\n#define GL_MINMAX_FORMAT                        0x802F\n#define GL_MINMAX_SINK                          0x8030\n#define GL_TABLE_TOO_LARGE                      0x8031\n/* GL_EXT_blend_color, GL_EXT_blend_minmax */\n#define GL_BLEND_EQUATION                       0x8009\n#define GL_MIN                                  0x8007\n#define GL_MAX                                  0x8008\n#define GL_FUNC_ADD                             0x8006\n#define GL_FUNC_SUBTRACT                        0x800A\n#define GL_FUNC_REVERSE_SUBTRACT                0x800B\n#define GL_BLEND_COLOR                          0x8005\n\n\n/* OpenGL 1.3 */\n/* multitexture */\n#define GL_TEXTURE0                             0x84C0\n#define GL_TEXTURE1                             0x84C1\n#define GL_TEXTURE2                             0x84C2\n#define GL_TEXTURE3                             0x84C3\n#define GL_TEXTURE4                             0x84C4\n#define GL_TEXTURE5                             0x84C5\n#define GL_TEXTURE6                             0x84C6\n#define GL_TEXTURE7                             0x84C7\n#define GL_TEXTURE8                             0x84C8\n#define GL_TEXTURE9                             0x84C9\n#define GL_TEXTURE10                            0x84CA\n#define GL_TEXTURE11                            0x84CB\n#define GL_TEXTURE12                            0x84CC\n#define GL_TEXTURE13                            0x84CD\n#define GL_TEXTURE14                            0x84CE\n#define GL_TEXTURE15                            0x84CF\n#define GL_TEXTURE16                            0x84D0\n#define GL_TEXTURE17                            0x84D1\n#define GL_TEXTURE18                            0x84D2\n#define GL_TEXTURE19                            0x84D3\n#define GL_TEXTURE20                            0x84D4\n#define GL_TEXTURE21                            0x84D5\n#define GL_TEXTURE22                            0x84D6\n#define GL_TEXTURE23                            0x84D7\n#define GL_TEXTURE24                            0x84D8\n#define GL_TEXTURE25                            0x84D9\n#define GL_TEXTURE26                            0x84DA\n#define GL_TEXTURE27                            0x84DB\n#define GL_TEXTURE28                            0x84DC\n#define GL_TEXTURE29                            0x84DD\n#define GL_TEXTURE30                            0x84DE\n#define GL_TEXTURE31                            0x84DF\n#define GL_ACTIVE_TEXTURE                       0x84E0\n#define GL_CLIENT_ACTIVE_TEXTURE                0x84E1\n#define GL_MAX_TEXTURE_UNITS                    0x84E2\n/* texture_cube_map */\n#define GL_NORMAL_MAP                           0x8511\n#define GL_REFLECTION_MAP                       0x8512\n#define GL_TEXTURE_CUBE_MAP                     0x8513\n#define GL_TEXTURE_BINDING_CUBE_MAP             0x8514\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_X          0x8515\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X          0x8516\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y          0x8517\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y          0x8518\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z          0x8519\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z          0x851A\n#define GL_PROXY_TEXTURE_CUBE_MAP               0x851B\n#define GL_MAX_CUBE_MAP_TEXTURE_SIZE            0x851C\n/* texture_compression */\n#define GL_COMPRESSED_ALPHA                     0x84E9\n#define GL_COMPRESSED_LUMINANCE                 0x84EA\n#define GL_COMPRESSED_LUMINANCE_ALPHA           0x84EB\n#define GL_COMPRESSED_INTENSITY                 0x84EC\n#define GL_COMPRESSED_RGB                       0x84ED\n#define GL_COMPRESSED_RGBA                      0x84EE\n#define GL_TEXTURE_COMPRESSION_HINT             0x84EF\n#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE        0x86A0\n#define GL_TEXTURE_COMPRESSED                   0x86A1\n#define GL_NUM_COMPRESSED_TEXTURE_FORMATS       0x86A2\n#define GL_COMPRESSED_TEXTURE_FORMATS           0x86A3\n/* multisample */\n#define GL_MULTISAMPLE                          0x809D\n#define GL_SAMPLE_ALPHA_TO_COVERAGE             0x809E\n#define GL_SAMPLE_ALPHA_TO_ONE                  0x809F\n#define GL_SAMPLE_COVERAGE                      0x80A0\n#define GL_SAMPLE_BUFFERS                       0x80A8\n#define GL_SAMPLES                              0x80A9\n#define GL_SAMPLE_COVERAGE_VALUE                0x80AA\n#define GL_SAMPLE_COVERAGE_INVERT               0x80AB\n#define GL_MULTISAMPLE_BIT                      0x20000000\n/* transpose_matrix */\n#define GL_TRANSPOSE_MODELVIEW_MATRIX           0x84E3\n#define GL_TRANSPOSE_PROJECTION_MATRIX          0x84E4\n#define GL_TRANSPOSE_TEXTURE_MATRIX             0x84E5\n#define GL_TRANSPOSE_COLOR_MATRIX               0x84E6\n/* texture_env_combine */\n#define GL_COMBINE                              0x8570\n#define GL_COMBINE_RGB                          0x8571\n#define GL_COMBINE_ALPHA                        0x8572\n#define GL_SOURCE0_RGB                          0x8580\n#define GL_SOURCE1_RGB                          0x8581\n#define GL_SOURCE2_RGB                          0x8582\n#define GL_SOURCE0_ALPHA                        0x8588\n#define GL_SOURCE1_ALPHA                        0x8589\n#define GL_SOURCE2_ALPHA                        0x858A\n#define GL_OPERAND0_RGB                         0x8590\n#define GL_OPERAND1_RGB                         0x8591\n#define GL_OPERAND2_RGB                         0x8592\n#define GL_OPERAND0_ALPHA                       0x8598\n#define GL_OPERAND1_ALPHA                       0x8599\n#define GL_OPERAND2_ALPHA                       0x859A\n#define GL_RGB_SCALE                            0x8573\n#define GL_ADD_SIGNED                           0x8574\n#define GL_INTERPOLATE                          0x8575\n#define GL_SUBTRACT                             0x84E7\n#define GL_CONSTANT                             0x8576\n#define GL_PRIMARY_COLOR                        0x8577\n#define GL_PREVIOUS                             0x8578\n/* texture_env_dot3 */\n#define GL_DOT3_RGB                             0x86AE\n#define GL_DOT3_RGBA                            0x86AF\n/* texture_border_clamp */\n#define GL_CLAMP_TO_BORDER                      0x812D\n\n#endif /* __WIN32__ */\n\n\n\n/************************************************************************\n *\n * Function prototypes\n *\n ************************************************************************/\n\n/* Miscellaneous */\nGLAPI void APIENTRY glClearIndex( GLfloat c );\nGLAPI void APIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha );\nGLAPI void APIENTRY glClear( GLbitfield mask );\nGLAPI void APIENTRY glIndexMask( GLuint mask );\nGLAPI void APIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha );\nGLAPI void APIENTRY glAlphaFunc( GLenum func, GLclampf ref );\nGLAPI void APIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor );\nGLAPI void APIENTRY glLogicOp( GLenum opcode );\nGLAPI void APIENTRY glCullFace( GLenum mode );\nGLAPI void APIENTRY glFrontFace( GLenum mode );\nGLAPI void APIENTRY glPointSize( GLfloat size );\nGLAPI void APIENTRY glLineWidth( GLfloat width );\nGLAPI void APIENTRY glLineStipple( GLint factor, GLushort pattern );\nGLAPI void APIENTRY glPolygonMode( GLenum face, GLenum mode );\nGLAPI void APIENTRY glPolygonOffset( GLfloat factor, GLfloat units );\nGLAPI void APIENTRY glPolygonStipple( const GLubyte *mask );\nGLAPI void APIENTRY glGetPolygonStipple( GLubyte *mask );\nGLAPI void APIENTRY glEdgeFlag( GLboolean flag );\nGLAPI void APIENTRY glEdgeFlagv( const GLboolean *flag );\nGLAPI void APIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glClipPlane( GLenum plane, const GLdouble *equation );\nGLAPI void APIENTRY glGetClipPlane( GLenum plane, GLdouble *equation );\nGLAPI void APIENTRY glDrawBuffer( GLenum mode );\nGLAPI void APIENTRY glReadBuffer( GLenum mode );\nGLAPI void APIENTRY glEnable( GLenum cap );\nGLAPI void APIENTRY glDisable( GLenum cap );\nGLAPI GLboolean APIENTRY glIsEnabled( GLenum cap );\nGLAPI void APIENTRY glEnableClientState( GLenum cap );  /* 1.1 */\nGLAPI void APIENTRY glDisableClientState( GLenum cap );  /* 1.1 */\nGLAPI void APIENTRY glGetBooleanv( GLenum pname, GLboolean *params );\nGLAPI void APIENTRY glGetDoublev( GLenum pname, GLdouble *params );\nGLAPI void APIENTRY glGetFloatv( GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetIntegerv( GLenum pname, GLint *params );\nGLAPI void APIENTRY glPushAttrib( GLbitfield mask );\nGLAPI void APIENTRY glPopAttrib( void );\nGLAPI void APIENTRY glPushClientAttrib( GLbitfield mask );  /* 1.1 */\nGLAPI void APIENTRY glPopClientAttrib( void );  /* 1.1 */\nGLAPI GLint APIENTRY glRenderMode( GLenum mode );\nGLAPI GLenum APIENTRY glGetError( void );\nGLAPI const GLubyte* APIENTRY glGetString( GLenum name );\nGLAPI void APIENTRY glFinish( void );\nGLAPI void APIENTRY glFlush( void );\nGLAPI void APIENTRY glHint( GLenum target, GLenum mode );\n\n/* Depth Buffer */\nGLAPI void APIENTRY glClearDepth( GLclampd depth );\nGLAPI void APIENTRY glDepthFunc( GLenum func );\nGLAPI void APIENTRY glDepthMask( GLboolean flag );\nGLAPI void APIENTRY glDepthRange( GLclampd near_val, GLclampd far_val );\n\n/* Accumulation Buffer */\nGLAPI void APIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha );\nGLAPI void APIENTRY glAccum( GLenum op, GLfloat value );\n\n/* Transformation */\nGLAPI void APIENTRY glMatrixMode( GLenum mode );\nGLAPI void APIENTRY glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );\nGLAPI void APIENTRY glFrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );\nGLAPI void APIENTRY glViewport( GLint x, GLint y, GLsizei width, GLsizei height );\nGLAPI void APIENTRY glPushMatrix( void );\nGLAPI void APIENTRY glPopMatrix( void );\nGLAPI void APIENTRY glLoadIdentity( void );\nGLAPI void APIENTRY glLoadMatrixd( const GLdouble *m );\nGLAPI void APIENTRY glLoadMatrixf( const GLfloat *m );\nGLAPI void APIENTRY glMultMatrixd( const GLdouble *m );\nGLAPI void APIENTRY glMultMatrixf( const GLfloat *m );\nGLAPI void APIENTRY glRotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z );\nGLAPI void APIENTRY glRotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z );\nGLAPI void APIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z );\nGLAPI void APIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z );\nGLAPI void APIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z );\nGLAPI void APIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z );\n\n/* Display Lists */\nGLAPI GLboolean APIENTRY glIsList( GLuint list );\nGLAPI void APIENTRY glDeleteLists( GLuint list, GLsizei range );\nGLAPI GLuint APIENTRY glGenLists( GLsizei range );\nGLAPI void APIENTRY glNewList( GLuint list, GLenum mode );\nGLAPI void APIENTRY glEndList( void );\nGLAPI void APIENTRY glCallList( GLuint list );\nGLAPI void APIENTRY glCallLists( GLsizei n, GLenum type, const GLvoid *lists );\nGLAPI void APIENTRY glListBase( GLuint base );\n\n/* Drawing Functions */\nGLAPI void APIENTRY glBegin( GLenum mode );\nGLAPI void APIENTRY glEnd( void );\nGLAPI void APIENTRY glVertex2d( GLdouble x, GLdouble y );\nGLAPI void APIENTRY glVertex2f( GLfloat x, GLfloat y );\nGLAPI void APIENTRY glVertex2i( GLint x, GLint y );\nGLAPI void APIENTRY glVertex2s( GLshort x, GLshort y );\nGLAPI void APIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z );\nGLAPI void APIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z );\nGLAPI void APIENTRY glVertex3i( GLint x, GLint y, GLint z );\nGLAPI void APIENTRY glVertex3s( GLshort x, GLshort y, GLshort z );\nGLAPI void APIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w );\nGLAPI void APIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w );\nGLAPI void APIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w );\nGLAPI void APIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w );\nGLAPI void APIENTRY glVertex2dv( const GLdouble *v );\nGLAPI void APIENTRY glVertex2fv( const GLfloat *v );\nGLAPI void APIENTRY glVertex2iv( const GLint *v );\nGLAPI void APIENTRY glVertex2sv( const GLshort *v );\nGLAPI void APIENTRY glVertex3dv( const GLdouble *v );\nGLAPI void APIENTRY glVertex3fv( const GLfloat *v );\nGLAPI void APIENTRY glVertex3iv( const GLint *v );\nGLAPI void APIENTRY glVertex3sv( const GLshort *v );\nGLAPI void APIENTRY glVertex4dv( const GLdouble *v );\nGLAPI void APIENTRY glVertex4fv( const GLfloat *v );\nGLAPI void APIENTRY glVertex4iv( const GLint *v );\nGLAPI void APIENTRY glVertex4sv( const GLshort *v );\nGLAPI void APIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz );\nGLAPI void APIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz );\nGLAPI void APIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz );\nGLAPI void APIENTRY glNormal3i( GLint nx, GLint ny, GLint nz );\nGLAPI void APIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz );\nGLAPI void APIENTRY glNormal3bv( const GLbyte *v );\nGLAPI void APIENTRY glNormal3dv( const GLdouble *v );\nGLAPI void APIENTRY glNormal3fv( const GLfloat *v );\nGLAPI void APIENTRY glNormal3iv( const GLint *v );\nGLAPI void APIENTRY glNormal3sv( const GLshort *v );\nGLAPI void APIENTRY glIndexd( GLdouble c );\nGLAPI void APIENTRY glIndexf( GLfloat c );\nGLAPI void APIENTRY glIndexi( GLint c );\nGLAPI void APIENTRY glIndexs( GLshort c );\nGLAPI void APIENTRY glIndexub( GLubyte c );  /* 1.1 */\nGLAPI void APIENTRY glIndexdv( const GLdouble *c );\nGLAPI void APIENTRY glIndexfv( const GLfloat *c );\nGLAPI void APIENTRY glIndexiv( const GLint *c );\nGLAPI void APIENTRY glIndexsv( const GLshort *c );\nGLAPI void APIENTRY glIndexubv( const GLubyte *c );  /* 1.1 */\nGLAPI void APIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue );\nGLAPI void APIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue );\nGLAPI void APIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue );\nGLAPI void APIENTRY glColor3i( GLint red, GLint green, GLint blue );\nGLAPI void APIENTRY glColor3s( GLshort red, GLshort green, GLshort blue );\nGLAPI void APIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue );\nGLAPI void APIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue );\nGLAPI void APIENTRY glColor3us( GLushort red, GLushort green, GLushort blue );\nGLAPI void APIENTRY glColor4b( GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha );\nGLAPI void APIENTRY glColor4d( GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha );\nGLAPI void APIENTRY glColor4f( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha );\nGLAPI void APIENTRY glColor4i( GLint red, GLint green, GLint blue, GLint alpha );\nGLAPI void APIENTRY glColor4s( GLshort red, GLshort green, GLshort blue, GLshort alpha );\nGLAPI void APIENTRY glColor4ub( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha );\nGLAPI void APIENTRY glColor4ui( GLuint red, GLuint green, GLuint blue, GLuint alpha );\nGLAPI void APIENTRY glColor4us( GLushort red, GLushort green, GLushort blue, GLushort alpha );\nGLAPI void APIENTRY glColor3bv( const GLbyte *v );\nGLAPI void APIENTRY glColor3dv( const GLdouble *v );\nGLAPI void APIENTRY glColor3fv( const GLfloat *v );\nGLAPI void APIENTRY glColor3iv( const GLint *v );\nGLAPI void APIENTRY glColor3sv( const GLshort *v );\nGLAPI void APIENTRY glColor3ubv( const GLubyte *v );\nGLAPI void APIENTRY glColor3uiv( const GLuint *v );\nGLAPI void APIENTRY glColor3usv( const GLushort *v );\nGLAPI void APIENTRY glColor4bv( const GLbyte *v );\nGLAPI void APIENTRY glColor4dv( const GLdouble *v );\nGLAPI void APIENTRY glColor4fv( const GLfloat *v );\nGLAPI void APIENTRY glColor4iv( const GLint *v );\nGLAPI void APIENTRY glColor4sv( const GLshort *v );\nGLAPI void APIENTRY glColor4ubv( const GLubyte *v );\nGLAPI void APIENTRY glColor4uiv( const GLuint *v );\nGLAPI void APIENTRY glColor4usv( const GLushort *v );\nGLAPI void APIENTRY glTexCoord1d( GLdouble s );\nGLAPI void APIENTRY glTexCoord1f( GLfloat s );\nGLAPI void APIENTRY glTexCoord1i( GLint s );\nGLAPI void APIENTRY glTexCoord1s( GLshort s );\nGLAPI void APIENTRY glTexCoord2d( GLdouble s, GLdouble t );\nGLAPI void APIENTRY glTexCoord2f( GLfloat s, GLfloat t );\nGLAPI void APIENTRY glTexCoord2i( GLint s, GLint t );\nGLAPI void APIENTRY glTexCoord2s( GLshort s, GLshort t );\nGLAPI void APIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r );\nGLAPI void APIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r );\nGLAPI void APIENTRY glTexCoord3i( GLint s, GLint t, GLint r );\nGLAPI void APIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r );\nGLAPI void APIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q );\nGLAPI void APIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q );\nGLAPI void APIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q );\nGLAPI void APIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q );\nGLAPI void APIENTRY glTexCoord1dv( const GLdouble *v );\nGLAPI void APIENTRY glTexCoord1fv( const GLfloat *v );\nGLAPI void APIENTRY glTexCoord1iv( const GLint *v );\nGLAPI void APIENTRY glTexCoord1sv( const GLshort *v );\nGLAPI void APIENTRY glTexCoord2dv( const GLdouble *v );\nGLAPI void APIENTRY glTexCoord2fv( const GLfloat *v );\nGLAPI void APIENTRY glTexCoord2iv( const GLint *v );\nGLAPI void APIENTRY glTexCoord2sv( const GLshort *v );\nGLAPI void APIENTRY glTexCoord3dv( const GLdouble *v );\nGLAPI void APIENTRY glTexCoord3fv( const GLfloat *v );\nGLAPI void APIENTRY glTexCoord3iv( const GLint *v );\nGLAPI void APIENTRY glTexCoord3sv( const GLshort *v );\nGLAPI void APIENTRY glTexCoord4dv( const GLdouble *v );\nGLAPI void APIENTRY glTexCoord4fv( const GLfloat *v );\nGLAPI void APIENTRY glTexCoord4iv( const GLint *v );\nGLAPI void APIENTRY glTexCoord4sv( const GLshort *v );\nGLAPI void APIENTRY glRasterPos2d( GLdouble x, GLdouble y );\nGLAPI void APIENTRY glRasterPos2f( GLfloat x, GLfloat y );\nGLAPI void APIENTRY glRasterPos2i( GLint x, GLint y );\nGLAPI void APIENTRY glRasterPos2s( GLshort x, GLshort y );\nGLAPI void APIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z );\nGLAPI void APIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z );\nGLAPI void APIENTRY glRasterPos3i( GLint x, GLint y, GLint z );\nGLAPI void APIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z );\nGLAPI void APIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w );\nGLAPI void APIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w );\nGLAPI void APIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w );\nGLAPI void APIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w );\nGLAPI void APIENTRY glRasterPos2dv( const GLdouble *v );\nGLAPI void APIENTRY glRasterPos2fv( const GLfloat *v );\nGLAPI void APIENTRY glRasterPos2iv( const GLint *v );\nGLAPI void APIENTRY glRasterPos2sv( const GLshort *v );\nGLAPI void APIENTRY glRasterPos3dv( const GLdouble *v );\nGLAPI void APIENTRY glRasterPos3fv( const GLfloat *v );\nGLAPI void APIENTRY glRasterPos3iv( const GLint *v );\nGLAPI void APIENTRY glRasterPos3sv( const GLshort *v );\nGLAPI void APIENTRY glRasterPos4dv( const GLdouble *v );\nGLAPI void APIENTRY glRasterPos4fv( const GLfloat *v );\nGLAPI void APIENTRY glRasterPos4iv( const GLint *v );\nGLAPI void APIENTRY glRasterPos4sv( const GLshort *v );\nGLAPI void APIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 );\nGLAPI void APIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 );\nGLAPI void APIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 );\nGLAPI void APIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 );\nGLAPI void APIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 );\nGLAPI void APIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 );\nGLAPI void APIENTRY glRectiv( const GLint *v1, const GLint *v2 );\nGLAPI void APIENTRY glRectsv( const GLshort *v1, const GLshort *v2 );\n\n/* Lighting */\nGLAPI void APIENTRY glShadeModel( GLenum mode );\nGLAPI void APIENTRY glLightf( GLenum light, GLenum pname, GLfloat param );\nGLAPI void APIENTRY glLighti( GLenum light, GLenum pname, GLint param );\nGLAPI void APIENTRY glLightfv( GLenum light, GLenum pname, const GLfloat *params );\nGLAPI void APIENTRY glLightiv( GLenum light, GLenum pname, const GLint *params );\nGLAPI void APIENTRY glGetLightfv( GLenum light, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetLightiv( GLenum light, GLenum pname, GLint *params );\nGLAPI void APIENTRY glLightModelf( GLenum pname, GLfloat param );\nGLAPI void APIENTRY glLightModeli( GLenum pname, GLint param );\nGLAPI void APIENTRY glLightModelfv( GLenum pname, const GLfloat *params );\nGLAPI void APIENTRY glLightModeliv( GLenum pname, const GLint *params );\nGLAPI void APIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param );\nGLAPI void APIENTRY glMateriali( GLenum face, GLenum pname, GLint param );\nGLAPI void APIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params );\nGLAPI void APIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params );\nGLAPI void APIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params );\nGLAPI void APIENTRY glColorMaterial( GLenum face, GLenum mode );\n\n/* Raster functions */\nGLAPI void APIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor );\nGLAPI void APIENTRY glPixelStoref( GLenum pname, GLfloat param );\nGLAPI void APIENTRY glPixelStorei( GLenum pname, GLint param );\nGLAPI void APIENTRY glPixelTransferf( GLenum pname, GLfloat param );\nGLAPI void APIENTRY glPixelTransferi( GLenum pname, GLint param );\nGLAPI void APIENTRY glPixelMapfv( GLenum map, GLint mapsize, const GLfloat *values );\nGLAPI void APIENTRY glPixelMapuiv( GLenum map, GLint mapsize, const GLuint *values );\nGLAPI void APIENTRY glPixelMapusv( GLenum map, GLint mapsize, const GLushort *values );\nGLAPI void APIENTRY glGetPixelMapfv( GLenum map, GLfloat *values );\nGLAPI void APIENTRY glGetPixelMapuiv( GLenum map, GLuint *values );\nGLAPI void APIENTRY glGetPixelMapusv( GLenum map, GLushort *values );\nGLAPI void APIENTRY glBitmap( GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap );\nGLAPI void APIENTRY glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels );\nGLAPI void APIENTRY glDrawPixels( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels );\nGLAPI void APIENTRY glCopyPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum type );\n\n/* Stenciling */\nGLAPI void APIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask );\nGLAPI void APIENTRY glStencilMask( GLuint mask );\nGLAPI void APIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass );\nGLAPI void APIENTRY glClearStencil( GLint s );\n\n/* Texture mapping */\nGLAPI void APIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param );\nGLAPI void APIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param );\nGLAPI void APIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param );\nGLAPI void APIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params );\nGLAPI void APIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params );\nGLAPI void APIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params );\nGLAPI void APIENTRY glGetTexGendv( GLenum coord, GLenum pname, GLdouble *params );\nGLAPI void APIENTRY glGetTexGenfv( GLenum coord, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetTexGeniv( GLenum coord, GLenum pname, GLint *params );\nGLAPI void APIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param );\nGLAPI void APIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param );\nGLAPI void APIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params );\nGLAPI void APIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params );\nGLAPI void APIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params );\nGLAPI void APIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param );\nGLAPI void APIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param );\nGLAPI void APIENTRY glTexParameterfv( GLenum target, GLenum pname, const GLfloat *params );\nGLAPI void APIENTRY glTexParameteriv( GLenum target, GLenum pname, const GLint *params );\nGLAPI void APIENTRY glGetTexParameterfv( GLenum target, GLenum pname, GLfloat *params);\nGLAPI void APIENTRY glGetTexParameteriv( GLenum target, GLenum pname, GLint *params );\nGLAPI void APIENTRY glGetTexLevelParameterfv( GLenum target, GLint level, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, GLenum pname, GLint *params );\nGLAPI void APIENTRY glTexImage1D( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels );\nGLAPI void APIENTRY glTexImage2D( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels );\nGLAPI void APIENTRY glGetTexImage( GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels );\n\n/* Evaluators */\nGLAPI void APIENTRY glMap1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points );\nGLAPI void APIENTRY glMap1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points );\nGLAPI void APIENTRY glMap2d( GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points );\nGLAPI void APIENTRY glMap2f( GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points );\nGLAPI void APIENTRY glGetMapdv( GLenum target, GLenum query, GLdouble *v );\nGLAPI void APIENTRY glGetMapfv( GLenum target, GLenum query, GLfloat *v );\nGLAPI void APIENTRY glGetMapiv( GLenum target, GLenum query, GLint *v );\nGLAPI void APIENTRY glEvalCoord1d( GLdouble u );\nGLAPI void APIENTRY glEvalCoord1f( GLfloat u );\nGLAPI void APIENTRY glEvalCoord1dv( const GLdouble *u );\nGLAPI void APIENTRY glEvalCoord1fv( const GLfloat *u );\nGLAPI void APIENTRY glEvalCoord2d( GLdouble u, GLdouble v );\nGLAPI void APIENTRY glEvalCoord2f( GLfloat u, GLfloat v );\nGLAPI void APIENTRY glEvalCoord2dv( const GLdouble *u );\nGLAPI void APIENTRY glEvalCoord2fv( const GLfloat *u );\nGLAPI void APIENTRY glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 );\nGLAPI void APIENTRY glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 );\nGLAPI void APIENTRY glMapGrid2d( GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2 );\nGLAPI void APIENTRY glMapGrid2f( GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2 );\nGLAPI void APIENTRY glEvalPoint1( GLint i );\nGLAPI void APIENTRY glEvalPoint2( GLint i, GLint j );\nGLAPI void APIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 );\nGLAPI void APIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );\n\n/* Fog */\nGLAPI void APIENTRY glFogf( GLenum pname, GLfloat param );\nGLAPI void APIENTRY glFogi( GLenum pname, GLint param );\nGLAPI void APIENTRY glFogfv( GLenum pname, const GLfloat *params );\nGLAPI void APIENTRY glFogiv( GLenum pname, const GLint *params );\n\n/* Selection and Feedback */\nGLAPI void APIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer );\nGLAPI void APIENTRY glPassThrough( GLfloat token );\nGLAPI void APIENTRY glSelectBuffer( GLsizei size, GLuint *buffer );\nGLAPI void APIENTRY glInitNames( void );\nGLAPI void APIENTRY glLoadName( GLuint name );\nGLAPI void APIENTRY glPushName( GLuint name );\nGLAPI void APIENTRY glPopName( void );\n\n\n/* 1.1 functions */\n/* texture objects */\nGLAPI void APIENTRY glGenTextures( GLsizei n, GLuint *textures );\nGLAPI void APIENTRY glDeleteTextures( GLsizei n, const GLuint *textures);\nGLAPI void APIENTRY glBindTexture( GLenum target, GLuint texture );\nGLAPI void APIENTRY glPrioritizeTextures( GLsizei n, const GLuint *textures, const GLclampf *priorities );\nGLAPI GLboolean APIENTRY glAreTexturesResident( GLsizei n, const GLuint *textures, GLboolean *residences );\nGLAPI GLboolean APIENTRY glIsTexture( GLuint texture );\n/* texture mapping */\nGLAPI void APIENTRY glTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels );\nGLAPI void APIENTRY glTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels );\nGLAPI void APIENTRY glCopyTexImage1D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border );\nGLAPI void APIENTRY glCopyTexImage2D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border );\nGLAPI void APIENTRY glCopyTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width );\nGLAPI void APIENTRY glCopyTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height );\n/* vertex arrays */\nGLAPI void APIENTRY glVertexPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );\nGLAPI void APIENTRY glNormalPointer( GLenum type, GLsizei stride, const GLvoid *ptr );\nGLAPI void APIENTRY glColorPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );\nGLAPI void APIENTRY glIndexPointer( GLenum type, GLsizei stride, const GLvoid *ptr );\nGLAPI void APIENTRY glTexCoordPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );\nGLAPI void APIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr );\nGLAPI void APIENTRY glGetPointerv( GLenum pname, GLvoid **params );\nGLAPI void APIENTRY glArrayElement( GLint i );\nGLAPI void APIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count );\nGLAPI void APIENTRY glDrawElements( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices );\nGLAPI void APIENTRY glInterleavedArrays( GLenum format, GLsizei stride, const GLvoid *pointer );\n\n\n\n/* Under Windows, we do not define OpenGL 1.2 & 1.3 functionality, since\n   it is treated as extensions (defined in glext.h) */\n#if !defined(__WIN32__)\n\n/* 1.2 functions */\nGLAPI void APIENTRY glDrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices );\nGLAPI void APIENTRY glTexImage3D( GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels );\nGLAPI void APIENTRY glTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);\nGLAPI void APIENTRY glCopyTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height );\n\n/* 1.2 imaging extension functions */\nGLAPI void APIENTRY glColorTable( GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table );\nGLAPI void APIENTRY glColorSubTable( GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data );\nGLAPI void APIENTRY glColorTableParameteriv(GLenum target, GLenum pname, const GLint *params);\nGLAPI void APIENTRY glColorTableParameterfv(GLenum target, GLenum pname, const GLfloat *params);\nGLAPI void APIENTRY glCopyColorSubTable( GLenum target, GLsizei start, GLint x, GLint y, GLsizei width );\nGLAPI void APIENTRY glCopyColorTable( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width );\nGLAPI void APIENTRY glGetColorTable( GLenum target, GLenum format, GLenum type, GLvoid *table );\nGLAPI void APIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, GLint *params );\nGLAPI void APIENTRY glBlendEquation( GLenum mode );\nGLAPI void APIENTRY glBlendColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha );\nGLAPI void APIENTRY glHistogram( GLenum target, GLsizei width, GLenum internalformat, GLboolean sink );\nGLAPI void APIENTRY glResetHistogram( GLenum target );\nGLAPI void APIENTRY glGetHistogram( GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values );\nGLAPI void APIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, GLint *params );\nGLAPI void APIENTRY glMinmax( GLenum target, GLenum internalformat, GLboolean sink );\nGLAPI void APIENTRY glResetMinmax( GLenum target );\nGLAPI void APIENTRY glGetMinmax( GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values );\nGLAPI void APIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, GLint *params );\nGLAPI void APIENTRY glConvolutionFilter1D( GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image );\nGLAPI void APIENTRY glConvolutionFilter2D( GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image );\nGLAPI void APIENTRY glConvolutionParameterf( GLenum target, GLenum pname, GLfloat params );\nGLAPI void APIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, const GLfloat *params );\nGLAPI void APIENTRY glConvolutionParameteri( GLenum target, GLenum pname, GLint params );\nGLAPI void APIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, const GLint *params );\nGLAPI void APIENTRY glCopyConvolutionFilter1D( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width );\nGLAPI void APIENTRY glCopyConvolutionFilter2D( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);\nGLAPI void APIENTRY glGetConvolutionFilter( GLenum target, GLenum format, GLenum type, GLvoid *image );\nGLAPI void APIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, GLfloat *params );\nGLAPI void APIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, GLint *params );\nGLAPI void APIENTRY glSeparableFilter2D( GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column );\nGLAPI void APIENTRY glGetSeparableFilter( GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span );\n\n/* 1.3 functions */\nGLAPI void APIENTRY glActiveTexture( GLenum texture );\nGLAPI void APIENTRY glClientActiveTexture( GLenum texture );\nGLAPI void APIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data );\nGLAPI void APIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data );\nGLAPI void APIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data );\nGLAPI void APIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data );\nGLAPI void APIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data );\nGLAPI void APIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data );\nGLAPI void APIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img );\nGLAPI void APIENTRY glMultiTexCoord1d( GLenum target, GLdouble s );\nGLAPI void APIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v );\nGLAPI void APIENTRY glMultiTexCoord1f( GLenum target, GLfloat s );\nGLAPI void APIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v );\nGLAPI void APIENTRY glMultiTexCoord1i( GLenum target, GLint s );\nGLAPI void APIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v );\nGLAPI void APIENTRY glMultiTexCoord1s( GLenum target, GLshort s );\nGLAPI void APIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v );\nGLAPI void APIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t );\nGLAPI void APIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v );\nGLAPI void APIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t );\nGLAPI void APIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v );\nGLAPI void APIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t );\nGLAPI void APIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v );\nGLAPI void APIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t );\nGLAPI void APIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v );\nGLAPI void APIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r );\nGLAPI void APIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v );\nGLAPI void APIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r );\nGLAPI void APIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v );\nGLAPI void APIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r );\nGLAPI void APIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v );\nGLAPI void APIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r );\nGLAPI void APIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v );\nGLAPI void APIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q );\nGLAPI void APIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v );\nGLAPI void APIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q );\nGLAPI void APIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v );\nGLAPI void APIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q );\nGLAPI void APIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v );\nGLAPI void APIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q );\nGLAPI void APIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v );\nGLAPI void APIENTRY glLoadTransposeMatrixd( const GLdouble m[16] );\nGLAPI void APIENTRY glLoadTransposeMatrixf( const GLfloat m[16] );\nGLAPI void APIENTRY glMultTransposeMatrixd( const GLdouble m[16] );\nGLAPI void APIENTRY glMultTransposeMatrixf( const GLfloat m[16] );\nGLAPI void APIENTRY glSampleCoverage( GLclampf value, GLboolean invert );\nGLAPI void APIENTRY glSamplePass( GLenum pass );\n\n#endif /* __WIN32__ */\n\n\n/* Include external definitions of OpenGL extensions */\n/* Removed, see this bug report for reference:\n * http://sourceforge.net/tracker/index.php?func=detail&aid=610178&group_id=2435&atid=102435\n * \n * #include <GL/glext.h>\n */\n\n\n/************************************************************************\n * Begin system-specific stuff\n */\n/*\n * End system-specific stuff\n ************************************************************************/\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __gl_h_ */\n"
  },
  {
    "path": "Include/glext.h",
    "content": "#ifndef __glext_h_\n#define __glext_h_\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n** License Applicability. Except to the extent portions of this file are\n** made subject to an alternative license as permitted in the SGI Free\n** Software License B, Version 1.1 (the \"License\"), the contents of this\n** file are subject only to the provisions of the License. You may not use\n** this file except in compliance with the License. You may obtain a copy\n** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600\n** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:\n** \n** http://oss.sgi.com/projects/FreeB\n** \n** Note that, as provided in the License, the Software is distributed on an\n** \"AS IS\" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS\n** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND\n** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A\n** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.\n** \n** Original Code. The Original Code is: OpenGL Sample Implementation,\n** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,\n** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.\n** Copyright in any portions created by third parties is as indicated\n** elsewhere herein. All Rights Reserved.\n** \n** Additional Notice Provisions: This software was created using the\n** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has\n** not been independently verified as being compliant with the OpenGL(R)\n** version 1.2.1 Specification.\n*/\n\n#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__)\n#define WIN32_LEAN_AND_MEAN 1\n#include <windows.h>\n#endif\n\n#ifndef APIENTRY\n#define APIENTRY\n#endif\n#ifndef GLAPI\n#define GLAPI extern\n#endif\n\n/*************************************************************/\n\n/* Header file version number, required by OpenGL ABI for Linux */\n/* glext.h last updated 2002/03/22 */\n/* Current version at http://oss.sgi.com/projects/ogl-sample/registry/ */\n#define GL_GLEXT_VERSION 11\n\n#ifndef GL_VERSION_1_2\n#define GL_CONSTANT_COLOR                 0x8001\n#define GL_ONE_MINUS_CONSTANT_COLOR       0x8002\n#define GL_CONSTANT_ALPHA                 0x8003\n#define GL_ONE_MINUS_CONSTANT_ALPHA       0x8004\n#define GL_BLEND_COLOR                    0x8005\n#define GL_FUNC_ADD                       0x8006\n#define GL_MIN                            0x8007\n#define GL_MAX                            0x8008\n#define GL_BLEND_EQUATION                 0x8009\n#define GL_FUNC_SUBTRACT                  0x800A\n#define GL_FUNC_REVERSE_SUBTRACT          0x800B\n#define GL_CONVOLUTION_1D                 0x8010\n#define GL_CONVOLUTION_2D                 0x8011\n#define GL_SEPARABLE_2D                   0x8012\n#define GL_CONVOLUTION_BORDER_MODE        0x8013\n#define GL_CONVOLUTION_FILTER_SCALE       0x8014\n#define GL_CONVOLUTION_FILTER_BIAS        0x8015\n#define GL_REDUCE                         0x8016\n#define GL_CONVOLUTION_FORMAT             0x8017\n#define GL_CONVOLUTION_WIDTH              0x8018\n#define GL_CONVOLUTION_HEIGHT             0x8019\n#define GL_MAX_CONVOLUTION_WIDTH          0x801A\n#define GL_MAX_CONVOLUTION_HEIGHT         0x801B\n#define GL_POST_CONVOLUTION_RED_SCALE     0x801C\n#define GL_POST_CONVOLUTION_GREEN_SCALE   0x801D\n#define GL_POST_CONVOLUTION_BLUE_SCALE    0x801E\n#define GL_POST_CONVOLUTION_ALPHA_SCALE   0x801F\n#define GL_POST_CONVOLUTION_RED_BIAS      0x8020\n#define GL_POST_CONVOLUTION_GREEN_BIAS    0x8021\n#define GL_POST_CONVOLUTION_BLUE_BIAS     0x8022\n#define GL_POST_CONVOLUTION_ALPHA_BIAS    0x8023\n#define GL_HISTOGRAM                      0x8024\n#define GL_PROXY_HISTOGRAM                0x8025\n#define GL_HISTOGRAM_WIDTH                0x8026\n#define GL_HISTOGRAM_FORMAT               0x8027\n#define GL_HISTOGRAM_RED_SIZE             0x8028\n#define GL_HISTOGRAM_GREEN_SIZE           0x8029\n#define GL_HISTOGRAM_BLUE_SIZE            0x802A\n#define GL_HISTOGRAM_ALPHA_SIZE           0x802B\n#define GL_HISTOGRAM_LUMINANCE_SIZE       0x802C\n#define GL_HISTOGRAM_SINK                 0x802D\n#define GL_MINMAX                         0x802E\n#define GL_MINMAX_FORMAT                  0x802F\n#define GL_MINMAX_SINK                    0x8030\n#define GL_TABLE_TOO_LARGE                0x8031\n#define GL_UNSIGNED_BYTE_3_3_2            0x8032\n#define GL_UNSIGNED_SHORT_4_4_4_4         0x8033\n#define GL_UNSIGNED_SHORT_5_5_5_1         0x8034\n#define GL_UNSIGNED_INT_8_8_8_8           0x8035\n#define GL_UNSIGNED_INT_10_10_10_2        0x8036\n#define GL_RESCALE_NORMAL                 0x803A\n#define GL_UNSIGNED_BYTE_2_3_3_REV        0x8362\n#define GL_UNSIGNED_SHORT_5_6_5           0x8363\n#define GL_UNSIGNED_SHORT_5_6_5_REV       0x8364\n#define GL_UNSIGNED_SHORT_4_4_4_4_REV     0x8365\n#define GL_UNSIGNED_SHORT_1_5_5_5_REV     0x8366\n#define GL_UNSIGNED_INT_8_8_8_8_REV       0x8367\n#define GL_UNSIGNED_INT_2_10_10_10_REV    0x8368\n#define GL_COLOR_MATRIX                   0x80B1\n#define GL_COLOR_MATRIX_STACK_DEPTH       0x80B2\n#define GL_MAX_COLOR_MATRIX_STACK_DEPTH   0x80B3\n#define GL_POST_COLOR_MATRIX_RED_SCALE    0x80B4\n#define GL_POST_COLOR_MATRIX_GREEN_SCALE  0x80B5\n#define GL_POST_COLOR_MATRIX_BLUE_SCALE   0x80B6\n#define GL_POST_COLOR_MATRIX_ALPHA_SCALE  0x80B7\n#define GL_POST_COLOR_MATRIX_RED_BIAS     0x80B8\n#define GL_POST_COLOR_MATRIX_GREEN_BIAS   0x80B9\n#define GL_POST_COLOR_MATRIX_BLUE_BIAS    0x80BA\n#define GL_COLOR_TABLE                    0x80D0\n#define GL_POST_CONVOLUTION_COLOR_TABLE   0x80D1\n#define GL_POST_COLOR_MATRIX_COLOR_TABLE  0x80D2\n#define GL_PROXY_COLOR_TABLE              0x80D3\n#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4\n#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5\n#define GL_COLOR_TABLE_SCALE              0x80D6\n#define GL_COLOR_TABLE_BIAS               0x80D7\n#define GL_COLOR_TABLE_FORMAT             0x80D8\n#define GL_COLOR_TABLE_WIDTH              0x80D9\n#define GL_COLOR_TABLE_RED_SIZE           0x80DA\n#define GL_COLOR_TABLE_GREEN_SIZE         0x80DB\n#define GL_COLOR_TABLE_BLUE_SIZE          0x80DC\n#define GL_COLOR_TABLE_ALPHA_SIZE         0x80DD\n#define GL_COLOR_TABLE_LUMINANCE_SIZE     0x80DE\n#define GL_COLOR_TABLE_INTENSITY_SIZE     0x80DF\n#define GL_BGR                            0x80E0\n#define GL_BGRA                           0x80E1\n#define GL_MAX_ELEMENTS_VERTICES          0x80E8\n#define GL_MAX_ELEMENTS_INDICES           0x80E9\n#define GL_CLAMP_TO_EDGE                  0x812F\n#define GL_TEXTURE_MIN_LOD                0x813A\n#define GL_TEXTURE_MAX_LOD                0x813B\n#define GL_TEXTURE_BASE_LEVEL             0x813C\n#define GL_TEXTURE_MAX_LEVEL              0x813D\n#define GL_IGNORE_BORDER                  0x8150\n#define GL_CONSTANT_BORDER                0x8151\n#define GL_WRAP_BORDER                    0x8152\n#define GL_REPLICATE_BORDER               0x8153\n#define GL_CONVOLUTION_BORDER_COLOR       0x8154\n#define GL_LIGHT_MODEL_COLOR_CONTROL      0x81F8\n#define GL_SINGLE_COLOR                   0x81F9\n#define GL_SEPARATE_SPECULAR_COLOR        0x81FA\n#define GL_SMOOTH_POINT_SIZE_RANGE        0x0B12\n#define GL_SMOOTH_POINT_SIZE_GRANULARITY  0x0B13\n#define GL_SMOOTH_LINE_WIDTH_RANGE        0x0B22\n#define GL_SMOOTH_LINE_WIDTH_GRANULARITY  0x0B23\n#define GL_ALIASED_POINT_SIZE_RANGE       0x846D\n#define GL_ALIASED_LINE_WIDTH_RANGE       0x846E\n#endif\n\n#ifndef GL_VERSION_1_3\n#define GL_TEXTURE0                       0x84C0\n#define GL_TEXTURE1                       0x84C1\n#define GL_TEXTURE2                       0x84C2\n#define GL_TEXTURE3                       0x84C3\n#define GL_TEXTURE4                       0x84C4\n#define GL_TEXTURE5                       0x84C5\n#define GL_TEXTURE6                       0x84C6\n#define GL_TEXTURE7                       0x84C7\n#define GL_TEXTURE8                       0x84C8\n#define GL_TEXTURE9                       0x84C9\n#define GL_TEXTURE10                      0x84CA\n#define GL_TEXTURE11                      0x84CB\n#define GL_TEXTURE12                      0x84CC\n#define GL_TEXTURE13                      0x84CD\n#define GL_TEXTURE14                      0x84CE\n#define GL_TEXTURE15                      0x84CF\n#define GL_TEXTURE16                      0x84D0\n#define GL_TEXTURE17                      0x84D1\n#define GL_TEXTURE18                      0x84D2\n#define GL_TEXTURE19                      0x84D3\n#define GL_TEXTURE20                      0x84D4\n#define GL_TEXTURE21                      0x84D5\n#define GL_TEXTURE22                      0x84D6\n#define GL_TEXTURE23                      0x84D7\n#define GL_TEXTURE24                      0x84D8\n#define GL_TEXTURE25                      0x84D9\n#define GL_TEXTURE26                      0x84DA\n#define GL_TEXTURE27                      0x84DB\n#define GL_TEXTURE28                      0x84DC\n#define GL_TEXTURE29                      0x84DD\n#define GL_TEXTURE30                      0x84DE\n#define GL_TEXTURE31                      0x84DF\n#define GL_ACTIVE_TEXTURE                 0x84E0\n#define GL_CLIENT_ACTIVE_TEXTURE          0x84E1\n#define GL_MAX_TEXTURE_UNITS              0x84E2\n#define GL_TRANSPOSE_MODELVIEW_MATRIX     0x84E3\n#define GL_TRANSPOSE_PROJECTION_MATRIX    0x84E4\n#define GL_TRANSPOSE_TEXTURE_MATRIX       0x84E5\n#define GL_TRANSPOSE_COLOR_MATRIX         0x84E6\n#define GL_MULTISAMPLE                    0x809D\n#define GL_SAMPLE_ALPHA_TO_COVERAGE       0x809E\n#define GL_SAMPLE_ALPHA_TO_ONE            0x809F\n#define GL_SAMPLE_COVERAGE                0x80A0\n#define GL_SAMPLE_BUFFERS                 0x80A8\n#define GL_SAMPLES                        0x80A9\n#define GL_SAMPLE_COVERAGE_VALUE          0x80AA\n#define GL_SAMPLE_COVERAGE_INVERT         0x80AB\n#define GL_MULTISAMPLE_BIT                0x20000000\n#define GL_NORMAL_MAP                     0x8511\n#define GL_REFLECTION_MAP                 0x8512\n#define GL_TEXTURE_CUBE_MAP               0x8513\n#define GL_TEXTURE_BINDING_CUBE_MAP       0x8514\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_X    0x8515\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X    0x8516\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y    0x8517\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y    0x8518\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z    0x8519\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z    0x851A\n#define GL_PROXY_TEXTURE_CUBE_MAP         0x851B\n#define GL_MAX_CUBE_MAP_TEXTURE_SIZE      0x851C\n#define GL_COMPRESSED_ALPHA               0x84E9\n#define GL_COMPRESSED_LUMINANCE           0x84EA\n#define GL_COMPRESSED_LUMINANCE_ALPHA     0x84EB\n#define GL_COMPRESSED_INTENSITY           0x84EC\n#define GL_COMPRESSED_RGB                 0x84ED\n#define GL_COMPRESSED_RGBA                0x84EE\n#define GL_TEXTURE_COMPRESSION_HINT       0x84EF\n#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE  0x86A0\n#define GL_TEXTURE_COMPRESSED             0x86A1\n#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2\n#define GL_COMPRESSED_TEXTURE_FORMATS     0x86A3\n#define GL_CLAMP_TO_BORDER                0x812D\n#define GL_CLAMP_TO_BORDER_SGIS           0x812D\n#define GL_COMBINE                        0x8570\n#define GL_COMBINE_RGB                    0x8571\n#define GL_COMBINE_ALPHA                  0x8572\n#define GL_SOURCE0_RGB                    0x8580\n#define GL_SOURCE1_RGB                    0x8581\n#define GL_SOURCE2_RGB                    0x8582\n#define GL_SOURCE0_ALPHA                  0x8588\n#define GL_SOURCE1_ALPHA                  0x8589\n#define GL_SOURCE2_ALPHA                  0x858A\n#define GL_OPERAND0_RGB                   0x8590\n#define GL_OPERAND1_RGB                   0x8591\n#define GL_OPERAND2_RGB                   0x8592\n#define GL_OPERAND0_ALPHA                 0x8598\n#define GL_OPERAND1_ALPHA                 0x8599\n#define GL_OPERAND2_ALPHA                 0x859A\n#define GL_RGB_SCALE                      0x8573\n#define GL_ADD_SIGNED                     0x8574\n#define GL_INTERPOLATE                    0x8575\n#define GL_SUBTRACT                       0x84E7\n#define GL_CONSTANT                       0x8576\n#define GL_PRIMARY_COLOR                  0x8577\n#define GL_PREVIOUS                       0x8578\n#define GL_DOT3_RGB                       0x86AE\n#define GL_DOT3_RGBA                      0x86AF\n#endif\n\n#ifndef GL_ARB_multitexture\n#define GL_TEXTURE0_ARB                   0x84C0\n#define GL_TEXTURE1_ARB                   0x84C1\n#define GL_TEXTURE2_ARB                   0x84C2\n#define GL_TEXTURE3_ARB                   0x84C3\n#define GL_TEXTURE4_ARB                   0x84C4\n#define GL_TEXTURE5_ARB                   0x84C5\n#define GL_TEXTURE6_ARB                   0x84C6\n#define GL_TEXTURE7_ARB                   0x84C7\n#define GL_TEXTURE8_ARB                   0x84C8\n#define GL_TEXTURE9_ARB                   0x84C9\n#define GL_TEXTURE10_ARB                  0x84CA\n#define GL_TEXTURE11_ARB                  0x84CB\n#define GL_TEXTURE12_ARB                  0x84CC\n#define GL_TEXTURE13_ARB                  0x84CD\n#define GL_TEXTURE14_ARB                  0x84CE\n#define GL_TEXTURE15_ARB                  0x84CF\n#define GL_TEXTURE16_ARB                  0x84D0\n#define GL_TEXTURE17_ARB                  0x84D1\n#define GL_TEXTURE18_ARB                  0x84D2\n#define GL_TEXTURE19_ARB                  0x84D3\n#define GL_TEXTURE20_ARB                  0x84D4\n#define GL_TEXTURE21_ARB                  0x84D5\n#define GL_TEXTURE22_ARB                  0x84D6\n#define GL_TEXTURE23_ARB                  0x84D7\n#define GL_TEXTURE24_ARB                  0x84D8\n#define GL_TEXTURE25_ARB                  0x84D9\n#define GL_TEXTURE26_ARB                  0x84DA\n#define GL_TEXTURE27_ARB                  0x84DB\n#define GL_TEXTURE28_ARB                  0x84DC\n#define GL_TEXTURE29_ARB                  0x84DD\n#define GL_TEXTURE30_ARB                  0x84DE\n#define GL_TEXTURE31_ARB                  0x84DF\n#define GL_ACTIVE_TEXTURE_ARB             0x84E0\n#define GL_CLIENT_ACTIVE_TEXTURE_ARB      0x84E1\n#define GL_MAX_TEXTURE_UNITS_ARB          0x84E2\n#endif\n\n#ifndef GL_ARB_transpose_matrix\n#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3\n#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4\n#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB   0x84E5\n#define GL_TRANSPOSE_COLOR_MATRIX_ARB     0x84E6\n#endif\n\n#ifndef GL_ARB_multisample\n#define GL_MULTISAMPLE_ARB                0x809D\n#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB   0x809E\n#define GL_SAMPLE_ALPHA_TO_ONE_ARB        0x809F\n#define GL_SAMPLE_COVERAGE_ARB            0x80A0\n#define GL_SAMPLE_BUFFERS_ARB             0x80A8\n#define GL_SAMPLES_ARB                    0x80A9\n#define GL_SAMPLE_COVERAGE_VALUE_ARB      0x80AA\n#define GL_SAMPLE_COVERAGE_INVERT_ARB     0x80AB\n#define GL_MULTISAMPLE_BIT_ARB            0x20000000\n#endif\n\n#ifndef GL_ARB_texture_env_add\n#endif\n\n#ifndef GL_ARB_texture_cube_map\n#define GL_NORMAL_MAP_ARB                 0x8511\n#define GL_REFLECTION_MAP_ARB             0x8512\n#define GL_TEXTURE_CUBE_MAP_ARB           0x8513\n#define GL_TEXTURE_BINDING_CUBE_MAP_ARB   0x8514\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A\n#define GL_PROXY_TEXTURE_CUBE_MAP_ARB     0x851B\n#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB  0x851C\n#endif\n\n#ifndef GL_ARB_texture_compression\n#define GL_COMPRESSED_ALPHA_ARB           0x84E9\n#define GL_COMPRESSED_LUMINANCE_ARB       0x84EA\n#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB\n#define GL_COMPRESSED_INTENSITY_ARB       0x84EC\n#define GL_COMPRESSED_RGB_ARB             0x84ED\n#define GL_COMPRESSED_RGBA_ARB            0x84EE\n#define GL_TEXTURE_COMPRESSION_HINT_ARB   0x84EF\n#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0\n#define GL_TEXTURE_COMPRESSED_ARB         0x86A1\n#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2\n#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3\n#endif\n\n#ifndef GL_ARB_texture_border_clamp\n#define GL_CLAMP_TO_BORDER_ARB            0x812D\n#endif\n\n#ifndef GL_ARB_point_parameters\n#define GL_POINT_SIZE_MIN_ARB             0x8126\n#define GL_POINT_SIZE_MIN_EXT             0x8126\n#define GL_POINT_SIZE_MIN_SGIS            0x8126\n#define GL_POINT_SIZE_MAX_ARB             0x8127\n#define GL_POINT_SIZE_MAX_EXT             0x8127\n#define GL_POINT_SIZE_MAX_SGIS            0x8127\n#define GL_POINT_FADE_THRESHOLD_SIZE_ARB  0x8128\n#define GL_POINT_FADE_THRESHOLD_SIZE_EXT  0x8128\n#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128\n#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129\n#define GL_DISTANCE_ATTENUATION_EXT       0x8129\n#define GL_DISTANCE_ATTENUATION_SGIS      0x8129\n#endif\n\n#ifndef GL_ARB_vertex_blend\n#define GL_MAX_VERTEX_UNITS_ARB           0x86A4\n#define GL_ACTIVE_VERTEX_UNITS_ARB        0x86A5\n#define GL_WEIGHT_SUM_UNITY_ARB           0x86A6\n#define GL_VERTEX_BLEND_ARB               0x86A7\n#define GL_CURRENT_WEIGHT_ARB             0x86A8\n#define GL_WEIGHT_ARRAY_TYPE_ARB          0x86A9\n#define GL_WEIGHT_ARRAY_STRIDE_ARB        0x86AA\n#define GL_WEIGHT_ARRAY_SIZE_ARB          0x86AB\n#define GL_WEIGHT_ARRAY_POINTER_ARB       0x86AC\n#define GL_WEIGHT_ARRAY_ARB               0x86AD\n#define GL_MODELVIEW0_ARB                 0x1700\n#define GL_MODELVIEW1_ARB                 0x850A\n#define GL_MODELVIEW2_ARB                 0x8722\n#define GL_MODELVIEW3_ARB                 0x8723\n#define GL_MODELVIEW4_ARB                 0x8724\n#define GL_MODELVIEW5_ARB                 0x8725\n#define GL_MODELVIEW6_ARB                 0x8726\n#define GL_MODELVIEW7_ARB                 0x8727\n#define GL_MODELVIEW8_ARB                 0x8728\n#define GL_MODELVIEW9_ARB                 0x8729\n#define GL_MODELVIEW10_ARB                0x872A\n#define GL_MODELVIEW11_ARB                0x872B\n#define GL_MODELVIEW12_ARB                0x872C\n#define GL_MODELVIEW13_ARB                0x872D\n#define GL_MODELVIEW14_ARB                0x872E\n#define GL_MODELVIEW15_ARB                0x872F\n#define GL_MODELVIEW16_ARB                0x8730\n#define GL_MODELVIEW17_ARB                0x8731\n#define GL_MODELVIEW18_ARB                0x8732\n#define GL_MODELVIEW19_ARB                0x8733\n#define GL_MODELVIEW20_ARB                0x8734\n#define GL_MODELVIEW21_ARB                0x8735\n#define GL_MODELVIEW22_ARB                0x8736\n#define GL_MODELVIEW23_ARB                0x8737\n#define GL_MODELVIEW24_ARB                0x8738\n#define GL_MODELVIEW25_ARB                0x8739\n#define GL_MODELVIEW26_ARB                0x873A\n#define GL_MODELVIEW27_ARB                0x873B\n#define GL_MODELVIEW28_ARB                0x873C\n#define GL_MODELVIEW29_ARB                0x873D\n#define GL_MODELVIEW30_ARB                0x873E\n#define GL_MODELVIEW31_ARB                0x873F\n#endif\n\n#ifndef GL_ARB_matrix_palette\n#define GL_MATRIX_PALETTE_ARB             0x8840\n#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841\n#define GL_MAX_PALETTE_MATRICES_ARB       0x8842\n#define GL_CURRENT_PALETTE_MATRIX_ARB     0x8843\n#define GL_MATRIX_INDEX_ARRAY_ARB         0x8844\n#define GL_CURRENT_MATRIX_INDEX_ARB       0x8845\n#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB    0x8846\n#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB    0x8847\n#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB  0x8848\n#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849\n#endif\n\n#ifndef GL_ARB_texture_env_combine\n#define GL_COMBINE_ARB                    0x8570\n#define GL_COMBINE_RGB_ARB                0x8571\n#define GL_COMBINE_ALPHA_ARB              0x8572\n#define GL_SOURCE0_RGB_ARB                0x8580\n#define GL_SOURCE1_RGB_ARB                0x8581\n#define GL_SOURCE2_RGB_ARB                0x8582\n#define GL_SOURCE0_ALPHA_ARB              0x8588\n#define GL_SOURCE1_ALPHA_ARB              0x8589\n#define GL_SOURCE2_ALPHA_ARB              0x858A\n#define GL_OPERAND0_RGB_ARB               0x8590\n#define GL_OPERAND1_RGB_ARB               0x8591\n#define GL_OPERAND2_RGB_ARB               0x8592\n#define GL_OPERAND0_ALPHA_ARB             0x8598\n#define GL_OPERAND1_ALPHA_ARB             0x8599\n#define GL_OPERAND2_ALPHA_ARB             0x859A\n#define GL_RGB_SCALE_ARB                  0x8573\n#define GL_ADD_SIGNED_ARB                 0x8574\n#define GL_INTERPOLATE_ARB                0x8575\n#define GL_SUBTRACT_ARB                   0x84E7\n#define GL_CONSTANT_ARB                   0x8576\n#define GL_PRIMARY_COLOR_ARB              0x8577\n#define GL_PREVIOUS_ARB                   0x8578\n#endif\n\n#ifndef GL_ARB_texture_env_crossbar\n#endif\n\n#ifndef GL_ARB_texture_env_dot3\n#define GL_DOT3_RGB_ARB                   0x86AE\n#define GL_DOT3_RGB_EXT                   0x86AE\n#define GL_DOT3_RGBA_ARB                  0x86AF\n#define GL_DOT3_RGBA_EXT                  0x86AF\n#endif\n\n#ifndef GL_ARB_texture_mirrored_repeat\n#define GL_MIRRORED_REPEAT_ARB            0x8370\n#endif\n\n#ifndef GL_ARB_depth_texture\n#define GL_DEPTH_COMPONENT16_ARB          0x81A5\n#define GL_DEPTH_COMPONENT24_ARB          0x81A6\n#define GL_DEPTH_COMPONENT32_ARB          0x81A7\n#define GL_TEXTURE_DEPTH_SIZE_ARB         0x884A\n#define GL_DEPTH_TEXTURE_MODE_ARB         0x884B\n#endif\n\n#ifndef GL_ARB_shadow\n#define GL_TEXTURE_COMPARE_MODE_ARB       0x884C\n#define GL_TEXTURE_COMPARE_FUNC_ARB       0x884D\n#define GL_COMPARE_R_TO_TEXTURE_ARB       0x884E\n#endif\n\n#ifndef GL_ARB_shadow_ambient\n#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF\n#endif\n\n#ifndef GL_ARB_window_pos\n#endif\n\n#ifndef GL_EXT_abgr\n#define GL_ABGR_EXT                       0x8000\n#endif\n\n#ifndef GL_EXT_blend_color\n#define GL_CONSTANT_COLOR_EXT             0x8001\n#define GL_ONE_MINUS_CONSTANT_COLOR_EXT   0x8002\n#define GL_CONSTANT_ALPHA_EXT             0x8003\n#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT   0x8004\n#define GL_BLEND_COLOR_EXT                0x8005\n#endif\n\n#ifndef GL_EXT_polygon_offset\n#define GL_POLYGON_OFFSET_EXT             0x8037\n#define GL_POLYGON_OFFSET_FACTOR_EXT      0x8038\n#define GL_POLYGON_OFFSET_BIAS_EXT        0x8039\n#endif\n\n#ifndef GL_EXT_texture\n#define GL_ALPHA4_EXT                     0x803B\n#define GL_ALPHA8_EXT                     0x803C\n#define GL_ALPHA12_EXT                    0x803D\n#define GL_ALPHA16_EXT                    0x803E\n#define GL_LUMINANCE4_EXT                 0x803F\n#define GL_LUMINANCE8_EXT                 0x8040\n#define GL_LUMINANCE12_EXT                0x8041\n#define GL_LUMINANCE16_EXT                0x8042\n#define GL_LUMINANCE4_ALPHA4_EXT          0x8043\n#define GL_LUMINANCE6_ALPHA2_EXT          0x8044\n#define GL_LUMINANCE8_ALPHA8_EXT          0x8045\n#define GL_LUMINANCE12_ALPHA4_EXT         0x8046\n#define GL_LUMINANCE12_ALPHA12_EXT        0x8047\n#define GL_LUMINANCE16_ALPHA16_EXT        0x8048\n#define GL_INTENSITY_EXT                  0x8049\n#define GL_INTENSITY4_EXT                 0x804A\n#define GL_INTENSITY8_EXT                 0x804B\n#define GL_INTENSITY12_EXT                0x804C\n#define GL_INTENSITY16_EXT                0x804D\n#define GL_RGB2_EXT                       0x804E\n#define GL_RGB4_EXT                       0x804F\n#define GL_RGB5_EXT                       0x8050\n#define GL_RGB8_EXT                       0x8051\n#define GL_RGB10_EXT                      0x8052\n#define GL_RGB12_EXT                      0x8053\n#define GL_RGB16_EXT                      0x8054\n#define GL_RGBA2_EXT                      0x8055\n#define GL_RGBA4_EXT                      0x8056\n#define GL_RGB5_A1_EXT                    0x8057\n#define GL_RGBA8_EXT                      0x8058\n#define GL_RGB10_A2_EXT                   0x8059\n#define GL_RGBA12_EXT                     0x805A\n#define GL_RGBA16_EXT                     0x805B\n#define GL_TEXTURE_RED_SIZE_EXT           0x805C\n#define GL_TEXTURE_GREEN_SIZE_EXT         0x805D\n#define GL_TEXTURE_BLUE_SIZE_EXT          0x805E\n#define GL_TEXTURE_ALPHA_SIZE_EXT         0x805F\n#define GL_TEXTURE_LUMINANCE_SIZE_EXT     0x8060\n#define GL_TEXTURE_INTENSITY_SIZE_EXT     0x8061\n#define GL_REPLACE_EXT                    0x8062\n#define GL_PROXY_TEXTURE_1D_EXT           0x8063\n#define GL_PROXY_TEXTURE_2D_EXT           0x8064\n#define GL_TEXTURE_TOO_LARGE_EXT          0x8065\n#endif\n\n#ifndef GL_EXT_texture3D\n#define GL_PACK_SKIP_IMAGES               0x806B\n#define GL_PACK_SKIP_IMAGES_EXT           0x806B\n#define GL_PACK_IMAGE_HEIGHT              0x806C\n#define GL_PACK_IMAGE_HEIGHT_EXT          0x806C\n#define GL_UNPACK_SKIP_IMAGES             0x806D\n#define GL_UNPACK_SKIP_IMAGES_EXT         0x806D\n#define GL_UNPACK_IMAGE_HEIGHT            0x806E\n#define GL_UNPACK_IMAGE_HEIGHT_EXT        0x806E\n#define GL_TEXTURE_3D                     0x806F\n#define GL_TEXTURE_3D_EXT                 0x806F\n#define GL_PROXY_TEXTURE_3D               0x8070\n#define GL_PROXY_TEXTURE_3D_EXT           0x8070\n#define GL_TEXTURE_DEPTH                  0x8071\n#define GL_TEXTURE_DEPTH_EXT              0x8071\n#define GL_TEXTURE_WRAP_R                 0x8072\n#define GL_TEXTURE_WRAP_R_EXT             0x8072\n#define GL_MAX_3D_TEXTURE_SIZE            0x8073\n#define GL_MAX_3D_TEXTURE_SIZE_EXT        0x8073\n#endif\n\n#ifndef GL_SGIS_texture_filter4\n#define GL_FILTER4_SGIS                   0x8146\n#define GL_TEXTURE_FILTER4_SIZE_SGIS      0x8147\n#endif\n\n#ifndef GL_EXT_subtexture\n#endif\n\n#ifndef GL_EXT_copy_texture\n#endif\n\n#ifndef GL_EXT_histogram\n#define GL_HISTOGRAM_EXT                  0x8024\n#define GL_PROXY_HISTOGRAM_EXT            0x8025\n#define GL_HISTOGRAM_WIDTH_EXT            0x8026\n#define GL_HISTOGRAM_FORMAT_EXT           0x8027\n#define GL_HISTOGRAM_RED_SIZE_EXT         0x8028\n#define GL_HISTOGRAM_GREEN_SIZE_EXT       0x8029\n#define GL_HISTOGRAM_BLUE_SIZE_EXT        0x802A\n#define GL_HISTOGRAM_ALPHA_SIZE_EXT       0x802B\n#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT   0x802C\n#define GL_HISTOGRAM_SINK_EXT             0x802D\n#define GL_MINMAX_EXT                     0x802E\n#define GL_MINMAX_FORMAT_EXT              0x802F\n#define GL_MINMAX_SINK_EXT                0x8030\n#define GL_TABLE_TOO_LARGE_EXT            0x8031\n#endif\n\n#ifndef GL_EXT_convolution\n#define GL_CONVOLUTION_1D_EXT             0x8010\n#define GL_CONVOLUTION_2D_EXT             0x8011\n#define GL_SEPARABLE_2D_EXT               0x8012\n#define GL_CONVOLUTION_BORDER_MODE_EXT    0x8013\n#define GL_CONVOLUTION_FILTER_SCALE_EXT   0x8014\n#define GL_CONVOLUTION_FILTER_BIAS_EXT    0x8015\n#define GL_REDUCE_EXT                     0x8016\n#define GL_CONVOLUTION_FORMAT_EXT         0x8017\n#define GL_CONVOLUTION_WIDTH_EXT          0x8018\n#define GL_CONVOLUTION_HEIGHT_EXT         0x8019\n#define GL_MAX_CONVOLUTION_WIDTH_EXT      0x801A\n#define GL_MAX_CONVOLUTION_HEIGHT_EXT     0x801B\n#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C\n#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D\n#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E\n#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F\n#define GL_POST_CONVOLUTION_RED_BIAS_EXT  0x8020\n#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021\n#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022\n#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023\n#endif\n\n#ifndef GL_SGI_color_matrix\n#define GL_COLOR_MATRIX_SGI               0x80B1\n#define GL_COLOR_MATRIX_STACK_DEPTH_SGI   0x80B2\n#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3\n#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4\n#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5\n#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6\n#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7\n#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8\n#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9\n#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA\n#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB\n#endif\n\n#ifndef GL_SGI_color_table\n#define GL_COLOR_TABLE_SGI                0x80D0\n#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1\n#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2\n#define GL_PROXY_COLOR_TABLE_SGI          0x80D3\n#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4\n#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5\n#define GL_COLOR_TABLE_SCALE_SGI          0x80D6\n#define GL_COLOR_TABLE_BIAS_SGI           0x80D7\n#define GL_COLOR_TABLE_FORMAT_SGI         0x80D8\n#define GL_COLOR_TABLE_WIDTH_SGI          0x80D9\n#define GL_COLOR_TABLE_RED_SIZE_SGI       0x80DA\n#define GL_COLOR_TABLE_GREEN_SIZE_SGI     0x80DB\n#define GL_COLOR_TABLE_BLUE_SIZE_SGI      0x80DC\n#define GL_COLOR_TABLE_ALPHA_SIZE_SGI     0x80DD\n#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE\n#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF\n#endif\n\n#ifndef GL_SGIS_pixel_texture\n#define GL_PIXEL_TEXTURE_SGIS             0x8353\n#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354\n#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355\n#define GL_PIXEL_GROUP_COLOR_SGIS         0x8356\n#endif\n\n#ifndef GL_SGIX_pixel_texture\n#define GL_PIXEL_TEX_GEN_SGIX             0x8139\n#define GL_PIXEL_TEX_GEN_MODE_SGIX        0x832B\n#endif\n\n#ifndef GL_SGIS_texture4D\n#define GL_PACK_SKIP_VOLUMES_SGIS         0x8130\n#define GL_PACK_IMAGE_DEPTH_SGIS          0x8131\n#define GL_UNPACK_SKIP_VOLUMES_SGIS       0x8132\n#define GL_UNPACK_IMAGE_DEPTH_SGIS        0x8133\n#define GL_TEXTURE_4D_SGIS                0x8134\n#define GL_PROXY_TEXTURE_4D_SGIS          0x8135\n#define GL_TEXTURE_4DSIZE_SGIS            0x8136\n#define GL_TEXTURE_WRAP_Q_SGIS            0x8137\n#define GL_MAX_4D_TEXTURE_SIZE_SGIS       0x8138\n#define GL_TEXTURE_4D_BINDING_SGIS        0x814F\n#endif\n\n#ifndef GL_SGI_texture_color_table\n#define GL_TEXTURE_COLOR_TABLE_SGI        0x80BC\n#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI  0x80BD\n#endif\n\n#ifndef GL_EXT_cmyka\n#define GL_CMYK_EXT                       0x800C\n#define GL_CMYKA_EXT                      0x800D\n#define GL_PACK_CMYK_HINT_EXT             0x800E\n#define GL_UNPACK_CMYK_HINT_EXT           0x800F\n#endif\n\n#ifndef GL_EXT_texture_object\n#define GL_TEXTURE_PRIORITY_EXT           0x8066\n#define GL_TEXTURE_RESIDENT_EXT           0x8067\n#define GL_TEXTURE_1D_BINDING_EXT         0x8068\n#define GL_TEXTURE_2D_BINDING_EXT         0x8069\n#define GL_TEXTURE_3D_BINDING_EXT         0x806A\n#endif\n\n#ifndef GL_SGIS_detail_texture\n#define GL_DETAIL_TEXTURE_2D_SGIS         0x8095\n#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096\n#define GL_LINEAR_DETAIL_SGIS             0x8097\n#define GL_LINEAR_DETAIL_ALPHA_SGIS       0x8098\n#define GL_LINEAR_DETAIL_COLOR_SGIS       0x8099\n#define GL_DETAIL_TEXTURE_LEVEL_SGIS      0x809A\n#define GL_DETAIL_TEXTURE_MODE_SGIS       0x809B\n#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C\n#endif\n\n#ifndef GL_SGIS_sharpen_texture\n#define GL_LINEAR_SHARPEN_SGIS            0x80AD\n#define GL_LINEAR_SHARPEN_ALPHA_SGIS      0x80AE\n#define GL_LINEAR_SHARPEN_COLOR_SGIS      0x80AF\n#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0\n#endif\n\n#ifndef GL_EXT_packed_pixels\n#define GL_UNSIGNED_BYTE_3_3_2_EXT        0x8032\n#define GL_UNSIGNED_SHORT_4_4_4_4_EXT     0x8033\n#define GL_UNSIGNED_SHORT_5_5_5_1_EXT     0x8034\n#define GL_UNSIGNED_INT_8_8_8_8_EXT       0x8035\n#define GL_UNSIGNED_INT_10_10_10_2_EXT    0x8036\n#endif\n\n#ifndef GL_SGIS_texture_lod\n#define GL_TEXTURE_MIN_LOD_SGIS           0x813A\n#define GL_TEXTURE_MAX_LOD_SGIS           0x813B\n#define GL_TEXTURE_BASE_LEVEL_SGIS        0x813C\n#define GL_TEXTURE_MAX_LEVEL_SGIS         0x813D\n#endif\n\n#ifndef GL_SGIS_multisample\n#define GL_MULTISAMPLE_SGIS               0x809D\n#define GL_SAMPLE_ALPHA_TO_MASK_SGIS      0x809E\n#define GL_SAMPLE_ALPHA_TO_ONE_SGIS       0x809F\n#define GL_SAMPLE_MASK_SGIS               0x80A0\n#define GL_1PASS_SGIS                     0x80A1\n#define GL_2PASS_0_SGIS                   0x80A2\n#define GL_2PASS_1_SGIS                   0x80A3\n#define GL_4PASS_0_SGIS                   0x80A4\n#define GL_4PASS_1_SGIS                   0x80A5\n#define GL_4PASS_2_SGIS                   0x80A6\n#define GL_4PASS_3_SGIS                   0x80A7\n#define GL_SAMPLE_BUFFERS_SGIS            0x80A8\n#define GL_SAMPLES_SGIS                   0x80A9\n#define GL_SAMPLE_MASK_VALUE_SGIS         0x80AA\n#define GL_SAMPLE_MASK_INVERT_SGIS        0x80AB\n#define GL_SAMPLE_PATTERN_SGIS            0x80AC\n#endif\n\n#ifndef GL_EXT_rescale_normal\n#define GL_RESCALE_NORMAL_EXT             0x803A\n#endif\n\n#ifndef GL_EXT_vertex_array\n#define GL_VERTEX_ARRAY_EXT               0x8074\n#define GL_NORMAL_ARRAY_EXT               0x8075\n#define GL_COLOR_ARRAY_EXT                0x8076\n#define GL_INDEX_ARRAY_EXT                0x8077\n#define GL_TEXTURE_COORD_ARRAY_EXT        0x8078\n#define GL_EDGE_FLAG_ARRAY_EXT            0x8079\n#define GL_VERTEX_ARRAY_SIZE_EXT          0x807A\n#define GL_VERTEX_ARRAY_TYPE_EXT          0x807B\n#define GL_VERTEX_ARRAY_STRIDE_EXT        0x807C\n#define GL_VERTEX_ARRAY_COUNT_EXT         0x807D\n#define GL_NORMAL_ARRAY_TYPE_EXT          0x807E\n#define GL_NORMAL_ARRAY_STRIDE_EXT        0x807F\n#define GL_NORMAL_ARRAY_COUNT_EXT         0x8080\n#define GL_COLOR_ARRAY_SIZE_EXT           0x8081\n#define GL_COLOR_ARRAY_TYPE_EXT           0x8082\n#define GL_COLOR_ARRAY_STRIDE_EXT         0x8083\n#define GL_COLOR_ARRAY_COUNT_EXT          0x8084\n#define GL_INDEX_ARRAY_TYPE_EXT           0x8085\n#define GL_INDEX_ARRAY_STRIDE_EXT         0x8086\n#define GL_INDEX_ARRAY_COUNT_EXT          0x8087\n#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT   0x8088\n#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT   0x8089\n#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A\n#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT  0x808B\n#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT     0x808C\n#define GL_EDGE_FLAG_ARRAY_COUNT_EXT      0x808D\n#define GL_VERTEX_ARRAY_POINTER_EXT       0x808E\n#define GL_NORMAL_ARRAY_POINTER_EXT       0x808F\n#define GL_COLOR_ARRAY_POINTER_EXT        0x8090\n#define GL_INDEX_ARRAY_POINTER_EXT        0x8091\n#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092\n#define GL_EDGE_FLAG_ARRAY_POINTER_EXT    0x8093\n#endif\n\n#ifndef GL_EXT_misc_attribute\n#endif\n\n#ifndef GL_SGIS_generate_mipmap\n#define GL_GENERATE_MIPMAP_SGIS           0x8191\n#define GL_GENERATE_MIPMAP_HINT_SGIS      0x8192\n#endif\n\n#ifndef GL_SGIX_clipmap\n#define GL_LINEAR_CLIPMAP_LINEAR_SGIX     0x8170\n#define GL_TEXTURE_CLIPMAP_CENTER_SGIX    0x8171\n#define GL_TEXTURE_CLIPMAP_FRAME_SGIX     0x8172\n#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX    0x8173\n#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174\n#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175\n#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX     0x8176\n#define GL_MAX_CLIPMAP_DEPTH_SGIX         0x8177\n#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178\n#define GL_NEAREST_CLIPMAP_NEAREST_SGIX   0x844D\n#define GL_NEAREST_CLIPMAP_LINEAR_SGIX    0x844E\n#define GL_LINEAR_CLIPMAP_NEAREST_SGIX    0x844F\n#endif\n\n#ifndef GL_SGIX_shadow\n#define GL_TEXTURE_COMPARE_SGIX           0x819A\n#define GL_TEXTURE_COMPARE_OPERATOR_SGIX  0x819B\n#define GL_TEXTURE_LEQUAL_R_SGIX          0x819C\n#define GL_TEXTURE_GEQUAL_R_SGIX          0x819D\n#endif\n\n#ifndef GL_SGIS_texture_edge_clamp\n#define GL_CLAMP_TO_EDGE_SGIS             0x812F\n#endif\n\n#ifndef GL_EXT_blend_minmax\n#define GL_FUNC_ADD_EXT                   0x8006\n#define GL_MIN_EXT                        0x8007\n#define GL_MAX_EXT                        0x8008\n#define GL_BLEND_EQUATION_EXT             0x8009\n#endif\n\n#ifndef GL_EXT_blend_subtract\n#define GL_FUNC_SUBTRACT_EXT              0x800A\n#define GL_FUNC_REVERSE_SUBTRACT_EXT      0x800B\n#endif\n\n#ifndef GL_EXT_blend_logic_op\n#endif\n\n#ifndef GL_SGIX_interlace\n#define GL_INTERLACE_SGIX                 0x8094\n#endif\n\n#ifndef GL_SGIX_pixel_tiles\n#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E\n#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F\n#define GL_PIXEL_TILE_WIDTH_SGIX          0x8140\n#define GL_PIXEL_TILE_HEIGHT_SGIX         0x8141\n#define GL_PIXEL_TILE_GRID_WIDTH_SGIX     0x8142\n#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX    0x8143\n#define GL_PIXEL_TILE_GRID_DEPTH_SGIX     0x8144\n#define GL_PIXEL_TILE_CACHE_SIZE_SGIX     0x8145\n#endif\n\n#ifndef GL_SGIS_texture_select\n#define GL_DUAL_ALPHA4_SGIS               0x8110\n#define GL_DUAL_ALPHA8_SGIS               0x8111\n#define GL_DUAL_ALPHA12_SGIS              0x8112\n#define GL_DUAL_ALPHA16_SGIS              0x8113\n#define GL_DUAL_LUMINANCE4_SGIS           0x8114\n#define GL_DUAL_LUMINANCE8_SGIS           0x8115\n#define GL_DUAL_LUMINANCE12_SGIS          0x8116\n#define GL_DUAL_LUMINANCE16_SGIS          0x8117\n#define GL_DUAL_INTENSITY4_SGIS           0x8118\n#define GL_DUAL_INTENSITY8_SGIS           0x8119\n#define GL_DUAL_INTENSITY12_SGIS          0x811A\n#define GL_DUAL_INTENSITY16_SGIS          0x811B\n#define GL_DUAL_LUMINANCE_ALPHA4_SGIS     0x811C\n#define GL_DUAL_LUMINANCE_ALPHA8_SGIS     0x811D\n#define GL_QUAD_ALPHA4_SGIS               0x811E\n#define GL_QUAD_ALPHA8_SGIS               0x811F\n#define GL_QUAD_LUMINANCE4_SGIS           0x8120\n#define GL_QUAD_LUMINANCE8_SGIS           0x8121\n#define GL_QUAD_INTENSITY4_SGIS           0x8122\n#define GL_QUAD_INTENSITY8_SGIS           0x8123\n#define GL_DUAL_TEXTURE_SELECT_SGIS       0x8124\n#define GL_QUAD_TEXTURE_SELECT_SGIS       0x8125\n#endif\n\n#ifndef GL_SGIX_sprite\n#define GL_SPRITE_SGIX                    0x8148\n#define GL_SPRITE_MODE_SGIX               0x8149\n#define GL_SPRITE_AXIS_SGIX               0x814A\n#define GL_SPRITE_TRANSLATION_SGIX        0x814B\n#define GL_SPRITE_AXIAL_SGIX              0x814C\n#define GL_SPRITE_OBJECT_ALIGNED_SGIX     0x814D\n#define GL_SPRITE_EYE_ALIGNED_SGIX        0x814E\n#endif\n\n#ifndef GL_SGIX_texture_multi_buffer\n#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E\n#endif\n\n#ifndef GL_SGIX_instruments\n#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180\n#define GL_INSTRUMENT_MEASUREMENTS_SGIX   0x8181\n#endif\n\n#ifndef GL_SGIX_texture_scale_bias\n#define GL_POST_TEXTURE_FILTER_BIAS_SGIX  0x8179\n#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A\n#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B\n#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C\n#endif\n\n#ifndef GL_SGIX_framezoom\n#define GL_FRAMEZOOM_SGIX                 0x818B\n#define GL_FRAMEZOOM_FACTOR_SGIX          0x818C\n#define GL_MAX_FRAMEZOOM_FACTOR_SGIX      0x818D\n#endif\n\n#ifndef GL_SGIX_tag_sample_buffer\n#endif\n\n#ifndef GL_FfdMaskSGIX\n#define GL_TEXTURE_DEFORMATION_BIT_SGIX   0x00000001\n#define GL_GEOMETRY_DEFORMATION_BIT_SGIX  0x00000002\n#endif\n\n#ifndef GL_SGIX_polynomial_ffd\n#define GL_GEOMETRY_DEFORMATION_SGIX      0x8194\n#define GL_TEXTURE_DEFORMATION_SGIX       0x8195\n#define GL_DEFORMATIONS_MASK_SGIX         0x8196\n#define GL_MAX_DEFORMATION_ORDER_SGIX     0x8197\n#endif\n\n#ifndef GL_SGIX_reference_plane\n#define GL_REFERENCE_PLANE_SGIX           0x817D\n#define GL_REFERENCE_PLANE_EQUATION_SGIX  0x817E\n#endif\n\n#ifndef GL_SGIX_flush_raster\n#endif\n\n#ifndef GL_SGIX_depth_texture\n#define GL_DEPTH_COMPONENT16_SGIX         0x81A5\n#define GL_DEPTH_COMPONENT24_SGIX         0x81A6\n#define GL_DEPTH_COMPONENT32_SGIX         0x81A7\n#endif\n\n#ifndef GL_SGIS_fog_function\n#define GL_FOG_FUNC_SGIS                  0x812A\n#define GL_FOG_FUNC_POINTS_SGIS           0x812B\n#define GL_MAX_FOG_FUNC_POINTS_SGIS       0x812C\n#endif\n\n#ifndef GL_SGIX_fog_offset\n#define GL_FOG_OFFSET_SGIX                0x8198\n#define GL_FOG_OFFSET_VALUE_SGIX          0x8199\n#endif\n\n#ifndef GL_HP_image_transform\n#define GL_IMAGE_SCALE_X_HP               0x8155\n#define GL_IMAGE_SCALE_Y_HP               0x8156\n#define GL_IMAGE_TRANSLATE_X_HP           0x8157\n#define GL_IMAGE_TRANSLATE_Y_HP           0x8158\n#define GL_IMAGE_ROTATE_ANGLE_HP          0x8159\n#define GL_IMAGE_ROTATE_ORIGIN_X_HP       0x815A\n#define GL_IMAGE_ROTATE_ORIGIN_Y_HP       0x815B\n#define GL_IMAGE_MAG_FILTER_HP            0x815C\n#define GL_IMAGE_MIN_FILTER_HP            0x815D\n#define GL_IMAGE_CUBIC_WEIGHT_HP          0x815E\n#define GL_CUBIC_HP                       0x815F\n#define GL_AVERAGE_HP                     0x8160\n#define GL_IMAGE_TRANSFORM_2D_HP          0x8161\n#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162\n#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163\n#endif\n\n#ifndef GL_HP_convolution_border_modes\n#define GL_IGNORE_BORDER_HP               0x8150\n#define GL_CONSTANT_BORDER_HP             0x8151\n#define GL_REPLICATE_BORDER_HP            0x8153\n#define GL_CONVOLUTION_BORDER_COLOR_HP    0x8154\n#endif\n\n#ifndef GL_INGR_palette_buffer\n#endif\n\n#ifndef GL_SGIX_texture_add_env\n#define GL_TEXTURE_ENV_BIAS_SGIX          0x80BE\n#endif\n\n#ifndef GL_EXT_color_subtable\n#endif\n\n#ifndef GL_PGI_vertex_hints\n#define GL_VERTEX_DATA_HINT_PGI           0x1A22A\n#define GL_VERTEX_CONSISTENT_HINT_PGI     0x1A22B\n#define GL_MATERIAL_SIDE_HINT_PGI         0x1A22C\n#define GL_MAX_VERTEX_HINT_PGI            0x1A22D\n#define GL_COLOR3_BIT_PGI                 0x00010000\n#define GL_COLOR4_BIT_PGI                 0x00020000\n#define GL_EDGEFLAG_BIT_PGI               0x00040000\n#define GL_INDEX_BIT_PGI                  0x00080000\n#define GL_MAT_AMBIENT_BIT_PGI            0x00100000\n#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000\n#define GL_MAT_DIFFUSE_BIT_PGI            0x00400000\n#define GL_MAT_EMISSION_BIT_PGI           0x00800000\n#define GL_MAT_COLOR_INDEXES_BIT_PGI      0x01000000\n#define GL_MAT_SHININESS_BIT_PGI          0x02000000\n#define GL_MAT_SPECULAR_BIT_PGI           0x04000000\n#define GL_NORMAL_BIT_PGI                 0x08000000\n#define GL_TEXCOORD1_BIT_PGI              0x10000000\n#define GL_TEXCOORD2_BIT_PGI              0x20000000\n#define GL_TEXCOORD3_BIT_PGI              0x40000000\n#define GL_TEXCOORD4_BIT_PGI              0x80000000\n#define GL_VERTEX23_BIT_PGI               0x00000004\n#define GL_VERTEX4_BIT_PGI                0x00000008\n#endif\n\n#ifndef GL_PGI_misc_hints\n#define GL_PREFER_DOUBLEBUFFER_HINT_PGI   0x1A1F8\n#define GL_CONSERVE_MEMORY_HINT_PGI       0x1A1FD\n#define GL_RECLAIM_MEMORY_HINT_PGI        0x1A1FE\n#define GL_NATIVE_GRAPHICS_HANDLE_PGI     0x1A202\n#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203\n#define GL_NATIVE_GRAPHICS_END_HINT_PGI   0x1A204\n#define GL_ALWAYS_FAST_HINT_PGI           0x1A20C\n#define GL_ALWAYS_SOFT_HINT_PGI           0x1A20D\n#define GL_ALLOW_DRAW_OBJ_HINT_PGI        0x1A20E\n#define GL_ALLOW_DRAW_WIN_HINT_PGI        0x1A20F\n#define GL_ALLOW_DRAW_FRG_HINT_PGI        0x1A210\n#define GL_ALLOW_DRAW_MEM_HINT_PGI        0x1A211\n#define GL_STRICT_DEPTHFUNC_HINT_PGI      0x1A216\n#define GL_STRICT_LIGHTING_HINT_PGI       0x1A217\n#define GL_STRICT_SCISSOR_HINT_PGI        0x1A218\n#define GL_FULL_STIPPLE_HINT_PGI          0x1A219\n#define GL_CLIP_NEAR_HINT_PGI             0x1A220\n#define GL_CLIP_FAR_HINT_PGI              0x1A221\n#define GL_WIDE_LINE_HINT_PGI             0x1A222\n#define GL_BACK_NORMALS_HINT_PGI          0x1A223\n#endif\n\n#ifndef GL_EXT_paletted_texture\n#define GL_COLOR_INDEX1_EXT               0x80E2\n#define GL_COLOR_INDEX2_EXT               0x80E3\n#define GL_COLOR_INDEX4_EXT               0x80E4\n#define GL_COLOR_INDEX8_EXT               0x80E5\n#define GL_COLOR_INDEX12_EXT              0x80E6\n#define GL_COLOR_INDEX16_EXT              0x80E7\n#define GL_TEXTURE_INDEX_SIZE_EXT         0x80ED\n#endif\n\n#ifndef GL_EXT_clip_volume_hint\n#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT  0x80F0\n#endif\n\n#ifndef GL_SGIX_list_priority\n#define GL_LIST_PRIORITY_SGIX             0x8182\n#endif\n\n#ifndef GL_SGIX_ir_instrument1\n#define GL_IR_INSTRUMENT1_SGIX            0x817F\n#endif\n\n#ifndef GL_SGIX_calligraphic_fragment\n#define GL_CALLIGRAPHIC_FRAGMENT_SGIX     0x8183\n#endif\n\n#ifndef GL_SGIX_texture_lod_bias\n#define GL_TEXTURE_LOD_BIAS_S_SGIX        0x818E\n#define GL_TEXTURE_LOD_BIAS_T_SGIX        0x818F\n#define GL_TEXTURE_LOD_BIAS_R_SGIX        0x8190\n#endif\n\n#ifndef GL_SGIX_shadow_ambient\n#define GL_SHADOW_AMBIENT_SGIX            0x80BF\n#endif\n\n#ifndef GL_EXT_index_texture\n#endif\n\n#ifndef GL_EXT_index_material\n#define GL_INDEX_MATERIAL_EXT             0x81B8\n#define GL_INDEX_MATERIAL_PARAMETER_EXT   0x81B9\n#define GL_INDEX_MATERIAL_FACE_EXT        0x81BA\n#endif\n\n#ifndef GL_EXT_index_func\n#define GL_INDEX_TEST_EXT                 0x81B5\n#define GL_INDEX_TEST_FUNC_EXT            0x81B6\n#define GL_INDEX_TEST_REF_EXT             0x81B7\n#endif\n\n#ifndef GL_EXT_index_array_formats\n#define GL_IUI_V2F_EXT                    0x81AD\n#define GL_IUI_V3F_EXT                    0x81AE\n#define GL_IUI_N3F_V2F_EXT                0x81AF\n#define GL_IUI_N3F_V3F_EXT                0x81B0\n#define GL_T2F_IUI_V2F_EXT                0x81B1\n#define GL_T2F_IUI_V3F_EXT                0x81B2\n#define GL_T2F_IUI_N3F_V2F_EXT            0x81B3\n#define GL_T2F_IUI_N3F_V3F_EXT            0x81B4\n#endif\n\n#ifndef GL_EXT_compiled_vertex_array\n#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT   0x81A8\n#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT   0x81A9\n#endif\n\n#ifndef GL_EXT_cull_vertex\n#define GL_CULL_VERTEX_EXT                0x81AA\n#define GL_CULL_VERTEX_EYE_POSITION_EXT   0x81AB\n#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC\n#endif\n\n#ifndef GL_SGIX_ycrcb\n#define GL_YCRCB_422_SGIX                 0x81BB\n#define GL_YCRCB_444_SGIX                 0x81BC\n#endif\n\n#ifndef GL_SGIX_fragment_lighting\n#define GL_FRAGMENT_LIGHTING_SGIX         0x8400\n#define GL_FRAGMENT_COLOR_MATERIAL_SGIX   0x8401\n#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402\n#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403\n#define GL_MAX_FRAGMENT_LIGHTS_SGIX       0x8404\n#define GL_MAX_ACTIVE_LIGHTS_SGIX         0x8405\n#define GL_CURRENT_RASTER_NORMAL_SGIX     0x8406\n#define GL_LIGHT_ENV_MODE_SGIX            0x8407\n#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408\n#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409\n#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A\n#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B\n#define GL_FRAGMENT_LIGHT0_SGIX           0x840C\n#define GL_FRAGMENT_LIGHT1_SGIX           0x840D\n#define GL_FRAGMENT_LIGHT2_SGIX           0x840E\n#define GL_FRAGMENT_LIGHT3_SGIX           0x840F\n#define GL_FRAGMENT_LIGHT4_SGIX           0x8410\n#define GL_FRAGMENT_LIGHT5_SGIX           0x8411\n#define GL_FRAGMENT_LIGHT6_SGIX           0x8412\n#define GL_FRAGMENT_LIGHT7_SGIX           0x8413\n#endif\n\n#ifndef GL_IBM_rasterpos_clip\n#define GL_RASTER_POSITION_UNCLIPPED_IBM  0x19262\n#endif\n\n#ifndef GL_HP_texture_lighting\n#define GL_TEXTURE_LIGHTING_MODE_HP       0x8167\n#define GL_TEXTURE_POST_SPECULAR_HP       0x8168\n#define GL_TEXTURE_PRE_SPECULAR_HP        0x8169\n#endif\n\n#ifndef GL_EXT_draw_range_elements\n#define GL_MAX_ELEMENTS_VERTICES_EXT      0x80E8\n#define GL_MAX_ELEMENTS_INDICES_EXT       0x80E9\n#endif\n\n#ifndef GL_WIN_phong_shading\n#define GL_PHONG_WIN                      0x80EA\n#define GL_PHONG_HINT_WIN                 0x80EB\n#endif\n\n#ifndef GL_WIN_specular_fog\n#define GL_FOG_SPECULAR_TEXTURE_WIN       0x80EC\n#endif\n\n#ifndef GL_EXT_light_texture\n#define GL_FRAGMENT_MATERIAL_EXT          0x8349\n#define GL_FRAGMENT_NORMAL_EXT            0x834A\n#define GL_FRAGMENT_COLOR_EXT             0x834C\n#define GL_ATTENUATION_EXT                0x834D\n#define GL_SHADOW_ATTENUATION_EXT         0x834E\n#define GL_TEXTURE_APPLICATION_MODE_EXT   0x834F\n#define GL_TEXTURE_LIGHT_EXT              0x8350\n#define GL_TEXTURE_MATERIAL_FACE_EXT      0x8351\n#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352\n/* reuse GL_FRAGMENT_DEPTH_EXT */\n#endif\n\n#ifndef GL_SGIX_blend_alpha_minmax\n#define GL_ALPHA_MIN_SGIX                 0x8320\n#define GL_ALPHA_MAX_SGIX                 0x8321\n#endif\n\n#ifndef GL_SGIX_impact_pixel_texture\n#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX   0x8184\n#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX     0x8185\n#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX     0x8186\n#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187\n#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188\n#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX    0x8189\n#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX    0x818A\n#endif\n\n#ifndef GL_EXT_bgra\n#define GL_BGR_EXT                        0x80E0\n#define GL_BGRA_EXT                       0x80E1\n#endif\n\n#ifndef GL_SGIX_async\n#define GL_ASYNC_MARKER_SGIX              0x8329\n#endif\n\n#ifndef GL_SGIX_async_pixel\n#define GL_ASYNC_TEX_IMAGE_SGIX           0x835C\n#define GL_ASYNC_DRAW_PIXELS_SGIX         0x835D\n#define GL_ASYNC_READ_PIXELS_SGIX         0x835E\n#define GL_MAX_ASYNC_TEX_IMAGE_SGIX       0x835F\n#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX     0x8360\n#define GL_MAX_ASYNC_READ_PIXELS_SGIX     0x8361\n#endif\n\n#ifndef GL_SGIX_async_histogram\n#define GL_ASYNC_HISTOGRAM_SGIX           0x832C\n#define GL_MAX_ASYNC_HISTOGRAM_SGIX       0x832D\n#endif\n\n#ifndef GL_INTEL_texture_scissor\n#endif\n\n#ifndef GL_INTEL_parallel_arrays\n#define GL_PARALLEL_ARRAYS_INTEL          0x83F4\n#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5\n#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6\n#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7\n#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8\n#endif\n\n#ifndef GL_HP_occlusion_test\n#define GL_OCCLUSION_TEST_HP              0x8165\n#define GL_OCCLUSION_TEST_RESULT_HP       0x8166\n#endif\n\n#ifndef GL_EXT_pixel_transform\n#define GL_PIXEL_TRANSFORM_2D_EXT         0x8330\n#define GL_PIXEL_MAG_FILTER_EXT           0x8331\n#define GL_PIXEL_MIN_FILTER_EXT           0x8332\n#define GL_PIXEL_CUBIC_WEIGHT_EXT         0x8333\n#define GL_CUBIC_EXT                      0x8334\n#define GL_AVERAGE_EXT                    0x8335\n#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336\n#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337\n#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT  0x8338\n#endif\n\n#ifndef GL_EXT_pixel_transform_color_table\n#endif\n\n#ifndef GL_EXT_shared_texture_palette\n#define GL_SHARED_TEXTURE_PALETTE_EXT     0x81FB\n#endif\n\n#ifndef GL_EXT_separate_specular_color\n#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT  0x81F8\n#define GL_SINGLE_COLOR_EXT               0x81F9\n#define GL_SEPARATE_SPECULAR_COLOR_EXT    0x81FA\n#endif\n\n#ifndef GL_EXT_secondary_color\n#define GL_COLOR_SUM_EXT                  0x8458\n#define GL_CURRENT_SECONDARY_COLOR_EXT    0x8459\n#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A\n#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B\n#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C\n#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D\n#define GL_SECONDARY_COLOR_ARRAY_EXT      0x845E\n#endif\n\n#ifndef GL_EXT_texture_perturb_normal\n#define GL_PERTURB_EXT                    0x85AE\n#define GL_TEXTURE_NORMAL_EXT             0x85AF\n#endif\n\n#ifndef GL_EXT_multi_draw_arrays\n#endif\n\n#ifndef GL_EXT_fog_coord\n#define GL_FOG_COORDINATE_SOURCE_EXT      0x8450\n#define GL_FOG_COORDINATE_EXT             0x8451\n#define GL_FRAGMENT_DEPTH_EXT             0x8452\n#define GL_CURRENT_FOG_COORDINATE_EXT     0x8453\n#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT  0x8454\n#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455\n#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456\n#define GL_FOG_COORDINATE_ARRAY_EXT       0x8457\n#endif\n\n#ifndef GL_REND_screen_coordinates\n#define GL_SCREEN_COORDINATES_REND        0x8490\n#define GL_INVERTED_SCREEN_W_REND         0x8491\n#endif\n\n#ifndef GL_EXT_coordinate_frame\n#define GL_TANGENT_ARRAY_EXT              0x8439\n#define GL_BINORMAL_ARRAY_EXT             0x843A\n#define GL_CURRENT_TANGENT_EXT            0x843B\n#define GL_CURRENT_BINORMAL_EXT           0x843C\n#define GL_TANGENT_ARRAY_TYPE_EXT         0x843E\n#define GL_TANGENT_ARRAY_STRIDE_EXT       0x843F\n#define GL_BINORMAL_ARRAY_TYPE_EXT        0x8440\n#define GL_BINORMAL_ARRAY_STRIDE_EXT      0x8441\n#define GL_TANGENT_ARRAY_POINTER_EXT      0x8442\n#define GL_BINORMAL_ARRAY_POINTER_EXT     0x8443\n#define GL_MAP1_TANGENT_EXT               0x8444\n#define GL_MAP2_TANGENT_EXT               0x8445\n#define GL_MAP1_BINORMAL_EXT              0x8446\n#define GL_MAP2_BINORMAL_EXT              0x8447\n#endif\n\n#ifndef GL_EXT_texture_env_combine\n#define GL_COMBINE_EXT                    0x8570\n#define GL_COMBINE_RGB_EXT                0x8571\n#define GL_COMBINE_ALPHA_EXT              0x8572\n#define GL_RGB_SCALE_EXT                  0x8573\n#define GL_ADD_SIGNED_EXT                 0x8574\n#define GL_INTERPOLATE_EXT                0x8575\n#define GL_CONSTANT_EXT                   0x8576\n#define GL_PRIMARY_COLOR_EXT              0x8577\n#define GL_PREVIOUS_EXT                   0x8578\n#define GL_SOURCE0_RGB_EXT                0x8580\n#define GL_SOURCE1_RGB_EXT                0x8581\n#define GL_SOURCE2_RGB_EXT                0x8582\n#define GL_SOURCE0_ALPHA_EXT              0x8588\n#define GL_SOURCE1_ALPHA_EXT              0x8589\n#define GL_SOURCE2_ALPHA_EXT              0x858A\n#define GL_OPERAND0_RGB_EXT               0x8590\n#define GL_OPERAND1_RGB_EXT               0x8591\n#define GL_OPERAND2_RGB_EXT               0x8592\n#define GL_OPERAND0_ALPHA_EXT             0x8598\n#define GL_OPERAND1_ALPHA_EXT             0x8599\n#define GL_OPERAND2_ALPHA_EXT             0x859A\n#endif\n\n#ifndef GL_APPLE_specular_vector\n#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0\n#endif\n\n#ifndef GL_APPLE_transform_hint\n#define GL_TRANSFORM_HINT_APPLE           0x85B1\n#endif\n\n#ifndef GL_SGIX_fog_scale\n#define GL_FOG_SCALE_SGIX                 0x81FC\n#define GL_FOG_SCALE_VALUE_SGIX           0x81FD\n#endif\n\n#ifndef GL_SUNX_constant_data\n#define GL_UNPACK_CONSTANT_DATA_SUNX      0x81D5\n#define GL_TEXTURE_CONSTANT_DATA_SUNX     0x81D6\n#endif\n\n#ifndef GL_SUN_global_alpha\n#define GL_GLOBAL_ALPHA_SUN               0x81D9\n#define GL_GLOBAL_ALPHA_FACTOR_SUN        0x81DA\n#endif\n\n#ifndef GL_SUN_triangle_list\n#define GL_RESTART_SUN                    0x0001\n#define GL_REPLACE_MIDDLE_SUN             0x0002\n#define GL_REPLACE_OLDEST_SUN             0x0003\n#define GL_TRIANGLE_LIST_SUN              0x81D7\n#define GL_REPLACEMENT_CODE_SUN           0x81D8\n#define GL_REPLACEMENT_CODE_ARRAY_SUN     0x85C0\n#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1\n#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2\n#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3\n#define GL_R1UI_V3F_SUN                   0x85C4\n#define GL_R1UI_C4UB_V3F_SUN              0x85C5\n#define GL_R1UI_C3F_V3F_SUN               0x85C6\n#define GL_R1UI_N3F_V3F_SUN               0x85C7\n#define GL_R1UI_C4F_N3F_V3F_SUN           0x85C8\n#define GL_R1UI_T2F_V3F_SUN               0x85C9\n#define GL_R1UI_T2F_N3F_V3F_SUN           0x85CA\n#define GL_R1UI_T2F_C4F_N3F_V3F_SUN       0x85CB\n#endif\n\n#ifndef GL_SUN_vertex\n#endif\n\n#ifndef GL_EXT_blend_func_separate\n#define GL_BLEND_DST_RGB_EXT              0x80C8\n#define GL_BLEND_SRC_RGB_EXT              0x80C9\n#define GL_BLEND_DST_ALPHA_EXT            0x80CA\n#define GL_BLEND_SRC_ALPHA_EXT            0x80CB\n#endif\n\n#ifndef GL_INGR_color_clamp\n#define GL_RED_MIN_CLAMP_INGR             0x8560\n#define GL_GREEN_MIN_CLAMP_INGR           0x8561\n#define GL_BLUE_MIN_CLAMP_INGR            0x8562\n#define GL_ALPHA_MIN_CLAMP_INGR           0x8563\n#define GL_RED_MAX_CLAMP_INGR             0x8564\n#define GL_GREEN_MAX_CLAMP_INGR           0x8565\n#define GL_BLUE_MAX_CLAMP_INGR            0x8566\n#define GL_ALPHA_MAX_CLAMP_INGR           0x8567\n#endif\n\n#ifndef GL_INGR_interlace_read\n#define GL_INTERLACE_READ_INGR            0x8568\n#endif\n\n#ifndef GL_EXT_stencil_wrap\n#define GL_INCR_WRAP_EXT                  0x8507\n#define GL_DECR_WRAP_EXT                  0x8508\n#endif\n\n#ifndef GL_EXT_422_pixels\n#define GL_422_EXT                        0x80CC\n#define GL_422_REV_EXT                    0x80CD\n#define GL_422_AVERAGE_EXT                0x80CE\n#define GL_422_REV_AVERAGE_EXT            0x80CF\n#endif\n\n#ifndef GL_NV_texgen_reflection\n#define GL_NORMAL_MAP_NV                  0x8511\n#define GL_REFLECTION_MAP_NV              0x8512\n#endif\n\n#ifndef GL_EXT_texture_cube_map\n#define GL_NORMAL_MAP_EXT                 0x8511\n#define GL_REFLECTION_MAP_EXT             0x8512\n#define GL_TEXTURE_CUBE_MAP_EXT           0x8513\n#define GL_TEXTURE_BINDING_CUBE_MAP_EXT   0x8514\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518\n#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519\n#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A\n#define GL_PROXY_TEXTURE_CUBE_MAP_EXT     0x851B\n#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT  0x851C\n#endif\n\n#ifndef GL_SUN_convolution_border_modes\n#define GL_WRAP_BORDER_SUN                0x81D4\n#endif\n\n#ifndef GL_EXT_texture_env_add\n#endif\n\n#ifndef GL_EXT_texture_lod_bias\n#define GL_MAX_TEXTURE_LOD_BIAS_EXT       0x84FD\n#define GL_TEXTURE_FILTER_CONTROL_EXT     0x8500\n#define GL_TEXTURE_LOD_BIAS_EXT           0x8501\n#endif\n\n#ifndef GL_EXT_texture_filter_anisotropic\n#define GL_TEXTURE_MAX_ANISOTROPY_EXT     0x84FE\n#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF\n#endif\n\n#ifndef GL_EXT_vertex_weighting\n#define GL_MODELVIEW0_STACK_DEPTH_EXT     GL_MODELVIEW_STACK_DEPTH\n#define GL_MODELVIEW1_STACK_DEPTH_EXT     0x8502\n#define GL_MODELVIEW0_MATRIX_EXT          GL_MODELVIEW_MATRIX\n#define GL_MODELVIEW1_MATRIX_EXT          0x8506\n#define GL_VERTEX_WEIGHTING_EXT           0x8509\n#define GL_MODELVIEW0_EXT                 GL_MODELVIEW\n#define GL_MODELVIEW1_EXT                 0x850A\n#define GL_CURRENT_VERTEX_WEIGHT_EXT      0x850B\n#define GL_VERTEX_WEIGHT_ARRAY_EXT        0x850C\n#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT   0x850D\n#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT   0x850E\n#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F\n#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510\n#endif\n\n#ifndef GL_NV_light_max_exponent\n#define GL_MAX_SHININESS_NV               0x8504\n#define GL_MAX_SPOT_EXPONENT_NV           0x8505\n#endif\n\n#ifndef GL_NV_vertex_array_range\n#define GL_VERTEX_ARRAY_RANGE_NV          0x851D\n#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV   0x851E\n#define GL_VERTEX_ARRAY_RANGE_VALID_NV    0x851F\n#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520\n#define GL_VERTEX_ARRAY_RANGE_POINTER_NV  0x8521\n#endif\n\n#ifndef GL_NV_register_combiners\n#define GL_REGISTER_COMBINERS_NV          0x8522\n#define GL_VARIABLE_A_NV                  0x8523\n#define GL_VARIABLE_B_NV                  0x8524\n#define GL_VARIABLE_C_NV                  0x8525\n#define GL_VARIABLE_D_NV                  0x8526\n#define GL_VARIABLE_E_NV                  0x8527\n#define GL_VARIABLE_F_NV                  0x8528\n#define GL_VARIABLE_G_NV                  0x8529\n#define GL_CONSTANT_COLOR0_NV             0x852A\n#define GL_CONSTANT_COLOR1_NV             0x852B\n#define GL_PRIMARY_COLOR_NV               0x852C\n#define GL_SECONDARY_COLOR_NV             0x852D\n#define GL_SPARE0_NV                      0x852E\n#define GL_SPARE1_NV                      0x852F\n#define GL_DISCARD_NV                     0x8530\n#define GL_E_TIMES_F_NV                   0x8531\n#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532\n#define GL_UNSIGNED_IDENTITY_NV           0x8536\n#define GL_UNSIGNED_INVERT_NV             0x8537\n#define GL_EXPAND_NORMAL_NV               0x8538\n#define GL_EXPAND_NEGATE_NV               0x8539\n#define GL_HALF_BIAS_NORMAL_NV            0x853A\n#define GL_HALF_BIAS_NEGATE_NV            0x853B\n#define GL_SIGNED_IDENTITY_NV             0x853C\n#define GL_SIGNED_NEGATE_NV               0x853D\n#define GL_SCALE_BY_TWO_NV                0x853E\n#define GL_SCALE_BY_FOUR_NV               0x853F\n#define GL_SCALE_BY_ONE_HALF_NV           0x8540\n#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV   0x8541\n#define GL_COMBINER_INPUT_NV              0x8542\n#define GL_COMBINER_MAPPING_NV            0x8543\n#define GL_COMBINER_COMPONENT_USAGE_NV    0x8544\n#define GL_COMBINER_AB_DOT_PRODUCT_NV     0x8545\n#define GL_COMBINER_CD_DOT_PRODUCT_NV     0x8546\n#define GL_COMBINER_MUX_SUM_NV            0x8547\n#define GL_COMBINER_SCALE_NV              0x8548\n#define GL_COMBINER_BIAS_NV               0x8549\n#define GL_COMBINER_AB_OUTPUT_NV          0x854A\n#define GL_COMBINER_CD_OUTPUT_NV          0x854B\n#define GL_COMBINER_SUM_OUTPUT_NV         0x854C\n#define GL_MAX_GENERAL_COMBINERS_NV       0x854D\n#define GL_NUM_GENERAL_COMBINERS_NV       0x854E\n#define GL_COLOR_SUM_CLAMP_NV             0x854F\n#define GL_COMBINER0_NV                   0x8550\n#define GL_COMBINER1_NV                   0x8551\n#define GL_COMBINER2_NV                   0x8552\n#define GL_COMBINER3_NV                   0x8553\n#define GL_COMBINER4_NV                   0x8554\n#define GL_COMBINER5_NV                   0x8555\n#define GL_COMBINER6_NV                   0x8556\n#define GL_COMBINER7_NV                   0x8557\n/* reuse GL_TEXTURE0_ARB */\n/* reuse GL_TEXTURE1_ARB */\n/* reuse GL_ZERO */\n/* reuse GL_NONE */\n/* reuse GL_FOG */\n#endif\n\n#ifndef GL_NV_fog_distance\n#define GL_FOG_DISTANCE_MODE_NV           0x855A\n#define GL_EYE_RADIAL_NV                  0x855B\n#define GL_EYE_PLANE_ABSOLUTE_NV          0x855C\n/* reuse GL_EYE_PLANE */\n#endif\n\n#ifndef GL_NV_texgen_emboss\n#define GL_EMBOSS_LIGHT_NV                0x855D\n#define GL_EMBOSS_CONSTANT_NV             0x855E\n#define GL_EMBOSS_MAP_NV                  0x855F\n#endif\n\n#ifndef GL_NV_blend_square\n#endif\n\n#ifndef GL_NV_texture_env_combine4\n#define GL_COMBINE4_NV                    0x8503\n#define GL_SOURCE3_RGB_NV                 0x8583\n#define GL_SOURCE3_ALPHA_NV               0x858B\n#define GL_OPERAND3_RGB_NV                0x8593\n#define GL_OPERAND3_ALPHA_NV              0x859B\n#endif\n\n#ifndef GL_MESA_resize_buffers\n#endif\n\n#ifndef GL_MESA_window_pos\n#endif\n\n#ifndef GL_EXT_texture_compression_s3tc\n#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT   0x83F0\n#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT  0x83F1\n#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT  0x83F2\n#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT  0x83F3\n#endif\n\n#ifndef GL_IBM_cull_vertex\n#define GL_CULL_VERTEX_IBM                103050\n#endif\n\n#ifndef GL_IBM_multimode_draw_arrays\n#endif\n\n#ifndef GL_IBM_vertex_array_lists\n#define GL_VERTEX_ARRAY_LIST_IBM          103070\n#define GL_NORMAL_ARRAY_LIST_IBM          103071\n#define GL_COLOR_ARRAY_LIST_IBM           103072\n#define GL_INDEX_ARRAY_LIST_IBM           103073\n#define GL_TEXTURE_COORD_ARRAY_LIST_IBM   103074\n#define GL_EDGE_FLAG_ARRAY_LIST_IBM       103075\n#define GL_FOG_COORDINATE_ARRAY_LIST_IBM  103076\n#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077\n#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM   103080\n#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM   103081\n#define GL_COLOR_ARRAY_LIST_STRIDE_IBM    103082\n#define GL_INDEX_ARRAY_LIST_STRIDE_IBM    103083\n#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084\n#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085\n#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086\n#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087\n#endif\n\n#ifndef GL_SGIX_subsample\n#define GL_PACK_SUBSAMPLE_RATE_SGIX       0x85A0\n#define GL_UNPACK_SUBSAMPLE_RATE_SGIX     0x85A1\n#define GL_PIXEL_SUBSAMPLE_4444_SGIX      0x85A2\n#define GL_PIXEL_SUBSAMPLE_2424_SGIX      0x85A3\n#define GL_PIXEL_SUBSAMPLE_4242_SGIX      0x85A4\n#endif\n\n#ifndef GL_SGIX_ycrcb_subsample\n#endif\n\n#ifndef GL_SGIX_ycrcba\n#define GL_YCRCB_SGIX                     0x8318\n#define GL_YCRCBA_SGIX                    0x8319\n#endif\n\n#ifndef GL_SGI_depth_pass_instrument\n#define GL_DEPTH_PASS_INSTRUMENT_SGIX     0x8310\n#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311\n#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312\n#endif\n\n#ifndef GL_3DFX_texture_compression_FXT1\n#define GL_COMPRESSED_RGB_FXT1_3DFX       0x86B0\n#define GL_COMPRESSED_RGBA_FXT1_3DFX      0x86B1\n#endif\n\n#ifndef GL_3DFX_multisample\n#define GL_MULTISAMPLE_3DFX               0x86B2\n#define GL_SAMPLE_BUFFERS_3DFX            0x86B3\n#define GL_SAMPLES_3DFX                   0x86B4\n#define GL_MULTISAMPLE_BIT_3DFX           0x20000000\n#endif\n\n#ifndef GL_3DFX_tbuffer\n#endif\n\n#ifndef GL_EXT_multisample\n#define GL_MULTISAMPLE_EXT                0x809D\n#define GL_SAMPLE_ALPHA_TO_MASK_EXT       0x809E\n#define GL_SAMPLE_ALPHA_TO_ONE_EXT        0x809F\n#define GL_SAMPLE_MASK_EXT                0x80A0\n#define GL_1PASS_EXT                      0x80A1\n#define GL_2PASS_0_EXT                    0x80A2\n#define GL_2PASS_1_EXT                    0x80A3\n#define GL_4PASS_0_EXT                    0x80A4\n#define GL_4PASS_1_EXT                    0x80A5\n#define GL_4PASS_2_EXT                    0x80A6\n#define GL_4PASS_3_EXT                    0x80A7\n#define GL_SAMPLE_BUFFERS_EXT             0x80A8\n#define GL_SAMPLES_EXT                    0x80A9\n#define GL_SAMPLE_MASK_VALUE_EXT          0x80AA\n#define GL_SAMPLE_MASK_INVERT_EXT         0x80AB\n#define GL_SAMPLE_PATTERN_EXT             0x80AC\n#define GL_MULTISAMPLE_BIT_EXT            0x20000000\n#endif\n\n#ifndef GL_SGIX_vertex_preclip\n#define GL_VERTEX_PRECLIP_SGIX            0x83EE\n#define GL_VERTEX_PRECLIP_HINT_SGIX       0x83EF\n#endif\n\n#ifndef GL_SGIX_convolution_accuracy\n#define GL_CONVOLUTION_HINT_SGIX          0x8316\n#endif\n\n#ifndef GL_SGIX_resample\n#define GL_PACK_RESAMPLE_SGIX             0x842C\n#define GL_UNPACK_RESAMPLE_SGIX           0x842D\n#define GL_RESAMPLE_REPLICATE_SGIX        0x842E\n#define GL_RESAMPLE_ZERO_FILL_SGIX        0x842F\n#define GL_RESAMPLE_DECIMATE_SGIX         0x8430\n#endif\n\n#ifndef GL_SGIS_point_line_texgen\n#define GL_EYE_DISTANCE_TO_POINT_SGIS     0x81F0\n#define GL_OBJECT_DISTANCE_TO_POINT_SGIS  0x81F1\n#define GL_EYE_DISTANCE_TO_LINE_SGIS      0x81F2\n#define GL_OBJECT_DISTANCE_TO_LINE_SGIS   0x81F3\n#define GL_EYE_POINT_SGIS                 0x81F4\n#define GL_OBJECT_POINT_SGIS              0x81F5\n#define GL_EYE_LINE_SGIS                  0x81F6\n#define GL_OBJECT_LINE_SGIS               0x81F7\n#endif\n\n#ifndef GL_SGIS_texture_color_mask\n#define GL_TEXTURE_COLOR_WRITEMASK_SGIS   0x81EF\n#endif\n\n#ifndef GL_NV_fence\n#define GL_ALL_COMPLETED_NV               0x84F2\n#define GL_FENCE_STATUS_NV                0x84F3\n#define GL_FENCE_CONDITION_NV             0x84F4\n#endif\n\n#ifndef GL_IBM_texture_mirrored_repeat\n#define GL_MIRRORED_REPEAT_IBM            0x8370\n#endif\n\n#ifndef GL_NV_evaluators\n#define GL_EVAL_2D_NV                     0x86C0\n#define GL_EVAL_TRIANGULAR_2D_NV          0x86C1\n#define GL_MAP_TESSELLATION_NV            0x86C2\n#define GL_MAP_ATTRIB_U_ORDER_NV          0x86C3\n#define GL_MAP_ATTRIB_V_ORDER_NV          0x86C4\n#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5\n#define GL_EVAL_VERTEX_ATTRIB0_NV         0x86C6\n#define GL_EVAL_VERTEX_ATTRIB1_NV         0x86C7\n#define GL_EVAL_VERTEX_ATTRIB2_NV         0x86C8\n#define GL_EVAL_VERTEX_ATTRIB3_NV         0x86C9\n#define GL_EVAL_VERTEX_ATTRIB4_NV         0x86CA\n#define GL_EVAL_VERTEX_ATTRIB5_NV         0x86CB\n#define GL_EVAL_VERTEX_ATTRIB6_NV         0x86CC\n#define GL_EVAL_VERTEX_ATTRIB7_NV         0x86CD\n#define GL_EVAL_VERTEX_ATTRIB8_NV         0x86CE\n#define GL_EVAL_VERTEX_ATTRIB9_NV         0x86CF\n#define GL_EVAL_VERTEX_ATTRIB10_NV        0x86D0\n#define GL_EVAL_VERTEX_ATTRIB11_NV        0x86D1\n#define GL_EVAL_VERTEX_ATTRIB12_NV        0x86D2\n#define GL_EVAL_VERTEX_ATTRIB13_NV        0x86D3\n#define GL_EVAL_VERTEX_ATTRIB14_NV        0x86D4\n#define GL_EVAL_VERTEX_ATTRIB15_NV        0x86D5\n#define GL_MAX_MAP_TESSELLATION_NV        0x86D6\n#define GL_MAX_RATIONAL_EVAL_ORDER_NV     0x86D7\n#endif\n\n#ifndef GL_NV_packed_depth_stencil\n#define GL_DEPTH_STENCIL_NV               0x84F9\n#define GL_UNSIGNED_INT_24_8_NV           0x84FA\n#endif\n\n#ifndef GL_NV_register_combiners2\n#define GL_PER_STAGE_CONSTANTS_NV         0x8535\n#endif\n\n#ifndef GL_NV_texture_compression_vtc\n#endif\n\n#ifndef GL_NV_texture_rectangle\n#define GL_TEXTURE_RECTANGLE_NV           0x84F5\n#define GL_TEXTURE_BINDING_RECTANGLE_NV   0x84F6\n#define GL_PROXY_TEXTURE_RECTANGLE_NV     0x84F7\n#define GL_MAX_TEXTURE_RECTANGLE_SIZE_NV  0x84F8\n#endif\n\n#ifndef GL_NV_texture_shader\n#define GL_OFFSET_TEXTURE_RECTANGLE_NV    0x864C\n#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D\n#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E\n#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9\n#define GL_UNSIGNED_INT_S8_S8_8_8_NV      0x86DA\n#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV  0x86DB\n#define GL_DSDT_MAG_INTENSITY_NV          0x86DC\n#define GL_SHADER_CONSISTENT_NV           0x86DD\n#define GL_TEXTURE_SHADER_NV              0x86DE\n#define GL_SHADER_OPERATION_NV            0x86DF\n#define GL_CULL_MODES_NV                  0x86E0\n#define GL_OFFSET_TEXTURE_MATRIX_NV       0x86E1\n#define GL_OFFSET_TEXTURE_SCALE_NV        0x86E2\n#define GL_OFFSET_TEXTURE_BIAS_NV         0x86E3\n#define GL_OFFSET_TEXTURE_2D_MATRIX_NV    GL_OFFSET_TEXTURE_MATRIX_NV\n#define GL_OFFSET_TEXTURE_2D_SCALE_NV     GL_OFFSET_TEXTURE_SCALE_NV\n#define GL_OFFSET_TEXTURE_2D_BIAS_NV      GL_OFFSET_TEXTURE_BIAS_NV\n#define GL_PREVIOUS_TEXTURE_INPUT_NV      0x86E4\n#define GL_CONST_EYE_NV                   0x86E5\n#define GL_PASS_THROUGH_NV                0x86E6\n#define GL_CULL_FRAGMENT_NV               0x86E7\n#define GL_OFFSET_TEXTURE_2D_NV           0x86E8\n#define GL_DEPENDENT_AR_TEXTURE_2D_NV     0x86E9\n#define GL_DEPENDENT_GB_TEXTURE_2D_NV     0x86EA\n#define GL_DOT_PRODUCT_NV                 0x86EC\n#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV   0x86ED\n#define GL_DOT_PRODUCT_TEXTURE_2D_NV      0x86EE\n#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0\n#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1\n#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2\n#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3\n#define GL_HILO_NV                        0x86F4\n#define GL_DSDT_NV                        0x86F5\n#define GL_DSDT_MAG_NV                    0x86F6\n#define GL_DSDT_MAG_VIB_NV                0x86F7\n#define GL_HILO16_NV                      0x86F8\n#define GL_SIGNED_HILO_NV                 0x86F9\n#define GL_SIGNED_HILO16_NV               0x86FA\n#define GL_SIGNED_RGBA_NV                 0x86FB\n#define GL_SIGNED_RGBA8_NV                0x86FC\n#define GL_SIGNED_RGB_NV                  0x86FE\n#define GL_SIGNED_RGB8_NV                 0x86FF\n#define GL_SIGNED_LUMINANCE_NV            0x8701\n#define GL_SIGNED_LUMINANCE8_NV           0x8702\n#define GL_SIGNED_LUMINANCE_ALPHA_NV      0x8703\n#define GL_SIGNED_LUMINANCE8_ALPHA8_NV    0x8704\n#define GL_SIGNED_ALPHA_NV                0x8705\n#define GL_SIGNED_ALPHA8_NV               0x8706\n#define GL_SIGNED_INTENSITY_NV            0x8707\n#define GL_SIGNED_INTENSITY8_NV           0x8708\n#define GL_DSDT8_NV                       0x8709\n#define GL_DSDT8_MAG8_NV                  0x870A\n#define GL_DSDT8_MAG8_INTENSITY8_NV       0x870B\n#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV   0x870C\n#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D\n#define GL_HI_SCALE_NV                    0x870E\n#define GL_LO_SCALE_NV                    0x870F\n#define GL_DS_SCALE_NV                    0x8710\n#define GL_DT_SCALE_NV                    0x8711\n#define GL_MAGNITUDE_SCALE_NV             0x8712\n#define GL_VIBRANCE_SCALE_NV              0x8713\n#define GL_HI_BIAS_NV                     0x8714\n#define GL_LO_BIAS_NV                     0x8715\n#define GL_DS_BIAS_NV                     0x8716\n#define GL_DT_BIAS_NV                     0x8717\n#define GL_MAGNITUDE_BIAS_NV              0x8718\n#define GL_VIBRANCE_BIAS_NV               0x8719\n#define GL_TEXTURE_BORDER_VALUES_NV       0x871A\n#define GL_TEXTURE_HI_SIZE_NV             0x871B\n#define GL_TEXTURE_LO_SIZE_NV             0x871C\n#define GL_TEXTURE_DS_SIZE_NV             0x871D\n#define GL_TEXTURE_DT_SIZE_NV             0x871E\n#define GL_TEXTURE_MAG_SIZE_NV            0x871F\n#endif\n\n#ifndef GL_NV_texture_shader2\n#define GL_DOT_PRODUCT_TEXTURE_3D_NV      0x86EF\n#endif\n\n#ifndef GL_NV_vertex_array_range2\n#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533\n#endif\n\n#ifndef GL_NV_vertex_program\n#define GL_VERTEX_PROGRAM_NV              0x8620\n#define GL_VERTEX_STATE_PROGRAM_NV        0x8621\n#define GL_ATTRIB_ARRAY_SIZE_NV           0x8623\n#define GL_ATTRIB_ARRAY_STRIDE_NV         0x8624\n#define GL_ATTRIB_ARRAY_TYPE_NV           0x8625\n#define GL_CURRENT_ATTRIB_NV              0x8626\n#define GL_PROGRAM_LENGTH_NV              0x8627\n#define GL_PROGRAM_STRING_NV              0x8628\n#define GL_MODELVIEW_PROJECTION_NV        0x8629\n#define GL_IDENTITY_NV                    0x862A\n#define GL_INVERSE_NV                     0x862B\n#define GL_TRANSPOSE_NV                   0x862C\n#define GL_INVERSE_TRANSPOSE_NV           0x862D\n#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E\n#define GL_MAX_TRACK_MATRICES_NV          0x862F\n#define GL_MATRIX0_NV                     0x8630\n#define GL_MATRIX1_NV                     0x8631\n#define GL_MATRIX2_NV                     0x8632\n#define GL_MATRIX3_NV                     0x8633\n#define GL_MATRIX4_NV                     0x8634\n#define GL_MATRIX5_NV                     0x8635\n#define GL_MATRIX6_NV                     0x8636\n#define GL_MATRIX7_NV                     0x8637\n#define GL_CURRENT_MATRIX_STACK_DEPTH_NV  0x8640\n#define GL_CURRENT_MATRIX_NV              0x8641\n#define GL_VERTEX_PROGRAM_POINT_SIZE_NV   0x8642\n#define GL_VERTEX_PROGRAM_TWO_SIDE_NV     0x8643\n#define GL_PROGRAM_PARAMETER_NV           0x8644\n#define GL_ATTRIB_ARRAY_POINTER_NV        0x8645\n#define GL_PROGRAM_TARGET_NV              0x8646\n#define GL_PROGRAM_RESIDENT_NV            0x8647\n#define GL_TRACK_MATRIX_NV                0x8648\n#define GL_TRACK_MATRIX_TRANSFORM_NV      0x8649\n#define GL_VERTEX_PROGRAM_BINDING_NV      0x864A\n#define GL_PROGRAM_ERROR_POSITION_NV      0x864B\n#define GL_VERTEX_ATTRIB_ARRAY0_NV        0x8650\n#define GL_VERTEX_ATTRIB_ARRAY1_NV        0x8651\n#define GL_VERTEX_ATTRIB_ARRAY2_NV        0x8652\n#define GL_VERTEX_ATTRIB_ARRAY3_NV        0x8653\n#define GL_VERTEX_ATTRIB_ARRAY4_NV        0x8654\n#define GL_VERTEX_ATTRIB_ARRAY5_NV        0x8655\n#define GL_VERTEX_ATTRIB_ARRAY6_NV        0x8656\n#define GL_VERTEX_ATTRIB_ARRAY7_NV        0x8657\n#define GL_VERTEX_ATTRIB_ARRAY8_NV        0x8658\n#define GL_VERTEX_ATTRIB_ARRAY9_NV        0x8659\n#define GL_VERTEX_ATTRIB_ARRAY10_NV       0x865A\n#define GL_VERTEX_ATTRIB_ARRAY11_NV       0x865B\n#define GL_VERTEX_ATTRIB_ARRAY12_NV       0x865C\n#define GL_VERTEX_ATTRIB_ARRAY13_NV       0x865D\n#define GL_VERTEX_ATTRIB_ARRAY14_NV       0x865E\n#define GL_VERTEX_ATTRIB_ARRAY15_NV       0x865F\n#define GL_MAP1_VERTEX_ATTRIB0_4_NV       0x8660\n#define GL_MAP1_VERTEX_ATTRIB1_4_NV       0x8661\n#define GL_MAP1_VERTEX_ATTRIB2_4_NV       0x8662\n#define GL_MAP1_VERTEX_ATTRIB3_4_NV       0x8663\n#define GL_MAP1_VERTEX_ATTRIB4_4_NV       0x8664\n#define GL_MAP1_VERTEX_ATTRIB5_4_NV       0x8665\n#define GL_MAP1_VERTEX_ATTRIB6_4_NV       0x8666\n#define GL_MAP1_VERTEX_ATTRIB7_4_NV       0x8667\n#define GL_MAP1_VERTEX_ATTRIB8_4_NV       0x8668\n#define GL_MAP1_VERTEX_ATTRIB9_4_NV       0x8669\n#define GL_MAP1_VERTEX_ATTRIB10_4_NV      0x866A\n#define GL_MAP1_VERTEX_ATTRIB11_4_NV      0x866B\n#define GL_MAP1_VERTEX_ATTRIB12_4_NV      0x866C\n#define GL_MAP1_VERTEX_ATTRIB13_4_NV      0x866D\n#define GL_MAP1_VERTEX_ATTRIB14_4_NV      0x866E\n#define GL_MAP1_VERTEX_ATTRIB15_4_NV      0x866F\n#define GL_MAP2_VERTEX_ATTRIB0_4_NV       0x8670\n#define GL_MAP2_VERTEX_ATTRIB1_4_NV       0x8671\n#define GL_MAP2_VERTEX_ATTRIB2_4_NV       0x8672\n#define GL_MAP2_VERTEX_ATTRIB3_4_NV       0x8673\n#define GL_MAP2_VERTEX_ATTRIB4_4_NV       0x8674\n#define GL_MAP2_VERTEX_ATTRIB5_4_NV       0x8675\n#define GL_MAP2_VERTEX_ATTRIB6_4_NV       0x8676\n#define GL_MAP2_VERTEX_ATTRIB7_4_NV       0x8677\n#define GL_MAP2_VERTEX_ATTRIB8_4_NV       0x8678\n#define GL_MAP2_VERTEX_ATTRIB9_4_NV       0x8679\n#define GL_MAP2_VERTEX_ATTRIB10_4_NV      0x867A\n#define GL_MAP2_VERTEX_ATTRIB11_4_NV      0x867B\n#define GL_MAP2_VERTEX_ATTRIB12_4_NV      0x867C\n#define GL_MAP2_VERTEX_ATTRIB13_4_NV      0x867D\n#define GL_MAP2_VERTEX_ATTRIB14_4_NV      0x867E\n#define GL_MAP2_VERTEX_ATTRIB15_4_NV      0x867F\n#endif\n\n#ifndef GL_SGIX_texture_coordinate_clamp\n#define GL_TEXTURE_MAX_CLAMP_S_SGIX       0x8369\n#define GL_TEXTURE_MAX_CLAMP_T_SGIX       0x836A\n#define GL_TEXTURE_MAX_CLAMP_R_SGIX       0x836B\n#endif\n\n#ifndef GL_SGIX_scalebias_hint\n#define GL_SCALEBIAS_HINT_SGIX            0x8322\n#endif\n\n#ifndef GL_OML_interlace\n#define GL_INTERLACE_OML                  0x8980\n#define GL_INTERLACE_READ_OML             0x8981\n#endif\n\n#ifndef GL_OML_subsample\n#define GL_FORMAT_SUBSAMPLE_24_24_OML     0x8982\n#define GL_FORMAT_SUBSAMPLE_244_244_OML   0x8983\n#endif\n\n#ifndef GL_OML_resample\n#define GL_PACK_RESAMPLE_OML              0x8984\n#define GL_UNPACK_RESAMPLE_OML            0x8985\n#define GL_RESAMPLE_REPLICATE_OML         0x8986\n#define GL_RESAMPLE_ZERO_FILL_OML         0x8987\n#define GL_RESAMPLE_AVERAGE_OML           0x8988\n#define GL_RESAMPLE_DECIMATE_OML          0x8989\n#endif\n\n#ifndef GL_NV_copy_depth_to_color\n#define GL_DEPTH_STENCIL_TO_RGBA_NV       0x886E\n#define GL_DEPTH_STENCIL_TO_BGRA_NV       0x886F\n#endif\n\n#ifndef GL_ATI_envmap_bumpmap\n#define GL_BUMP_ROT_MATRIX_ATI            0x8775\n#define GL_BUMP_ROT_MATRIX_SIZE_ATI       0x8776\n#define GL_BUMP_NUM_TEX_UNITS_ATI         0x8777\n#define GL_BUMP_TEX_UNITS_ATI             0x8778\n#define GL_DUDV_ATI                       0x8779\n#define GL_DU8DV8_ATI                     0x877A\n#define GL_BUMP_ENVMAP_ATI                0x877B\n#define GL_BUMP_TARGET_ATI                0x877C\n#endif\n\n#ifndef GL_ATI_fragment_shader\n#define GL_FRAGMENT_SHADER_ATI            0x8920\n#define GL_REG_0_ATI                      0x8921\n#define GL_REG_1_ATI                      0x8922\n#define GL_REG_2_ATI                      0x8923\n#define GL_REG_3_ATI                      0x8924\n#define GL_REG_4_ATI                      0x8925\n#define GL_REG_5_ATI                      0x8926\n#define GL_REG_6_ATI                      0x8927\n#define GL_REG_7_ATI                      0x8928\n#define GL_REG_8_ATI                      0x8929\n#define GL_REG_9_ATI                      0x892A\n#define GL_REG_10_ATI                     0x892B\n#define GL_REG_11_ATI                     0x892C\n#define GL_REG_12_ATI                     0x892D\n#define GL_REG_13_ATI                     0x892E\n#define GL_REG_14_ATI                     0x892F\n#define GL_REG_15_ATI                     0x8930\n#define GL_REG_16_ATI                     0x8931\n#define GL_REG_17_ATI                     0x8932\n#define GL_REG_18_ATI                     0x8933\n#define GL_REG_19_ATI                     0x8934\n#define GL_REG_20_ATI                     0x8935\n#define GL_REG_21_ATI                     0x8936\n#define GL_REG_22_ATI                     0x8937\n#define GL_REG_23_ATI                     0x8938\n#define GL_REG_24_ATI                     0x8939\n#define GL_REG_25_ATI                     0x893A\n#define GL_REG_26_ATI                     0x893B\n#define GL_REG_27_ATI                     0x893C\n#define GL_REG_28_ATI                     0x893D\n#define GL_REG_29_ATI                     0x893E\n#define GL_REG_30_ATI                     0x893F\n#define GL_REG_31_ATI                     0x8940\n#define GL_CON_0_ATI                      0x8941\n#define GL_CON_1_ATI                      0x8942\n#define GL_CON_2_ATI                      0x8943\n#define GL_CON_3_ATI                      0x8944\n#define GL_CON_4_ATI                      0x8945\n#define GL_CON_5_ATI                      0x8946\n#define GL_CON_6_ATI                      0x8947\n#define GL_CON_7_ATI                      0x8948\n#define GL_CON_8_ATI                      0x8949\n#define GL_CON_9_ATI                      0x894A\n#define GL_CON_10_ATI                     0x894B\n#define GL_CON_11_ATI                     0x894C\n#define GL_CON_12_ATI                     0x894D\n#define GL_CON_13_ATI                     0x894E\n#define GL_CON_14_ATI                     0x894F\n#define GL_CON_15_ATI                     0x8950\n#define GL_CON_16_ATI                     0x8951\n#define GL_CON_17_ATI                     0x8952\n#define GL_CON_18_ATI                     0x8953\n#define GL_CON_19_ATI                     0x8954\n#define GL_CON_20_ATI                     0x8955\n#define GL_CON_21_ATI                     0x8956\n#define GL_CON_22_ATI                     0x8957\n#define GL_CON_23_ATI                     0x8958\n#define GL_CON_24_ATI                     0x8959\n#define GL_CON_25_ATI                     0x895A\n#define GL_CON_26_ATI                     0x895B\n#define GL_CON_27_ATI                     0x895C\n#define GL_CON_28_ATI                     0x895D\n#define GL_CON_29_ATI                     0x895E\n#define GL_CON_30_ATI                     0x895F\n#define GL_CON_31_ATI                     0x8960\n#define GL_MOV_ATI                        0x8961\n#define GL_ADD_ATI                        0x8963\n#define GL_MUL_ATI                        0x8964\n#define GL_SUB_ATI                        0x8965\n#define GL_DOT3_ATI                       0x8966\n#define GL_DOT4_ATI                       0x8967\n#define GL_MAD_ATI                        0x8968\n#define GL_LERP_ATI                       0x8969\n#define GL_CND_ATI                        0x896A\n#define GL_CND0_ATI                       0x896B\n#define GL_DOT2_ADD_ATI                   0x896C\n#define GL_SECONDARY_INTERPOLATOR_ATI     0x896D\n#define GL_NUM_FRAGMENT_REGISTERS_ATI     0x896E\n#define GL_NUM_FRAGMENT_CONSTANTS_ATI     0x896F\n#define GL_NUM_PASSES_ATI                 0x8970\n#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI  0x8971\n#define GL_NUM_INSTRUCTIONS_TOTAL_ATI     0x8972\n#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973\n#define GL_NUM_LOOPBACK_COMPONENTS_ATI    0x8974\n#define GL_COLOR_ALPHA_PAIRING_ATI        0x8975\n#define GL_SWIZZLE_STR_ATI                0x8976\n#define GL_SWIZZLE_STQ_ATI                0x8977\n#define GL_SWIZZLE_STR_DR_ATI             0x8978\n#define GL_SWIZZLE_STQ_DQ_ATI             0x8979\n#define GL_SWIZZLE_STRQ_ATI               0x897A\n#define GL_SWIZZLE_STRQ_DQ_ATI            0x897B\n#define GL_RED_BIT_ATI                    0x00000001\n#define GL_GREEN_BIT_ATI                  0x00000002\n#define GL_BLUE_BIT_ATI                   0x00000004\n#define GL_2X_BIT_ATI                     0x00000001\n#define GL_4X_BIT_ATI                     0x00000002\n#define GL_8X_BIT_ATI                     0x00000004\n#define GL_HALF_BIT_ATI                   0x00000008\n#define GL_QUARTER_BIT_ATI                0x00000010\n#define GL_EIGHTH_BIT_ATI                 0x00000020\n#define GL_SATURATE_BIT_ATI               0x00000040\n#define GL_COMP_BIT_ATI                   0x00000002\n#define GL_NEGATE_BIT_ATI                 0x00000004\n#define GL_BIAS_BIT_ATI                   0x00000008\n#endif\n\n#ifndef GL_ATI_pn_triangles\n#define GL_PN_TRIANGLES_ATI               0x87F0\n#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1\n#define GL_PN_TRIANGLES_POINT_MODE_ATI    0x87F2\n#define GL_PN_TRIANGLES_NORMAL_MODE_ATI   0x87F3\n#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4\n#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5\n#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6\n#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7\n#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8\n#endif\n\n#ifndef GL_ATI_vertex_array_object\n#define GL_STATIC_ATI                     0x8760\n#define GL_DYNAMIC_ATI                    0x8761\n#define GL_PRESERVE_ATI                   0x8762\n#define GL_DISCARD_ATI                    0x8763\n#define GL_OBJECT_BUFFER_SIZE_ATI         0x8764\n#define GL_OBJECT_BUFFER_USAGE_ATI        0x8765\n#define GL_ARRAY_OBJECT_BUFFER_ATI        0x8766\n#define GL_ARRAY_OBJECT_OFFSET_ATI        0x8767\n#endif\n\n#ifndef GL_EXT_vertex_shader\n#define GL_VERTEX_SHADER_EXT              0x8780\n#define GL_VERTEX_SHADER_BINDING_EXT      0x8781\n#define GL_OP_INDEX_EXT                   0x8782\n#define GL_OP_NEGATE_EXT                  0x8783\n#define GL_OP_DOT3_EXT                    0x8784\n#define GL_OP_DOT4_EXT                    0x8785\n#define GL_OP_MUL_EXT                     0x8786\n#define GL_OP_ADD_EXT                     0x8787\n#define GL_OP_MADD_EXT                    0x8788\n#define GL_OP_FRAC_EXT                    0x8789\n#define GL_OP_MAX_EXT                     0x878A\n#define GL_OP_MIN_EXT                     0x878B\n#define GL_OP_SET_GE_EXT                  0x878C\n#define GL_OP_SET_LT_EXT                  0x878D\n#define GL_OP_CLAMP_EXT                   0x878E\n#define GL_OP_FLOOR_EXT                   0x878F\n#define GL_OP_ROUND_EXT                   0x8790\n#define GL_OP_EXP_BASE_2_EXT              0x8791\n#define GL_OP_LOG_BASE_2_EXT              0x8792\n#define GL_OP_POWER_EXT                   0x8793\n#define GL_OP_RECIP_EXT                   0x8794\n#define GL_OP_RECIP_SQRT_EXT              0x8795\n#define GL_OP_SUB_EXT                     0x8796\n#define GL_OP_CROSS_PRODUCT_EXT           0x8797\n#define GL_OP_MULTIPLY_MATRIX_EXT         0x8798\n#define GL_OP_MOV_EXT                     0x8799\n#define GL_OUTPUT_VERTEX_EXT              0x879A\n#define GL_OUTPUT_COLOR0_EXT              0x879B\n#define GL_OUTPUT_COLOR1_EXT              0x879C\n#define GL_OUTPUT_TEXTURE_COORD0_EXT      0x879D\n#define GL_OUTPUT_TEXTURE_COORD1_EXT      0x879E\n#define GL_OUTPUT_TEXTURE_COORD2_EXT      0x879F\n#define GL_OUTPUT_TEXTURE_COORD3_EXT      0x87A0\n#define GL_OUTPUT_TEXTURE_COORD4_EXT      0x87A1\n#define GL_OUTPUT_TEXTURE_COORD5_EXT      0x87A2\n#define GL_OUTPUT_TEXTURE_COORD6_EXT      0x87A3\n#define GL_OUTPUT_TEXTURE_COORD7_EXT      0x87A4\n#define GL_OUTPUT_TEXTURE_COORD8_EXT      0x87A5\n#define GL_OUTPUT_TEXTURE_COORD9_EXT      0x87A6\n#define GL_OUTPUT_TEXTURE_COORD10_EXT     0x87A7\n#define GL_OUTPUT_TEXTURE_COORD11_EXT     0x87A8\n#define GL_OUTPUT_TEXTURE_COORD12_EXT     0x87A9\n#define GL_OUTPUT_TEXTURE_COORD13_EXT     0x87AA\n#define GL_OUTPUT_TEXTURE_COORD14_EXT     0x87AB\n#define GL_OUTPUT_TEXTURE_COORD15_EXT     0x87AC\n#define GL_OUTPUT_TEXTURE_COORD16_EXT     0x87AD\n#define GL_OUTPUT_TEXTURE_COORD17_EXT     0x87AE\n#define GL_OUTPUT_TEXTURE_COORD18_EXT     0x87AF\n#define GL_OUTPUT_TEXTURE_COORD19_EXT     0x87B0\n#define GL_OUTPUT_TEXTURE_COORD20_EXT     0x87B1\n#define GL_OUTPUT_TEXTURE_COORD21_EXT     0x87B2\n#define GL_OUTPUT_TEXTURE_COORD22_EXT     0x87B3\n#define GL_OUTPUT_TEXTURE_COORD23_EXT     0x87B4\n#define GL_OUTPUT_TEXTURE_COORD24_EXT     0x87B5\n#define GL_OUTPUT_TEXTURE_COORD25_EXT     0x87B6\n#define GL_OUTPUT_TEXTURE_COORD26_EXT     0x87B7\n#define GL_OUTPUT_TEXTURE_COORD27_EXT     0x87B8\n#define GL_OUTPUT_TEXTURE_COORD28_EXT     0x87B9\n#define GL_OUTPUT_TEXTURE_COORD29_EXT     0x87BA\n#define GL_OUTPUT_TEXTURE_COORD30_EXT     0x87BB\n#define GL_OUTPUT_TEXTURE_COORD31_EXT     0x87BC\n#define GL_OUTPUT_FOG_EXT                 0x87BD\n#define GL_SCALAR_EXT                     0x87BE\n#define GL_VECTOR_EXT                     0x87BF\n#define GL_MATRIX_EXT                     0x87C0\n#define GL_VARIANT_EXT                    0x87C1\n#define GL_INVARIANT_EXT                  0x87C2\n#define GL_LOCAL_CONSTANT_EXT             0x87C3\n#define GL_LOCAL_EXT                      0x87C4\n#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5\n#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6\n#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7\n#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8\n#define GL_MAX_VERTEX_SHADER_LOCALS_EXT   0x87C9\n#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA\n#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB\n#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC\n#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INARIANTS_EXT 0x87CD\n#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE\n#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF\n#define GL_VERTEX_SHADER_VARIANTS_EXT     0x87D0\n#define GL_VERTEX_SHADER_INVARIANTS_EXT   0x87D1\n#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2\n#define GL_VERTEX_SHADER_LOCALS_EXT       0x87D3\n#define GL_VERTEX_SHADER_OPTIMIZED_EXT    0x87D4\n#define GL_X_EXT                          0x87D5\n#define GL_Y_EXT                          0x87D6\n#define GL_Z_EXT                          0x87D7\n#define GL_W_EXT                          0x87D8\n#define GL_NEGATIVE_X_EXT                 0x87D9\n#define GL_NEGATIVE_Y_EXT                 0x87DA\n#define GL_NEGATIVE_Z_EXT                 0x87DB\n#define GL_NEGATIVE_W_EXT                 0x87DC\n#define GL_ZERO_EXT                       0x87DD\n#define GL_ONE_EXT                        0x87DE\n#define GL_NEGATIVE_ONE_EXT               0x87DF\n#define GL_NORMALIZED_RANGE_EXT           0x87E0\n#define GL_FULL_RANGE_EXT                 0x87E1\n#define GL_CURRENT_VERTEX_EXT             0x87E2\n#define GL_MVP_MATRIX_EXT                 0x87E3\n#define GL_VARIANT_VALUE_EXT              0x87E4\n#define GL_VARIANT_DATATYPE_EXT           0x87E5\n#define GL_VARIANT_ARRAY_STRIDE_EXT       0x87E6\n#define GL_VARIANT_ARRAY_TYPE_EXT         0x87E7\n#define GL_VARIANT_ARRAY_EXT              0x87E8\n#define GL_VARIANT_ARRAY_POINTER_EXT      0x87E9\n#define GL_INVARIANT_VALUE_EXT            0x87EA\n#define GL_INVARIANT_DATATYPE_EXT         0x87EB\n#define GL_LOCAL_CONSTANT_VALUE_EXT       0x87EC\n#define GL_LOCAL_CONSTANT_DATATYPE_EXT    0x87ED\n#endif\n\n#ifndef GL_ATI_vertex_streams\n#define GL_MAX_VERTEX_STREAMS_ATI         0x876B\n#define GL_VERTEX_STREAM0_ATI             0x876C\n#define GL_VERTEX_STREAM1_ATI             0x876D\n#define GL_VERTEX_STREAM2_ATI             0x876E\n#define GL_VERTEX_STREAM3_ATI             0x876F\n#define GL_VERTEX_STREAM4_ATI             0x8770\n#define GL_VERTEX_STREAM5_ATI             0x8771\n#define GL_VERTEX_STREAM6_ATI             0x8772\n#define GL_VERTEX_STREAM7_ATI             0x8773\n#define GL_VERTEX_SOURCE_ATI              0x8774\n#endif\n\n#ifndef GL_ATI_element_array\n#define GL_ELEMENT_ARRAY_ATI              0x8768\n#define GL_ELEMENT_ARRAY_TYPE_ATI         0x8769\n#define GL_ELEMENT_ARRAY_POINTER_ATI      0x876A\n#endif\n\n#ifndef GL_SUN_mesh_array\n#define GL_QUAD_MESH_SUN                  0x8614\n#define GL_TRIANGLE_MESH_SUN              0x8615\n#endif\n\n#ifndef GL_SUN_slice_accum\n#define GL_SLICE_ACCUM_SUN                0x85CC\n#endif\n\n#ifndef GL_NV_multisample_filter_hint\n#define GL_MULTISAMPLE_FILTER_HINT_NV     0x8534\n#endif\n\n#ifndef GL_NV_depth_clamp\n#define GL_DEPTH_CLAMP_NV                 0x864F\n#endif\n\n#ifndef GL_NV_occlusion_query\n#define GL_PIXEL_COUNTER_BITS_NV          0x8864\n#define GL_CURRENT_OCCLUSION_QUERY_ID_NV  0x8865\n#define GL_PIXEL_COUNT_NV                 0x8866\n#define GL_PIXEL_COUNT_AVAILABLE_NV       0x8867\n#endif\n\n#ifndef GL_NV_point_sprite\n#define GL_POINT_SPRITE_NV                0x8861\n#define GL_COORD_REPLACE_NV               0x8862\n#define GL_POINT_SPRITE_R_MODE_NV         0x8863\n#endif\n\n#ifndef GL_NV_texture_shader3\n#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850\n#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851\n#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852\n#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853\n#define GL_OFFSET_HILO_TEXTURE_2D_NV      0x8854\n#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855\n#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856\n#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857\n#define GL_DEPENDENT_HILO_TEXTURE_2D_NV   0x8858\n#define GL_DEPENDENT_RGB_TEXTURE_3D_NV    0x8859\n#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A\n#define GL_DOT_PRODUCT_PASS_THROUGH_NV    0x885B\n#define GL_DOT_PRODUCT_TEXTURE_1D_NV      0x885C\n#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D\n#define GL_HILO8_NV                       0x885E\n#define GL_SIGNED_HILO8_NV                0x885F\n#define GL_FORCE_BLUE_TO_ONE_NV           0x8860\n#endif\n\n#ifndef GL_NV_vertex_program1_1\n#endif\n\n\n/*************************************************************/\n\n#ifndef GL_VERSION_1_2\n#define GL_VERSION_1_2 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBlendColor (GLclampf, GLclampf, GLclampf, GLclampf);\nGLAPI void APIENTRY glBlendEquation (GLenum);\nGLAPI void APIENTRY glDrawRangeElements (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *);\nGLAPI void APIENTRY glColorTable (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);\nGLAPI void APIENTRY glColorTableParameterfv (GLenum, GLenum, const GLfloat *);\nGLAPI void APIENTRY glColorTableParameteriv (GLenum, GLenum, const GLint *);\nGLAPI void APIENTRY glCopyColorTable (GLenum, GLenum, GLint, GLint, GLsizei);\nGLAPI void APIENTRY glGetColorTable (GLenum, GLenum, GLenum, GLvoid *);\nGLAPI void APIENTRY glGetColorTableParameterfv (GLenum, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetColorTableParameteriv (GLenum, GLenum, GLint *);\nGLAPI void APIENTRY glColorSubTable (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);\nGLAPI void APIENTRY glCopyColorSubTable (GLenum, GLsizei, GLint, GLint, GLsizei);\nGLAPI void APIENTRY glConvolutionFilter1D (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);\nGLAPI void APIENTRY glConvolutionFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);\nGLAPI void APIENTRY glConvolutionParameterf (GLenum, GLenum, GLfloat);\nGLAPI void APIENTRY glConvolutionParameterfv (GLenum, GLenum, const GLfloat *);\nGLAPI void APIENTRY glConvolutionParameteri (GLenum, GLenum, GLint);\nGLAPI void APIENTRY glConvolutionParameteriv (GLenum, GLenum, const GLint *);\nGLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum, GLenum, GLint, GLint, GLsizei);\nGLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei);\nGLAPI void APIENTRY glGetConvolutionFilter (GLenum, GLenum, GLenum, GLvoid *);\nGLAPI void APIENTRY glGetConvolutionParameterfv (GLenum, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetConvolutionParameteriv (GLenum, GLenum, GLint *);\nGLAPI void APIENTRY glGetSeparableFilter (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *);\nGLAPI void APIENTRY glSeparableFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *);\nGLAPI void APIENTRY glGetHistogram (GLenum, GLboolean, GLenum, GLenum, GLvoid *);\nGLAPI void APIENTRY glGetHistogramParameterfv (GLenum, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetHistogramParameteriv (GLenum, GLenum, GLint *);\nGLAPI void APIENTRY glGetMinmax (GLenum, GLboolean, GLenum, GLenum, GLvoid *);\nGLAPI void APIENTRY glGetMinmaxParameterfv (GLenum, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetMinmaxParameteriv (GLenum, GLenum, GLint *);\nGLAPI void APIENTRY glHistogram (GLenum, GLsizei, GLenum, GLboolean);\nGLAPI void APIENTRY glMinmax (GLenum, GLenum, GLboolean);\nGLAPI void APIENTRY glResetHistogram (GLenum);\nGLAPI void APIENTRY glResetMinmax (GLenum);\nGLAPI void APIENTRY glTexImage3D (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);\nGLAPI void APIENTRY glTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);\nGLAPI void APIENTRY glCopyTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);\ntypedef void (APIENTRY * PFNGLBLENDEQUATIONPROC) (GLenum mode);\ntypedef void (APIENTRY * PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);\ntypedef void (APIENTRY * PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);\ntypedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRY * PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);\ntypedef void (APIENTRY * PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);\ntypedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);\ntypedef void (APIENTRY * PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);\ntypedef void (APIENTRY * PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);\ntypedef void (APIENTRY * PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);\ntypedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params);\ntypedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params);\ntypedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);\ntypedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);\ntypedef void (APIENTRY * PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);\ntypedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);\ntypedef void (APIENTRY * PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);\ntypedef void (APIENTRY * PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);\ntypedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);\ntypedef void (APIENTRY * PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);\ntypedef void (APIENTRY * PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink);\ntypedef void (APIENTRY * PFNGLRESETHISTOGRAMPROC) (GLenum target);\ntypedef void (APIENTRY * PFNGLRESETMINMAXPROC) (GLenum target);\ntypedef void (APIENTRY * PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRY * PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);\n#endif\n\n#ifndef GL_VERSION_1_3\n#define GL_VERSION_1_3 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glActiveTexture (GLenum);\nGLAPI void APIENTRY glClientActiveTexture (GLenum);\nGLAPI void APIENTRY glMultiTexCoord1d (GLenum, GLdouble);\nGLAPI void APIENTRY glMultiTexCoord1dv (GLenum, const GLdouble *);\nGLAPI void APIENTRY glMultiTexCoord1f (GLenum, GLfloat);\nGLAPI void APIENTRY glMultiTexCoord1fv (GLenum, const GLfloat *);\nGLAPI void APIENTRY glMultiTexCoord1i (GLenum, GLint);\nGLAPI void APIENTRY glMultiTexCoord1iv (GLenum, const GLint *);\nGLAPI void APIENTRY glMultiTexCoord1s (GLenum, GLshort);\nGLAPI void APIENTRY glMultiTexCoord1sv (GLenum, const GLshort *);\nGLAPI void APIENTRY glMultiTexCoord2d (GLenum, GLdouble, GLdouble);\nGLAPI void APIENTRY glMultiTexCoord2dv (GLenum, const GLdouble *);\nGLAPI void APIENTRY glMultiTexCoord2f (GLenum, GLfloat, GLfloat);\nGLAPI void APIENTRY glMultiTexCoord2fv (GLenum, const GLfloat *);\nGLAPI void APIENTRY glMultiTexCoord2i (GLenum, GLint, GLint);\nGLAPI void APIENTRY glMultiTexCoord2iv (GLenum, const GLint *);\nGLAPI void APIENTRY glMultiTexCoord2s (GLenum, GLshort, GLshort);\nGLAPI void APIENTRY glMultiTexCoord2sv (GLenum, const GLshort *);\nGLAPI void APIENTRY glMultiTexCoord3d (GLenum, GLdouble, GLdouble, GLdouble);\nGLAPI void APIENTRY glMultiTexCoord3dv (GLenum, const GLdouble *);\nGLAPI void APIENTRY glMultiTexCoord3f (GLenum, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glMultiTexCoord3fv (GLenum, const GLfloat *);\nGLAPI void APIENTRY glMultiTexCoord3i (GLenum, GLint, GLint, GLint);\nGLAPI void APIENTRY glMultiTexCoord3iv (GLenum, const GLint *);\nGLAPI void APIENTRY glMultiTexCoord3s (GLenum, GLshort, GLshort, GLshort);\nGLAPI void APIENTRY glMultiTexCoord3sv (GLenum, const GLshort *);\nGLAPI void APIENTRY glMultiTexCoord4d (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);\nGLAPI void APIENTRY glMultiTexCoord4dv (GLenum, const GLdouble *);\nGLAPI void APIENTRY glMultiTexCoord4f (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glMultiTexCoord4fv (GLenum, const GLfloat *);\nGLAPI void APIENTRY glMultiTexCoord4i (GLenum, GLint, GLint, GLint, GLint);\nGLAPI void APIENTRY glMultiTexCoord4iv (GLenum, const GLint *);\nGLAPI void APIENTRY glMultiTexCoord4s (GLenum, GLshort, GLshort, GLshort, GLshort);\nGLAPI void APIENTRY glMultiTexCoord4sv (GLenum, const GLshort *);\nGLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *);\nGLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *);\nGLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *);\nGLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *);\nGLAPI void APIENTRY glSampleCoverage (GLclampf, GLboolean);\nGLAPI void APIENTRY glCompressedTexImage3D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glCompressedTexImage2D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glCompressedTexImage1D (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glCompressedTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glCompressedTexSubImage2D (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glCompressedTexSubImage1D (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glGetCompressedTexImage (GLenum, GLint, void *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLACTIVETEXTUREPROC) (GLenum texture);\ntypedef void (APIENTRY * PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v);\ntypedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m);\ntypedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m);\ntypedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m);\ntypedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m);\ntypedef void (APIENTRY * PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert);\ntypedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img);\n#endif\n\n#ifndef GL_ARB_multitexture\n#define GL_ARB_multitexture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glActiveTextureARB (GLenum);\nGLAPI void APIENTRY glClientActiveTextureARB (GLenum);\nGLAPI void APIENTRY glMultiTexCoord1dARB (GLenum, GLdouble);\nGLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum, const GLdouble *);\nGLAPI void APIENTRY glMultiTexCoord1fARB (GLenum, GLfloat);\nGLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum, const GLfloat *);\nGLAPI void APIENTRY glMultiTexCoord1iARB (GLenum, GLint);\nGLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum, const GLint *);\nGLAPI void APIENTRY glMultiTexCoord1sARB (GLenum, GLshort);\nGLAPI void APIENTRY glMultiTexCoord1svARB (GLenum, const GLshort *);\nGLAPI void APIENTRY glMultiTexCoord2dARB (GLenum, GLdouble, GLdouble);\nGLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum, const GLdouble *);\nGLAPI void APIENTRY glMultiTexCoord2fARB (GLenum, GLfloat, GLfloat);\nGLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum, const GLfloat *);\nGLAPI void APIENTRY glMultiTexCoord2iARB (GLenum, GLint, GLint);\nGLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum, const GLint *);\nGLAPI void APIENTRY glMultiTexCoord2sARB (GLenum, GLshort, GLshort);\nGLAPI void APIENTRY glMultiTexCoord2svARB (GLenum, const GLshort *);\nGLAPI void APIENTRY glMultiTexCoord3dARB (GLenum, GLdouble, GLdouble, GLdouble);\nGLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum, const GLdouble *);\nGLAPI void APIENTRY glMultiTexCoord3fARB (GLenum, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum, const GLfloat *);\nGLAPI void APIENTRY glMultiTexCoord3iARB (GLenum, GLint, GLint, GLint);\nGLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum, const GLint *);\nGLAPI void APIENTRY glMultiTexCoord3sARB (GLenum, GLshort, GLshort, GLshort);\nGLAPI void APIENTRY glMultiTexCoord3svARB (GLenum, const GLshort *);\nGLAPI void APIENTRY glMultiTexCoord4dARB (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);\nGLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum, const GLdouble *);\nGLAPI void APIENTRY glMultiTexCoord4fARB (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum, const GLfloat *);\nGLAPI void APIENTRY glMultiTexCoord4iARB (GLenum, GLint, GLint, GLint, GLint);\nGLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum, const GLint *);\nGLAPI void APIENTRY glMultiTexCoord4sARB (GLenum, GLshort, GLshort, GLshort, GLshort);\nGLAPI void APIENTRY glMultiTexCoord4svARB (GLenum, const GLshort *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLACTIVETEXTUREARBPROC) (GLenum texture);\ntypedef void (APIENTRY * PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);\ntypedef void (APIENTRY * PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);\n#endif\n\n#ifndef GL_ARB_transpose_matrix\n#define GL_ARB_transpose_matrix 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *);\nGLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *);\nGLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *);\nGLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);\ntypedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);\ntypedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);\ntypedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);\n#endif\n\n#ifndef GL_ARB_multisample\n#define GL_ARB_multisample 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glSampleCoverageARB (GLclampf, GLboolean);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert);\n#endif\n\n#ifndef GL_ARB_texture_env_add\n#define GL_ARB_texture_env_add 1\n#endif\n\n#ifndef GL_ARB_texture_cube_map\n#define GL_ARB_texture_cube_map 1\n#endif\n\n#ifndef GL_ARB_texture_compression\n#define GL_ARB_texture_compression 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glCompressedTexImage3DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glCompressedTexImage2DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glCompressedTexImage1DARB (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glGetCompressedTexImageARB (GLenum, GLint, void *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);\ntypedef void (APIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img);\n#endif\n\n#ifndef GL_ARB_texture_border_clamp\n#define GL_ARB_texture_border_clamp 1\n#endif\n\n#ifndef GL_ARB_point_parameters\n#define GL_ARB_point_parameters 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPointParameterfARB (GLenum, GLfloat);\nGLAPI void APIENTRY glPointParameterfvARB (GLenum, const GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param);\ntypedef void (APIENTRY * PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params);\n#endif\n\n#ifndef GL_ARB_vertex_blend\n#define GL_ARB_vertex_blend 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glWeightbvARB (GLint, const GLbyte *);\nGLAPI void APIENTRY glWeightsvARB (GLint, const GLshort *);\nGLAPI void APIENTRY glWeightivARB (GLint, const GLint *);\nGLAPI void APIENTRY glWeightfvARB (GLint, const GLfloat *);\nGLAPI void APIENTRY glWeightdvARB (GLint, const GLdouble *);\nGLAPI void APIENTRY glWeightubvARB (GLint, const GLubyte *);\nGLAPI void APIENTRY glWeightusvARB (GLint, const GLushort *);\nGLAPI void APIENTRY glWeightuivARB (GLint, const GLuint *);\nGLAPI void APIENTRY glWeightPointerARB (GLint, GLenum, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glVertexBlendARB (GLint);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights);\ntypedef void (APIENTRY * PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights);\ntypedef void (APIENTRY * PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights);\ntypedef void (APIENTRY * PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights);\ntypedef void (APIENTRY * PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights);\ntypedef void (APIENTRY * PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights);\ntypedef void (APIENTRY * PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights);\ntypedef void (APIENTRY * PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights);\ntypedef void (APIENTRY * PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\ntypedef void (APIENTRY * PFNGLVERTEXBLENDARBPROC) (GLint count);\n#endif\n\n#ifndef GL_ARB_matrix_palette\n#define GL_ARB_matrix_palette 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint);\nGLAPI void APIENTRY glMatrixIndexubvARB (GLint, const GLubyte *);\nGLAPI void APIENTRY glMatrixIndexusvARB (GLint, const GLushort *);\nGLAPI void APIENTRY glMatrixIndexuivARB (GLint, const GLuint *);\nGLAPI void APIENTRY glMatrixIndexPointerARB (GLint, GLenum, GLsizei, const GLvoid *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index);\ntypedef void (APIENTRY * PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices);\ntypedef void (APIENTRY * PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices);\ntypedef void (APIENTRY * PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices);\ntypedef void (APIENTRY * PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\n#endif\n\n#ifndef GL_ARB_texture_env_combine\n#define GL_ARB_texture_env_combine 1\n#endif\n\n#ifndef GL_ARB_texture_env_crossbar\n#define GL_ARB_texture_env_crossbar 1\n#endif\n\n#ifndef GL_ARB_texture_env_dot3\n#define GL_ARB_texture_env_dot3 1\n#endif\n\n#ifndef GL_ARB_texture_mirror_repeat\n#define GL_ARB_texture_mirror_repeat 1\n#endif\n\n#ifndef GL_ARB_depth_texture\n#define GL_ARB_depth_texture 1\n#endif\n\n#ifndef GL_ARB_shadow\n#define GL_ARB_shadow 1\n#endif\n\n#ifndef GL_ARB_shadow_ambient\n#define GL_ARB_shadow_ambient 1\n#endif\n\n#ifndef GL_ARB_window_pos\n#define GL_ARB_window_pos 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glWindowPos2dARB (GLdouble, GLdouble);\nGLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *);\nGLAPI void APIENTRY glWindowPos2fARB (GLfloat, GLfloat);\nGLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *);\nGLAPI void APIENTRY glWindowPos2iARB (GLint, GLint);\nGLAPI void APIENTRY glWindowPos2ivARB (const GLint *);\nGLAPI void APIENTRY glWindowPos2sARB (GLshort, GLshort);\nGLAPI void APIENTRY glWindowPos2svARB (const GLshort *);\nGLAPI void APIENTRY glWindowPos3dARB (GLdouble, GLdouble, GLdouble);\nGLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *);\nGLAPI void APIENTRY glWindowPos3fARB (GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *);\nGLAPI void APIENTRY glWindowPos3iARB (GLint, GLint, GLint);\nGLAPI void APIENTRY glWindowPos3ivARB (const GLint *);\nGLAPI void APIENTRY glWindowPos3sARB (GLshort, GLshort, GLshort);\nGLAPI void APIENTRY glWindowPos3svARB (const GLshort *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y);\ntypedef void (APIENTRY * PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y);\ntypedef void (APIENTRY * PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y);\ntypedef void (APIENTRY * PFNGLWINDOWPOS2IVARBPROC) (const GLint *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y);\ntypedef void (APIENTRY * PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRY * PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z);\ntypedef void (APIENTRY * PFNGLWINDOWPOS3IVARBPROC) (const GLint *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z);\ntypedef void (APIENTRY * PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v);\n#endif\n\n#ifndef GL_EXT_abgr\n#define GL_EXT_abgr 1\n#endif\n\n#ifndef GL_EXT_blend_color\n#define GL_EXT_blend_color 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);\n#endif\n\n#ifndef GL_EXT_polygon_offset\n#define GL_EXT_polygon_offset 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPolygonOffsetEXT (GLfloat, GLfloat);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias);\n#endif\n\n#ifndef GL_EXT_texture\n#define GL_EXT_texture 1\n#endif\n\n#ifndef GL_EXT_texture3D\n#define GL_EXT_texture3D 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexImage3DEXT (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);\nGLAPI void APIENTRY glTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRY * PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);\n#endif\n\n#ifndef GL_SGIS_texture_filter4\n#define GL_SGIS_texture_filter4 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum, GLenum, GLfloat *);\nGLAPI void APIENTRY glTexFilterFuncSGIS (GLenum, GLenum, GLsizei, const GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights);\ntypedef void (APIENTRY * PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);\n#endif\n\n#ifndef GL_EXT_subtexture\n#define GL_EXT_subtexture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexSubImage1DEXT (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *);\nGLAPI void APIENTRY glTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRY * PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);\n#endif\n\n#ifndef GL_EXT_copy_texture\n#define GL_EXT_copy_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glCopyTexImage1DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint);\nGLAPI void APIENTRY glCopyTexImage2DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint);\nGLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei);\nGLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);\nGLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);\ntypedef void (APIENTRY * PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);\ntypedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);\ntypedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);\ntypedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);\n#endif\n\n#ifndef GL_EXT_histogram\n#define GL_EXT_histogram 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetHistogramEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *);\nGLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum, GLenum, GLint *);\nGLAPI void APIENTRY glGetMinmaxEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *);\nGLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum, GLenum, GLint *);\nGLAPI void APIENTRY glHistogramEXT (GLenum, GLsizei, GLenum, GLboolean);\nGLAPI void APIENTRY glMinmaxEXT (GLenum, GLenum, GLboolean);\nGLAPI void APIENTRY glResetHistogramEXT (GLenum);\nGLAPI void APIENTRY glResetMinmaxEXT (GLenum);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);\ntypedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);\ntypedef void (APIENTRY * PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);\ntypedef void (APIENTRY * PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink);\ntypedef void (APIENTRY * PFNGLRESETHISTOGRAMEXTPROC) (GLenum target);\ntypedef void (APIENTRY * PFNGLRESETMINMAXEXTPROC) (GLenum target);\n#endif\n\n#ifndef GL_EXT_convolution\n#define GL_EXT_convolution 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);\nGLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);\nGLAPI void APIENTRY glConvolutionParameterfEXT (GLenum, GLenum, GLfloat);\nGLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum, GLenum, const GLfloat *);\nGLAPI void APIENTRY glConvolutionParameteriEXT (GLenum, GLenum, GLint);\nGLAPI void APIENTRY glConvolutionParameterivEXT (GLenum, GLenum, const GLint *);\nGLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum, GLenum, GLint, GLint, GLsizei);\nGLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei);\nGLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum, GLenum, GLenum, GLvoid *);\nGLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum, GLenum, GLint *);\nGLAPI void APIENTRY glGetSeparableFilterEXT (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *);\nGLAPI void APIENTRY glSeparableFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);\ntypedef void (APIENTRY * PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);\ntypedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params);\ntypedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params);\ntypedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);\ntypedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);\ntypedef void (APIENTRY * PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);\ntypedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);\ntypedef void (APIENTRY * PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);\n#endif\n\n#ifndef GL_EXT_color_matrix\n#define GL_EXT_color_matrix 1\n#endif\n\n#ifndef GL_SGI_color_table\n#define GL_SGI_color_table 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glColorTableSGI (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);\nGLAPI void APIENTRY glColorTableParameterfvSGI (GLenum, GLenum, const GLfloat *);\nGLAPI void APIENTRY glColorTableParameterivSGI (GLenum, GLenum, const GLint *);\nGLAPI void APIENTRY glCopyColorTableSGI (GLenum, GLenum, GLint, GLint, GLsizei);\nGLAPI void APIENTRY glGetColorTableSGI (GLenum, GLenum, GLenum, GLvoid *);\nGLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum, GLenum, GLint *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);\ntypedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRY * PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);\ntypedef void (APIENTRY * PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);\ntypedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params);\n#endif\n\n#ifndef GL_SGIX_pixel_texture\n#define GL_SGIX_pixel_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPixelTexGenSGIX (GLenum);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLPIXELTEXGENSGIXPROC) (GLenum mode);\n#endif\n\n#ifndef GL_SGIS_pixel_texture\n#define GL_SGIS_pixel_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum, GLint);\nGLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum, const GLint *);\nGLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum, GLfloat);\nGLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum, const GLfloat *);\nGLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum, GLint *);\nGLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum, GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param);\ntypedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params);\ntypedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param);\ntypedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params);\n#endif\n\n#ifndef GL_SGIS_texture4D\n#define GL_SGIS_texture4D 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexImage4DSGIS (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);\nGLAPI void APIENTRY glTexSubImage4DSGIS (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels);\ntypedef void (APIENTRY * PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels);\n#endif\n\n#ifndef GL_SGI_texture_color_table\n#define GL_SGI_texture_color_table 1\n#endif\n\n#ifndef GL_EXT_cmyka\n#define GL_EXT_cmyka 1\n#endif\n\n#ifndef GL_EXT_texture_object\n#define GL_EXT_texture_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei, const GLuint *, GLboolean *);\nGLAPI void APIENTRY glBindTextureEXT (GLenum, GLuint);\nGLAPI void APIENTRY glDeleteTexturesEXT (GLsizei, const GLuint *);\nGLAPI void APIENTRY glGenTexturesEXT (GLsizei, GLuint *);\nGLAPI GLboolean APIENTRY glIsTextureEXT (GLuint);\nGLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei, const GLuint *, const GLclampf *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLboolean (APIENTRY * PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences);\ntypedef void (APIENTRY * PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture);\ntypedef void (APIENTRY * PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures);\ntypedef void (APIENTRY * PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures);\ntypedef GLboolean (APIENTRY * PFNGLISTEXTUREEXTPROC) (GLuint texture);\ntypedef void (APIENTRY * PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities);\n#endif\n\n#ifndef GL_SGIS_detail_texture\n#define GL_SGIS_detail_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDetailTexFuncSGIS (GLenum, GLsizei, const GLfloat *);\nGLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum, GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);\ntypedef void (APIENTRY * PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points);\n#endif\n\n#ifndef GL_SGIS_sharpen_texture\n#define GL_SGIS_sharpen_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum, GLsizei, const GLfloat *);\nGLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum, GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);\ntypedef void (APIENTRY * PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points);\n#endif\n\n#ifndef GL_EXT_packed_pixels\n#define GL_EXT_packed_pixels 1\n#endif\n\n#ifndef GL_SGIS_texture_lod\n#define GL_SGIS_texture_lod 1\n#endif\n\n#ifndef GL_SGIS_multisample\n#define GL_SGIS_multisample 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glSampleMaskSGIS (GLclampf, GLboolean);\nGLAPI void APIENTRY glSamplePatternSGIS (GLenum);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert);\ntypedef void (APIENTRY * PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern);\n#endif\n\n#ifndef GL_EXT_rescale_normal\n#define GL_EXT_rescale_normal 1\n#endif\n\n#ifndef GL_EXT_vertex_array\n#define GL_EXT_vertex_array 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glArrayElementEXT (GLint);\nGLAPI void APIENTRY glColorPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glDrawArraysEXT (GLenum, GLint, GLsizei);\nGLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei, GLsizei, const GLboolean *);\nGLAPI void APIENTRY glGetPointervEXT (GLenum, GLvoid* *);\nGLAPI void APIENTRY glIndexPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glNormalPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glTexCoordPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glVertexPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLARRAYELEMENTEXTPROC) (GLint i);\ntypedef void (APIENTRY * PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);\ntypedef void (APIENTRY * PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count);\ntypedef void (APIENTRY * PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer);\ntypedef void (APIENTRY * PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params);\ntypedef void (APIENTRY * PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);\ntypedef void (APIENTRY * PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);\ntypedef void (APIENTRY * PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);\ntypedef void (APIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);\n#endif\n\n#ifndef GL_EXT_misc_attribute\n#define GL_EXT_misc_attribute 1\n#endif\n\n#ifndef GL_SGIS_generate_mipmap\n#define GL_SGIS_generate_mipmap 1\n#endif\n\n#ifndef GL_SGIX_clipmap\n#define GL_SGIX_clipmap 1\n#endif\n\n#ifndef GL_SGIX_shadow\n#define GL_SGIX_shadow 1\n#endif\n\n#ifndef GL_SGIS_texture_edge_clamp\n#define GL_SGIS_texture_edge_clamp 1\n#endif\n\n#ifndef GL_SGIS_texture_border_clamp\n#define GL_SGIS_texture_border_clamp 1\n#endif\n\n#ifndef GL_EXT_blend_minmax\n#define GL_EXT_blend_minmax 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBlendEquationEXT (GLenum);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLBLENDEQUATIONEXTPROC) (GLenum mode);\n#endif\n\n#ifndef GL_EXT_blend_subtract\n#define GL_EXT_blend_subtract 1\n#endif\n\n#ifndef GL_EXT_blend_logic_op\n#define GL_EXT_blend_logic_op 1\n#endif\n\n#ifndef GL_SGIX_interlace\n#define GL_SGIX_interlace 1\n#endif\n\n#ifndef GL_SGIX_pixel_tiles\n#define GL_SGIX_pixel_tiles 1\n#endif\n\n#ifndef GL_SGIX_texture_select\n#define GL_SGIX_texture_select 1\n#endif\n\n#ifndef GL_SGIX_sprite\n#define GL_SGIX_sprite 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glSpriteParameterfSGIX (GLenum, GLfloat);\nGLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum, const GLfloat *);\nGLAPI void APIENTRY glSpriteParameteriSGIX (GLenum, GLint);\nGLAPI void APIENTRY glSpriteParameterivSGIX (GLenum, const GLint *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param);\ntypedef void (APIENTRY * PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params);\ntypedef void (APIENTRY * PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param);\ntypedef void (APIENTRY * PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params);\n#endif\n\n#ifndef GL_SGIX_texture_multi_buffer\n#define GL_SGIX_texture_multi_buffer 1\n#endif\n\n#ifndef GL_EXT_point_parameters\n#define GL_EXT_point_parameters 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPointParameterfEXT (GLenum, GLfloat);\nGLAPI void APIENTRY glPointParameterfvEXT (GLenum, const GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param);\ntypedef void (APIENTRY * PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params);\n#endif\n\n#ifndef GL_SGIS_point_parameters\n#define GL_SGIS_point_parameters 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPointParameterfSGIS (GLenum, GLfloat);\nGLAPI void APIENTRY glPointParameterfvSGIS (GLenum, const GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param);\ntypedef void (APIENTRY * PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);\n#endif\n\n#ifndef GL_SGIX_instruments\n#define GL_SGIX_instruments 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLint APIENTRY glGetInstrumentsSGIX (void);\nGLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei, GLint *);\nGLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *);\nGLAPI void APIENTRY glReadInstrumentsSGIX (GLint);\nGLAPI void APIENTRY glStartInstrumentsSGIX (void);\nGLAPI void APIENTRY glStopInstrumentsSGIX (GLint);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLint (APIENTRY * PFNGLGETINSTRUMENTSSGIXPROC) (void);\ntypedef void (APIENTRY * PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer);\ntypedef GLint (APIENTRY * PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p);\ntypedef void (APIENTRY * PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker);\ntypedef void (APIENTRY * PFNGLSTARTINSTRUMENTSSGIXPROC) (void);\ntypedef void (APIENTRY * PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker);\n#endif\n\n#ifndef GL_SGIX_texture_scale_bias\n#define GL_SGIX_texture_scale_bias 1\n#endif\n\n#ifndef GL_SGIX_framezoom\n#define GL_SGIX_framezoom 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFrameZoomSGIX (GLint);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLFRAMEZOOMSGIXPROC) (GLint factor);\n#endif\n\n#ifndef GL_SGIX_tag_sample_buffer\n#define GL_SGIX_tag_sample_buffer 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTagSampleBufferSGIX (void);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC) (void);\n#endif\n\n#ifndef GL_SGIX_polynomial_ffd\n#define GL_SGIX_polynomial_ffd 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDeformationMap3dSGIX (GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble *);\nGLAPI void APIENTRY glDeformationMap3fSGIX (GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat *);\nGLAPI void APIENTRY glDeformSGIX (GLbitfield);\nGLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points);\ntypedef void (APIENTRY * PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points);\ntypedef void (APIENTRY * PFNGLDEFORMSGIXPROC) (GLbitfield mask);\ntypedef void (APIENTRY * PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask);\n#endif\n\n#ifndef GL_SGIX_reference_plane\n#define GL_SGIX_reference_plane 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation);\n#endif\n\n#ifndef GL_SGIX_flush_raster\n#define GL_SGIX_flush_raster 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFlushRasterSGIX (void);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void);\n#endif\n\n#ifndef GL_SGIX_depth_texture\n#define GL_SGIX_depth_texture 1\n#endif\n\n#ifndef GL_SGIS_fog_function\n#define GL_SGIS_fog_function 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFogFuncSGIS (GLsizei, const GLfloat *);\nGLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points);\ntypedef void (APIENTRY * PFNGLGETFOGFUNCSGISPROC) (GLfloat *points);\n#endif\n\n#ifndef GL_SGIX_fog_offset\n#define GL_SGIX_fog_offset 1\n#endif\n\n#ifndef GL_HP_image_transform\n#define GL_HP_image_transform 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glImageTransformParameteriHP (GLenum, GLenum, GLint);\nGLAPI void APIENTRY glImageTransformParameterfHP (GLenum, GLenum, GLfloat);\nGLAPI void APIENTRY glImageTransformParameterivHP (GLenum, GLenum, const GLint *);\nGLAPI void APIENTRY glImageTransformParameterfvHP (GLenum, GLenum, const GLfloat *);\nGLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum, GLenum, GLint *);\nGLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum, GLenum, GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param);\ntypedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param);\ntypedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params);\n#endif\n\n#ifndef GL_HP_convolution_border_modes\n#define GL_HP_convolution_border_modes 1\n#endif\n\n#ifndef GL_SGIX_texture_add_env\n#define GL_SGIX_texture_add_env 1\n#endif\n\n#ifndef GL_EXT_color_subtable\n#define GL_EXT_color_subtable 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glColorSubTableEXT (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);\nGLAPI void APIENTRY glCopyColorSubTableEXT (GLenum, GLsizei, GLint, GLint, GLsizei);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);\ntypedef void (APIENTRY * PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);\n#endif\n\n#ifndef GL_PGI_vertex_hints\n#define GL_PGI_vertex_hints 1\n#endif\n\n#ifndef GL_PGI_misc_hints\n#define GL_PGI_misc_hints 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glHintPGI (GLenum, GLint);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLHINTPGIPROC) (GLenum target, GLint mode);\n#endif\n\n#ifndef GL_EXT_paletted_texture\n#define GL_EXT_paletted_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glColorTableEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);\nGLAPI void APIENTRY glGetColorTableEXT (GLenum, GLenum, GLenum, GLvoid *);\nGLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum, GLenum, GLint *);\nGLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum, GLenum, GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);\ntypedef void (APIENTRY * PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data);\ntypedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);\n#endif\n\n#ifndef GL_EXT_clip_volume_hint\n#define GL_EXT_clip_volume_hint 1\n#endif\n\n#ifndef GL_SGIX_list_priority\n#define GL_SGIX_list_priority 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGetListParameterfvSGIX (GLuint, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetListParameterivSGIX (GLuint, GLenum, GLint *);\nGLAPI void APIENTRY glListParameterfSGIX (GLuint, GLenum, GLfloat);\nGLAPI void APIENTRY glListParameterfvSGIX (GLuint, GLenum, const GLfloat *);\nGLAPI void APIENTRY glListParameteriSGIX (GLuint, GLenum, GLint);\nGLAPI void APIENTRY glListParameterivSGIX (GLuint, GLenum, const GLint *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param);\ntypedef void (APIENTRY * PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRY * PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param);\ntypedef void (APIENTRY * PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params);\n#endif\n\n#ifndef GL_SGIX_ir_instrument1\n#define GL_SGIX_ir_instrument1 1\n#endif\n\n#ifndef GL_SGIX_calligraphic_fragment\n#define GL_SGIX_calligraphic_fragment 1\n#endif\n\n#ifndef GL_SGIX_texture_lod_bias\n#define GL_SGIX_texture_lod_bias 1\n#endif\n\n#ifndef GL_SGIX_shadow_ambient\n#define GL_SGIX_shadow_ambient 1\n#endif\n\n#ifndef GL_EXT_index_texture\n#define GL_EXT_index_texture 1\n#endif\n\n#ifndef GL_EXT_index_material\n#define GL_EXT_index_material 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glIndexMaterialEXT (GLenum, GLenum);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode);\n#endif\n\n#ifndef GL_EXT_index_func\n#define GL_EXT_index_func 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glIndexFuncEXT (GLenum, GLclampf);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref);\n#endif\n\n#ifndef GL_EXT_index_array_formats\n#define GL_EXT_index_array_formats 1\n#endif\n\n#ifndef GL_EXT_compiled_vertex_array\n#define GL_EXT_compiled_vertex_array 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glLockArraysEXT (GLint, GLsizei);\nGLAPI void APIENTRY glUnlockArraysEXT (void);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count);\ntypedef void (APIENTRY * PFNGLUNLOCKARRAYSEXTPROC) (void);\n#endif\n\n#ifndef GL_EXT_cull_vertex\n#define GL_EXT_cull_vertex 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glCullParameterdvEXT (GLenum, GLdouble *);\nGLAPI void APIENTRY glCullParameterfvEXT (GLenum, GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params);\ntypedef void (APIENTRY * PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params);\n#endif\n\n#ifndef GL_SGIX_ycrcb\n#define GL_SGIX_ycrcb 1\n#endif\n\n#ifndef GL_SGIX_fragment_lighting\n#define GL_SGIX_fragment_lighting 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum, GLenum);\nGLAPI void APIENTRY glFragmentLightfSGIX (GLenum, GLenum, GLfloat);\nGLAPI void APIENTRY glFragmentLightfvSGIX (GLenum, GLenum, const GLfloat *);\nGLAPI void APIENTRY glFragmentLightiSGIX (GLenum, GLenum, GLint);\nGLAPI void APIENTRY glFragmentLightivSGIX (GLenum, GLenum, const GLint *);\nGLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum, GLfloat);\nGLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum, const GLfloat *);\nGLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum, GLint);\nGLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum, const GLint *);\nGLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum, GLenum, GLfloat);\nGLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum, GLenum, const GLfloat *);\nGLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum, GLenum, GLint);\nGLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum, GLenum, const GLint *);\nGLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum, GLenum, GLint *);\nGLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum, GLenum, GLint *);\nGLAPI void APIENTRY glLightEnviSGIX (GLenum, GLint);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode);\ntypedef void (APIENTRY * PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param);\ntypedef void (APIENTRY * PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRY * PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param);\ntypedef void (APIENTRY * PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params);\ntypedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param);\ntypedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params);\ntypedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param);\ntypedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params);\ntypedef void (APIENTRY * PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param);\ntypedef void (APIENTRY * PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRY * PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param);\ntypedef void (APIENTRY * PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params);\ntypedef void (APIENTRY * PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param);\n#endif\n\n#ifndef GL_IBM_rasterpos_clip\n#define GL_IBM_rasterpos_clip 1\n#endif\n\n#ifndef GL_HP_texture_lighting\n#define GL_HP_texture_lighting 1\n#endif\n\n#ifndef GL_EXT_draw_range_elements\n#define GL_EXT_draw_range_elements 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDrawRangeElementsEXT (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);\n#endif\n\n#ifndef GL_WIN_phong_shading\n#define GL_WIN_phong_shading 1\n#endif\n\n#ifndef GL_WIN_specular_fog\n#define GL_WIN_specular_fog 1\n#endif\n\n#ifndef GL_EXT_light_texture\n#define GL_EXT_light_texture 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glApplyTextureEXT (GLenum);\nGLAPI void APIENTRY glTextureLightEXT (GLenum);\nGLAPI void APIENTRY glTextureMaterialEXT (GLenum, GLenum);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode);\ntypedef void (APIENTRY * PFNGLTEXTURELIGHTEXTPROC) (GLenum pname);\ntypedef void (APIENTRY * PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode);\n#endif\n\n#ifndef GL_SGIX_blend_alpha_minmax\n#define GL_SGIX_blend_alpha_minmax 1\n#endif\n\n#ifndef GL_EXT_bgra\n#define GL_EXT_bgra 1\n#endif\n\n#ifndef GL_SGIX_async\n#define GL_SGIX_async 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glAsyncMarkerSGIX (GLuint);\nGLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *);\nGLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *);\nGLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei);\nGLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint, GLsizei);\nGLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLASYNCMARKERSGIXPROC) (GLuint marker);\ntypedef GLint (APIENTRY * PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp);\ntypedef GLint (APIENTRY * PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp);\ntypedef GLuint (APIENTRY * PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range);\ntypedef void (APIENTRY * PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range);\ntypedef GLboolean (APIENTRY * PFNGLISASYNCMARKERSGIXPROC) (GLuint marker);\n#endif\n\n#ifndef GL_SGIX_async_pixel\n#define GL_SGIX_async_pixel 1\n#endif\n\n#ifndef GL_SGIX_async_histogram\n#define GL_SGIX_async_histogram 1\n#endif\n\n#ifndef GL_INTEL_parallel_arrays\n#define GL_INTEL_parallel_arrays 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertexPointervINTEL (GLint, GLenum, const GLvoid* *);\nGLAPI void APIENTRY glNormalPointervINTEL (GLenum, const GLvoid* *);\nGLAPI void APIENTRY glColorPointervINTEL (GLint, GLenum, const GLvoid* *);\nGLAPI void APIENTRY glTexCoordPointervINTEL (GLint, GLenum, const GLvoid* *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);\ntypedef void (APIENTRY * PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer);\ntypedef void (APIENTRY * PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);\ntypedef void (APIENTRY * PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);\n#endif\n\n#ifndef GL_HP_occlusion_test\n#define GL_HP_occlusion_test 1\n#endif\n\n#ifndef GL_EXT_pixel_transform\n#define GL_EXT_pixel_transform 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum, GLenum, GLint);\nGLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum, GLenum, GLfloat);\nGLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum, GLenum, const GLint *);\nGLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum, GLenum, const GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param);\ntypedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param);\ntypedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);\n#endif\n\n#ifndef GL_EXT_pixel_transform_color_table\n#define GL_EXT_pixel_transform_color_table 1\n#endif\n\n#ifndef GL_EXT_shared_texture_palette\n#define GL_EXT_shared_texture_palette 1\n#endif\n\n#ifndef GL_EXT_separate_specular_color\n#define GL_EXT_separate_specular_color 1\n#endif\n\n#ifndef GL_EXT_secondary_color\n#define GL_EXT_secondary_color 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte, GLbyte, GLbyte);\nGLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *);\nGLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble, GLdouble, GLdouble);\nGLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *);\nGLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *);\nGLAPI void APIENTRY glSecondaryColor3iEXT (GLint, GLint, GLint);\nGLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *);\nGLAPI void APIENTRY glSecondaryColor3sEXT (GLshort, GLshort, GLshort);\nGLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *);\nGLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte, GLubyte, GLubyte);\nGLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *);\nGLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint, GLuint, GLuint);\nGLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *);\nGLAPI void APIENTRY glSecondaryColor3usEXT (GLushort, GLushort, GLushort);\nGLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *);\nGLAPI void APIENTRY glSecondaryColorPointerEXT (GLint, GLenum, GLsizei, const GLvoid *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);\n#endif\n\n#ifndef GL_EXT_texture_perturb_normal\n#define GL_EXT_texture_perturb_normal 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTextureNormalEXT (GLenum);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLTEXTURENORMALEXTPROC) (GLenum mode);\n#endif\n\n#ifndef GL_EXT_multi_draw_arrays\n#define GL_EXT_multi_draw_arrays 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei);\nGLAPI void APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount);\ntypedef void (APIENTRY * PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);\n#endif\n\n#ifndef GL_EXT_fog_coord\n#define GL_EXT_fog_coord 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFogCoordfEXT (GLfloat);\nGLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *);\nGLAPI void APIENTRY glFogCoorddEXT (GLdouble);\nGLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *);\nGLAPI void APIENTRY glFogCoordPointerEXT (GLenum, GLsizei, const GLvoid *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLFOGCOORDFEXTPROC) (GLfloat coord);\ntypedef void (APIENTRY * PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord);\ntypedef void (APIENTRY * PFNGLFOGCOORDDEXTPROC) (GLdouble coord);\ntypedef void (APIENTRY * PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord);\ntypedef void (APIENTRY * PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);\n#endif\n\n#ifndef GL_REND_screen_coordinates\n#define GL_REND_screen_coordinates 1\n#endif\n\n#ifndef GL_EXT_coordinate_frame\n#define GL_EXT_coordinate_frame 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTangent3bEXT (GLbyte, GLbyte, GLbyte);\nGLAPI void APIENTRY glTangent3bvEXT (const GLbyte *);\nGLAPI void APIENTRY glTangent3dEXT (GLdouble, GLdouble, GLdouble);\nGLAPI void APIENTRY glTangent3dvEXT (const GLdouble *);\nGLAPI void APIENTRY glTangent3fEXT (GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glTangent3fvEXT (const GLfloat *);\nGLAPI void APIENTRY glTangent3iEXT (GLint, GLint, GLint);\nGLAPI void APIENTRY glTangent3ivEXT (const GLint *);\nGLAPI void APIENTRY glTangent3sEXT (GLshort, GLshort, GLshort);\nGLAPI void APIENTRY glTangent3svEXT (const GLshort *);\nGLAPI void APIENTRY glBinormal3bEXT (GLbyte, GLbyte, GLbyte);\nGLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *);\nGLAPI void APIENTRY glBinormal3dEXT (GLdouble, GLdouble, GLdouble);\nGLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *);\nGLAPI void APIENTRY glBinormal3fEXT (GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *);\nGLAPI void APIENTRY glBinormal3iEXT (GLint, GLint, GLint);\nGLAPI void APIENTRY glBinormal3ivEXT (const GLint *);\nGLAPI void APIENTRY glBinormal3sEXT (GLshort, GLshort, GLshort);\nGLAPI void APIENTRY glBinormal3svEXT (const GLshort *);\nGLAPI void APIENTRY glTangentPointerEXT (GLenum, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glBinormalPointerEXT (GLenum, GLsizei, const GLvoid *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz);\ntypedef void (APIENTRY * PFNGLTANGENT3BVEXTPROC) (const GLbyte *v);\ntypedef void (APIENTRY * PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz);\ntypedef void (APIENTRY * PFNGLTANGENT3DVEXTPROC) (const GLdouble *v);\ntypedef void (APIENTRY * PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz);\ntypedef void (APIENTRY * PFNGLTANGENT3FVEXTPROC) (const GLfloat *v);\ntypedef void (APIENTRY * PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz);\ntypedef void (APIENTRY * PFNGLTANGENT3IVEXTPROC) (const GLint *v);\ntypedef void (APIENTRY * PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz);\ntypedef void (APIENTRY * PFNGLTANGENT3SVEXTPROC) (const GLshort *v);\ntypedef void (APIENTRY * PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz);\ntypedef void (APIENTRY * PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v);\ntypedef void (APIENTRY * PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz);\ntypedef void (APIENTRY * PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v);\ntypedef void (APIENTRY * PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz);\ntypedef void (APIENTRY * PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v);\ntypedef void (APIENTRY * PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz);\ntypedef void (APIENTRY * PFNGLBINORMAL3IVEXTPROC) (const GLint *v);\ntypedef void (APIENTRY * PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz);\ntypedef void (APIENTRY * PFNGLBINORMAL3SVEXTPROC) (const GLshort *v);\ntypedef void (APIENTRY * PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);\ntypedef void (APIENTRY * PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);\n#endif\n\n#ifndef GL_EXT_texture_env_combine\n#define GL_EXT_texture_env_combine 1\n#endif\n\n#ifndef GL_APPLE_specular_vector\n#define GL_APPLE_specular_vector 1\n#endif\n\n#ifndef GL_APPLE_transform_hint\n#define GL_APPLE_transform_hint 1\n#endif\n\n#ifndef GL_SGIX_fog_scale\n#define GL_SGIX_fog_scale 1\n#endif\n\n#ifndef GL_SUNX_constant_data\n#define GL_SUNX_constant_data 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFinishTextureSUNX (void);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLFINISHTEXTURESUNXPROC) (void);\n#endif\n\n#ifndef GL_SUN_global_alpha\n#define GL_SUN_global_alpha 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte);\nGLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort);\nGLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint);\nGLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat);\nGLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble);\nGLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte);\nGLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort);\nGLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor);\ntypedef void (APIENTRY * PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor);\ntypedef void (APIENTRY * PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor);\ntypedef void (APIENTRY * PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor);\ntypedef void (APIENTRY * PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor);\ntypedef void (APIENTRY * PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor);\ntypedef void (APIENTRY * PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor);\ntypedef void (APIENTRY * PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor);\n#endif\n\n#ifndef GL_SUN_triangle_list\n#define GL_SUN_triangle_list 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glReplacementCodeuiSUN (GLuint);\nGLAPI void APIENTRY glReplacementCodeusSUN (GLushort);\nGLAPI void APIENTRY glReplacementCodeubSUN (GLubyte);\nGLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *);\nGLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *);\nGLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *);\nGLAPI void APIENTRY glReplacementCodePointerSUN (GLenum, GLsizei, const GLvoid* *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer);\n#endif\n\n#ifndef GL_SUN_vertex\n#define GL_SUN_vertex 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat);\nGLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *, const GLfloat *);\nGLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *, const GLfloat *);\nGLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *, const GLfloat *);\nGLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *);\nGLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *);\nGLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *, const GLfloat *);\nGLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *, const GLfloat *);\nGLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *, const GLubyte *, const GLfloat *);\nGLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *);\nGLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *);\nGLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *);\nGLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *);\nGLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLenum *, const GLfloat *);\nGLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLenum, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLenum *, const GLubyte *, const GLfloat *);\nGLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *);\nGLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *);\nGLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *, const GLfloat *);\nGLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *);\nGLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *, const GLfloat *);\nGLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);\ntypedef void (APIENTRY * PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRY * PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLenum rc, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLenum rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLenum *rc, const GLubyte *c, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLenum rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *c, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *n, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLenum rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *tc, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);\n#endif\n\n#ifndef GL_EXT_blend_func_separate\n#define GL_EXT_blend_func_separate 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum, GLenum, GLenum, GLenum);\nGLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum, GLenum, GLenum, GLenum);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);\ntypedef void (APIENTRY * PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);\n#endif\n\n#ifndef GL_INGR_color_clamp\n#define GL_INGR_color_clamp 1\n#endif\n\n#ifndef GL_INGR_interlace_read\n#define GL_INGR_interlace_read 1\n#endif\n\n#ifndef GL_EXT_stencil_wrap\n#define GL_EXT_stencil_wrap 1\n#endif\n\n#ifndef GL_EXT_422_pixels\n#define GL_EXT_422_pixels 1\n#endif\n\n#ifndef GL_NV_texgen_reflection\n#define GL_NV_texgen_reflection 1\n#endif\n\n#ifndef GL_SUN_convolution_border_modes\n#define GL_SUN_convolution_border_modes 1\n#endif\n\n#ifndef GL_EXT_texture_env_add\n#define GL_EXT_texture_env_add 1\n#endif\n\n#ifndef GL_EXT_texture_lod_bias\n#define GL_EXT_texture_lod_bias 1\n#endif\n\n#ifndef GL_EXT_texture_filter_anisotropic\n#define GL_EXT_texture_filter_anisotropic 1\n#endif\n\n#ifndef GL_EXT_vertex_weighting\n#define GL_EXT_vertex_weighting 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertexWeightfEXT (GLfloat);\nGLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *);\nGLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei, GLenum, GLsizei, const GLvoid *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight);\ntypedef void (APIENTRY * PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight);\ntypedef void (APIENTRY * PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer);\n#endif\n\n#ifndef GL_NV_light_max_exponent\n#define GL_NV_light_max_exponent 1\n#endif\n\n#ifndef GL_NV_vertex_array_range\n#define GL_NV_vertex_array_range 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glFlushVertexArrayRangeNV (void);\nGLAPI void APIENTRY glVertexArrayRangeNV (GLsizei, const GLvoid *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void);\ntypedef void (APIENTRY * PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer);\n#endif\n\n#ifndef GL_NV_register_combiners\n#define GL_NV_register_combiners 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glCombinerParameterfvNV (GLenum, const GLfloat *);\nGLAPI void APIENTRY glCombinerParameterfNV (GLenum, GLfloat);\nGLAPI void APIENTRY glCombinerParameterivNV (GLenum, const GLint *);\nGLAPI void APIENTRY glCombinerParameteriNV (GLenum, GLint);\nGLAPI void APIENTRY glCombinerInputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum);\nGLAPI void APIENTRY glCombinerOutputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean);\nGLAPI void APIENTRY glFinalCombinerInputNV (GLenum, GLenum, GLenum, GLenum);\nGLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum, GLenum, GLenum, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum, GLenum, GLenum, GLenum, GLint *);\nGLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum, GLenum, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum, GLenum, GLenum, GLint *);\nGLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum, GLenum, GLint *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params);\ntypedef void (APIENTRY * PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param);\ntypedef void (APIENTRY * PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params);\ntypedef void (APIENTRY * PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param);\ntypedef void (APIENTRY * PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);\ntypedef void (APIENTRY * PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);\ntypedef void (APIENTRY * PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);\ntypedef void (APIENTRY * PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params);\n#endif\n\n#ifndef GL_NV_fog_distance\n#define GL_NV_fog_distance 1\n#endif\n\n#ifndef GL_NV_texgen_emboss\n#define GL_NV_texgen_emboss 1\n#endif\n\n#ifndef GL_NV_blend_square\n#define GL_NV_blend_square 1\n#endif\n\n#ifndef GL_NV_texture_env_combine4\n#define GL_NV_texture_env_combine4 1\n#endif\n\n#ifndef GL_MESA_resize_buffers\n#define GL_MESA_resize_buffers 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glResizeBuffersMESA (void);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLRESIZEBUFFERSMESAPROC) (void);\n#endif\n\n#ifndef GL_MESA_window_pos\n#define GL_MESA_window_pos 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glWindowPos2dMESA (GLdouble, GLdouble);\nGLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *);\nGLAPI void APIENTRY glWindowPos2fMESA (GLfloat, GLfloat);\nGLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *);\nGLAPI void APIENTRY glWindowPos2iMESA (GLint, GLint);\nGLAPI void APIENTRY glWindowPos2ivMESA (const GLint *);\nGLAPI void APIENTRY glWindowPos2sMESA (GLshort, GLshort);\nGLAPI void APIENTRY glWindowPos2svMESA (const GLshort *);\nGLAPI void APIENTRY glWindowPos3dMESA (GLdouble, GLdouble, GLdouble);\nGLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *);\nGLAPI void APIENTRY glWindowPos3fMESA (GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *);\nGLAPI void APIENTRY glWindowPos3iMESA (GLint, GLint, GLint);\nGLAPI void APIENTRY glWindowPos3ivMESA (const GLint *);\nGLAPI void APIENTRY glWindowPos3sMESA (GLshort, GLshort, GLshort);\nGLAPI void APIENTRY glWindowPos3svMESA (const GLshort *);\nGLAPI void APIENTRY glWindowPos4dMESA (GLdouble, GLdouble, GLdouble, GLdouble);\nGLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *);\nGLAPI void APIENTRY glWindowPos4fMESA (GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *);\nGLAPI void APIENTRY glWindowPos4iMESA (GLint, GLint, GLint, GLint);\nGLAPI void APIENTRY glWindowPos4ivMESA (const GLint *);\nGLAPI void APIENTRY glWindowPos4sMESA (GLshort, GLshort, GLshort, GLshort);\nGLAPI void APIENTRY glWindowPos4svMESA (const GLshort *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y);\ntypedef void (APIENTRY * PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y);\ntypedef void (APIENTRY * PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y);\ntypedef void (APIENTRY * PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y);\ntypedef void (APIENTRY * PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRY * PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z);\ntypedef void (APIENTRY * PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z);\ntypedef void (APIENTRY * PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRY * PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRY * PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w);\ntypedef void (APIENTRY * PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v);\ntypedef void (APIENTRY * PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w);\ntypedef void (APIENTRY * PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v);\n#endif\n\n#ifndef GL_IBM_cull_vertex\n#define GL_IBM_cull_vertex 1\n#endif\n\n#ifndef GL_IBM_multimode_draw_arrays\n#define GL_IBM_multimode_draw_arrays 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glMultiModeDrawArraysIBM (GLenum, const GLint *, const GLsizei *, GLsizei, GLint);\nGLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *, const GLsizei *, GLenum, const GLvoid* *, GLsizei, GLint);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLMULTIMODEDRAWARRAYSIBMPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);\ntypedef void (APIENTRY * PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount, GLint modestride);\n#endif\n\n#ifndef GL_IBM_vertex_array_lists\n#define GL_IBM_vertex_array_lists 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);\nGLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);\nGLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint, const GLboolean* *, GLint);\nGLAPI void APIENTRY glFogCoordPointerListIBM (GLenum, GLint, const GLvoid* *, GLint);\nGLAPI void APIENTRY glIndexPointerListIBM (GLenum, GLint, const GLvoid* *, GLint);\nGLAPI void APIENTRY glNormalPointerListIBM (GLenum, GLint, const GLvoid* *, GLint);\nGLAPI void APIENTRY glTexCoordPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);\nGLAPI void APIENTRY glVertexPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\ntypedef void (APIENTRY * PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\ntypedef void (APIENTRY * PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride);\ntypedef void (APIENTRY * PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\ntypedef void (APIENTRY * PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\ntypedef void (APIENTRY * PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\ntypedef void (APIENTRY * PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\ntypedef void (APIENTRY * PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);\n#endif\n\n#ifndef GL_SGIX_subsample\n#define GL_SGIX_subsample 1\n#endif\n\n#ifndef GL_SGIX_ycrcba\n#define GL_SGIX_ycrcba 1\n#endif\n\n#ifndef GL_SGIX_ycrcb_subsample\n#define GL_SGIX_ycrcb_subsample 1\n#endif\n\n#ifndef GL_SGIX_depth_pass_instrument\n#define GL_SGIX_depth_pass_instrument 1\n#endif\n\n#ifndef GL_3DFX_texture_compression_FXT1\n#define GL_3DFX_texture_compression_FXT1 1\n#endif\n\n#ifndef GL_3DFX_multisample\n#define GL_3DFX_multisample 1\n#endif\n\n#ifndef GL_3DFX_tbuffer\n#define GL_3DFX_tbuffer 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTbufferMask3DFX (GLuint);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLTBUFFERMASK3DFXPROC) (GLuint mask);\n#endif\n\n#ifndef GL_EXT_multisample\n#define GL_EXT_multisample 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glSampleMaskEXT (GLclampf, GLboolean);\nGLAPI void APIENTRY glSamplePatternEXT (GLenum);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert);\ntypedef void (APIENTRY * PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern);\n#endif\n\n#ifndef GL_SGIX_vertex_preclip\n#define GL_SGIX_vertex_preclip 1\n#endif\n\n#ifndef GL_SGIX_convolution_accuracy\n#define GL_SGIX_convolution_accuracy 1\n#endif\n\n#ifndef GL_SGIX_resample\n#define GL_SGIX_resample 1\n#endif\n\n#ifndef GL_SGIS_point_line_texgen\n#define GL_SGIS_point_line_texgen 1\n#endif\n\n#ifndef GL_SGIS_texture_color_mask\n#define GL_SGIS_texture_color_mask 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean, GLboolean, GLboolean, GLboolean);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);\n#endif\n\n#ifndef GL_SGIX_igloo_interface\n#define GL_SGIX_igloo_interface 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glIglooInterfaceSGIX (GLenum, const GLvoid *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params);\n#endif\n\n#ifndef GL_NV_fence\n#define GL_NV_fence 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDeleteFencesNV (GLsizei, const GLuint *);\nGLAPI void APIENTRY glGenFencesNV (GLsizei, GLuint *);\nGLAPI GLboolean APIENTRY glIsFenceNV (GLuint);\nGLAPI GLboolean APIENTRY glTestFenceNV (GLuint);\nGLAPI void APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *);\nGLAPI void APIENTRY glFinishFenceNV (GLuint);\nGLAPI void APIENTRY glSetFenceNV (GLuint, GLenum);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences);\ntypedef void (APIENTRY * PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences);\ntypedef GLboolean (APIENTRY * PFNGLISFENCENVPROC) (GLuint fence);\ntypedef GLboolean (APIENTRY * PFNGLTESTFENCENVPROC) (GLuint fence);\ntypedef void (APIENTRY * PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLFINISHFENCENVPROC) (GLuint fence);\ntypedef void (APIENTRY * PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);\n#endif\n\n#ifndef GL_NV_evaluators\n#define GL_NV_evaluators 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLint, GLint, GLboolean, const GLvoid *);\nGLAPI void APIENTRY glMapParameterivNV (GLenum, GLenum, const GLint *);\nGLAPI void APIENTRY glMapParameterfvNV (GLenum, GLenum, const GLfloat *);\nGLAPI void APIENTRY glGetMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLboolean, GLvoid *);\nGLAPI void APIENTRY glGetMapParameterivNV (GLenum, GLenum, GLint *);\nGLAPI void APIENTRY glGetMapParameterfvNV (GLenum, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum, GLuint, GLenum, GLint *);\nGLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum, GLuint, GLenum, GLfloat *);\nGLAPI void APIENTRY glEvalMapsNV (GLenum, GLenum);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points);\ntypedef void (APIENTRY * PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params);\ntypedef void (APIENTRY * PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points);\ntypedef void (APIENTRY * PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode);\n#endif\n\n#ifndef GL_NV_packed_depth_stencil\n#define GL_NV_packed_depth_stencil 1\n#endif\n\n#ifndef GL_NV_register_combiners2\n#define GL_NV_register_combiners2 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum, GLenum, const GLfloat *);\nGLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum, GLenum, GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params);\n#endif\n\n#ifndef GL_NV_texture_compression_vtc\n#define GL_NV_texture_compression_vtc 1\n#endif\n\n#ifndef GL_NV_texture_rectangle\n#define GL_NV_texture_rectangle 1\n#endif\n\n#ifndef GL_NV_texture_shader\n#define GL_NV_texture_shader 1\n#endif\n\n#ifndef GL_NV_texture_shader2\n#define GL_NV_texture_shader2 1\n#endif\n\n#ifndef GL_NV_vertex_array_range2\n#define GL_NV_vertex_array_range2 1\n#endif\n\n#ifndef GL_NV_vertex_program\n#define GL_NV_vertex_program 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei, const GLuint *, GLboolean *);\nGLAPI void APIENTRY glBindProgramNV (GLenum, GLuint);\nGLAPI void APIENTRY glDeleteProgramsNV (GLsizei, const GLuint *);\nGLAPI void APIENTRY glExecuteProgramNV (GLenum, GLuint, const GLfloat *);\nGLAPI void APIENTRY glGenProgramsNV (GLsizei, GLuint *);\nGLAPI void APIENTRY glGetProgramParameterdvNV (GLenum, GLuint, GLenum, GLdouble *);\nGLAPI void APIENTRY glGetProgramParameterfvNV (GLenum, GLuint, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetProgramivNV (GLuint, GLenum, GLint *);\nGLAPI void APIENTRY glGetProgramStringNV (GLuint, GLenum, GLubyte *);\nGLAPI void APIENTRY glGetTrackMatrixivNV (GLenum, GLuint, GLenum, GLint *);\nGLAPI void APIENTRY glGetVertexAttribdvNV (GLuint, GLenum, GLdouble *);\nGLAPI void APIENTRY glGetVertexAttribfvNV (GLuint, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetVertexAttribivNV (GLuint, GLenum, GLint *);\nGLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint, GLenum, GLvoid* *);\nGLAPI GLboolean APIENTRY glIsProgramNV (GLuint);\nGLAPI void APIENTRY glLoadProgramNV (GLenum, GLuint, GLsizei, const GLubyte *);\nGLAPI void APIENTRY glProgramParameter4dNV (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble);\nGLAPI void APIENTRY glProgramParameter4dvNV (GLenum, GLuint, const GLdouble *);\nGLAPI void APIENTRY glProgramParameter4fNV (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glProgramParameter4fvNV (GLenum, GLuint, const GLfloat *);\nGLAPI void APIENTRY glProgramParameters4dvNV (GLenum, GLuint, GLuint, const GLdouble *);\nGLAPI void APIENTRY glProgramParameters4fvNV (GLenum, GLuint, GLuint, const GLfloat *);\nGLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei, const GLuint *);\nGLAPI void APIENTRY glTrackMatrixNV (GLenum, GLuint, GLenum, GLenum);\nGLAPI void APIENTRY glVertexAttribPointerNV (GLuint, GLint, GLenum, GLsizei, const GLvoid *);\nGLAPI void APIENTRY glVertexAttrib1dNV (GLuint, GLdouble);\nGLAPI void APIENTRY glVertexAttrib1dvNV (GLuint, const GLdouble *);\nGLAPI void APIENTRY glVertexAttrib1fNV (GLuint, GLfloat);\nGLAPI void APIENTRY glVertexAttrib1fvNV (GLuint, const GLfloat *);\nGLAPI void APIENTRY glVertexAttrib1sNV (GLuint, GLshort);\nGLAPI void APIENTRY glVertexAttrib1svNV (GLuint, const GLshort *);\nGLAPI void APIENTRY glVertexAttrib2dNV (GLuint, GLdouble, GLdouble);\nGLAPI void APIENTRY glVertexAttrib2dvNV (GLuint, const GLdouble *);\nGLAPI void APIENTRY glVertexAttrib2fNV (GLuint, GLfloat, GLfloat);\nGLAPI void APIENTRY glVertexAttrib2fvNV (GLuint, const GLfloat *);\nGLAPI void APIENTRY glVertexAttrib2sNV (GLuint, GLshort, GLshort);\nGLAPI void APIENTRY glVertexAttrib2svNV (GLuint, const GLshort *);\nGLAPI void APIENTRY glVertexAttrib3dNV (GLuint, GLdouble, GLdouble, GLdouble);\nGLAPI void APIENTRY glVertexAttrib3dvNV (GLuint, const GLdouble *);\nGLAPI void APIENTRY glVertexAttrib3fNV (GLuint, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glVertexAttrib3fvNV (GLuint, const GLfloat *);\nGLAPI void APIENTRY glVertexAttrib3sNV (GLuint, GLshort, GLshort, GLshort);\nGLAPI void APIENTRY glVertexAttrib3svNV (GLuint, const GLshort *);\nGLAPI void APIENTRY glVertexAttrib4dNV (GLuint, GLdouble, GLdouble, GLdouble, GLdouble);\nGLAPI void APIENTRY glVertexAttrib4dvNV (GLuint, const GLdouble *);\nGLAPI void APIENTRY glVertexAttrib4fNV (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glVertexAttrib4fvNV (GLuint, const GLfloat *);\nGLAPI void APIENTRY glVertexAttrib4sNV (GLuint, GLshort, GLshort, GLshort, GLshort);\nGLAPI void APIENTRY glVertexAttrib4svNV (GLuint, const GLshort *);\nGLAPI void APIENTRY glVertexAttrib4ubNV (GLuint, GLubyte, GLubyte, GLubyte, GLubyte);\nGLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint, const GLubyte *);\nGLAPI void APIENTRY glVertexAttribs1dvNV (GLuint, GLsizei, const GLdouble *);\nGLAPI void APIENTRY glVertexAttribs1fvNV (GLuint, GLsizei, const GLfloat *);\nGLAPI void APIENTRY glVertexAttribs1svNV (GLuint, GLsizei, const GLshort *);\nGLAPI void APIENTRY glVertexAttribs2dvNV (GLuint, GLsizei, const GLdouble *);\nGLAPI void APIENTRY glVertexAttribs2fvNV (GLuint, GLsizei, const GLfloat *);\nGLAPI void APIENTRY glVertexAttribs2svNV (GLuint, GLsizei, const GLshort *);\nGLAPI void APIENTRY glVertexAttribs3dvNV (GLuint, GLsizei, const GLdouble *);\nGLAPI void APIENTRY glVertexAttribs3fvNV (GLuint, GLsizei, const GLfloat *);\nGLAPI void APIENTRY glVertexAttribs3svNV (GLuint, GLsizei, const GLshort *);\nGLAPI void APIENTRY glVertexAttribs4dvNV (GLuint, GLsizei, const GLdouble *);\nGLAPI void APIENTRY glVertexAttribs4fvNV (GLuint, GLsizei, const GLfloat *);\nGLAPI void APIENTRY glVertexAttribs4svNV (GLuint, GLsizei, const GLshort *);\nGLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint, GLsizei, const GLubyte *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLboolean (APIENTRY * PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences);\ntypedef void (APIENTRY * PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id);\ntypedef void (APIENTRY * PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);\ntypedef void (APIENTRY * PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params);\ntypedef void (APIENTRY * PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs);\ntypedef void (APIENTRY * PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params);\ntypedef void (APIENTRY * PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program);\ntypedef void (APIENTRY * PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params);\ntypedef void (APIENTRY * PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);\ntypedef GLboolean (APIENTRY * PFNGLISPROGRAMNVPROC) (GLuint id);\ntypedef void (APIENTRY * PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program);\ntypedef void (APIENTRY * PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRY * PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRY * PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);\ntypedef void (APIENTRY * PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);\ntypedef void (APIENTRY * PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v);\n#endif\n\n#ifndef GL_SGIX_texture_coordinate_clamp\n#define GL_SGIX_texture_coordinate_clamp 1\n#endif\n\n#ifndef GL_SGIX_scalebias_hint\n#define GL_SGIX_scalebias_hint 1\n#endif\n\n#ifndef GL_OML_interlace\n#define GL_OML_interlace 1\n#endif\n\n#ifndef GL_OML_subsample\n#define GL_OML_subsample 1\n#endif\n\n#ifndef GL_OML_resample\n#define GL_OML_resample 1\n#endif\n\n#ifndef GL_NV_copy_depth_to_color\n#define GL_NV_copy_depth_to_color 1\n#endif\n\n#ifndef GL_ATI_envmap_bumpmap\n#define GL_ATI_envmap_bumpmap 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glTexBumpParameterivATI (GLenum, const GLint *);\nGLAPI void APIENTRY glTexBumpParameterfvATI (GLenum, const GLfloat *);\nGLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum, GLint *);\nGLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum, GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param);\ntypedef void (APIENTRY * PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param);\ntypedef void (APIENTRY * PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param);\ntypedef void (APIENTRY * PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param);\n#endif\n\n#ifndef GL_ATI_fragment_shader\n#define GL_ATI_fragment_shader 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint);\nGLAPI void APIENTRY glBindFragmentShaderATI (GLuint);\nGLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint);\nGLAPI void APIENTRY glBeginFragmentShaderATI (void);\nGLAPI void APIENTRY glEndFragmentShaderATI (void);\nGLAPI void APIENTRY glPassTexCoordATI (GLuint, GLuint, GLenum);\nGLAPI void APIENTRY glSampleMapATI (GLuint, GLuint, GLenum);\nGLAPI void APIENTRY glColorFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);\nGLAPI void APIENTRY glColorFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);\nGLAPI void APIENTRY glColorFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);\nGLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint);\nGLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);\nGLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);\nGLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint, const GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLuint (APIENTRY * PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range);\ntypedef void (APIENTRY * PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id);\ntypedef void (APIENTRY * PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id);\ntypedef void (APIENTRY * PFNGLBEGINFRAGMENTSHADERATIPROC) (void);\ntypedef void (APIENTRY * PFNGLENDFRAGMENTSHADERATIPROC) (void);\ntypedef void (APIENTRY * PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle);\ntypedef void (APIENTRY * PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle);\ntypedef void (APIENTRY * PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);\ntypedef void (APIENTRY * PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);\ntypedef void (APIENTRY * PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);\ntypedef void (APIENTRY * PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);\ntypedef void (APIENTRY * PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);\ntypedef void (APIENTRY * PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);\ntypedef void (APIENTRY * PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value);\n#endif\n\n#ifndef GL_ATI_pn_triangles\n#define GL_ATI_pn_triangles 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPNTrianglesiATI (GLenum, GLint);\nGLAPI void APIENTRY glPNTrianglesfATI (GLenum, GLfloat);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param);\ntypedef void (APIENTRY * PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param);\n#endif\n\n#ifndef GL_ATI_vertex_array_object\n#define GL_ATI_vertex_array_object 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei, const GLvoid *, GLenum);\nGLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint);\nGLAPI void APIENTRY glUpdateObjectBufferATI (GLuint, GLuint, GLsizei, const GLvoid *, GLenum);\nGLAPI void APIENTRY glGetObjectBufferfvATI (GLuint, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetObjectBufferivATI (GLuint, GLenum, GLint *);\nGLAPI void APIENTRY glDeleteObjectBufferATI (GLuint);\nGLAPI void APIENTRY glArrayObjectATI (GLenum, GLint, GLenum, GLsizei, GLuint, GLuint);\nGLAPI void APIENTRY glGetArrayObjectfvATI (GLenum, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetArrayObjectivATI (GLenum, GLenum, GLint *);\nGLAPI void APIENTRY glVariantArrayObjectATI (GLuint, GLenum, GLsizei, GLuint, GLuint);\nGLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint, GLenum, GLint *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef GLuint (APIENTRY * PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage);\ntypedef GLboolean (APIENTRY * PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer);\ntypedef void (APIENTRY * PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve);\ntypedef void (APIENTRY * PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLDELETEOBJECTBUFFERATIPROC) (GLuint buffer);\ntypedef void (APIENTRY * PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);\ntypedef void (APIENTRY * PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);\ntypedef void (APIENTRY * PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params);\ntypedef void (APIENTRY * PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params);\n#endif\n\n#ifndef GL_EXT_vertex_shader\n#define GL_EXT_vertex_shader 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glBeginVertexShaderEXT (void);\nGLAPI void APIENTRY glEndVertexShaderEXT (void);\nGLAPI void APIENTRY glBindVertexShaderEXT (GLuint);\nGLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint);\nGLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint);\nGLAPI void APIENTRY glShaderOp1EXT (GLenum, GLuint, GLuint);\nGLAPI void APIENTRY glShaderOp2EXT (GLenum, GLuint, GLuint, GLuint);\nGLAPI void APIENTRY glShaderOp3EXT (GLenum, GLuint, GLuint, GLuint, GLuint);\nGLAPI void APIENTRY glSwizzleEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum);\nGLAPI void APIENTRY glWriteMaskEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum);\nGLAPI void APIENTRY glInsertComponentEXT (GLuint, GLuint, GLuint);\nGLAPI void APIENTRY glExtractComponentEXT (GLuint, GLuint, GLuint);\nGLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum, GLenum, GLenum, GLuint);\nGLAPI void APIENTRY glSetInvariantEXT (GLuint, GLenum, const void *);\nGLAPI void APIENTRY glSetLocalConstantEXT (GLuint, GLenum, const void *);\nGLAPI void APIENTRY glVariantbvEXT (GLuint, const GLbyte *);\nGLAPI void APIENTRY glVariantsvEXT (GLuint, const GLshort *);\nGLAPI void APIENTRY glVariantivEXT (GLuint, const GLint *);\nGLAPI void APIENTRY glVariantfvEXT (GLuint, const GLfloat *);\nGLAPI void APIENTRY glVariantdvEXT (GLuint, const GLdouble *);\nGLAPI void APIENTRY glVariantubvEXT (GLuint, const GLubyte *);\nGLAPI void APIENTRY glVariantusvEXT (GLuint, const GLushort *);\nGLAPI void APIENTRY glVariantuivEXT (GLuint, const GLuint *);\nGLAPI void APIENTRY glVariantPointerEXT (GLuint, GLenum, GLuint, const void *);\nGLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint);\nGLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint);\nGLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum, GLenum);\nGLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum, GLenum);\nGLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum, GLenum, GLenum);\nGLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum, GLenum);\nGLAPI GLuint APIENTRY glBindParameterEXT (GLenum);\nGLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint, GLenum);\nGLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint, GLenum, GLboolean *);\nGLAPI void APIENTRY glGetVariantIntegervEXT (GLuint, GLenum, GLint *);\nGLAPI void APIENTRY glGetVariantFloatvEXT (GLuint, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetVariantPointervEXT (GLuint, GLenum, GLvoid* *);\nGLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint, GLenum, GLboolean *);\nGLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint, GLenum, GLint *);\nGLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint, GLenum, GLfloat *);\nGLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint, GLenum, GLboolean *);\nGLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint, GLenum, GLint *);\nGLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint, GLenum, GLfloat *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLBEGINVERTEXSHADEREXTPROC) (void);\ntypedef void (APIENTRY * PFNGLENDVERTEXSHADEREXTPROC) (void);\ntypedef void (APIENTRY * PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id);\ntypedef GLuint (APIENTRY * PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range);\ntypedef void (APIENTRY * PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id);\ntypedef void (APIENTRY * PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1);\ntypedef void (APIENTRY * PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2);\ntypedef void (APIENTRY * PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);\ntypedef void (APIENTRY * PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);\ntypedef void (APIENTRY * PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);\ntypedef void (APIENTRY * PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);\ntypedef void (APIENTRY * PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);\ntypedef GLuint (APIENTRY * PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components);\ntypedef void (APIENTRY * PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr);\ntypedef void (APIENTRY * PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr);\ntypedef void (APIENTRY * PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr);\ntypedef void (APIENTRY * PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr);\ntypedef void (APIENTRY * PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr);\ntypedef void (APIENTRY * PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr);\ntypedef void (APIENTRY * PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr);\ntypedef void (APIENTRY * PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr);\ntypedef void (APIENTRY * PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr);\ntypedef void (APIENTRY * PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr);\ntypedef void (APIENTRY * PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr);\ntypedef void (APIENTRY * PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);\ntypedef void (APIENTRY * PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);\ntypedef GLuint (APIENTRY * PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value);\ntypedef GLuint (APIENTRY * PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value);\ntypedef GLuint (APIENTRY * PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value);\ntypedef GLuint (APIENTRY * PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value);\ntypedef GLuint (APIENTRY * PFNGLBINDPARAMETEREXTPROC) (GLenum value);\ntypedef GLboolean (APIENTRY * PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap);\ntypedef void (APIENTRY * PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);\ntypedef void (APIENTRY * PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);\ntypedef void (APIENTRY * PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);\ntypedef void (APIENTRY * PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data);\ntypedef void (APIENTRY * PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);\ntypedef void (APIENTRY * PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);\ntypedef void (APIENTRY * PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);\ntypedef void (APIENTRY * PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);\ntypedef void (APIENTRY * PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);\ntypedef void (APIENTRY * PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);\n#endif\n\n#ifndef GL_ATI_vertex_streams\n#define GL_ATI_vertex_streams 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glVertexStream1sATI (GLenum, GLshort);\nGLAPI void APIENTRY glVertexStream1svATI (GLenum, const GLshort *);\nGLAPI void APIENTRY glVertexStream1iATI (GLenum, GLint);\nGLAPI void APIENTRY glVertexStream1ivATI (GLenum, const GLint *);\nGLAPI void APIENTRY glVertexStream1fATI (GLenum, GLfloat);\nGLAPI void APIENTRY glVertexStream1fvATI (GLenum, const GLfloat *);\nGLAPI void APIENTRY glVertexStream1dATI (GLenum, GLdouble);\nGLAPI void APIENTRY glVertexStream1dvATI (GLenum, const GLdouble *);\nGLAPI void APIENTRY glVertexStream2sATI (GLenum, GLshort, GLshort);\nGLAPI void APIENTRY glVertexStream2svATI (GLenum, const GLshort *);\nGLAPI void APIENTRY glVertexStream2iATI (GLenum, GLint, GLint);\nGLAPI void APIENTRY glVertexStream2ivATI (GLenum, const GLint *);\nGLAPI void APIENTRY glVertexStream2fATI (GLenum, GLfloat, GLfloat);\nGLAPI void APIENTRY glVertexStream2fvATI (GLenum, const GLfloat *);\nGLAPI void APIENTRY glVertexStream2dATI (GLenum, GLdouble, GLdouble);\nGLAPI void APIENTRY glVertexStream2dvATI (GLenum, const GLdouble *);\nGLAPI void APIENTRY glVertexStream3sATI (GLenum, GLshort, GLshort, GLshort);\nGLAPI void APIENTRY glVertexStream3svATI (GLenum, const GLshort *);\nGLAPI void APIENTRY glVertexStream3iATI (GLenum, GLint, GLint, GLint);\nGLAPI void APIENTRY glVertexStream3ivATI (GLenum, const GLint *);\nGLAPI void APIENTRY glVertexStream3fATI (GLenum, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glVertexStream3fvATI (GLenum, const GLfloat *);\nGLAPI void APIENTRY glVertexStream3dATI (GLenum, GLdouble, GLdouble, GLdouble);\nGLAPI void APIENTRY glVertexStream3dvATI (GLenum, const GLdouble *);\nGLAPI void APIENTRY glVertexStream4sATI (GLenum, GLshort, GLshort, GLshort, GLshort);\nGLAPI void APIENTRY glVertexStream4svATI (GLenum, const GLshort *);\nGLAPI void APIENTRY glVertexStream4iATI (GLenum, GLint, GLint, GLint, GLint);\nGLAPI void APIENTRY glVertexStream4ivATI (GLenum, const GLint *);\nGLAPI void APIENTRY glVertexStream4fATI (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glVertexStream4fvATI (GLenum, const GLfloat *);\nGLAPI void APIENTRY glVertexStream4dATI (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);\nGLAPI void APIENTRY glVertexStream4dvATI (GLenum, const GLdouble *);\nGLAPI void APIENTRY glNormalStream3bATI (GLenum, GLbyte, GLbyte, GLbyte);\nGLAPI void APIENTRY glNormalStream3bvATI (GLenum, const GLbyte *);\nGLAPI void APIENTRY glNormalStream3sATI (GLenum, GLshort, GLshort, GLshort);\nGLAPI void APIENTRY glNormalStream3svATI (GLenum, const GLshort *);\nGLAPI void APIENTRY glNormalStream3iATI (GLenum, GLint, GLint, GLint);\nGLAPI void APIENTRY glNormalStream3ivATI (GLenum, const GLint *);\nGLAPI void APIENTRY glNormalStream3fATI (GLenum, GLfloat, GLfloat, GLfloat);\nGLAPI void APIENTRY glNormalStream3fvATI (GLenum, const GLfloat *);\nGLAPI void APIENTRY glNormalStream3dATI (GLenum, GLdouble, GLdouble, GLdouble);\nGLAPI void APIENTRY glNormalStream3dvATI (GLenum, const GLdouble *);\nGLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum);\nGLAPI void APIENTRY glVertexBlendEnviATI (GLenum, GLint);\nGLAPI void APIENTRY glVertexBlendEnvfATI (GLenum, GLfloat);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);\ntypedef void (APIENTRY * PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords);\ntypedef void (APIENTRY * PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz);\ntypedef void (APIENTRY * PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords);\ntypedef void (APIENTRY * PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz);\ntypedef void (APIENTRY * PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);\ntypedef void (APIENTRY * PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz);\ntypedef void (APIENTRY * PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);\ntypedef void (APIENTRY * PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz);\ntypedef void (APIENTRY * PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);\ntypedef void (APIENTRY * PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz);\ntypedef void (APIENTRY * PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);\ntypedef void (APIENTRY * PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream);\ntypedef void (APIENTRY * PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param);\ntypedef void (APIENTRY * PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param);\n#endif\n\n#ifndef GL_ATI_element_array\n#define GL_ATI_element_array 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glElementPointerATI (GLenum, const GLvoid *);\nGLAPI void APIENTRY glDrawElementArrayATI (GLenum, GLsizei);\nGLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum, GLuint, GLuint, GLsizei);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer);\ntypedef void (APIENTRY * PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count);\ntypedef void (APIENTRY * PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count);\n#endif\n\n#ifndef GL_SUN_mesh_array\n#define GL_SUN_mesh_array 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glDrawMeshArraysSUN (GLenum, GLint, GLsizei, GLsizei);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width);\n#endif\n\n#ifndef GL_SUN_slice_accum\n#define GL_SUN_slice_accum 1\n#endif\n\n#ifndef GL_NV_multisample_filter_hint\n#define GL_NV_multisample_filter_hint 1\n#endif\n\n#ifndef GL_NV_depth_clamp\n#define GL_NV_depth_clamp 1\n#endif\n\n#ifndef GL_NV_occlusion_query\n#define GL_NV_occlusion_query 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei, GLuint *);\nGLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei, const GLuint *);\nGLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint);\nGLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint);\nGLAPI void APIENTRY glEndOcclusionQueryNV (void);\nGLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint, GLenum, GLint *);\nGLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint, GLenum, GLuint *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids);\ntypedef void (APIENTRY * PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids);\ntypedef GLboolean (APIENTRY * PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id);\ntypedef void (APIENTRY * PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id);\ntypedef void (APIENTRY * PFNGLENDOCCLUSIONQUERYNVPROC) (void);\ntypedef void (APIENTRY * PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params);\ntypedef void (APIENTRY * PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params);\n#endif\n\n#ifndef GL_NV_point_sprite\n#define GL_NV_point_sprite 1\n#ifdef GL_GLEXT_PROTOTYPES\nGLAPI void APIENTRY glPointParameteriNV (GLenum, GLint);\nGLAPI void APIENTRY glPointParameterivNV (GLenum, const GLint *);\n#endif /* GL_GLEXT_PROTOTYPES */\ntypedef void (APIENTRY * PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param);\ntypedef void (APIENTRY * PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params);\n#endif\n\n#ifndef GL_NV_texture_shader3\n#define GL_NV_texture_shader3 1\n#endif\n\n#ifndef GL_NV_vertex_program1_1\n#define GL_NV_vertex_program1_1 1\n#endif\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n"
  },
  {
    "path": "Include/glide.h",
    "content": "/*\n** Copyright (c) 1995, 3Dfx Interactive, Inc.\n** All Rights Reserved.\n**\n** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.;\n** the contents of this file may not be disclosed to third parties, copied or\n** duplicated in any form, in whole or in part, without the prior written\n** permission of 3Dfx Interactive, Inc.\n**\n** RESTRICTED RIGHTS LEGEND:\n** Use, duplication or disclosure by the Government is subject to restrictions\n** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data\n** and Computer Software clause at DFARS 252.227-7013, and/or in similar or\n** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -\n** rights reserved under the Copyright Laws of the United States.\n*/\n\n/*\n** GLIDE.H\n**\n** The following #defines are relevant when using Glide:\n**\n** One of the following \"platform constants\" must be defined during\n** compilation:\n**\n**            __DOS__           Defined for 32-bit DOS applications\n**            __WIN32__         Defined for 32-bit Windows applications\n**            __sparc__         Defined for Sun Solaris/SunOS\n**            __linux__         Defined for Linux applications\n**            __IRIX__          Defined for SGI Irix applications\n**\n*/\n#ifndef __GLIDE_H__\n#define __GLIDE_H__\n\n#include <3dfx.h>\n#include <glidesys.h>\n#include <sst1vid.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n** -----------------------------------------------------------------------\n** TYPE DEFINITIONS\n** -----------------------------------------------------------------------\n*/\ntypedef FxU32 GrColor_t;\ntypedef FxU8  GrAlpha_t;\ntypedef FxU32 GrMipMapId_t;\ntypedef FxU8  GrFog_t;\ntypedef FxU32 GrContext_t;\ntypedef int (__stdcall *GrProc)();\n\n/*\n** -----------------------------------------------------------------------\n** CONSTANTS AND TYPES\n** -----------------------------------------------------------------------\n*/\n#define GR_NULL_MIPMAP_HANDLE  ((GrMipMapId_t) -1)\n\n#define GR_MIPMAPLEVELMASK_EVEN  FXBIT(0)\n#define GR_MIPMAPLEVELMASK_ODD  FXBIT(1)\n#define GR_MIPMAPLEVELMASK_BOTH (GR_MIPMAPLEVELMASK_EVEN | GR_MIPMAPLEVELMASK_ODD )\n\n#define GR_LODBIAS_BILINEAR     0.5\n#define GR_LODBIAS_TRILINEAR    0.0\n\ntypedef FxI32 GrChipID_t;\n#define GR_TMU0         0x0\n#define GR_TMU1         0x1\n#define GR_TMU2         0x2\n\n#define GR_FBI          0x0\n\ntypedef FxI32 GrCombineFunction_t;\n#define GR_COMBINE_FUNCTION_ZERO        0x0\n#define GR_COMBINE_FUNCTION_NONE        GR_COMBINE_FUNCTION_ZERO\n#define GR_COMBINE_FUNCTION_LOCAL       0x1\n#define GR_COMBINE_FUNCTION_LOCAL_ALPHA 0x2\n#define GR_COMBINE_FUNCTION_SCALE_OTHER 0x3\n#define GR_COMBINE_FUNCTION_BLEND_OTHER GR_COMBINE_FUNCTION_SCALE_OTHER\n#define GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL 0x4\n#define GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA 0x5 \n#define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL 0x6\n#define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL 0x7\n#define GR_COMBINE_FUNCTION_BLEND GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL\n#define GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA 0x8\n#define GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL 0x9\n#define GR_COMBINE_FUNCTION_BLEND_LOCAL GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL\n#define GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA 0x10\n\ntypedef FxI32 GrCombineFactor_t;\n#define GR_COMBINE_FACTOR_ZERO          0x0\n#define GR_COMBINE_FACTOR_NONE          GR_COMBINE_FACTOR_ZERO\n#define GR_COMBINE_FACTOR_LOCAL         0x1\n#define GR_COMBINE_FACTOR_OTHER_ALPHA   0x2\n#define GR_COMBINE_FACTOR_LOCAL_ALPHA   0x3\n#define GR_COMBINE_FACTOR_TEXTURE_ALPHA 0x4\n#define GR_COMBINE_FACTOR_TEXTURE_RGB   0x5\n#define GR_COMBINE_FACTOR_DETAIL_FACTOR GR_COMBINE_FACTOR_TEXTURE_ALPHA\n#define GR_COMBINE_FACTOR_LOD_FRACTION  0x5\n#define GR_COMBINE_FACTOR_ONE           0x8\n#define GR_COMBINE_FACTOR_ONE_MINUS_LOCAL 0x9\n#define GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA 0xa\n#define GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA 0xb\n#define GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA 0xc\n#define GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA\n#define GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION 0xd\n\n\ntypedef FxI32 GrCombineLocal_t;\n#define GR_COMBINE_LOCAL_ITERATED 0x0\n#define GR_COMBINE_LOCAL_CONSTANT 0x1\n#define GR_COMBINE_LOCAL_NONE GR_COMBINE_LOCAL_CONSTANT\n#define GR_COMBINE_LOCAL_DEPTH  0x2\n\ntypedef FxI32 GrCombineOther_t;\n#define GR_COMBINE_OTHER_ITERATED 0x0\n#define GR_COMBINE_OTHER_TEXTURE 0x1\n#define GR_COMBINE_OTHER_CONSTANT 0x2\n#define GR_COMBINE_OTHER_NONE GR_COMBINE_OTHER_CONSTANT\n\n\ntypedef FxI32 GrAlphaSource_t;\n#define GR_ALPHASOURCE_CC_ALPHA 0x0\n#define GR_ALPHASOURCE_ITERATED_ALPHA 0x1\n#define GR_ALPHASOURCE_TEXTURE_ALPHA 0x2\n#define GR_ALPHASOURCE_TEXTURE_ALPHA_TIMES_ITERATED_ALPHA 0x3\n\n\ntypedef FxI32 GrColorCombineFnc_t;\n#define GR_COLORCOMBINE_ZERO 0x0\n#define GR_COLORCOMBINE_CCRGB 0x1\n#define GR_COLORCOMBINE_ITRGB 0x2\n#define GR_COLORCOMBINE_ITRGB_DELTA0 0x3\n#define GR_COLORCOMBINE_DECAL_TEXTURE 0x4\n#define GR_COLORCOMBINE_TEXTURE_TIMES_CCRGB 0x5\n#define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB 0x6\n#define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB_DELTA0 0x7\n#define GR_COLORCOMBINE_TEXTURE_TIMES_ITRGB_ADD_ALPHA 0x8\n#define GR_COLORCOMBINE_TEXTURE_TIMES_ALPHA 0x9\n#define GR_COLORCOMBINE_TEXTURE_TIMES_ALPHA_ADD_ITRGB 0xa\n#define GR_COLORCOMBINE_TEXTURE_ADD_ITRGB 0xb\n#define GR_COLORCOMBINE_TEXTURE_SUB_ITRGB 0xc\n#define GR_COLORCOMBINE_CCRGB_BLEND_ITRGB_ON_TEXALPHA 0xd\n#define GR_COLORCOMBINE_DIFF_SPEC_A 0xe\n#define GR_COLORCOMBINE_DIFF_SPEC_B 0xf\n#define GR_COLORCOMBINE_ONE 0x10\n\ntypedef FxI32 GrAlphaBlendFnc_t;\n#define GR_BLEND_ZERO 0x0\n#define GR_BLEND_SRC_ALPHA 0x1\n#define GR_BLEND_SRC_COLOR 0x2\n#define GR_BLEND_DST_COLOR GR_BLEND_SRC_COLOR\n#define GR_BLEND_DST_ALPHA 0x3 \n#define GR_BLEND_ONE 0x4\n#define GR_BLEND_ONE_MINUS_SRC_ALPHA 0x5\n#define GR_BLEND_ONE_MINUS_SRC_COLOR 0x6\n#define GR_BLEND_ONE_MINUS_DST_COLOR GR_BLEND_ONE_MINUS_SRC_COLOR \n#define GR_BLEND_ONE_MINUS_DST_ALPHA 0x7\n#define GR_BLEND_RESERVED_8 0x8\n#define GR_BLEND_RESERVED_9 0x9\n#define GR_BLEND_RESERVED_A 0xa\n#define GR_BLEND_RESERVED_B 0xb\n#define GR_BLEND_RESERVED_C 0xc\n#define GR_BLEND_RESERVED_D 0xd\n#define GR_BLEND_RESERVED_E 0xe\n#define GR_BLEND_ALPHA_SATURATE 0xf\n#define GR_BLEND_PREFOG_COLOR GR_BLEND_ALPHA_SATURATE\n\ntypedef FxI32 GrAspectRatio_t;\n#define GR_ASPECT_LOG2_8x1        3       /* 8W x 1H */\n#define GR_ASPECT_LOG2_4x1        2       /* 4W x 1H */\n#define GR_ASPECT_LOG2_2x1        1       /* 2W x 1H */\n#define GR_ASPECT_LOG2_1x1        0       /* 1W x 1H */\n#define GR_ASPECT_LOG2_1x2       -1       /* 1W x 2H */\n#define GR_ASPECT_LOG2_1x4       -2       /* 1W x 4H */\n#define GR_ASPECT_LOG2_1x8       -3       /* 1W x 8H */\n\ntypedef FxI32 GrBuffer_t;\n#define GR_BUFFER_FRONTBUFFER   0x0\n#define GR_BUFFER_BACKBUFFER    0x1\n#define GR_BUFFER_AUXBUFFER     0x2\n#define GR_BUFFER_DEPTHBUFFER   0x3\n#define GR_BUFFER_ALPHABUFFER   0x4\n#define GR_BUFFER_TRIPLEBUFFER  0x5\n\ntypedef FxI32 GrChromakeyMode_t;\n#define GR_CHROMAKEY_DISABLE    0x0\n#define GR_CHROMAKEY_ENABLE     0x1\n\ntypedef FxI32 GrChromaRangeMode_t;\n#define GR_CHROMARANGE_RGB_ALL_EXT  0x0\n\n#define GR_CHROMARANGE_DISABLE_EXT  0x00\n#define GR_CHROMARANGE_ENABLE_EXT   0x01\n\ntypedef FxI32 GrTexChromakeyMode_t;\n#define GR_TEXCHROMA_DISABLE_EXT               0x0\n#define GR_TEXCHROMA_ENABLE_EXT                0x1\n\n#define GR_TEXCHROMARANGE_RGB_ALL_EXT  0x0\n\ntypedef FxI32 GrCmpFnc_t;\n#define GR_CMP_NEVER    0x0\n#define GR_CMP_LESS     0x1\n#define GR_CMP_EQUAL    0x2\n#define GR_CMP_LEQUAL   0x3\n#define GR_CMP_GREATER  0x4\n#define GR_CMP_NOTEQUAL 0x5\n#define GR_CMP_GEQUAL   0x6\n#define GR_CMP_ALWAYS   0x7\n\ntypedef FxI32 GrColorFormat_t;\n#define GR_COLORFORMAT_ARGB     0x0\n#define GR_COLORFORMAT_ABGR     0x1\n\n#define GR_COLORFORMAT_RGBA     0x2\n#define GR_COLORFORMAT_BGRA     0x3\n\ntypedef FxI32 GrCullMode_t;\n#define GR_CULL_DISABLE         0x0\n#define GR_CULL_NEGATIVE        0x1\n#define GR_CULL_POSITIVE        0x2\n\ntypedef FxI32 GrDepthBufferMode_t;\n#define GR_DEPTHBUFFER_DISABLE                  0x0\n#define GR_DEPTHBUFFER_ZBUFFER                  0x1\n#define GR_DEPTHBUFFER_WBUFFER                  0x2\n#define GR_DEPTHBUFFER_ZBUFFER_COMPARE_TO_BIAS  0x3\n#define GR_DEPTHBUFFER_WBUFFER_COMPARE_TO_BIAS  0x4\n\ntypedef FxI32 GrDitherMode_t;\n#define GR_DITHER_DISABLE       0x0\n#define GR_DITHER_2x2           0x1\n#define GR_DITHER_4x4           0x2\n\ntypedef FxI32 GrFogMode_t;\n#define GR_FOG_DISABLE                     0x0\n#define GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT  0x1\n#define GR_FOG_WITH_TABLE_ON_Q             0x2\n#define GR_FOG_WITH_TABLE_ON_W             GR_FOG_WITH_TABLE_ON_Q\n#define GR_FOG_WITH_ITERATED_Z             0x3\n#define GR_FOG_MULT2                       0x100\n#define GR_FOG_ADD2                        0x200\n\ntypedef FxU32 GrLock_t;\n#define GR_LFB_READ_ONLY  0x00\n#define GR_LFB_WRITE_ONLY 0x01\n#define GR_LFB_IDLE       0x00\n#define GR_LFB_NOIDLE     0x10\n\ntypedef FxI32 GrLfbBypassMode_t;\n#define GR_LFBBYPASS_DISABLE    0x0\n#define GR_LFBBYPASS_ENABLE     0x1\n\ntypedef FxI32 GrLfbWriteMode_t;\n#define GR_LFBWRITEMODE_565        0x0 /* RGB:RGB */\n#define GR_LFBWRITEMODE_555        0x1 /* RGB:RGB */\n#define GR_LFBWRITEMODE_1555       0x2 /* ARGB:ARGB */\n#define GR_LFBWRITEMODE_RESERVED1  0x3\n#define GR_LFBWRITEMODE_888        0x4 /* RGB */\n#define GR_LFBWRITEMODE_8888       0x5 /* ARGB */\n#define GR_LFBWRITEMODE_RESERVED2  0x6\n#define GR_LFBWRITEMODE_RESERVED3  0x7\n#define GR_LFBWRITEMODE_RESERVED4  0x8\n#define GR_LFBWRITEMODE_RESERVED5  0x9\n#define GR_LFBWRITEMODE_RESERVED6  0xa\n#define GR_LFBWRITEMODE_RESERVED7  0xb\n#define GR_LFBWRITEMODE_565_DEPTH  0xc /* RGB:DEPTH */\n#define GR_LFBWRITEMODE_555_DEPTH  0xd /* RGB:DEPTH */\n#define GR_LFBWRITEMODE_1555_DEPTH 0xe /* ARGB:DEPTH */\n#define GR_LFBWRITEMODE_ZA16       0xf /* DEPTH:DEPTH */\n#define GR_LFBWRITEMODE_ANY        0xFF\n\n\ntypedef FxI32 GrOriginLocation_t;\n#define GR_ORIGIN_UPPER_LEFT    0x0\n#define GR_ORIGIN_LOWER_LEFT    0x1\n#define GR_ORIGIN_ANY           0xFF\n\ntypedef struct {\n    int                size;\n    void               *lfbPtr;\n    FxU32              strideInBytes;        \n    GrLfbWriteMode_t   writeMode;\n    GrOriginLocation_t origin;\n} GrLfbInfo_t;\n\ntypedef FxI32 GrLOD_t;\n#define GR_LOD_LOG2_256         0x8\n#define GR_LOD_LOG2_128         0x7\n#define GR_LOD_LOG2_64          0x6\n#define GR_LOD_LOG2_32          0x5\n#define GR_LOD_LOG2_16          0x4\n#define GR_LOD_LOG2_8           0x3\n#define GR_LOD_LOG2_4           0x2\n#define GR_LOD_LOG2_2           0x1\n#define GR_LOD_LOG2_1           0x0\n\ntypedef FxI32 GrMipMapMode_t;\n#define GR_MIPMAP_DISABLE               0x0 /* no mip mapping  */\n#define GR_MIPMAP_NEAREST               0x1 /* use nearest mipmap */\n#define GR_MIPMAP_NEAREST_DITHER        0x2 /* GR_MIPMAP_NEAREST + LOD dith */\n\ntypedef FxI32 GrSmoothingMode_t;\n#define GR_SMOOTHING_DISABLE    0x0\n#define GR_SMOOTHING_ENABLE     0x1\n\ntypedef FxI32 GrTextureClampMode_t;\n#define GR_TEXTURECLAMP_WRAP        0x0\n#define GR_TEXTURECLAMP_CLAMP       0x1\n#define GR_TEXTURECLAMP_MIRROR_EXT  0x2\n\ntypedef FxI32 GrTextureCombineFnc_t;\n#define GR_TEXTURECOMBINE_ZERO          0x0 /* texout = 0 */\n#define GR_TEXTURECOMBINE_DECAL         0x1 /* texout = texthis */\n#define GR_TEXTURECOMBINE_OTHER         0x2 /* this TMU in passthru mode */\n#define GR_TEXTURECOMBINE_ADD           0x3 /* tout = tthis + t(this+1) */\n#define GR_TEXTURECOMBINE_MULTIPLY      0x4 /* texout = tthis * t(this+1) */\n#define GR_TEXTURECOMBINE_SUBTRACT      0x5 /* Sutract from upstream TMU */\n#define GR_TEXTURECOMBINE_DETAIL        0x6 /* detail--detail on tthis */\n#define GR_TEXTURECOMBINE_DETAIL_OTHER  0x7 /* detail--detail on tthis+1 */\n#define GR_TEXTURECOMBINE_TRILINEAR_ODD 0x8 /* trilinear--odd levels tthis*/\n#define GR_TEXTURECOMBINE_TRILINEAR_EVEN 0x9 /*trilinear--even levels tthis*/\n#define GR_TEXTURECOMBINE_ONE           0xa /* texout = 0xFFFFFFFF */\n\ntypedef FxI32 GrTextureFilterMode_t;\n#define GR_TEXTUREFILTER_POINT_SAMPLED  0x0\n#define GR_TEXTUREFILTER_BILINEAR       0x1\n\ntypedef FxI32 GrTextureFormat_t;\n#define GR_TEXFMT_8BIT                  0x0\n#define GR_TEXFMT_RGB_332 GR_TEXFMT_8BIT\n#define GR_TEXFMT_YIQ_422               0x1\n#define GR_TEXFMT_ALPHA_8               0x2 /* (0..0xFF) alpha     */\n#define GR_TEXFMT_INTENSITY_8           0x3 /* (0..0xFF) intensity */\n#define GR_TEXFMT_ALPHA_INTENSITY_44    0x4\n#define GR_TEXFMT_P_8                   0x5 /* 8-bit palette */\n#define GR_TEXFMT_RSVD0                 0x6\n#define GR_TEXFMT_RSVD1                 0x7\n#define GR_TEXFMT_16BIT                 0x8\n#define GR_TEXFMT_ARGB_8332 GR_TEXFMT_16BIT\n#define GR_TEXFMT_AYIQ_8422             0x9\n#define GR_TEXFMT_RGB_565               0xa\n#define GR_TEXFMT_ARGB_1555             0xb\n#define GR_TEXFMT_ARGB_4444             0xc\n#define GR_TEXFMT_ALPHA_INTENSITY_88    0xd\n#define GR_TEXFMT_AP_88                 0xe /* 8-bit alpha 8-bit palette */\n#define GR_TEXFMT_RSVD2                 0xf\n\ntypedef FxU32 GrTexTable_t;\n#define GR_TEXTABLE_NCC0                 0x0\n#define GR_TEXTABLE_NCC1                 0x1\n#define GR_TEXTABLE_PALETTE              0x2\n#define GR_TEXTABLE_PALETTE_6666_EXT     0x3\n\ntypedef FxU32 GrNCCTable_t;\n#define GR_NCCTABLE_NCC0    0x0\n#define GR_NCCTABLE_NCC1    0x1\n\ntypedef FxU32 GrTexBaseRange_t;\n#define GR_TEXBASE_256      0x3\n#define GR_TEXBASE_128      0x2\n#define GR_TEXBASE_64       0x1\n#define GR_TEXBASE_32_TO_1  0x0\n\n\ntypedef FxU32 GrEnableMode_t;\n#define GR_MODE_DISABLE     0x0\n#define GR_MODE_ENABLE      0x1\n\n#define GR_AA_ORDERED            0x01\n#define GR_ALLOW_MIPMAP_DITHER   0x02\n#define GR_PASSTHRU              0x03\n#define GR_SHAMELESS_PLUG        0x04\n#define GR_VIDEO_SMOOTHING       0x05\n\ntypedef FxU32 GrCoordinateSpaceMode_t;\n#define GR_WINDOW_COORDS    0x00\n#define GR_CLIP_COORDS      0x01\n\n/* Types of data in strips */\n#define GR_FLOAT        0\n#define GR_U8           1\n\n/* Parameters for strips */\n#define GR_PARAM_XY       0x01\n#define GR_PARAM_Z        0x02\n#define GR_PARAM_W        0x03\n#define GR_PARAM_Q        0x04\n#define GR_PARAM_FOG_EXT  0x05\n\n#define GR_PARAM_A        0x10\n\n#define GR_PARAM_RGB      0x20\n\n#define GR_PARAM_PARGB    0x30\n\n#define GR_PARAM_ST0      0x40\n#define GR_PARAM_ST1      GR_PARAM_ST0+1\n#define GR_PARAM_ST2      GR_PARAM_ST0+2\n\n#define GR_PARAM_Q0       0x50\n#define GR_PARAM_Q1       GR_PARAM_Q0+1\n#define GR_PARAM_Q2       GR_PARAM_Q0+2\n\n#define GR_PARAM_DISABLE  0x00\n#define GR_PARAM_ENABLE   0x01\n\n/*\n** grDrawVertexArray/grDrawVertexArrayContiguous primitive type\n*/\n#define GR_POINTS                        0\n#define GR_LINE_STRIP                    1\n#define GR_LINES                         2\n#define GR_POLYGON                       3\n#define GR_TRIANGLE_STRIP                4\n#define GR_TRIANGLE_FAN                  5\n#define GR_TRIANGLES                     6\n#define GR_TRIANGLE_STRIP_CONTINUE       7\n#define GR_TRIANGLE_FAN_CONTINUE         8\n\n/* \n** grGet/grReset types\n*/\n#define GR_BITS_DEPTH                   0x01\n#define GR_BITS_RGBA                    0x02\n#define GR_FIFO_FULLNESS                0x03\n#define GR_FOG_TABLE_ENTRIES            0x04\n#define GR_GAMMA_TABLE_ENTRIES          0x05\n#define GR_GLIDE_STATE_SIZE             0x06\n#define GR_GLIDE_VERTEXLAYOUT_SIZE      0x07\n#define GR_IS_BUSY                      0x08\n#define GR_LFB_PIXEL_PIPE               0x09\n#define GR_MAX_TEXTURE_SIZE             0x0a\n#define GR_MAX_TEXTURE_ASPECT_RATIO     0x0b\n#define GR_MEMORY_FB                    0x0c\n#define GR_MEMORY_TMU                   0x0d\n#define GR_MEMORY_UMA                   0x0e\n#define GR_NUM_BOARDS                   0x0f\n#define GR_NON_POWER_OF_TWO_TEXTURES    0x10\n#define GR_NUM_FB                       0x11\n#define GR_NUM_SWAP_HISTORY_BUFFER      0x12\n#define GR_NUM_TMU                      0x13\n#define GR_PENDING_BUFFERSWAPS          0x14\n#define GR_REVISION_FB                  0x15\n#define GR_REVISION_TMU                 0x16\n#define GR_STATS_LINES                  0x17  /* grGet/grReset */\n#define GR_STATS_PIXELS_AFUNC_FAIL      0x18\n#define GR_STATS_PIXELS_CHROMA_FAIL     0x19\n#define GR_STATS_PIXELS_DEPTHFUNC_FAIL  0x1a\n#define GR_STATS_PIXELS_IN              0x1b\n#define GR_STATS_PIXELS_OUT             0x1c\n#define GR_STATS_PIXELS                 0x1d  /* grReset */\n#define GR_STATS_POINTS                 0x1e  /* grGet/grReset */\n#define GR_STATS_TRIANGLES_IN           0x1f\n#define GR_STATS_TRIANGLES_OUT          0x20\n#define GR_STATS_TRIANGLES              0x21  /* grReset */\n#define GR_SWAP_HISTORY                 0x22\n#define GR_SUPPORTS_PASSTHRU            0x23\n#define GR_TEXTURE_ALIGN                0x24\n#define GR_VIDEO_POSITION               0x25\n#define GR_VIEWPORT                     0x26\n#define GR_WDEPTH_MIN_MAX               0x27\n#define GR_ZDEPTH_MIN_MAX               0x28\n#define GR_VERTEX_PARAMETER             0x29\n#define GR_BITS_GAMMA                   0x2a\n\n/*\n** grGetString types\n*/\n#define GR_EXTENSION                    0xa0\n#define GR_HARDWARE                     0xa1\n#define GR_RENDERER                     0xa2\n#define GR_VENDOR                       0xa3\n#define GR_VERSION                      0xa4\n\n/*\n** -----------------------------------------------------------------------\n** STRUCTURES\n** -----------------------------------------------------------------------\n*/\n\ntypedef struct {\n    GrLOD_t           smallLodLog2;\n    GrLOD_t           largeLodLog2;\n    GrAspectRatio_t   aspectRatioLog2;\n    GrTextureFormat_t format;\n    void              *data;\n} GrTexInfo;\n\ntypedef struct GrSstPerfStats_s {\n  FxU32  pixelsIn;              /* # pixels processed (minus buffer clears) */\n  FxU32  chromaFail;            /* # pixels not drawn due to chroma key */ \n  FxU32  zFuncFail;             /* # pixels not drawn due to Z comparison */\n  FxU32  aFuncFail;             /* # pixels not drawn due to alpha comparison */\n  FxU32  pixelsOut;             /* # pixels drawn (including buffer clears) */\n} GrSstPerfStats_t;\n\ntypedef struct {\n  GrScreenResolution_t resolution;\n  GrScreenRefresh_t    refresh;\n  int                  numColorBuffers;\n  int                  numAuxBuffers;\n} GrResolution;\n\ntypedef GrResolution GlideResolution;\n\n#define GR_QUERY_ANY  ((FxU32)(~0))\n\ntypedef FxU32 GrLfbSrcFmt_t;\n#define GR_LFB_SRC_FMT_565          0x00\n#define GR_LFB_SRC_FMT_555          0x01\n#define GR_LFB_SRC_FMT_1555         0x02\n#define GR_LFB_SRC_FMT_888          0x04\n#define GR_LFB_SRC_FMT_8888         0x05\n#define GR_LFB_SRC_FMT_565_DEPTH    0x0c\n#define GR_LFB_SRC_FMT_555_DEPTH    0x0d\n#define GR_LFB_SRC_FMT_1555_DEPTH   0x0e\n#define GR_LFB_SRC_FMT_ZA16         0x0f\n#define GR_LFB_SRC_FMT_RLE16        0x80\n\n#ifdef H3D\n#define GR_HINT_H3DENABLE               4\n#undef  GR_HINTTYPE_MAX\n#define GR_HINTTYPE_MAX 4\n#endif\n\n/*\n** -----------------------------------------------------------------------\n** FUNCTION PROTOTYPES\n** -----------------------------------------------------------------------\n*/\n#ifndef FX_GLIDE_NO_FUNC_PROTO\n/*\n** rendering functions\n*/\nFX_ENTRY void FX_CALL\ngrDrawPoint( const void *pt );\n\nFX_ENTRY void FX_CALL\ngrDrawLine( const void *v1, const void *v2 );\n\nFX_ENTRY void FX_CALL\ngrDrawTriangle( const void *a, const void *b, const void *c );\n\nFX_ENTRY void FX_CALL\ngrVertexLayout(FxU32 param, FxI32 offset, FxU32 mode);\n\nFX_ENTRY void FX_CALL \ngrDrawVertexArray(FxU32 mode, FxU32 Count, void *pointers);\n\nFX_ENTRY void FX_CALL \ngrDrawVertexArrayContiguous(FxU32 mode, FxU32 Count, void *pointers, FxU32 stride);\n\n/*\n**  Antialiasing Functions\n*/\n\nFX_ENTRY void FX_CALL\ngrAADrawTriangle(\n                 const void *a, const void *b, const void *c,\n                 FxBool ab_antialias, FxBool bc_antialias, FxBool ca_antialias\n                 );\n\n/*\n** buffer management\n*/\nFX_ENTRY void FX_CALL\ngrBufferClear( GrColor_t color, GrAlpha_t alpha, FxU32 depth );\n\nFX_ENTRY void FX_CALL\ngrBufferSwap( FxU32 swap_interval );\n\nFX_ENTRY void FX_CALL\ngrRenderBuffer( GrBuffer_t buffer );\n\n/*\n** error management\n*/\ntypedef void (*GrErrorCallbackFnc_t)( const char *string, FxBool fatal );\n\nFX_ENTRY void FX_CALL \ngrErrorSetCallback( GrErrorCallbackFnc_t fnc );\n\n/*\n** SST routines\n*/\nFX_ENTRY void FX_CALL \ngrFinish(void);\n\nFX_ENTRY void FX_CALL \ngrFlush(void);\n\nFX_ENTRY GrContext_t FX_CALL \ngrSstWinOpen(\n          FxU32                hWnd,\n          GrScreenResolution_t screen_resolution,\n          GrScreenRefresh_t    refresh_rate,\n          GrColorFormat_t      color_format,\n          GrOriginLocation_t   origin_location,\n          int                  nColBuffers,\n          int                  nAuxBuffers);\n\nFX_ENTRY FxBool FX_CALL\ngrSstWinClose( GrContext_t context );\n\nFX_ENTRY FxBool FX_CALL\ngrSelectContext( GrContext_t context );\n\nFX_ENTRY void FX_CALL\ngrSstOrigin(GrOriginLocation_t  origin);\n\nFX_ENTRY void FX_CALL \ngrSstSelect( int which_sst );\n\n/*\n** Glide configuration and special effect maintenance functions\n*/\nFX_ENTRY void FX_CALL\ngrAlphaBlendFunction(\n                     GrAlphaBlendFnc_t rgb_sf,   GrAlphaBlendFnc_t rgb_df,\n                     GrAlphaBlendFnc_t alpha_sf, GrAlphaBlendFnc_t alpha_df\n                     );\n\nFX_ENTRY void FX_CALL\ngrAlphaCombine(\n               GrCombineFunction_t function, GrCombineFactor_t factor,\n               GrCombineLocal_t local, GrCombineOther_t other,\n               FxBool invert\n               );\n\nFX_ENTRY void FX_CALL\ngrAlphaControlsITRGBLighting( FxBool enable );\n\nFX_ENTRY void FX_CALL\ngrAlphaTestFunction( GrCmpFnc_t function );\n\nFX_ENTRY void FX_CALL\ngrAlphaTestReferenceValue( GrAlpha_t value );\n\nFX_ENTRY void FX_CALL \ngrChromakeyMode( GrChromakeyMode_t mode );\n\nFX_ENTRY void FX_CALL \ngrChromakeyValue( GrColor_t value );\n\nFX_ENTRY void FX_CALL \ngrClipWindow( FxU32 minx, FxU32 miny, FxU32 maxx, FxU32 maxy );\n\nFX_ENTRY void FX_CALL \ngrColorCombine(\n               GrCombineFunction_t function, GrCombineFactor_t factor,\n               GrCombineLocal_t local, GrCombineOther_t other,\n               FxBool invert );\n\nFX_ENTRY void FX_CALL\ngrColorMask( FxBool rgb, FxBool a );\n\nFX_ENTRY void FX_CALL \ngrCullMode( GrCullMode_t mode );\n\nFX_ENTRY void FX_CALL \ngrConstantColorValue( GrColor_t value );\n\nFX_ENTRY void FX_CALL \ngrDepthBiasLevel( FxI32 level );\n\nFX_ENTRY void FX_CALL \ngrDepthBufferFunction( GrCmpFnc_t function );\n\nFX_ENTRY void FX_CALL \ngrDepthBufferMode( GrDepthBufferMode_t mode );\n\nFX_ENTRY void FX_CALL \ngrDepthMask( FxBool mask );\n\nFX_ENTRY void FX_CALL \ngrDisableAllEffects( void );\n\nFX_ENTRY void FX_CALL \ngrDitherMode( GrDitherMode_t mode );\n\nFX_ENTRY void FX_CALL \ngrFogColorValue( GrColor_t fogcolor );\n\nFX_ENTRY void FX_CALL \ngrFogMode( GrFogMode_t mode );\n\nFX_ENTRY void FX_CALL \ngrFogTable( const GrFog_t ft[] );\n\nFX_ENTRY void FX_CALL \ngrLoadGammaTable( FxU32 nentries, FxU32 *red, FxU32 *green, FxU32 *blue);\n\nFX_ENTRY void FX_CALL\ngrSplash(float x, float y, float width, float height, FxU32 frame);\n\nFX_ENTRY FxU32 FX_CALL \ngrGet( FxU32 pname, FxU32 plength, FxI32 *params );\n\nFX_ENTRY const char * FX_CALL \ngrGetString( FxU32 pname );\n\nFX_ENTRY FxI32 FX_CALL \ngrQueryResolutions( const GrResolution *resTemplate, GrResolution *output );\n\nFX_ENTRY FxBool FX_CALL \ngrReset( FxU32 what );\n\nFX_ENTRY GrProc FX_CALL\ngrGetProcAddress( char *procName );\n\nFX_ENTRY void FX_CALL \ngrEnable( GrEnableMode_t mode );\n\nFX_ENTRY void FX_CALL \ngrDisable( GrEnableMode_t mode );\n\nFX_ENTRY void FX_CALL \ngrCoordinateSpace( GrCoordinateSpaceMode_t mode );\n\nFX_ENTRY void FX_CALL \ngrDepthRange( FxFloat n, FxFloat f );\n\nFX_ENTRY void FX_CALL \ngrViewport( FxI32 x, FxI32 y, FxI32 width, FxI32 height );\n\n/*\n** texture mapping control functions\n*/\nFX_ENTRY FxU32 FX_CALL \ngrTexCalcMemRequired(\n                     GrLOD_t lodmin, GrLOD_t lodmax,\n                     GrAspectRatio_t aspect, GrTextureFormat_t fmt);\n\nFX_ENTRY FxU32 FX_CALL \ngrTexTextureMemRequired( FxU32     evenOdd,\n                                 GrTexInfo *info   );\n\nFX_ENTRY FxU32 FX_CALL \ngrTexMinAddress( GrChipID_t tmu );\n\nFX_ENTRY FxU32 FX_CALL \ngrTexMaxAddress( GrChipID_t tmu );\n\nFX_ENTRY void FX_CALL \ngrTexNCCTable( GrNCCTable_t table );\n\nFX_ENTRY void FX_CALL \ngrTexSource( GrChipID_t tmu,\n             FxU32      startAddress,\n             FxU32      evenOdd,\n             GrTexInfo  *info );\n\nFX_ENTRY void FX_CALL \ngrTexClampMode(\n               GrChipID_t tmu,\n               GrTextureClampMode_t s_clampmode,\n               GrTextureClampMode_t t_clampmode\n               );\n\nFX_ENTRY void FX_CALL \ngrTexCombine(\n             GrChipID_t tmu,\n             GrCombineFunction_t rgb_function,\n             GrCombineFactor_t rgb_factor, \n             GrCombineFunction_t alpha_function,\n             GrCombineFactor_t alpha_factor,\n             FxBool rgb_invert,\n             FxBool alpha_invert\n             );\n\nFX_ENTRY void FX_CALL \ngrTexDetailControl(\n                   GrChipID_t tmu,\n                   int lod_bias,\n                   FxU8 detail_scale,\n                   float detail_max\n                   );\n\nFX_ENTRY void FX_CALL \ngrTexFilterMode(\n                GrChipID_t tmu,\n                GrTextureFilterMode_t minfilter_mode,\n                GrTextureFilterMode_t magfilter_mode\n                );\n\n\nFX_ENTRY void FX_CALL \ngrTexLodBiasValue(GrChipID_t tmu, float bias );\n\nFX_ENTRY void FX_CALL \ngrTexDownloadMipMap( GrChipID_t tmu,\n                     FxU32      startAddress,\n                     FxU32      evenOdd,\n                     GrTexInfo  *info );\n\nFX_ENTRY void FX_CALL \ngrTexDownloadMipMapLevel( GrChipID_t        tmu,\n                          FxU32             startAddress,\n                          GrLOD_t           thisLod,\n                          GrLOD_t           largeLod,\n                          GrAspectRatio_t   aspectRatio,\n                          GrTextureFormat_t format,\n                          FxU32             evenOdd,\n                          void              *data );\n\nFX_ENTRY FxBool FX_CALL \ngrTexDownloadMipMapLevelPartial( GrChipID_t        tmu,\n                                 FxU32             startAddress,\n                                 GrLOD_t           thisLod,\n                                 GrLOD_t           largeLod,\n                                 GrAspectRatio_t   aspectRatio,\n                                 GrTextureFormat_t format,\n                                 FxU32             evenOdd,\n                                 void              *data,\n                                 int               start,\n                                 int               end );\n\nFX_ENTRY void FX_CALL\ngrTexDownloadTable( GrTexTable_t type, \n                    void         *data );\n\nFX_ENTRY void FX_CALL\ngrTexDownloadTablePartial( GrTexTable_t type, \n                           void         *data,\n                           int          start,\n                           int          end );\n\nFX_ENTRY void FX_CALL \ngrTexMipMapMode( GrChipID_t     tmu, \n                 GrMipMapMode_t mode,\n                 FxBool         lodBlend );\n\nFX_ENTRY void FX_CALL \ngrTexMultibase( GrChipID_t tmu,\n                FxBool     enable );\n\nFX_ENTRY void FX_CALL\ngrTexMultibaseAddress( GrChipID_t       tmu,\n                       GrTexBaseRange_t range,\n                       FxU32            startAddress,\n                       FxU32            evenOdd,\n                       GrTexInfo        *info );\n\n/*\n** linear frame buffer functions\n*/\n\nFX_ENTRY FxBool FX_CALL\ngrLfbLock( GrLock_t type, GrBuffer_t buffer, GrLfbWriteMode_t writeMode,\n           GrOriginLocation_t origin, FxBool pixelPipeline, \n           GrLfbInfo_t *info );\n\nFX_ENTRY FxBool FX_CALL\ngrLfbUnlock( GrLock_t type, GrBuffer_t buffer );\n\nFX_ENTRY void FX_CALL \ngrLfbConstantAlpha( GrAlpha_t alpha );\n\nFX_ENTRY void FX_CALL \ngrLfbConstantDepth( FxU32 depth );\n\nFX_ENTRY void FX_CALL \ngrLfbWriteColorSwizzle(FxBool swizzleBytes, FxBool swapWords);\n\nFX_ENTRY void FX_CALL\ngrLfbWriteColorFormat(GrColorFormat_t colorFormat);\n\nFX_ENTRY FxBool FX_CALL\ngrLfbWriteRegion( GrBuffer_t dst_buffer, \n                  FxU32 dst_x, FxU32 dst_y, \n                  GrLfbSrcFmt_t src_format, \n                  FxU32 src_width, FxU32 src_height, \n                  FxBool pixelPipeline,\n                  FxI32 src_stride, void *src_data );\n\nFX_ENTRY FxBool FX_CALL\ngrLfbReadRegion( GrBuffer_t src_buffer,\n                 FxU32 src_x, FxU32 src_y,\n                 FxU32 src_width, FxU32 src_height,\n                 FxU32 dst_stride, void *dst_data );\n\n/*\n** glide management functions\n*/\nFX_ENTRY void FX_CALL\ngrGlideInit( void );\n\nFX_ENTRY void FX_CALL\ngrGlideShutdown( void );\n\nFX_ENTRY void FX_CALL\ngrGlideGetState( void *state );\n\nFX_ENTRY void FX_CALL\ngrGlideSetState( const void *state );\n\nFX_ENTRY void FX_CALL\ngrGlideGetVertexLayout( void *layout );\n\nFX_ENTRY void FX_CALL\ngrGlideSetVertexLayout( const void *layout );\n\n#endif /* FX_GLIDE_NO_FUNC_PROTO */\n\n#ifdef __cplusplus\n}\n#endif\n\n#include <glideutl.h>\n\n#endif /* __GLIDE_H__ */\n"
  },
  {
    "path": "Include/glidesys.h",
    "content": "/*\n** Copyright (c) 1995, 3Dfx Interactive, Inc.\n** All Rights Reserved.\n**\n** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.;\n** the contents of this file may not be disclosed to third parties, copied or\n** duplicated in any form, in whole or in part, without the prior written\n** permission of 3Dfx Interactive, Inc.\n**\n** RESTRICTED RIGHTS LEGEND:\n** Use, duplication or disclosure by the Government is subject to restrictions\nn** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data\n** and Computer Software clause at DFARS 252.227-7013, and/or in similar or\n** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -\n** rights reserved under the Copyright Laws of the United States.\n**\n** $Header: /devel/cvg/glide3/src/glidesys.h 3     7/24/98 1:41p Hohn $\n** $Log: /devel/cvg/glide3/src/glidesys.h $\n** \n** 3     7/24/98 1:41p Hohn\n** \n** 2     6/15/98 10:50a Peter\n** made csim compile time option\n * \n * 1     1/16/98 4:29p Atai\n * create glide 3 src\n * \n * 10    12/09/97 12:20p Peter\n * mac glide port\n * \n * 9     11/04/97 4:00p Dow\n * Banshee Mods\n * \n * 8     8/18/97 3:52p Peter\n * pre-hw arrival fixes/cleanup\n * \n * 7     6/02/97 4:09p Peter\n * Compile w/ gcc for Dural\n * \n * 6     5/27/97 1:16p Peter\n * Basic cvg, w/o cmd fifo stuff. \n * \n * 5     5/21/97 6:05a Peter\n*/\n#ifndef __GLIDESYS_H__\n#define __GLIDESYS_H__\n\n/*\nn** -----------------------------------------------------------------------\n** COMPILER/ENVIRONMENT CONFIGURATION\n** -----------------------------------------------------------------------\n*/\n\n/* Endianness is stored in bits [30:31] */\n#define GLIDE_ENDIAN_SHIFT      30\n#define GLIDE_ENDIAN_LITTLE     (0x1 << GLIDE_ENDIAN_SHIFT)\n#define GLIDE_ENDIAN_BIG        (0x2 << GLIDE_ENDIAN_SHIFT)\n\n/* OS is stored in bits [0:6] */\n#define GLIDE_OS_SHIFT          0\n#define GLIDE_OS_UNIX           0x1\n#define GLIDE_OS_DOS32          0x2\n#define GLIDE_OS_WIN32          0x4\n#define GLIDE_OS_MACOS          0x8\n#define GLIDE_OS_OS2            0x10\n#define GLIDE_OS_OTHER          0x40 /* For Proprietary Arcade HW */\n\n/* Sim vs. Hardware is stored in bits [7:8] */\n#define GLIDE_SST_SHIFT         7\n#define GLIDE_SST_SIM           (0x1 << GLIDE_SST_SHIFT)\n#define GLIDE_SST_HW            (0x2 << GLIDE_SST_SHIFT)\n\n/* Hardware Type is stored in bits [9:13] */\n#define GLIDE_HW_SHIFT          9\n#define GLIDE_HW_SST1           (0x1 << GLIDE_HW_SHIFT)\n#define GLIDE_HW_SST96          (0x2 << GLIDE_HW_SHIFT)\n#define GLIDE_HW_H3             (0x4 << GLIDE_HW_SHIFT)\n#define GLIDE_HW_SST2           (0x8 << GLIDE_HW_SHIFT)\n#define GLIDE_HW_CVG            (0x10 << GLIDE_HW_SHIFT)\n\n/*\n** Make sure we handle all instances of WIN32\n*/\n#ifndef __WIN32__\n#  if defined (_WIN32) || defined (WIN32) || defined(__NT__)\n#    define __WIN32__\n#  endif\n#endif\n\n/* We need two checks on the OS: one for endian, the other for OS */\n/* Check for endianness */\n#if defined(__IRIX__) || defined(__sparc__) || defined(MACOS)\n#  define GLIDE_ENDIAN    GLIDE_ENDIAN_BIG\n#else\n#  define GLIDE_ENDIAN    GLIDE_ENDIAN_LITTLE\n#endif\n\n/* Check for OS */\n#if defined(__IRIX__) || defined(__sparc__) || defined(__linux__)\n#  define GLIDE_OS        GLIDE_OS_UNIX\n#elif defined(__DOS__)\n#  define GLIDE_OS        GLIDE_OS_DOS32\n#elif defined(__WIN32__)\n#  define GLIDE_OS        GLIDE_OS_WIN32\n#elif defined(macintosh)\n#  define GLIDE_OS        GLIDE_OS_MACOS\n#else\n#error \"Unknown OS\"\n#endif\n\n/* Check for Simulator vs. Hardware */\n#if HAL_CSIM || HWC_CSIM\n#  define GLIDE_SST       GLIDE_SST_SIM\n#else\n#  define GLIDE_SST       GLIDE_SST_HW\n#endif\n\n/* Check for type of hardware */\n#ifdef SST96\n#  define GLIDE_HW        GLIDE_HW_SST96\n#elif defined(H3)\n#  define GLIDE_HW        GLIDE_HW_H3\n#elif defined(SST2)\n#  define GLIDE_HW        GLIDE_HW_SST2\n#elif defined(CVG)\n#  define GLIDE_HW        GLIDE_HW_CVG\n#else /* Default to SST1 */\n#  define GLIDE_HW        GLIDE_HW_SST1\n#endif\n\n\n#define GLIDE_PLATFORM (GLIDE_ENDIAN | GLIDE_OS | GLIDE_SST | GLIDE_HW)\n\n/*\n** Control the number of TMUs\n*/\n#ifndef GLIDE_NUM_TMU\n#  define GLIDE_NUM_TMU 2\n#endif\n\n\n#if ((GLIDE_NUM_TMU < 0) && (GLIDE_NUM_TMU > 3))\n#  error \"GLIDE_NUM_TMU set to an invalid value\"\n#endif\n\n#endif /* __GLIDESYS_H__ */\n"
  },
  {
    "path": "Include/glideutl.h",
    "content": "/*\n** Copyright (c) 1995, 3Dfx Interactive, Inc.\n** All Rights Reserved.\n**\n** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.;\n** the contents of this file may not be disclosed to third parties, copied or\n** duplicated in any form, in whole or in part, without the prior written\n** permission of 3Dfx Interactive, Inc.\n**\n** RESTRICTED RIGHTS LEGEND:\n** Use, duplication or disclosure by the Government is subject to restrictions\n** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data\n** and Computer Software clause at DFARS 252.227-7013, and/or in similar or\n** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -\n** rights reserved under the Copyright Laws of the United States.\n**\n** $Header: /devel/cvg/glide3/src/glideutl.h 4     7/24/98 1:41p Hohn $\n** $Log: /devel/cvg/glide3/src/glideutl.h $\n** \n** 4     7/24/98 1:41p Hohn\n** \n** 3     1/30/98 4:27p Atai\n** gufog* prototype\n** \n** 1     1/29/98 4:00p Atai\n * \n * 1     1/16/98 4:29p Atai\n * create glide 3 src\n * \n * 11    1/07/98 11:18a Atai\n * remove GrMipMapInfo and GrGC.mm_table in glide3\n * \n * 10    1/06/98 6:47p Atai\n * undo grSplash and remove gu routines\n * \n * 9     1/05/98 6:04p Atai\n * move 3df gu related data structure from glide.h to glideutl.h\n * \n * 8     12/18/97 2:13p Peter\n * fogTable cataclysm\n * \n * 7     12/15/97 5:52p Atai\n * disable obsolete glide2 api for glide3\n * \n * 6     8/14/97 5:32p Pgj\n * remove dead code per GMT\n * \n * 5     6/12/97 5:19p Pgj\n * Fix bug 578\n * \n * 4     3/05/97 9:36p Jdt\n * Removed guFbWriteRegion added guEncodeRLE16\n * \n * 3     1/16/97 3:45p Dow\n * Embedded fn protos in ifndef FX_GLIDE_NO_FUNC_PROTO \n*/\n\n/* Glide Utility routines */\n\n#ifndef __GLIDEUTL_H__\n#define __GLIDEUTL_H__\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*\n** 3DF texture file structs\n*/\n\ntypedef struct\n{\n  FxU32               width, height;\n  int                 small_lod, large_lod;\n  GrAspectRatio_t     aspect_ratio;\n  GrTextureFormat_t   format;\n} Gu3dfHeader;\n\ntypedef struct\n{\n  FxU8  yRGB[16];\n  FxI16 iRGB[4][3];\n  FxI16 qRGB[4][3];\n  FxU32 packed_data[12];\n} GuNccTable;\n\ntypedef struct {\n    FxU32 data[256];\n} GuTexPalette;\n\ntypedef union {\n    GuNccTable   nccTable;\n    GuTexPalette palette;\n} GuTexTable;\n\ntypedef struct\n{\n  Gu3dfHeader  header;\n  GuTexTable   table;\n  void        *data;\n  FxU32        mem_required;    /* memory required for mip map in bytes. */\n} Gu3dfInfo;\n\n#ifndef FX_GLIDE_NO_FUNC_PROTO\n/*\n** Gamma functions\n*/\n\nFX_ENTRY void FX_CALL \nguGammaCorrectionRGB( FxFloat red, FxFloat green, FxFloat blue );\n\n/*\n** fog stuff\n*/\nFX_ENTRY float FX_CALL\nguFogTableIndexToW( int i );\n\nFX_ENTRY void FX_CALL\nguFogGenerateExp( GrFog_t *fogtable, float density );\n\nFX_ENTRY void FX_CALL\nguFogGenerateExp2( GrFog_t *fogtable, float density );\n\nFX_ENTRY void FX_CALL\nguFogGenerateLinear(GrFog_t *fogtable,\n                    float nearZ, float farZ );\n\n/*\n** hi-level texture manipulation tools.\n*/\nFX_ENTRY FxBool FX_CALL\ngu3dfGetInfo( const char *filename, Gu3dfInfo *info );\n\nFX_ENTRY FxBool FX_CALL\ngu3dfLoad( const char *filename, Gu3dfInfo *data );\n\n#endif /* FX_GLIDE_NO_FUNC_PROTO */\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __GLIDEUTL_H__ */\n"
  },
  {
    "path": "Include/glu.h",
    "content": "/*\n** License Applicability. Except to the extent portions of this file are\n** made subject to an alternative license as permitted in the SGI Free\n** Software License B, Version 1.1 (the \"License\"), the contents of this\n** file are subject only to the provisions of the License. You may not use\n** this file except in compliance with the License. You may obtain a copy\n** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600\n** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:\n** \n** http://oss.sgi.com/projects/FreeB\n** \n** Note that, as provided in the License, the Software is distributed on an\n** \"AS IS\" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS\n** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND\n** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A\n** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.\n** \n** Original Code. The Original Code is: OpenGL Sample Implementation,\n** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,\n** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.\n** Copyright in any portions created by third parties is as indicated\n** elsewhere herein. All Rights Reserved.\n** \n** Additional Notice Provisions: This software was created using the\n** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has\n** not been independently verified as being compliant with the OpenGL(R)\n** version 1.2.1 Specification.\n*/\n\n#ifndef __glu_h__\n#define __glu_h__\n#define _GLU_H\n#if __GNUC__ >= 3\n#pragma GCC system_header\n#endif\n\n#include <stddef.h> /* for wchar_t */\n#include <GL/gl.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*************************************************************/\n\n/* Boolean */\n#define GLU_FALSE                          0\n#define GLU_TRUE                           1\n\n/* Version */\n#define GLU_VERSION_1_1                    1\n#define GLU_VERSION_1_2                    1\n\n/* StringName */\n#define GLU_VERSION                        100800\n#define GLU_EXTENSIONS                     100801\n\n/* ErrorCode */\n#define GLU_INVALID_ENUM                   100900\n#define GLU_INVALID_VALUE                  100901\n#define GLU_OUT_OF_MEMORY                  100902\n#define GLU_INVALID_OPERATION              100904\n\n/* NurbsDisplay */\n/*      GLU_FILL */\n#define GLU_OUTLINE_POLYGON                100240\n#define GLU_OUTLINE_PATCH                  100241\n\n/* NurbsError */\n#define GLU_NURBS_ERROR1                   100251\n#define GLU_NURBS_ERROR2                   100252\n#define GLU_NURBS_ERROR3                   100253\n#define GLU_NURBS_ERROR4                   100254\n#define GLU_NURBS_ERROR5                   100255\n#define GLU_NURBS_ERROR6                   100256\n#define GLU_NURBS_ERROR7                   100257\n#define GLU_NURBS_ERROR8                   100258\n#define GLU_NURBS_ERROR9                   100259\n#define GLU_NURBS_ERROR10                  100260\n#define GLU_NURBS_ERROR11                  100261\n#define GLU_NURBS_ERROR12                  100262\n#define GLU_NURBS_ERROR13                  100263\n#define GLU_NURBS_ERROR14                  100264\n#define GLU_NURBS_ERROR15                  100265\n#define GLU_NURBS_ERROR16                  100266\n#define GLU_NURBS_ERROR17                  100267\n#define GLU_NURBS_ERROR18                  100268\n#define GLU_NURBS_ERROR19                  100269\n#define GLU_NURBS_ERROR20                  100270\n#define GLU_NURBS_ERROR21                  100271\n#define GLU_NURBS_ERROR22                  100272\n#define GLU_NURBS_ERROR23                  100273\n#define GLU_NURBS_ERROR24                  100274\n#define GLU_NURBS_ERROR25                  100275\n#define GLU_NURBS_ERROR26                  100276\n#define GLU_NURBS_ERROR27                  100277\n#define GLU_NURBS_ERROR28                  100278\n#define GLU_NURBS_ERROR29                  100279\n#define GLU_NURBS_ERROR30                  100280\n#define GLU_NURBS_ERROR31                  100281\n#define GLU_NURBS_ERROR32                  100282\n#define GLU_NURBS_ERROR33                  100283\n#define GLU_NURBS_ERROR34                  100284\n#define GLU_NURBS_ERROR35                  100285\n#define GLU_NURBS_ERROR36                  100286\n#define GLU_NURBS_ERROR37                  100287\n\n/* NurbsProperty */\n#define GLU_AUTO_LOAD_MATRIX               100200\n#define GLU_CULLING                        100201\n#define GLU_SAMPLING_TOLERANCE             100203\n#define GLU_DISPLAY_MODE                   100204\n#define GLU_PARAMETRIC_TOLERANCE           100202\n#define GLU_SAMPLING_METHOD                100205\n#define GLU_U_STEP                         100206\n#define GLU_V_STEP                         100207\n\n/* NurbsSampling */\n#define GLU_PATH_LENGTH                    100215\n#define GLU_PARAMETRIC_ERROR               100216\n#define GLU_DOMAIN_DISTANCE                100217\n\n/* NurbsTrim */\n#define GLU_MAP1_TRIM_2                    100210\n#define GLU_MAP1_TRIM_3                    100211\n\n/* QuadricDrawStyle */\n#define GLU_POINT                          100010\n#define GLU_LINE                           100011\n#define GLU_FILL                           100012\n#define GLU_SILHOUETTE                     100013\n\n/* QuadricCallback */\n#define GLU_ERROR                          100103\n\n/* QuadricNormal */\n#define GLU_SMOOTH                         100000\n#define GLU_FLAT                           100001\n#define GLU_NONE                           100002\n\n/* QuadricOrientation */\n#define GLU_OUTSIDE                        100020\n#define GLU_INSIDE                         100021\n\n/* TessCallback */\n#define GLU_TESS_BEGIN                     100100\n#define GLU_BEGIN                          100100\n#define GLU_TESS_VERTEX                    100101\n#define GLU_VERTEX                         100101\n#define GLU_TESS_END                       100102\n#define GLU_END                            100102\n#define GLU_TESS_ERROR                     100103\n#define GLU_TESS_EDGE_FLAG                 100104\n#define GLU_EDGE_FLAG                      100104\n#define GLU_TESS_COMBINE                   100105\n#define GLU_TESS_BEGIN_DATA                100106\n#define GLU_TESS_VERTEX_DATA               100107\n#define GLU_TESS_END_DATA                  100108\n#define GLU_TESS_ERROR_DATA                100109\n#define GLU_TESS_EDGE_FLAG_DATA            100110\n#define GLU_TESS_COMBINE_DATA              100111\n\n/* TessContour */\n#define GLU_CW                             100120\n#define GLU_CCW                            100121\n#define GLU_INTERIOR                       100122\n#define GLU_EXTERIOR                       100123\n#define GLU_UNKNOWN                        100124\n\n/* TessProperty */\n#define GLU_TESS_WINDING_RULE              100140\n#define GLU_TESS_BOUNDARY_ONLY             100141\n#define GLU_TESS_TOLERANCE                 100142\n\n/* TessError */\n#define GLU_TESS_ERROR1                    100151\n#define GLU_TESS_ERROR2                    100152\n#define GLU_TESS_ERROR3                    100153\n#define GLU_TESS_ERROR4                    100154\n#define GLU_TESS_ERROR5                    100155\n#define GLU_TESS_ERROR6                    100156\n#define GLU_TESS_ERROR7                    100157\n#define GLU_TESS_ERROR8                    100158\n#define GLU_TESS_MISSING_BEGIN_POLYGON     100151\n#define GLU_TESS_MISSING_BEGIN_CONTOUR     100152\n#define GLU_TESS_MISSING_END_POLYGON       100153\n#define GLU_TESS_MISSING_END_CONTOUR       100154\n#define GLU_TESS_COORD_TOO_LARGE           100155\n#define GLU_TESS_NEED_COMBINE_CALLBACK     100156\n\n/* TessWinding */\n#define GLU_TESS_WINDING_ODD               100130\n#define GLU_TESS_WINDING_NONZERO           100131\n#define GLU_TESS_WINDING_POSITIVE          100132\n#define GLU_TESS_WINDING_NEGATIVE          100133\n#define GLU_TESS_WINDING_ABS_GEQ_TWO       100134\n\n/* Obsolete. For compatibility with previous Sun OpenGL versions */\n#define GLU_INCOMPATIBLE_GL_VERSION        100903\n\n\n/*************************************************************/\n\n\n#ifdef __cplusplus\nclass GLUnurbs;\nclass GLUquadric;\nclass GLUtesselator;\n#else\ntypedef struct GLUnurbs GLUnurbs;\ntypedef struct GLUquadric GLUquadric;\ntypedef struct GLUtesselator GLUtesselator;\n#endif\n\ntypedef GLUnurbs GLUnurbsObj;\ntypedef GLUquadric GLUquadricObj;\ntypedef GLUtesselator GLUtesselatorObj;\ntypedef GLUtesselator GLUtriangulatorObj;\n\n#define GLU_TESS_MAX_COORD 1.0e150\n\n/* Internal convenience typedefs */\ntypedef void (APIENTRY *_GLUfuncptr)();\n\nGLAPI void APIENTRY gluBeginCurve (GLUnurbs* nurb);\nGLAPI void APIENTRY gluBeginPolygon (GLUtesselator* tess);\nGLAPI void APIENTRY gluBeginSurface (GLUnurbs* nurb);\nGLAPI void APIENTRY gluBeginTrim (GLUnurbs* nurb);\nGLAPI GLint APIENTRY gluBuild1DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLenum format, GLenum type, const void *data);\nGLAPI GLint APIENTRY gluBuild2DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *data);\nGLAPI void APIENTRY gluCylinder (GLUquadric* quad, GLdouble base, GLdouble top, GLdouble height, GLint slices, GLint stacks);\nGLAPI void APIENTRY gluDeleteNurbsRenderer (GLUnurbs* nurb);\nGLAPI void APIENTRY gluDeleteQuadric (GLUquadric* quad);\nGLAPI void APIENTRY gluDeleteTess (GLUtesselator* tess);\nGLAPI void APIENTRY gluDisk (GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops);\nGLAPI void APIENTRY gluEndCurve (GLUnurbs* nurb);\nGLAPI void APIENTRY gluEndPolygon (GLUtesselator* tess);\nGLAPI void APIENTRY gluEndSurface (GLUnurbs* nurb);\nGLAPI void APIENTRY gluEndTrim (GLUnurbs* nurb);\nGLAPI const GLubyte * APIENTRY gluErrorString (GLenum error);\nGLAPI const wchar_t * APIENTRY gluErrorUnicodeStringEXT (GLenum error);\nGLAPI void APIENTRY gluGetNurbsProperty (GLUnurbs* nurb, GLenum property, GLfloat* data);\nGLAPI const GLubyte * APIENTRY gluGetString (GLenum name);\nGLAPI void APIENTRY gluGetTessProperty (GLUtesselator* tess, GLenum which, GLdouble* data);\nGLAPI void APIENTRY gluLoadSamplingMatrices (GLUnurbs* nurb, const GLfloat *model, const GLfloat *perspective, const GLint *view);\nGLAPI void APIENTRY gluLookAt (GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ);\nGLAPI GLUnurbs* APIENTRY gluNewNurbsRenderer (void);\nGLAPI GLUquadric* APIENTRY gluNewQuadric (void);\nGLAPI GLUtesselator* APIENTRY gluNewTess (void);\nGLAPI void APIENTRY gluNextContour (GLUtesselator* tess, GLenum type);\nGLAPI void APIENTRY gluNurbsCallback (GLUnurbs* nurb, GLenum which, _GLUfuncptr CallBackFunc);\nGLAPI void APIENTRY gluNurbsCurve (GLUnurbs* nurb, GLint knotCount, GLfloat *knots, GLint stride, GLfloat *control, GLint order, GLenum type);\nGLAPI void APIENTRY gluNurbsProperty (GLUnurbs* nurb, GLenum property, GLfloat value);\nGLAPI void APIENTRY gluNurbsSurface (GLUnurbs* nurb, GLint sKnotCount, GLfloat* sKnots, GLint tKnotCount, GLfloat* tKnots, GLint sStride, GLint tStride, GLfloat* control, GLint sOrder, GLint tOrder, GLenum type);\nGLAPI void APIENTRY gluOrtho2D (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);\nGLAPI void APIENTRY gluPartialDisk (GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops, GLdouble start, GLdouble sweep);\nGLAPI void APIENTRY gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);\nGLAPI void APIENTRY gluPickMatrix (GLdouble x, GLdouble y, GLdouble delX, GLdouble delY, GLint *viewport);\nGLAPI GLint APIENTRY gluProject (GLdouble objX, GLdouble objY, GLdouble objZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* winX, GLdouble* winY, GLdouble* winZ);\nGLAPI void APIENTRY gluPwlCurve (GLUnurbs* nurb, GLint count, GLfloat* data, GLint stride, GLenum type);\nGLAPI void APIENTRY gluQuadricCallback (GLUquadric* quad, GLenum which, _GLUfuncptr CallBackFunc);\nGLAPI void APIENTRY gluQuadricDrawStyle (GLUquadric* quad, GLenum draw);\nGLAPI void APIENTRY gluQuadricNormals (GLUquadric* quad, GLenum normal);\nGLAPI void APIENTRY gluQuadricOrientation (GLUquadric* quad, GLenum orientation);\nGLAPI void APIENTRY gluQuadricTexture (GLUquadric* quad, GLboolean texture);\nGLAPI GLint APIENTRY gluScaleImage (GLenum format, GLsizei wIn, GLsizei hIn, GLenum typeIn, const void *dataIn, GLsizei wOut, GLsizei hOut, GLenum typeOut, GLvoid* dataOut);\nGLAPI void APIENTRY gluSphere (GLUquadric* quad, GLdouble radius, GLint slices, GLint stacks);\nGLAPI void APIENTRY gluTessBeginContour (GLUtesselator* tess);\nGLAPI void APIENTRY gluTessBeginPolygon (GLUtesselator* tess, GLvoid* data);\nGLAPI void APIENTRY gluTessCallback (GLUtesselator* tess, GLenum which, _GLUfuncptr CallBackFunc);\nGLAPI void APIENTRY gluTessEndContour (GLUtesselator* tess);\nGLAPI void APIENTRY gluTessEndPolygon (GLUtesselator* tess);\nGLAPI void APIENTRY gluTessNormal (GLUtesselator* tess, GLdouble valueX, GLdouble valueY, GLdouble valueZ);\nGLAPI void APIENTRY gluTessProperty (GLUtesselator* tess, GLenum which, GLdouble data);\nGLAPI void APIENTRY gluTessVertex (GLUtesselator* tess, GLdouble *location, GLvoid* data);\nGLAPI GLint APIENTRY gluUnProject (GLdouble winX, GLdouble winY, GLdouble winZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* objX, GLdouble* objY, GLdouble* objZ);\nGLAPI GLint APIENTRY gluUnProject4 (GLdouble winX, GLdouble winY, GLdouble winZ, GLdouble clipW, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble nearVal, GLdouble farVal, GLdouble* objX, GLdouble* objY, GLdouble* objZ, GLdouble* objW);\n\n#ifdef UNICODE\n#define gluErrorStringWIN gluErrorUnicodeStringEXT\n#else\n#define gluErrorStringWIN gluErrorString\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* __glu_h__ */\n"
  },
  {
    "path": "Include/qmixer.h",
    "content": "//\n// QMixer for Windows and Macintosh.\n// Copyright (c) 1995-1998 QSound Labs, Inc.  All Rights Reserved.\n// Version 4.13, July 26, 1998.\n//  \n// Based on Microsoft's WaveMix API.\n// Copyright (c) 1993, 1994  Microsoft Corporation.  All Rights Reserved.\n//\n\n\n#ifndef QMIXER_H\n#define QMIXER_H\n\n#if !defined(_QMIXIMP)\n    #define _QMIXIMP __declspec(dllimport)\n#endif\n\nDECLARE_HANDLE(HQMIXER);\n\n//\n// Constants for qprocessing\n//\n#define Q_PAN_MIN      0\n#define Q_PAN_MAX     60\n#define Q_PAN_DEFAULT 15\n#define Q_VOLUME_DEFAULT    10000\n\n//\n// Flags for channel functions.\n//\n#define QMIX_ALL              0x0001    // apply to all channels\n#define QMIX_NOREMIX          0x0002    // don't remix\n#define QMIX_CONTROL_NOREMIX  0x0004    // don't remix\n\n\ntypedef\nstruct QSVECTOR {\n    float x;                // meters\n    float y;                // meters\n    float z;                // meters\n} QSVECTOR, *LPQSVECTOR;\n\n\ntypedef\nstruct QSPOLAR {\n    float azimuth;          // degrees\n    float range;            // meters\n    float elevation;        // degrees\n} QSPOLAR, *LPQSPOLAR;\n\n\n#ifdef  __cplusplus\nextern \"C\" {\n#endif\n\n\ntypedef\nstruct QMIXINFO {\n    DWORD dwSize;\n    DWORD dwMajorVersion;\n    DWORD dwMinorVersion;\n    DWORD dwBuildNumber;\n}\nQMIXINFO, FAR* LPQMIXINFO;\n\n_QMIXIMP\nDWORD\nWINAPI\nQSWaveMixGetInfoEx(\n    LPQMIXINFO lpInfo\n    );\n\n\n//\n// Error handling functions.\n//\n\ntypedef UINT QMIX_RESULT;\n\n_QMIXIMP\nQMIX_RESULT\nWINAPI\nQSWaveMixGetLastError(\n    void\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetErrorText(\n    QMIX_RESULT qmrError,\n    LPSTR pszText,\n    UINT cchText\n    );\n\n\n//\n// Initialization functions.\n//\n\n_QMIXIMP\nHQMIXER\nWINAPI\nQSWaveMixInit(\n    void\n    );\n\n#define QMIX_CONFIG_USEPRIMARY      0x0001\n#define QMIX_CONFIG_NOTHREAD        0x0002\n#define QMIX_CONFIG_PLAYSILENCE     0x0004\n#define QMIX_CONFIG_LEFTCOORDS      0x0008\n#define QMIX_CONFIG_RIGHTCOORDS     0x0000\n#define QMIX_CONFIG_GLOBALROLLOFF\t0x0010\n\n#define QMIX_CONFIG_OUTPUT_DETECT       0\n#define QMIX_CONFIG_OUTPUT_WAVEOUT      1\n#define QMIX_CONFIG_OUTPUT_DIRECTSOUND  2\n\n#define QMIX_CONFIG_MATH_DETECT         0\n#define QMIX_CONFIG_MATH_INTEGER        1\n#define QMIX_CONFIG_MATH_FLOAT          2\n#define QMIX_CONFIG_MATH_MMX            3\n\ntypedef\nstruct QMIXCONFIG {\n    DWORD dwSize;\n    DWORD dwFlags;\n    DWORD dwSamplingRate;   // 11025, 22050, or 44100 Hz; if 0 uses 22050\n    LPVOID lpIDirectSound;\n    const GUID FAR* lpGuid;\n    int iChannels;          // if 0, uses default of 8\n    int iOutput;            // if 0, uses best output device\n    int iLatency;           // (in ms) if 0, uses default for output device\n    int iMath;              // style of math\n    HWND hwnd;              // handle used when initializing DirectSound\n                            // (if 0, QMixer will find main window)\n    int iChannels3dHw;      // number of 3d hardware channels\n    int iChannels3dQS;      // number of 3d QSound software channels\n    int iChannels3dSw;      // number of 3d software channels\n    int iChannels2dHw;      // number of 2d hardware channels\n    int iChannels2dQS;      // number of 2d QSound software channels\n    int iChannels2dSw;      // number of 2d software channels\n}\nQMIXCONFIG, FAR* LPQMIXCONFIG;\n\n\n_QMIXIMP\nHQMIXER\nWINAPI\nQSWaveMixInitEx(\n    LPQMIXCONFIG lpConfig\n    );\n\n\n//\n// Choose between speakers or headphones.\n//\n#define QMIX_SPEAKERS_STEREO     0\n#define QMIX_SPEAKERS_HEADPHONES 1\n#define QMIX_SPEAKERS_MONO       2\n#define QMIX_SPEAKERS_QUAD       3\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetSpeakerPlacement(\n    HQMIXER hQMixer,\n    int placement\n    );\n\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetSpeakerPlacement(\n    HQMIXER hQMixer,\n    LPDWORD lpdwPlacement\n    );\n\n\n//\n// The following function turns on and off various options\n// in the mixer.  Turning off features can save CPU cycles.\n//\n#define QMIX_OPTIONS_REAR       1       // improved rear effect\n#define QMIX_OPTIONS_CROSSOVER  2       // improved frequency response\n#define QMIX_OPTIONS_FLIPOUTPUT 4       // flip output channels\n#define QMIX_OPTIONS_DOPPLER    8       // calculate listener velocity using position updates\n#define QMIX_OPTIONS_ALL 0xffffffff\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetOptions(\n    HQMIXER hQMixer,\n    DWORD dwFlags,\n    DWORD dwMask\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetOptions(\n    HQMIXER hQMixer,\n    LPDWORD lpdwFlags\n    );\n\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetMixerOption(\n    HQMIXER hQMixer,\n\tDWORD dwFlags,\n\tLPVOID lpvOptions\n\t);\n\n\n//\n// QSWaveMixOpenChannel flags\n//\n#define QMIX_OPENSINGLE    0    // open the single channel specified by iChannel\n#define QMIX_OPENALL       1    // opens all the channels, iChannel ignored\n#define QMIX_OPENCOUNT     2    // open iChannel Channels (eg. if iChannel = 4 will create channels 0-3)\n#define QMIX_OPENAVAILABLE 3    // open the first unopened channel, and return channel number\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixOpenChannel(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags\n    );\n\n\n//\n// Comprehensive channel parameters.  Used in the functions\n// - QSWaveMixGetChannelParams\n// - QSWaveMixSetChannelParams\n// - QSWaveMixCalculateChannelParams\n// - QSWaveMixFindChannel\n// - QSWaveMixPlayEx\n//\n// The first set of parameters shouldn't be modified, the second set\n// can be altered for QSWaveMixSetChannelParams, and the third set\n// are calculated by QMixer.\n//\ntypedef\nstruct QMIX_CHANNEL_PARAMS {\n    DWORD dwSize;                   // size of this structure\n    DWORD dwChannelType;            // combination of QMIX_CHANNELTYPE_ flags\n    LPWAVEFORMATEX lpwfxFormat;     // channel format (overrides default mixer output)\n    DWORD dwMixerFlags;             // reserved\n\n    QSVECTOR vPosition;             // 3d position (Cartesian coordinates)\n    QSVECTOR vVelocity;             // 3d velocity (Cartesian coordinates)\n    QSVECTOR vOrientation;          // 3d orientation (Cartesian coordinates)\n    float flInnerConeAngle;         // inner cone angle (degrees)\n    float flOuterConeAngle;         // outer cone angle (degrees)\n    float flOuterConeAtten;         // attenuation outside cone (db)\n    float flMinDistance;            // minimum distance (m)\n    float flMaxDistance;            // maximum distance (m)\n    float flRolloff;                // rolloff factor (0..10, default=1.0)\n    float flVolume;                 // scale\n    LONG lFrequency;                // playback frequency\n    LONG lPanRate;                  // time in which a change is completed (ms)\n    LONG lPriority;                 // user-defined priority\n    DWORD dwModes;                  // combination of QSWaveMixEnableChannel flags\n    long unused[16];                // reserved for future expansion (set to zero)\n\n    LONG lTimePlaying;              // current time playing current sound (ms)\n    LONG lTimeRemaining;            // current time left to play (ms)\n    float flDistance;               // current distance to listener (m)\n    float flAzimuth;                // current azimuth (degrees)\n    float flElevation;              // current elevation (degrees)\n    float flConeScale;              // amount that volume is scaled for cone effect\n    float flRolloffScale;           // amount that volume is scaled for rolloff effect\n    float flAppliedVolume;          // volume applied to sound, including rolloff & cone effects (scale)\n    float flDopplerSpeedup;         // speedup due to Doppler shift\n    QSVECTOR vHeadPosition;         // position relative to listener (left-handed coordinates)\n    QSVECTOR vHeadVelocity;         // velocity relative to listener (left-handed coordinates)\n} QMIX_CHANNEL_PARAMS;\n\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetChannelParams(\n    HQMIXER hQMixer,\n    int iChannel,\n    QMIX_CHANNEL_PARAMS* params\n    );\n\n\n_QMIXIMP MMRESULT WINAPI\nQSWaveMixSetChannelParams(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags,\n    const QMIX_CHANNEL_PARAMS* params\n    );\n\n\n_QMIXIMP MMRESULT WINAPI\nQSWaveMixCalculateChannelParams(\n    HQMIXER hQMixer,\n    QMIX_CHANNEL_PARAMS* params,\n    DWORD dwFlags\n    );\n\n\n//\n// Channel types.  These flags are used in:\n//    QSWaveMixConfigureChannel,\n//    QSWaveMixFindChannel.\n// They also appear in the dwChannelType field in QMIX_CHANNEL_PARAMS.\n//\n#define QMIX_CHANNELTYPE_QSOUND     0x00010000  // uses QSound software mixer\n#define QMIX_CHANNELTYPE_STREAMING  0x00020000  // uses hardware streaming DirectSoundBuffer\n#define QMIX_CHANNELTYPE_STATIC     0x00040000  // uses hardware static DirectSoundBuffer\n#define QMIX_CHANNELTYPE_SOFTWARE   0x00080000  // uses software DirectSoundBuffer\n#define QMIX_CHANNELTYPE_DSOUND \\\n\t\t(QMIX_CHANNELTYPE_STREAMING|QMIX_CHANNELTYPE_STATIC|QMIX_CHANNELTYPE_SOFTWARE)\n#define QMIX_CHANNELTYPE_ANYMIXER   0x00ff0000\n\n#define QMIX_CHANNELTYPE_2D         0x01000000  // stereo only\n#define QMIX_CHANNELTYPE_3D         0x02000000  // supports full 3d features\n#define QMIX_CHANNELTYPE_ANYFEATURE 0x7f000000\n\n#define QMIX_CHANNELTYPE_ALL        (QMIX_CHANNELTYPE_ANYMIXER|QMIX_CHANNELTYPE_ANYFEATURE)\n\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixConfigureChannel(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags,                  // type of channel\n    LPCWAVEFORMATEX format,         // format of channel (optional)\n    LPVOID lpvOptions               // options (reserved, set to zero)\n    );\n\n\n//\n// Find a channel using one of the QMIX_FINDCHANNEL_ priority schemes.\n//\n// The type of channel can be restricted to one of the types given by\n// a combination of the QMIX_CHANNELTYPE_ flags.\n//\n// Normally the channel will be excluded from subsequent calls to\n// QSWaveMixFindChannel until a sound is played on the channel.  This is\n// to allow the setting up of several sounds to be played at the same\n// instant.  This reservation can be disabled by setting the\n// QMIX_FINDCHANNEL_NORESERVE flag.\n//\n\n#define QMIX_FINDCHANNEL_SORTMETHOD 0x0000000f  // mask for sort method\n#define QMIX_FINDCHANNEL_BEGINTIME  0x00000000  // sort by time from beginning (least-recently used)\n#define QMIX_FINDCHANNEL_ENDTIME    0x00000001  // sort by time to end (most-recently available)\n#define QMIX_FINDCHANNEL_VOLUME     0x00000002  // sort by applied volume\n#define QMIX_FINDCHANNEL_DISTANCE   0x00000003  // sort by distance from listener\n#define QMIX_FINDCHANNEL_PRIORITY   0x00000004  // sort by user priority\n\n#define QMIX_FINDCHANNEL_TOPLAY     0x00000000  // pick a playing or ready (idle) channel for playing another\n#define QMIX_FINDCHANNEL_TOPAUSE    0x00000010  // pick a playing channel for pausing\n#define QMIX_FINDCHANNEL_TORESTART  0x00000020  // pick a paused channel for restarting\n#define QMIX_FINDCHANNEL_FORMAT     0x00000080  // channel must match lpParams->lpwfxFormat\n#define QMIX_FINDCHANNEL_NORESERVE  0x80000000  // don't exclude from subsequent searches\n\n#define QMIX_FINDCHANNEL_LRU        QMIX_FINDCHANNEL_BEGINTIME\n#define QMIX_FINDCHANNEL_MRA        QMIX_FINDCHANNEL_ENDTIME\n\n_QMIXIMP\nint\nWINAPI\nQSWaveMixFindChannel(\n    HQMIXER hQMixer,\n    DWORD dwFlags,\n    const QMIX_CHANNEL_PARAMS* lpParams         // compare with these parameters\n    );\n\n\n//\n// Turn on QMixer's dynamic scheduling.  The lpChannelTypes array gives the\n// channel type (one of QMIX_CHANNELTYPE_ANYMIXER and one of\n// QMIX_CHANNELTYPE_ANYFEATURE) and the maximum number of desired channels of\n// that type that should play at any time.  A count of -1 channels specifies\n// that as many channels as possible should be played.  An entry with\n// dwChannelType ends the list.  If lpChannelTypes is null, the current type\n// settings are used.  If QMIX_PRIORITIZE_NONE is used, scheduling is turned\n// off.\n//\ntypedef\nstruct QMIX_CHANNELTYPES {\n    DWORD dwChannelType;            // type of channel\n    int iMaxChannels;               // maximum number of channels of that type to play\n} QMIX_CHANNELTYPES, *LPQMIX_CHANNELTYPES;\n\n\n#define QMIX_PRIORITIZE_NONE        0x0000000f\n\n_QMIXIMP MMRESULT WINAPI\nQSWaveMixPrioritizeChannels(\n    HQMIXER hQMixer,\n    LPQMIX_CHANNELTYPES lpChannelTypes,\n    DWORD dwFlags,\n    LPVOID lpvParams\n    );\n\n\n//\n// Structure describing wave data; returned by QSWaveMixOpenWave and\n// QSWaveMixOpenWaveEx.\n//\n#define MAXFILENAME 15 \n\ntypedef struct MIXWAVE {\n    PCMWAVEFORMAT pcm;          // data format\n    WAVEHDR wh;                 // location and length of data\n    char szWaveFilename[MAXFILENAME+1];     // truncated version of name\n    LPWAVEFORMATEX pwf;         // data format; needed for MSACM wave files\n#if defined(MACINTOSH)\n    CmpSoundHeader format;      // Mac version of sound info\n#endif\n}\nMIXWAVE, FAR* LPMIXWAVE;\ntypedef const MIXWAVE FAR* LPCMIXWAVE;\n\n// Input streaming callback function.  Return TRUE to continue to play, return\n// FALSE to stop playing.\ntypedef BOOL (CALLBACK *LPQMIXINPUTCALLBACK)(void* buffer, DWORD bytes, void* user);\n\n//\n// QSWaveMixOpenWave and QSWaveMixOpenWaveEx flags.\n//\n#define QMIX_FILE                   0x0001  // load from file\n#define QMIX_RESOURCE               0x0002  // load from resource\n#define QMIX_MEMORY                 0x0004  // load using MMIOINFO supplied by user\n#define QMIX_RESIDENT               0x0008  // use memory-resident data\n#define QMIX_FILESTREAM             0x0010  // stream from file\n#define QMIX_INPUTSTREAM            0x0011  // stream from input buffer\n#define QMIX_FILESPEC               0x0012  // Macintosh file specification\n\ntypedef union {\n    const char* FileName;       // Name of RIFF file (e.g. \"*.wav\") with wave.\n    struct {                    // Wave stored in resource.\n        const char* Name;           // Name of resource.\n        HINSTANCE hInstance;        // Handle of module where resource is located.\n    } Resource;\n    LPMMIOINFO lpMmioInfo;      // Read from file already opened by mmioOpen.\n    struct {                    // Memory resident wave.\n        LPCWAVEFORMATEX Format;     // Format of wave; can be compressed.\n        HPSTR Data;                 // Pointer to memory resident audio samples.\n        DWORD Bytes;                // Length of Data, in bytes.\n        DWORD Samples;              // Number of wave samples; needed if compressed.\n        DWORD Tag;                  // User-defined id.\n    } Resident;\n    struct {                    // Input streaming using user callback.\n        LPCWAVEFORMATEX Format; // Format of data (must be uncompressed).\n        DWORD BlockBytes;           // Preferred length of block.\n        LPQMIXINPUTCALLBACK Callback; // User-defined callback function.\n        LPVOID User;                // Data to be provided to callback.\n        DWORD Tag;                  // User-defined id.\n    } Stream;\n#if defined(MACINTOSH)\n    FSSpec* FileSpec;           // Macintosh file specifier.\n#endif\n} QMIXWAVEPARAMS, *LPQMIXWAVEPARAMS;\n\n\n_QMIXIMP\nLPMIXWAVE\nWINAPI\nQSWaveMixOpenWaveEx(\n    HQMIXER hQMixer,\n    LPQMIXWAVEPARAMS lpWaveParams,\n    DWORD dwFlags\n    );\n\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixActivate(\n    HQMIXER hQMixer,\n    BOOL fActivate\n    );\n\n\n//\n// Options for dwFlags parameter in QSWaveMixPlayEx.\n//\n// Note:  the QMIX_USELRUCHANNEL flag has two functions.  When QMIX_CLEARQUEUE\n// is also set, the channel that has been playing the longest (least-recently-\n// used) is cleared and the buffer played.  When QMIX_QUEUEWAVE is set, the\n// channel that will first finish playing will be selected and the buffer\n// queued to play.  Of course, if an unused channel is found, it will be\n// selected instead.  If QMIX_WAIT has not been specified, then the channel\n// number will be returned in the iChannel field.\n//\n#define QMIX_QUEUEWAVE          0x0000  // queue on channel\n#define QMIX_CLEARQUEUE         0x0001  // clear queue on channel\n#define QMIX_USELRUCHANNEL      0x0002  // see note above\n#define QMIX_HIPRIORITY         0x0004\n#define QMIX_HIGHPRIORITY QMIX_HIPRIORITY\n#define QMIX_WAIT               0x0008  // queue to be played with other sounds\n#define QMIX_IMMEDIATE          0x0020  // apply volume/pan changes without interpolation\n\n#define QMIX_PLAY_SETEVENT      0x0100  // call SetEvent((HANDLE)callback) on completion\n#define QMIX_PLAY_PULSEEVENT    0x0200  // call PulseEvent((HANDLE)callback) on completion\n#define QMIX_PLAY_NOTIFYSTOP    0x0400  // do callback even when stopping or flushing sound\n\ntypedef void (CALLBACK *LPQMIXDONECALLBACK)(int iChannel, LPMIXWAVE lpWave, DWORD dwUser);\n\ntypedef struct QMIXPLAYPARAMS {\n    DWORD dwSize;           // this must be set\n    LPMIXWAVE lpImage;      // additional preprocessed audio for high performance\n    HWND hwndNotify;        // if set, WOM_OPEN and WOM_DONE notification messages sent here\n    LPQMIXDONECALLBACK callback;\n    DWORD dwUser;           // user data accompanying callback\n    LONG lStart;\n    LONG lStartLoop;\n    LONG lEndLoop;\n    LONG lEnd;\n    const QMIX_CHANNEL_PARAMS* lpChannelParams;     // initialize with these parameters\n}\nQMIXPLAYPARAMS, *LPQMIXPLAYPARAMS;\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixPlayEx(\n    HQMIXER hQMixer,            // the mixer handle\n    int iChannel,               // channel number to be played on\n    DWORD dwFlags,\n    LPMIXWAVE lpMixWave,        // sound to be played\n    int iLoops,                 // number of loops to be played (-1 = forever)\n    LPQMIXPLAYPARAMS lpParams   // if NULL, defaults will be used\n    );\n\n\n//\n// Functions for controlling channels.\n//\n// The flag QMIX_WAIT can be used in the dwFlags argument of the\n// channel parameter functions to defer the use of the new parameter\n// until the next sound is played with QSWaveMixPlayEx.  This allows\n// us synchronize the changing of channel parameters with the beginning\n// of a sound.\n//\n// The flag QMIX_USEONCE can be used to use the parameter only for the\n// remainder of the current sound; afterwards the parameter reverts\n// back to the channel's defaults.  If no sound is playing, the\n// parameter is used for the entire duration of the next sound.\n// If both QMIX_USEONCE and QMIX_WAIT are used, then the property takes\n// effect for the entire duration of the following sound.\n//\n// These flags can be used with the following functions:\n//   - QSWaveMixEnableChannel\n//   - QSWaveMixSetChannelParams\n//   - QSWaveMixSetChannelPriority\n//   - QSWaveMixSetDistanceMapping\n//   - QSWaveMixSetFrequency\n//   - QSWaveMixSetPan\n//   - QSWaveMixSetPanRate\n//   - QSWaveMixSetPolarPosition\n//   - QSWaveMixSetPosition\n//   - QSWaveMixSetSourceCone\n//   - QSWaveMixSetSourceCone2\n//   - QSWaveMixSetSourcePosition\n//   - QSWaveMixSetSourceVelocity\n//   - QSWaveMixSetVolume\n//\n#define QMIX_USEONCE        0x10    // settings are temporary\n\n\n//\n// Set the amount of time, in milliseconds, to effect a change in\n// a channel property (e.g. volume, position).  Non-zero values smooth\n// out changes.\n//\n// Use QSWaveMixSetPanRate(hQMixer, iChannel, QMIX_WAIT|QMIX_USEONCE, 0)\n// to implement sudden changes for the next sound without losing the\n// smoothing function.  Using QMIX_IMMEDIATE with QSWaveMixPlayEx also\n// causes immediate changes while preserving subsequent pan interpolations.\n//\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetPanRate(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags,\n    DWORD dwRate\n    );\n\n//\n// The pan value can be set to values from 0 to 60:\n//    0 = full left,\n//   15 = straight ahead (mono),\n//   30 = full right,\n//   45 = behind.\n//\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetPan(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags,\n    int pan\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetVolume(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags,\n    int volume\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetPolarPosition(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags,\n    const QSPOLAR* lpQPosition\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetFrequency(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags,\n    DWORD dwFrequency\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixPauseChannel(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixRestartChannel(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags\n    );\n\n\n#define QMIX_STOP_FINISHLASTLOOP 0x1000\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixStopChannel(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags\n    );\n\n\n//\n// QSWaveMixEnableChannel:  if mode==0, use conventional, high-performance\n// stereo mixer.  Non-zero modes imply some form of additional processing.\n//\n#define QMIX_CHANNEL_STEREO             0x0000  // perform stereo mixing\n#define QMIX_CHANNEL_QSOUND             0x0001  // perform QSound localization (default)\n#define QMIX_CHANNEL_DOPPLER            0x0002  // calculate velocity using position updates\n#define QMIX_CHANNEL_RANGE              0x0004  // do range effects\n#define QMIX_CHANNEL_ELEVATION          0x0008  // do elevation effects\n#define QMIX_CHANNEL_NODOPPLERPITCH     0x0010  // disable Doppler pitch shift for this channel\n#define QMIX_CHANNEL_PITCH_COPY         0x0000  // pitch shifting using copying (fastest)\n#define QMIX_CHANNEL_PITCH_LINEAR       0x0100  // pitch shifting using linear interpolation (better but slower)\n#define QMIX_CHANNEL_PITCH_SPLINE       0x0200  // pitch shifting using spline interpolation (better yet, but much slower)\n#define QMIX_CHANNEL_PITCH_FILTER       0x0300  // pitch shifting using FIR filter (best, but slowest)\n#define QMIX_CHANNEL_PITCH_MASK         0x0700  // bits reserved for pitch types\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixEnableChannel(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags,\n    int mode\n    );\n\n\n//\n// QSWaveMixEnable is equivalent to\n//   QSWaveMixEnableChannel(hQMixer, 0, QMIX_ALL, mode).\n//\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixEnable(\n    HQMIXER hQMixer,\n    int mode\n    );\n\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetChannelPriority(\n    HQMIXER hQMixer,\n    int iChannel,\n    LONG lPriority,\n    DWORD dwFlags\n    );\n\n\n//\n// Status functions.\n//\n\n//\n// Return a pointer to the internal DirectSound object.  Handy for creating\n// additional secondary buffers (but only if QMIX_CONFIG_USEPRIMARY was not\n// set in QSWaveMixConfigureInit).\n//\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetDirectSound(\n    HQMIXER hQMixer,\n    LPVOID FAR* lplpIDirectSound\n    );\n\n\n//\n// Return a pointer to the internal DirectSoundBuffer object.\n//\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetDirectSoundBuffer(\n    HQMIXER hQMixer,\n    int iChannel,\n    LPVOID FAR* lplpIDirectSoundBuffer\n);\n\n\n//\n// Return TRUE if there are no more buffers playing or queued on the channel.\n// This is an alternative to waiting for a WOM_DONE message to be sent to a\n// window.\n//\n_QMIXIMP\nBOOL\nWINAPI\nQSWaveMixIsChannelDone(\n    HQMIXER hQMixer,\n    int iChannel\n    );\n\n\n#define QMIX_CHANNELSTATUS_OPEN     0x01    // channel is open\n#define QMIX_CHANNELSTATUS_QUEUED   0x02    // channel has a play request queued on it\n#define QMIX_CHANNELSTATUS_PAUSED   0x04    // channel is paused\n#define QMIX_CHANNELSTATUS_PLAYING  0x08    // channel is playing a sound\n#define QMIX_CHANNELSTATUS_RESERVED 0x10    // channel is reserved from FindChannel for playing\n\n_QMIXIMP DWORD WINAPI\nQSWaveMixGetChannelStatus(\n    HQMIXER hQMixer,\n    int iChannel\n    );\n\n\n#define QMIX_POSITION_BYTES    0\n#define QMIX_POSITION_SAMPLES  1\n#define QMIX_POSITION_MS       2\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetPlayPosition(\n    HQMIXER hQMixer,\n    int iChannel,\n    LPMIXWAVE* lplpWave,\n    LPDWORD lpdwPosition,\n    DWORD dwFlags\n    );\n\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetPan(\n    HQMIXER hQMixer,\n    int iChannel,\n    LPDWORD lpdwPan\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetVolume(\n    HQMIXER hQMixer,\n    int iChannel,\n    LPDWORD lpdwVolume\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetPanRate(\n    HQMIXER hQMixer,\n    int iChannel,\n    LPDWORD lpdwRate\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetFrequency(\n    HQMIXER hQMixer,\n    int iChannel,\n    LPDWORD lpdwFrequency\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetPolarPosition(\n    HQMIXER hQMixer,\n    int iChannel,\n    QSPOLAR* lpQPosition\n    );\n\n\n//**********************************************************************\n// Interface for 3d Cartesian Coordinate system.\n//\n// All measurements are in S.I. units, e.g. coordinates and room size are\n// meters, velocity and speed of sound in m/s.\n//\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetRoomSize(\n    HQMIXER hQMixer,\n    float roomSize,\n    DWORD dwFlags\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetSpeedOfSound(\n    HQMIXER hQMixer,\n    float speed,\n    DWORD dwFlags\n    );\n\n\ntypedef struct QMIX_DISTANCES {\n    UINT cbSize;            // size of structure (needed for future versions)\n    float minDistance;      // sounds are at full volume if closer than this\n    float maxDistance;      // sounds are muted if further away than this\n    float scale;            // relative amount to adjust rolloff by\n} QMIX_DISTANCES, *LPQMIX_DISTANCES;\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetDistanceMapping(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags,\n    const LPQMIX_DISTANCES lpDistances\n    );\n\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetRoomSize(\n    HQMIXER hQMixer,\n    float* pfRoomSize\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetSpeedOfSound(\n    HQMIXER hQMixer,\n    float* pfSpeed\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetDistanceMapping(\n    HQMIXER hQMixer,\n    int iChannel,\n    LPQMIX_DISTANCES lpDistances\n    );\n\n//\n// Listener parameters.\n//\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetListenerPosition(\n    HQMIXER hQMixer,\n    const QSVECTOR* position,\n    DWORD dwFlags\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetListenerOrientation(\n    HQMIXER hQMixer,\n    const QSVECTOR* direction,\n    const QSVECTOR* up,\n    DWORD dwFlags\n    );\n\n//\n// Velocity is used solely to set Doppler shift.\n//\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetListenerVelocity(\n    HQMIXER hQMixer,\n    const QSVECTOR* velocity,\n    DWORD dwFlags\n    );\n\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetListenerRolloff(\n\tHQMIXER hQMixer,\n\tfloat rolloff,\n\tDWORD dwFlags\n\t);\n\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetListenerPosition(\n    HQMIXER hQMixer,\n    QSVECTOR* position\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetListenerOrientation(\n    HQMIXER hQMixer,\n    QSVECTOR* direction,\n    QSVECTOR* up\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetListenerVelocity(\n    HQMIXER hQMixer,\n    QSVECTOR* velocity\n    );\n\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetSourcePosition(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags,\n    const QSVECTOR* position\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetSourceVelocity(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags,\n    const QSVECTOR* velocity\n    );\n\n//\n// Listener will hear full volume if inside source's cone, given by\n// orientation and angle.  If outside, source will be attenuated by\n// additional attenuation.\n//\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetSourceCone(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags,\n    const QSVECTOR* orientation,\n    float coneAngle,\n    float ambient_db\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetSourceCone2(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags,\n    const QSVECTOR* orientation,\n    float innerConeAngle,\n    float outerConeAngle,\n    float ambient_db\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetSourcePosition(\n    HQMIXER hQMixer,\n    int iChannel,\n    QSVECTOR* position\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetSourceVelocity(\n    HQMIXER hQMixer,\n    int iChannel,\n    QSVECTOR* velocity\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetSourceCone(\n    HQMIXER hQMixer,\n    int iChannel,\n    QSVECTOR* orientation,\n    float* pfAngle,\n    float* ambient_db\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetSourceCone2(\n    HQMIXER hQMixer,\n    int iChannel,\n    QSVECTOR* orientation,\n    float* pfInnerAngle,\n    float* pfOuterAngle,\n    float* ambient_db\n    );\n\n\n//**********************************************************************\n// Profiling functions.\n//\ntypedef struct QMIX_PROFILE {\n    DWORD dwCalls;          // number of times mixer thread was called\n    DWORD dwMixing;         // time spent mixing\n    DWORD dwAudioDriver;    // time spent calling audio driver (e.g. DirectSound)\n    DWORD dwTotal;          // total time in mixer thread\n    DWORD dwDuration;       // time during test\n} QMIX_PROFILE, *LPQMIX_PROFILE;\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixStartProfile(\n    HQMIXER hQMixer\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixStopProfile(\n    HQMIXER hQMixer,\n    LPQMIX_PROFILE lpProfile,\n    UINT cbProfile\n    );\n\n\n//**********************************************************************\n// Call QSWaveMixPump to force more mixing.  Essential if mixer was\n// configured with QMIX_CONFIG_NOTHREAD.\n//\n_QMIXIMP\nvoid\nWINAPI\nQSWaveMixPump(\n    void);\n\n\n//**********************************************************************\n// Functions to shut down mixer.\n//\n// Note that, in versions 2.10 and later, that QSWaveMixFreeWave can be\n// called with a null hQMixer if QSWaveMixCloseSession has been called.\n//\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixFlushChannel(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixCloseChannel(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixFreeWave(\n    HQMIXER hQMixer,\n    LPMIXWAVE lpMixWave\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixCloseSession(\n    HQMIXER hQMixer\n    );\n\n\n//\n// Diagnostic codes available from QSWaveMixGetLastError.  Equivalent strings\n// can be recalled using QSWaveMixGetErrorText.\n//\n#define ERROR_QMIX_OK                   0  // OK, no error.\n#define ERROR_QMIX_CONFIGMISSING        1  // Can't find configuration (.ini) file.\n#define ERROR_QMIX_MIXERHANDLE          2  // Mixer handle is null or invalid.\n#define ERROR_QMIX_RESULTUNKNOWN        3  // Unknown error code.\n#define ERROR_QMIX_MEMORY               4  // Out of memory.\n#define ERROR_QMIX_EXCEPTIONUNKNOWN     5  // Unknown error.\n#define ERROR_QMIX_WAVEOUTNONE          6  // No wave output devices.\n#define ERROR_QMIX_DLLNAME              7  // Name of QMixer library is unavailable or invalid.\n#define ERROR_QMIX_WAVEOUTINCOMPATIBLE  8  // The wave output device is incompatible with QMixer.\n#define ERROR_QMIX_ACTIVATED            9  // Can't activate two QMixer sessions.\n#define ERROR_QMIX_CHANNELINVALID      10  // Channel number is invalid.\n#define ERROR_QMIX_OPENCHANNELFLAG     11  // Invalid flag for opening channel.\n#define ERROR_QMIX_PANINVALID          12  // Invalid pan value.\n#define ERROR_QMIX_NOTACTIVATED        13  // Mixer has not been activated.\n#define ERROR_QMIX_CHANNELUNAVAILABLE  14  // No channels are available for playing this sound.\n#define ERROR_QMIX_WAVERESOURCE        15  // Couldn't find or load resource containing wave data.\n#define ERROR_QMIX_WAVEOPEN            16  // Couldn't open wave file.\n#define ERROR_QMIX_WAVEFORMAT          17  // Format of wave data is corrupted.\n#define ERROR_QMIX_ACMINVALID          18  // The ACM wave format couldn't be translated.\n#define ERROR_QMIX_DSOUNDMISSING       19  // The DirectSound library dsound.dll could not be found.\n#define ERROR_QMIX_DSOUNDCREATEADDR    20  // Could not find DirectSoundCreate function in dsound.dll.\n#define ERROR_QMIX_DSOUNDCREATE        21  // Couldn't create DirectSound object.\n#define ERROR_QMIX_DSOUNDCOOPERATIVE   22  // The cooperative level for DirectSound could not be set.\n#define ERROR_QMIX_DSOUNDCAPS          23  // Couldn't determine DirectSound capabilities.\n#define ERROR_QMIX_DSOUNDPRIMARY       24  // Couldn't create DirectSound primary buffer.\n#define ERROR_QMIX_DSOUNDPRIMARYCAPS   25  // Couldn't determine DirectSound primary buffer capabilities.\n#define ERROR_QMIX_DSOUNDFORMAT        26  // Couldn't set format of DirectSound output.\n#define ERROR_QMIX_DSOUNDSECONDARY     27  // Couldn't create DirectSound secondary buffer.\n#define ERROR_QMIX_DSOUNDPLAY          28  // Couldn't play DirectSound buffer.\n#define ERROR_QMIX_WAVEOUTOPEN         29  // Wave output error while opening device.\n#define ERROR_QMIX_WAVEOUTWRITE        30  // Wave output error while writing to device.\n#define ERROR_QMIX_WAVEOUTCLOSE        31  // Wave output error while closing device.\n#define ERROR_QMIX_PARAMPTR            32  // Parameter points to invalid location.\n#define ERROR_QMIX_NOTIMPLEMENTED      33  // Feature is not implemented.\n#define ERROR_QMIX_DSOUNDNODRIVER      34  // No DirectSound driver is available for use.\n#define ERROR_QMIX_SMALLPRIMARY        35  // DirectSound primary buffer is too small.\n#define ERROR_QMIX_UNKNOWNFORMAT       36  // Unknown sound file format.\n#define ERROR_QMIX_DRIVENOTREADY       37  // Drive is not ready.\n#define ERROR_QMIX_READERROR           38  // Error reading sound file.\n#define ERROR_QMIX_UNKNOWNAIFC         39  // Unknown format of AIFF-C file.\n#define ERROR_QMIX_MACRESOURCE         40  // Unable to obtain sampled sound data from resource.\n#define ERROR_QMIX_SCINVALID           41  // The sound data format couldn't be translated.\n#define ERROR_QMIX_MACSOUNDCAPS        42  // Couldn't retrieve Macintosh sound output capabilities.\n#define ERROR_QMIX_MACCHANNEL          43  // Couldn't create sound channel.\n#define ERROR_QMIX_MACCLEAR            44  // Couldn't clear sound channel.\n#define ERROR_QMIX_MACPAUSE            45  // Couldn't pause sound channel.\n#define ERROR_QMIX_MACQUEUE            46  // Couldn't queue data on sound channel.\n#define ERROR_QMIX_MACRESUME           47  // Couldn't resume paused sound channel.\n#define ERROR_QMIX_CATCH               48  // Caught unknown error.\n#define ERROR_QMIX_HOLD                49  // Unable to prevent virtual memory from being paged.\n#define ERROR_QMIX_INVALIDPARAM        50  // Invalid parameter.\n#define ERROR_QMIX_DSB_STATUS          51  // Couldn't get DirectSound buffer status.\n#define ERROR_QMIX_DSB_POSITION        52  // Couldn't get DirectSound buffer position.\n#define ERROR_QMIX_DSOUNDMIXPRIMARY    53  // Can't mix into primary buffer (DirectSound driver is probably emulated).\n\n\n/* set to byte packing so Win16 and Win32 structures will be the same */\n#pragma pack(1)\n\ntypedef struct WAVEMIXINFO {\n    WORD wSize;\n    BYTE bVersionMajor;\n    BYTE bVersionMinor;\n    char szDate[12]; /* Mmm dd yyyy */\n    DWORD dwFormats; /* see waveOutGetDevCaps (wavemix requires synchronous device) */\n}\nWAVEMIXINFO, *PWAVEMIXINFO, FAR * LPWAVEMIXINFO;\n\n_QMIXIMP\nWORD\nWINAPI\nQSWaveMixGetInfo(\n    LPWAVEMIXINFO lpWaveMixInfo\n    );\n\n\n//\n// Constants, structure, and declaration for obsolete configuration function.\n//\n\n#define WMIX_CONFIG_CHANNELS       0x0001\n#define WMIX_CONFIG_SAMPLINGRATE   0x0002\n#define WMIX_CONFIG_DIRECTSOUND    0x0004\n#define WMIX_CONFIG_USEPRIMARY     0x0008\n#define WMIX_CONFIG_INPUTCHANNELS  0x0010\n#define WMIX_CONFIG_OUTPUT         0x0020\n#define WMIX_CONFIG_LATENCY        0x0040\n#define WMIX_CONFIG_NOTHREAD       0x0080\n\n#define WMIX_OUTPUT_WAVEOUT       0\n#define WMIX_OUTPUT_DIRECTSOUND   1\n#define WMIX_OUTPUT_NATIVEAUDIO   2     // not implemented\n\ntypedef struct MIXCONFIG {\n    WORD wSize;\n    DWORD dwFlags;\n    WORD wChannels;       // 1=MONO, 2=STEREO\n    WORD wSamplingRate;   // 11=11025, 22=22050, 44=44100 Hz\n    LPVOID lpIDirectSound;\n    WORD wInputChannels;\n    WORD wOutput;\n    WORD wLatency;\n}\nMIXCONFIG, *PMIXCONFIG, FAR * LPMIXCONFIG;\n\n_QMIXIMP\nHQMIXER\nWINAPI\nQSWaveMixConfigureInit(\n    LPMIXCONFIG lpConfig\n    );\n\n\n//\n// Obsolete wave opening function.\n//\n\n//\n// Structure for opening waves that are already residing in memory.\n// Note that the dwSamples parameter is a new field needed for using\n// compressed data.  To keep backwards compatibility, it is only used\n// when QSWaveMixOpenWave is used with the QMIX_RESIDENT_COMPRESSED\n// parameter.\n//\n#define QMIX_RESIDENT_COMPRESSED    0x0009  // QMIX_RESIDENT with valid dwSample parameter\n\ntypedef struct QMEMRESIDENT {\n    PCMWAVEFORMAT* pcm;     // format; LPWAVEFORMATEX works here too\n    HPSTR lpData;           // pointer to memory resident audio samples\n    DWORD dwDataSize;       // length of data, in bytes\n    WORD tag;               // user-defined id (used in MIXWAVE.szWaveFilename)\n    DWORD dwSamples;        // number of samples in compressed wave\n}\nQMEMRESIDENT, * PQMEMRESIDENT, FAR * LPQMEMRESIDENT;\n\n//\n// Structure for a wave that will get audio from user callback function.\n//\n#if defined(_WIN32)\n    typedef void (__cdecl* LPQMIXSTREAMCALLBACK)(void* buffer, DWORD bytes, void* user);\n#endif\n#if defined(MACINTOSH)\n    typedef void (* LPQMIXSTREAMCALLBACK)(void* buffer, DWORD bytes, void* user);\n#endif\ntypedef struct QINPUTSTREAM {\n    PCMWAVEFORMAT* pcm;     // format of input data:  must be in PCM\n    DWORD dwBlockLength;    // preferred block length (bytes)\n    LPQMIXSTREAMCALLBACK callback;\n                            // callback called when more data needed\n    void *user;             // user data sent to callback\n    WORD tag;\n}\nQINPUTSTREAM, *PQINPUTSTREAM, FAR* LPQINPUTSTREAM;\n\n//\n// Open wave file.  The szWaveFilename parameter is one of the\n// following:\n//   - name of file (QMIX_FILE and QMIX_FILESTREAM flags),\n//   - name of resource (also need to set hInst) (QMIX_RESOURCE flag),\n//   - LPQMEMRESIDENT pointer cast to LPSTR (QMIX_RESIDENT flag),\n//   - LPQINPUTSTREAM pointer cast to LPSTR (QMIX_INPUTSTREAM flag),\n//   - LPMMIOINFO pointer cast to LPSTR (QMIX_MEMORY flag),\n//   - FSSpec* pointer cast to LPSTR (on Macintosh) (QMIX_FILESPEC flag),\n//\n_QMIXIMP\nLPMIXWAVE\nWINAPI\nQSWaveMixOpenWave(\n    HQMIXER hQMixer,\n    LPSTR szWaveFilename,   // see notes above\n    HINSTANCE hInst,        // only required when QMIX_RESOURCE flag set\n    DWORD dwFlags\n    );\n\n\ntypedef struct QPOSITION {\n    int azimuth;            // degrees; 0 is straight ahead, 90 is to the right\n    int range;              // 0 to 32767; 0 is closest\n    int elevation;          // -90 to 90 degrees\n} QPOSITION, FAR* LPQPOSITION;\n\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixSetPosition(\n    HQMIXER hQMixer,\n    int iChannel,\n    DWORD dwFlags,\n    const QPOSITION* lpQPosition\n    );\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixGetPosition(\n    HQMIXER hQMixer,\n    int iChannel,\n    LPQPOSITION lpQPosition\n    );\n\n//\n// Obsolete play function.\n//\n\n#define QMIX_USEPOSITION    0x10    // use the MIXPLAYPARAMS.position field\n\ntypedef struct MIXPLAYPARAMS {\n    WORD wSize;             // this must be set\n    HQMIXER hMixSession;    // value returned by QSWaveMixInit or QSWaveMixConfigureInit\n    int iChannel;           // channel number\n    LPMIXWAVE lpMixWave;    // pointer returned by QSWaveMixOpenWave\n    HWND hWndNotify;        // if set, WOM_OPEN and WOM_DONE notification messages sent here\n    DWORD dwFlags;\n    WORD wLoops;            // 0xFFFF means loop forever\n    int qVolume;            // initial volume; set to -1 to use default\n    int qPanPos;            // initial pan position; set to -1 to use default\n    LPMIXWAVE lpImage;      // set to preprocessed data for high performance\n    QPOSITION position;     // initial position (used only if QMIX_USEPOSITION set)\n}\nMIXPLAYPARAMS, * PMIXPLAYPARAM, FAR* LPMIXPLAYPARAMS;\n\n_QMIXIMP\nMMRESULT\nWINAPI\nQSWaveMixPlay(\n    LPMIXPLAYPARAMS lpMixPlayParams\n    );\n\n\n/* return to default packing */\n#pragma pack()\n\n//\n// Obsolete constants.\n//\n#define WMIX_ALL                   QMIX_ALL\n#define WMIX_NOREMIX               QMIX_NOREMIX\n#define WMIX_CONTROL_NOREMIX       QMIX_CONTROL_NOREMIX\n\n#define WMIX_OPENSINGLE            QMIX_OPENSINGLE\n#define WMIX_OPENALL               QMIX_OPENALL\n#define WMIX_OPENCOUNT             QMIX_OPENCOUNT\n#define WMIX_OPENAVAILABLE         QMIX_OPENAVAILABLE\n\n#define WMIX_FILE                  QMIX_FILE\n#define WMIX_RESOURCE              QMIX_RESOURCE\n#define WMIX_MEMORY                QMIX_MEMORY\n#define WMIX_RESIDENT              QMIX_RESIDENT\n#define WMIX_FILESTREAM            QMIX_FILESTREAM\n#define WMIX_INPUTSTREAM           QMIX_INPUTSTREAM\n\n#define WMIX_QUEUEWAVE             QMIX_QUEUEWAVE\n#define WMIX_CLEARQUEUE            QMIX_CLEARQUEUE\n#define WMIX_USELRUCHANNEL         QMIX_USELRUCHANNEL\n#define WMIX_HIPRIORITY            QMIX_HIPRIORITY\n#define WMIX_HIGHPRIORITY          QMIX_HIGHPRIORITY\n#define WMIX_WAIT                  QMIX_WAIT\n#define WMIX_USEPOSITION           QMIX_USEPOSITION\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n"
  },
  {
    "path": "Include/sst1init.h",
    "content": "/*-*-c++-*-*/\n/*\n** Copyright (c) 1997, 3Dfx Interactive, Inc.\n** All Rights Reserved.\n**\n** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.;\n** the contents of this file may not be disclosed to third parties, copied or\n** duplicated in any form, in whole or in part, without the prior written\n** permission of 3Dfx Interactive, Inc.\n**\n** RESTRICTED RIGHTS LEGEND:\n** Use, duplication or disclosure by the Government is subject to restrictions\n** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data\n** and Computer Software clause at DFARS 252.227-7013, and/or in similar or\n** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished  -\n** rights reserved under the Copyright Laws of the United States.\n**\n**\n** $Revision: 62 $ \n** $Date: 7/24/98 1:38p $ \n**\n*/\n\n#ifndef __SST1INIT_H__\n#define __SST1INIT_H__\n\n/*\n** Copyright (c) 1996, 3Dfx Interactive, Inc.\n** All Rights Reserved.\n**\n** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.;\n** the contents of this file may not be disclosed to third parties, copied or\n** duplicated in any form, in whole or in part, without the prior written\n** permission of 3Dfx Interactive, Inc.\n**\n** RESTRICTED RIGHTS LEGEND:\n** Use, duplication or disclosure by the Government is subject to restrictions\n** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data\n** and Computer Software clause at DFARS 252.227-7013, and/or in similar or\n** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished  -\n** rights reserved under the Copyright Laws of the United States.\n**\n** $Revision: 62 $\n** $Date: 7/24/98 1:38p $\n**\n** SST-1 Initialization routine protypes\n**\n** If all initialization routines are called, it is assumed they are called\n** in the following order:\n**   1. sst1InitMapBoard();\n**   2. sst1InitRegisters();\n**   3. sst1InitGamma();\n**   4. sst1InitVideoBuffers();\n**   5. sst1InitSli(); [Optional]\n**   6. sst1InitCmdFifo();\n**\n** sst1InitShutdown() is called at the end of an application to turn off\n**  the SST-1 graphics subsystem\n**\n*/\n\n/* sst1init.h assumes \"glide.h\" and \"sst.h\" are already included */\n\n/* Init code debug print routine */\n#ifdef INIT_DOS /* Glide version... */\n#define INIT_OUTPUT\n#define INIT_PRINTF(a) sst1InitPrintf a\n#define INIT_INFO(A)\n#endif\n\n#ifndef DIRECTX\n#undef GETENV\n#undef ATOI\n#undef ATOF\n#undef SSCANF\n#undef POW\n#define GETENV(A) sst1InitGetenv(A)\n#define ATOI(A) atoi(A)\n#define ATOF(A) atof(A)\n#define SSCANF( A, B, C ) sscanf( A, B, C )\n#define POW( A, B ) pow( A, B )\n#define FTOL( X ) ((FxU32)(X))\n\n// Video resolution declarations\n#include \"sst1vid.h\"\n\n// Info Structure declaration\n#include \"cvginfo.h\"\n\n#else /* DIRECTX */\n#include \"ddglobal.h\"\n#pragma optimize (\"\",off)   /* ddglobal.h tuns this on for retail builds */\n#undef INIT_PRINTF\n#undef INIT_INFO\n#undef GETENV\n#undef ATOI\n#undef ATOF\n#undef FTOL\n#undef ITOF_INV\n#undef SSCANF\n#undef POW\n/* #define INIT_PRINTF(a) */\n#ifdef FXTRACE\n  #define INIT_PRINTF DDPRINTF\n#else\n  #define INIT_PRINTF 1 ? (void) 0 : (void)\n#endif\n#define INIT_INFO(A)\n#define GETENV(A)  ddgetenv(A)\n#define ATOI(A) ddatoi(A)\n#define ATOF(A) ddatof(A)\n#define FTOL(A) ddftol(A)\n#define ITOF_INV(A) dd_itof_inv(A)\n#define SSCANF( A, B, C ) ddsscanf( A, B, C )\n#define POW( A, B ) ddpow( A, B )\n\n#endif /* DIRECTX */\n\n/* Defines to writing to/reading from SST-1 */\n#if 0\n#define IGET(A)    A\n#define ISET(A,D)  A = (D)\n#else\n#define IGET(A)    sst1InitRead32((FxU32 *) &(A))\n#define ISET(A,D)  sst1InitWrite32((FxU32 *) &(A), D)  \n#endif\n\n/*\n**  P6 Fence\n** \n**  Here's the stuff to do P6 Fencing.  This is required for the\n**  certain things on the P6\n*/\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifdef SST1INIT_ALLOCATE\n  FxU32 p6FenceVar;\n#else\n  extern FxU32 p6FenceVar;\n#endif\n\n#if defined(__WATCOMC__)\nvoid\np6Fence(void);\n#  pragma aux p6Fence = \\\n      \"xchg eax, p6FenceVar\" \\\n      modify [eax];\n#  define P6FENCE p6Fence()\n#elif defined(__MSC__)\n#  define P6FENCE {_asm xchg eax, p6FenceVar}\n#elif defined(macintosh) && __POWERPC__ && defined(__MWERKS__)\n#  define P6FENCE __eieio()\n#else\n#  error \"P6 Fencing in-line assembler code needs to be added for this compiler\"\n#endif  \n\n#ifdef __cplusplus\n}\n#endif\n\n#ifndef _FXPCI_H_\n#include <fxpci.h>\n#endif\n#include <sst1_pci.h>\n\n/*--------------------------------------------------------*/\n/* Following defines need to go in \"cvgdefs.h\" eventually */\n#define SST_CMDFIFO_ADDR                   BIT(21) \n\n/*--------- SST PCI Configuration Command bits --------------*/\n#define SST_PCIMEM_ACCESS_EN               BIT(1)\n\n/*------- SST PCI Configuration Register defaults -----------*/\n#define SST_PCI_INIT_ENABLE_DEFAULT        0x0\n#define SST_PCI_BUS_SNOOP_DEFAULT          0x0\n\n/*--- SST PCI Init Enable Configuration Register defaults ---*/\n#define SST_SLI_OWNPCI                     SST_SCANLINE_SLV_OWNPCI\n#define SST_SLI_MASTER_OWNPCI              0x0\n#define SST_SLI_SLAVE_OWNPCI               SST_SCANLINE_SLV_OWNPCI\n#define SST_CHUCK_REVISION_ID_SHIFT        12\n#define SST_CHUCK_REVISION_ID              (0xF<<SST_CHUCK_REVISION_ID_SHIFT)\n#define SST_CHUCK_MFTG_ID_SHIFT            16\n#define SST_CHUCK_MFTG_ID                  (0xF<<SST_CHUCK_MFTG_ID_SHIFT)\n#define SST_PCI_INTR_EN                    BIT(20)\n#define SST_PCI_INTR_TIMEOUT_EN            BIT(21)\n#define SST_SLI_SNOOP_EN                   BIT(23)\n#define SST_SLI_SNOOP_MEMBASE_SHIFT        24\n#define SST_SLI_SNOOP_MEMBASE              (0xFF<<SST_SLI_SNOOP_MEMBASE_SHIFT)\n\n/*------- SST Silicon Process Monitor Register Defines ------*/\n#define SST_SIPROCESS_OSC_CNTR             0xFFFF\n#define SST_SIPROCESS_PCI_CNTR_SHIFT       16\n#define SST_SIPROCESS_PCI_CNTR             (0xFFF<<SST_SIPROCESS_PCI_CNTR_SHIFT)\n#define SST_SIPROCESS_OSC_CNTR_RESET_N     0\n#define SST_SIPROCESS_OSC_CNTR_RUN         BIT(28)\n#define SST_SIPROCESS_OSC_NAND_SEL         0\n#define SST_SIPROCESS_OSC_NOR_SEL          BIT(29)\n#define SST_SIPROCESS_OSC_FORCE_ENABLE     BIT(30)\n\n/*----------------- SST fbiinit0 bits -----------------------*/\n//#define SST_FBIINIT0_DEFAULT               0x00000410\n// Must include SST_EN_TEX_MEMFIFO and SST_EN_LFB_MEMFIFO in FBIINIT0_DEFAULT\n// or else texture memory detection will hang on some machines (see bug_3.c)\n#define SST_FBIINIT0_DEFAULT               (0x00000410 | SST_EN_TEX_MEMFIFO | \\\n                                            SST_EN_LFB_MEMFIFO)\n#define SST_GRX_RESET                      BIT(1)\n#define SST_PCI_FIFO_RESET                 BIT(2)\n#define SST_EN_ENDIAN_SWAPPING             BIT(3)\n\n/*----------------- SST fbiinit1 bits -----------------------*/\n#define SST_FBIINIT1_DEFAULT               0x00201102\n#define SST_VIDEO_TILES_MASK               0x010000F0\n#define SST_VIDEO_TILES_IN_X_MSB_SHIFT     24\n#define SST_VIDEO_TILES_IN_X_MSB           (1<<SST_VIDEO_TILES_IN_X_MSB_SHIFT)\n\n/*----------------- SST fbiinit2 bits -----------------------*/\n#define SST_FBIINIT2_DEFAULT               0x80000040\n#define SST_SWAP_ALGORITHM_SHIFT           9\n#define SST_SWAP_ALGORITHM                 (0x3<<SST_SWAP_ALGORITHM_SHIFT)\n#       define SST_SWAP_VSYNC              (0<<SST_SWAP_ALGORITHM_SHIFT)\n#       define SST_SWAP_DACDATA0           (1<<SST_SWAP_ALGORITHM_SHIFT)\n#       define SST_SWAP_FIFOSTALL          (2<<SST_SWAP_ALGORITHM_SHIFT)\n#       define SST_SWAP_SLISYNC            (3<<SST_SWAP_ALGORITHM_SHIFT)\n#define SST_DRAM_REFRESH_16MS              (0x30 << SST_DRAM_REFRESH_CNTR_SHIFT)\n\n/*----------------- SST fbiinit3 bits -----------------------*/\n#define SST_TEXMAP_DISABLE                 BIT(6)\n#define SST_FBI_MEM_TYPE_SHIFT             8\n#define SST_FBI_MEM_TYPE                   (0x7<<SST_FBI_MEM_TYPE_SHIFT)\n#define SST_FBI_VGA_PASS_POWERON           BIT(12)\n#define SST_FT_CLK_DEL_ADJ_SHIFT           13\n#define SST_FT_CLK_DEL_ADJ                 (0xF<<SST_FT_CLK_DEL_ADJ_SHIFT)\n#define SST_TF_FIFO_THRESH_SHIFT           17\n#define SST_TF_FIFO_THRESH                 (0x1F<<SST_TF_FIFO_THRESH_SHIFT)\n#define SST_FBIINIT3_DEFAULT               (0x001E4000|SST_TEXMAP_DISABLE)\n\n/*----------------- SST fbiinit4 bits -----------------------*/\n#define SST_FBIINIT4_DEFAULT               0x00000001\n#define SST_PCI_RDWS_1                     0x0\n#define SST_PCI_RDWS_2                     BIT(0)\n#define SST_EN_LFB_RDAHEAD                 BIT(1)\n#define SST_MEM_FIFO_LWM_SHIFT             2\n#define SST_MEM_FIFO_LWM                   (0x3F<<SST_MEM_FIFO_LWM_SHIFT)\n#define SST_MEM_FIFO_ROW_BASE_SHIFT        8\n#define SST_MEM_FIFO_ROW_BASE              (0x3FF<<SST_MEM_FIFO_ROW_BASE_SHIFT)\n#define SST_MEM_FIFO_ROW_ROLL_SHIFT        18\n#define SST_MEM_FIFO_ROW_ROLL              (0x3FF<<SST_MEM_FIFO_ROW_ROLL_SHIFT)\n\n/*----------------- SST fbiinit5 bits -----------------------*/\n#define SST_DAC_24BPP_PORT                 BIT(2)\n#define SST_GPIO_0                         BIT(3)\n#define SST_GPIO_0_DRIVE0                  0x0\n#define SST_GPIO_0_DRIVE1                  BIT(3)\n#define SST_GPIO_0_SHIFT                   3\n#define SST_GPIO_1                         BIT(4)\n#define SST_GPIO_1_DRIVE0                  0x0\n#define SST_GPIO_1_DRIVE1                  BIT(4)\n#define SST_GPIO_1_SHIFT                   4\n#define SST_BUFFER_ALLOC_SHIFT             9\n#define SST_BUFFER_ALLOC                   (0x3 << SST_BUFFER_ALLOC_SHIFT)\n#       define SST_BUFFER_ALLOC_2C0Z       (0x0 << SST_BUFFER_ALLOC_SHIFT)\n#       define SST_BUFFER_ALLOC_2C1Z       (0x0 << SST_BUFFER_ALLOC_SHIFT)\n#       define SST_BUFFER_ALLOC_3C0Z       (0x1 << SST_BUFFER_ALLOC_SHIFT)\n#       define SST_BUFFER_ALLOC_3C1Z       (0x2 << SST_BUFFER_ALLOC_SHIFT)\n#define SST_VIDEO_CLK_SLAVE_OE_EN          BIT(11)\n#define SST_VID_CLK_2X_OUT_OE_EN           BIT(12)\n#define SST_VID_CLK_DAC_DATA16_SEL         BIT(13)\n#define SST_SLI_DETECT                     BIT(14)\n#define SST_HVRETRACE_SYNC_READS           BIT(15)\n#define SST_COLOR_BORDER_RIGHT_EN          BIT(16)\n#define SST_COLOR_BORDER_LEFT_EN           BIT(17)\n#define SST_COLOR_BORDER_BOTTOM_EN         BIT(18)\n#define SST_COLOR_BORDER_TOP_EN            BIT(19)\n#define SST_SCAN_DOUBLE_HORIZ              BIT(20)\n#define SST_SCAN_DOUBLE_VERT               BIT(21)\n#define SST_GAMMA_CORRECT_16BPP_EN         BIT(22)\n#define SST_INVERT_HSYNC                   BIT(23)\n#define SST_INVERT_VSYNC                   BIT(24)\n#define SST_VIDEO_OUT_24BPP_EN             BIT(25)\n#define SST_GPIO_1_SEL                     BIT(27)\n#define SST_FBIINIT5_DEFAULT \\\n  (SST_HVRETRACE_SYNC_READS | \\\n   SST_GAMMA_CORRECT_16BPP_EN | \\\n   SST_GPIO_1_SEL)\n \n/*----------------- SST fbiinit6 bits -----------------------*/\n#define SST_SLI_SWAP_VACTIVE_SHIFT         0\n#define SST_SLI_SWAP_VACTIVE               (0x7<<SST_SLI_SWAP_VACTIVE_SHIFT)\n#define SST_SLI_SWAP_VACTIVE_DRAG_SHIFT    3\n#define SST_SLI_SWAP_VACTIVE_DRAG        (0x1F<<SST_SLI_SWAP_VACTIVE_DRAG_SHIFT)\n#define SST_SLI_SYNC_MASTER                BIT(8)\n#define SST_GPIO_2                         (0x3<<9)\n#define SST_GPIO_2_DRIVE0                  (0x2<<9)\n#define SST_GPIO_2_DRIVE1                  (0x3<<9)\n#define SST_GPIO_2_FLOAT                   (0x1<<9)\n#define SST_GPIO_2_SHIFT                   9\n#define SST_GPIO_3                         (0x3<<11)\n#define SST_GPIO_3_DRIVE0                  (0x2<<11)\n#define SST_GPIO_3_DRIVE1                  (0x3<<11)\n#define SST_GPIO_3_FLOAT                   (0x1<<11)\n#define SST_GPIO_3_SHIFT                   11\n#define SST_SLI_SYNCIN                     (0x3<<13)\n#define SST_SLI_SYNCIN_DRIVE0              (0x2<<13)\n#define SST_SLI_SYNCIN_DRIVE1              (0x3<<13)\n#define SST_SLI_SYNCIN_FLOAT               (0x1<<13)\n#define SST_SLI_SYNCOUT                    (0x3<<15)\n#define SST_SLI_SYNCOUT_DRIVE0             (0x2<<15)\n#define SST_SLI_SYNCOUT_DRIVE1             (0x3<<15)\n#define SST_SLI_SYNCOUT_FLOAT              (0x1<<15)\n#define SST_DAC_RD                         (0x3<<17)\n#define SST_DAC_RD_DRIVE0                  (0x2<<17)\n#define SST_DAC_RD_DRIVE1                  (0x3<<17)\n#define SST_DAC_RD_FLOAT                   (0x1<<17)\n#define SST_DAC_WR                         (0x3<<19)\n#define SST_DAC_WR_DRIVE0                  (0x2<<19)\n#define SST_DAC_WR_DRIVE1                  (0x3<<19)\n#define SST_DAC_WR_FLOAT                   (0x1<<19)\n#define SST_PCI_FIFO_LWM_RDY_SHIFT         21\n#define SST_PCI_FIFO_LWM_RDY               (0x7f<<SST_PCI_FIFO_LWM_RDY_SHIFT)\n#define SST_VGA_PASS_N                     (0x3<<28)\n#define SST_VGA_PASS_N_DRIVE0              (0x2<<28)\n#define SST_VGA_PASS_N_DRIVE1              (0x3<<28)\n#define SST_VIDEO_TILES_IN_X_LSB_SHIFT     30\n#define SST_VIDEO_TILES_IN_X_LSB           (1<<SST_VIDEO_TILES_IN_X_LSB_SHIFT)\n#define SST_FBIINIT6_DEFAULT               0x0\n\n/*----------------- SST fbiinit7 bits -----------------------*/\n#define SST_CMDFIFO_EN                     BIT(8)\n#define SST_CMDFIFO_STORE_OFFSCREEN        BIT(9)\n#define SST_CMDFIFO_DISABLE_HOLES          BIT(10)\n#define SST_CMDFIFO_RDFETCH_THRESH_SHIFT   11\n#define SST_CMDFIFO_RDFETCH_THRESH    (0x1FUL<<SST_CMDFIFO_RDFETCH_THRESH_SHIFT)\n#define SST_CMDFIFO_SYNC_WRITES            BIT(16)\n#define SST_CMDFIFO_SYNC_READS             BIT(17)\n#define SST_PCI_PACKER_RESET               BIT(18)\n#define SST_TMU_CHROMA_REG_WR_EN           BIT(19)\n#define SST_CMDFIFO_PCI_TIMEOUT_SHIFT      20\n#define SST_CMDFIFO_PCI_TIMEOUT          (0x7FUL<<SST_CMDFIFO_PCI_TIMEOUT_SHIFT)\n#define SST_TEXMEMWR_BURST_EN              BIT(27)\n#define SST_FBIINIT7_DEFAULT \\\n  (SST_TEXMEMWR_BURST_EN | SST_TMU_CHROMA_REG_WR_EN)\n\n/*----------------- SST trexInit0 bits -----------------------*/\n#define SST_EN_TEX_MEM_REFRESH             BIT(0)\n#define SST_TEX_MEM_REFRESH_SHIFT          1\n#define SST_TEX_MEM_REFRESH                (0x1FF<<SST_TEX_MEM_REFRESH_SHIFT)\n#define SST_TEX_MEM_PAGE_SIZE_SHIFT        10\n#define SST_TEX_MEM_PAGE_SIZE_8BITS        (0x0<<SST_TEX_MEM_PAGE_SIZE_SHIFT)\n#define SST_TEX_MEM_PAGE_SIZE_9BITS        (0x1<<SST_TEX_MEM_PAGE_SIZE_SHIFT)\n#define SST_TEX_MEM_PAGE_SIZE_10BITS       (0x2<<SST_TEX_MEM_PAGE_SIZE_SHIFT)\n#define SST_TEX_MEM_SECOND_RAS_BIT_SHIFT   12\n#define SST_TEX_MEM_SECOND_RAS_BIT_BIT17   (0x0<<SST_TEX_MEM_SECOND_RAS_BIT_SHIFT)\n#define SST_TEX_MEM_SECOND_RAS_BIT_BIT18   (0x1<<SST_TEX_MEM_SECOND_RAS_BIT_SHIFT)\n#define SST_EN_TEX_MEM_SECOND_RAS          BIT(14)\n#define SST_TEX_MEM_TYPE_SHIFT             15\n#define SST_TEX_MEM_TYPE_EDO               (0x0<<SST_TEX_MEM_TYPE_SHIFT)\n#define SST_TEX_MEM_TYPE_SYNC              (0x1<<SST_TEX_MEM_TYPE_SHIFT)\n#define SST_TEX_MEM_DATA_SIZE_16BIT        0x0\n#define SST_TEX_MEM_DATA_SIZE_8BIT         BIT(18)\n#define SST_TEX_MEM_DO_EXTRA_CAS           BIT(19)\n#define SST_TEX_MEM2                       BIT(20)\n\n#define SST_TREXINIT0_DEFAULT \\\n  ( (SST_EN_TEX_MEM_REFRESH)  \\\n  | (0x020 << SST_TEX_MEM_REFRESH_SHIFT) \\\n  | (SST_TEX_MEM_PAGE_SIZE_9BITS) \\\n  | (SST_TEX_MEM_SECOND_RAS_BIT_BIT18) \\\n  | (SST_EN_TEX_MEM_SECOND_RAS) \\\n  | (SST_TEX_MEM_TYPE_EDO) \\\n  | (SST_TEX_MEM_DATA_SIZE_16BIT) \\\n  | (0 & SST_TEX_MEM_DO_EXTRA_CAS) \\\n  | (0 & SST_TEX_MEM2)  )\n\n#define SST_TREX0INIT0_DEFAULT             SST_TREXINIT0_DEFAULT\n#define SST_TREX1INIT0_DEFAULT             SST_TREXINIT0_DEFAULT\n#define SST_TREX2INIT0_DEFAULT             SST_TREXINIT0_DEFAULT\n\n/*----------------- SST trexInit1 bits -----------------------*/\n#define SST_TEX_SCANLINE_INTERLEAVE_MASTER 0x0\n#define SST_TEX_SCANLINE_INTERLEAVE_SLAVE  BIT(0)\n#define SST_EN_TEX_SCANLINE_INTERLEAVE     BIT(1)\n#define SST_TEX_FT_FIFO_SIL_SHIFT          2\n#define SST_TEX_FT_FIFO_SIL                (0x1F<<SST_TEX_FT_FIFO_SIL_SHIFT)\n#define SST_TEX_TT_FIFO_SIL_SHIFT          7\n#define SST_TEX_TT_FIFO_SIL                (0xF<<SST_TEX_TT_FIFO_SIL_SHIFT)\n#define SST_TEX_TF_CLK_DEL_ADJ_SHIFT       12\n#define SST_TEX_TF_CLK_DEL_ADJ             (0xF<<SST_TEX_TF_CLK_DEL_ADJ_SHIFT)\n#define SST_TEX_RG_TTCII_INH               BIT(16)\n#define SST_TEX_USE_RG_TTCII_INH           BIT(17)\n#define SST_TEX_SEND_CONFIG                BIT(18)\n#define SST_TEX_RESET_FIFO                 BIT(19)\n#define SST_TEX_RESET_GRX                  BIT(20)\n#define SST_TEX_PALETTE_DEL_SHIFT          21\n#define SST_TEX_PALETTE_DEL                (0x3<<SST_TEX_PALETTE_DEL_SHIFT)\n#define SST_TEX_SEND_CONFIG_SEL_SHIFT      23\n#define SST_TEX_SEND_CONFIG_SEL            (0x7<<SST_TEX_SEND_CONFIG_SEL_SHIFT)\n\n/* After things stabilize, the fifo stall inputs levels should be backed off\n\n   from the max. conservative values that are being used now for better\n        performance.\n   SST_TEX_FT_FIFO_SIL =  ??\n   SST_TEX_TT_FIFO_SIL =  ??  (effects multi-trex only)\n        */\n\n/* for trex ver. 1 bringup, SST_TEX_PALETTE_DEL should be set to it's max\n   (== 3) for <50 MHz bringup */\n\n#define SST_TREXINIT1_DEFAULT \\\n  ( (SST_TEX_SCANLINE_INTERLEAVE_MASTER) \\\n  | (0 & SST_EN_TEX_SCANLINE_INTERLEAVE) \\\n  | (0x8 << SST_TEX_FT_FIFO_SIL_SHIFT) \\\n  | (0x8 << SST_TEX_TT_FIFO_SIL_SHIFT) \\\n  | (0xf << SST_TEX_TF_CLK_DEL_ADJ_SHIFT) \\\n  | (0 & SST_TEX_RG_TTCII_INH) \\\n  | (0 & SST_TEX_USE_RG_TTCII_INH) \\\n  | (0 & SST_TEX_SEND_CONFIG) \\\n  | (0 & SST_TEX_RESET_FIFO) \\\n  | (0 & SST_TEX_RESET_GRX) \\\n  | (0 << SST_TEX_PALETTE_DEL_SHIFT) \\\n  | (0 << SST_TEX_SEND_CONFIG_SEL_SHIFT) )\n\n#define SST_TREX0INIT1_DEFAULT              SST_TREXINIT1_DEFAULT\n#define SST_TREX1INIT1_DEFAULT              SST_TREXINIT1_DEFAULT\n#define SST_TREX2INIT1_DEFAULT              SST_TREXINIT1_DEFAULT\n\n/*----------------- SST clutData bits -----------------------*/\n#define SST_CLUTDATA_INDEX_SHIFT           24\n#define SST_CLUTDATA_RED_SHIFT             16\n#define SST_CLUTDATA_GREEN_SHIFT           8\n#define SST_CLUTDATA_BLUE_SHIFT            0\n\n/*----------------- SST video setup shifts ------------------*/\n#define SST_VIDEO_HSYNC_OFF_SHIFT          16\n#define SST_VIDEO_HSYNC_ON_SHIFT           0\n#define SST_VIDEO_VSYNC_OFF_SHIFT          16\n#define SST_VIDEO_VSYNC_ON_SHIFT           0\n#define SST_VIDEO_HBACKPORCH_SHIFT         0\n#define SST_VIDEO_VBACKPORCH_SHIFT         16\n#define SST_VIDEO_XDIM_SHIFT               0\n#define SST_VIDEO_YDIM_SHIFT               16\n\n/*----------------- SST dacData constants -------------------*/\n#define SST_DACREG_WMA                     0x0\n#define SST_DACREG_LUT                     0x1\n#define SST_DACREG_RMR                     0x2\n#define SST_DACREG_RMA                     0x3\n#define SST_DACREG_ICS_PLLADDR_WR          0x4 /* ICS only */\n#define SST_DACREG_ICS_PLLADDR_RD          0x7 /* ICS only */\n#define SST_DACREG_ICS_PLLADDR_DATA        0x5 /* ICS only */\n#define SST_DACREG_ICS_CMD                 0x6 /* ICS only */\n#define SST_DACREG_ICS_COLORMODE_16BPP     0x50 /* ICS only */\n#define SST_DACREG_ICS_COLORMODE_24BPP     0x70 /* ICS only */\n#define SST_DACREG_ICS_PLLADDR_VCLK0       0x0 /* ICS only */\n#define SST_DACREG_ICS_PLLADDR_VCLK1       0x1 /* ICS only */\n#define SST_DACREG_ICS_PLLADDR_VCLK7       0x7 /* ICS only */\n#define SST_DACREG_ICS_PLLADDR_VCLK1_DEFAULT 0x55 /* ICS only */\n#define SST_DACREG_ICS_PLLADDR_VCLK7_DEFAULT 0x71 /* ICS only */\n#define SST_DACREG_ICS_PLLADDR_GCLK0       0xa /* ICS only */\n#define SST_DACREG_ICS_PLLADDR_GCLK1       0xb /* ICS only */\n#define SST_DACREG_ICS_PLLADDR_GCLK1_DEFAULT 0x79 /* ICS only */\n#define SST_DACREG_ICS_PLLADDR_CTRL        0xe /* ICS only */\n#define SST_DACREG_ICS_PLLCTRL_CLK1SEL     BIT(4)\n#define SST_DACREG_ICS_PLLCTRL_CLK0SEL     BIT(5)\n#define SST_DACREG_ICS_PLLCTRL_CLK0FREQ    0x7\n#define SST_DACREG_INDEXADDR               SST_DACREG_WMA\n#define SST_DACREG_INDEXDATA               SST_DACREG_RMR\n#define SST_DACREG_INDEX_RMR               0x0\n#define SST_DACREG_INDEX_CR0               0x1\n#define SST_DACREG_INDEX_MIR               0x2\n#define SST_DACREG_INDEX_MIR_ATT_DEFAULT   0x84   /* AT&T */\n#define SST_DACREG_INDEX_MIR_TI_DEFAULT    0x97   /* TI */\n#define SST_DACREG_INDEX_DIR               0x3\n#define SST_DACREG_INDEX_DIR_ATT_DEFAULT   0x9    /* AT&T */\n#define SST_DACREG_INDEX_DIR_TI_DEFAULT    0x9    /* TI */\n#define SST_DACREG_INDEX_TST               0x4\n#define SST_DACREG_INDEX_CR1               0x5\n#define SST_DACREG_INDEX_CC                0x6\n#define SST_DACREG_INDEX_AA0               0xff  /* can't access */\n#define SST_DACREG_INDEX_AA1               0xff  /* can't access */\n#define SST_DACREG_INDEX_AB0               0xff  /* can't access */\n#define SST_DACREG_INDEX_AB1               0xff  /* can't access */\n#define SST_DACREG_INDEX_AB2               0xff  /* can't access */\n#define SST_DACREG_INDEX_AC0               0x48\n#define SST_DACREG_INDEX_AC1               0x49\n#define SST_DACREG_INDEX_AC2               0x4a\n#define SST_DACREG_INDEX_AD0               0x4c\n#define SST_DACREG_INDEX_AD1               0x4d\n#define SST_DACREG_INDEX_AD2               0x4e\n#define SST_DACREG_INDEX_BA0               0xff  /* can't access */\n#define SST_DACREG_INDEX_BA1               0xff  /* can't access */\n#define SST_DACREG_INDEX_BB0               0xff  /* can't access */\n#define SST_DACREG_INDEX_BB1               0xff  /* can't access */\n#define SST_DACREG_INDEX_BB2               0xff  /* can't access */\n#define SST_DACREG_INDEX_BC0               0xff  /* can't access */\n#define SST_DACREG_INDEX_BC1               0xff  /* can't access */\n#define SST_DACREG_INDEX_BC2               0xff  /* can't access */\n#define SST_DACREG_INDEX_BD0               0x6c\n#define SST_DACREG_INDEX_BD1               0x6d\n#define SST_DACREG_INDEX_BD2               0x6e\n\n#define SST_DACREG_CR0_INDEXED_ADDRESSING  BIT(0)\n#define SST_DACREG_CR0_8BITDAC             BIT(1)\n#define SST_DACREG_CR0_SLEEP               BIT(3)\n#define SST_DACREG_CR0_COLOR_MODE_SHIFT    4\n#define SST_DACREG_CR0_COLOR_MODE         (0xF<<SST_DACREG_CR0_COLOR_MODE_SHIFT)\n#define SST_DACREG_CR0_COLOR_MODE_16BPP   (0x3<<SST_DACREG_CR0_COLOR_MODE_SHIFT)\n#define SST_DACREG_CR0_COLOR_MODE_24BPP   (0x5<<SST_DACREG_CR0_COLOR_MODE_SHIFT)\n\n#define SST_DACREG_CR1_BLANK_PEDASTAL_EN  BIT(4)\n\n#define SST_DACREG_CC_BCLK_SEL_SHIFT       0\n#define SST_DACREG_CC_BCLK_SELECT_BD       BIT(3)\n#define SST_DACREG_CC_ACLK_SEL_SHIFT       4\n#define SST_DACREG_CC_ACLK_SELECT_AD       BIT(7)\n\n#define SST_DACREG_CLKREG_MSHIFT           0\n#define SST_DACREG_CLKREG_PSHIFT           6\n#define SST_DACREG_CLKREG_NSHIFT           0\n#define SST_DACREG_CLKREG_LSHIFT           4\n#define SST_DACREG_CLKREG_IBSHIFT          0\n\n#define SST_FBI_DACTYPE_ATT                0\n#define SST_FBI_DACTYPE_ICS                1\n#define SST_FBI_DACTYPE_TI                 2\n\n/* Definitions for parsing voodoo.ini file */\n#define DACRDWR_TYPE_WR                    0\n#define DACRDWR_TYPE_RDMODWR               1\n#define DACRDWR_TYPE_RDNOCHECK             2\n#define DACRDWR_TYPE_RDCHECK               3\n#define DACRDWR_TYPE_RDPUSH                4\n#define DACRDWR_TYPE_WRMOD_POP             5\n\n/* Other useful defines */\n#define PCICFG_WR(ADDR, DATA)                                         \\\n    n = DATA;                                                         \\\n    if(pciSetConfigData(ADDR, sst1InitDeviceNumber, &n) == FXFALSE)   \\\n        return(FXFALSE)\n#define PCICFG_RD(ADDR, DATA)                                          \\\n    if(pciGetConfigData(ADDR, sst1InitDeviceNumber, &DATA) == FXFALSE) \\\n        return(FXFALSE)\n#define DAC_INDEXWRADDR(ADDR)                                         \\\n    sst1InitDacWr(sstbase, SST_DACREG_INDEXADDR, ADDR)\n#define DAC_INDEXWR(DATA)                                             \\\n    sst1InitDacWr(sstbase, SST_DACREG_INDEXDATA, (DATA))\n#define DAC_INDEXRD()                                                 \\\n    sst1InitDacRd(sstbase, SST_DACREG_INDEXDATA)\n\n/*-----------------------------------------------------------*/\n\n/*\n** SST-1 Initialization typedefs\n**\n*/\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct {\n    float freq;\n    FxU32 clkTiming_M;\n    FxU32 clkTiming_P;\n    FxU32 clkTiming_N;\n    FxU32 clkTiming_L;\n    FxU32 clkTiming_IB;\n} sst1ClkTimingStruct;\n\ntypedef struct {\n    unsigned char type;\n    unsigned char addr;\n    FxU32 data;\n    FxU32 mask;\n    void *nextRdWr;\n} sst1InitDacRdWrStruct;\n\ntypedef struct {\n    FxU32 width;\n    FxU32 height;\n    FxU32 refresh;\n    FxU32 video16BPP;\n    sst1InitDacRdWrStruct *setVideoRdWr;\n    void *nextSetVideo;\n} sst1InitDacSetVideoStruct;\n\ntypedef struct {\n    FxU32 frequency;\n    sst1InitDacRdWrStruct *setMemClkRdWr;\n    void *nextSetMemClk;\n} sst1InitDacSetMemClkStruct;\n\ntypedef struct {\n    FxU32 video16BPP;\n    sst1InitDacRdWrStruct *setVideoModeRdWr;\n    void *nextSetVideoMode;\n} sst1InitDacSetVideoModeStruct;\n\ntypedef struct {\n    char dacManufacturer[100];\n    char dacDevice[100];\n    sst1InitDacRdWrStruct *detect;\n    sst1InitDacSetVideoStruct *setVideo;\n    sst1InitDacSetMemClkStruct *setMemClk;\n    sst1InitDacSetVideoModeStruct *setVideoMode;\n    void *nextDac;\n} sst1InitDacStruct;\n\n#define kMaxEnvVarLen 100\n#define kMaxEnvValLen 256\ntypedef struct {\n    char envVariable[kMaxEnvVarLen];\n    char envValue[kMaxEnvValLen];\n    void *nextVar;\n} sst1InitEnvVarStruct;\n\nFX_ENTRY FxU32 * FX_CALL sst1InitMapBoard(FxU32);\nFX_ENTRY FxU32 * FX_CALL sst1InitMapBoardDirect(FxU32, FxBool);\nFX_ENTRY FxU32 FX_CALL sst1InitNumBoardsInSystem(void);\nFX_ENTRY FxBool FX_CALL sst1InitRegisters(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitGamma(FxU32 *, double);\nFX_ENTRY FxBool FX_CALL sst1InitGammaRGB(FxU32 *, double, double, double);\nFX_ENTRY FxBool FX_CALL sst1InitGammaTable(FxU32 *, FxU32, FxU32 *, FxU32 *, FxU32 *);\n// Note: sst1InitVideo() is for compatibility with SST-1 only, and should\n// not be used for Voodoo2. Use sst1InitVideoBuffers() instead\nFX_ENTRY FxBool FX_CALL sst1InitVideo(FxU32 *, GrScreenResolution_t,\n  GrScreenRefresh_t, void *);\nFX_ENTRY FxBool FX_CALL sst1InitVideoBuffers(FxU32 *, GrScreenResolution_t,\n  GrScreenRefresh_t, FxU32, FxU32, sst1VideoTimingStruct *, FxBool);\nFX_ENTRY FxBool FX_CALL sst1InitAllocBuffers(FxU32 *, FxU32, FxU32);\nFX_ENTRY FxBool FX_CALL sst1InitVideoShutdown(FxU32 *, FxBool);\nFX_ENTRY FxBool FX_CALL sst1InitShutdown(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitShutdownSli(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitSli(FxU32 *, FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitGetDeviceInfo(FxU32 *, sst1DeviceInfoStruct *);\nFX_ENTRY FxBool FX_CALL sst1InitVideoBorder(FxU32 *, FxU32, FxU32);\n\n/* Miscellaneous routines */\nFX_ENTRY void FX_CALL sst1InitWrite32(FxU32 *, FxU32);\nFX_ENTRY FxU32 FX_CALL sst1InitRead32(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitIdle(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitIdleWithTimeout(FxU32 *, FxU32);\nFX_ENTRY FxBool FX_CALL sst1InitIdleNoNOP(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitIdleFBI(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitIdleFBINoNOP(FxU32 *);\nFX_ENTRY FxU32  FX_CALL sst1InitReturnStatus(FxU32 *);\nFX_ENTRY FxU32 FX_CALL sst1InitDacRd(FxU32 *, FxU32);\nFX_ENTRY void FX_CALL sst1InitDacWr(FxU32 *, FxU32, FxU32);\nFxBool sst1InitExecuteDacRdWr(FxU32 *, sst1InitDacRdWrStruct *);\nFX_ENTRY void FX_CALL sst1InitSetResolution(FxU32 *, sst1VideoTimingStruct *,\n    FxU32);\nFX_ENTRY FxBool FX_CALL sst1InitDacIndexedEnable(FxU32 *, FxU32);\nFX_ENTRY FxBool FX_CALL sst1InitGrxClk(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitCalcGrxClk(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitDacDetect(FxU32 *);\nFxBool sst1InitDacDetectATT(FxU32 *);\nFxBool sst1InitDacDetectTI(FxU32 *);\nFxBool sst1InitDacDetectICS(FxU32 *);\nFxBool sst1InitDacDetectINI(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitSetGrxClk(FxU32 *, sst1ClkTimingStruct *);\nFX_ENTRY FxBool FX_CALL sst1InitComputeClkParams(float, sst1ClkTimingStruct *);\nFxBool sst1InitComputeClkParamsATT(float, sst1ClkTimingStruct *);\nFxBool sst1InitComputeClkParamsTI(float, sst1ClkTimingStruct *);\nFxBool sst1InitSetGrxClkATT(FxU32 *, sst1ClkTimingStruct *);\nFxBool sst1InitSetGrxClkICS(FxU32 *, sst1ClkTimingStruct *);\nFxBool sst1InitSetGrxClkINI(FxU32 *, sst1ClkTimingStruct *);\nFX_ENTRY FxBool FX_CALL sst1InitSetVidClk(FxU32 *, float);\nFxBool sst1InitSetVidClkATT(FxU32 *, sst1ClkTimingStruct *);\nFxBool sst1InitSetVidClkICS(FxU32 *, sst1ClkTimingStruct *);\nFxBool sst1InitSetVidClkINI(FxU32 *, FxU32, FxU32, FxU32, FxU32);\nFxBool sst1InitSetVidMode(FxU32 *, FxU32);\nFxBool sst1InitSetVidModeATT(FxU32 *, FxU32);\nFxBool sst1InitSetVidModeICS(FxU32 *, FxU32);\nFxBool sst1InitSetVidModeINI(FxU32 *, FxU32);\nFX_ENTRY FxBool FX_CALL sst1InitCheckBoard(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitGetFbiInfo(FxU32 *, sst1DeviceInfoStruct *);\nFX_ENTRY FxBool FX_CALL sst1InitGetTmuInfo(FxU32 *, sst1DeviceInfoStruct *);\nFX_ENTRY void FX_CALL sst1InitRenderingRegisters(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitGetTmuMemory(FxU32 *sstbase,\n    sst1DeviceInfoStruct *info, FxU32 tmu, FxU32 *TmuMemorySize);\nFX_ENTRY FxBool FX_CALL sst1InitClearSwapPending(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitVgaPassCtrl(FxU32 *, FxU32);\nFX_ENTRY FxBool FX_CALL sst1InitResetFbi(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitResetTmus(FxU32 *);\nFX_ENTRY FxU32 FX_CALL sst1InitSliDetect(FxU32 *);\nFX_ENTRY FxU32 FX_CALL sst1InitSliPaired(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitVoodooFile(void);\nFX_ENTRY char * FX_CALL sst1InitGetenv(char *);\nFX_ENTRY FxU32 * FX_CALL sst1InitGetBaseAddr(FxU32);\nFxBool sst1InitFillDeviceInfo(FxU32 *, sst1DeviceInfoStruct *);\nvoid sst1InitIdleLoop(FxU32 *, FxBool);\nint sst1InitIdleWithTimeoutLoop(FxU32 *, FxBool, FxU32);\nvoid sst1InitPciFifoIdleLoop(FxU32 *);\nvoid sst1InitClearBoardInfo(void);\nFX_ENTRY FxBool FX_CALL sst1InitCaching(FxU32* sstBase, FxBool enableP);\nFX_ENTRY void FX_CALL sst1InitPrintInitRegs(FxU32 *);\nFX_ENTRY sst1VideoTimingStruct* FX_CALL\nsst1InitFindVideoTimingStruct(GrScreenResolution_t, GrScreenRefresh_t);\nFX_ENTRY FxU32 FX_CALL sst1InitMeasureSiProcess(FxU32 *, FxU32);\n\nFX_ENTRY FxBool FX_CALL sst1InitCmdFifo(FxU32 *, FxBool, FxU32 *, FxU32 *,\n                                        FxU32 *, FxSet32Proc);\nFX_ENTRY FxBool FX_CALL sst1InitCmdFifoDirect(FxU32 *, FxU32, FxU32, FxU32,\n                                              FxBool, FxBool, FxSet32Proc);\nFX_ENTRY FxBool FX_CALL sst1InitLfbLock(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitLfbLockDirect(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitLfbUnlock(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitLfbUnlockDirect(FxU32 *);\nFxU32 sst1InitConvertRefreshRate( FxU32 );\nFX_ENTRY FxBool FX_CALL sst1InitMonitorDetect(FxU32 *);\nFX_ENTRY FxBool FX_CALL sst1InitCalcTClkDelay(FxU32 *, FxU32, FxU32);\nFX_ENTRY FxBool FX_CALL sst1InitSetClkDelays(FxU32 *);\nvoid sst1InitCheckTmuMemConst(FxU32 *, FxU32, FxU32);\nvoid sst1InitDrawRectUsingTris(FxU32 *, FxU32, FxU32, FxU32);\n\n#ifdef __cplusplus\n}\n#endif\n\n/* Info/Print routines */\n#ifdef INIT_OUTPUT\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\nFX_ENTRY void FX_CALL sst1InitPrintf(const char *, ...);\n#ifdef __cplusplus\n}\n#endif\n\n#ifndef _FILE_DEFINED\n#include <stdio.h>\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifdef SST1INIT_ALLOCATE\nFILE *sst1InitMsgFile = stdout;\n#else\nextern FILE *sst1InitMsgFile;\n#endif\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n\n/* Maximum number of SST-1 boards supported in system */\n#define SST1INIT_MAX_BOARDS 16\n\n/* Maximum number of read pushes in \"voodoo.ini\" file */\n#define DACRDWR_MAX_PUSH    16\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifdef SST1INIT_ALLOCATE\n  static char headersIdent[] = \"@#%Voodoo2 InitHeaders $Revision: 62 $\";\n  FxBool sst1InitUseVoodooFile = FXFALSE;\n  sst1InitEnvVarStruct *envVarsBase = (sst1InitEnvVarStruct *) NULL;\n  sst1InitDacStruct *dacStructBase = (sst1InitDacStruct *) NULL;\n  sst1InitDacStruct *iniDac = (sst1InitDacStruct *) NULL;\n  sst1InitDacSetVideoStruct *iniVideo = (sst1InitDacSetVideoStruct *) NULL;\n  sst1InitDacSetMemClkStruct *iniMemClk = (sst1InitDacSetMemClkStruct *) NULL;\n  FxU32 iniStack[DACRDWR_MAX_PUSH];\n  int iniStackPtr = 0;\n  sst1DeviceInfoStruct *sst1CurrentBoard;\n  FxU32 sst1InitDeviceNumber;\n  sst1DeviceInfoStruct sst1BoardInfo[SST1INIT_MAX_BOARDS];\n  FxU32 boardsInSystem;\n  FxU32 boardsInSystemReally;\n  FxU32 initIdleEnabled = 1;\n\n\n  const PciRegister SST1_PCI_CFG_SCRATCH   = { 0x50, 4, READ_WRITE };\n  const PciRegister SST1_PCI_SIPROCESS     = { 0x54, 4, READ_WRITE };\n#else\n  extern FxBool sst1InitUseVoodooFile;\n  extern sst1InitEnvVarStruct *envVarsBase;\n  extern sst1InitDacStruct *dacStructBase;\n  extern sst1InitDacStruct *iniDac;\n  extern sst1InitDacSetVideoStruct *iniVideo;\n  extern sst1InitDacSetMemClkStruct *iniMemClk;\n  extern FxU32 iniStack[];\n  extern int iniStackPtr;\n  extern sst1DeviceInfoStruct *sst1CurrentBoard;\n  extern FxU32 sst1InitDeviceNumber;\n  extern sst1DeviceInfoStruct sst1BoardInfo[SST1INIT_MAX_BOARDS];\n  extern FxU32 boardsInSystem;\n  extern FxU32 boardsInSystemReally;\n  extern FxU32 initIdleEnabled;\n\n  extern PciRegister SST1_PCI_CFG_SCRATCH;\n  extern PciRegister SST1_PCI_SIPROCESS;\n#endif /* SST1INIT_ALLOCATE */\n\n#ifdef __3Dfx_PCI_CFG__\n/* This is really ugly, but it makes us happy w/ the top of the tree\n * pci library which is happier than Gary's library.  \n */\n#define SST1_PCI_INIT_ENABLE PCI_SST1_INIT_ENABLE \n#define SST1_PCI_BUS_SNOOP0  PCI_SST1_BUS_SNOOP_0 \n#define SST1_PCI_BUS_SNOOP1  PCI_SST1_BUS_SNOOP_1 \n#define SST1_PCI_CFG_STATUS  PCI_SST1_CFG_STATUS \n#else /* !__3Dfx_PCI_CFG__ */\n#define SST1_PCI_BUS_SNOOP0  SST1_PCI_BUS_SNOOP_0 \n#define SST1_PCI_BUS_SNOOP1  SST1_PCI_BUS_SNOOP_1\n#endif /* !__3Dfx_PCI_CFG__ */\n\n#ifdef __cplusplus\n}\n#endif\n\n#ifdef SST1INIT_VIDEO_ALLOCATE\n/* SST1INIT_VIDEO_ALLOCATE is only #defined in video.c\n  \n   Define useful clock and video timings\n   Clocks generated are follows:\n     Clock Freq. (MHz) =\n       [14.318 * (clkTiming_M+2)] / [(clkTiming_N+2) * (2^clkTiming_P)]\n  \n   Solving for clkTiming_M yields:\n     clkTiming_M =\n       [ [(Clock Freq (Mhz)) * (clkTiming_N+2) * (2^clkTiming_P)] / 14.318 ] - 2\n     \n   NOTE: [14.318 * (clkTiming_M+2)] / (clkTiming_N+2) should be between\n    120 and 240\n   NOTE: Max. M is 127\n   NOTE: Max. N is 31\n   NOTE: Max. P is 3\n   NOTE: Max. L is 15\n   NOTE: Max. IB is 15\n*/\n\n\n/*  H3D video timing structures */\n#ifdef H3D\n/*  This guy's not used anywhere    */\nsst1VideoTimingStruct SST_VREZ_640X502_60 = {\n    96,        /* hSyncOn */\n    704,       /* hSyncOff */\n    2,         /* vSyncOn */\n    523,       /* vSyncOff */\n    38,        /* hBackPorch */\n    15,        /* vBackPorch */\n    640,       /* xDimension */\n    502,       /* yDimension */\n    60,        /* refreshRate */\n    0,         /* miscCtrl */\n    160,       /* memOffset */\n    20,        /* tilesInX */\n    25,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    25.175F,   /* clkFreq16bpp */\n    50.350F    /* clkFreq24bpp */\n};\n\n\n/* Line doubled 640x480...line doubling done externally */\nsst1VideoTimingStruct SST_VREZ_640X960LD_60 = {\n    45,        /* hSyncOn */\n    785,       /* hSyncOff */\n    3,         /* vSyncOn */\n    1044,      /* vSyncOff */\n    100,       /* hBackPorch */\n    18,        /* vBackPorch */\n    640,       /* xDimension */\n    502,       /* yDimension */\n    60,        /* refreshRate */\n    0,         /* miscCtrl */\n    160,       /* memOffset */\n    20,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    50.82F,    /* clkFreq16bpp */\n    101.64F    /* clkFreq24bpp */\n};\n\n\n/* Full resolution 640x480... */\nsst1VideoTimingStruct SST_VREZ_640X960_60 = {\n    45,        /* hSyncOn */\n    785,       /* hSyncOff */\n    3,         /* vSyncOn */\n    1044,      /* vSyncOff */\n    100,       /* hBackPorch */\n    18,        /* vBackPorch */\n    640,       /* xDimension */\n    1004,      /* yDimension */\n    60,        /* refreshRate */\n    0,         /* miscCtrl */\n    320,       /* memOffset */\n    20,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    50.82F,    /* clkFreq16bpp */\n    101.64F    /* clkFreq24bpp */\n};\n\n\n/* Line doubled 800x600...line doubling done externally */\nsst1VideoTimingStruct SST_VREZ_800X1200LD_45 = {\n    63,        /* hSyncOn */\n    983,       /* hSyncOff */\n    3,         /* vSyncOn */\n    1242,      /* vSyncOff */\n    150,       /* hBackPorch */\n    27,        /* vBackPorch */\n    800,       /* xDimension */\n    608,       /* yDimension */\n    42,        /* refreshRate */\n    0,         /* miscCtrl */\n    247,       /* memOffset */\n    26,        /* tilesInX */\n    19,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    56.25F,    /* clkFreq16bpp */\n    112.5F     /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_800X630_60 = {\n    127,       /* hSyncOn */\n    927,       /* hSyncOff */\n    4,         /* vSyncOn */\n    656,       /* vSyncOff */\n    86,        /* hBackPorch */\n    23,        /* vBackPorch */\n    800,       /* xDimension */\n    630,       /* yDimension */\n    60,        /* refreshRate */\n    0,         /* miscCtrl */\n    260,       /* memOffset */\n    26,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    40.0F,     /* clkFreq16bpp */\n    80.0F      /* clkFreq24bpp */\n};\n\n\n/* Full res 800x600...so far, ain't nobody got enough memory */\nsst1VideoTimingStruct SST_VREZ_800X1200_45 = {\n    63,        /* hSyncOn */\n    983,       /* hSyncOff */\n    3,         /* vSyncOn */\n    1244,      /* vSyncOff */\n    150,       /* hBackPorch */\n    27,        /* vBackPorch */\n    800,       /* xDimension */\n    1216,      /* yDimension */\n    42,        /* refreshRate */\n    0,         /* miscCtrl */\n    494,       /* memOffset */\n    26,        /* tilesInX */\n    19,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    56.25F,    /* clkFreq16bpp */\n    112.5F     /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_960X742_60 = {\n    103,       /* hSyncOn */\n    1151,      /* hSyncOff */\n    3,         /* vSyncOn */\n    765,       /* vSyncOff */\n    142,       /* hBackPorch */\n    22,        /* vBackPorch */\n    960,       /* xDimension */\n    742,       /* yDimension */\n    60,        /* refreshRate */\n    0,         /* miscCtrl */\n    360,       /* memOffset */\n    30,        /* tilesInX */\n    19,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    56.219F,   /* clkFreq16bpp */\n    112.437F   /* clkFreq24bpp */\n};\n\n#endif\n\n\nsst1VideoTimingStruct SST_VREZ_320X200_70 = {\n    96,        /* hSyncOn */\n    704,       /* hSyncOff */\n    2,         /* vSyncOn */\n    447,       /* vSyncOff */\n    48,        /* hBackPorch */\n    35,        /* vBackPorch */\n    320,       /* xDimension */\n    200,       /* yDimension */\n    70,        /* refreshRate */\n    0x3,       /* miscCtrl */\n    35,        /* memOffset */\n    10,        /* tilesInX */\n    25,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    25.175F,   /* clkFreq16bpp */\n    50.350F    /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_320X200_75 = {\n    99,        /* hSyncOn */\n    733,       /* hSyncOff */\n    3,         /* vSyncOn */\n    429,       /* vSyncOff */\n    52,        /* hBackPorch */\n    25,        /* vBackPorch */\n    320,       /* xDimension */\n    200,       /* yDimension */\n    75,        /* refreshRate */\n    0x3,       /* miscCtrl */\n    35,        /* memOffset */\n    10,        /* tilesInX */\n    25,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    27.0F,     /* clkFreq16bpp */\n    54.0F      /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_320X200_85 = {\n    63,        /* hSyncOn */\n    767,       /* hSyncOff */\n    3,         /* vSyncOn */\n    442,       /* vSyncOff */\n    94,        /* hBackPorch */\n    41,        /* vBackPorch */\n    320,       /* xDimension */\n    200,       /* yDimension */\n    85,        /* refreshRate */\n    0x3,       /* miscCtrl */\n    35,        /* memOffset */\n    10,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    31.5F,     /* clkFreq16bpp */\n    63.0F      /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_320X200_120 = {\n    67,        /* hSyncOn */\n    798,       /* hSyncOff */\n    3,         /* vSyncOn */\n    424,       /* vSyncOff */\n    94,        /* hBackPorch */\n    16,        /* vBackPorch */\n    320,       /* xDimension */\n    200,       /* yDimension */\n    120,       /* refreshRate */\n    0x3,       /* miscCtrl */\n    35,        /* memOffset */\n    10,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    44.47F,    /* clkFreq16bpp */\n    88.94F     /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_320X240_60 = {\n    96,        /* hSyncOn */\n    704,       /* hSyncOff */\n    2,         /* vSyncOn */\n    523,       /* vSyncOff */\n    38,        /* hBackPorch */\n    25,        /* vBackPorch */\n    320,       /* xDimension */\n    240,       /* yDimension */\n    60,        /* refreshRate */\n    0x3,       /* miscCtrl */\n    40,        /* memOffset */\n    10,        /* tilesInX */\n    25,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    25.175F,   /* clkFreq16bpp */\n    50.350F    /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_320X240_75 = {\n    63,        /* hSyncOn */\n    775,       /* hSyncOff */\n    3,         /* vSyncOn */\n    497,       /* vSyncOff */\n    118,       /* hBackPorch */\n    16,        /* vBackPorch */\n    320,       /* xDimension */\n    240,       /* yDimension */\n    75,        /* refreshRate */\n    0x3,       /* miscCtrl */\n    40,        /* memOffset */\n    10,        /* tilesInX */\n    25,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    31.5F,     /* clkFreq16bpp */\n    63.0F      /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_320X240_85 = {\n    55,        /* hSyncOn */\n    776,       /* hSyncOff */\n    3,         /* vSyncOn */\n    506,       /* vSyncOff */\n    78,        /* hBackPorch */\n    25,        /* vBackPorch */\n    320,       /* xDimension */\n    240,       /* yDimension */\n    85,        /* refreshRate */\n    0x3,       /* miscCtrl */\n    40,        /* memOffset */\n    10,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    36.0F,     /* clkFreq16bpp */\n    72.0F      /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_320X240_120 = {\n    45,        /* hSyncOn */\n    785,       /* hSyncOff */\n    3,         /* vSyncOn */\n    506,       /* vSyncOff */\n    100,       /* hBackPorch */\n    18,        /* vBackPorch */\n    320,       /* xDimension */\n    240,       /* yDimension */\n    120,       /* refreshRate */\n    0x3,       /* miscCtrl */\n    40,        /* memOffset */\n    10,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    50.82F,    /* clkFreq16bpp */\n    101.64F    /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_400X300_60 = {\n    39,        /* hSyncOn */\n    471,       /* hSyncOff */\n    3,         /* vSyncOn */\n    619,       /* vSyncOff */\n    54,        /* hBackPorch */\n    18,        /* vBackPorch */\n    400,       /* xDimension */\n    300,       /* yDimension */\n    60,        /* refreshRate */\n    0x2,       /* miscCtrl */\n    70,        /* memOffset */\n    14,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    19.108F,   /* clkFreq16bpp */\n    38.216F    /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_400X300_75 = {\n    39,        /* hSyncOn */\n    487,       /* hSyncOff */\n    3,         /* vSyncOn */\n    624,       /* vSyncOff */\n    62,        /* hBackPorch */\n    23,        /* vBackPorch */\n    400,       /* xDimension */\n    300,       /* yDimension */\n    75,        /* refreshRate */\n    0x2,       /* miscCtrl */\n    70,        /* memOffset */\n    14,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    24.829F,   /* clkFreq16bpp */\n    49.658F    /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_400X300_85 = {\n    39,        /* hSyncOn */\n    487,       /* hSyncOff */\n    3,         /* vSyncOn */\n    627,       /* vSyncOff */\n    62,        /* hBackPorch */\n    26,        /* vBackPorch */\n    400,       /* xDimension */\n    300,       /* yDimension */\n    85,        /* refreshRate */\n    0x2,       /* miscCtrl */\n    70,        /* memOffset */\n    14,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    28.274F,   /* clkFreq16bpp */\n    56.548F    /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_400X300_120 = {\n    39,        /* hSyncOn */\n    503,       /* hSyncOff */\n    3,         /* vSyncOn */\n    640,       /* vSyncOff */\n    70,        /* hBackPorch */\n    39,        /* vBackPorch */\n    400,       /* xDimension */\n    300,       /* yDimension */\n    120,       /* refreshRate */\n    0x2,       /* miscCtrl */\n    70,        /* memOffset */\n    14,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    41.975F,   /* clkFreq16bpp */\n    83.950F    /* clkFreq24bpp */\n};\n\n/* 512x256@60 only syncs to Arcade-style monitors */\nsst1VideoTimingStruct SST_VREZ_512X256_60 = {\n    41,        /* hSyncOn */\n    626,       /* hSyncOff */\n    4,         /* vSyncOn */\n    286,       /* vSyncOff */\n    65,        /* hBackPorch */\n    24,        /* vBackPorch */\n    512,       /* xDimension */\n    256,       /* yDimension */\n    60,        /* refreshRate */\n    0,         /* miscCtrl */\n    64,        /* memOffset */\n    16,        /* tilesInX */\n    25,        /* vFifoThreshold */\n    FXFALSE,   /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    23.334F,   /* clkFreq16bpp */\n    23.334F    /* clkFreq24bpp */\n};\n\n#if 0\n// For Arcade monitors...\nsst1VideoTimingStruct SST_VREZ_512X384_60 = {\n    23,        /* hSyncOn */\n    640,       /* hSyncOff */\n    3,         /* vSyncOn */\n    411,       /* vSyncOff */\n    90,        /* hBackPorch */\n    24,        /* vBackPorch */\n    512,       /* xDimension */\n    384,       /* yDimension */\n    60,        /* refreshRate */\n    0,         /* miscCtrl */\n    96,        /* memOffset */\n    16,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXFALSE,   /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    33.0F,     /* clkFreq16bpp */\n    33.0F      /* clkFreq24bpp */\n};\n#else\n// For PC monitors...\nsst1VideoTimingStruct SST_VREZ_512X384_60 = {\n    55,        /* hSyncOn */\n    615,       /* hSyncOff */\n    3,         /* vSyncOn */\n    792,       /* vSyncOff */\n    78,        /* hBackPorch */\n    23,        /* vBackPorch */\n    512,       /* xDimension */\n    384,       /* yDimension */\n    60,        /* refreshRate */\n    0x2,       /* miscCtrl */\n    96,        /* memOffset */\n    16,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    32.054F,   /* clkFreq16bpp */\n    64.108F    /* clkFreq24bpp */\n};\n#endif\n\nsst1VideoTimingStruct SST_VREZ_512X384_72 = {\n    51,        /* hSyncOn */\n    591,       /* hSyncOff */\n    3,         /* vSyncOn */\n    430,       /* vSyncOff */\n    55,        /* hBackPorch */\n    25,        /* vBackPorch */\n    512,       /* xDimension */\n    384,       /* yDimension */\n    72,        /* refreshRate */\n    0,         /* miscCtrl */\n    96,        /* memOffset */\n    16,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    20.093F,   /* clkFreq16bpp */\n    40.186F    /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_512X384_75 = {\n    55,        /* hSyncOn */\n    631,       /* hSyncOff */\n    3,         /* vSyncOn */\n    799,       /* vSyncOff */\n    86,        /* hBackPorch */\n    30,        /* vBackPorch */\n    512,       /* xDimension */\n    384,       /* yDimension */\n    75,        /* refreshRate */\n    0x2,       /* miscCtrl */\n    96,        /* memOffset */\n    16,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    41.383F,   /* clkFreq16bpp */\n    82.766F    /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_512X384_75_NOSCANDOUBLE = {\n    47,        /* hSyncOn */\n    591,       /* hSyncOff */\n    3,         /* vSyncOn */\n    399,       /* vSyncOff */\n    62,        /* hBackPorch */\n    14,        /* vBackPorch */\n    512,       /* xDimension */\n    384,       /* yDimension */\n    75,        /* refreshRate */\n    0,         /* miscCtrl */\n    96,        /* memOffset */\n    16,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    19.296F,   /* clkFreq16bpp */\n    38.592F    /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_512X384_85 = {\n    55,        /* hSyncOn */\n    631,       /* hSyncOff */\n    3,         /* vSyncOn */\n    804,       /* vSyncOff */\n    86,        /* hBackPorch */\n    35,        /* vBackPorch */\n    512,       /* xDimension */\n    384,       /* yDimension */\n    85,        /* refreshRate */\n    0x2,       /* miscCtrl */\n    96,        /* memOffset */\n    16,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    47.193F,   /* clkFreq16bpp */\n    94.386F    /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_512X384_85_NOSCANDOUBLE = {\n    55,        /* hSyncOn */\n    599,       /* hSyncOff */\n    3,         /* vSyncOn */\n    401,       /* vSyncOff */\n    70,        /* hBackPorch */\n    16,        /* vBackPorch */\n    512,       /* xDimension */\n    384,       /* yDimension */\n    85,        /* refreshRate */\n    0,         /* miscCtrl */\n    96,        /* memOffset */\n    16,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    22.527F,   /* clkFreq16bpp */\n    45.054F    /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_512X384_120 = {\n    25,        /* hSyncOn */\n    650,       /* hSyncOff */\n    3,         /* vSyncOn */\n    409,       /* vSyncOff */\n    110,       /* hBackPorch */\n    25,        /* vBackPorch */\n    512,       /* xDimension */\n    384,       /* yDimension */\n    120,       /* refreshRate */\n    0,         /* miscCtrl */\n    96,        /* memOffset */\n    16,        /* tilesInX */\n    25,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    33.5F,     /* clkFreq16bpp */\n    67.0F      /* clkFreq24bpp */\n};\n\n/* Verified 10/21/96 */\nsst1VideoTimingStruct SST_VREZ_640X400_70 = {\n    96,        /* hSyncOn */\n    704,       /* hSyncOff */\n    2,         /* vSyncOn */\n    447,       /* vSyncOff */\n    48,        /* hBackPorch */\n    35,        /* vBackPorch */\n    640,       /* xDimension */\n    400,       /* yDimension */\n    70,        /* refreshRate */\n    0,         /* miscCtrl */\n    130,       /* memOffset */\n    20,        /* tilesInX */\n    25,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    25.175F,   /* clkFreq16bpp */\n    50.350F    /* clkFreq24bpp */\n};\n\n/* Verified 10/21/96 */\nsst1VideoTimingStruct SST_VREZ_640X400_75 = {\n    99,        /* hSyncOn */\n    733,       /* hSyncOff */\n    3,         /* vSyncOn */\n    429,       /* vSyncOff */\n    52,        /* hBackPorch */\n    25,        /* vBackPorch */\n    640,       /* xDimension */\n    400,       /* yDimension */\n    75,        /* refreshRate */\n    0,         /* miscCtrl */\n    130,       /* memOffset */\n    20,        /* tilesInX */\n    25,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    27.0F,     /* clkFreq16bpp */\n    54.0F      /* clkFreq24bpp */\n};\n\n/* VESA Standard */\n/* Verified 10/21/96 */\nsst1VideoTimingStruct SST_VREZ_640X400_85 = {\n    63,        /* hSyncOn */\n    767,       /* hSyncOff */\n    3,         /* vSyncOn */\n    442,       /* vSyncOff */\n    94,        /* hBackPorch */\n    41,        /* vBackPorch */\n    640,       /* xDimension */\n    400,       /* yDimension */\n    85,        /* refreshRate */\n    0,         /* miscCtrl */\n    130,       /* memOffset */\n    20,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    31.5F,     /* clkFreq16bpp */\n    63.0F      /* clkFreq24bpp */\n};\n\n/* Verified 10/21/96 */\nsst1VideoTimingStruct SST_VREZ_640X400_120 = {\n    67,        /* hSyncOn */\n    798,       /* hSyncOff */\n    3,         /* vSyncOn */\n    424,       /* vSyncOff */\n    94,        /* hBackPorch */\n    16,        /* vBackPorch */\n    640,       /* xDimension */\n    400,       /* yDimension */\n    120,       /* refreshRate */\n    0,         /* miscCtrl */\n    130,       /* memOffset */\n    20,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    44.47F,    /* clkFreq16bpp */\n    88.94F     /* clkFreq24bpp */\n};\n\n/* VESA Standard */\n/* Verified 10/21/96 */\nsst1VideoTimingStruct SST_VREZ_640X480_60 = {\n    96,        /* hSyncOn */\n\n    704,       /* hSyncOff */\n    2,         /* vSyncOn */\n    523,       /* vSyncOff */\n    38,        /* hBackPorch */\n    25,        /* vBackPorch */\n    640,       /* xDimension */\n    480,       /* yDimension */\n    60,        /* refreshRate */\n    0,         /* miscCtrl */\n    150,       /* memOffset */\n    20,        /* tilesInX */\n    25,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    25.175F,   /* clkFreq16bpp */\n    50.350F    /* clkFreq24bpp */\n};\n\n/* VESA Standard */\n/* Verified 10/21/96 */\nsst1VideoTimingStruct SST_VREZ_640X480_75 = {\n    63,        /* hSyncOn */\n    775,       /* hSyncOff */\n    3,         /* vSyncOn */\n    497,       /* vSyncOff */\n    118,       /* hBackPorch */\n    16,        /* vBackPorch */\n    640,       /* xDimension */\n    480,       /* yDimension */\n    75,        /* refreshRate */\n    0,         /* miscCtrl */\n    150,       /* memOffset */\n    20,        /* tilesInX */\n    25,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    31.5F,     /* clkFreq16bpp */\n    63.0F      /* clkFreq24bpp */\n};\n\n/* VESA Standard */\n/* Verified 10/21/96 */\nsst1VideoTimingStruct SST_VREZ_640X480_85 = {\n    55,        /* hSyncOn */\n    776,       /* hSyncOff */\n    3,         /* vSyncOn */\n    506,       /* vSyncOff */\n    78,        /* hBackPorch */\n    25,        /* vBackPorch */\n    640,       /* xDimension */\n    480,       /* yDimension */\n    85,        /* refreshRate */\n    0,         /* miscCtrl */\n    150,       /* memOffset */\n    20,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    36.0F,     /* clkFreq16bpp */\n    72.0F      /* clkFreq24bpp */\n};\n\n/* Verified 10/21/96 */\nsst1VideoTimingStruct SST_VREZ_640X480_120 = {\n    45,        /* hSyncOn */\n    785,       /* hSyncOff */\n    3,         /* vSyncOn */\n    506,       /* vSyncOff */\n    100,       /* hBackPorch */\n    18,        /* vBackPorch */\n    640,       /* xDimension */\n    480,       /* yDimension */\n    120,       /* refreshRate */\n    0,         /* miscCtrl */\n    150,       /* memOffset */\n    20,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    50.82F,    /* clkFreq16bpp */\n    101.64F    /* clkFreq24bpp */\n};\n\n/* VESA Standard */\n/* Verified 10/21/96 */\n// 800x600 requires 832x608 amount of memory usage...\nsst1VideoTimingStruct SST_VREZ_800X600_60 = {\n    127,       /* hSyncOn */\n    927,       /* hSyncOff */\n    4,         /* vSyncOn */\n    624,       /* vSyncOff */\n    86,        /* hBackPorch */\n    23,        /* vBackPorch */\n    800,       /* xDimension */\n    600,       /* yDimension */\n    60,        /* refreshRate */\n    0,         /* miscCtrl */\n    247,       /* memOffset */\n    26,        /* tilesInX */\n    23,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    40.0F,     /* clkFreq16bpp */\n    80.0F      /* clkFreq24bpp */\n};\n\n/* VESA Standard */\n/* Verified 10/21/96 */\nsst1VideoTimingStruct SST_VREZ_800X600_75 = {\n    79,        /* hSyncOn */\n    975,       /* hSyncOff */\n    3,         /* vSyncOn */\n    622,       /* vSyncOff */\n    158,       /* hBackPorch */\n    21,        /* vBackPorch */\n    800,       /* xDimension */\n    600,       /* yDimension */\n    75,        /* refreshRate */\n    0,         /* miscCtrl */\n    247,       /* memOffset */\n    26,        /* tilesInX */\n    21,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    49.5F,     /* clkFreq16bpp */\n    99.0F      /* clkFreq24bpp */\n};\n\n/* VESA Standard */\n/* Verified 10/21/96 */\nsst1VideoTimingStruct SST_VREZ_800X600_85 = {\n    63,        /* hSyncOn */\n    983,       /* hSyncOff */\n    3,         /* vSyncOn */\n    628,       /* vSyncOff */\n    150,       /* hBackPorch */\n    27,        /* vBackPorch */\n    800,       /* xDimension */\n    600,       /* yDimension */\n    85,        /* refreshRate */\n    0,         /* miscCtrl */\n    247,       /* memOffset */\n    26,        /* tilesInX */\n    19,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    56.25F,    /* clkFreq16bpp */\n    112.5F     /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_800X600_120 = {\n    87,        /* hSyncOn */\n    999,       /* hSyncOff */\n    3,         /* vSyncOn */\n    640,       /* vSyncOff */\n    142,       /* hBackPorch */\n    39,        /* vBackPorch */\n    800,       /* xDimension */\n    600,       /* yDimension */\n    120,       /* refreshRate */\n    0,         /* miscCtrl */\n    247,       /* memOffset */\n    26,        /* tilesInX */\n    17,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXFALSE,   /* video24BPPIsOK */\n    83.950F,   /* clkFreq16bpp */\n    83.950F    /* clkFreq24bpp -- unsupported */\n};\n\n// 856x480 requires 896x480 amount of memory usage...\nsst1VideoTimingStruct SST_VREZ_856X480_60 = {\n    136,       /* hSyncOn */\n    1008,      /* hSyncOff */\n    2,         /* vSyncOn */\n    523,       /* vSyncOff */\n    100,       /* hBackPorch */\n    23,        /* vBackPorch */\n    856,       /* xDimension */\n    480,       /* yDimension */\n    60,        /* refreshRate */\n    0,         /* miscCtrl */\n    210,       /* memOffset */\n    28,        /* tilesInX */\n    16,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    36.0F,     /* clkFreq16bpp */\n    72.0F      /* clkFreq24bpp */\n};\n\n// 960x720 requires 960x736 amount of memory usage...\nsst1VideoTimingStruct SST_VREZ_960X720_60 = {\n    103,       /* hSyncOn */\n    1151,      /* hSyncOff */\n    3,         /* vSyncOn */\n    743,       /* vSyncOff */\n    142,       /* hBackPorch */\n    22,        /* vBackPorch */\n    960,       /* xDimension */\n    720,       /* yDimension */\n    60,        /* refreshRate */\n    0,         /* miscCtrl */\n    345,       /* memOffset */\n    30,        /* tilesInX */\n    19,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXTRUE,    /* video24BPPIsOK */\n    56.219F,   /* clkFreq16bpp */\n    112.437F   /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_960X720_75 = {\n    103,       /* hSyncOn */\n    1183,      /* hSyncOff */\n    3,         /* vSyncOn */\n    749,       /* vSyncOff */\n    158,       /* hBackPorch */\n    28,        /* vBackPorch */\n    960,       /* xDimension */\n    720,       /* yDimension */\n    75,        /* refreshRate */\n    0,         /* miscCtrl */\n    345,       /* memOffset */\n    30,        /* tilesInX */\n    19,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXFALSE,   /* video24BPPIsOK */\n    72.643F,   /* clkFreq16bpp */\n    72.643F    /* clkFreq24bpp -- unsupported */\n};\n\nsst1VideoTimingStruct SST_VREZ_960X720_85 = {\n    103,       /* hSyncOn */\n    1199,      /* hSyncOff */\n    3,         /* vSyncOn */\n    753,       /* vSyncOff */\n    166,       /* hBackPorch */\n    32,        /* vBackPorch */\n    960,       /* xDimension */\n    720,       /* yDimension */\n    85,        /* refreshRate */\n    0,         /* miscCtrl */\n    345,       /* memOffset */\n    30,        /* tilesInX */\n    19,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXFALSE,   /* video24BPPIsOK */\n    83.795F,   /* clkFreq16bpp */\n    83.795F    /* clkFreq24bpp -- unsupported */\n};\n\nsst1VideoTimingStruct SST_VREZ_1024X768_60 = {\n    136,       /* hSyncOn */\n    1208,      /* hSyncOff */\n    6,         /* vSyncOn */\n    800,       /* vSyncOff */\n    160,       /* hBackPorch */\n    29,        /* vBackPorch */\n    1024,      /* xDimension */\n    768,       /* yDimension */\n    60,        /* refreshRate */\n    0,         /* miscCtrl */\n    384,       /* memOffset */\n    32,        /* tilesInX */\n    16,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXFALSE,   /* video24BPPIsOK */\n    65.0F,     /* clkFreq16bpp */\n    130.0F     /* clkFreq24bpp */\n};\n\nsst1VideoTimingStruct SST_VREZ_1024X768_75 = {\n    96,        /* hSyncOn */\n    1216,      /* hSyncOff */\n    3,         /* vSyncOn */\n    797,       /* vSyncOff */\n    176,       /* hBackPorch */\n    28,        /* vBackPorch */\n    1024,      /* xDimension */\n    768,       /* yDimension */\n    75,        /* refreshRate */\n    0,         /* miscCtrl */\n    384,       /* memOffset */\n    32,        /* tilesInX */\n    16,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXFALSE,   /* video24BPPIsOK */\n    78.75F,    /* clkFreq16bpp */\n    78.75F     /* clkFreq24bpp -- unsupported */\n};\n\nsst1VideoTimingStruct SST_VREZ_1024X768_85 = {\n    96,        /* hSyncOn */\n    1280,      /* hSyncOff */\n    3,         /* vSyncOn */\n    805,       /* vSyncOff */\n    208,       /* hBackPorch */\n    36,        /* vBackPorch */\n    1024,      /* xDimension */\n    768,       /* yDimension */\n    85,        /* refreshRate */\n    0,         /* miscCtrl */\n    384,       /* memOffset */\n    32,        /* tilesInX */\n    16,        /* vFifoThreshold */\n    FXTRUE,    /* video16BPPIsOK */\n    FXFALSE,   /* video24BPPIsOK */\n    94.5F,     /* clkFreq16bpp */\n    94.5F      /* clkFreq24bpp -- unsupported */\n};\n\n#else /* SST1INIT_VIDEO_ALLOCATE */\n\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nextern sst1VideoTimingStruct SST_VREZ_640X480_60;\nextern sst1VideoTimingStruct SST_VREZ_800X600_60;\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif /* SST1INIT_VIDEO_ALLOCATE */\n\n#endif /* !__SST1INIT_H__ */\n"
  },
  {
    "path": "README.md",
    "content": "Features\n- Run fullscreen programs in window\n- Perform time stretching to slow down or speed up actions\n- Add several compatibility options to support legacy programs\n- Log operations, show program status and palette\n\nrelease notes - November 7th, 2016\n\nDxWnd is a project still in development, so new releases are not always fully compatible with previous ones.\nCompatibility issues may easily happen while trying to use old configurations (the dxwnd.ini file) or exported files (*.dxw files located in the export folder) with new releases of the program.\nIn particular, dxw exported files are not always checked and updated before releasing new versions of the program, since that activity would steal precious time for the program enhancements, so I apologize but this is the current scenario.\nThis file will try to provide a quick guide to the resolution of the most common portability problems, listing the known cases that can be easily fixed.\n\n----------------------------------------------------------------------------------------------\nDxWnd does nothing!\n\nIf it seems that DxWnd is perfectly useless, the programs starting in fullscreen mode exactly as if DxWnd was not running, you could likely have a capability problem caused either from lack of permissions or some compatibility setting. \nYou can try these two simple steps:\n\n1. Assign to DxWnd.exe administrator privileges (right-click on DxWnd.exe, Properties->Compatibility->check \"run this program as administrator\" or whatever is your locale translated interface). I always try to set this flag in the DxWnd distribution, but a simple file copy can clear the privilege.\n\n2. Clear compatibility settings on the target program (again, \"Properties\"->\"Compatibility\"->uncheck all compatibility flags). Maybe you'd better use the dedicated DxWnd command (\"Tools\"->\"Clear compatibility flags\", apparently this one goes a little deeper and clears some possibly hidden flags). If you clear compatibility flags it is likely that the game will no longer run in fullscreen without DxWnd, so maybe you can perform the operation on a copy of the executable file.\n\n----------------------------------------------------------------------------------------------\nWindow size & position: \n\nOld DxWnd releases had a different setting for locking the window size and position.\nIf the game jumps in some unexpected position of the screen or changes its window size, head to the Video / Window size & position panel and try some option different from \"Free\".\n\n----------------------------------------------------------------------------------------------\nFlip emulation: \n\nthe DirectX/\"Flip emulation\" flag is required for most of DirectDraw games and is now set by default, but old exported files may not have this flag set. The sympthom generally is an error in DirectDraw calls or a black screen. In case the flag is not checked, just check it.\n\n----------------------------------------------------------------------------------------------\nOptimize for AERO mode:\n\nsame as above, the flag is set by default, but some old exported files may not have it. \nThe flag activated a blitting schema that is more compatible with AERO and desktop composition that is now mandatory on recent OS (Win8 and above). Better check it in case of problems.\n\n----------------------------------------------------------------------------------------------\nForce clipper:\n\nSetting a clipper on the primary surface is something that sometimes is good, sometimes is bad. For this reason, so far the \"DirectX\" / \"Force clipper\" is unchecked by default. \nBut a side effect of the lack of a clipping region is the rupture of the desktop composition! So, if that happens (the desktop blinks and the AERO transparency effects disappear) you can try to set the flag and see if there are changes for the better.\n\n----------------------------------------------------------------------------------------------\nFinal note:\n\nIf all else fails do not despair! Defaulted values are pretty good in most cases, so better start from scratch without using an old .dxw export file.\nOr, even better, create a new defauled entry, import the old .dxw file and start comparing the two configurations: it is a hell of a job, but likely you can pick something good from the old file that will make the new entry working.\nFinally, share your success with the community! Please, post on the SF board any working and non trivial configuration to share it with other users, and notify residual problems that I could work about.\nPlease, consider this as being part of the fun!\n\nyours faithfully\nGHO\n\n\n\n"
  },
  {
    "path": "build/README.FIRST.txt",
    "content": "Readme First release notes - November 7th, 2016\n\nDxWnd is a project still in development, so new releases are not always fully compatible with previous ones.\nCompatibility issues may easily happen while trying to use old configurations (the dxwnd.ini file) or exported files (*.dxw files located in the export folder) with new releases of the program.\nIn particular, dxw exported files are not always checked and updated before releasing new versions of the program, since that activity would steal precious time for the program enhancements, so I apologize but this is the current scenario.\nThis file will try to provide a quick guide to the resolution of the most common portability problems, listing the known cases that can be easily fixed.\n\n==============================================================================================\nDxWnd does nothing!\n\nIf it seems that DxWnd is perfectly useless, the programs starting in fullscreen mode exactly as if DxWnd was not running, you could likely have a capability problem caused either from lack of permissions or some compatibility setting. \nYou can try these two simple steps:\n\n1) Assign to DxWnd.exe administrator privileges (right-click on DxWnd.exe, Properties->Compatibility->check \"run this program as administrator\" or whatever is your locale translated interface). I always try to set this flag in the DxWnd distribution, but a simple file copy can clear the privilege.\n\n2) Clear compatibility settings on the target program (again, \"Properties\"->\"Compatibility\"->uncheck all compatibility flags). Maybe you'd better use the dedicated DxWnd command (\"Tools\"->\"Clear compatibility flags\", apparently this one goes a little deeper and clears some possibly hidden flags). If you clear compatibility flags it is likely that the game will no longer run in fullscreen without DxWnd, so maybe you can perform the operation on a copy of the executable file.\n==============================================================================================\nWindow size & position: \n\nOld DxWnd releases had a different setting for locking the window size and position.\nIf the game jumps in some unexpected position of the screen or changes its window size, head to the Video / Window size & position panel and try some option different from \"Free\".\n\n==============================================================================================\nFlip emulation: \n\nthe DirectX/\"Flip emulation\" flag is required for most of DirectDraw games and is now set by default, but old exported files may not have this flag set. The sympthom generally is an error in DirectDraw calls or a black screen. In case the flag is not checked, just check it.\n\n==============================================================================================\nOptimize for AERO mode:\n\nsame as above, the flag is set by default, but some old exported files may not have it. \nThe flag activated a blitting schema that is more compatible with AERO and desktop composition that is now mandatory on recent OS (Win8 and above). Better check it in case of problems.\n\n==============================================================================================\nForce clipper:\n\nSetting a clipper on the primary surface is something that sometimes is good, sometimes is bad. For this reason, so far the \"DirectX\" / \"Force clipper\" is unchecked by default. \nBut a side effect of the lack of a clipping region is the rupture of the desktop composition! So, if that happens (the desktop blinks and the AERO transparency effects disappear) you can try to set the flag and see if there are changes for the better.\n\n============================================================================================\nFinal note:\n\nIf all else fails do not despair! Defaulted values are pretty good in most cases, so better start from scratch without using an old .dxw export file.\nOr, even better, create a new defauled entry, import the old .dxw file and start comparing the two configurations: it is a hell of a job, but likely you can pick something good from the old file that will make the new entry working.\nFinally, share your success with the community! Please, post on the SF board any working and non trivial configuration to share it with other users, and notify residual problems that I could work about.\nPlease, consider this as being part of the fun!\n\nyours faithfully\nGHO\n\n\n\n"
  },
  {
    "path": "build/exports/007 NightFire.dxw",
    "content": "[target]\ntitle0=007 NightFire\npath0=D:\\Games\\007_NightFire\\Bond.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234150\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nflagj0=128\nwinver0=0\nmaxres0=0\n"
  },
  {
    "path": "build/exports/101 The Airborne Invasion of Normandy.dxw",
    "content": "[target]\ntitle0=101 The Airborne Invasion of Normandy\npath0=D:\\Games\\101air\\101.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1207959552\nflagh0=20\nflagi0=4194304\ntflag0=192\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nflagj0=128\nwinver0=0\nmaxres0=0\n"
  },
  {
    "path": "build/exports/11th Hour, the.dxw",
    "content": "[target]\ntitle0=11th Hour, the\npath0=D:\\Games\\11thHour\\v32win.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=137363491\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=335549568\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/25 to Life.dxw",
    "content": "[target]\ntitle0=25 to Life\npath0=D:\\Games\\25 to life\\game\\25 TO LIFE.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234624\nflagg0=2013265920\nflagh0=20\nflagi0=4\ntflag0=6147\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/3D Cube Hopper.dxw",
    "content": "[target]\ntitle0=3D Cube Hopper\npath0=D:\\Games\\3D_Cube_Hopper_RUS\\3DCUBE.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=673185826\nflagg0=1212153856\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=32768\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/3D Frog Man.dxw",
    "content": "[target]\ntitle0=3D Frog Man\npath0=D:\\Games\\3D Frog Man\\FROGMAN.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=673185826\nflagg0=1212153856\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=32768\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/4x4 Evolution.dxw",
    "content": "[target]\ntitle0=4x4 Evolution\npath0=D:\\Games\\4x4 Evolution\\4x4.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1476395008\nflagh0=28\nflagi0=138412324\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/688(I) Hunter Killer.dxw",
    "content": "[target]\ntitle0=688(I) Hunter Killer\npath0=D:\\Games\\688\\688I_HK.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=-2011168734\nflagg0=1209008128\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=344064\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/7th Guest (window port).dxw",
    "content": "[target]\ntitle0=7th Guest (window port)\npath0=D:\\Games\\7thguest\\v32tng.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/8th Wonder.dxw",
    "content": "[target]\ntitle0=8th Wonder\npath0=D:\\Games\\8th wonder\\Game.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/A10 Cuba.dxw",
    "content": "[target]\ntitle0=A10 Cuba\npath0=D:\\Games\\A10\\A10Cuba.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671096866\nflagg0=1207959568\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nwinver0=0\nmaxres0=0\nregistry0=\nflagk0=65536\nflagl0=0\nflagm0=0\ndflag0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Abomination.dxw",
    "content": "[target]\ntitle0=Abomination\npath0=D:\\Games\\Abomination\\Abomb.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Abuse.dxw",
    "content": "[target]\ntitle0=Abuse\npath0=D:\\Games\\Abuse\\Abuse32.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Abyss Incident at Europa.dxw",
    "content": "[target]\ntitle0=Abyss Incident at Europa\npath0=D:\\Games\\Abyss Incident at Europa\\abyss.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Actua Ice Hockey.dxw",
    "content": "[target]\ntitle0=Actua Ice Hockey\npath0=D:\\Games\\ahockey\\HOCKEY.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=671088674\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Actua Soccer 3.dxw",
    "content": "[target]\ntitle0=Actua Soccer 3\npath0=D:\\Games\\ActuaSoccer3\\SOCCER3D.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=939524146\nflagg0=1207959552\nflagh0=16\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nwinver0=0\nmaxres0=0\nflagj0=128\nnotes0=\nregistry0=\nflagk0=65536\nflagl0=0\nflagm0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Adrenix 3D.dxw",
    "content": "[target]\ntitle0=Adrenix 3D\npath0=D:\\Games\\Adrenix\\AdrenixD.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134234150\nflagg0=1208025088\nflagh0=20\nflagi0=138412036\nflagj0=5248\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nflagk0=65536\nswapeffect0=0\nregistry0=\nflagl0=0\nflagm0=0\ndflag0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Adrenix.dxw",
    "content": "[target]\ntitle0=Adrenix\npath0=D:\\Games\\Adrenix\\Adrenix.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314918\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/AeroStyle.dxw",
    "content": "[target]\ntitle0=AeroStyle\npath0=F:\\Games\\AeroStyle\\AeroStyle.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314886\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nmonitorid0=-1\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Affari Tuoi.dxw",
    "content": "[target]\ntitle0=Affari Tuoi\npath0=D:\\Games\\affari tuoi\\Affari Tuoi\\DOND.exe\nmodule0=\nopengllib0=\nver0=9\ncoord0=0\nflag0=536870914\nflagg0=1207959568\nflagh0=16\nflagi0=71303172\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=4\nlaunchpath0=\nnotes0=\nflagj0=0\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Agassi Tennis Generation.dxw",
    "content": "[target]\ntitle0=Agassi Tennis Generation\npath0=D:\\Games\\Agassi Tennis Generation\\AGASSI.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671096866\nflagg0=1207959552\nflagh0=65556\nflagi0=4\ntflag0=6147\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Age of Empires Expansion Trial.dxw",
    "content": "[target]\ntitle0=Age of Empires Expansion Trial\npath0=D:\\Games\\Age of Empires Expansion Trial\\empiresx.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218272\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Age of Empires II.dxw",
    "content": "[target]\ntitle0=Age of Empires II\npath0=D:\\Games\\Age of Empires 2\\empires2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Age of Empires III.dxw",
    "content": "[target]\ntitle0=Age of Empires III\npath0=D:\\Games\\Age of Empires III\\age3.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=-394124766\nflagg0=134217728\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=0\nflagk0=0\nflagl0=0\nflagm0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Age of Empires.dxw",
    "content": "[target]\ntitle0=Age of Empires\npath0=D:\\Games\\Age of Empires\\Empires.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218274\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nflagj0=128\nnotes0=\nregistry0=\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Age of Wanderer.dxw",
    "content": "[target]\ntitle0=Age of Wanderer\npath0=D:\\Games\\Age of Wanderer\\Yain.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Age of Wonders II.dxw",
    "content": "[target]\ntitle0=Age of Wonders II\npath0=D:\\Games\\Age of Wonders II\\AoW2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=7\ncoord0=0\nflag0=142606624\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Age of Wonders.dxw",
    "content": "[target]\ntitle0=Age of Wonders\npath0=D:\\Games\\Age of Wonders\\AoW.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=679477794\nflagg0=1207959552\nflagh0=20\nflagi0=205520900\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nflagj0=128\nnotes0=\nregistry0=\nflagk0=65536\nflagl0=0\nflagm0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Agile Warrior F111X.dxw",
    "content": "[target]\ntitle0=Agile Warrior F111X\npath0=F:\\Games\\Agile Warrior F 111X\\AW.BIN\nstartfolder0=\nlaunchpath0=F:\\Games\\Agile Warrior F 111X\\AW.EXE\nmodule0=\nopengllib0=\nnotes0=So far, only 3D mode is working.\nregistry0=\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\aw.exe]\\n\"Path\"=\".\\\\aw\"\\n@=\".\\\\aw.exe\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Direct3D]\\n\"DrawPrimFlags\"=dword:0\nver0=1\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\nflagk0=134807552\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/AirXonix.dxw",
    "content": "[target]\ntitle0=AirXonix\npath0=D:\\Games\\AirXonix\\program.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1744830464\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Airfix Dogfighter.dxw",
    "content": "[target]\ntitle0=Airfix Dogfighter\npath0=D:\\Games\\Airfix Dogfighter\\Dogfighter.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Tested with Airfix Dogfighter patch v1.2\\nUnpatched release does notwork!\nregistry0=\nver0=0\ncoord0=0\nflag0=2113590\nflagg0=1275068416\nflagh0=65556\nflagi0=138412036\nflagj0=-2147479424\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Akuma Demon Spawn  - Lamentation Sword.dxw",
    "content": "[target]\ntitle0=Akuma Demon Spawn  - Lamentation Sword\npath0=D:\\Games\\Akuma Demon Spawn  - Lamentation Sword (1999)\\Akuma\\Akuma.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=134217728\nflagh0=20\nflagi0=0\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Al Unser Arcade Racing (original EXE).dxw",
    "content": "[target]\ntitle0=Al Unser Arcade Racing (original EXE)\npath0=D:\\Games\\Al Unser Jr Arcade Racing\\ALUNSER.orig.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1745883232\nflagh0=65556\nflagi0=138412036\nflagj0=4226\nflagk0=65536\nflagl0=276824064\nflagm0=24576\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=5\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=640\ninitresh0=480\n"
  },
  {
    "path": "build/exports/Al Unser Arcade Racing.dxw",
    "content": "[target]\ntitle0=Al Unser Arcade Racing\npath0=D:\\Games\\Al Unser Jr Arcade Racing\\ALUNSER.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=wing32.dll\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1209008224\nflagh0=65556\nflagi0=138412036\nflagj0=4226\nflagk0=65536\nflagl0=276856832\nflagm0=8192\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=640\ninitresh0=480\n"
  },
  {
    "path": "build/exports/Alien Ambush.dxw",
    "content": "[target]\ntitle0=Alien Ambush\npath0=D:\\Games\\Alien Ambush\\Alien Ambush.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Alien Nations (GOG).dxw",
    "content": "[target]\ntitle0=Alien Nations (GOG)\npath0=D:\\Games\\Alien Nations (GOG)\\Bin\\AN.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Alien Nations.dxw",
    "content": "[target]\ntitle0=Alien Nations\npath0=D:\\Games\\Alien Nations\\Bin\\AN.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=32768\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nregistry0=\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Alien Swarm (Steam).dxw",
    "content": "[target]\ntitle0=Alien Swarm (Steam)\npath0=D:\\Program Files (x86)\\Steam\\SteamApps\\common\\Alien Swarm\\swarm.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1744830464\nflagh0=20\nflagi0=138412038\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=5\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Alien vs. Predator Gold.dxw",
    "content": "[target]\ntitle0=Alien vs. Predator Gold\npath0=F:\\Games\\Avp Gold\\avp.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Alone in the Dark the New Nightmare.dxw",
    "content": "[target]\ntitle0=Alone in the Dark the New Nightmare\npath0=D:\\Games\\Alone in the Dark\\alone4.exe\nlaunchpath0=D:\\Games\\Alone in the Dark\\launch.exe\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=679477282\nflagg0=1207959568\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=1200\nsizy0=900\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Alphanatix.dxw",
    "content": "[target]\ntitle0=Alphanatix\npath0=D:\\Games\\Alphan\\AlphaNatix.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681582626\nflagg0=1207959552\nflagh0=65556\nflagi0=138412036\nflagj0=4224\nflagk0=327680\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=150\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/American McGee's Alice.dxw",
    "content": "[target]\ntitle0=American McGee's Alice\npath0=D:\\Games\\American McGee's Alice\\alice.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=673194038\nflagg0=1208090624\nflagh0=21\nflagi0=136314884\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Amerzone.dxw",
    "content": "[target]\ntitle0=Amerzone\npath0=D:\\Games\\Amerzone\\amerzone.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234114\nflagg0=1207959568\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nwinver0=0\nmaxres0=0\n"
  },
  {
    "path": "build/exports/Ancient Evil demo.dxw",
    "content": "[target]\ntitle0=Ancient Evil demo\npath0=D:\\Games\\AECSC\\aecsc-demo.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=136331298\nflagg0=1207959552\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nwinver0=0\nmaxres0=0\nswapeffect0=0\nregistry0=\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Apache for Win95.dxw",
    "content": "[target]\ntitle0=Apache for Win95\npath0=D:\\Games\\APACHE\\APACHE95.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Arcade Pool 2.dxw",
    "content": "[target]\ntitle0=Arcade Pool 2\npath0=D:\\Games\\Arcade Pool 2\\Arcade Pool II.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138543108\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Area 51.dxw",
    "content": "[target]\ntitle0=Area 51\npath0=D:\\Games\\Area 51\\area51.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217763\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=8320\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Armor Command.dxw",
    "content": "[target]\ntitle0=Armor Command\npath0=D:\\Games\\Armor Command\\armrcmd.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Armored Fist 3.dxw",
    "content": "[target]\ntitle0=Armored Fist 3\npath0=D:\\Games\\Armored Fist 3\\Af3.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4194310\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Army Men RTS.dxw",
    "content": "[target]\ntitle0=Army Men RTS\npath0=D:\\Games\\Army Men RTS\\amrts.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671088678\nflagg0=1207959552\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nwinver0=0\nmaxres0=0\nswapeffect0=0\nregistry0=\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Art is Dead.dxw",
    "content": "[target]\ntitle0=Art is Dead\npath0=D:\\Games\\Art is Dead\\gungallery.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Arthur's Quest.dxw",
    "content": "[target]\ntitle0=Arthur's Quest\npath0=D:\\Games\\Arthur's Quest\\lithtech.exe\nstartfolder0=\nlaunchpath0=D:\\Games\\Arthur's Quest\\ArthursQuest.exe\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\nflagn0=0\nflago0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n[stamp]\nversion=2.04.21.a4\ntime=Sat Mar 18 15:43:50 2017\n\n"
  },
  {
    "path": "build/exports/Arx Fatalis.dxw",
    "content": "[target]\ntitle0=Arx Fatalis\npath0=D:\\Games\\Arx Fatalis\\arx.exe\nlaunchpath0=\nmodule0=Athena\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136331302\nflagg0=1207959552\nflagh0=65552\nflagi0=138936320\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=150\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Ashes to Ashes.dxw",
    "content": "[target]\ntitle0=Ashes to Ashes\npath0=D:\\Games\\Ashes to Ashes\\ASHES.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Installer doesn't work, but just copy files from CD to HD.\\nNeeds xp fix patch to work.\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Atlantis - The Lost Tales.dxw",
    "content": "[target]\ntitle0=Atlantis - The Lost Tales\npath0=D:\\Games\\Atlantis - The Lost Tales\\Atlantis.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=32768\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nregistry0=\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Attack of the Saucerman.dxw",
    "content": "[target]\ntitle0=Attack of the Saucerman\npath0=D:\\Games\\Attack of the Saucerman\\attack of the saucerman.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217730\nflagg0=134217728\nflagh0=20\nflagi0=0\ntflag0=192\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Aura 2 The Sacred Rings.dxw",
    "content": "[target]\ntitle0=Aura 2 The Sacred Rings\npath0=D:\\Games\\Aura 2 The Sacred Rings\\TSR.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Avadon 2 The Corruption (Steam).dxw",
    "content": "[target]\ntitle0=Avadon 2: The Corruption (Steam)\npath0=D:\\Program Files (x86)\\Steam\\SteamApps\\common\\Avadon 2\\Avadon 2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=12\ncoord0=0\nflag0=136314918\nflagg0=1208090624\nflagh0=20\nflagi0=138412038\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Avadon the Black Fortress (Steam).dxw",
    "content": "[target]\ntitle0=Avadon the Black Fortress (Steam)\npath0=D:\\Program Files (x86)\\Steam\\SteamApps\\common\\Avadon The Black Fortress\\Avadon.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=12\ncoord0=0\nflag0=136314918\nflagg0=1208090624\nflagh0=20\nflagi0=138412038\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Avernum 2 Crystal Souls (Steam).dxw",
    "content": "[target]\ntitle0=Avernum 2: Crystal Souls (Steam)\npath0=D:\\Program Files (x86)\\Steam\\SteamApps\\common\\Avernum 2 Crystal Souls\\Avernum 2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=12\ncoord0=0\nflag0=136314918\nflagg0=1208090624\nflagh0=20\nflagi0=138412038\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Avernum 4 (Steam).dxw",
    "content": "[target]\ntitle0=Avernum 4 (Steam)\npath0=D:\\Program Files (x86)\\Steam\\SteamApps\\common\\Avernum 4\\Avernum 4.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314934\nflagg0=1208090624\nflagh0=20\nflagi0=138412038\nflagj0=4224\nflagk0=-2147418112\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Avernum 5 (Steam).dxw",
    "content": "[target]\ntitle0=Avernum 5 (Steam)\npath0=D:\\Program Files (x86)\\Steam\\SteamApps\\common\\Avernum 5\\Avernum 5.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314934\nflagg0=1208090624\nflagh0=20\nflagi0=138412038\nflagj0=4224\nflagk0=-2147418112\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Avernum 6 (Steam).dxw",
    "content": "[target]\ntitle0=Avernum 6 (Steam)\npath0=D:\\Program Files (x86)\\Steam\\SteamApps\\common\\Avernum 6\\Avernum 6.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314934\nflagg0=1208090624\nflagh0=20\nflagi0=138412038\nflagj0=4224\nflagk0=-2147418112\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Avernum Escape From the Pit (Steam).dxw",
    "content": "[target]\ntitle0=Avernum: Escape From the Pit (Steam)\npath0=D:\\Program Files (x86)\\Steam\\SteamApps\\common\\Avernum Escape From the Pit\\Avernum.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=12\ncoord0=0\nflag0=136314918\nflagg0=1208090624\nflagh0=20\nflagi0=138412038\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Avernum demo.dxw",
    "content": "[target]\ntitle0=Avernum demo\npath0=D:\\Games\\Avernum Demo\\Avernum.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1745879040\nflagh0=16\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=1200\nsizy0=900\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Axis & Allies Iron Blitz Edition.dxw",
    "content": "[target]\ntitle0=Axis & Allies Iron Blitz Edition\npath0=D:\\Games\\Axis & Allies Iron Blitz Edition\\Axis & Allies\\AxisAllies.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=-2013265822\nflagg0=1207959552\nflagh0=20\nflagi0=138412037\nflagj0=128\ntflag0=6402\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Aztec Wars.dxw",
    "content": "[target]\ntitle0=Aztec Wars\npath0=F:\\Games\\Aztec Wars\\The Aztec\\Aztec.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=67113088\nflagk0=65536\nflagl0=65536\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Baldur's Gate.dxw",
    "content": "[target]\ntitle0=Baldur's Gate\npath0=D:\\Games\\Baldurs Gate\\BGMain2.exe\nlaunchpath0=D:\\Games\\Baldurs Gate\\baldur.exe\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138547204\nflagj0=21632\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=3\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Banzai Bug.dxw",
    "content": "[target]\ntitle0=Banzai Bug\npath0=D:\\Games\\Banzai Bug\\EXE\\RELEASE.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=1\ncoord0=0\nflag0=685899810\nflagg0=1207959680\nflagh0=8212\nflagi0=138412036\nflagj0=4224\nflagk0=131072\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nstartfolder0=\nregistry0=\nmonitorid0=0\nflagl0=0\nflagm0=0\ndflag0=0\nmaxddinterface0=7\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/Barbie Riding Club.dxw",
    "content": "[target]\ntitle0=Barbie Riding Club\npath0=D:\\Games\\Barbie Riding Club\\Program\\Barbie Riding Club.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=98304\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Bard's Tale, the.dxw",
    "content": "[target]\ntitle0=Bard's Tale, the\npath0=D:\\Games\\The Bard's Tale\\The Bard's Tale.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=9\ncoord0=0\nflag0=134218272\nflagg0=1207959552\nflagh0=16\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Batman Vengeance.dxw",
    "content": "[target]\ntitle0=Batman Vengeance\npath0=D:\\Games\\Batman Vengeance\\Batman\\Batman.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Battery Check.dxw",
    "content": "[target]\ntitle0=Battery Check\npath0=D:\\Games\\Battery Check\\Battery.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Battle Isle - the Andosia War.dxw",
    "content": "[target]\ntitle0=Battle Isle - the Andosia War\npath0=D:\\Games\\Battle Isle - the Andosia War\\BITAW.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=7\ncoord0=0\nflag0=679477280\nflagg0=1207959552\nflagh0=20\nflagi0=136314884\nflagj0=134221952\nflagk0=0\ntflag0=6402\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Battle Realms.dxw",
    "content": "[target]\ntitle0=Battle Realms\npath0=D:\\Games\\Battle Realms\\Battle_Realms_F.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234150\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Battlezone (1998).dxw",
    "content": "[target]\ntitle0=Battlezone (1998)\npath0=D:\\Games\\Battlezone\\bzone.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=-1608515533\nflagg0=1241513984\nflagh0=98320\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=150\nposy0=150\nsizx0=880\nsizy0=660\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Beavis & Butthead Do U..dxw",
    "content": "[target]\ntitle0=Beavis & Butthead Do U.\npath0=D:\\Games\\B_b\\BEAVIS.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=673187874\nflagg0=1207959552\nflagh0=32788\nflagi0=4194304\ntflag0=3\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nflagj0=128\nwinver0=0\nmaxres0=0\n"
  },
  {
    "path": "build/exports/Beetle Crazy Cup.dxw",
    "content": "[target]\ntitle0=Beetle Crazy Cup\npath0=D:\\Games\\Beetle Crazy Cup\\beetle.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Betrayal in Antara.dxw",
    "content": "[target]\ntitle0=Betrayal in Antara\npath0=D:\\Games\\Betrayal in Antara\\ANTARAR.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Beyond Divinity.dxw",
    "content": "[target]\ntitle0=Beyond Divinity\npath0=D:\\Games\\Beyond Divinity\\Div.exe\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=134234146\nflagg0=1207959552\nflagh0=61\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nwinver0=0\nmaxres0=0\n"
  },
  {
    "path": "build/exports/Big BumpZ.dxw",
    "content": "[target]\ntitle0=Big BumpZ\npath0=D:\\Games\\bumpz\\Big BumpZ.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Black & White.dxw",
    "content": "[target]\ntitle0=Black & White\npath0=D:\\Games\\Black & White\\runblack.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=679477282\nflagg0=1207959568\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nregistry0=\nflagk0=65536\nflagl0=0\nflagm0=0\ndflag0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Black Moon Chronicles.dxw",
    "content": "[target]\ntitle0=Black Moon Chronicles\npath0=D:\\Games\\Black Moon Chronicles\\Lune noire\\Engine.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1207959568\nflagh0=32788\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Black Thorn.dxw",
    "content": "[target]\ntitle0=Black Thorn\npath0=D:\\Games\\Black Thorn\\BlackThorn.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=671105062\nflagg0=1207959552\nflagh0=20\nflagi0=4325380\nflagj0=128\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nregistry0=\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Blade Runner (4CD version).dxw",
    "content": "[target]\ntitle0=Blade Runner (4CD version)\npath0=D:\\Blade\\BLADE.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Courtesy of Riitaoja:\\n\\nInstalling Blade Runner on 64bit Windows (4CD version):\\n\\n- Copy the \"BASE\" folder from CD1 to your hard drive and rename it to \"BLADE\".\\n- Copy \"CDFRAMES.DAT\" file from \\CD1 -forder of the optical drive to the \"BLADE\"\\ndirectory on your hard drive and rename the file to \"HDFRAMES.DAT\".\\n\\n-  Timing -> Frames per Second - Limit delay 40 msec (25 FPS)\\nFixes the shooting range by limiting FPS.\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136331298\nflagg0=1207963648\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=40\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Blade Runner (Win7).dxw",
    "content": "[target]\ntitle0=Blade Runner (Win7)\npath0=F:\\Games\\Blade Runner\\Blade7.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=From DVD version V2, with patched exe for WinXP and Win7\\n\\nBlade7.exe working ok also on Win10\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Blade Runner.dxw",
    "content": "[target]\ntitle0=Blade Runner\npath0=F:\\Games\\blade runner\\BLADE.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=0\ncoord0=0\nflag0=134234210\nflagg0=1480589312\nflagh0=2580\nflagi0=4194308\nflagj0=128\nflagk0=2048\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/Blair Witch Volume One - Rustin Parr.dxw",
    "content": "[target]\ntitle0=Blair Witch Volume One - Rustin Parr\npath0=D:\\Games\\Blair Witch Volume One - Rustin Parr\\NOCTURNE.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218272\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Blair Witch Volume Three - Elly Kedward.dxw",
    "content": "[target]\ntitle0=Blair Witch Volume Three - Elly Kedward\npath0=D:\\Games\\Blair Witch Volume Three - Elly Kedward\\bw3.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\"Limit available resources\" to bypass the resource cheks, though not fully necessary: \\ntyping the enter key the game starts anyway.\\n\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1476395008\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Blair Witch Volume Two.dxw",
    "content": "[target]\ntitle0=Blair Witch Volume Two\npath0=D:\\Games\\Blair Witch II\\blairwitch2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\"Limit available resources\" to bypass the resource cheks, though not fully necessary: \\ntyping the enter key the game starts anyway.\\n\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1476395008\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Blaze and Blade.dxw",
    "content": "[target]\ntitle0=Blaze and Blade\npath0=D:\\Games\\Blaze and Blade\\Blaze.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=671088674\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Blood 2 the Chosen.dxw",
    "content": "[target]\ntitle0=Blood 2 the Chosen\npath0=D:\\Games\\Blood2\\CLIENT.EXE\nlaunchpath0=D:\\Games\\Blood2\\BLOOD2.EXE\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136315042\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=1200\nsizy0=900\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Bomberbabe.dxw",
    "content": "[target]\ntitle0=Bomberbabe\npath0=D:\\Games\\Ludonic\\Bomberbabe.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nstartfolder0=\nlaunchpath0=\nnotes0=\nregistry0=\nmonitorid0=-1\nflagj0=4224\nflagk0=65536\nflagl0=276824064\nflagm0=1073741824\ndflag0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Breath of Fire IV.dxw",
    "content": "[target]\ntitle0=Breath of Fire IV\npath0=D:\\Games\\Breath of Fire 4\\BOF4.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1476395008\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nregistry0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Bugdom.dxw",
    "content": "[target]\ntitle0=Bugdom\npath0=D:\\Games\\Bugdom\\Bugdom.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681582626\nflagg0=1208090880\nflagh0=65564\nflagi0=138412084\nflagj0=4226\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=640\nsizy0=480\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Bugriders the Race of Kings.dxw",
    "content": "[target]\ntitle0=Bugriders the Race of Kings\npath0=D:\\Games\\RIDERS\\BIN\\RIDERS.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Bugs Bunny Lost In Time.dxw",
    "content": "[target]\ntitle0=Bugs Bunny Lost In Time\npath0=D:\\Games\\Bugs.Bunny.Lost.In.Time\\bin\\bugs.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=7\ncoord0=0\nflag0=681574434\nflagg0=1209139200\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=98304\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Bunnies must die.dxw",
    "content": "[target]\ntitle0=Bunnies must die\npath0=D:\\Games\\Bunnies must die\\bmd.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=205520900\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nregistry0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Bust A Move 3DX.dxw",
    "content": "[target]\ntitle0=Bust A Move 3DX\npath0=D:\\Games\\Bust A Move 3DX\\PB3.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/C&C Generals.dxw",
    "content": "[target]\ntitle0=C&C Generals\npath0=D:\\Games\\Command & Conquer(tm) Generals Zero Hour\\game.dat\nlaunchpath0=D:\\Games\\Command & Conquer(tm) Generals Zero Hour\\generals.exe\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217763\nflagg0=1744830464\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/C&C Red Alert 2 Yuri's Revenge.dxw",
    "content": "[target]\ntitle0=C&C Red Alert 2 Yuri's Revenge\npath0=D:\\Games\\Red Alert 2 Yuri's Revenge\\gamemd.exe\nlaunchpath0=D:\\Games\\Red Alert 2 Yuri's Revenge\\RA2MD.exe\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=67584\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Call Of Cthulhu DCotE.dxw",
    "content": "[target]\ntitle0=Call Of Cthulhu DCotE\npath0=D:\\Games\\Call Of Cthulhu\\Engine\\CoCMainWin32.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218272\nflagg0=134217728\nflagh0=20\nflagi0=4194304\ntflag0=6402\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=-5\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Call To Power 2.dxw",
    "content": "[target]\ntitle0=Call To Power 2\npath0=D:\\Games\\Call To Power 2\\ctp2_program\\ctp\\ctp2.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234657\nflagg0=1207959552\nflagh0=32788\nflagi0=4\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Carmageddon (gore).dxw",
    "content": "[target]\ntitle0=Carmageddon (gore)\npath0=D:\\Games\\carsplat\\CARMA95.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nregistry0=\nflagk0=32768\nflagl0=0\nflagm0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Carmageddon (no gore).dxw",
    "content": "[target]\ntitle0=Carmageddon (no gore)\npath0=D:\\Games\\carsplat\\CARM95G.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nregistry0=\nflagk0=32768\nflagl0=0\nflagm0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Carmageddon 2 (GLIDE).dxw",
    "content": "[target]\ntitle0=Carmageddon 2 (GLIDE)\npath0=D:\\Games\\Carmageddon_2\\carma2_HW.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=-2013265866\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=0\nflagk0=32768\nflagl0=0\nflagm0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Carmageddon 2 (SW).dxw",
    "content": "[target]\ntitle0=Carmageddon 2 (SW)\npath0=D:\\Games\\Carmageddon_2\\carma2_SW.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671088694\nflagg0=1207959552\nflagh0=33562644\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=0\nflagk0=32768\nflagl0=0\nflagm0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Carnivores 3DFX.dxw",
    "content": "[target]\ntitle0=Carnivores 3DFX\npath0=D:\\Games\\Carnivores\\HUNT3DFX.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671089184\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Carnivores.dxw",
    "content": "[target]\ntitle0=Carnivores\npath0=D:\\Games\\Carnivores\\HUNTSOFT.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=939524130\nflagg0=1209008128\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Catechumen (3DFX).dxw",
    "content": "[target]\ntitle0=Catechumen (3DFX)\npath0=D:\\Games\\Catechumen\\game\\Catechumen.exe\nmodule0=\nopengllib0=\nver0=9\ncoord0=0\nflag0=402653218\nflagg0=1207959552\nflagh0=65556\nflagi0=16388\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Cave Story.dxw",
    "content": "[target]\ntitle0=Cave Story\npath0=D:\\Games\\Cave Story\\Doukutsu.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Celtic Kings Rage of War.dxw",
    "content": "[target]\ntitle0=Celtic Kings Rage of War\npath0=D:\\Games\\Celtic Kings RoW\\Celtic kings.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=673185826\nflagg0=1744830466\nflagh0=65556\nflagi0=138412036\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Championship Manager 03 04.dxw",
    "content": "[target]\ntitle0=Championship Manager 03 04\npath0=D:\\Games\\CM 03-04\\cm0304.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=681582627\nflagg0=1744830464\nflagh0=2129936\nflagi0=138412036\nflagj0=4224\nflagk0=2048\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Chaos Island (rip).dxw",
    "content": "[target]\ntitle0=Chaos Island (RIP)\npath0=D:\\Games\\Chaos Island\\CIsland.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Needs proper registry emulation file\nregistry0=[HKEY_LOCAL_MACHINE\\SOFTWARE]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\DreamWorks Interactive]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\DreamWorks Interactive\\ChaosIsland]\\n\"Data Drive\"=\".\\\\\"\\n\"PID\"=\"71239-442-3367621-91206\"\\n\"Installed Directory\"=\".\\\\\"\\n\"Run File\"=\".\\\\\"\\n\"InstallType\"=dword:00000001\\n\"KBPS_OTHER\"=dword:00000000\\n\"KBPS\"=dword:00000000\\n\"Installed\"=dword:00000001\\n\"NextTip\"=dword:00000001\\n\"StartupTips\"=dword:00000001\\n\"FPS\"=dword:00000003\\n\\n\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1744830464\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\nflagk0=0\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Chaos Island.dxw",
    "content": "[target]\ntitle0=Chaos Island\npath0=D:\\Games\\Chaos Island\\CIsland.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Needs proper registry emulation file\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1744830464\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Chaos Overlords.dxw",
    "content": "[target]\ntitle0=Chaos Overlords\npath0=D:\\Games\\Chaos Overlords\\Chaos Overlords.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=327680\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Chariots of War.dxw",
    "content": "[target]\ntitle0=Chariots of War\npath0=D:\\Games\\Chariots of War\\CoW.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1744830464\nflagh0=20\nflagi0=2\ntflag0=3\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Chicago 1930.dxw",
    "content": "[target]\ntitle0=Chicago 1930\npath0=D:\\Games\\Chicago 1930\\Chicago 1930.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234150\nflagg0=1207959552\nflagh0=20\nflagi0=4325380\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\nregistry0=\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Chicken Invaders 2.dxw",
    "content": "[target]\ntitle0=Chicken Invaders 2\npath0=F:\\Games\\Chicken Invaders 2\\ChickenInvaders2.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=65536\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Circus Fighters.dxw",
    "content": "[target]\ntitle0=Circus Fighters\npath0=D:\\Games\\Circus Fighters\\CIRCUS.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1209008128\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=32768\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Close Combat 2 a bridge too far.dxw",
    "content": "[target]\ntitle0=Close Combat 2: a bridge too far\npath0=D:\\Games\\Close Combat 2\\CC2.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134225954\nflagg0=1744830464\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=0\nsizy0=0\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nregistry0=[HKEY_LOCAL_MACHINE\\SOFTWARE]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft Games]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft Games\\Close Combat]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft Games\\Close Combat\\2.00]\\n\"PID\"=\"00000-000-0000000-00000\"\\n\"InstalledTo\"=\"C:\\\\GAMES\\\\CC2\"\\n\"ScreenX\"=\"800\"\\n\"ScreenY\"=\"600\"\\n\"Version\"=\"2.0\"\\n\"IType\"=hex:01,00,00,00\\n\"GameSpeed\"=hex:01,00,00,00\\n\"ShowDSAlert\"=hex:01,00,00,00\\n\"ShowQuickHelp\"=hex:01,00,00,00\\n\"PlaySounds\"=hex:01,00,00,00\\n\"PlayMusic\"=hex:01,00,00,00\\n\"PlayVideos\"=hex:00,00,00,00\\n\"FCopy\"=hex:00,00,00,00\\n\"SMethod\"=hex:00,00,00,00\\n\"Save\"=hex:00,00,00,00\\n\"ShowTrees\"=hex:01,00,00,00\\n\"StaticFPS\"=hex:0a,00,00,00\\n\"InstalledFrom\"=\".\\\\\"\\n\"Launched\"=\"1\"\\n\"VersionType\"=\"RetailVersion\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Microsoft Games]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Microsoft Games\\Close Combat]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\Microsoft\\Microsoft Games\\Close Combat\\2.00]\\n\"PID\"=\"00000-000-0000000-00000\"\\n\"InstalledTo\"=\"C:\\\\GAMES\\\\CC2\"\\n\"ScreenX\"=\"800\"\\n\"ScreenY\"=\"600\"\\n\"Version\"=\"2.0\"\\n\"IType\"=hex:01,00,00,00\\n\"GameSpeed\"=hex:01,00,00,00\\n\"ShowDSAlert\"=hex:01,00,00,00\\n\"ShowQuickHelp\"=hex:01,00,00,00\\n\"PlaySounds\"=hex:01,00,00,00\\n\"PlayMusic\"=hex:01,00,00,00\\n\"PlayVideos\"=hex:00,00,00,00\\n\"FCopy\"=hex:00,00,00,00\\n\"SMethod\"=hex:00,00,00,00\\n\"Save\"=hex:00,00,00,00\\n\"ShowTrees\"=hex:01,00,00,00\\n\"StaticFPS\"=hex:0a,00,00,00\\n\"InstalledFrom\"=\".\\\\\"\\n\"Launched\"=\"1\"\\n\"VersionType\"=\"RetailVersion\"\\n\\n\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Close Combat 5 Invasion Normandy.dxw",
    "content": "[target]\ntitle0=Close Combat 5 Invasion Normandy\npath0=D:\\Games\\Close Combat 5\\CC5.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218274\nflagg0=1744830464\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nregistry0=\nflagk0=65536\nflagl0=0\nflagm0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Codename Tenka.dxw",
    "content": "[target]\ntitle0=Codename Tenka\npath0=D:\\Games\\codetenka\\tenka.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Colin McRae Rally 2.0.dxw",
    "content": "[target]\ntitle0=Colin McRae Rally 2.0\npath0=D:\\Games\\MVM 2004 - Colin McRae Rally 2.0\\CMR2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=4224\nflagk0=65536\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Command & Conquer - Red Alert The Aftermath.dxw",
    "content": "[target]\ntitle0=Command & Conquer - Red Alert The Aftermath\npath0=D:\\Games\\C&C - Red Alert The Aftermath\\RA95.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136331362\nflagg0=1207959552\nflagh0=532\nflagi0=138412036\nflagj0=4224\nflagk0=262144\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Command & Conquer Red Alert 2.dxw",
    "content": "[target]\ntitle0=Command & Conquer Red Alert 2\npath0=D:\\Games\\Red Alert 2 Yuri's Revenge\\game.exe\nlaunchpath0=D:\\Games\\Red Alert 2 Yuri's Revenge\\Ra2.exe\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=67584\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Conflict Zone.dxw",
    "content": "[target]\ntitle0=Conflict Zone\npath0=D:\\Games\\Conflict Zone\\Conflict zone.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217760\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Contrast.dxw",
    "content": "[target]\ntitle0=Contrast\npath0=D:\\Games\\Contrast\\Binaries\\Win32\\ContrastGame.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=9\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Cool Pool Eightball Demo.dxw",
    "content": "[target]\ntitle0=Cool Pool Eightball Demo\npath0=D:\\Games\\CoolPoolEightballDemo\\CoolPool.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Corsairs Gold (GOG).dxw",
    "content": "[target]\ntitle0=Corsairs Gold\npath0=D:\\Games\\Corsairs Gold\\corsairs.patched.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134221858\nflagg0=1207959552\nflagh0=20\nflagi0=205520900\nflagj0=67108992\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Corsairs.dxw",
    "content": "[target]\ntitle0=Corsairs\npath0=D:\\Games\\CORSAIRS\\corsairs.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Cossacks II.dxw",
    "content": "[target]\ntitle0=Cossacks II\npath0=D:\\Games\\GSC Game World\\Cossacks II\\Data\\engine.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1744961536\nflagh0=21\nflagi0=138412036\nflagj0=4224\nflagk0=4259840\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Crimson Skies (DEMO).dxw",
    "content": "[target]\ntitle0=Crimson Skies (DEMO)\npath0=D:\\Games\\Crimson Skies\\crimson.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=155205636\nflagg0=1210056720\nflagh0=20\nflagi0=260\ntflag0=3\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Crimson Skies.dxw",
    "content": "[target]\ntitle0=Crimson Skies\npath0=F:\\Games\\Crimson Skies\\crimson.exe\nmodule0=\nopengllib0=\nver0=7\ncoord0=0\nflag0=677396518\nflagg0=1207959568\nflagh0=20\nflagi0=4194596\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nflagj0=128\nwinver0=0\nmaxres0=0\nnotes0=\nflagk0=65536\nswapeffect0=0\nregistry0=\nstartfolder0=\nmonitorid0=0\nflagl0=512\nflagm0=0\ndflag0=0\nmaxddinterface0=7\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/Croc - Legend of the Gobbos.dxw",
    "content": "[target]\ntitle0=Croc - Legend of the Gobbos\npath0=D:\\Games\\Croc\\croc.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=128\nregistry0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Croc 2.dxw",
    "content": "[target]\ntitle0=Croc 2\npath0=D:\\Games\\Croc 2\\Croc2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218274\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=128\nregistry0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Crusaders of Might and Magic (GOG).dxw",
    "content": "[target]\ntitle0=Crusaders of Might and Magic (GOG)\npath0=D:\\Games\\Crusaders of Might and Magic (GOG)\\crusaders.exe\nlaunchpath0=\nmodule0=gfx_d3d gfx_sw\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=-1467989966\nflagg0=1209008640\nflagh0=65556\nflagi0=136314884\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nflagk0=65538\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Crusaders of Might and Magic Demo.dxw",
    "content": "[target]\ntitle0=Crusaders of Might and Magic Demo\npath0=D:\\Games\\Crusaders of Might and Magic Demo\\crusaders demo.exe\nlaunchpath0=\nmodule0=gfx_d3d gfx_sw\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=-1467989966\nflagg0=1207959552\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nflagk0=65538\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Cyber Gladiators (3dfx).dxw",
    "content": "[target]\ntitle0=Cyber Gladiators (3dfx)\npath0=D:\\Games\\Cyber Gladiators\\cyber.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671088802\nflagg0=1744896000\nflagh0=20\nflagi0=-2009071612\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Cydonia.dxw",
    "content": "[target]\ntitle0=Cydonia\npath0=D:\\Games\\Cydonia\\cydonia.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138543108\nflagj0=4224\nflagk0=268500992\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nregistry0=\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/D.O.G. - Fight for Your Life.dxw",
    "content": "[target]\ntitle0=D.O.G. - Fight for Your Life\npath0=D:\\Games\\D.O.G. - Fight for Your Life\\DOG.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/DOSBox-0.74.dxw",
    "content": "[target]\ntitle0=DOSBox-0.74\npath0=C:\\Program Files (x86)\\DOSBox-0.74\\DOSBox.exe\nstartfolder0=\nlaunchpath0=\nmodule0=sdl.dll\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314914\nflagg0=1208090624\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=4259840\nflagl0=4489216\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/DX-Ball2.dxw",
    "content": "[target]\ntitle0=DX-Ball2\npath0=D:\\Games\\DX-Ball2\\DXBall2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Daemonstar.dxw",
    "content": "[target]\ntitle0=Daemonstar\npath0=D:\\Games\\dmnstar\\DS.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Daikatana.dxw",
    "content": "[target]\ntitle0=Daikatana\npath0=D:\\Games\\Daikatana\\daikatana.exe\nmodule0=\nopengllib0=\nver0=12\ncoord0=0\nflag0=269492772\nflagg0=671220225\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nwinver0=0\nmaxres0=0\nnotes0=\nflagj0=0\n"
  },
  {
    "path": "build/exports/Damage Incorporated.dxw",
    "content": "[target]\ntitle0=Damage Incorporated\npath0=D:\\Games\\Damage inc\\damage.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Dangerous Waters.dxw",
    "content": "[target]\ntitle0=Dangerous Waters\npath0=F:\\Games\\Dangerous Waters\\dangerouswaters.noshims.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185832\nflagg0=1207959680\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65537\nflagl0=32768\nflagm0=32768\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=640\ninitresh0=480\n"
  },
  {
    "path": "build/exports/Darius Gaiden.dxw",
    "content": "[target]\ntitle0=Darius Gaiden\npath0=D:\\Games\\Darius_gaiden\\DARIUS.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671088674\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=2\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Dark Angael.dxw",
    "content": "[target]\ntitle0=Dark Angael\npath0=D:\\Games\\Dark Angael\\GAME.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Dark Colony (16 bit).dxw",
    "content": "[target]\ntitle0=Dark Colony (16 bit)\npath0=D:\\Games\\DarkColony\\DCOLONY\\DC16.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=134234166\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\nflagj0=67108992\nflagk0=0\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Dark Colony.dxw",
    "content": "[target]\ntitle0=Dark Colony\npath0=D:\\Games\\DarkColony\\DCOLONY\\DC.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234166\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nflagj0=128\nnotes0=\nregistry0=\nflagk0=0\nswapeffect0=0\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Dark Disciples 1.dxw",
    "content": "[target]\ntitle0=Dark Disciples 1\npath0=D:\\Games\\Dark Disciples 1\\DarkDisciples.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Dark Disciples 2.dxw",
    "content": "[target]\ntitle0=Dark Disciples 2\npath0=D:\\Games\\Dark Disciples 2\\DarkDisciples2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Dark Earth.dxw",
    "content": "[target]\ntitle0=Dark Earth\npath0=D:\\Games\\Dark Earth\\dkev.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=673210466\nflagg0=1476395008\nflagh0=20\nflagi0=138936324\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nstartfolder0=\nmonitorid0=0\ndflag0=0\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/Dark Fall - The Journal (GOG 2.0.0.6).dxw",
    "content": "[target]\ntitle0=Dark Fall - The Journal (GOG 2.0.0.6)\npath0=D:\\Games\\Dark Fall - The Journal 2_0_0_6\\DarkFall.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=713031682\nflagg0=1242562560\nflagh0=20\nflagi0=205520900\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=640\nsizy0=480\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Dark Planet Battle for Natrolis.dxw",
    "content": "[target]\ntitle0=Dark Planet: Battle for Natrolis\npath0=D:\\Games\\DarkPlanet\\Dark.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671088675\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Dark Reign.dxw",
    "content": "[target]\ntitle0=Dark Reign\npath0=D:\\Games\\Dark Reign\\dkreign.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Dark Vengeance.dxw",
    "content": "[target]\ntitle0=Dark Vengeance\npath0=D:\\Games\\dark_vengeance\\dv.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217763\nflagg0=1476395008\nflagh0=65556\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nflagj0=128\nnotes0=\nregistry0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Darkened Skye.dxw",
    "content": "[target]\ntitle0=Darkened Skye\npath0=D:\\Games\\Darkened Skye\\Skye.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=679493682\nflagg0=1207959552\nflagh0=65556\nflagi0=69206020\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=800\nmaxy0=600\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Daytona USA Deluxe Edition.dxw",
    "content": "[target]\ntitle0=Daytona USA Deluxe Edition\npath0=D:\\Games\\Daytona USA Deluxe Edition\\DAYTONA USA Deluxe.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Daytona USA Deluxe.dxw",
    "content": "[target]\ntitle0=Daytona USA Deluxe\npath0=F:\\Games\\Daytona USA Deluxe\\DAYTONA USA Deluxe.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Dead Rising 2 Off The Record.dxw",
    "content": "[target]\ntitle0=Dead Rising 2 Off The Record\npath0=C:\\Program Files (x86)\\Capcom\\Dead Rising 2 Off The Record\\deadrising2otr.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=0\nflagg0=134217728\nflagh0=16\nflagi0=0\ntflag0=3\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\n"
  },
  {
    "path": "build/exports/Deadlock II.dxw",
    "content": "[target]\ntitle0=Deadlock II\npath0=D:\\Games\\deadlock II\\DEADLOCK.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=7\ncoord0=0\nflag0=-2013249502\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nregistry0=\nflagk0=327680\nflagl0=0\nflagm0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/DeathSpank The Baconing.dxw",
    "content": "[target]\ntitle0=DeathSpank: The Baconing\npath0=D:\\Games\\The Baconing\\TheBaconing.exe\nmodule0=\nopengllib0=\nver0=9\ncoord0=0\nflag0=-2013265376\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=0\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Deathtrap Dungeon.dxw",
    "content": "[target]\ntitle0=Deathtrap Dungeon\npath0=F:\\ASYLUM\\DD_CD.EXE\nlaunchpath0=D:\\Games\\Deathtrap Dungeon\\DDSTART.EXE\nmodule0=\nopengllib0=\nnotes0=Note:\\ninstalled from CD, the game need to be configured with the launcher from the HD \\nand the actual game exe from the CD!\\n\\nNote: \\nThe intro movies are interlaced and can be deinterlaced. \\nAlso, the game can be rendered with bilinear filtering. \nregistry0=\nver0=1\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=268439680\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Deer Hunter.dxw",
    "content": "[target]\ntitle0=Deer Hunter\npath0=F:\\Games\\Deer Hunter\\DEERHUNT.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959568\nflagh0=16404\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Defiance (D3D).dxw",
    "content": "[target]\ntitle0=Defiance (D3D)\npath0=D:\\Games\\Defiance\\D3D.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=2097154\nflagg0=1224736768\nflagh0=32788\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=4\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nmonitorid0=0\nflagn0=0\nflago0=0\nscanline0=1\ninitresw0=0\ninitresh0=0\n[stamp]\nversion=2.04.21.a2\ntime=Wed Mar 15 22:49:07 2017\n\n"
  },
  {
    "path": "build/exports/Defiance.dxw",
    "content": "[target]\ntitle0=Defiance\npath0=D:\\Games\\Defiance\\DEFIANCE.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=3145730\nflagg0=1208483840\nflagh0=20\nflagi0=155189252\nflagj0=4224\nflagk0=327680\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=-950\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Deo Gratias.dxw",
    "content": "[target]\ntitle0=Deo Gratias\npath0=D:\\Games\\Deo Gratias\\WinKhaos.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1209008128\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Dethkarz.dxw",
    "content": "[target]\ntitle0=Dethkarz\npath0=D:\\Games\\dethkarz\\Dethkarz.exe\nlaunchpath0=\nmodule0=Vertigo Direct3D\nopengllib0=\nnotes0=Beware! This game REQUIRES initial resolution set as 640x480 as needed by the \\nintro movie, otherwise the game won't start and will show an error message\\ndialog box.\\nNeeds also bypass MCI calls if no CD is present.\\nTested OK with D3D renderer, 16 & 32 bpp.\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=205520902\nflagj0=4224\nflagk0=35717120\nflagl0=8389120\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nstartfolder0=\nmonitorid0=-1\ninitresw0=640\ninitresh0=480\n"
  },
  {
    "path": "build/exports/Devastation.dxw",
    "content": "[target]\ntitle0=Devastation\npath0=D:\\Games\\Devastation\\System\\Devastation.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217766\nflagg0=1207959552\nflagh0=65556\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nwinver0=0\nmaxres0=0\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Devil Inside, the.dxw",
    "content": "[target]\ntitle0=Devil Inside, the\npath0=D:\\Games\\Devil Inside\\Devil.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671105074\nflagg0=1207959552\nflagh0=16\nflagi0=-2009071612\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=800\nmaxy0=600\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=-4\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Diablo MP demo.dxw",
    "content": "[target]\ntitle0=Diablo MP demo\npath0=D:\\Games\\Diablo MP demo\\diablo_s.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136331298\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4225\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Diablo.dxw",
    "content": "[target]\ntitle0=Diablo\npath0=D:\\Games\\Diablo\\Diablo.exe\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=138428450\nflagg0=1241514000\nflagh0=8212\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nwinver0=0\nmaxres0=0\nnotes0=\nflagj0=129\nregistry0=\nflagk0=262144\nflagl0=0\nflagm0=0\nswapeffect0=0\nmaxddinterface0=7\nstartfolder0=\nmonitorid0=0\ndflag0=0\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/Die Hard Nakatomi Plaza.dxw",
    "content": "[target]\ntitle0=Die Hard Nakatomi Plaza\npath0=D:\\Games\\die hard nakatomi plaza\\Lithtech.exe\nlaunchpath0=D:\\Games\\die hard nakatomi plaza\\Nakatomi.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=673194018\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Die Hard Trilogy (Game 1).dxw",
    "content": "[target]\ntitle0=Die Hard Trilogy (Game 1)\npath0=C:\\My Games\\diehard3\\DIEHARD\\GAME\\DIEHARD1.EXE\nstartfolder0=C:\\My Games\\diehard3\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\\n[HKEY_LOCAL_MACHINE\\SOFTWARE]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard]\\n\"Install Directory\"=\".\\\\diehard\"\\n\"FMV Installed\"=dword:00000000\\n\"Data Installed\"=dword:00000001\\n\"Abnormal Termination\"=dword:00000000\\n\"StartupFolder\"=\"Fox Interactive\"\\n\"Version\"=\"1.00\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\Configuration]\\n\"complexity\"=dword:3f800000\\n\"cutoff\"=dword:3eeeeef0\\n\"perspective\"=dword:3eeeeef0\\n\"Quality\"=dword:00000000\\n\"Use Hardware\"=dword:00000000\\n\"Preferred Height\"=dword:00000258\\n\"Preferred Width\"=dword:00000320\\n\"lighting\"=dword:00000001\\n\"texture quality\"=dword:00000001\\n\"Language\"=dword:00000000\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1]\\n\"Input\"=dword:00000000\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Joystick]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Joystick\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Keyboard]\\n\"keyboard\"=hex:39,00,00,00,22,00,00,00,21,00,00,00,02,00,00,00,00,00,00,00,1e,\\\\n  00,00,00,2d,00,00,00,1f,00,00,00,c8,00,00,00,cb,00,00,00,d0,00,00,00,cd,00,\\\\n  00,00,2c,00,00,00,6f,61,72,64,00,00,00,00\\n\"speed\"=hex:00,00,00,00\\n\"sensitivity\"=hex:00,00,00,00\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Keyboard\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Keyboard\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Mouse]\\n\"speed\"=hex:00,00,00,00\\n\"sensitivity\"=hex:00,00,00,00\\n\"mouse8\"=hex:2c,00,00,00,39,00,00,00,03,01,00,00,2e,00,00,00,2f,00,00,00,30,00,\\\\n  00,00,31,00,00,00,02,01,00,00,06,01,00,00,04,01,00,00,07,01,00,00,05,01,00,\\\\n  00,1c,00,00,00,01,00,00,00,36,00,00,00\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Mouse\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Mouse\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2]\\n\"Input\"=dword:00000000\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Joystick]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Joystick\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Joystick\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Keyboard]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Keyboard\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Keyboard\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Mouse]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Mouse\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Mouse\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3]\\n\"Input\"=dword:00000000\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Joystick]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Joystick\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Joystick\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Keyboard]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Keyboard\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Keyboard\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Mouse]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Mouse\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Mouse\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\Sound]\\n\"Music Volume\"=dword:000000ff\\n\"Music Mute\"=dword:00000000\\n\"SFX Volume\"=dword:0000008f\\n\"SFX Mute\"=dword:00000000\\n\\n\\n\nver0=0\ncoord0=0\nflag0=685768822\nflagg0=1212153856\nflagh0=1044\nflagi0=1212153860\nflagj0=1069184\nflagk0=270532608\nflagl0=229384\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Die Hard Trilogy (Game 2).dxw",
    "content": "[target]\ntitle0=Die Hard Trilogy (Game 2)\npath0=C:\\My Games\\diehard3\\DIEHARD\\GAME\\DIEHARD2.EXE\nstartfolder0=C:\\My Games\\diehard3\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\\n[HKEY_LOCAL_MACHINE\\SOFTWARE]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard]\\n\"Install Directory\"=\".\\\\diehard\"\\n\"FMV Installed\"=dword:00000000\\n\"Data Installed\"=dword:00000001\\n\"Abnormal Termination\"=dword:00000000\\n\"StartupFolder\"=\"Fox Interactive\"\\n\"Version\"=\"1.00\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\Configuration]\\n\"complexity\"=dword:3f800000\\n\"cutoff\"=dword:3eeeeef0\\n\"perspective\"=dword:3eeeeef0\\n\"Quality\"=dword:00000000\\n\"Use Hardware\"=dword:00000000\\n\"Preferred Height\"=dword:00000258\\n\"Preferred Width\"=dword:00000320\\n\"lighting\"=dword:00000001\\n\"texture quality\"=dword:00000001\\n\"Language\"=dword:00000000\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1]\\n\"Input\"=dword:00000000\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Joystick]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Joystick\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Keyboard]\\n\"keyboard\"=hex:39,00,00,00,22,00,00,00,21,00,00,00,02,00,00,00,00,00,00,00,1e,\\\\n  00,00,00,2d,00,00,00,1f,00,00,00,c8,00,00,00,cb,00,00,00,d0,00,00,00,cd,00,\\\\n  00,00,2c,00,00,00,6f,61,72,64,00,00,00,00\\n\"speed\"=hex:00,00,00,00\\n\"sensitivity\"=hex:00,00,00,00\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Keyboard\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Keyboard\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Mouse]\\n\"speed\"=hex:00,00,00,00\\n\"sensitivity\"=hex:00,00,00,00\\n\"mouse8\"=hex:2c,00,00,00,39,00,00,00,03,01,00,00,2e,00,00,00,2f,00,00,00,30,00,\\\\n  00,00,31,00,00,00,02,01,00,00,06,01,00,00,04,01,00,00,07,01,00,00,05,01,00,\\\\n  00,1c,00,00,00,01,00,00,00,36,00,00,00\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Mouse\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Mouse\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2]\\n\"Input\"=dword:00000000\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Joystick]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Joystick\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Joystick\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Keyboard]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Keyboard\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Keyboard\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Mouse]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Mouse\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Mouse\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3]\\n\"Input\"=dword:00000000\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Joystick]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Joystick\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Joystick\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Keyboard]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Keyboard\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Keyboard\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Mouse]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Mouse\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Mouse\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\Sound]\\n\"Music Volume\"=dword:000000ff\\n\"Music Mute\"=dword:00000000\\n\"SFX Volume\"=dword:0000008f\\n\"SFX Mute\"=dword:00000000\\n\\n\\n\nver0=0\ncoord0=0\nflag0=685768818\nflagg0=1212153856\nflagh0=1044\nflagi0=1212153860\nflagj0=1052800\nflagk0=143368\nflagl0=229376\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Die Hard Trilogy (Game 3).dxw",
    "content": "[target]\ntitle0=Die Hard Trilogy (Game 3)\npath0=C:\\My Games\\diehard3\\DIEHARD\\GAME\\DIEHARD3.EXE\nstartfolder0=C:\\My Games\\diehard3\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\\n[HKEY_LOCAL_MACHINE\\SOFTWARE]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard]\\n\"Install Directory\"=\".\\\\diehard\"\\n\"FMV Installed\"=dword:00000000\\n\"Data Installed\"=dword:00000001\\n\"Abnormal Termination\"=dword:00000000\\n\"StartupFolder\"=\"Fox Interactive\"\\n\"Version\"=\"1.00\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\Configuration]\\n\"complexity\"=dword:3f800000\\n\"cutoff\"=dword:3eeeeef0\\n\"perspective\"=dword:3eeeeef0\\n\"Quality\"=dword:00000000\\n\"Use Hardware\"=dword:00000000\\n\"Preferred Height\"=dword:00000258\\n\"Preferred Width\"=dword:00000320\\n\"lighting\"=dword:00000001\\n\"texture quality\"=dword:00000001\\n\"Language\"=dword:00000000\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1]\\n\"Input\"=dword:00000000\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Joystick]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Joystick\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Keyboard]\\n\"keyboard\"=hex:39,00,00,00,22,00,00,00,21,00,00,00,02,00,00,00,00,00,00,00,1e,\\\\n  00,00,00,2d,00,00,00,1f,00,00,00,c8,00,00,00,cb,00,00,00,d0,00,00,00,cd,00,\\\\n  00,00,2c,00,00,00,6f,61,72,64,00,00,00,00\\n\"speed\"=hex:00,00,00,00\\n\"sensitivity\"=hex:00,00,00,00\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Keyboard\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Keyboard\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Mouse]\\n\"speed\"=hex:00,00,00,00\\n\"sensitivity\"=hex:00,00,00,00\\n\"mouse8\"=hex:2c,00,00,00,39,00,00,00,03,01,00,00,2e,00,00,00,2f,00,00,00,30,00,\\\\n  00,00,31,00,00,00,02,01,00,00,06,01,00,00,04,01,00,00,07,01,00,00,05,01,00,\\\\n  00,1c,00,00,00,01,00,00,00,36,00,00,00\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Mouse\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Mouse\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2]\\n\"Input\"=dword:00000000\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Joystick]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Joystick\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Joystick\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Keyboard]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Keyboard\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Keyboard\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Mouse]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Mouse\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Mouse\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3]\\n\"Input\"=dword:00000000\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Joystick]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Joystick\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Joystick\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Keyboard]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Keyboard\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Keyboard\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Mouse]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Mouse\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Mouse\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\Sound]\\n\"Music Volume\"=dword:000000ff\\n\"Music Mute\"=dword:00000000\\n\"SFX Volume\"=dword:0000008f\\n\"SFX Mute\"=dword:00000000\\n\\n\\n\nver0=0\ncoord0=0\nflag0=681574450\nflagg0=1212153856\nflagh0=1049620\nflagi0=1212153860\nflagj0=1052800\nflagk0=0\nflagl0=229376\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Die Hard Trilogy (launcher).dxw",
    "content": "[target]\ntitle0=Die Hard Trilogy (launcher)\npath0=C:\\My Games\\diehard3\\DIEHARD\\GAME\\DIEHARD.EXE\nstartfolder0=C:\\My Games\\diehard3\\\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\\n[HKEY_LOCAL_MACHINE\\SOFTWARE]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard]\\n\"Install Directory\"=\".\\\\diehard\"\\n\"FMV Installed\"=dword:00000000\\n\"Data Installed\"=dword:00000001\\n\"Abnormal Termination\"=dword:00000000\\n\"StartupFolder\"=\"Fox Interactive\"\\n\"Version\"=\"1.00\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\Configuration]\\n\"complexity\"=dword:3f800000\\n\"cutoff\"=dword:3eeeeef0\\n\"perspective\"=dword:3eeeeef0\\n\"Quality\"=dword:00000000\\n\"Use Hardware\"=dword:00000000\\n\"Preferred Height\"=dword:00000258\\n\"Preferred Width\"=dword:00000320\\n\"lighting\"=dword:00000001\\n\"texture quality\"=dword:00000001\\n\"Language\"=dword:00000000\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1]\\n\"Input\"=dword:00000000\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Joystick]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Joystick\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Keyboard]\\n\"keyboard\"=hex:39,00,00,00,22,00,00,00,21,00,00,00,02,00,00,00,00,00,00,00,1e,\\\\n  00,00,00,2d,00,00,00,1f,00,00,00,c8,00,00,00,cb,00,00,00,d0,00,00,00,cd,00,\\\\n  00,00,2c,00,00,00,6f,61,72,64,00,00,00,00\\n\"speed\"=hex:00,00,00,00\\n\"sensitivity\"=hex:00,00,00,00\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Keyboard\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Keyboard\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Mouse]\\n\"speed\"=hex:00,00,00,00\\n\"sensitivity\"=hex:00,00,00,00\\n\"mouse8\"=hex:2c,00,00,00,39,00,00,00,03,01,00,00,2e,00,00,00,2f,00,00,00,30,00,\\\\n  00,00,31,00,00,00,02,01,00,00,06,01,00,00,04,01,00,00,07,01,00,00,05,01,00,\\\\n  00,1c,00,00,00,01,00,00,00,36,00,00,00\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Mouse\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d1\\Mouse\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2]\\n\"Input\"=dword:00000000\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Joystick]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Joystick\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Joystick\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Keyboard]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Keyboard\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Keyboard\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Mouse]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Mouse\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d2\\Mouse\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3]\\n\"Input\"=dword:00000000\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Joystick]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Joystick\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Joystick\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Keyboard]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Keyboard\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Keyboard\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Mouse]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Mouse\\sensitivity]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\d3\\Mouse\\speed]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Die Hard\\Sound]\\n\"Music Volume\"=dword:000000ff\\n\"Music Mute\"=dword:00000000\\n\"SFX Volume\"=dword:0000008f\\n\"SFX Mute\"=dword:00000000\\n\\n\\n\nver0=0\ncoord0=0\nflag0=685768738\nflagg0=1212153856\nflagh0=1049620\nflagi0=1212153860\nflagj0=1053824\nflagk0=0\nflagl0=32768\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Digger XP.dxw",
    "content": "[target]\ntitle0=Digger XP\npath0=D:\\Games\\Digger XP\\Digger XP.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=a.k.a. Digger Remastered\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Dink Smallwood.dxw",
    "content": "[target]\ntitle0=Dink Smallwood\npath0=D:\\Games\\Dink Smallwood\\dink.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412038\nflagj0=4224\ntflag0=536870912\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Dinosaur Resurrection.dxw",
    "content": "[target]\ntitle0=Dinosaur Resurrection\npath0=F:\\Games\\Dinosaur Resurrection\\FALCOM\\DIN\\DIN_Win.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=8388608\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=640\ninitresh0=480\n"
  },
  {
    "path": "build/exports/Dirt Track Racing 2 Demo.dxw",
    "content": "[target]\ntitle0=Dirt Track Racing 2 Demo\npath0=F:\\Games\\Dirt Track Racing 2 Demo\\DTR2Demo.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4226\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Dirt Track Racing 2.dxw",
    "content": "[target]\ntitle0=Dirt Track Racing 2\npath0=F:\\Games\\Dirt Track Racing 2\\DTR2.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959560\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Dirt Track Racing.dxw",
    "content": "[target]\ntitle0=Dirt Track Racing\npath0=F:\\Games\\Dirt Track Racing\\DTR.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Disciples II - Dark Prophecy.dxw",
    "content": "[target]\ntitle0=Disciples II - Dark Prophecy\npath0=D:\\Games\\Disciples II - Dark Prophecy\\Discipl2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=134234144\nflagg0=1207959552\nflagh0=16\nflagi0=138412036\ntflag0=6147\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Disney Groove It.dxw",
    "content": "[target]\ntitle0=Disney Groove It\npath0=D:\\Games\\groove it\\groove.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217728\nflagg0=1207959808\nflagh0=20\nflagi0=4\ntflag0=6211\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Divide, the.dxw",
    "content": "[target]\ntitle0=Divide, the\npath0=D:\\Games\\divide\\DIVIDE.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=RIP game needs \"dxwnd.the Divide\" registry definition\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1212153856\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Divine Divinity (GOG).dxw",
    "content": "[target]\ntitle0=Divine Divinity (GOG)\npath0=D:\\Games\\Divine Divinity (GOG)\\div.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=1\ncoord0=0\nflag0=683687978\nflagg0=2013265920\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nregistry0=\nflagk0=65536\nswapeffect0=0\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Divine Divinity.dxw",
    "content": "[target]\ntitle0=Divine Divinity\npath0=D:\\Games\\Divine Divinity\\Run\\div.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136331298\nflagg0=1761607680\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nregistry0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Dominant Species.dxw",
    "content": "[target]\ntitle0=Dominant Species\npath0=F:\\Games\\Dominant Species\\DominantSpecies.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=4194304\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Doom 3.dxw",
    "content": "[target]\ntitle0=Doom 3\npath0=D:\\Games\\Doom 3\\Doom3.exe\nlaunchpath0=\nmodule0=\nopengllib0=OpenGL32.dll\nver0=9\ncoord0=0\nflag0=134217760\nflagg0=1207959552\nflagh0=65557\nflagi0=69206020\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=0\n"
  },
  {
    "path": "build/exports/Doom Shareware for Windows 95.dxw",
    "content": "[target]\ntitle0=Doom Shareware for Windows 95\npath0=D:\\Games\\Doom Shareware for Windows 95\\Doom95.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nflagj0=128\nwinver0=0\nmaxres0=2\n"
  },
  {
    "path": "build/exports/Doom95.dxw",
    "content": "[target]\ntitle0=Doom95\npath0=D:\\Games\\Doom95\\DOOM95.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=12416\nflagk0=262144\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Dracula - The Resurrection (GOG).dxw",
    "content": "[target]\ntitle0=Dracula - The Resurrection (GOG)\npath0=D:\\Games\\Dracula Trilogy\\Dracula - The Resurrection\\Dracula.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Works only after replaced the GOG dhook.dll with a dummy ddraw proxy\\nDxWnd ddraw.dll proxy is fine, apoart form an initial warning dialog box.\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=205520900\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=8192\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Dracula Twins.dxw",
    "content": "[target]\ntitle0=Dracula Twins\npath0=D:\\Games\\Dracula Twins\\DraculaTwins.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=128\nflagk0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Dragon Dice.dxw",
    "content": "[target]\ntitle0=Dragon Dice\npath0=D:\\Games\\ddice\\dd.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Game path must be set in registry\nregistry0=\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Interplay]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Interplay\\Dragon Dice]\\n\"ApplicationPath\"=\"d:\\\\games\\\\ddice\\\\\"\\n\"StarfleetDemo\"=dword:00000001\\n\"GameInstalled\"=dword:00000001\\n\"ZoomLevel\"=dword:00000000\\n\"DieSortType\"=dword:00000001\\n\"DisplayDieFaceType\"=dword:00000000\\n\"DisplayRoll\"=dword:00000001\\n\"DisplayBattle\"=dword:00000001\\n\"DisplayDragonVsDragon\"=dword:00000001\\n\"PlaySounds\"=dword:00000001\\n\"PlayMusic\"=dword:00000001\\n\"DemoMode\"=dword:00000001\\n\"DisplayGameMessages\"=dword:00000001\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Interplay\\Dragon Dice\\1.0]\\n\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314882\nflagg0=1207959552\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\nflagk0=65536\nflagl0=32768\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Dragon Heart.dxw",
    "content": "[target]\ntitle0=Dragon Heart\npath0=D:\\Games\\DRAGONH\\DRAGON.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Set game video mode to fullscreen for DxWnd intervention\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Drakan Order of the Flame (10th anniversary).dxw",
    "content": "[target]\ntitle0=Drakan Order of the Flame (10th anniversary)\npath0=D:\\Games\\drakan\\drakan.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=740311126\nflagg0=1476395008\nflagh0=20\nflagi0=203423748\nflagj0=4224\nflagk0=268500994\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Drome Racers.dxw",
    "content": "[target]\ntitle0=Drome Racers\npath0=D:\\Games\\LEGO Interactive\\Drome Racers\\Drome Racers.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=144711714\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Duckman.dxw",
    "content": "[target]\ntitle0=Duckman\npath0=D:\\Games\\Duckman\\DUCKMAN.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218272\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Duke Nukem - Manhattan Project (D3D8).dxw",
    "content": "[target]\ntitle0=Duke Nukem - Manhattan Project (D3D8)\npath0=D:\\Games\\Duke Nukem - Manhattan Project\\prism3d.exe\nmodule0=p3shared\nopengllib0=\nver0=8\ncoord0=0\nflag0=134217770\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=0\nflagk0=0\nflagl0=0\nflagm0=0\ndflag0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\n"
  },
  {
    "path": "build/exports/Duke Nukem Forever.dxw",
    "content": "[target]\ntitle0=Duke Nukem Forever\npath0=D:\\Games\\Duke Nukem Forever\\System\\DukeForever.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Dune 2000.dxw",
    "content": "[target]\ntitle0=Dune 2000\npath0=D:\\Games\\Dune 2000\\DUNE2000.DAT\nlaunchpath0=D:\\Games\\Dune 2000\\DUNE2000.EXE\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=671105058\nflagg0=1207959568\nflagh0=20\nflagi0=4194308\nflagj0=128\nflagk0=32768\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Dungeon Keeper II.dxw",
    "content": "[target]\ntitle0=Dungeon Keeper II\npath0=D:\\Games\\Dungeon Keeper 2\\DKII.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1782579200\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=150\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nwinver0=0\nmaxres0=0\nflagj0=128\n"
  },
  {
    "path": "build/exports/Dungeon Lords MMXII.dxw",
    "content": "[target]\ntitle0=Dungeon Lords MMXII\npath0=D:\\Games\\Dungeon Lords MMXII\\dlords2012.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=2\nflag0=-2013265886\nflagg0=1207959552\nflagh0=20\nflagi0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Dungeon Odyssey (Demo).dxw",
    "content": "[target]\ntitle0=Dungeon Odyssey (Demo)\npath0=D:\\Games\\Dungeon Odyssey Demo\\DungOdy.exe\nmodule0=\nopengllib0=\nver0=7\ncoord0=0\nflag0=134234146\nflagg0=1207959568\nflagh0=20\nflagi0=4\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=4\n"
  },
  {
    "path": "build/exports/Dweep Gold.dxw",
    "content": "[target]\ntitle0=Dweep Gold\npath0=D:\\Games\\DweepGol\\Dweep.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Dylan Dog Horror at Luna Park.dxw",
    "content": "[target]\ntitle0=Dylan Dog Horror at Luna Park\npath0=D:\\Games\\DylanDog\\hlp.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1744830464\nflagh0=1048596\nflagi0=138412038\nflagj0=5248\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Earth 2150.dxw",
    "content": "[target]\ntitle0=Earth 2150\npath0=D:\\Games\\Earth 2150\\Earth2150.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=136331298\nflagg0=1207959552\nflagh0=20\nflagi0=138412452\nflagj0=8322\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Earthworm Jim 3D.dxw",
    "content": "[target]\ntitle0=Earthworm Jim 3D\npath0=D:\\Games\\Earthworm Jim 3D\\EarthwormJim3D.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1213202432\nflagh0=65556\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=1\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Eat my Dust.dxw",
    "content": "[target]\ntitle0=Eat my Dust\npath0=D:\\Games\\eat_my_dust\\EATMYDUS.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=32768\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Echelon.dxw",
    "content": "[target]\ntitle0=Echelon\npath0=D:\\Games\\echelon\\Game.exe\nmodule0=\nopengllib0=\nver0=7\ncoord0=0\nflag0=134234114\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Ed Hunter.dxw",
    "content": "[target]\ntitle0=Ed Hunter\npath0=D:\\Games\\Ed Hunter\\EDHUNTER.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1208025088\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=2\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=98304\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Empire Earth.dxw",
    "content": "[target]\ntitle0=Empire Earth\npath0=D:\\Games\\Empire Earth\\Empire Earth.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671088675\nflagg0=1207959552\nflagh0=20\nflagi0=4325380\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Empire of the Ants (ITA).dxw",
    "content": "[target]\ntitle0=Empire of the Ants (ITA)\npath0=D:\\Games\\Empire of the Ants\\Formiche.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=151011364\nflagg0=134217728\nflagh0=20\nflagi0=4\ntflag0=6467\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Empire of the Ants.dxw",
    "content": "[target]\ntitle0=Empire of the Ants\npath0=D:\\Games\\Empire of the Ants\\Game.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=402669606\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/End of Twilight.dxw",
    "content": "[target]\ntitle0=End of Twilight\npath0=D:\\Games\\End of Twilight\\bin\\mol.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1744830464\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=327680\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Enemy Zero.dxw",
    "content": "[target]\ntitle0=Enemy Zero\npath0=F:\\EZERO\\EZERO.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Esoteria.dxw",
    "content": "[target]\ntitle0=Esoteria\npath0=D:\\Games\\esoteria\\ESOTERIA.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=[HKEY_CLASSES_ROOT\\Filter]\\n[HKEY_CLASSES_ROOT\\Filter\\{865608F0-85BE-11d0-B4EC-0000C04FFDC7}]\\n\"\"=\"DDAMFilter\"\\n[HKEY_CLASSES_ROOT\\CLSID]\\n[HKEY_CLASSES_ROOT\\CLSID\\{865608F0-85BE-11d0-B4EC-0000C04FFDC7}]\\n\"\"=\"DDAMFilter\"\\n\"Merit\"=dword:00200000\\n[HKEY_CLASSES_ROOT\\CLSID\\{865608F0-85BE-11d0-B4EC-0000C04FFDC7}\\InprocServer32]\\n\"\"=\"ddamf.ax\"\\n\"ThreadingModel\"=\"Both\"\\n\\n[HKEY_CLASSES_ROOT\\CLSID\\{865608F0-85BE-11d0-B4EC-0000C04FFDC7}\\Pins]\\n[HKEY_CLASSES_ROOT\\CLSID\\{865608F0-85BE-11d0-B4EC-0000C04FFDC7}\\Pins\\Input]\\n\"AllowedMany\"=dword:00000000\\n\"AllowedZero\"=dword:00000000\\n\"Direction\"=dword:00000000\\n\"IsRendered\"=dword:00000001\\n[HKEY_CLASSES_ROOT\\CLSID\\{865608F0-85BE-11d0-B4EC-0000C04FFDC7}\\Pins\\Input\\Types]\\n[HKEY_CLASSES_ROOT\\CLSID\\{865608F0-85BE-11d0-B4EC-0000C04FFDC7}\\Pins\\Input\\Types\\{73646976-0000-0010-8000-00AA00389B71}]\\n[HKEY_CLASSES_ROOT\\CLSID\\{865608F0-85BE-11d0-B4EC-0000C04FFDC7}\\Pins\\Input\\Types\\{73646976-0000-0010-8000-00AA00389B71}\\{00000000-0000-0000-0000-000000000000}]\\n\\n\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/European Air War.dxw",
    "content": "[target]\ntitle0=European Air War\npath0=D:\\Games\\European Air War\\eaw.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nregistry0=\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Evil Dead Hail to the King.dxw",
    "content": "[target]\ntitle0=Evil Dead Hail to the King\npath0=D:\\Games\\Evil Dead\\EvilDead.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Evil Islands.dxw",
    "content": "[target]\ntitle0=Evil Islands\npath0=D:\\Games\\Evil Islands\\Game.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Evolva.dxw",
    "content": "[target]\ntitle0=Evolva\npath0=D:\\Games\\Evolva\\Evolva.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nregistry0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Excalibur.dxw",
    "content": "[target]\ntitle0=Excalibur\npath0=D:\\Games\\Excalibur\\_FISH.EXE\nstartfolder0=\nlaunchpath0=D:\\Games\\Excalibur\\EXCAL.EXE\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Extreme-G_2.dxw",
    "content": "[target]\ntitle0=Extreme-G_2\npath0=D:\\Games\\Extreme-G_2\\xg2pc.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=[HKEY_LOCAL_MACHINE\\SOFTWARE\\ACCLAIM]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\ACCLAIM\\Extreme-G 2]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\ACCLAIM\\Extreme-G 2\\1.00.000]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Acclaim Entertainment]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Acclaim Entertainment\\XGII]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Acclaim Entertainment\\XGII\\1.00]\\n\"cont1digital\"=hex:00,80,00,00,22,00,00,04,00,40,00,00,25,00,00,04,20,00,00,00,\\\\n  31,00,00,04,10,00,00,00,23,00,00,04,00,20,00,00,24,00,00,04,00,10,00,00,01,\\\\n  00,00,04,00,08,00,00,17,00,00,04,00,02,00,00,00,00,00,00,00,01,00,00,00,00,\\\\n  00,00,00,04,00,00,18,00,00,04,08,00,00,00,32,00,00,04,02,00,00,00,20,00,00,\\\\n  04,01,00,00,00,21,00,00,04,04,00,00,00,39,00,00,04\\n\"cont1analogue\"=hex:cb,00,00,04,cd,00,80,4c,d0,00,00,4d,c8,00,00,04\\n\"cont2digital\"=hex:00,80,00,00,00,00,00,00,00,40,00,00,00,00,00,00,20,00,00,00,\\\\n  00,00,00,00,10,00,00,00,00,00,00,00,00,20,00,00,00,00,00,00,00,10,00,00,00,\\\\n  00,00,00,00,08,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,01,00,00,00,00,\\\\n  00,00,00,04,00,00,00,00,00,00,08,00,00,00,00,00,00,00,02,00,00,00,00,00,00,\\\\n  00,01,00,00,00,00,00,00,00,04,00,00,00,00,00,00,00\\n\"cont2analogue\"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\\n\"cont3digital\"=hex:00,80,00,00,00,00,00,00,00,40,00,00,00,00,00,00,20,00,00,00,\\\\n  00,00,00,00,10,00,00,00,00,00,00,00,00,20,00,00,00,00,00,00,00,10,00,00,00,\\\\n  00,00,00,00,08,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,01,00,00,00,00,\\\\n  00,00,00,04,00,00,00,00,00,00,08,00,00,00,00,00,00,00,02,00,00,00,00,00,00,\\\\n  00,01,00,00,00,00,00,00,00,04,00,00,00,00,00,00,00\\n\"cont3analogue\"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\\n\"cont4digital\"=hex:00,80,00,00,00,00,00,00,00,40,00,00,00,00,00,00,20,00,00,00,\\\\n  00,00,00,00,10,00,00,00,00,00,00,00,00,20,00,00,00,00,00,00,00,10,00,00,00,\\\\n  00,00,00,00,08,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,01,00,00,00,00,\\\\n  00,00,00,04,00,00,00,00,00,00,08,00,00,00,00,00,00,00,02,00,00,00,00,00,00,\\\\n  00,01,00,00,00,00,00,00,00,04,00,00,00,00,00,00,00\\n\"cont4analogue\"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\\n\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=136314880\nflagj0=4224\nflagk0=65536\nflagl0=8192\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/F-16 Agressor.dxw",
    "content": "[target]\ntitle0=F-16 Agressor\npath0=D:\\Games\\F16_Agressor\\f-16.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=[HKEY_CURRENT_USER\\Software\\GSI]\\n[HKEY_CURRENT_USER\\Software\\GSI\\F-16: Aggressor]\\n[HKEY_CURRENT_USER\\Software\\GSI\\F-16: Aggressor\\1.00.000]\\n\"LastPlayerSaved\"=\"\"\\n\\n\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\nflagk0=2162696\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/F-16 Fighting Falcon.dxw",
    "content": "[target]\ntitle0=F-16 Fighting Falcon\npath0=D:\\Games\\F16\\f1695.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217826\nflagg0=1209008128\nflagh0=20\nflagi0=4\ntflag0=259\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/F-16 Multirole Fighter.dxw",
    "content": "[target]\ntitle0=F-16 Multirole Fighter\npath0=D:\\Games\\F-16\\F16.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/F1 Manager 2000.dxw",
    "content": "[target]\ntitle0=F1 Manager 2000\npath0=D:\\Games\\F1 Manager\\F1 Manager.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681590818\nflagg0=1207959552\nflagh0=20\nflagi0=138420228\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/FIFA 2000.dxw",
    "content": "[target]\ntitle0=FIFA 2000\npath0=F:\\Games\\FIFA2000\\fifa2000.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Securdrive protected - needs crack\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=752877602\nflagg0=1216348160\nflagh0=20\nflagi0=205520900\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Fallout.dxw",
    "content": "[target]\ntitle0=Fallout\npath0=D:\\Games\\Fallout\\FALLOUTW.EXE\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=71303172\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=On Win10 it was necessary to activate Hook DLL flag and clean system shims.\nflagj0=128\nflagk0=0\nswapeffect0=0\nregistry0=\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Fatal Abyss.dxw",
    "content": "[target]\ntitle0=Fatal Abyss\npath0=D:\\Games\\Fatal Abyss\\FABYSS.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1208090752\nflagh0=20\nflagi0=138543108\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Fate.dxw",
    "content": "[target]\ntitle0=Fate\npath0=D:\\Games\\Fate\\Fate.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Faust the seven games of the soul.dxw",
    "content": "[target]\ntitle0=Faust the seven games of the soul\npath0=D:\\Games\\Faust\\Faust.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=67113088\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Fifa 99 (Direct3D).dxw",
    "content": "[target]\ntitle0=Fifa 99 (Direct3D)\npath0=D:\\Games\\Fifa 99\\fifa99.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671105058\nflagg0=1207959552\nflagh0=20\nflagi0=205520900\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagk0=65536\nswapeffect0=0\nregistry0=\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Fifa 99 (sw renderer).dxw",
    "content": "[target]\ntitle0=Fifa 99 (sw renderer)\npath0=D:\\Games\\Fifa 99\\fifa99.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=134234146\nflagg0=1210073088\nflagh0=65556\nflagi0=205520900\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Fighting Force.dxw",
    "content": "[target]\ntitle0=Fighting Force\npath0=D:\\Games\\Fighting Force\\fforce.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218274\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=67108992\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nregistry0=\nflagk0=65536\nflagl0=0\nflagm0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Fin-Fin.dxw",
    "content": "[target]\ntitle0=Fin-Fin\npath0=D:\\Games\\Fin-Fin\\v90seger\\teoboot.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Final Odyssey.dxw",
    "content": "[target]\ntitle0=Final Odyssey\npath0=D:\\Games\\Final odyssey\\FinalOdy.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134266915\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=6146\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/FireCrow.dxw",
    "content": "[target]\ntitle0=FireCrow\npath0=D:\\Games\\Firecrow\\Firecrow.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Flying Heroes.dxw",
    "content": "[target]\ntitle0=Flying Heroes\npath0=D:\\Games\\Flying_Heroes\\fh.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234150\nflagg0=1207959552\nflagh0=20\nflagi0=4194436\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nflagj0=128\nnotes0=\nregistry0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Flying Saucer.dxw",
    "content": "[target]\ntitle0=Flying Saucer\npath0=D:\\Games\\FLYSAUCR\\fs.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314978\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Force 21.dxw",
    "content": "[target]\ntitle0=Force 21\npath0=D:\\Games\\Force 21\\Force21.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=136331298\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Forsaken (HW).dxw",
    "content": "[target]\ntitle0=Forsaken (HW)\npath0=D:\\Games\\Forsaken\\ForsakenHW.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=950026274\nflagg0=1207959812\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=130\nflagk0=65536\nswapeffect0=0\nstartfolder0=\nregistry0=\nmonitorid0=0\nflagl0=0\nflagm0=0\nflagn0=0\nflago0=0\ndflag0=0\nmaxddinterface0=7\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n[stamp]\nversion=2.04.21.a2\ntime=Wed Mar 15 22:14:01 2017\n\n"
  },
  {
    "path": "build/exports/Future Cop L.A.P.D..dxw",
    "content": "[target]\ntitle0=Future Cop L.A.P.D.\npath0=D:\\Games\\Futurcop\\FCopLAPD.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nmonitorid0=0\nscanline0=1\ninitresw0=0\ninitresh0=0\n[stamp]\nversion=2.04.20.a0\ntime=Fri Mar 10 11:58:41 2017\n\n"
  },
  {
    "path": "build/exports/G-Darius.dxw",
    "content": "[target]\ntitle0=G-Darius\npath0=D:\\Games\\G-Darius\\G_Darius.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=0\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=262164\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=268435456\nflagm0=0\nflagn0=0\nflago0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=50\ninitresw0=800\ninitresh0=600\n[stamp]\nversion=2.04.21.a4\ntime=Mon Mar 20 14:42:23 2017\n\n"
  },
  {
    "path": "build/exports/G-Nome.dxw",
    "content": "[target]\ntitle0=G-Nome\npath0=D:\\Games\\G-Nome\\G-NOME.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671088674\nflagg0=1207959552\nflagh0=32788\nflagi0=4\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/GP 500 (win2k obfuscated).dxw",
    "content": "[target]\ntitle0=GP 500 (win2k obfuscated)\npath0=D:\\Games\\gp500\\gp500_win2k.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=205520900\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/GP 500.dxw",
    "content": "[target]\ntitle0=GP 500\npath0=D:\\Games\\gp500\\gp500_win2k.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681590834\nflagg0=1744830464\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=-2147418110\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/GTA 3.dxw",
    "content": "[target]\ntitle0=GTA 3\npath0=D:\\Games\\GTA3\\gta3.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234150\nflagg0=1207975952\nflagh0=144\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nstartfolder0=\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=0\nflagk0=1048576\nflagl0=0\nflagm0=0\ndflag0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\n"
  },
  {
    "path": "build/exports/GTA window.dxw",
    "content": "[target]\ntitle0=GTA window\npath0=D:\\Games\\gta1\\gtawin\\gtawin.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\DMA Design]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\DMA Design\\Grand Theft Auto]\\n\"Language\"=dword:00000000\\n\"Path\"=\".\"\\n\"Installed\"=dword:00000001\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\DMA Design\\Grand Theft Auto\\1.00.000]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\DMA Design\\Grand Theft Auto\\Controls]\\n\"Control 0\"=dword:000000cb\\n\"Control 1\"=dword:000000cd\\n\"Control 2\"=dword:000000c8\\n\"Control 3\"=dword:000000d0\\n\"Control 4\"=dword:00000039\\n\"Control 5\"=dword:0000001c\\n\"Control 6\"=dword:0000001d\\n\"Control 7\"=dword:0000002d\\n\"Control 8\"=dword:0000002c\\n\"Control 9\"=dword:0000000f\\n\\n\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=9236\nflagi0=1212153860\nflagj0=4224\nflagk0=65536\nflagl0=32768\nflagm0=5\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/GTA2.dxw",
    "content": "[target]\ntitle0=GTA2\npath0=D:\\Games\\gta2\\gta2.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673194018\nflagg0=1208221696\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Galapagos demo.dxw",
    "content": "[target]\ntitle0=Galapagos demo\npath0=D:\\Games\\Galapagos Demo\\Galapagos Demo.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=674250814\nflagg0=1208221696\nflagh0=33300\nflagi0=138412036\nflagj0=469766272\nflagk0=67616\nflagl0=92340240\nflagm0=0\nflagn0=0\nflago0=0\ntflag0=0\ndflag0=0\nposx0=150\nposy0=150\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=1\ninitresw0=640\ninitresh0=480\n[stamp]\nversion=2.04.20.a2\ntime=Mon Mar 13 13:51:23 2017\n\n"
  },
  {
    "path": "build/exports/Galapagos.dxw",
    "content": "[target]\ntitle0=Galapagos\npath0=F:\\Games\\Galapagos\\GALA.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=137379902\nflagg0=1207959552\nflagh0=33300\nflagi0=138412036\nflagj0=469766272\nflagk0=67584\nflagl0=92340240\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=150\nposy0=150\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=640\ninitresh0=480\n"
  },
  {
    "path": "build/exports/Garfield - Caught in the Act.dxw",
    "content": "[target]\ntitle0=Garfield - Caught in the Act\npath0=F:\\Games\\Garfield\\GARFIELD.NOSHIM.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1208221696\nflagh0=65556\nflagi0=138412036\nflagj0=4226\nflagk0=327680\nflagl0=8421376\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=320\ninitresh0=224\n"
  },
  {
    "path": "build/exports/Geneforge (Steam).dxw",
    "content": "[target]\ntitle0=Geneforge (Steam)\npath0=D:\\Program Files (x86)\\Steam\\SteamApps\\common\\Geneforge\\Geneforge.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314918\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Geneforge 2 (Steam).dxw",
    "content": "[target]\ntitle0=Geneforge 2 (Steam)\npath0=D:\\Program Files (x86)\\Steam\\SteamApps\\common\\Geneforge 2\\Geneforge 2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314918\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=67584\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Geneforge 3 (Steam).dxw",
    "content": "[target]\ntitle0=Geneforge 3 (Steam)\npath0=D:\\Program Files (x86)\\Steam\\SteamApps\\common\\Geneforge 3\\Geneforge 3.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314918\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Geneforge 4 (Steam).dxw",
    "content": "[target]\ntitle0=Geneforge 4 (Steam)\npath0=D:\\Program Files (x86)\\Steam\\SteamApps\\common\\Geneforge 4\\Geneforge 4.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314918\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Geneforge.dxw",
    "content": "[target]\ntitle0=Geneforge\npath0=d:\\games\\Geneforge\\Geneforge.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234628\nflagg0=1207959808\nflagh0=20\nflagi0=4\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Genocide (ORIGINAL).dxw",
    "content": "[target]\ntitle0=Genocide (ORIGINAL)\npath0=D:\\Games\\genocide\\original vanilla (1998)\\Genocide\\genocide.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218274\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\nregistry0=\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Genocide (REMIXED VERSION).dxw",
    "content": "[target]\ntitle0=Genocide (REMIXED VERSION)\npath0=D:\\Games\\genocide\\remixed version (1999)\\genocide\\genocide.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\nregistry0=\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Gooka The Mystery of Janatris.dxw",
    "content": "[target]\ntitle0=Gooka The Mystery of Janatris\npath0=D:\\Games\\Gooka The Mystery of Janatris\\Gooka\\Gooka2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Starforce protected: is working only with proper crack.\\nThe game has a native windowed mode.\\nTo use DxWnd configure it in fullscreen mode.\\nSetting audio in 3D mode (in advanced game settings\" may cause a game error \\nafter the main menu at game starting!\nregistry0=\nver0=0\ncoord0=0\nflag0=136315402\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\nflagj0=4224\nflagk0=268500992\nflagl0=8\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Gorky 17.dxw",
    "content": "[target]\ntitle0=Gorky 17\npath0=F:\\Games\\Gorky 17\\gorky17.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Note: a ddraw error in the initial stage pops out a misleading \"missing CD\" dialog.\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nstartfolder0=\nregistry0=\nmonitorid0=0\nflagl0=0\nflagm0=0\ndflag0=0\nmaxddinterface0=7\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/Grand Prix Legends.dxw",
    "content": "[target]\ntitle0=Grand Prix Legends\npath0=D:\\Games\\gpl\\gpl.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=679485472\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\n"
  },
  {
    "path": "build/exports/Grand Prix World.dxw",
    "content": "[target]\ntitle0=Grand Prix World\npath0=D:\\Games\\Grand Prix World\\gpwxp2.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134283430\nflagg0=1207959680\nflagh0=29\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nwinver0=0\nmaxres0=0\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Grand Theft Auto 3 Vice City.dxw",
    "content": "[target]\ntitle0=Grand Theft Auto 3: Vice City\npath0=D:\\Games\\GTA3ViceCity\\gta-vc.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=-2011168218\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Ground Control (sw renderer).dxw",
    "content": "[target]\ntitle0=Ground Control (sw renderer)\npath0=D:\\Games\\GC\\gc.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=681574442\nflagg0=1208090624\nflagh0=8212\nflagi0=138412036\nflagj0=4224\nflagk0=0\nflagl0=67141648\nflagm0=0\nflagn0=0\nflago0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n[stamp]\nversion=2.04.21.a6\ntime=Wed Mar 22 12:11:46 2017\n\n"
  },
  {
    "path": "build/exports/Ground Control.dxw",
    "content": "[target]\ntitle0=Ground Control\npath0=D:\\Games\\GC\\gc.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1744830464\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Gruntz.dxw",
    "content": "[target]\ntitle0=Gruntz\npath0=D:\\Games\\gruntz\\GRUNTZ.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1207959552\nflagh0=67108884\nflagi0=4325380\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Gunbound (fullscreen).dxw",
    "content": "[target]\ntitle0=Gunbound (fullscreen)\npath0=F:\\Games\\GunboundGitzWC\\gitzgame.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=0\ncoord0=1\nflag0=681582626\nflagg0=1073741840\nflagh0=20\nflagi0=136314884\nflagj0=4224\nflagk0=67584\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=0\nsizy0=0\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/Gunbound.dxw",
    "content": "[target]\ntitle0=Gunbound\npath0=D:\\Games\\GunBound\\GunGame.gme\nlaunchpath0=D:\\Games\\GunBound\\Launcher.exe\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314922\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/H.E.D.Z..dxw",
    "content": "[target]\ntitle0=H.E.D.Z.\npath0=D:\\Games\\HEDZ\\HEDZ.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=134221952\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Hamsterball.dxw",
    "content": "[target]\ntitle0=Hamsterball\npath0=D:\\Games\\Hamsterball\\Hamsterball.exe\nmodule0=\nopengllib0=\nver0=8\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4194304\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=0\nflagk0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Heart of Darkness.dxw",
    "content": "[target]\ntitle0=Heart of Darkness\npath0=D:\\Games\\Heart of Darkness\\HODWin32.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=2068\nflagi0=4\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Hearts of Iron III.dxw",
    "content": "[target]\ntitle0=Hearts of Iron III\npath0=D:\\Games\\Hearts of Iron III\\hoi3game.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=704774688\nflagg0=1207959568\nflagh0=20\nflagi0=138412036\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Heavy Gear.dxw",
    "content": "[target]\ntitle0=Heavy Gear\npath0=D:\\Games\\Heavy Gear\\hg.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Game needs CD on first CD-Rom drive. \\nIf multiple ones are present, need setting \"hide empty CD-Rom drivers\"  \\nand unmount others CD.\\nGame patched with patch v1.2 requires \"fix FreeLibrary\" flag\\n3DFX & Glide support is still under development\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=-2009071612\nflagj0=4224\nflagk0=65536\nflagl0=134217728\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Hercules.dxw",
    "content": "[target]\ntitle0=Hercules\npath0=D:\\Games\\HERC\\HERCULES.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1744830464\nflagh0=1044\nflagi0=1212153862\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nregistry0=\\n[HKEY_LOCAL_MACHINE\\SOFTWARE]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Disney Interactive]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Disney Interactive\\Hercules]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Disney Interactive\\Hercules\\1.00]\\n\"DATA\"=\"DATA\\\\\"\\n\"User Path\"=\".\\\\\"\\n\"BitVersion\"=\"32 Bit\"\\n\"PATH\"=\".\\\\\"\\n\"EntryPoint\"=\".\\\\Hercules.exe\"\\n\"Help\"=\".\\\\hercules.hlp\"\\n\"Uninstall\"=\"C:\\\\WINDOWS\\\\uninst.exe -fC:\\\\Hercules\\\\DeIsL1.isu\"\\n\"Config\"=hex:05,ca,ab,07,01,01,01,00,03,01,01,00,01,01,01,00,ff,3f,00,00,01,00,ff,ff,03,00,00,00,26,00,28,00,25,00,27,00,58,00,5a,00,43,00,44,00,53,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Heroes of Might and Magic 4 Complete.dxw",
    "content": "[target]\ntitle0=Heroes of Might and Magic 4 Complete\npath0=D:\\Games\\Heroes of Might and Magic 4 Complete\\heroes4.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671350818\nflagg0=1207959552\nflagh0=65556\nflagi0=5\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Heroes of Might and Magic IV.dxw",
    "content": "[target]\ntitle0=Heroes of Might and Magic IV\npath0=D:\\Games\\Heroes of Might and Magic IV\\heroes4i.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1276117072\nflagh0=65556\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=According to BigManJapan, the game may require also \"Use DLL Injection\" and \"GDI Mode\".\nflagj0=128\nflagk0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Hesperian Wars.dxw",
    "content": "[target]\ntitle0=Hesperian Wars\npath0=D:\\Games\\Hesperian_Wars\\HW.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=-2147483628\nflagi0=4194308\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nflagj0=128\n"
  },
  {
    "path": "build/exports/Hexen II (GDI).dxw",
    "content": "[target]\ntitle0=Hexen II (GDI)\npath0=D:\\Games\\Hexen II - RIP\\h2.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185827\nflagg0=1209401344\nflagh0=65556\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Hexen II (OpenGl).dxw",
    "content": "[target]\ntitle0=Hexen II (OpenGl)\npath0=D:\\Games\\Hexen II - RIP\\glh2.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185827\nflagg0=1209401344\nflagh0=65556\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Hexen95.dxw",
    "content": "[target]\ntitle0=Hexen95\npath0=D:\\Games\\HEXEN95\\HEXEN95.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=671088674\nflagg0=1207959552\nflagh0=65556\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Hexplore.dxw",
    "content": "[target]\ntitle0=Hexplore\npath0=D:\\Games\\Hexplore\\hexplore.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134236194\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nregistry0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Hitchcock the Final Cut.dxw",
    "content": "[target]\ntitle0=Hitchcock the Final Cut\npath0=D:\\Games\\Hitchcock\\Hitchcock_Kyro.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=1\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=67113088\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Hitman - Codename 47.dxw",
    "content": "[target]\ntitle0=Hitman - Codename 47\npath0=D:\\Games\\Hitman - Codename 47\\Hitman.Exe\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=134234144\nflagg0=1207959808\nflagh0=20\nflagi0=4\ntflag0=3\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Hitman 2 Silent Assassin.dxw",
    "content": "[target]\ntitle0=Hitman 2 Silent Assassin\npath0=D:\\Games\\Hitman 2 Silent Assassin\\hitman2.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=2\nflag0=134234150\nflagg0=1207959568\nflagh0=20\nflagi0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Hollywood Monsters.dxw",
    "content": "[target]\ntitle0=Hollywood Monsters\npath0=D:\\Games\\Hollywood Monsters\\monsters.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1209008384\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\n"
  },
  {
    "path": "build/exports/Homeworld 2.dxw",
    "content": "[target]\ntitle0=Homeworld 2\npath0=D:\\Games\\Homeworld2\\Bin\\Release\\Homeworld2.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671154178\nflagg0=134217728\nflagh0=285\nflagi0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Homeworld.dxw",
    "content": "[target]\ntitle0=Homeworld\npath0=D:\\Games\\Homeworld\\Homeworld.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=704667682\nflagg0=1208090896\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Hoppop'n.dxw",
    "content": "[target]\ntitle0=Hoppop'n\npath0=D:\\Games\\Hoppop'n\\hoppopn.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=2162688\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Horde 2 the Citadel.dxw",
    "content": "[target]\ntitle0=Horde 2 the Citadel\npath0=D:\\Games\\Horde2\\HORDE\\horde2.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=136314918\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Horde.dxw",
    "content": "[target]\ntitle0=Horde\npath0=D:\\Games\\HORDE\\horde.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217766\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\n"
  },
  {
    "path": "build/exports/Hot Chix 'n' Gear Stix (demo).dxw",
    "content": "[target]\ntitle0=Hot Chix 'n' Gear Stix (demo)\npath0=D:\\Games\\Hot Chix 'n' Gear Stix\\HotChix.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1749024768\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/House of the Dead 2.dxw",
    "content": "[target]\ntitle0=House of the Dead 2\npath0=D:\\Games\\HOD2\\Hod2.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=738197538\nflagg0=1744830464\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Hoyle Casino 2001.dxw",
    "content": "[target]\ntitle0=Hoyle Casino 2001\npath0=D:\\Games\\Hoyle Casino 2001\\Hoyle Casino.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314882\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Hoyle Casino Empire (GDI emulation).dxw",
    "content": "[target]\ntitle0=Hoyle Casino Empire (GDI emulation)\npath0=D:\\Games\\Hoyle Casino Empire\\CasinoEmpire.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=142606368\nflagg0=1242562560\nflagh0=20\nflagi0=205520900\nflagj0=8392832\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Hoyle Casino Empire (fullscreen).dxw",
    "content": "[target]\ntitle0=Hoyle Casino Empire (fullscreen)\npath0=D:\\Games\\Hoyle Casino Empire\\CasinoEmpire.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1073741824\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Hoyle Casino Empire.dxw",
    "content": "[target]\ntitle0=Hoyle Casino Empire\npath0=D:\\Games\\Hoyle Casino Empire\\CasinoEmpire.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=142606370\nflagg0=1242562560\nflagh0=20\nflagi0=205520900\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Hundred Swords.dxw",
    "content": "[target]\ntitle0=Hundred Swords\npath0=D:\\Games\\Hundred Swords\\H_SWORDS.exe\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=402653472\nflagg0=1212153856\nflagh0=20\nflagi0=4\ntflag0=6210\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=4\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Hydro Thunder.dxw",
    "content": "[target]\ntitle0=Hydro Thunder\npath0=D:\\Games\\Hydro Thunder\\hydro.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=706740258\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Hyper Crazy Climber.dxw",
    "content": "[target]\ntitle0=Hyper Crazy Climber\npath0=D:\\Games\\Hyper Crazy Climber\\CRAZY.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=1\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=196608\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/HyperBlade.dxw",
    "content": "[target]\ntitle0=HyperBlade\npath0=D:\\Games\\HyperBlade\\HYPERX.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1209008128\nflagh0=8212\nflagi0=138412036\nflagj0=4224\nflagk0=67174400\nflagl0=268435456\nflagm0=5\nflagn0=0\nflago0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n[stamp]\nversion=2.04.20.a2\ntime=Mon Mar 13 13:54:22 2017\n\n\n"
  },
  {
    "path": "build/exports/I-War.dxw",
    "content": "[target]\ntitle0=I-War\npath0=D:\\Games\\iwar\\IWar.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1476395008\nflagh0=20\nflagi0=138412036\nflagj0=536875136\ntflag0=512\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Icewind Dale 2.dxw",
    "content": "[target]\ntitle0=Icewind Dale 2\npath0=D:\\Games\\Icewind Dale 2\\IWD2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=278\nflagi0=138543108\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Icewind Dale II.dxw",
    "content": "[target]\ntitle0=Icewind Dale II\npath0=D:\\Games\\DnDMC\\Icewind Dale II\\IWD2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138543108\nflagj0=8320\ntflag0=129\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Icewind Dale.dxw",
    "content": "[target]\ntitle0=Icewind Dale\npath0=D:\\Games\\DnDMC\\Icewind Dale\\IDMain.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138543108\nflagj0=8320\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Imperialism II.dxw",
    "content": "[target]\ntitle0=Imperialism II\npath0=D:\\Games\\Imperialism 2\\imperialism II.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=679485474\nflagg0=1209008128\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=0\nflagk0=32768\nswapeffect0=0\nflagl0=4\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Imperialism.dxw",
    "content": "[target]\ntitle0=Imperialism\npath0=D:\\Games\\Imperialism\\Imperialism.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681582627\nflagg0=1209008128\nflagh0=20\nflagi0=4194308\nflagj0=128\nflagk0=0\nflagl0=268435456\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\nmonitorid0=0\nscanline0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/In the Hunt.dxw",
    "content": "[target]\ntitle0=In the Hunt\npath0=D:\\Games\\HUNT\\E8.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Incoming (GOG).dxw",
    "content": "[target]\ntitle0=Incoming (GOG)\npath0=D:\\Games\\Incoming and Incoming Forces\\Incoming\\incoming.exe\nmodule0=\nopengllib0=\nver0=7\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nflagj0=128\nnotes0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Incoming Forces (GOG).dxw",
    "content": "[target]\ntitle0=Incoming Forces (GOG)\npath0=D:\\Games\\Incoming and Incoming Forces\\Incoming Forces\\forces.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218272\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=1024\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Indiana Jones and the Infernal Machine.dxw",
    "content": "[target]\ntitle0=Indiana Jones and the Infernal Machine\npath0=D:\\Games\\Indiana Jones Infernal Machine\\Resource\\Indy3D.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Beware!\\nThe game on nowadays computers works only using a no-cd crack \\nand a dedicated installer for 64 bit platforms!\nregistry0=\nver0=0\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=-2009071610\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/IndyCar Series.dxw",
    "content": "[target]\ntitle0=IndyCar Series\npath0=D:\\Games\\IndyCar Series\\IndyCarSeries.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=8\ncoord0=0\nflag0=134234656\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Inquisition.dxw",
    "content": "[target]\ntitle0=Inquisition\npath0=D:\\Games\\Inquisition\\inq.tmp.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Note:\\nthe file Inquisition.exe copies part of itself to a temporary directory, runs this\\nexecutable and delete it in the end.\\nTo hook the game properly you have to:\\n1) run the game normally\\n2) Alt-tab and start the task manager\\n3) locate the inquisition running process, possibly _inq.tmp\\n4) copy the temp file to a safe place and rename it (es. inq.tmp.exe)\\n5) kill the fullscreen inquisition and run DxWnd with this configuration\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=268435456\nflagm0=0\nflagn0=0\nflago0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n[stamp]\nversion=2.04.21.a4\ntime=Sat Mar 18 22:20:11 2017\n\n"
  },
  {
    "path": "build/exports/Insane.dxw",
    "content": "[target]\ntitle0=Insane\npath0=D:\\Games\\Insane\\Game.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=7\ncoord0=0\nflag0=134217760\nflagg0=1207959553\nflagh0=20\nflagi0=4194308\ntflag0=6146\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Intensity XS.dxw",
    "content": "[target]\ntitle0=Intensity XS\npath0=D:\\Games\\Intensity_XS\\Intensity.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/International Football 2000.dxw",
    "content": "[target]\ntitle0=International Football 2000\npath0=D:\\Games\\International Football 2000\\MSIF2000.ICD\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=150994976\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=259\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=D:\\Games\\International Football 2000\\MSIF2000.EXE\nwinver0=0\nmaxres0=0\n"
  },
  {
    "path": "build/exports/Interstate 76 Nitro Pack.dxw",
    "content": "[target]\ntitle0=Interstate 76 Nitro Pack\npath0=F:\\Games\\Interstate 76 Nitro Pack\\nitro.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=0\ncoord0=0\nflag0=134217762\nflagg0=2013265920\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/Interstate 76.dxw",
    "content": "[target]\ntitle0=Interstate 76\npath0=D:\\Games\\I76\\I76.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=2013265920\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Jagged Alliance 2 Gold.dxw",
    "content": "[target]\ntitle0=Jagged Alliance 2 Gold\npath0=F:\\Games\\Jagged Alliance 2 Gold\\ja2.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=-1474297694\nflagg0=1744832768\nflagh0=8212\nflagi0=138412036\nflagj0=5248\nflagk0=2162696\nflagl0=16\nflagm0=2305\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Janes FA18.dxw",
    "content": "[target]\ntitle0=Janes FA18\npath0=D:\\Games\\Janes FA18\\F18.exe\nstartfolder0=\nlaunchpath0=\nmodule0=MFC42.DLL\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Jazz Jackrabbit 2.dxw",
    "content": "[target]\ntitle0=Jazz Jackrabbit 2\npath0=D:\\Games\\Jazz Jackrabbit 2\\JAZZ2.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671097378\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=0\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Jeff Gordon XS Racing demo.dxw",
    "content": "[target]\ntitle0=Jeff Gordon XS Racing demo\npath0=D:\\Games\\Jeff Gordon XS Racing demo\\jgxsr711.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=740294690\nflagg0=1476395008\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nregistry0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Jeff Wayne's - The War of the Worlds.dxw",
    "content": "[target]\ntitle0=Jeff Wayne's - The War of the Worlds\npath0=F:\\Games\\Jeff Wayne's - The War of the Worlds\\Wow.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=-2009071612\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Jet Moto.dxw",
    "content": "[target]\ntitle0=Jet Moto\npath0=D:\\Games\\Jet_Moto\\JETMOTO.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671088674\nflagg0=1207959568\nflagh0=20\nflagi0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/JetMoto.dxw",
    "content": "[target]\ntitle0=JetMoto\npath0=D:\\Games\\Jet_Moto\\JETMOTO.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671088674\nflagg0=1207959552\nflagh0=20\nflagi0=0\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Jolly Rover.dxw",
    "content": "[target]\ntitle0=Jolly Rover\npath0=D:\\Games\\Jolly Rover\\rover.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218240\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Jumpgate Classic.dxw",
    "content": "[target]\ntitle0=Jumpgate Classic\npath0=D:\\Games\\Jumpgate\\Jumpgate\\jumpgate.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234656\nflagg0=1207959568\nflagh0=84\nflagi0=2\ntflag0=6146\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/KA52 Team Alligator.dxw",
    "content": "[target]\ntitle0=KA52 Team Alligator\npath0=D:\\Games\\Team Alligator\\Team2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=687865888\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/KKND Xtreme.dxw",
    "content": "[target]\ntitle0=KKND Xtreme\npath0=D:\\Games\\KKNDXtreme\\KKND.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=402669602\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nregistry0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Kasbrik 3D.dxw",
    "content": "[target]\ntitle0=Kasbrik 3D\npath0=D:\\Games\\Kasbrik\\Kasbrik.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=8\ncoord0=0\nflag0=136315426\nflagg0=1275068416\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=268763136\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=800\nmaxy0=600\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Killing Time.dxw",
    "content": "[target]\ntitle0=Killing Time\npath0=D:\\Games\\killingtime\\KILLTIME.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Movies not rendered correctly\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Kingpin Life Of Crime (intro).dxw",
    "content": "[target]\ntitle0=Kingpin Life Of Crime (intro)\npath0=D:\\Games\\Kingpin Life Of Crime\\kpintro.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=134218756\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Kingpin Life Of Crime.dxw",
    "content": "[target]\ntitle0=Kingpin Life Of Crime\npath0=D:\\Games\\Kingpin Life Of Crime\\kingpin.exe\nlaunchpath0=\nmodule0=\nopengllib0=3dfxgl.dll\nver0=9\ncoord0=0\nflag0=134234146\nflagg0=1744830464\nflagh0=21\nflagi0=-2009071610\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\n"
  },
  {
    "path": "build/exports/Kiss Psycho Circus.dxw",
    "content": "[target]\ntitle0=Kiss Psycho Circus\npath0=D:\\Games\\Kiss\\client.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234148\nflagg0=1207959808\nflagh0=20\nflagi0=0\ntflag0=3\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Knight Moves.dxw",
    "content": "[target]\ntitle0=Knight Moves\npath0=D:\\Games\\Knight Moves\\KNIGHT.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=681574434\nflagg0=1212153856\nflagh0=65556\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=32768\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/KnightShift.dxw",
    "content": "[target]\ntitle0=KnightShift\npath0=D:\\Games\\knightshift\\KnightShift.ex1\nmodule0=\nopengllib0=\nver0=8\ncoord0=0\nflag0=134217760\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=3\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Knights Of Honor.dxw",
    "content": "[target]\ntitle0=Knights Of Honor\npath0=D:\\Games\\Knights Of Honor\\KoH.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=-402382814\nflagg0=1207959552\nflagh0=65556\nflagi0=4\ntflag0=6431\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Knights_And_Merchants (1024).dxw",
    "content": "[target]\ntitle0=Knights_And_Merchants (1024)\npath0=D:\\Games\\Knights_And_Merchants_-_The_Shattered_Kingdom\\KaM_1024.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Knights_And_Merchants (800).dxw",
    "content": "[target]\ntitle0=Knights_And_Merchants (800)\npath0=D:\\Games\\Knights_And_Merchants_-_The_Shattered_Kingdom\\KaM_800.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Kohan II Kings of War.dxw",
    "content": "[target]\ntitle0=Kohan II Kings of War\npath0=D:\\Games\\Kohan II Kings of War\\k2.exe\nmodule0=\nopengllib0=\nver0=9\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nwinver0=0\nmaxres0=0\n"
  },
  {
    "path": "build/exports/L'Elefante a Strisce.dxw",
    "content": "[target]\ntitle0=L'Elefante a Strisce\npath0=D:\\Games\\L'Elefante a Strisce\\Pilots1I.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=134217728\nflagh0=20\nflagi0=0\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/LEGO Pirates.dxw",
    "content": "[target]\ntitle0=LEGO Pirates\npath0=d:\\Games\\Disney Interactive Studios\\LEGO Pirates\\LEGOPirates.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=9\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/LEGO Star Wars - The Complete Saga.dxw",
    "content": "[target]\ntitle0=LEGO Star Wars - The Complete Saga\npath0=D:\\Games\\LEGO Star Wars - The Complete Saga\\LEGOStarWarsSaga.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218272\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=6402\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/LEGO Star Wars.dxw",
    "content": "[target]\ntitle0=LEGO Star Wars\npath0=D:\\Games\\LEGO Star Wars Game\\LegoStarwars.crack.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217760\nflagg0=134217728\nflagh0=20\nflagi0=541065216\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\n"
  },
  {
    "path": "build/exports/LEGO Stunt Rally.dxw",
    "content": "[target]\ntitle0=LEGO Stunt Rally\npath0=D:\\Games\\LEGO Stunt Rally\\_msr.exe\nlaunchpath0=D:\\Games\\LEGO Stunt Rally\\StuntRally.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217760\nflagg0=1207959552\nflagh0=20\nflagi0=4325380\ntflag0=6210\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Land of the Dead.dxw",
    "content": "[target]\ntitle0=Land of the Dead\npath0=D:\\Games\\Land of the Dead\\System\\LOTD.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217766\nflagg0=1207959552\nflagh0=20\nflagi0=0\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Lander.dxw",
    "content": "[target]\ntitle0=Lander\npath0=D:\\Games\\Lander\\lndrd3dr\\lander.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=956317728\nflagg0=1207959552\nflagh0=20\nflagi0=136314884\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Largo Winch.dxw",
    "content": "[target]\ntitle0=Largo Winch\npath0=D:\\Games\\Largo Winch\\LargoWinch.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\nflagn0=0\nflago0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n[stamp]\nversion=2.04.21.a4\ntime=Sun Mar 19 16:02:06 2017\n\n"
  },
  {
    "path": "build/exports/Last Bronx.dxw",
    "content": "[target]\ntitle0=Last Bronx\npath0=D:\\Games\\Last_Bronx\\LB.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Last Half od Darkness.dxw",
    "content": "[target]\ntitle0=Last Half od Darkness\npath0=G:\\LastHalfWin.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234656\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Layer Section.dxw",
    "content": "[target]\ntitle0=Layer Section\npath0=D:\\Games\\LS\\LS.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Legacy of Kain Soul Reaver (GOG).dxw",
    "content": "[target]\ntitle0=Legacy of Kain Soul Reaver (GOG)\npath0=D:\\Games\\Legacy of Kain Soul Reaver\\kain2.exe\nmodule0=\nopengllib0=\nver0=7\ncoord0=0\nflag0=671088674\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Legacy of Kain Soul Reaver 2.dxw",
    "content": "[target]\ntitle0=Legacy of Kain Soul Reaver 2\npath0=D:\\Games\\Legacy of Kain Soul Reaver 2\\sr2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=8\ncoord0=0\nflag0=134218288\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Legend of the Prophet & Assassin, the.dxw",
    "content": "[target]\ntitle0=Legend of the Prophet & Assassin, the\npath0=D:\\Games\\La leggenda\\Legend.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=1\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=67113088\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Les adventures de Robby le Robot - Mission Code de la route.dxw",
    "content": "[target]\ntitle0=Les adventures de Robby le Robot - Mission Code de la route\npath0=D:\\Games\\Robby Robot\\VISION.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Little Big Adventure 2 (Windows patch).dxw",
    "content": "[target]\ntitle0=Little Big Adventure 2 (Windows patch)\npath0=C:\\LBA2\\TWINSEN.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218336\nflagg0=1480654848\nflagh0=84\nflagi0=4718592\ntflag0=6211\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=1\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Lode Runner 2.dxw",
    "content": "[target]\ntitle0=Lode Runner 2\npath0=D:\\Games\\Lode Runner 2\\LR2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136319010\nflagg0=1744830592\nflagh0=20\nflagi0=138416132\nflagj0=4224\nflagk0=327680\nflagl0=4\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=3\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Loonyland 2 CE.dxw",
    "content": "[target]\ntitle0=Loonyland 2 CE\npath0=D:\\Games\\Loonyland2CE\\loonyland.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673194018\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=268435456\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Lords of Magic Special Edition.dxw",
    "content": "[target]\ntitle0=Lords of Magic Special Edition\npath0=D:\\Games\\LoM\\SIERRA\\LOMSE\\lomse.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=402669603\nflagg0=1207959552\nflagh0=6291476\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nflagj0=128\nwinver0=0\nmaxres0=0\nnotes0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Lose Your Marbles.dxw",
    "content": "[target]\ntitle0=Lose Your Marbles\npath0=D:\\Games\\MARBLES\\MARBLES.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Lost Valley.dxw",
    "content": "[target]\ntitle0=Lost Valley\npath0=D:\\Games\\Lost Valley\\lost valley\\lost valley data.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=142614562\nflagg0=1207959552\nflagh0=-2071986156\nflagi0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/LuXiaoFeng.dxw",
    "content": "[target]\ntitle0=LuXiaoFeng\npath0=F:\\Games\\lxf\\core.dat\nstartfolder0=\nlaunchpath0=F:\\Games\\lxf\\Lxf.exe\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=8704\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/M1 Tank Platoon 2.dxw",
    "content": "[target]\ntitle0=M1 Tank Platoon 2\npath0=D:\\Games\\M1 Tank Platoon 2\\M1TP2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134238242\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=268439680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=8\nwinver0=0\nmaxres0=-1\nnotes0=\nregistry0=\nflagk0=0\nflagl0=0\nflagm0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/MDK2.dxw",
    "content": "[target]\ntitle0=MDK2\npath0=D:\\Games\\MDK2\\mdk2Main.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1744961536\nflagh0=65556\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=4096\n"
  },
  {
    "path": "build/exports/Machine Hunter.dxw",
    "content": "[target]\ntitle0=Machine Hunter\npath0=D:\\Games\\Machine Hunter\\MACHHUNT.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Madden NFL 08.dxw",
    "content": "[target]\ntitle0=Madden NFL 08\npath0=D:\\Games\\Madden NFL 08\\mainapp.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=9\ncoord0=0\nflag0=134218272\nflagg0=1207959808\nflagh0=20\nflagi0=205520900\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Mageslayer.dxw",
    "content": "[target]\ntitle0=MageSlayer\npath0=D:\\Games\\MAGE\\MAGESLAY.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1476395040\nflagh0=20\nflagi0=4194305\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=May require \"by default set no ALPHACHENNAL\" if monitor doesn't support mode\nflagj0=128\nwinver0=0\nmaxres0=0\nregistry0=\nflagk0=65536\nflagl0=0\nflagm0=0\ndflag0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Magic & Mayhem.dxw",
    "content": "[target]\ntitle0=Magic & Mayhem\npath0=D:\\Games\\Magic_&_Mayhem\\Chaos.exe\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=683687978\nflagg0=1275068416\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nwinver0=0\nmaxres0=0\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\nregistry0=\nflagl0=0\nflagm0=0\ndflag0=0\nmaxddinterface0=4\n"
  },
  {
    "path": "build/exports/Mall Tycoon 3.dxw",
    "content": "[target]\ntitle0=Mall Tycoon 3\npath0=D:\\Games\\Mall Tycoon 3\\Mall3Game.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671089184\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Mall Tycoon.dxw",
    "content": "[target]\ntitle0=Mall Tycoon\npath0=D:\\Games\\Mall.Tycoon\\mall.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=150994976\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Man TT Super Bike (fake fullscreen).dxw",
    "content": "[target]\ntitle0=Man TT Super Bike\npath0=D:\\Games\\ManTT\\MANXTT.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=2\nflag0=673185827\nflagg0=1241514008\nflagh0=65556\nflagi0=138444804\nflagj0=1073747072\nflagk0=327680\nflagl0=25165824\nflagm0=1024\ntflag0=0\ndflag0=0\nposx0=150\nposy0=150\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=640\ninitresh0=480\n"
  },
  {
    "path": "build/exports/Man TT Super Bike.dxw",
    "content": "[target]\ntitle0=Man TT Super Bike\npath0=D:\\Games\\ManTT\\MANXTT.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185827\nflagg0=1241513984\nflagh0=65556\nflagi0=138412036\nflagj0=4224\nflagk0=327680\nflagl0=0\nflagm0=1024\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=640\ninitresh0=480\n"
  },
  {
    "path": "build/exports/Marbles.dxw",
    "content": "[target]\ntitle0=Marbles\npath0=D:\\Games\\MARBLES\\MARBLES.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n[stamp]\nversion=2.04.20.a0\ntime=Fri Mar 10 13:34:32 2017\n\n"
  },
  {
    "path": "build/exports/Martian Gothic Unification.dxw",
    "content": "[target]\ntitle0=Martian Gothic Unification\npath0=D:\\Games\\Martian Gothic\\martian gothic.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1275068416\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=0\nflagk0=98304\nflagl0=0\nflagm0=0\ndflag0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nstartfolder0=\nmonitorid0=0\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/Mechcommander Gold.dxw",
    "content": "[target]\ntitle0=Mechcommander Gold\npath0=D:\\Games\\Mechcommander Gold RIP\\Mechcommander\\MCX.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681590818\nflagg0=1207959552\nflagh0=20\nflagi0=138412038\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Mechwarrior 3 (high res).dxw",
    "content": "[target]\ntitle0=Mechwarrior 3 (high res)\npath0=D:\\Games\\Mechwarrior 3 - RIP\\Mech3.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\\n[HKEY_LOCAL_MACHINE\\Software]\\n[HKEY_LOCAL_MACHINE\\Software\\MicroProse]\\n[HKEY_LOCAL_MACHINE\\Software\\MicroProse\\MechWarrior 3 EP1]\\n[HKEY_LOCAL_MACHINE\\Software\\MicroProse\\MechWarrior 3 EP1\\1.0]\\n\"Program\"=\"..\\\\\"\\n\"Version\"=\"1.0\"\\n\"InstallOptions\"=dword:00050707\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft]\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\DirectPlay]\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\DirectPlay\\Applications]\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\DirectPlay\\Applications\\MechWarrior 3 EP1]\\n\"Guid\"=\"{FA96C421-18DD-11D3-95AF-0060089877F0}\"\\n\"File\"=\"Mech3.exe\"\\n\"CommandLine\"=\"\\n\"Path\"=\".\\\\\"\\n\"CurrentDirectory\"=\".\\\\\"\\n\\n[HKEY_CURRENT_USER\\Software]\\n[HKEY_CURRENT_USER\\Software\\MicroProse]\\n[HKEY_CURRENT_USER\\Software\\MicroProse\\MechWarrior 3]\\n[HKEY_CURRENT_USER\\Software\\MicroProse\\MechWarrior 3\\1.0]\\n\"InGameVMode\"=dword:0000000a\\n\nver0=0\ncoord0=0\nflag0=136331398\nflagg0=1207959552\nflagh0=9236\nflagi0=1277165574\nflagj0=4224\nflagk0=65600\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\n"
  },
  {
    "path": "build/exports/Mechwarrior 3.dxw",
    "content": "[target]\ntitle0=Mechwarrior 3\npath0=D:\\Games\\Mechwarrior 3 (full)\\Mech3.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\\n[HKEY_LOCAL_MACHINE\\Software]\\n[HKEY_LOCAL_MACHINE\\Software\\MicroProse]\\n[HKEY_LOCAL_MACHINE\\Software\\MicroProse\\MechWarrior 3 EP1]\\n[HKEY_LOCAL_MACHINE\\Software\\MicroProse\\MechWarrior 3 EP1\\1.0]\\n\"Program\"=\"..\\\\\"\\n\"Version\"=\"1.0\"\\n\"InstallOptions\"=dword:00050707\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft]\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\DirectPlay]\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\DirectPlay\\Applications]\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\DirectPlay\\Applications\\MechWarrior 3 EP1]\\n\"Guid\"=\"{FA96C421-18DD-11D3-95AF-0060089877F0}\"\\n\"File\"=\"Mech3.exe\"\\n\"CommandLine\"=\"\\n\"Path\"=\".\\\\\"\\n\"CurrentDirectory\"=\".\\\\\"\\n\\n\nver0=0\ncoord0=0\nflag0=136331398\nflagg0=1207959552\nflagh0=9236\nflagi0=1277165574\nflagj0=4224\nflagk0=65600\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Medford Asylum.dxw",
    "content": "[target]\ntitle0=Medford Asylum\npath0=F:\\Games\\Medford Asylum\\MedfordAsylum.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=675282948\nflagj0=4224\nflagk0=65536\nflagl0=25165824\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Men in Black.dxw",
    "content": "[target]\ntitle0=Men in Black\npath0=D:\\Games\\Men in Black\\MiBd.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=67436544\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Mephisto Chess.dxw",
    "content": "[target]\ntitle0=Mephisto Chess\npath0=D:\\Games\\mephisto\\mephisto.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Run in window, but needs \"Limit available resources\" flag to run\nver0=0\ncoord0=0\nflag0=536870946\nflagg0=1476395008\nflagh0=20\nflagi0=138412038\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Metal Gear Solid VR.dxw",
    "content": "[target]\ntitle0=Metal Gear Solid VR\npath0=D:\\Games\\Metal Gear Solid\\mgsvr.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=16\nflagi0=138412036\nflagj0=4224\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Metal Gear Solid.dxw",
    "content": "[target]\ntitle0=Metal Gear Solid\npath0=D:\\Games\\Metal Gear Solid\\mgsi.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Metal Knight.dxw",
    "content": "[target]\ntitle0=Metal Knight RIP\npath0=D:\\Games\\Metal Knight RIP\\mk.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=134217728\nflagh0=20\nflagi0=4\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Microsoft Golf '98 trial (win).dxw",
    "content": "[target]\ntitle0=Microsoft Golf '98 trial (win)\npath0=D:\\Games\\MSGolf98\\MSGOLF98\\GAME.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft Games]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft Games\\Golf '98]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft Games\\Golf '98\\Version 1.0 Demo]\\n\"AppPath\"=\"D:\\\\Games\\\\MSGolf98\\\\MSGOLF98\"\\n\"InstallType\"=\"1\"\\n\"InstallPath\"=\"D:\\\\Games\\\\MSGolf98\\\\MSGOLF98\\\\\"\\n\"CDPath\"=\"D:\\\\Games\\\\MSGolf98\\\\MSGOLF98\"\\n\"Launched\"=\"1\"\\n\"PID\"=\"\"\\n\"Path\"=\"D:\\\\Games\\\\MSGolf98\\\\MSGOLF98\"\\n\"VersionType\"=\"TrialVersion\"\\n\"InstalledGroup\"=\"1\"\\n\"LangID\"=dword:00000009\\n\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=-671088640\nflagh0=1302\nflagi0=1212547076\nflagj0=4224\nflagk0=67436544\nflagl0=4\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=0\nsizy0=0\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Microsoft Golf '98 trial.dxw",
    "content": "[target]\ntitle0=Microsoft Golf '98 trial (win)\npath0=D:\\Games\\MSGolf98\\MSGOLF98\\GAME.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft Games]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft Games\\Golf '98]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft Games\\Golf '98\\Version 1.0 Demo]\\n\"AppPath\"=\"D:\\\\Games\\\\MSGolf98\\\\MSGOLF98\"\\n\"InstallType\"=\"1\"\\n\"InstallPath\"=\"D:\\\\Games\\\\MSGolf98\\\\MSGOLF98\\\\\"\\n\"CDPath\"=\"D:\\\\Games\\\\MSGolf98\\\\MSGOLF98\"\\n\"Launched\"=\"1\"\\n\"PID\"=\"\"\\n\"Path\"=\"D:\\\\Games\\\\MSGolf98\\\\MSGOLF98\"\\n\"VersionType\"=\"TrialVersion\"\\n\"InstalledGroup\"=\"1\"\\n\"LangID\"=dword:00000009\\n\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=-671088640\nflagh0=1302\nflagi0=1212547076\nflagj0=4224\nflagk0=67436544\nflagl0=4\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=0\nsizy0=0\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Microsoft Golf 1998 Edition.dxw",
    "content": "[target]\ntitle0=Microsoft Golf 1998 Edition\npath0=D:\\Games\\Microsoft Golf 1998 Edition\\game.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft Games]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft Games\\Golf '98]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft Games\\Golf '98\\Version 1.0 Demo]\\n\"AppPath\"=\"D:\\\\Games\\\\MSGolf98\\\\MSGOLF98\"\\n\"InstallType\"=\"1\"\\n\"InstallPath\"=\"D:\\\\Games\\\\MSGolf98\\\\MSGOLF98\\\\\"\\n\"CDPath\"=\"D:\\\\Games\\\\MSGolf98\\\\MSGOLF98\"\\n\"Launched\"=\"1\"\\n\"PID\"=\"\"\\n\"Path\"=\"D:\\\\Games\\\\MSGolf98\\\\MSGOLF98\"\\n\"VersionType\"=\"TrialVersion\"\\n\"InstalledGroup\"=\"1\"\\n\"LangID\"=dword:00000009\\n\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=-671088640\nflagh0=1302\nflagi0=1212547076\nflagj0=4224\nflagk0=327680\nflagl0=260\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=0\nsizy0=0\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\n"
  },
  {
    "path": "build/exports/Microsoft Golf 1999 Edition.dxw",
    "content": "[target]\ntitle0=Microsoft Golf 1999 Edition\npath0=D:\\Games\\Microsoft Golf 1999 Edition\\game.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Install instructions for Win7:\\nRun setup from the cd with Win95 compatibility\\nIf the setup copies 100% files but fails the final setting phase, \\nedit the virtual registry settings.\\nRemember to delete / rename the odious Backfill.exe before it requires you to \\nrestart the pc....\\n\nregistry0=[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft Games]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft Games\\Golf '99]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft Games\\Golf '99\\Version 1.0]\\n\"InstalledPATH\"=\"D:\\\\Games\\\\Microsoft Golf 1999 Edition\"\\n\"CDPath\"=\"E:\\\\\"\\n\"InstalledGroup\"=\"1\"\\n\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=-134217728\nflagh0=1302\nflagi0=1212547076\nflagj0=4224\nflagk0=327680\nflagl0=260\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=0\nsizy0=0\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\n"
  },
  {
    "path": "build/exports/Microsoft Golf 2001.dxw",
    "content": "[target]\ntitle0=Microsoft Golf 2001\npath0=D:\\Games\\msgolf2001\\golf2001.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=-2011148254\nflagg0=1207960576\nflagh0=20\nflagi0=138412036\nflagj0=69210240\nflagk0=327680\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Microsoft Midtown Madness.dxw",
    "content": "[target]\ntitle0=Microsoft Midtown Madness\npath0=D:\\Games\\Midtown Madness\\midtown.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=7\ncoord0=0\nflag0=-1474297822\nflagg0=1207959552\nflagh0=33554448\nflagi0=205520900\nflagj0=4224\nflagk0=66048\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Microsoft Motocross Madness 2 (emu).dxw",
    "content": "[target]\ntitle0=Microsoft Motocross Madness 2 (emu)\npath0=D:\\Games\\Motocross Madness 2\\mcm2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Run the game in emulation mode\\nDoesn't work on all video cards, and works only chosing the accelerated video card, \\nnot the software mode.\\nIn case of troubles, it may be necessary to delete the registry entries to force a \\nnew clean configuration.\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=8192\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Microsoft Motocross Madness 2 trial.dxw",
    "content": "[target]\ntitle0=Microsoft Motocross Madness 2 trial\npath0=D:\\Games\\Motocross Madness 2 trial\\mcm2.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Runs better with accelerated video card, \\nthe software mode is very slow and foggy.\\nIn case of troubles, it may be necessary to delete the registry entries to force a \\nnew clean configuration.\nregistry0=\nver0=0\nmonitorid0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\nflagn0=0\nflago0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n[stamp]\nversion=2.04.21.a2\ntime=Thu Mar 16 13:33:34 2017\n\n\n"
  },
  {
    "path": "build/exports/Microsoft Motocross Madness.dxw",
    "content": "[target]\ntitle0=Microsoft Motocross Madness\npath0=F:\\Games\\Motocross Madness\\mcm.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314914\nflagg0=134219776\nflagh0=20\nflagi0=4194308\nflagj0=0\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\n"
  },
  {
    "path": "build/exports/Microsoft Pandora's Box.dxw",
    "content": "[target]\ntitle0=Microsoft Pandora's Box\npath0=D:\\Games\\Microsoft Pandora's Box\\pandora.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=; Pandora's Box\\n\\n[HKEY_CURRENT_USER\\Software]\\n[HKEY_CURRENT_USER\\Software\\Microsoft]\\n[HKEY_CURRENT_USER\\Software\\Microsoft\\Microsoft Games\\Pandora's Box]\\n[HKEY_CURRENT_USER\\Software\\Microsoft\\Microsoft Games\\Pandora's Box\\1.0]\\n\"Music\"=hex:31\\n\"PlayerName\"=\"Gho\"\\n\"Sound\"=hex:31\\n\"Timer\"=hex:31\\n\nver0=0\ncoord0=0\nflag0=673185827\nflagg0=1209008128\nflagh0=20\nflagi0=138420228\nflagj0=128\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Microsotf Motocross Madness 2.dxw",
    "content": "[target]\ntitle0=Microsotf Motocross Madness 2\npath0=D:\\Games\\motocross madness 2\\mcm2.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234144\nflagg0=1207959808\nflagh0=20\nflagi0=4194308\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Midnight GT Primary Racer.dxw",
    "content": "[target]\ntitle0=Midnight GT Primary Racer\npath0=D:\\Games\\Midnight GT Primary Racer\\game.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4226\nflagk0=65552\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nstartfolder0=\nmonitorid0=0\nscanline0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/Mig 29 Fulcrum.dxw",
    "content": "[target]\ntitle0=Mig 29 Fulcrum\npath0=D:\\Games\\Mig 29 Fulcrum\\M29.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Millennium Racer Y2K fighters.dxw",
    "content": "[target]\ntitle0=Millennium Racer Y2K fighters\npath0=D:\\Games\\Millennium Racer\\MRacer.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671105056\nflagg0=1476395024\nflagh0=20\nflagi0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Minigolf Master Miniverse (demo).dxw",
    "content": "[target]\ntitle0=Minigolf Master Miniverse (demo)\npath0=D:\\Games\\MiniGolf Master Demo\\mvdemo.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Playable only after unsetting the game / setup / \"use fullscreen interface\" checkbox!\\nOtherwise the game start menu will be invisible.\nregistry0=\nver0=0\ncoord0=0\nflag0=681574438\nflagg0=1209008128\nflagh0=278\nflagi0=138412036\nflagj0=4224\nflagk0=33669120\nflagl0=32768\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Mirror's Edge.dxw",
    "content": "[target]\ntitle0=Mirror's Edge\npath0=D:\\Games\\Mirror's Edge\\Binaries\\MirrorsEdge.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=-2013265882\nflagg0=1207959552\nflagh0=2097172\nflagi0=0\ntflag0=15\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=6\n"
  },
  {
    "path": "build/exports/Moon Tycoon.dxw",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n\n\t<head>\n\n\t\t<meta http-equiv=\"content-Type\" content=\"text/html; charset=utf-8\" />\n\t\t<title>Wikisend: free file sharing service</title>\n\t\t<link href=\"http://wikisend.com/css/styles.css\" type=\"text/css\" rel=\"stylesheet\" />\n\t\t<script src=\"http://wikisend.com/js/jquery-1.2.1.min.js\" type=\"text/javascript\"></script>\n\t\t<script src=\"http://wikisend.com/js/download.js\" type=\"text/javascript\"></script><script src=\"http://wikisend.com/js/common.js\" type=\"text/javascript\"></script></head>\n\n<body>\n\n<div id=\"pagebgr\">\n<div id=\"topbgr\">\n<div id=\"page\">\n\n<!-- Login -->\n<div id=\"login\">\n<form action=\"/sign-in/\" method=\"post\" id=\"signInForm\">\n\n<div id=\"close\"><input name=\"\" type=\"image\" id=\"close_login\" src=\"http://wikisend.com/images/close_win.gif\" /></div>\n\n<div id=\"left\">\n\n<div class=\"formelement\">\n<div class=\"formtitle\"><label for=\"username\">Username:</label></div><input id=\"username\" name=\"username\" type=\"text\" class=\"inputfield\" />\n</div>\n\n<div class=\"formelement\">\n<div class=\"formtitle\"><label for=\"password\">Password:</label></div><input id=\"password\" name=\"password\" type=\"password\" class=\"inputfield\" />\n</div>\n</div>\n<div id=\"right\">\n\n<input type=\"image\" src=\"http://wikisend.com/images/button_login.gif\" alt=\"Sign in\" /><br />\n<a id=\"forgot\" href=\"/forgot-password/\">Forgot your password?</a>\n<input type=\"hidden\" name=\"sent\" value=\"1\" />\n</div>\n\n</form>\n</div>\n<!-- End Login -->\n\n<!-- ################# HEADER ################## -->\n<div id=\"header\">\n<div id=\"logo\"><a href=\"/\"><img src=\"http://wikisend.com/images/logo.gif\" width=\"351\" height=\"58\" alt=\"Wikisend: file sharing service\" class=\"imgblock\" /></a></div>\n\n<div id=\"toplinks\">\nHave an account: <a href=\"/sign-in/\" id=\"open_login\">Sign in here</a><br />New user: <a href=\"/sign-up/\">Sign up now</a></div></div>\n\n<!-- ################# END HEADER ################## -->\n\n<!-- ################# EARTH BLOCK ################## -->\n\n<div id=\"earthtabs\">\n<div id=\"upload\"><a href=\"/\"><img src=\"/images/upload_inactive.gif\" width=\"260\" height=\"46\" alt=\"Upload\" class=\"imgblock\" /></a></div>\n<div id=\"download\"><img src=\"/images/earth_download.gif\" width=\"278\" height=\"59\" alt=\"Download\" class=\"imgblock\" /></div>\n</div>\n\n<div id=\"earth\"><div id=\"themebgr\"><div id=\"cloud\"><div id=\"grass\"><div id=\"insidetheme\">\n\n\n\t<div id=\"titleblock\">\n\t\t<span id=\"filetitle\">Moon Tycoon.dxw</span>\t</div>\n\n\t<form action=\"\" method=\"post\" id=\"downloadform\">\n\t\t<div class=\"textindent\">\n\t\t\t\n\t\t\t<ul id=\"details\">\n\t\t\t\t<li><span class=\"detailtitle\">File ID:</span> <span id=\"fileidvalue\">271650</span></li>\n\t\t\t\t<li><span class=\"detailtitle\">File size:</span> 512 B</li>\n\t\t\t\t<li><span class=\"detailtitle\">Time to live:</span> 28 days</li>\t\t\t</ul>\n\t\t\t<div class=\"linkblock\">\n\t\t\t\t\t<div class=\"linktitle\"><label for=\"dlink\">Download link:</label></div><input id=\"dlink\" type=\"text\" value=\"http://wikisend.com/download/271650/Moon Tycoon.dxw\" class=\"linkfield\" readonly=\"readonly\"/></div><div class=\"linkblock\">\n\t\t\t\t\t<div class=\"linktitle\"><label for=\"flink\">Forum link:</label></div><input id=\"flink\" type=\"text\" value=\"[URL=http://wikisend.com/download/271650/Moon Tycoon.dxw]Moon Tycoon.dxw[/URL]\" class=\"linkfield\" readonly=\"readonly\"/></div>\t\n\t\t\t\t\n\t\t</div>\n\t\t\n\t\t<!-- end properties -->\n\t\n\n\t\t<div class=\"button\">\n\t\t\t<input type=\"hidden\" name=\"act\" value=\"download\" id=\"act\" />\n\t\t\t<input type=\"image\" src=\"/images/button_download.gif\" alt=\"Download file\" id=\"d_but\"/>\n\t\t</div>\n\t</form>\n\t\n\n</div></div></div></div></div>\n\n\n<!-- ################# END EARTH BLOCK ################## -->\n\n\n<!-- ################# WHY BLOCK ################## -->\n\n<div id=\"why\"><div id=\"bgr\"><div id=\"gradient\"><div id=\"earthpics\">\n<h1>Why our site?</h1>\n\n<div id=\"content\">\n<h2>Simple &amp; Free</h2>\nUpload and download lots of  files, big files, small files, data files, \nmedia files, archives or backups - any files. With Wikisend it`s simple and \nfree.\n\n<h2>Share with Friends</h2>\nShare files with your friends using E-mail, MySpace page, your blog, forums \nand so on. With Wikisend sharing files, photos, videos or documents is easy, \nfast, and reliable.\n\n<h2>Start now</h2>\nNo need to register, activate, install or read manuals - use our uploading \nform, you`re ready to go.\n\n</div>\n\n</div></div></div></div>\n\n<!-- ################# END WHY BLOCK ################## -->\n\n\n</div></div></div>\n\n<!-- ################# FOOTER ################## -->\n<div id=\"footer\"><div id=\"bottom\"><div id=\"top\">\n\n<ul>\n\n\t<li id=\"first\"><a class=\"footlink\" href=\"/\">Home page</a></li>\n\t<li><a class=\"footlink\" href=\"/feedback/\">Feedback</a></li>\n\t<li><a class=\"footlink\" href=\"/terms/\">Terms and conditions</a></li>\n\t</ul>\n\n<div id=\"copy\">&copy;&nbsp;2008 Wikisend - File Sharing. All rights reserved.</div>\n\n</div></div></div>\n<!-- ################# END FOOTER ################## -->\n\n</body>\n</html>"
  },
  {
    "path": "build/exports/MoonBase Commander (640x480).dxw",
    "content": "[target]\ntitle0=MoonBase Commander\npath0=D:\\Games\\MoonBase Commander\\Moonbase.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=-2011168734\nflagg0=1744830464\nflagh0=20\nflagi0=138416132\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=640\nsizy0=480\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=3\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/More Aggressive.dxw",
    "content": "[target]\ntitle0=More Aggressive\npath0=D:\\Games\\More Aggressive\\Aggres\\start.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Moto Racer 2 (GOG sw mode).dxw",
    "content": "[target]\ntitle0=Moto Racer 2 (GOG)\npath0=D:\\Games\\Moto Racer 2 (GOG)\\moto.exe\nlaunchpath0=D:\\Games\\Moto Racer 2 (GOG)\\moto.exe -noD3D\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959680\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=327680\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Moto Racer demo.dxw",
    "content": "[target]\ntitle0=Moto Racer demo\npath0=D:\\Games\\Moto.Racer.demo\\PlayDemo.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959680\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Motocross Madness (RIP).dxw",
    "content": "[target]\ntitle0=Motocross Madness (RIP)\npath0=D:\\Games\\Motocross_Madness\\mcm.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=[HKEY_LOCAL_MACHINE\\Software\\Microsoft]\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Microsoft Games]\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Microsoft Games\\Motocross Madness]\\n\"1.0\"=\".\\\\\"\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Microsoft Games\\Motocross Madness\\1.0]\\n\"InstalledFrom\"=\".\\\\\"\\n\"HardDriveRootPath\"=\".\\\\\"\\n\"InstallType\"=\"Full\"\\n\"version\"=\"1.0\"\\n\"Launched\"=\"1\"\\n\"PID\"=\"87799-442-0210567-79960\"\\n\"Path\"=\".\\\\\"\\n\"VersionType\"=\"RetailVersion\"\\n\"InstalledGroup\"=\"15\"\\n\"LangID\"=dword:00000009\\n\"OmitDriverCheck\"=dword:00000000\\n\"LocalDriverInfo\"=hex:4e,56,33,44,44,33,32,2e,44,4c,4c,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,34,2e,31,30,2e,30,2e,31,37,31,33,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,44,69,61,6d,6f,6e,64,20,56,69,70,65,72,20,\\\\n  56,33,33,30,20,28,4e,76,69,64,69,61,20,52,69,76,61,20,31,32,38,29,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,44,69,61,6d,\\\\n  6f,6e,64,20,56,69,70,65,72,20,56,33,33,30,20,28,4e,76,69,64,69,61,20,52,69,\\\\n  76,61,20,31,32,38,29,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,44,69,61,6d,6f,6e,64,20,4d,75,6c,74,69,6d,65,64,69,61,20,\\\\n  53,79,73,74,65,6d,73,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,08,6d,6d,33,64,66,78,33,32,2e,64,6c,6c,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,34,2e,31,\\\\n  30,2e,30,2e,31,35,39,38,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,33,44,66,78,20,56,6f,6f,64,6f,6f,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,33,44,66,78,20,56,6f,6f,\\\\n  64,6f,6f,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,33,44,66,78,20,49,6e,74,65,72,61,63,74,69,76,65,2c,20,49,6e,63,2e,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,08\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft]\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Microsoft Games]\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Microsoft Games\\Motocross Madness]\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Microsoft Games\\Motocross Madness\\1.0]\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Microsoft Games\\Motocross Madness\\1.0\\DriverInfo]\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Microsoft Games\\Motocross Madness\\1.0\\DriverInfo\\{00000000-0000-0000-0000-000000000000}]\\n\"Driver\"=\"NV3DD32.DLL\"\\n\"Version\"=\"4.10.0.1713\"\\n\"Description\"=\"Diamond Viper V330 (Nvidia Riva 128)\"\\n\"DeviceID\"=\"PCI\\\\VEN_12D2&DEV_0018&SUBSYS_10921092&REV_10\\\\000800\"\\n\"NumberOfModes\"=dword:00000025\\n\"Modes\"=hex:40,01,00,00,c8,00,00,00,08,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,40,01,00,00,f0,00,00,00,08,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,90,01,00,00,2c,01,00,00,08,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,e0,01,00,00,68,01,00,00,08,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,02,00,00,80,01,00,00,08,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,80,02,00,00,90,01,00,\\\\n  00,08,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,80,02,00,00,\\\\n  e0,01,00,00,08,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,20,\\\\n  03,00,00,58,02,00,00,08,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,c0,03,00,00,d0,02,00,00,08,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,04,00,00,00,03,00,00,08,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,80,04,00,00,60,03,00,00,08,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,05,00,00,00,04,00,00,08,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,40,06,00,00,b0,04,00,00,08,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,40,01,00,00,c8,00,00,00,\\\\n  10,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,40,01,00,00,f0,\\\\n  00,00,00,10,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,e0,fd,ff,01,90,01,\\\\n  00,00,2c,01,00,00,10,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,e0,fd,ff,\\\\n  01,e0,01,00,00,68,01,00,00,10,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,\\\\n  e0,fd,ff,01,00,02,00,00,80,01,00,00,10,00,00,00,00,00,00,00,01,00,00,00,00,\\\\n  00,00,00,e0,fd,ff,01,80,02,00,00,90,01,00,00,10,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,80,02,00,00,e0,01,00,00,10,00,00,00,00,00,00,\\\\n  00,01,00,00,00,00,00,00,00,e0,fd,ff,01,20,03,00,00,58,02,00,00,10,00,00,00,\\\\n  00,00,00,00,01,00,00,00,00,00,00,00,e0,fd,ff,01,c0,03,00,00,d0,02,00,00,10,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,04,00,00,00,03,\\\\n  00,00,10,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,80,04,00,\\\\n  00,60,03,00,00,10,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,05,00,00,00,04,00,00,10,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,40,06,00,00,b0,04,00,00,10,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,40,01,00,00,c8,00,00,00,20,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,40,01,00,00,f0,00,00,00,20,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,2c,01,00,00,20,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,e0,01,00,00,68,01,00,00,20,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,02,00,00,80,01,00,\\\\n  00,20,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,80,02,00,00,\\\\n  90,01,00,00,20,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,80,\\\\n  02,00,00,e0,01,00,00,20,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,20,03,00,00,58,02,00,00,20,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,c0,03,00,00,d0,02,00,00,20,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,04,00,00,00,03,00,00,20,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,80,04,00,00,60,03,00,00,20,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00\\n\"TextureSizes\"=hex:00,00,02,00,aa,aa,02,00,00,80,00,00,aa,aa,00,00,00,20,00,00,\\\\n  aa,2a,00,00,00,08,00,00,a0,0d,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\\\n  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Microsoft Games\\Motocross Madness\\1.0\\DriverInfo\\{3A0CFD01-9320-11CF-ACA1-00A02413C2E2}]\\n\"Driver\"=\"mm3dfx32.dll\"\\n\"Version\"=\"4.10.0.1598\"\\n\"Description\"=\"3Dfx Voodoo\"\\n\"DeviceID\"=\"PCI\\\\VEN_121A&DEV_0001&SUBSYS_00000000&REV_02\\\\BUS_00&DEV_0E&FUNC_00\"\\n\"NumberOfModes\"=dword:00000004\\n\"Modes\"=hex:00,02,00,00,80,01,00,00,10,00,00,00,00,00,00,00,01,00,00,00,01,00,\\\\n  00,00,00,00,40,00,80,02,00,00,90,01,00,00,10,00,00,00,00,00,00,00,00,00,00,\\\\n  00,01,00,00,00,00,00,00,00,80,02,00,00,e0,01,00,00,10,00,00,00,00,00,00,00,\\\\n  01,00,00,00,01,00,00,00,00,00,40,00,20,03,00,00,58,02,00,00,10,00,00,00,00,\\\\n  00,00,00,01,00,00,00,00,00,00,00,00,00,40,00\\n\"TextureSizes\"=hex:00,00,02,00,33,ab,02,00,00,80,00,00,33,ab,00,00,00,20,00,00,\\\\n  33,2b,00,00,00,08,00,00,33,0b,00,00,00,04,01,00,55,59,01,00,00,44,00,00,55,\\\\n  59,00,00,00,14,00,00,55,19,00,00,00,08,00,00,55,09,00,00\\n\\n\nver0=0\ncoord0=0\nflag0=136314882\nflagg0=1207959552\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Motocross Madness Trial.dxw",
    "content": "[target]\ntitle0=Motocross Madness Trial\npath0=D:\\Games\\Motocross Madness Trial\\mcm.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=169885728\nflagg0=134219776\nflagh0=20\nflagi0=2097156\ntflag0=6415\ninitx0=0\ninity0=0\nminx0=50\nminy0=50\nmaxx0=800\nmaxy0=600\nposx0=0\nposy0=0\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Motocross Madness.dxw",
    "content": "[target]\ntitle0=Motocross Madness\npath0=D:\\Games\\motocross madness\\mcm.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=169885728\nflagg0=134219776\nflagh0=20\nflagi0=2097156\nflagj0=0\nflagk0=0\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\n"
  },
  {
    "path": "build/exports/Mr. Driller.dxw",
    "content": "[target]\ntitle0=Mr. Driller\npath0=D:\\Games\\driller\\driller.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Myth III - The Wolf Age.dxw",
    "content": "[target]\ntitle0=Myth III - The Wolf Age\npath0=D:\\Games\\Myth III - The Wolf Age\\Myth3.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218272\nflagg0=1744830464\nflagh0=20\nflagi0=205520900\ntflag0=6147\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Myth the Fallen Lords.dxw",
    "content": "[target]\ntitle0=Myth the Fallen Lords\npath0=D:\\Games\\myth\\MYTH_TFL.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=2013265920\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/NASCAR 2000.dxw",
    "content": "[target]\ntitle0=NASCAR 2000\npath0=F:\\Games\\Nascar 2000\\NASCAR 2000.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673202210\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/NHL 2002.dxw",
    "content": "[target]\ntitle0=NHL 2002\npath0=D:\\Games\\NHL 2002\\nhl2002.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=7\ncoord0=0\nflag0=681574499\nflagg0=1476395008\nflagh0=528\nflagi0=136314884\nflagj0=1073746048\nflagk0=327680\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/NHL 99.dxw",
    "content": "[target]\ntitle0=NHL 99\npath0=D:\\Games\\NHL99_RIP\\nhl99.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=134234656\nflagg0=1207959808\nflagh0=20\nflagi0=138412036\nflagj0=1\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Nascar Pinball.dxw",
    "content": "[target]\ntitle0=Nascar Pinball\npath0=D:\\Games\\NASCAR Pinball\\Pinball.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Some glitches while moving cursor close to borders\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Nascar Racing 3 (3DFX).dxw",
    "content": "[target]\ntitle0=Nascar Racing 3 (3DFX)\npath0=D:\\Games\\Nascar Racing 3\\NASCAR Racing 3.exe\nmodule0=\nopengllib0=\nver0=9\ncoord0=0\nflag0=671105056\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=6162\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\n"
  },
  {
    "path": "build/exports/Nascar Racing 3.dxw",
    "content": "[target]\ntitle0=NASCAR Racing 3\npath0=G:\\Games\\Nascar Racing 3\\NASCAR Racing 3.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nstartfolder0=\nlaunchpath0=\nnotes0=\nregistry0=\nmonitorid0=-1\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ndflag0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Nebula Fighter.dxw",
    "content": "[target]\ntitle0=Nebula Fighter\npath0=D:\\Games\\Nebula Fighter\\Nebula Fighter.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=5248\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Need 4 Speed IV High Stakes.dxw",
    "content": "[target]\ntitle0=Need 4 Speed IV High Stakes\npath0=D:\\Games\\Need 4 Speed IV High Stakes\\nfshs.exe\nlaunchpath0=D:\\Games\\Need 4 Speed IV High Stakes\\nfshs.exe -PatchRestart\nmodule0=\nopengllib0=\nnotes0=\nregistry0=[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts\\Need For Speed High Stakes]\\n\"Version\"=\"4.00\"\\n\"InstallPath\"=\".\\\\\"\\n\"3D Device Description\"=\"Software Renderer\"\\n\"3D Card\"=\"[Direct 3D]\"\\n\"Thrash Driver\"=\"d3d\"\\n\"Group\"=\"D3D\"\\n\"D3D Device\"=dword:00000000\\n\"Triple Buffer\"=dword:00000000\\n\"Hardware Acceleration\"=dword:00000001\\n\"Thrash Resolution\"=\"1600x1200\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts\\Need For Speed High Stakes]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts\\Need For Speed High Stakes\\1.0]\\n\"Language\"=dword:00000001\\n\"Variant\"=dword:00000000\\n\"Night\"=dword:00000000\\n\"InstLev\"=dword:00000002\\n\"SrcDrive\"=\".\\\\\"\\n\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1476395008\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Need For Speed 3.dxw",
    "content": "[target]\ntitle0=Need For Speed 3\npath0=D:\\Games\\Need For Speed III\\NFS3.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=To install the game on x64 systems copy the following folders and files from\\nthe CD to a NFS3 directory on the hard drive:\\nFEDATA\\\\nGAMEDATA\\\\nd3da.dll\\neacsnd.dll\\nnfs3.exe\\nsofttria.dll\\n\\nThen copy paste the text below to notepad and save it to your NFS3 directory\\nas \"INSTALL.WIN\". (Remember to set file type to \"All Files\" when saving.)\\n\\nenglish\\nlocal\\n.\\GameData\\\\n.\\GameData\\Tracks\\\\n.\\GameData\\Tracks\\Tutor\\\\n.\\GameData\\CarModel\\\\n.\\GameData\\Render\\pc\\\\n.\\GameData\\DashHud\\\\n.\\GameData\\Audio\\pc\\\\n.\\GameData\\Audio\\SFX\\\\n.\\GameData\\Audio\\Speech\\English\\\\n.\\GameData\\Audio\\Speech\\German\\\\n.\\GameData\\Audio\\Speech\\French\\\\n.\\GameData\\Audio\\Speech\\Spanish\\\\n.\\GameData\\Audio\\Speech\\Italian\\\\n.\\FeData\\art\\\\n.\\FeData\\text\\\\n.\\FeData\\text\\\\n.\\FeData\\save\\\\n.\\FeData\\stats\\\\n.\\FeData\\config\\\\n.\\FeData\\audio\\\\n.\\FeData\\Art\\Slides\\\\n.\\FeData\\Art\\Track\\\\n.\\FeData\\Art\\Showcase\\\\n.\\FeData\\movies\\\\n.\\FeData\\stats\\prh\\\\n\nregistry0=[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts\\Need For Speed III]\\n\"3D Card\"=\"[Direct 3D]\"\\n\"Thrash Driver\"=\"d3d\"\\n\"Group\"=\"D3D\"\\n\"Hardware Acceleration\"=dword:00000001\\n\\n# These values set up NFS3 to run in Direct3D mode. If you want to run the\\n# game in software rendering mode turn off the Compat. tab option\\n# \"Emulate Registry\".\\n\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1744830464\nflagh0=1556\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Need For Speed SE.dxw",
    "content": "[target]\ntitle0=Need For Speed SE\npath0=C:\\NFSSE\\NFS.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Need For Speed Special Edition installation Notes:\\n(tested on Win7 64-bit)\\n\\nYou can install the game using DOSBOX. Just make sure that the \\nmounted CD drive in DOSBOX is using the same letter as your real CD\\DVD drive.\\ne.g. if your real CD/DVD drive letter is F:\\nuse \"mount f f:\\ -t cdrom -ioctl\"\\ninstead off \"mount d f:\\ -t cdrom -ioctl\"\\n(the game will not start if it can not find the correct CD drive letter that is \\nwritten to \"C:\\NFSSE\\GAMEDATA\\CONFIG\\PATHS.DAT\" by the installer)\\n\\nInstall using the Custom Install option and select all the checkboxes.\\n(otherwise the game may have framerate issues streaming files from the CD)\\n\\nCopy NFS_WIN.EXE and IFORCE.DLL from the CD to your C:\\NFSSE directory \\nand rename NFS_WIN.EXE to NFS.EXE.\\n\\nThen you need to copy dplayx.dll to the C:\\NFSSE directory from \\n\"C:\\Windows\\SysWOW64\\dplayx.dll\". Then rename this copy to dplay.dll.\\n\\nUsing Notepad make sure NFS.CFG reads:\\nYESSOUND VIDEO ENGLISH NOREMOTE \\n\\nThe game should then run with this .dxw setup.\\n\nregistry0=\nver0=0\ncoord0=1\nflag0=136331362\nflagg0=1543503872\nflagh0=532\nflagi0=138413060\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Need for Speed 5 Porsche Unleashed.dxw",
    "content": "[target]\ntitle0=Need for Speed 5 Porsche Unleashed\npath0=F:\\Games\\Need for Speed 5\\Porsche.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314922\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=32768\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\nscanline0=1\n"
  },
  {
    "path": "build/exports/Need for Speed Underground 2.dxw",
    "content": "[target]\ntitle0=Need for Speed Underground 2\npath0=D:\\Games\\Need for Speed Underground 2\\SPEED2.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=1081344\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Neophyte Koplio's Story.dxw",
    "content": "[target]\ntitle0=Neophyte Koplio's Story\npath0=D:\\Games\\Neophyte Koplio's Story\\KOPLIO.exe\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=134234146\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/NetStorm - Islands at War.dxw",
    "content": "[target]\ntitle0=NetStorm - Islands at War\npath0=D:\\Games\\NetStorm - Islands at War\\Netstorm.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=679608354\nflagg0=1209008384\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/New York Race.dxw",
    "content": "[target]\ntitle0=New York Race\npath0=D:\\Games\\New York Race\\NYR.exe\nmodule0=\nopengllib0=\nver0=8\ncoord0=0\nflag0=687867937\nflagg0=1207959568\nflagh0=65556\nflagi0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Nightmare Creatures demo (sw mode).dxw",
    "content": "[target]\ntitle0=Nightmare Creatures demo (sw mode)\npath0=D:\\Games\\nc_demo\\nc.exe\nstartfolder0=\nlaunchpath0=D:\\Games\\nc_demo\\nc.exe -pc\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=5248\nflagk0=65536\nflagl0=0\nflagm0=268435456\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Nightmare Creatures demo.dxw",
    "content": "[target]\ntitle0=Nightmare Creatures demo\npath0=f:\\Games\\nightmare creatures demo\\nc.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673194018\nflagg0=1207959616\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=301989888\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/No Respect (1.1).dxw",
    "content": "[target]\ntitle0=No Respect (1.1)\npath0=D:\\Games\\No Respect\\nr11.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=327680\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/No Respect.dxw",
    "content": "[target]\ntitle0=No Respect\npath0=D:\\Games\\No Respect\\NR.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=327680\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Nocturne.dxw",
    "content": "[target]\ntitle0=Nocturne\npath0=D:\\Games\\nocturne\\nocturne.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1476395008\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Nox (GOG).dxw",
    "content": "[target]\ntitle0=Nox (GOG)\npath0=D:\\Games\\Nox GOG\\Game.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Nox (RIP).dxw",
    "content": "[target]\ntitle0=Nox (RIP)\npath0=D:\\Games\\Nox RIP\\GAME.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=2\nflag0=681574434\nflagg0=1207959568\nflagh0=20\nflagi0=138412036\nflagj0=5248\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Nuclear Strike (3dfx).dxw",
    "content": "[target]\ntitle0=Nuclear Strike (3dfx)\npath0=D:\\Games\\nuclear_strike\\NUKEPC.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Use glide wrapper on D3D9\nver0=9\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=1073741824\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/O.D.T. Escape Or Die Trying  (SW 640X480).dxw",
    "content": "[target]\ntitle0=O.D.T. Escape Or Die Trying  (SW 640X480)\npath0=F:\\Games\\ODT\\ODT.exe\nstartfolder0=\nlaunchpath0=F:\\Games\\ODT\\ODT.exe 640 480 FALSE DISPLAY (SW)\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=0\ncoord0=0\nflag0=134217826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=128\nflagk0=0\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/O.D.T. Escape Or Die Trying (HW 640X480).dxw",
    "content": "[target]\ntitle0=O.D.T. Escape Or Die Trying (HW 640X480)\npath0=F:\\Games\\ODT\\ODT.exe\nstartfolder0=\nlaunchpath0=F:\\Games\\ODT\\ODT.exe 640 480 TRUE DISPLAY (HW)\nmodule0=\nopengllib0=\nnotes0=\nregistry0=&G\u0002\nver0=0\nmonitorid0=0\ncoord0=0\nflag0=134217826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=128\nflagk0=0\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/O.D.T. Escape Or Die Trying.dxw",
    "content": "[target]\ntitle0=O.D.T. Escape Or Die Trying\npath0=D:\\Games\\ODT\\ODT.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=1207959650\nflagg0=1207959552\nflagh0=20\nflagi0=205520900\ntflag0=6147\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/O.R.B. Offword Rescue Base.dxw",
    "content": "[target]\ntitle0=O.R.B. Offword Rescue Base\npath0=D:\\Games\\O.R.B\\orb.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Of Light and Darkness.dxw",
    "content": "[target]\ntitle0=Of Light and Darkness\npath0=D:\\Games\\Of Light and Darkness\\3di.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234150\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Ominous Horizons.dxw",
    "content": "[target]\ntitle0=Ominous Horizons\npath0=D:\\Games\\Ominous_Horizons\\bin\\ominous.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=9\ncoord0=0\nflag0=134218272\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/One Must Fall - Battlegrounds.dxw",
    "content": "[target]\ntitle0=One Must Fall - Battlegrounds\npath0=D:\\Games\\One Must Fall - Battlegrounds\\Engine\\OMFBG.exe\nlaunchpath0=\nmodule0=core_module.dll\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314915\nflagg0=1275068416\nflagh0=20\nflagi0=138412036\nflagj0=4736\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Open Ice 2 on 2 Challenge.dxw",
    "content": "[target]\ntitle0=Open Ice 2 on 2 Challenge\npath0=D:\\Games\\OPENICE\\OPENICE.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=512\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Outcast 1999 CD Retail release.dxw",
    "content": "[target]\ntitle0=Outcast 1999 CD Retail release\npath0=C:\\Outcast\\oc\\Oc3.exe\nlaunchpath0=C:\\Outcast\\Outcast.exe\nmodule0=\nopengllib0=\nnotes0=This .dxw setup is meant for the Outcast 1999 CD Retail release of the game.\\nIt is not tested with the DVD release or later versions / unofficial patches.\\n\\nThe official Patch 3 is recommended since without it the game may not start\\nwith the message \"Wrong Disc inserted\".\\n\\n\\nThe slow rice paddy movement and Twon-Ha riding bug and Lighthouse jump bug\\nare caused by the game running too fast on modern cpu's. This is fixed with the \\noptions in the Dxwnd Timing tab.\\n\\nAdditionaly Dxwnd needs to be run with admin rights or the game won't start.\\n\nregistry0=\nver0=0\ncoord0=1\nflag0=136314926\nflagg0=1207963664\nflagh0=20\nflagi0=138412036\nflagj0=5248\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=60\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Outcast.dxw",
    "content": "[target]\ntitle0=Outcast\npath0=D:\\Games\\Outcast\\oc\\Oc3.exe\nlaunchpath0=D:\\Games\\Outcast\\oc\\loader.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=153092128\nflagg0=1209008128\nflagh0=20\nflagi0=205520900\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Outlaws.dxw",
    "content": "[target]\ntitle0=Outlaws\npath0=D:\\Games\\Outlaws\\OUTLAWS.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671105058\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Outwars.dxw",
    "content": "[target]\ntitle0=Outwars\npath0=D:\\Games\\OUTWARS\\outwars.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=671088678\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/PBA Bowling 2 Demo.dxw",
    "content": "[target]\ntitle0=PBA Bowling 2 Demo\npath0=D:\\Games\\PBA Bowling 2 Demo\\BowlingR.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=673185858\nflagg0=1207959552\nflagh0=20\nflagi0=205520900\nflagj0=4232\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nstartfolder0=\nmonitorid0=-1\nflagl0=0\nflagm0=0\ndflag0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/PC Ciclismo 2001 (HAL).dxw",
    "content": "[target]\ntitle0=PC Ciclismo 2001\npath0=D:\\Games\\PC Ciclismo 2001\\PcCiclismo.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=1207959840\nflagg0=1207959552\nflagh0=98324\nflagi0=4\ntflag0=6211\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/PC Ciclismo 2001 (through RGB sw emulation).dxw",
    "content": "[target]\ntitle0=PC Ciclismo 2001\npath0=D:\\Games\\PC Ciclismo 2001\\PcCiclismo.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=1207959586\nflagg0=1207959552\nflagh0=98324\nflagi0=4\ntflag0=6211\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/POD Gold (D3D).dxw",
    "content": "[target]\ntitle0=POD Gold (D3D)\npath0=E:\\PODD3DX.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217760\nflagg0=1744830592\nflagh0=20\nflagi0=138543108\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Paladin 3 RIP.dxw",
    "content": "[target]\ntitle0=Paladin 3 RIP\npath0=D:\\Games\\QGPAL3\\rungame.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=205520900\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Pandemonium 2 (GLIDE).dxw",
    "content": "[target]\ntitle0=Pandemonium 2 (GLIDE)\npath0=D:\\Games\\Pandemonium 2\\pandy.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Panzer Commander.dxw",
    "content": "[target]\ntitle0=Panzer Commander\npath0=D:\\Games\\Panzer_Commander\\Panzer.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=136314978\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Panzer Dragoon.dxw",
    "content": "[target]\ntitle0=Panzer Dragoon\npath0=D:\\Games\\Panzer Dragoon\\game\\PANZERDG.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=681574435\nflagg0=1744830464\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=4224\nflagk0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Panzer General 3 Scorched Earth.dxw",
    "content": "[target]\ntitle0=Panzer General 3 Scorched Earth\npath0=D:\\Games\\Panzer_General_3\\PG3.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671088674\nflagg0=1207975936\nflagh0=2097172\nflagi0=138412036\nflagj0=8320\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagk0=65536\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Panzer General 3D Assault (GOG).dxw",
    "content": "[target]\ntitle0=Panzer General 3D Assault (GOG)\npath0=D:\\Games\\Panzer General 3D (GOG)\\PG3.exe\nlaunchpath0=D:\\Games\\Panzer General 3D (GOG)\\Launcher.exe\nmodule0=PG3Draw\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=679477282\nflagg0=1207959568\nflagh0=65556\nflagi0=71303172\nflagj0=128\nflagk0=4096\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Panzer General 3D Assault.dxw",
    "content": "[target]\ntitle0=Panzer General 3D Assault\npath0=D:\\Games\\Panzer General 3D\\PG3.icd\nmodule0=PG3Draw\nopengllib0=\nver0=0\ncoord0=0\nflag0=679477282\nflagg0=1207959568\nflagh0=65556\nflagi0=4194308\ntflag0=-2147477245\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=D:\\Games\\Panzer General 3D\\PG3.EXE\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Paradise Cracked.dxw",
    "content": "[target]\ntitle0=Paradise Cracked\npath0=D:\\Games\\Paradise Cracked\\game.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=2\nflagm0=0\nflagn0=0\nflago0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n[stamp]\nversion=2.04.21.a4\ntime=Sun Mar 19 00:31:00 2017\n\n"
  },
  {
    "path": "build/exports/Patrician III.dxw",
    "content": "[target]\ntitle0=Patrician III\npath0=D:\\Games\\Patrician III - Impero dei Mari\\Patrician3.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1744830464\nflagh0=20\nflagi0=136314886\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Pax Corpus.dxw",
    "content": "[target]\ntitle0=Pax Corpus\npath0=D:\\Games\\Pax Corpus\\Pax.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=1\nflag0=673185826\nflagg0=1275068416\nflagh0=20\nflagi0=138412036\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Phantasmagoria 2.dxw",
    "content": "[target]\ntitle0=Phantasmagoria 2\npath0=D:\\Games\\Phantasmagoria 2\\SIERRAW.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Planet of the Apes.dxw",
    "content": "[target]\ntitle0=Planet of the Apes\npath0=D:\\Games\\Planet of the Apes\\pota.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=203423794\nflagg0=1207959552\nflagh0=524308\nflagi0=138936320\nflagj0=67113088\nflagk0=-1878982656\nflagl0=1048576\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nmonitorid0=0\nflagn0=0\nflago0=0\nscanline0=1\ninitresw0=0\ninitresh0=0\n[stamp]\nversion=2.04.20\ntime=Thu Mar 16 13:13:41 2017\n\n\n"
  },
  {
    "path": "build/exports/Populous 3 (GOG - D3D).dxw",
    "content": "[target]\ntitle0=Populous 3 (GOG - D3D)\npath0=D:\\Games\\Populous 3 (GOG)\\D3DPopTB.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671105062\nflagg0=1207959568\nflagh0=65556\nflagi0=4194308\ntflag0=6146\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Populous 3 (GOG).dxw",
    "content": "[target]\ntitle0=Populous 3 (GOG)\npath0=D:\\Games\\Populous 3 (GOG)\\popTB.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671105062\nflagg0=1207959568\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Port Royale 2.dxw",
    "content": "[target]\ntitle0=Port Royale 2\npath0=D:\\Games\\Port Royale 2\\PR2.exe\nmodule0=\nopengllib0=\nver0=8\ncoord0=0\nflag0=671096866\nflagg0=1207959552\nflagh0=65556\nflagi0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Portugal 1111.dxw",
    "content": "[target]\ntitle0=Portugal 1111\npath0=D:\\Games\\Portugal 1111\\Port1111.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=7\ncoord0=0\nflag0=136331314\nflagg0=1207961600\nflagh0=20\nflagi0=-2009071612\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Post Mortem (CD version).dxw",
    "content": "[target]\ntitle0=Post Mortem (CD version)\npath0=D:\\Games\\Post Mortem\\Game.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Note:\\n\\nThe CD version is copy protected and needs a crack to run properly\\n\\ndepending on the platform (OS? / video card?) the game may require the \\n\"No primary SYSTEMMEMORY\" flag in order to run. \\nUnfortunately, in that case it is likely to become very choppy.\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673341475\nflagg0=1241513984\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=67108880\nflagm0=0\nflagn0=0\nflago0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n[stamp]\nversion=2.04.21.a6\ntime=Wed Mar 22 15:25:29 2017\n\n"
  },
  {
    "path": "build/exports/Postal.dxw",
    "content": "[target]\ntitle0=Postal\npath0=D:\\Games\\Postal\\POSTAL.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=1\ncoord0=3\nflag0=536887330\nflagg0=1249902592\nflagh0=2097168\nflagi0=138413060\nflagj0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Powerslide.dxw",
    "content": "[target]\ntitle0=Powerslide\npath0=D:\\Games\\Powerslide\\powerslide.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=679477282\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Praetorians.dxw",
    "content": "[target]\ntitle0=Praetorians\npath0=D:\\Games\\Praetorians\\Praetorians.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4194304\ntflag0=259\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Premier Manager 98.dxw",
    "content": "[target]\ntitle0=Premier Manager 98\npath0=D:\\Games\\Premier Manager 98\\MANAGER.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671088674\nflagg0=1207959552\nflagh0=16\nflagi0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Prey.dxw",
    "content": "[target]\ntitle0=Prey\npath0=D:\\Games\\Prey\\prey.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1208090624\nflagh0=20\nflagi0=4\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Primitive Wars.dxw",
    "content": "[target]\ntitle0=Primitive Wars\npath0=D:\\Games\\Primitive Wars\\Pw.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=402653218\nflagg0=1207959552\nflagh0=20\nflagi0=0\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Prince of Persia - Warrior Within (GOG).dxw",
    "content": "[target]\ntitle0=Prince of Persia - Warrior Within (GOG)\npath0=D:\\Games\\Prince of Persia - Warrior Within\\pop2.exe\nlaunchpath0=D:\\Games\\Prince of Persia - Warrior Within\\PrinceOfPersia.exe\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=9\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412038\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Prince of Persia 3D Demo.dxw",
    "content": "[target]\ntitle0=Prince of Persia 3D Demo\npath0=D:\\Games\\Prince of Persia 3D Demo\\PoP3DDemo.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136331298\nflagg0=1207959552\nflagh0=20\nflagi0=136314885\nflagj0=4224\nflagk0=0\ntflag0=-2147477245\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Prince of Persia 3D.dxw",
    "content": "[target]\ntitle0=Prince of Persia 3D\npath0=D:\\Games\\Prince_of_Persia_3D\\POP3D.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=671105058\nflagg0=1209008128\nflagh0=20\nflagi0=136314885\nflagj0=128\nflagk0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Prince of Persia The Two Thrones (GOG).dxw",
    "content": "[target]\ntitle0=Prince of Persia The Two Thrones (GOG)\npath0=D:\\Games\\Prince of Persia The Two Thrones\\pop3.exe\nstartfolder0=\nlaunchpath0=D:\\Games\\Prince of Persia The Two Thrones\\PrinceOfPersia.exe\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=9\nmonitorid0=-1\ncoord0=0\nflag0=673202214\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=67108880\nflagm0=0\nflagn0=0\nflago0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n[stamp]\nversion=2.04.21.a4\ntime=Sun Mar 19 11:59:24 2017\n\n"
  },
  {
    "path": "build/exports/Prison Tycoon.dxw",
    "content": "[target]\ntitle0=Prison Tycoon\npath0=D:\\Games\\Prison.Tycoon\\Prison Tycoon.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=9\ncoord0=0\nflag0=134234656\nflagg0=1207959808\nflagh0=48\nflagi0=138412036\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Prisoner of War.dxw",
    "content": "[target]\ntitle0=Prisoner of War\npath0=D:\\Games\\Prisoner of War\\Colditz.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=cracked exe\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=1114112\nflagl0=0\nflagm0=0\nflagn0=0\nflago0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n[stamp]\nversion=2.04.21.a2\ntime=Fri Mar 17 00:17:24 2017\n\n"
  },
  {
    "path": "build/exports/Project Eden.dxw",
    "content": "[target]\ntitle0=Project Eden\npath0=D:\\Games\\Project Eden\\Eden.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217763\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Project IGI.dxw",
    "content": "[target]\ntitle0=Project IGI\npath0=D:\\Games\\Project IGI\\PC\\IGI.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671105060\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nwinver0=0\nmaxres0=0\n"
  },
  {
    "path": "build/exports/Psychoballs.dxw",
    "content": "[target]\ntitle0=Psychoballs\npath0=D:\\Games\\Psychoballs\\PsychoBalls.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Puma World Football.dxw",
    "content": "[target]\ntitle0=Puma World Football\npath0=D:\\Games\\pumawf98\\WF.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207963648\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=16\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Puyo Puyo Sun.dxw",
    "content": "[target]\ntitle0=Puyo Puyo Sun\npath0=D:\\Games\\Puyo Puyo Sun\\puyo3.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=80\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Puzzle Agent Nelson Tethers.dxw",
    "content": "[target]\ntitle0=Puzzle Agent Nelson Tethers\npath0=D:\\Games\\Puzzle Agent\\Grickle101.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Quake (OpenGL 3DFX).dxw",
    "content": "[target]\ntitle0=Quake (OpenGL 3DFX)\npath0=D:\\Games\\Quake\\GLQUAKE.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=9\ncoord0=0\nflag0=134234656\nflagg0=1208090624\nflagh0=20\nflagi0=138412036\nflagj0=1\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Quake (win).dxw",
    "content": "[target]\ntitle0=Quake (win)\npath0=D:\\Games\\Quake\\WINQUAKE.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=129\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nregistry0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Queen of Heart 98.dxw",
    "content": "[target]\ntitle0=Queen of Heart 98\npath0=D:\\Games\\qoh98\\Qoh98.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=1\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nregistry0=\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/RHEM.dxw",
    "content": "[target]\ntitle0=RHEM\npath0=F:\\RhemE\\RhemE\\RHEM.noshim.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=205520900\nflagj0=4224\nflagk0=98304\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=640\nsizy0=480\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Railroad Tycoon II.dxw",
    "content": "[target]\ntitle0=Railroad Tycoon II\npath0=D:\\Games\\Railroad.Tycoon.II\\RT2.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134219810\nflagg0=1209008128\nflagh0=16\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nwinver0=0\nmaxres0=0\nnotes0=\nregistry0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Rapanui.dxw",
    "content": "[target]\ntitle0=Rapanui\npath0=D:\\Games\\Rapanui\\Rapanui.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218272\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Rayman 2 (GOG).dxw",
    "content": "[target]\ntitle0=Rayman 2 (GOG)\npath0=D:\\Games\\GOG.com\\Rayman 2\\Rayman2.exe\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=402653235\nflagg0=1208025104\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=128\nflagk0=268500992\nwinver0=0\nmaxres0=0\nswapeffect0=0\nstartfolder0=\nmonitorid0=0\nflagl0=0\nflagm0=0\ndflag0=0\nmaxddinterface0=7\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/Rayman 2 Demo.dxw",
    "content": "[target]\ntitle0=Rayman 2 Demo\npath0=D:\\Games\\Rayman2Demo\\Rayman2Demo.exe\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=402653219\nflagg0=1208025088\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=128\nflagk0=65536\nwinver0=0\nmaxres0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Re-Volt.dxw",
    "content": "[target]\ntitle0=Re-Volt\npath0=D:\\Games\\Re-Volt\\REVOLT.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217760\nflagg0=1208025088\nflagh0=20\nflagi0=12\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Reah.dxw",
    "content": "[target]\ntitle0=Reah\npath0=D:\\Games\\Reah\\Reah.exe\nlaunchpath0=F:\\Autorun.exe\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=-1465778141\nflagg0=1209010176\nflagh0=20\nflagi0=138412036\nflagj0=1073746048\nflagk0=98304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Real War Air Land Sea.dxw",
    "content": "[target]\ntitle0=Real War Air Land Sea\npath0=D:\\Games\\Real War\\REALWAR.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Reap, the.dxw",
    "content": "[target]\ntitle0=Reap, the\npath0=D:\\Games\\theReap\\thereap.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1744830464\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Recoil.dxw",
    "content": "[target]\ntitle0=Recoil\npath0=D:\\Games\\Recoil\\Recoil.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217760\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Requiem Avenging Angel (D3D).dxw",
    "content": "[target]\ntitle0=Requiem Avenging Angel (D3D)\npath0=D:\\Games\\Requiem Avenging Angel\\D3D.by Matt.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=-1468006366\nflagg0=1207959552\nflagh0=1044\nflagi0=1212153860\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nflagj0=128\nnotes0=\nregistry0=# Requiem Avenging Angel: DirectX version patch\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Wow6432Node\\Microsoft\\DirectX]\\n\"Version\"=\"4.07.00.0704\"\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\DirectX]\\n\"Version\"=\"4.07.00.0704\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\DirectX]\\n\"Version\"=\"4.07.00.0704\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\DirectX]\\n\"Version\"=\"4.07.00.0704\"\\n\nflagk0=67174400\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Requiem Avenging Angel (software).dxw",
    "content": "[target]\ntitle0=Requiem Avenging Angel (software)\npath0=D:\\Games\\Requiem Avenging Angel\\Software.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=-1199570906\nflagg0=1207959552\nflagh0=1044\nflagi0=1212153860\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nregistry0=# Requiem Avenging Angel: DirectX version patch\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Wow6432Node\\Microsoft\\DirectX]\\n\"Version\"=\"4.07.00.0704\"\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\DirectX]\\n\"Version\"=\"4.07.00.0704\"\\n\nflagj0=128\nflagk0=67174400\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Resident Evil (sw mode).dxw",
    "content": "[target]\ntitle0=Resident Evil (sw mode)\npath0=D:\\Games\\resevil\\residentevil.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217826\nflagg0=1744830592\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nregistry0=\nflagk0=65536\nflagl0=0\nflagm0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Restricted Area.dxw",
    "content": "[target]\ntitle0=Restricted Area\npath0=D:\\Games\\Restricted Area\\Ra.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574440\nflagg0=1744830464\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Return Fire 2 (OpenGL).dxw",
    "content": "[target]\ntitle0=Return Fire 2 (OpenGL)\npath0=F:\\Games\\Return Fire 2\\RFireII.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=HKEY_CURRENT_USER\\Software\\Prolific]\\n\\n[HKEY_CURRENT_USER\\Software\\Prolific\\RFireII]\\n\\n[HKEY_CURRENT_USER\\Software\\Prolific\\RFireII\\1.0]\\n;\"GfxDLL\"=\"SC_3dfx\"\\n\"GfxDLL\"=\"SC_OGL\"\\n;\"GfxDLL\"=\"36D_S3D\"\\n\"ID\"=\"{E6E7C9E0-41B2-11D2-9C0B-006097B4D5BF}\"\\n\"NAME1\"=\"JOHN\"\\n\"name2\"=\"\"\\n\"name3\"=\"\"\\n\"name4\"=\"\"\\n\"LASTRFIREIIGAME\"=\"JOHN.UI\"\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Prolific Publishing, Inc.]\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Prolific Publishing, Inc.\\Return Fire II]\\n\"Path\"=\".\\\\\"\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Prolific Publishing, Inc.\\Return Fire II\\1.00.000]\\n\\n\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=681574434\nflagg0=1208090624\nflagh0=3093\nflagi0=1212153860\nflagj0=4224\nflagk0=327680\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Return Fire 2 (SW).dxw",
    "content": "[target]\ntitle0=Return Fire 2 (SW)\npath0=F:\\Games\\Return Fire 2\\RFireII.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=HKEY_CURRENT_USER\\Software\\Prolific]\\n\\n[HKEY_CURRENT_USER\\Software\\Prolific\\RFireII]\\n\\n[HKEY_CURRENT_USER\\Software\\Prolific\\RFireII\\1.0]\\n;\"GfxDLL\"=\"SC_3dfx\"\\n\"GfxDLL\"=\"SC_OGL\"\\n;\"GfxDLL\"=\"36D_S3D\"\\n\"ID\"=\"{E6E7C9E0-41B2-11D2-9C0B-006097B4D5BF}\"\\n\"NAME1\"=\"JOHN\"\\n\"name2\"=\"\"\\n\"name3\"=\"\"\\n\"name4\"=\"\"\\n\"LASTRFIREIIGAME\"=\"JOHN.UI\"\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Prolific Publishing, Inc.]\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Prolific Publishing, Inc.\\Return Fire II]\\n\"Path\"=\".\\\\\"\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Prolific Publishing, Inc.\\Return Fire II\\1.00.000]\\n\\n\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\nflagk0=327680\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Return to Castle Wolfenstein.dxw",
    "content": "[target]\ntitle0=Return to Castle Wolfenstein\npath0=D:\\Games\\Return to Castle Wolfenstein\\WolfSP.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=673194498\nflagg0=1208090624\nflagh0=65556\nflagi0=138412038\nflagj0=4224\nflagk0=-2147418112\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\n"
  },
  {
    "path": "build/exports/Rift Space.dxw",
    "content": "[target]\ntitle0=Rift Space\npath0=D:\\Games\\RiftSpace\\RiftSpace.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=671105062\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Risk II (Hasbro).dxw",
    "content": "[target]\ntitle0=Risk II (Hasbro)\npath0=D:\\Games\\Risk 2\\RISKII.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Rites of War Demo.dxw",
    "content": "[target]\ntitle0=Rites of War Demo\npath0=D:\\Games\\Rites of War Demo\\RoWDemo.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234656\nflagg0=1207959680\nflagh0=20\nflagi0=4\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Road Rash.dxw",
    "content": "[target]\ntitle0=Road Rash\npath0=D:\\Games\\roadrash\\ROADRASH.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217770\nflagg0=1744830464\nflagh0=1040\nflagi0=1212153860\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nflagk0=0\nswapeffect0=0\nregistry0=[HKEY_LOCAL_MACHINE\\SOFTWARE]\\n\\n; Road Rash\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts\\RoadRash 95]\\n\"\"=\"\"\\n\"Path\"=\".\"\\n\"CheckDialup\"=hex:00\\n\"ChatState\"=hex:02\\n\"MiniDash\"=hex:00\\n\"OpponentList\"=hex:01\\n\nflagl0=0\nflagm0=0\ndflag0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Robin Hood - The Legend of Sherwood (GOG).dxw",
    "content": "[target]\ntitle0=Robin Hood - The Legend of Sherwood (GOG)\npath0=D:\\Games\\Robin Hood - The Legend of Sherwood (GOG)\\Robin Hood\\Game.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1744830464\nflagh0=20\nflagi0=138543108\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/RoboRumble (dx5).dxw",
    "content": "[target]\ntitle0=RoboRumble (dx5)\npath0=F:\\Games\\RoboRumble\\DATA\\rr_dx5.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Metropolis]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Metropolis\\RoboRumble]\\n\"Directory\"=\".\\\\\"\\n\\n\nver0=1\nmonitorid0=-1\ncoord0=0\nflag0=681574442\nflagg0=1208221696\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/RoboRumble (sw).dxw",
    "content": "[target]\ntitle0=RoboRumble (sw)\npath0=F:\\Games\\RoboRumble\\DATA\\rr_soft.exe\nstartfolder0=\nlaunchpath0=F:\\Games\\RoboRumble\\rrumble.exe\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Metropolis]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Metropolis\\RoboRumble]\\n\"Directory\"=\".\\\\\"\\n\\n\nver0=1\nmonitorid0=-1\ncoord0=0\nflag0=681574442\nflagg0=1207959552\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Robocop 2D 2.dxw",
    "content": "[target]\ntitle0=Robocop 2D 2\npath0=D:\\Games\\Robocop2D2\\Robocop2D2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=It seems necessary to click on the small white client area in the tiny window \\nin the upper left corner of the desktop to bring everything to normality!\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Robocop 2D.dxw",
    "content": "[target]\ntitle0=Robocop 2D\npath0=D:\\Games\\Robocop2Dv1_2\\Robocop2Dv1_2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=It seems necessary to click on the small white client area in the tiny window \\nin the upper left corner of the desktop to bring everything to normality!\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=65556\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Robocop.dxw",
    "content": "[target]\ntitle0=Robocop\npath0=D:\\Games\\Robocop\\Robocop.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Rollcage (3DFX).dxw",
    "content": "[target]\ntitle0=Rollcage (3DFX)\npath0=D:\\Games\\Rollcage\\Glide\\ROLLCAGE.EXE\nlaunchpath0=D:\\Games\\Rollcage\\RollCage.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=150994976\nflagg0=1207959552\nflagh0=20\nflagi0=136314884\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Rollcage (D3D).dxw",
    "content": "[target]\ntitle0=Rollcage (D3D)\npath0=D:\\Games\\Rollcage\\Direct3D\\Rollcage.exe\nlaunchpath0=D:\\Games\\Rollcage\\RollCage.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=136314884\ntflag0=6147\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Rollcage 2 (D3D).dxw",
    "content": "[target]\ntitle0=Rollcage 2 (D3D)\npath0=D:\\Games\\Rollcage 2\\BIN\\Rollcage D3D.exe\nlaunchpath0=D:\\Games\\Rollcage 2\\Rollcage.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/RollerCoaster Tycoon 2 demo.dxw",
    "content": "[target]\ntitle0=RollerCoaster Tycoon 2 demo\npath0=D:\\Games\\RollerCoaster Tycoon 2 demo\\rct2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=1\ncoord0=0\nflag0=671088674\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=128\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/RollerCoaster Tycoon 2.dxw",
    "content": "[target]\ntitle0=RollerCoaster Tycoon 2\npath0=D:\\Games\\Rollercoaster Tycoon 2\\Rct2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671089184\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/RollerCoaster Tycoon 3.dxw",
    "content": "[target]\ntitle0=RollerCoaster Tycoon 3\npath0=D:\\Games\\RollerCoaster Tycoon 3\\RCT3.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671089184\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/RollerCoaster Tycoon Deluxe.dxw",
    "content": "[target]\ntitle0=RollerCoaster Tycoon Deluxe\npath0=D:\\Games\\rollercoaster tycoon deluxe\\rct.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=671088674\nflagg0=1241514000\nflagh0=65552\nflagi0=138413060\nflagj0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=640\nsizy0=480\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/RollerCoaster Tycoon.dxw",
    "content": "[target]\ntitle0=RollerCoaster Tycoon\npath0=D:\\Games\\rollercoaster tycoon\\rct.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=671088674\nflagg0=1207959552\nflagh0=2097172\nflagi0=138412036\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Runaway.dxw",
    "content": "[target]\ntitle0=Runaway\npath0=D:\\Games\\MVM 2004 - Runaway\\Runaway.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136331296\nflagg0=1207959552\nflagh0=262164\nflagi0=138412038\nflagj0=266368\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Rune War.dxw",
    "content": "[target]\ntitle0=Rune War\npath0=D:\\Games\\RuneWar\\RUNEWAR.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218272\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Rune.dxw",
    "content": "[target]\ntitle0=Rune\npath0=D:\\Games\\Rune\\System\\Rune.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=402669601\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=6211\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/SPWaW 2016.dxw",
    "content": "[target]\ntitle0=SPWaW 2016\npath0=D:\\Games\\The Depot\\SPWaW 2016\\mech.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=1\nflag0=49186\nflagg0=1207992338\nflagh0=532\nflagi0=18907136\nflagj0=1152\nflagk0=0\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=1340\nsizy0=1000\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/STCC Swedish TouringCar Championship.dxw",
    "content": "[target]\ntitle0=STCC Swedish TouringCar Championship\npath0=D:\\Games\\STCC\\STCC.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Still slow and choppy in emulation mode\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4256\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Scrapland.dxw",
    "content": "[target]\ntitle0=Scrapland\npath0=D:\\Games\\Scrapland\\Bin\\Scrap.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Settlers 3, the.dxw",
    "content": "[target]\ntitle0=Settlers 3, the\npath0=D:\\Games\\Settlers3\\S3.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=-1476394974\nflagg0=1207959618\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nflagj0=128\nnotes0=\nregistry0=\nflagk0=0\nflagl0=0\nflagm0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Settlers 4, the, with NVIDIA or VirtualBox.dxw",
    "content": "; by  Adrian Kalla, Oct. 18th 2015\n[target]\ntitle0=Settlers 4, the, with NVIDIA or VirtualBox\npath0=C:\\GOG Games\\The Settlers IV GOLD\\Exe\\S4_Main.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=1\nflag0=212926496\nflagg0=1073776771\nflagh0=33554516\nflagi0=136314884\nflagj0=1082135680\nflagk0=262144\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=1280\nsizy0=1024\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Shadow Watch.dxw",
    "content": "[target]\ntitle0=Shadow Watch\npath0=D:\\Games\\Shadow Watch\\sw.exe\nlaunchpath0=D:\\Games\\Shadow Watch\\ShadowWatch.exe\nmodule0=dx.dll\nopengllib0=\nver0=0\ncoord0=0\nflag0=-2013265869\nflagg0=1241513984\nflagh0=4202512\nflagi0=203423748\nflagj0=128\ntflag0=0\ninitx0=200\ninity0=290\nminx0=0\nminy0=0\nmaxx0=800\nmaxy0=600\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nstartfolder0=\nnotes0=\nregistry0=\nmonitorid0=0\nflagk0=65536\nflagl0=0\nflagm0=0\nflagn0=0\nflago0=0\ndflag0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n[stamp]\nversion=2.04.21.a1\ntime=Wed Mar 15 00:06:35 2017\n\n"
  },
  {
    "path": "build/exports/Sheep Dog'n Wolf.dxw",
    "content": "[target]\ntitle0=Sheep Dog'n Wolf\npath0=D:\\Games\\Sheep & Wolf\\SheepD3D.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Sherlock Holmes - Mistery of the Mummy (steam).dxw",
    "content": "[target]\ntitle0=Sherlock Holmes - Mystery of the Mummy (steam)\npath0=D:\\Games\\Sherlock Holmes - Mystery of the Mummy\\game.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1073741824\nflagh0=65556\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Sherlock Holmes The Mystery of The Mummy demo.dxw",
    "content": "[target]\ntitle0=Sherlock Holmes The Mystery of The Mummy demo\npath0=D:\\Games\\Sherlock Holmes demo\\Sherlock Holmes- Level-1- Hall\\game.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=673202210\nflagg0=1208221696\nflagh0=8212\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nstartfolder0=\nregistry0=\nmonitorid0=0\nflagl0=0\nflagm0=5\ndflag0=0\nmaxddinterface0=7\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/ShipWreckers demo.dxw",
    "content": "[target]\ntitle0=ShipWreckers demo\npath0=F:\\Games\\ShipWreckers demo\\SW.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=1048576\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Shogo Mobile Armor Division.dxw",
    "content": "[target]\ntitle0=Shogo Mobile Armor Division\npath0=D:\\Games\\Shogo\\Client.exe\nlaunchpath0=D:\\Games\\Shogo\\Shogo.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=151011328\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Sid Meier's Alpha Centauri (GOG).dxw",
    "content": "[target]\ntitle0=Sid Meier's Alpha Centauri (GOG)\npath0=D:\\Games\\Sid Meier's Alpha Centauri\\terran.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1744830464\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Sid Meier's Civilization III Complete.dxw",
    "content": "[target]\ntitle0=Sid Meier's Civilization III Complete\npath0=D:\\Games\\Sid Meier's Civilization III Complete\\Conquests\\Civ3Conquests.exe\nmodule0=jgl\nopengllib0=\nver0=0\ncoord0=0\nflag0=973352994\nflagg0=136462360\nflagh0=2162708\nflagi0=4100\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=6\nwinver0=0\nmaxres0=5\n"
  },
  {
    "path": "build/exports/Sid Meiers SimGolf CLASS.dxw",
    "content": "[target]\ntitle0=Sid Meiers SimGolf CLASS\npath0=D:\\Games\\Sid.Meiers.SimGolf-CLASS\\golf.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=402653218\nflagg0=1745879040\nflagh0=65556\nflagi0=0\ntflag0=3\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Sid Meyer's Gettysburg Demo.dxw",
    "content": "[target]\ntitle0=Sid Meyer's Gettysburg Demo\npath0=D:\\Games\\Sid Meyer's Gettysburg Demo\\lee.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=67113088\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Silent Hill 2 Director's Cut.dxw",
    "content": "[target]\ntitle0=Silent Hill 2 Director's Cut\npath0=D:\\Games\\Silent Hill 2\\sh2pc.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136315394\nflagg0=1207959552\nflagh0=20\nflagi0=155189252\nflagj0=4224\nflagk0=268500992\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Silent Hunter III.dxw",
    "content": "[target]\ntitle0=Silent Hunter III\npath0=D:\\Games\\Ubisoft\\SilentHunterIII\\SH3.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=679493666\nflagg0=1757413392\nflagh0=33554452\nflagi0=673185796\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=3\nmaxres0=3\n"
  },
  {
    "path": "build/exports/Silver.dxw",
    "content": "[target]\ntitle0=Silver\npath0=D:\\Games\\Silver\\silver.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=137363494\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/SimCity 3000.dxw",
    "content": "[target]\ntitle0=SimCity 3000\npath0=D:\\Games\\SimCity 3000\\Game\\Sc3.exe\nlaunchpath0=\nmodule0=SIMCITY.DLL\nopengllib0=\nver0=1\ncoord0=0\nflag0=1746935842\nflagg0=1811939328\nflagh0=131092\nflagi0=136314884\nflagj0=8320\ntflag0=6403\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Slam Tilt.dxw",
    "content": "[target]\ntitle0=Slam Tilt\npath0=D:\\Games\\SlamTilt\\slamtilt.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671088674\nflagg0=1207959554\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Slave Zero.dxw",
    "content": "[target]\ntitle0=Slave Zero\npath0=D:\\Games\\Slave Zero\\SlaveZero.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671105120\nflagg0=1207959552\nflagh0=20\nflagi0=2097156\ntflag0=6210\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Snowboard Racer.dxw",
    "content": "[target]\ntitle0=Snowboard Racer\npath0=D:\\Games\\Snowboard Racer\\snowboard\\SnowBoard.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=33554452\nflagi0=138412036\nflagj0=4224\nflagk0=256\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Snowmobile Racing.dxw",
    "content": "[target]\ntitle0=Snowmobile Racing\npath0=D:\\Games\\Snowmobile Racing\\snow.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Space Hulk.dxw",
    "content": "[target]\ntitle0=Space Hulk\npath0=D:\\Games\\Space Hulk\\HULKDATA\\BIN\\HULKW95.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Beware: this game requirestheat the executable HULKW95.EXE, \\nlocated in the HULKDATA\\BIN subfolder, is run from the root directory.\\nTo do so, it is necessary to create a task shortcut and ru the game from there,\\nrunning the game from DxWnd is not working.\nregistry0=\nver0=0\ncoord0=0\nflag0=140509218\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=5248\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Space Rangers.dxw",
    "content": "[target]\ntitle0=Space Rangers\npath0=D:\\Games\\Space Rangers\\Rangers.exe\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=134234146\nflagg0=1207959552\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=8\nwinver0=0\nmaxres0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Spearhead.dxw",
    "content": "[target]\ntitle0=Spearhead\npath0=D:\\Games\\Spearhead\\Spearhead.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=744488994\nflagg0=1216348288\nflagh0=8212\nflagi0=138412036\nflagj0=4224\nflagk0=1114112\nflagl0=32784\nflagm0=64\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=640\ninitresh0=480\n"
  },
  {
    "path": "build/exports/SpellForce GOLD Edition.dxw",
    "content": "[target]\ntitle0=SpellForce GOLD Edition\npath0=D:\\Games\\SpellForce\\SpellForce.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=9\ncoord0=0\nflag0=134218272\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Spike the Hedgehog.dxw",
    "content": "[target]\ntitle0=Spike the Hedgehog\npath0=D:\\Games\\Spike\\spike2.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=268435456\nflagm0=0\nflagn0=0\nflago0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n[stamp]\nversion=2.04.21.a4\ntime=Sat Mar 18 15:50:14 2017\n\n"
  },
  {
    "path": "build/exports/Spirit Warrior.dxw",
    "content": "[target]\ntitle0=Spirit Warrior\npath0=D:\\Games\\spirit\\SPIRIT.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1744830464\nflagh0=1044\nflagi0=1212153862\nflagj0=4224\ntflag0=513\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Sports Car GT Demo.dxw",
    "content": "[target]\ntitle0=Sports Car GT Demo\npath0=D:\\Games\\Sports Car GT Demo\\Spcar.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136331298\nflagg0=1207959552\nflagh0=20\nflagi0=136445956\nflagj0=2101376\nflagk0=65536\nflagl0=0\nflagm0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Sports Car GT.dxw",
    "content": "[target]\ntitle0=Sports Car GT\npath0=D:\\Games\\Sports Car GT\\Spcar.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1207959552\nflagh0=20\nflagi0=138543108\nflagj0=20608\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/St. Row the Third (DX11).dxw",
    "content": "[target]\ntitle0=St. Row the Third (DX11)\npath0=D:\\Games\\St. Row the Third\\Saints Row The Third\\saintsrowthethird_dx11.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=11\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138416132\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=4\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/St. Row the Third (DX9).dxw",
    "content": "[target]\ntitle0=St. Row the Third (DX9)\npath0=D:\\Games\\St. Row the Third\\Saints Row The Third\\SaintsRowTheThird.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=9\ncoord0=0\nflag0=136314914\nflagg0=1744830464\nflagh0=20\nflagi0=136314884\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=1024\nsizy0=768\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Stahlfabrik.dxw",
    "content": "[target]\ntitle0=Stahlfabrik\npath0=D:\\Games\\Stahl\\Stahl.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Star Defender 1.dxw",
    "content": "[target]\ntitle0=Star Defender 1\npath0=D:\\Games\\Star Defender 123Special\\sd1\\StarDefender.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=1\ncoord0=0\nflag0=136314922\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=329728\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Star Defender 2.dxw",
    "content": "[target]\ntitle0=Star Defender 2\npath0=D:\\Games\\Star Defender 123Special\\sd2\\game.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=8\ncoord0=0\nflag0=136315434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=329728\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Star Trek Armada.dxw",
    "content": "[target]\ntitle0=Star Trek Armada\npath0=D:\\Games\\Star Trek Armada\\Armada.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Side effect (to be known):\\nDo not notify on task switch: inhibits the game cursor\nregistry0=\nver0=0\ncoord0=0\nflag0=-1474297822\nflagg0=1476395008\nflagh0=8208\nflagi0=138412036\nflagj0=128\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nstartfolder0=\nmonitorid0=0\nflagl0=0\nflagm0=536870912\ndflag0=0\nmaxddinterface0=7\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/Star Trek Birth of the Federation.dxw",
    "content": "[target]\ntitle0=Star Trek Birth of the Federation\npath0=D:\\Games\\Star Trek Birth of the Federation\\trek.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=9\ncoord0=0\nflag0=136331298\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Star Trek Generations.dxw",
    "content": "[target]\ntitle0=Star Trek Generations\npath0=D:\\Games\\stgen\\sgens.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=[HKEY_LOCAL_MACHINE\\SOFTWARE\\MicroProse]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\MicroProse\\Star Trek Generations]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\MicroProse\\Star Trek Generations\\1.0]\\n\"Path\"=\"D:\\\\GAMES\\\\STGEN\"\\n\"CDPath\"=\"F:\\\\GENS\"\\n\"InstallSet\"=\"MED\"\\n\nver0=1\ncoord0=0\nflag0=136314978\nflagg0=1744830464\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Star Trek Hidden Evil.dxw",
    "content": "[target]\ntitle0=Star Trek Hidden Evil\npath0=D:\\Games\\Star Trek Hidden Evil\\Bin\\HiddenEvil.cracked.exe\nlaunchpath0=\nmodule0=Render.dll\nopengllib0=\nnotes0=\nregistry0=\nver0=7\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=16\nflagi0=138412036\nflagj0=4224\nflagk0=65540\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Star Trek Klingon Academy.dxw",
    "content": "[target]\ntitle0=Star Trek Klingon Academy\npath0=D:\\Games\\Klingon Academy\\ka.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=-2011168718\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=800\nmaxy0=600\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Star Trek Starfleet Command.dxw",
    "content": "[target]\ntitle0=Star Trek Starfleet Command\npath0=D:\\Games\\Star Trek Starfleet Command\\StarFleet.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1209008128\nflagh0=20\nflagi0=138412036\nflagj0=67113088\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Star Wars Episode I Racer (emulated).dxw",
    "content": "[target]\ntitle0=Star Wars Episode I Racer (emulated)\npath0=D:\\Games\\Star Wars Episode 1 racer\\SWEP1RCR.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=679493671\nflagg0=1210056720\nflagh0=20\nflagi0=2097172\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nnotes0=\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Star Wars Episode I Racer.dxw",
    "content": "[target]\ntitle0=Star Wars Episode I Racer\npath0=D:\\Games\\Star Wars Episode 1 racer\\SWEP1RCR.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=679493671\nflagg0=1207959568\nflagh0=20\nflagi0=2097172\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nswapeffect0=0\nregistry0=\nflagl0=0\nflagm0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Star Wars Jedi Knight II (multiplayer).dxw",
    "content": "[target]\ntitle0=Star Wars Jedi Knight II (multiplayer)\npath0=D:\\Games\\Star Wars Jedi Knight II\\GameData\\jk2mp.exe\nstartfolder0=\nlaunchpath0=D:\\Games\\Star Wars Jedi Knight II\\JediOutcast.exe\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=706740258\nflagg0=1208091136\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=268435456\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Star Wars Jedi Knight II (singleplayer).dxw",
    "content": "[target]\ntitle0=Star Wars Jedi Knight II (singleplayer)\npath0=D:\\Games\\Star Wars Jedi Knight II\\GameData\\jk2sp.exe\nstartfolder0=\nlaunchpath0=D:\\Games\\Star Wars Jedi Knight II\\JediOutcast.exe\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=706740258\nflagg0=1208091136\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=268435456\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Star Wars Phantom Menace.dxw",
    "content": "[target]\ntitle0=Star Wars Phantom Menace\npath0=D:\\Games\\Star Wars Phantom Menace\\WMAIN.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=939524131\nflagg0=1207959552\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Star Wars Rogue Squadron 3D.dxw",
    "content": "[target]\ntitle0=Star Wars Rogue Squadron 3D\npath0=D:\\Games\\rogue\\Rogue Squadron.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314918\nflagg0=1207959552\nflagh0=20\nflagi0=138412038\nflagj0=4224\nflagk0=134283264\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Star Wars Shadow of the Empire (DEMO).dxw",
    "content": "[target]\ntitle0=Star Wars Shadow of the Empire (DEMO)\npath0=D:\\Games\\shadowsdemo\\shadows.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1208483844\nflagh0=25165844\nflagi0=4194304\ntflag0=275\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Star Wars Shadow of the Empire.dxw",
    "content": "[target]\ntitle0=Star Wars Shadow of the Empire\npath0=D:\\Games\\Star Wars Shadow of the Empire\\game\\SDATA\\SHADOWS.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1476919296\nflagh0=25166364\nflagi0=0\ntflag0=274\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Star Wars Tie Fighter (virtual joystick).dxw",
    "content": "[target]\ntitle0=Star Wars Tie Fighter (virtual joystick)\npath0=D:\\Games\\TIE95\\TIE95.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=0\ncoord0=0\nflag0=134217846\nflagg0=1207959568\nflagh0=16\nflagi0=4261892\nflagj0=0\nflagk0=402655232\nflagl0=1081344\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=6\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/Star Wars Tie Fighter.dxw",
    "content": "[target]\ntitle0=Star Wars Tie Fighter\npath0=D:\\Games\\TIE95\\TIE95.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217843\nflagg0=1207959568\nflagh0=20\nflagi0=4261892\ntflag0=6466\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=6\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Star Wars X-Wing Alliance (GOG).dxw",
    "content": "[target]\ntitle0=Star Wars X-Wing Alliance (GOG)\npath0=D:\\Games\\Star Wars - X-Wing Alliance (GOG)\\XWINGALLIANCE.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314930\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=1476722688\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=800\nmaxy0=600\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Star Wars X-Wing Alliance.dxw",
    "content": "[target]\ntitle0=Star Wars X-Wing Alliance\npath0=D:\\Games\\Star Wars X-Wing Alliance\\XWINGALLIANCE.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314930\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=1074794624\nflagk0=402980864\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=800\nmaxy0=600\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Star Wars X-Wing vs. Tie-Fighter (GOG).dxw",
    "content": "[target]\ntitle0=Star Wars X-Wing vs. Tie-Fighter (GOG)\npath0=D:\\Games\\Star Wars - XvT\\Z_XVT__.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314930\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=67113088\nflagk0=939589632\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=800\nmaxy0=600\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/StarCraft.dxw",
    "content": "[target]\ntitle0=StarCraft\npath0=D:\\Games\\Starcraft\\StarCraft.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nwinver0=0\nmaxres0=0\nregistry0=\nflagk0=65536\nflagl0=0\nflagm0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Starfleet Academy (d3d).dxw",
    "content": "[target]\ntitle0=Starfleet Academy (d3d)\npath0=D:\\Games\\SFA\\SFAD3D.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412038\nflagj0=4224\ntflag0=536870912\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Starfleet Academy (sw).dxw",
    "content": "[target]\ntitle0=Starfleet Academy (sw)\npath0=D:\\Games\\SFA\\SFA.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=134217734\nflagj0=4224\ntflag0=536870912\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Starsiege - Tribes.dxw",
    "content": "[target]\ntitle0=Starsiege - Tribes\npath0=D:\\Games\\Starsiege - Tribes\\Tribes.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=681574442\nflagg0=1209403392\nflagh0=8212\nflagi0=138412036\nflagj0=-2147479424\nflagk0=33619968\nflagl0=67141648\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/State of Emergency.dxw",
    "content": "[target]\ntitle0=State of Emergency\npath0=D:\\Games\\State of Emergency\\KaosPC.exe\nmodule0=\nopengllib0=\nver0=8\ncoord0=0\nflag0=671088676\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=7315\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/State of War Warmonger.dxw",
    "content": "[target]\ntitle0=State of War Warmonger\npath0=D:\\Games\\State of War Warmonger\\State of War - Warmonger.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234210\nflagg0=134217728\nflagh0=532\nflagi0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Steel Saviour demo (T-Zwei).dxw",
    "content": "[target]\ntitle0=Steel Saviour demo (T-Zwei)\npath0=D:\\Games\\T-Zwei\\TZwei.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=8\ncoord0=0\nflag0=136314914\nflagg0=1744961536\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Steel Saviour.dxw",
    "content": "[target]\ntitle0=Steel Saviour\npath0=D:\\Games\\Steel Saviour\\SteelSaviour.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=8\ncoord0=0\nflag0=136314922\nflagg0=1744961536\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Still Life (GOG).dxw",
    "content": "[target]\ntitle0=Still Life (GOG)\npath0=D:\\Games\\Still Life (GOG)\\StillLife.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671105058\nflagg0=1207959568\nflagh0=20\nflagi0=4\ntflag0=1088\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Stratego.dxw",
    "content": "[target]\ntitle0=Stratego\npath0=D:\\Games\\Stratego\\Stratego.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1209008128\nflagh0=131092\nflagi0=4\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Street Fighters Zero.dxw",
    "content": "[target]\ntitle0=Street Fighters Zero\npath0=D:\\Games\\sfzero\\relbin\\ZERO_A95.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1744830464\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nflagk0=65536\nswapeffect0=0\nregistry0=\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\CAPCOM]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\CAPCOM\\STREETFIGHTERZERO]\\n\"\"=\"..\\\\bin\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\CAPCOM\\STREETFIGHTERZERO\\1.0]\\n\n"
  },
  {
    "path": "build/exports/Street Wars.dxw",
    "content": "[target]\ntitle0=Street Wars\npath0=D:\\Games\\Street_Wars\\Sw.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217734\nflagj0=4224\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Streets of Sim City (2000 re-release, 3DFX).dxw",
    "content": "[target]\ntitle0=Streets of Sim City\npath0=D:\\Games\\Streets of Sim City\\STREETS.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=671088674\nflagg0=1224736768\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=6403\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Strength & Honour.dxw",
    "content": "[target]\ntitle0=Strength & Honour\npath0=D:\\Program Files (x86)\\Magitech\\SNH\\Strength & Honour.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1744961536\nflagh0=65554\nflagi0=138412036\nflagj0=528576\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=0\nsizy0=0\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Stronghold Crusader HD.dxw",
    "content": "[target]\ntitle0=Stronghold Crusader HD\npath0=d:\\Games\\Stronghold Crusader.exe\nlaunchpath0=d:\\Games\\Stronghold Crusader.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=3\nflag0=134218400\nflagg0=1275068432\nflagh0=1048596\nflagi0=136314884\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=1280\nsizy0=1024\nmaxfps0=0\ninitts0=0\nwinver0=1\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Stronghold Crusader.dxw",
    "content": "[target]\ntitle0=Stronghold Crusader\npath0=F:\\Games\\Stronghold Crusader\\Stronghold Crusader.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185830\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Sub Command.dxw",
    "content": "[target]\ntitle0=Sub Command\npath0=D:\\Games\\Sub Command\\subcommand.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=8\ncoord0=0\nflag0=1610613345\nflagg0=1207959552\nflagh0=20\nflagi0=37748740\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=1200\nsizy0=900\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/SubCulture (3DFX).dxw",
    "content": "[target]\ntitle0=SubCulture (3DFX)\npath0=D:\\Games\\subcult\\SC3DFX.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=671088674\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=512\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/SubCulture (D3D).dxw",
    "content": "[target]\ntitle0=SubCulture (D3D)\npath0=D:\\Games\\subcult\\SCD3D.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=671088690\nflagg0=1207959552\nflagh0=20\nflagi0=138416132\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=800\nmaxy0=600\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=4\n"
  },
  {
    "path": "build/exports/SubCulture (sw).dxw",
    "content": "[target]\ntitle0=SubCulture (sw)\npath0=D:\\Games\\subcult\\SC.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=671088674\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Subspace the Captain's Chair.dxw",
    "content": "[target]\ntitle0=Subspace the Captain's Chair\npath0=D:\\Games\\SUBTCC\\Subspace.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Summoner, the.dxw",
    "content": "[target]\ntitle0=Summoner, the\npath0=D:\\Games\\Summoner\\Sum.exe\nlaunchpath0=D:\\Games\\Summoner\\Summoner.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nflagj0=128\n"
  },
  {
    "path": "build/exports/Super Puzzle Fighter 2 Turbo.dxw",
    "content": "[target]\ntitle0=Super Puzzle Fighter 2 Turbo\npath0=D:\\Games\\Super Puzzle Fighter 2 Turbo (1997)\\W_Spf2x.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=[HKEY_LOCAL_MACHINE\\SOFTWARE\\Capcom]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Capcom\\w_spf2x]\\n\"SAVEDIR\"=\".\\\\\"\\n\"SC_MODE\"=\"SCREEN_MODE_640*480_8BIT_DIRECTX\"\\n\"CD_ROM\"=\".\\\\\"\\n\"SETUPCEHCK\"=\"SETUP_ALL_OK\"\\n\"NET_USER\"=\"\"\\n\\n\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=1044\nflagi0=1212153860\nflagj0=5248\nflagk0=67584\nflagl0=32768\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Super Real Mahjong P7.dxw",
    "content": "[target]\ntitle0=Super Real Mahjong P7\npath0=D:\\Games\\Super Real Mahjong P7\\P7\\p7.exe\nlaunchpath0=D:\\Games\\Super Real Mahjong P7\\P7\\p7.exe -f\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=5248\nflagk0=67436544\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/SuperBike 2000.dxw",
    "content": "[target]\ntitle0=SuperBike 2000\npath0=F:\\Games\\SBK2000\\SBK2000.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=N.b.\\nCD rom in\\nHKEY_LOCAL_MACHINE/SOFTWARE/EA SPORTS/Superbike 2000/CD\\nor \\nHKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/EA SPORTS/Superbike 2000/CD\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673202210\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=524288\nflagm0=1312\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/SuperChix'76 (demo).dxw",
    "content": "[target]\ntitle0=SuperChix'76 (demo)\npath0=*\\HotChix2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=203423778\nflagg0=1207959552\nflagh0=532\nflagi0=138412036\nflagj0=134221952\nflagk0=65536\nflagl0=8\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=4\n"
  },
  {
    "path": "build/exports/Swat 3 (GOG).dxw",
    "content": "[target]\ntitle0=Swat 3 (GOG)\npath0=D:\\Games\\SWAT 3 (GOG)\\game\\swat.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Swat 3.dxw",
    "content": "[target]\ntitle0=Swat 3\npath0=D:\\Games\\SWAT3\\SWAT.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1209008128\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Syberia 2.dxw",
    "content": "[target]\ntitle0=Syberia 2\npath0=D:\\Games\\Syberia 2\\Syberia2.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234147\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=0\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Syberia.dxw",
    "content": "[target]\ntitle0=Syberia\npath0=D:\\Games\\Syberia\\Syberia.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=1610694675\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=300\ninity0=300\nminx0=0\nminy0=0\nmaxx0=800\nmaxy0=600\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=4096\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/TOCA Touring Car Championship.dxw",
    "content": "[target]\ntitle0=TOCA Touring Car Championship\npath0=F:\\Games\\tourcar\\tourcars.exe\nstartfolder0=\nlaunchpath0=F:\\Games\\tourcar\\setup.exe\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Codemasters]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Codemasters\\Touring Car]\\n\"GameDirectory\"=\"F:\\\\Games\\\\tourcar\\\\\"\\n\"CD_Drive\"=\".\"\\n\"Install_Drive\"=\"F:\"\\n\"CardHintIndex\"=dword:00000000\\n\"ShowRunInfo\"=dword:00000000\\n\"S3RunInfo\"=dword:00000000\\n\\n\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185834\nflagg0=1207959552\nflagh0=528\nflagi0=138412032\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Tails Gear.dxw",
    "content": "[target]\ntitle0=Tails Gear\npath0=D:\\Games\\TailsGear078\\DT_MAIN.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217760\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Taito Legends 2.dxw",
    "content": "[target]\ntitle0=Taito Legends 2\npath0=D:\\Games\\Taito Legends 2\\Taito.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=205520900\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Take no Prisoners.dxw",
    "content": "[target]\ntitle0=Take no Prisoners\npath0=D:\\Games\\Take no Prisoners\\TNP.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1476395140\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nwinver0=0\nmaxres0=0\nregistry0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Talis Gear.dxw",
    "content": "[target]\ntitle0=Talis Gear\npath0=D:\\Games\\TailsGear078\\DT_MAIN.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Tanktics.dxw",
    "content": "[target]\ntitle0=Tanktics\npath0=D:\\Games\\tanktics\\tanktics.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=748683298\nflagg0=1744830464\nflagh0=20\nflagi0=-2008543232\nflagj0=4224\nflagk0=65536\nflagl0=513\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=-9550\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=3\nswapeffect0=0\nmaxddinterface0=6\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Tarzan Action Game.dxw",
    "content": "[target]\ntitle0=Tarzan Action Game\npath0=D:\\Games\\TARZAN\\tarzan.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671219747\nflagg0=1207959552\nflagh0=20\nflagi0=138413060\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Taz Wanted.dxw",
    "content": "[target]\ntitle0=Taz Wanted\npath0=D:\\Games\\Taz Wanted\\Taz.exe\nlaunchpath0=D:\\Games\\Taz Wanted\\TazLauncher.exe\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=8\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nstartfolder0=\nmonitorid0=0\nflagn0=0\nflago0=0\nscanline0=1\ninitresw0=0\ninitresh0=0\n[stamp]\nversion=2.04.21.a6\ntime=Tue Mar 21 19:49:05 2017\n\n"
  },
  {
    "path": "build/exports/Tenka.dxw",
    "content": "[target]\ntitle0=Tenka\npath0=D:\\Games\\tenka\\tenka.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\ntflag0=512\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Tetris Worlds.dxw",
    "content": "[target]\ntitle0=Tetris Worlds\npath0=D:\\Games\\Tetris Worlds\\TetrisWorlds.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=134217762\nflagg0=1207959556\nflagh0=16\nflagi0=136314884\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=4\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=128\nflagk0=16\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/The Creed (SW DEMO).dxw",
    "content": "[target]\ntitle0=The Creed (SW DEMO)\npath0=D:\\Games\\The Creed (SW DEMO)\\DemoCreed.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=201330816\nflagk0=98304\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/The Creed.dxw",
    "content": "[target]\ntitle0=The Creed\npath0=D:\\Games\\The Creed\\Creed.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\\n[HKEY_CLASSES_ROOT\\The Creed]\\n\"Scene16\"=\".\\\\data\\\\scene16.cus\"\\n\"InstallType\"=\"MAXIMUM\"\\n\"InstallDir\"=\".\"\\n\"Password\"=\"CREED\"\\n\"LockCode\"=dword:04fcf000\\n\"Version\"=dword:00000096\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Insomnia Entertainment]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Insomnia Entertainment\\The Creed]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Insomnia Entertainment\\The Creed\\1.00.000]\\n\nver0=0\ncoord0=0\nflag0=136314994\nflagg0=1207959680\nflagh0=1044\nflagi0=1212153860\nflagj0=201347200\nflagk0=2195456\nflagl0=65536\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/The Hobbit(TM) Demo.dxw",
    "content": "[target]\ntitle0=The Hobbit(TM) Demo\npath0=D:\\Games\\The Hobbit(TM) Demo\\MeridianDemo.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=8\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/The Hobbit(TM).dxw",
    "content": "[target]\ntitle0=The Hobbit(tm)\npath0=d:\\Games\\The Hobbit(TM)\\Meridian.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=1 - If you want to set screen mode other than the default included (800x600) \\nyou should run the game without the hook, set the preferred screenmode in-game, \\nthen change it in DxDwnd before else you'll reset back to the initial mode set.\\n\\n2 - To get the game working it took some checking/unchecking for a bit. \\nAll that's needed is to activated \"Fix Parent Window\" which this game seems \\nto use the invisible window for it's execution (per DxWnd manual even though \\nexperimental... it works) and set the direct x version to 8.\nver0=8\ncoord0=0\nflag0=704643110\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/The Hulk Demo.dxw",
    "content": "[target]\ntitle0=The Hulk Demo\npath0=D:\\Games\\The Hulk Demo\\hulk_demo.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=8\ncoord0=0\nflag0=679493670\nflagg0=1209008128\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=-2147477241\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/The Mummy.dxw",
    "content": "[target]\ntitle0=The Mummy\npath0=D:\\Games\\The Mummy\\MummyPC.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/The Sting!.dxw",
    "content": "[target]\ntitle0=The Sting!\npath0=D:\\Games\\The Sting!\\Sting.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1476395008\nflagh0=16\nflagi0=138412036\nflagj0=4224\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nstartfolder0=\nregistry0=\nmonitorid0=0\nflagl0=0\nflagm0=0\ndflag0=0\nmaxddinterface0=7\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\nflagn0=0\nflago0=0\n[stamp]\nversion=2.04.21.a2\ntime=Thu Mar 16 09:25:20 2017\n\n\n"
  },
  {
    "path": "build/exports/The Thing.dxw",
    "content": "[target]\ntitle0=The Thing\npath0=D:\\Games\\The Thing\\bin\\thething.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=65556\nflagi0=138412036\nflagj0=4224\nflagk0=1310720\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=1200\nsizy0=900\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/The Watchmaker.dxw",
    "content": "[target]\ntitle0=The Watchmaker\npath0=D:\\Games\\The Watchmaker\\Wm.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/The Westerner.dxw",
    "content": "[target]\ntitle0=The Westerner\npath0=D:\\Games\\The Westerner\\PICTuRE.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136315426\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=268500992\nflagl0=0\nflagm0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/The Wonderful End of the World (Steam demo).dxw",
    "content": "[target]\ntitle0=The Wonderful End of the World (Steam demo)\npath0=D:\\Program Files (x86)\\Steam\\SteamApps\\common\\The Wonderful End of the World Demo\\main.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681714210\nflagg0=1209008144\nflagh0=20\nflagi0=136314884\nflagj0=4224\nflagk0=268500992\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=1\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/The Wonderful End of the World.dxw",
    "content": "[target]\ntitle0=The Wonderful End of the World\npath0=D:\\Games\\The Wonderful End of the World\\game.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681714210\nflagg0=1209008144\nflagh0=20\nflagi0=136314884\nflagj0=4224\nflagk0=268500992\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=1\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Theme Hospital.dxw",
    "content": "[target]\ntitle0=Theme Hospital\npath0=D:\\Games\\Theme Hospital\\HOSPITAL_win.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134283780\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagj0=128\n"
  },
  {
    "path": "build/exports/Theme Park World.dxw",
    "content": "[target]\ntitle0=Theme Park World\npath0=D:\\Games\\Theme Park World\\tp.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=681590839\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Theocracy.dxw",
    "content": "[target]\ntitle0=Theocracy\npath0=D:\\Games\\Theocracy\\Theocracy\\theocracy-0.6.85.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=1\nmonitorid0=-1\ncoord0=0\nflag0=681574438\nflagg0=1207959552\nflagh0=20\nflagi0=138936320\nflagj0=128\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Theseus.dxw",
    "content": "[target]\ntitle0=Theseus\npath0=D:\\Games\\theseus\\Theseus.exe\nmodule0=\nopengllib0=\nver0=8\ncoord0=0\nflag0=134217730\nflagg0=1207959552\nflagh0=20\nflagi0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Thief the Dark Project GOLD (GOG).dxw",
    "content": "[target]\ntitle0=Thief the Dark Project GOLD (GOG)\npath0=D:\\Games\\Thief Gold (GOG)\\THIEF.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=2\nflagg0=1207959568\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\n"
  },
  {
    "path": "build/exports/Thief the Dark Project GOLD.dxw",
    "content": "[target]\ntitle0=Thief the Dark Project GOLD\npath0=D:\\Games\\Thief Gold\\THIEF.EXE\nmodule0=\nopengllib0=\nver0=7\ncoord0=0\nflag0=18\nflagg0=1514143760\nflagh0=131612\nflagi0=4194308\ntflag0=9\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=1\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\n"
  },
  {
    "path": "build/exports/Thorgal.dxw",
    "content": "[target]\ntitle0=Thorgal\npath0=D:\\Games\\Thorgal\\THORGAL.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=136314915\nflagg0=1242038528\nflagh0=65552\nflagi0=136314885\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagk0=2048\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/TieFighter 95.dxw",
    "content": "[target]\ntitle0=TieFighter 95\npath0=D:\\Games\\TIE95\\TIE95.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=The game can be played also with no joystick using the DxWnd virtual one.\\nIf you have a real joystick, the \"Use DLL injection\" flag is not necessary.\\nUse \"Unlock Z order\" to avoid losing control of the window.\nregistry0=\nver0=1\ncoord0=0\nflag0=681574514\nflagg0=1744830464\nflagh0=20\nflagi0=138412036\nflagj0=1073746048\nflagk0=136642560\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=800\nmaxy0=600\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Tiger Woods PGA TOUR 08 Demo.dxw",
    "content": "[target]\ntitle0=Tiger Woods PGA TOUR 08 Demo\npath0=D:\\Games\\Tiger Woods PGA TOUR 08 Demo\\bin\\TW2008Demo.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1476395008\nflagh0=65556\nflagi0=138412036\nflagj0=4224\ntflag0=6403\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Titanic.dxw",
    "content": "[target]\ntitle0=Titanic\npath0=F:\\Games\\Titanic\\TI.noshim.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=-1474297814\nflagg0=1745879072\nflagh0=540692\nflagi0=138412036\nflagj0=4224\nflagk0=67584\nflagl0=269484032\nflagm0=9216\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Tlon - a misty story.dxw",
    "content": "[target]\ntitle0=Tlon - a misty story\npath0=D:\\Games\\Tlon\\Tlon.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=67113088\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Tomb Raider - Anniversary Demo.dxw",
    "content": "[target]\ntitle0=Tomb Raider - Anniversary Demo\npath0=D:\\Games\\Tomb Raider - Anniversary Demo\\tra.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4232\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Tomb Raider - Underworld.dxw",
    "content": "[target]\ntitle0=Tomb Raider - Underworld\npath0=D:\\Games\\Tomb Raider - Underworld\\tru.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=-1468006366\nflagg0=1207959552\nflagh0=65556\nflagi0=205520900\nflagj0=0\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=800\nmaxy0=600\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Tomb Raider III (HW acceleration).dxw",
    "content": "[target]\ntitle0=Tomb Raider III (HW acceleration)\npath0=D:\\Games\\Tomb Raider III\\tomb3.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1241513984\nflagh0=25165844\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nstartfolder0=\nlaunchpath0=\nnotes0=\nregistry0=\nmonitorid0=0\nflagj0=128\nflagk0=65536\nflagl0=0\nflagm0=0\ndflag0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n\n; remember to set HW accelerated mode and turn ZBUFFER option off in game setup panel\n"
  },
  {
    "path": "build/exports/Tomb Raider III (SW emulation).dxw",
    "content": "[target]\ntitle0=Tomb Raider III (SW emulation)\npath0=D:\\Games\\Tomb Raider III\\tomb3.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1241513984\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=0\nwinver0=0\nmaxres0=0\n\n; remember to set SW emulated mode in game setup panel\n"
  },
  {
    "path": "build/exports/Tomb Raider III.dxw",
    "content": "[target]\ntitle0=Tomb Raider III\npath0=D:\\Games\\Tomb Raider III\\tomb3.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Working either with or without flip emulation\\nDeinterlace movies increases the movie quality\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1241513984\nflagh0=20\nflagi0=4194304\nflagj0=268435584\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nstartfolder0=\nregistry0=\nmonitorid0=0\nflagl0=0\nflagm0=0\ndflag0=0\nmaxddinterface0=7\nslowratio0=1\nscanline0=1\ninitresw0=0\ninitresh0=0\n"
  },
  {
    "path": "build/exports/Tomb Raider Underworld.dxw",
    "content": "[target]\ntitle0=Tomb Raider - Underworld\npath0=D:\\Games\\Tomb Raider - Underworld\\tru.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=1\nflag0=142606848\nflagg0=1207959808\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=800\nmaxy0=600\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Tone Rebellion Leviathan.dxw",
    "content": "[target]\ntitle0=Tone Rebellion Leviathan\npath0=D:\\Games\\Tone Rebellion Leviatahn\\FLOAT.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=-2011168734\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nstartfolder0=\nmonitorid0=0\nflagn0=0\nflago0=0\nscanline0=1\ninitresw0=0\ninitresh0=0\n[stamp]\nversion=2.04.21.a6\ntime=Wed Mar 22 10:13:22 2017\n\n"
  },
  {
    "path": "build/exports/Tonic Trouble.dxw",
    "content": "[target]\ntitle0=Tonic Trouble\npath0=F:\\Games\\Tonic Trouble\\TonicTrouble.exe\nstartfolder0=\nlaunchpath0=F:\\Games\\Tonic Trouble\\TonicTrouble.exe -cdrom:I\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185830\nflagg0=1207959552\nflagh0=65556\nflagi0=138412068\nflagj0=4224\nflagk0=65536\nflagl0=536870912\nflagm0=131108\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Tony Hawk's Pro Skater 3.dxw",
    "content": "[target]\ntitle0=Tony Hawk's Pro Skater 3\npath0=F:\\Games\\Tony Hawk's Pro Skater 3\\Skate3.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Total Annihilation Kingdoms.dxw",
    "content": "[target]\ntitle0=Total Annihilation Kingdoms\npath0=D:\\Games\\Total Annihilation Kingdoms\\Kingdoms.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671105058\nflagg0=1207959568\nflagh0=16\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nwinver0=0\nmaxres0=0\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\nregistry0=[HKEY_LOCAL_MACHINE\\Software]\\n[HKEY_LOCAL_MACHINE\\Software\\Cavedog Entertainment]\\n[HKEY_LOCAL_MACHINE\\Software\\Cavedog Entertainment\\Total Annihilation: Kingdoms]\\n[HKEY_LOCAL_MACHINE\\Software\\Cavedog Entertainment\\Total Annihilation: Kingdoms\\1.00.000]\\n\\n[HKEY_CURRENT_USER\\Software\\Cavedog Entertainment]\\n[HKEY_CURRENT_USER\\Software\\Cavedog Entertainment\\Kingdoms]\\n\"InstallDirectX\"=dword:00000001\\n\\n[HKEY_CURRENT_USER\\Software\\Cavedog Entertainment\\Kingdoms\\InterfaceOptions]\\n\"Language\"=\"ENGLISH\"\\n\\n[HKEY_CURRENT_USER\\Software\\Cavedog Entertainment\\Cartographer]\\n\n"
  },
  {
    "path": "build/exports/Total Annihilation.dxw",
    "content": "[target]\ntitle0=Total Annihilation\npath0=D:\\Games\\TOTA\\totala.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Total Immersion Racing.dxw",
    "content": "[target]\ntitle0=Total Immersion Racing\npath0=D:\\Games\\TIR\\game\\Tir.exe\nmodule0=\nopengllib0=\nver0=8\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=1028\ntflag0=6147\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Total Soccer 2000 (3DFX).dxw",
    "content": "[target]\ntitle0=Total Soccer 2000 (3DFX)\npath0=D:\\Games\\Total Soccer 2000\\soccer3dfx.exe\nmodule0=\nopengllib0=\nver0=9\ncoord0=0\nflag0=134234657\nflagg0=1208025344\nflagh0=20\nflagi0=67596\ntflag0=5121\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=2\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Total Soccer 2000 (DirectX).dxw",
    "content": "[target]\ntitle0=Total Soccer 2000 (DirectX)\npath0=D:\\Games\\Total Soccer 2000\\SOCCERDX.EXE\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=134234274\nflagg0=1207959808\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=2\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Totò Sapore e il magico sapore della pizza.dxw",
    "content": "[target]\ntitle0=Tot Sapore e il magico sapore della pizza\npath0=D:\\Program Files (x86)\\Tot Sapore\\Artematica.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Toy Factory.dxw",
    "content": "[target]\ntitle0=Toy Factory\npath0=D:\\Games\\Toy Factory\\ToyFactory.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nstartfolder0=\nmonitorid0=0\nflagn0=0\nflago0=0\nscanline0=1\ninitresw0=0\ninitresh0=0\n[stamp]\nversion=2.04.21.a6\ntime=Wed Mar 22 09:51:41 2017\n\n"
  },
  {
    "path": "build/exports/Trials2 - Second Edition.dxw",
    "content": "[target]\ntitle0=Trials2 - Second Edition\npath0=F:\\Games\\Trials2 - Second Edition\\trials2.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/TrickStyle (D3D).dxw",
    "content": "[target]\ntitle0=TrickStyle (D3D)\npath0=D:\\Games\\TrickStyle\\TS_D3D.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136331298\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=67113088\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Tropico Paradise Island.dxw",
    "content": "[target]\ntitle0=Tropico Paradise Island\npath0=D:\\Games\\Tropico Paradise Island\\Tropico.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218272\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=1024\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Tungusskiy Meteorit.dxw",
    "content": "[target]\ntitle0=Tungusskiy Meteorit\npath0=D:\\Games\\Tungusskiy Meteorit\\Tungusskiy Meteorit.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Typing of the Dead, the.dxw",
    "content": "[target]\ntitle0=Typing of the Dead, the\npath0=D:\\Games\\Typing of the dead\\Tod_e.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671088674\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nregistry0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Ultim@te Race Pro.dxw",
    "content": "[target]\ntitle0=Ultim@te Race Pro\npath0=D:\\Games\\Ultim@te Race Pro\\ULTIM@TE RACE PRO.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4736\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Ultimate Soccer Manager 98.dxw",
    "content": "[target]\ntitle0=Ultimate Soccer Manager 98\npath0=D:\\Games\\USM98\\USM98.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217760\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=266368\ntflag0=-2147477245\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Ultimate Spiderman.dxw",
    "content": "[target]\ntitle0=Ultimate Spiderman\npath0=F:\\Games\\Ultimate Spiderman\\USM.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673202214\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=1073746048\nflagk0=65536\nflagl0=1048576\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Unreal Tournament.dxw",
    "content": "[target]\ntitle0=Unreal Tournament\npath0=D:\\Games\\Unreal Tournament\\System\\UnrealTournament.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=-2013265886\nflagg0=1209073680\nflagh0=20\nflagi0=4196356\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=1200\nsizy0=900\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nwinver0=0\nmaxres0=0\nregistry0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Unreal.dxw",
    "content": "[target]\ntitle0=Unreal\npath0=D:\\Games\\Unreal\\System\\Unreal.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218272\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=4\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Urban Chaos.dxw",
    "content": "[target]\ntitle0=Urban Chaos\npath0=D:\\Games\\Urban Chaos\\fallen.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/V-Rally 2 Expert Edition.dxw",
    "content": "[target]\ntitle0=V-Rally 2 Expert Edition\npath0=F:\\Games\\V-Rally 2 Expert Edition\\V-Rally2 Expert Edition\\Vrally2.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Note: the game detects Alt-tabs and terminates. \\nThen the \"do not notify on task switch\" is mandatory, but also minimizing is not supported.\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314931\nflagg0=1207959808\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=1048576\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/V-Rally 3.dxw",
    "content": "[target]\ntitle0=V-Rally 3\npath0=F:\\Games\\V-Rally 3\\Vrally3.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=65556\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/V2000.dxw",
    "content": "[target]\ntitle0=V2000\npath0=D:\\Games\\V2000\\V2000.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=671088690\nflagg0=1207959680\nflagh0=65556\nflagi0=-2011168764\nflagj0=134221952\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=800\nmaxy0=600\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nregistry0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Vangers.dxw",
    "content": "[target]\ntitle0=Vangers\npath0=D:\\Games\\Vangers\\road.exe\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=136315426\nflagg0=1207959552\nflagh0=8212\nflagi0=4726784\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=0\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Viper Racing.dxw",
    "content": "[target]\ntitle0=Viper Racing\npath0=D:\\Games\\Viper Racing\\SIERRA\\Viper Racing\\Data\\race.bin\nlaunchpath0=D:\\Games\\Viper Racing\\SIERRA\\Viper Racing\\Viper Racing.exe\nmodule0=\nopengllib0=\nnotes0=\nver0=1\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=-2009071612\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Virtua Cop 2.dxw",
    "content": "[target]\ntitle0=Virtua Cop 2\npath0=D:\\Games\\VCop2\\VCop2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nregistry0=\nflagk0=262144\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Virtua Cop.dxw",
    "content": "[target]\ntitle0=Virtua Cop\npath0=D:\\Games\\Virtua Cop\\VCOP.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134234150\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nregistry0=\nflagk0=262144\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Virtua Fighter 2.dxw",
    "content": "[target]\ntitle0=Virtua Fighter 2\npath0=D:\\Games\\VF2\\VF2.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=671088674\nflagg0=1744830592\nflagh0=20\nflagi0=138412038\nflagj0=4224\ntflag0=536870912\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Virtua Fighter PC.dxw",
    "content": "[target]\ntitle0=Virtua Fighter PC\npath0=D:\\Games\\Virtua Fighter\\VFPC.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218272\nflagg0=134217744\nflagh0=20\nflagi0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Virtua Fighter.dxw",
    "content": "[target]\ntitle0=Virtua Fighter\npath0=D:\\Games\\Virtua Fighter\\VFPC.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=327680\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Vital Device.dxw",
    "content": "[target]\ntitle0=Vital Device\npath0=D:\\Games\\Vital Device\\vitaldevice.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=134222976\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Wacky Races.dxw",
    "content": "[target]\ntitle0=Wacky Races\npath0=D:\\Games\\Wacky Races\\WPC.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217760\nflagg0=134217728\nflagh0=20\nflagi0=4194308\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/WarWind.dxw",
    "content": "[target]\ntitle0=WarWind\npath0=D:\\Games\\WarWind\\WW.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Warcraft 2 Battlenet Ed.dxw",
    "content": "[target]\ntitle0=Warcraft 2 Battlenet Ed\npath0=D:\\Games\\Warcraft 2 Battlenet Ed\\Warcraft II BNE.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217890\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nregistry0=\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Warcraft Adventures - Lord Of The Clans.dxw",
    "content": "[target]\ntitle0=Warcraft Adventures - Lord Of The Clans\npath0=F:\\Games\\Warcraft Adventures - Lord Of The Clans\\PlayWin.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Wargames.dxw",
    "content": "[target]\ntitle0=Wargames (demo)\npath0=D:\\Games\\Wargames\\wargames.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=268435618\nflagg0=1207959552\nflagh0=20\nflagi0=0\ntflag0=3\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Wargasm.dxw",
    "content": "[target]\ntitle0=Wargasm\npath0=D:\\Games\\Wargasm\\tank.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Must set HOVAPPDATA=. environment variable\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nregistry0=[HKEY_LOCAL_MACHINE\\SOFTWARE\\Digital Image Design]\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Digital Image Design\\Default Config]\\n\"Configurable\"=dword:00000000\\n\"Bilinear Filter\"=dword:00000001\\n\"Fog\"=dword:00000001\\n\"Windowed\"=dword:00000000\\n\"Preferred Width\"=dword:00000280\\n\"Preferred Height\"=dword:000001e0\\n\\n\n"
  },
  {
    "path": "build/exports/Warhammer - Shadow of the Horned Rat (x2).dxw",
    "content": "[target]\ntitle0=Warhammer - Shadow of the Horned Rat (x2)\npath0=D:\\Games\\Warhammer - Shadow of the Horned Rat\\WHSHR.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=GAMEF.DLL\nopengllib0=\nnotes0=Game setup:\\n\\n1) unzip packed game RIP\\n2) copy RLDDF.DLL from SYSTEM32 subfolder to game dir\\n3) copy DxWnd wing32.dll to game dir\\n4) turn digital audio OFF or add sound WAV file (it is hardcoded in virtual registry!)\\nor copy wav files in \\Remote\\Binary\\GLUE\\SPEECH folder\\n\nregistry0=\\n[HKEY_LOCAL_MACHINE\\SOFTWARE]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape\\WarHammerFB]\\n;\"Options\"=\"3,1,1,2,1,1,0,0\" // High Quality,  digital audio off\\n\"Options\"=\"3,1,1,2,1,1,1,1\" // High Quality,  digital audio on\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape\\WarHammerFB\\InstallDir]\\n@=\"\\{path}\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape\\WarHammerFB\\InstallOption]\\n@=\"Maximum\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape\\WarHammerFB\\Language]\\n@=\"ENG\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape\\WarHammerFB\\LocalDir]\\n@=\"\\{path}\\\\FILE\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape\\WarHammerFB\\RemoteDir]\\n@=\"\\{path}\\\\REMOTE\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape\\WarHammerFB\\SaveDir]\\n@=\"\\{path}\\\\TEMP\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape\\WarHammerFB\\UpdateDir]\\n@=\"C:\\\\GAMES\\\\WARFB\\\\Update\"\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\SharedDLLs]\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\WING.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\WING32.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\WINGDE.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\WINGDIB.DRV\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\WINGPAL.WND\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RLDDF.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RLDDI.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFTF.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFTI.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLFRG16M.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLFRG256.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLFRG64K.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLFRM16M.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLFRM256.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLFRM64K.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLIRG16M.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLIRG256.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLIRG64K.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLIRM16M.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLIRM256.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLIRM64K.DLL\"=hex:01,00,00,00\nver0=0\nmonitorid0=-1\ncoord0=1\nflag0=-1473609686\nflagg0=1209270312\nflagh0=2163732\nflagi0=1212153860\nflagj0=5248\nflagk0=2195456\nflagl0=67141648\nflagm0=2105344\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=1280\nsizy0=960\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Warhammer - Shadow of the Horned Rat.dxw",
    "content": "[target]\ntitle0=Warhammer - Shadow of the Horned Rat\npath0=F:\\Games\\Warhammer - Shadow of the Horned Rat\\WHSHR.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=GAMEF.DLL\nopengllib0=\nnotes0=Game setup:\\n\\n1) unzip packed game RIP\\n2) copy RLDDF.DLL from SYSTEM32 subfolder to game dir\\n3) copy DxWnd wing32.dll to game dir\\n4) turn digital audio OFF or add sound WAV file (it is hardcoded in virtual registry!)\\nor copy wav files in \\Remote\\Binary\\GLUE\\SPEECH folder\\n\nregistry0=\\n[HKEY_LOCAL_MACHINE\\SOFTWARE]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape]\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape\\WarHammerFB]\\n;\"Options\"=\"3,1,1,2,1,1,0,0\" // High Quality,  digital audio off\\n\"Options\"=\"3,1,1,2,1,1,1,1\" // High Quality,  digital audio on\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape\\WarHammerFB\\InstallDir]\\n@=\"\\{path}\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape\\WarHammerFB\\InstallOption]\\n@=\"Maximum\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape\\WarHammerFB\\Language]\\n@=\"ENG\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape\\WarHammerFB\\LocalDir]\\n@=\"\\{path}\\\\FILE\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape\\WarHammerFB\\RemoteDir]\\n@=\"\\{path}\\\\REMOTE\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape\\WarHammerFB\\SaveDir]\\n@=\"\\{path}\\\\TEMP\"\\n\\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Mindscape\\WarHammerFB\\UpdateDir]\\n@=\"C:\\\\GAMES\\\\WARFB\\\\Update\"\\n\\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\SharedDLLs]\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\WING.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\WING32.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\WINGDE.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\WINGDIB.DRV\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\WINGPAL.WND\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RLDDF.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RLDDI.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFTF.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFTI.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLFRG16M.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLFRG256.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLFRG64K.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLFRM16M.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLFRM256.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLFRM64K.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLIRG16M.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLIRG256.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLIRG64K.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLIRM16M.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLIRM256.DLL\"=hex:01,00,00,00\\n\"C:\\\\WINDOWS\\\\SYSTEM32\\\\RL\\\\SOFT\\\\RLIRM64K.DLL\"=hex:01,00,00,00\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=-1473609686\nflagg0=1209270312\nflagh0=2163732\nflagi0=1212153860\nflagj0=4224\nflagk0=2195456\nflagl0=67141648\nflagm0=2105344\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Warhammer 40K Chaos Gate.dxw",
    "content": "[target]\ntitle0=Warhammer 40K Chaos Gate\npath0=D:\\Games\\Warhammer 40K Chaos Gate\\game\\WH40K.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=679494178\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=128\nflagk0=65536\nflagl0=0\nflagm0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Warhammer 40K Final Liberation.dxw",
    "content": "[target]\ntitle0=Warhammer 40K Final Liberation\npath0=D:\\Games\\Warhammer 40K Final Liberation\\EPIC40K.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1209008144\nflagh0=65556\nflagi0=4194308\ntflag0=6147\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=640\nsizy0=480\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Warhammer 40K Rites of War.dxw",
    "content": "[target]\ntitle0=Warhammer 40K Rites of War\npath0=F:\\Games\\Warhammer 40K Rites Of War\\RoW.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Courtesy of Riitaoja:\\n\\nAfter installing the game copy the \"Map\" -folder from the CD to the \\nRites of War\\ directory on your hard drive.\\n\\nThis will fix the issue where the game crashes when starting a campaign.\\n\\nSetting Time limit to 1mSec together with \"Updates bigger than 1/4 screen size\" \\nslows down the battle scrolling without affecting the mouse or animations speed,\\nnor reducing the FPS rate.\\nVery adviseable.\nregistry0=\nver0=0\ncoord0=0\nflag0=136335394\nflagg0=1207963776\nflagh0=20\nflagi0=138412036\nflagj0=4480\nflagk0=65536\nflagl0=1073741824\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=1\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nstartfolder0=\nmonitorid0=-1\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Warhammer Dark Omen.dxw",
    "content": "[target]\ntitle0=Warhammer Dark Omen\npath0=D:\\Dark Omen\\PRG_ENG\\EngRel.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Courtesy of Riitaoja:\\n\\nDark Omen needs a d3drm.dll file to run:\\n- This file can be located in the CD's \\DIRECTX -folder.\\n- Copy the file into the \"Dark Omen\\PRG_ENG\" directory.\\n\\nSound issues:\\nDark Omen can sometimes produce a burst of white noise from the speakers.\\nUsing the Timing option \"CPU slow down\" may fix this issue.\nregistry0=[HKEY_LOCAL_MACHINE\\SOFTWARE\\Electronic Arts\\Dark Omen\\1.0\\Options\\Options]\\n\"Selected\"=\"4\"\\n\"HardwareSelected\"=\"252\"\\n\"SoftwareSelected\"=\"228\"\\n\"MMXSelected\"=\"256\"\\n\"ToolTips\"=\"1\"\\n\"MusicVolume\"=\"408\"\\n\"SFXVolume\"=\"816\"\\n\"SoftwareSoundQuality\"=\"2\"\\n\"SoftwareParticleQuality\"=\"2\"\\n\"MMXSoundQuality\"=\"2\"\\n\"MMXParticaleQuality\"=\"1\"\\n\"HardwareSoundQuality\"=\"2\"\\n\"HardwareParticleQuality\"=\"2\"\\n\"InformationNum\"=\"11\"\\n\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=136314920\nflagg0=1207959552\nflagh0=1044\nflagi0=1212153860\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Warlords 3.dxw",
    "content": "[target]\ntitle0=Warlords 3\npath0=D:\\Games\\WARLORDS3\\Darklord.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=-2147483614\nflagg0=1477443616\nflagh0=532\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=0\nsizy0=0\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=67108992\nflagk0=65536\nwinver0=0\nmaxres0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Warlords Battlecry 2.dxw",
    "content": "[target]\ntitle0=Warlords Battlecry 2\npath0=D:\\Games\\Warlords Battlecry 2\\Battlecry II.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Warlords Battlecry 3 (GOG).dxw",
    "content": "[target]\ntitle0=Warlords Battlecry 3 (GOG)\npath0=D:\\Games\\Warlords Battlecry 3 (GOG)\\Battlecry III.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Warlords Battlecry III.dxw",
    "content": "[target]\ntitle0=Warlords Battlecry III\npath0=D:\\Games\\Warlords Battlecry III\\Battlecry III.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=3\nflag0=136314914\nflagg0=1207959568\nflagh0=20\nflagi0=-2009071612\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Warpath.dxw",
    "content": "[target]\ntitle0=Warpath\npath0=D:\\Games\\Warpath\\System\\Warpath.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218272\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Warrior Kings.dxw",
    "content": "[target]\ntitle0=Warrior Kings\npath0=D:\\Games\\Warrior Kings\\warrior_kings.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671236130\nflagg0=1207959569\nflagh0=65556\nflagi0=4\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Wars & Warriors Joan of Arc.dxw",
    "content": "[target]\ntitle0=Wars & Warriors: Joan of Arc\npath0=D:\\Games\\Wars & Warriors Johan of Arc\\joan.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217746\nflagg0=1207959552\nflagh0=20\nflagi0=205520900\nflagj0=4224\nflagk0=0\ntflag0=-2147477501\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=800\nmaxy0=600\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Warwind 2.dxw",
    "content": "[target]\ntitle0=Warwind 2\npath0=D:\\Games\\Warwind 2\\WARWIND2.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=0\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Weird War.dxw",
    "content": "[target]\ntitle0=Weird War\npath0=D:\\Games\\Weird War\\WeirdWar.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=136331298\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/Wetrix.dxw",
    "content": "[target]\ntitle0=Wetrix\npath0=D:\\Games\\Wetrix\\wetrix.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=DxWnd useful only when setting the game fullscreen mode\nregistry0=\nver0=0\ncoord0=0\nflag0=681574434\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Whiteout.dxw",
    "content": "[target]\ntitle0=Whiteout\npath0=D:\\Games\\Whiteout\\Whiteout.exe\nmodule0=\nopengllib0=\nver0=7\ncoord0=0\nflag0=402653218\nflagg0=1207959552\nflagh0=20\nflagi0=4194304\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nregistry0=\nflagj0=0\nflagk0=0\nflagl0=0\nflagm0=0\ndflag0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=1\n"
  },
  {
    "path": "build/exports/Wildfire.dxw",
    "content": "[target]\ntitle0=Wildfire\npath0=D:\\Games\\Wildfire\\Wildfire.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=-1476392958\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Wind Fantasy SP.dxw",
    "content": "[target]\ntitle0=Wind Fantasy SP\npath0=D:\\Games\\Wind Fantasy SP\\WF_SP.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218274\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nflagj0=4224\nnotes0=\nregistry0=\nflagk0=0\nflagl0=0\nflagm0=0\nswapeffect0=0\nmaxddinterface0=7\n"
  },
  {
    "path": "build/exports/Wizardry 8 (3DfX).dxw",
    "content": "[target]\ntitle0=Wizardry 8 (3DfX)\npath0=D:\\Games\\Wizardry 8\\Wiz8.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=9\ncoord0=0\nflag0=134217730\nflagg0=1207959552\nflagh0=20\nflagi0=205520900\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Wizardry Chronicles V0984b - English.exe.dxw",
    "content": "[target]\ntitle0=Wizardry Chronicles V0984b - English.exe\npath0=D:\\Games\\Wizardry Chronicle\\Wizardry Chronicles V0984b - English.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=205520900\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Wizardry Chronicles.dxw",
    "content": "[target]\ntitle0=Wizardry Chronicles.exe\npath0=F:\\Games\\Wizardry Chronicle\\Wizardry Chronicles.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/World Racing (Demo) MX.dxw",
    "content": "[target]\ntitle0=World Racing (Demo) MX\npath0=D:\\Games\\World Racing Demo\\mbwr_pc_MX.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=2\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/World Racing (Demo).dxw",
    "content": "[target]\ntitle0=World Racing (Demo)\npath0=D:\\Games\\World Racing Demo\\mbwr_pc.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1207959552\nflagh0=20\nflagi0=4\ntflag0=64\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Worms 2 (GOG).dxw",
    "content": "[target]\ntitle0=Worms 2 (GOG)\npath0=D:\\Games\\Worms 2\\worms2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218272\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Worms 2.dxw",
    "content": "[target]\ntitle0=Worms 2\npath0=D:\\Games\\worms2\\worms2.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Working pretty well on TWILIGHT game rip.\\nUntested on CD version.\\nIt shows problems with the background: \\nin emulated mode the colors are limited, in GDI mode it's all black.\\n\nver0=0\ncoord0=0\nflag0=134234146\nflagg0=1207959552\nflagh0=20\nflagi0=138412038\nflagj0=5248\ntflag0=536870912\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Worms Pinball.dxw",
    "content": "[target]\ntitle0=Worms Pinball\npath0=D:\\Games\\Worms Pinball\\WPIB.exe\nmodule0=\nopengllib0=\nver0=1\ncoord0=0\nflag0=134217762\nflagg0=1207959568\nflagh0=20\nflagi0=4\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\n"
  },
  {
    "path": "build/exports/Wrestling MPire Remix.dxw",
    "content": "[target]\ntitle0=Wrestling MPire Remix\npath0=F:\\Games\\Wrestling MPire Remix (Career)\\Wrestling MPire Remix (Fullscreen).exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185826\nflagg0=1207959552\nflagh0=65556\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=268435456\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/X - Beyond the Frontier (dx6).dxw",
    "content": "[target]\ntitle0=X - Beyond the Frontier (DX6)\npath0=D:\\Games\\X - Beyond the Frontier\\Xdx6.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=98304\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/X - Beyond the Frontier.dxw",
    "content": "[target]\ntitle0=X - Beyond the Frontier\npath0=D:\\Games\\X - Beyond the Frontier\\X.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=98304\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/X-COM Interceptor.dxw",
    "content": "[target]\ntitle0=X-COM Interceptor\npath0=D:\\Games\\X-COM Interceptor\\Interceptor.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138543110\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nregistry0=\nflagk0=65536\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/X-Files, the.dxw",
    "content": "[target]\ntitle0=X-Files, the\npath0=D:\\Games\\X-Files\\XFiles.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=-2011168733\nflagg0=1209008128\nflagh0=16\nflagi0=138412036\nflagj0=67113088\nflagk0=65536\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\n"
  },
  {
    "path": "build/exports/XENIC.dxw",
    "content": "[target]\ntitle0=XENIC\npath0=D:\\Games\\Xenic\\XENIC.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=134217732\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/XIII.dxw",
    "content": "[target]\ntitle0=XIII\npath0=D:\\Games\\Ubisoft\\XIII\\system\\XIII.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=671105540\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\ntflag0=6146\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Xwing vs. Tie-Fighter demo.dxw",
    "content": "[target]\ntitle0=Xwing vs. Tie-Fighter demo\npath0=D:\\Games\\XwingTie Demo\\z_xvt__.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\nmonitorid0=-1\ncoord0=0\nflag0=673185846\nflagg0=1207959552\nflagh0=8212\nflagi0=138412036\nflagj0=1073746048\nflagk0=134283264\nflagl0=512\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=0\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\nscanline0=0\ninitresw0=800\ninitresh0=600\n"
  },
  {
    "path": "build/exports/Yu No (english patch).dxw",
    "content": "[target]\ntitle0=Yu No (english patch)\npath0=D:\\Games\\Yu no\\Classics\\YUNO\\AI5ENG.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681574432\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=8392832\nflagk0=67436544\nflagl0=4\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/ZPC Zero Population Count.dxw",
    "content": "[target]\ntitle0=ZPC Zero Population Count\npath0=D:\\Games\\ZPC\\ZPC.EXE\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=4194308\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nlaunchpath0=\nnotes0=\nflagj0=128\nflagk0=65536\nwinver0=0\nmaxres0=0\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/Zanzarah The Hidden Portal.dxw",
    "content": "[target]\ntitle0=Zanzarah The Hidden Portal\npath0=D:\\Games\\Zanzarah The Hidden Portal\\System\\zanthp.exe\nlaunchpath0=D:\\Games\\Zanzarah The Hidden Portal\\System\\Zanzarah.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217760\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Zenfar.dxw",
    "content": "[target]\ntitle0=Zenfar\npath0=D:\\Games\\Zenfar\\Zenfar.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Zero Critical.dxw",
    "content": "[target]\ntitle0=Zero Critical\npath0=D:\\Games\\zero_critical_-_satin_rift\\ZEROCR.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nver0=0\ncoord0=0\nflag0=671088674\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=4224\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Zero Divide.dxw",
    "content": "[target]\ntitle0=Zero Divide\npath0=D:\\Games\\Zerodiv\\ZD.EXE\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=681582626\nflagg0=1212153864\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=327680\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Zero Zone.dxw",
    "content": "[target]\ntitle0=Zero Zone\npath0=G:\\ZEROZONE.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218272\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/Zoo Tycoon.dxw",
    "content": "[target]\ntitle0=Zoo Tycoon\npath0=D:\\Games\\Zoo Tycoon\\zoo.exe\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=1207960096\nflagg0=1207959552\nflagh0=20\nflagi0=136315172\nflagj0=0\ntflag0=6403\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/ZugyA.dxw",
    "content": "[target]\ntitle0=ZugyA\npath0=D:\\Games\\ZugyA\\zugya.exe\nstartfolder0=\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=\nregistry0=\nver0=0\ncoord0=0\nflag0=136314914\nflagg0=1209008128\nflagh0=20\nflagi0=138412036\nflagj0=4224\nflagk0=65536\nflagl0=0\nflagm0=0\ntflag0=0\ndflag0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nswapeffect0=0\nmaxddinterface0=7\nslowratio0=2\n"
  },
  {
    "path": "build/exports/Zulu Assault.dxw",
    "content": "[target]\ntitle0=Zulu Assault\npath0=D:\\Games\\Zulu Assault\\ASSAULT.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134218272\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=0\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/exports/eXpendable.dxw",
    "content": "[target]\ntitle0=eXpendable\npath0=D:\\Games\\eXpendable\\go.exe\nlaunchpath0=D:\\Games\\eXpendable\\Expendable.exe\nmodule0=\nopengllib0=\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=128\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\nnotes0=\nflagk0=65536\nswapeffect0=0\nregistry0=\n"
  },
  {
    "path": "build/exports/mdk 95.dxw",
    "content": "[target]\ntitle0=mdk 95\npath0=D:\\Games\\MDK\\MDK95.EXE\nlaunchpath0=\nmodule0=\nopengllib0=\nnotes0=Must manually set MDK.CFG hddata field with install game directory\nver0=0\ncoord0=0\nflag0=134217762\nflagg0=1207959552\nflagh0=20\nflagi0=138412036\nflagj0=12416\ntflag0=0\ninitx0=0\ninity0=0\nminx0=0\nminy0=0\nmaxx0=0\nmaxy0=0\nposx0=50\nposy0=50\nsizx0=800\nsizy0=600\nmaxfps0=0\ninitts0=0\nwinver0=0\nmaxres0=-1\n"
  },
  {
    "path": "build/help/placeholder.txt",
    "content": "no help files here until updated.\ngrab files from release v2.04.10."
  },
  {
    "path": "build/readme-relnotes.txt",
    "content": "v2.2.00/01\r\nmajor code rewriting - introduced dxwCore class\r\npreliminary FPS handling: Limit, Skip & Count with configurable delay\r\nHide Multi Monitor configuration flag - used for \"Dream Acquarium\" on multimonitor PC.\r\n\r\nv2.2.02\r\npreliminary time stretching: so far applies to GetTickCount() only, and is controlled by Alt-F5 / F6 keys.\r\nFixed bug in GDI BitBlt call: stretching must be made on screen DC only, or it's made twice.\r\n\r\nv2.02.03/04:\r\ncode cleanup - see syslib calls hooking\r\nnew configuration flags: Hook GDI and Hook OpenGL\r\nOpenGL custom library field\r\nAPI hooking fix with module specification\r\nTime stretching by keyboard control (Alt F5/F6) and/or Time Slider dialog\r\n\r\nv2.02.05:\r\nhooked winmm timeGetTime() API: makes time stretching work for Age of Empires series\r\nchanged time stretching grain: now it's not the coarse grained 2x, 4x,... series in 9 possible values but the fine grained series 1.5x, 2x, 3x,.... in 17 possible values\r\nadded status and time stretching view panels to tray icon menu\r\n\r\nv2.02.06:\r\npreliminary FPS counter overlapped on game screen, Alt-F7 to toggle display on/off.\r\nfixed buf on time stretch logging (and possible game crash).\r\nrevised GetDC handling with 8BPP paletized surfaces: avoided need to emulate reverse-blitting and got an impressive speed improvement for games such as Age of Empires I & II and Hyperblade.\r\n\r\nv2.02.07:\r\nmany fixes on the FPS and time control features.\r\n\r\nv2.02.08:\r\nfixed some errors in the main directdraw palette descriptor. That gives better compatibility and less complicated source code.\r\nadded Fake Version feature: now Dungeon Keeper II (original version, not GOG hack) can detect a fake Win2000 / WinXP environment on Win7 and newer. Tested and working on Win7. Many thanks to Maxim for pushing me hard to win my lazyness and implement this new feature.\r\n\r\nv2.02.09:\r\nFixed some x,y window coordinates bugs\r\nFixed some proxy log messages (missing \\n line terminator)\r\nFixed Trace \"DirectX\" flag.\r\nimproved GetDC handling in 8BPP palette mode: AddPalette called on demand, and on any surface (including backbuffers): makes Emergency work with no \"Handle DC\" flag set. Beware: this may affect the \"Map GDI HDC on Primary DC\" flag causing surface locks.\r\nFixed limit FPS timing issues: now the max possible FPS is 1000/delay.\r\nFixed EndPaint bug causing HDC lock in \"Map GDI HDC to Primary DC\" mode.\r\n\r\nv2.02.10:\r\nAdded \"Full RECT Blit\" mode: may be useful to handle problematic situations (e.g. \"Urban Assault\" intro movies)\r\nFixed ClientToScreen and ScreenToClient hookers to properly handle scaled windows. This makes \"Postal\" working.\r\nFixed global palette reference count (??) in DirectDraw::Release hook\r\nFixed Window messages handling for SWP_NOMOVE, SWP_NOSIZE modes.\r\n\r\nv2.02.11:\r\nAdded debug messages for GetSystemMetrics() modes, MapWindowPoints() points, DirectDrawEnumerate/Ex() devices.\r\nompiled with #define _WIN32_WINNT 0x0600 -> handles Vista modes\r\nAdded NOPALETTEUPDATE (\"Palette update don't Blit\" flag) to eliminate flickering when ddraw and GDI methods conflict\r\nHooked all LoadLibraryA/W\r and LoadLibraryExA/W calls\r\nHooked \nextDirectDrawEnumerate/Ex ddraw calls to handle Hide multi-monitor option.\r\nDetected directshow activation through CoCreateInstance and hooked quartz.dll segment: now Urban Assault movies don't require \"Full RECT Blit\" option to be set.\r\nUpdated DDSurface::Release hook \r\n\r\nv2.02.12\r\nGUI: Tabbed setup panel. More space for more future options.\r\nDLL: (optional) splash screen \r\nprobably, some regression bugs....\r\n \r\nv2.02.13\r\nAdded decoding of WINDOWPOS.flags field in trace log\r\nrevised whole hooking procedures to use HMODULE handle instead of module name\r\nAdded WM_GETMINMAXINFO and WM_NCCALCSIZE handling in WinProcess hook\r\nAttempt to handle double buffering through surface attach to backbuffer (???)\r\nFixed CHILD window positioning for BIG windows in CreateWindowExA hook\r\nAdded GlobalMemoryStatus hook to fix huge values when value exceeds DWORD range. Fixes Nocturne intro warning message.\r\n\r\nV2.02.14\r\nStarted dll injection to handle startup code\r\nFixed directx CreateSurface hook to fix \"Wargames\" error in emulated mode\r\nFixed directx SetClipper hook to properly handle backbuffer clipping and fix \"Wargames\" clipping problems\r\n\r\nv2.02.15\r\nFixed clipping handling of primary/backbuffer surfaces \r\nAdded option to set AERO compatibility for Vista/Win7/Win8 platforms. Need to call a undocumented ddraw API. Thanks to Vovchik that discovered it. Use at your own risk!\r\n\r\nv2.02.16\r\nDLL injection finally working! Quake 2 is supported.\r\nAdded Wireframe option for OpenGL games\r\nImproved fix for clipper handling of primary/backbuffer surfaces \r\n\r\nv2.02.18\r\nImproved LoadLibrary family hook and other improvements to let DxWnd better retrieve OpenGL libs:  now Homeworld 2 is working\r\nFixed a bug in backbuffer ZBUFFER attach emulation. Now Dungeon Keeper 2 crashes no more.\r\nMoved \"Remap client rect\" option from directx tab to main program tab\r\nAdded the \"Force Hook\" in the OpenGL tab. Useless for now.\r\nPreliminary work for d3d10/d3d11 wrapping. Unfinished and not working so far.\r\nAdded LoadLibraryEx flags explaination in log\r\nAdded support for mouse X,Y coordinates display in status window\r\nOpenGL hooking: fixed bug to prevent hooking same call twice\r\nOpenGL hooking: added hook for wglMakeCurrent call to keep track of rendered window\r\nOpenGL hooking: fixed glViewport and extglScissor hook coordinates handling\r\nD3D hooking: Added Wireframe option for D3D games\r\nAdded hooking of CLSID_DxDiagProvider through CoCreateInstance\r\nFixed (further simplified) clipping handling of primary/backbuffer surfaces \r\nChangeDisplaySettings hook: fixed x,y coordinate inversion in log message\r\n\r\nv2.02.19\r\nSaves GUI coordinates\r\nFixed \"Remap client rect\" option for Diablo's windows and Premier Manager 98 mouse movements\r\nAdded \"Highlight blit to primary\" option to draw a yellow bounding box around blits to primary surface\r\nFixed some exception conditions when closing the programs\r\nFixed CreateSurface handling to allow Premier Manager 98 start in emulated mode\r\nFixed ONEPIXELFIX handling\r\nFixed BIG WIN handling for Diablo's windows\r\nFixed FillRect hook to prevent filling outside virtual desktop\r\nDisabled hooking of system libraries\r\nFixed a nasty bug that caused your desktop to freeze until shutdown !!!\r\nFixed GetWindowRect handling for windows not created by the task: Diablo queries the explorer window size! Now the retrieved RECT can't be larger than the virtual desktop\r\n\r\nv2.02.20\r\nFixed an error in D3D10/11 preliminary code: AoE III working again\r\nAdded \"Hook all DLLs\" option to simplify congiguration: see new Diablo setup\r\nAdded screen coordinates to log\r\nSome code rearrangement\r\n\r\nv2.02.21\r\nit's a w.i.p. release, wait 'till finished....\r\n\r\nv2.02.22\r\nMajor code rearrangement in API hooking. Expect some troubles...\r\nAdded desktop workarea and centered coordinate settings\r\nFixed imelib hooking\r\nAdded HOOKENABLED flag\r\nFixed ChangeDisplaySettings \r\nGUI: added ListView icons\r\nGUI: added pause command\r\nGUI: updated commands layout\r\n\r\nv2.02.23/24\r\nFixed \"disable setting gamma ramp\" flag to intercept both GDI and D3D calls\r\nFixed client workarea setting to occupy the whole client area even when preserving aspect ratio (it draws black rectangles to the left/right or top/bottom side)\r\nAdded DisableThreadLibraryCalls optimization\r\nAdded B&W screen simulation (for primary emulation only)\r\nImproved the primary emulation capacity to handle 3D games\r\nAdded the \"preserve surface capabilities\" flag\r\nFixed an hooking bug for user32.dll\r\n\r\nv2.02.25\r\nCORE:\r\nAdded 'Single CPU Process Affinity' flag to let old games run on a single CPU core.\r\nFixed bug causing possible crash using 'preserve surface caps' flag\r\nSwitched lpDDSBack reference when backbuffer is upgraded through QueryInterface\r\nEliminated lpDDSBack clearing when refcount is zero - why is this working better? Needs further investigation\r\nAdded DDSCAPS_3DDEVICE capability when in EMULATED mode\r\nGUI:\r\nAdded Kill process by name functionality (right click menu on program's list)\r\nFixed GUI initial position: now checks for desktop size to fit GUI within visible borders\r\nAdded single cpu process affinity checkbox in compatibility tab\r\n\r\nv2.02.26\r\nCORE:\r\nFixed Black&White mode for 16BPP color depth\r\nRevised hooking code, now more compact and clear....\r\nFixed DxWnd splash screen, for those who love it\r\nIncreased child win table - now 688 hunter killer works perfectly \r\nGUI:\nAdded /debug flag to enable debugging options\r\nRevised hooking code, now more compact and clear....\r\nRestored Hook child win option\r\n\r\nv2.02.27\r\nCORE:\r\nfixed GetDC/ReleaseDC ddraw implementation to refresh GDI operation on primary surface. Warlords 3 text is now visible.\r\npreliminary implementation of MapWindowPoints - to be tested\r\nGUI:\r\nFixed log flags wrong initialization\r\n\r\nv2.02.28\r\nCORE:\r\neliminated experimental ICSendMessage and ICOpen hooks, preventing some games (Alien Nations) to work\r\nadded mciSendCommand hook to fix video playback\r\nfixed MoveWindow bug - still, it's unknown the reason why some programs (Emergency) tries to MoveWindow upon the hWnd=0 desktop!\r\nfixed MapWindowPoints hook (Alien Nations)\r\nfixed desktop detections in some places, now correctly using dxw.IsDesktop() method\r\nNow \"Alien Nations\" and \"Emergency\" working (almost) perfectly.\r\nfixed d3d8/9 hook to Get/SetGammaRamp. This should make a great number of recent games playable again.\r\n\r\nv2.02.29\r\nCORE:\r\nhooked DirectDrawSurface::Lock method to center primary surface memory updates centered into the window (in no emulated mode)\r\n\r\nv2.02.30\r\nCORE:\r\nSome ddraw::GetDC log message fixes\r\nadded preliminary registry emulation - tested ok with \"duckman\"\r\nadded separate flag for preliminary registry operation trace\r\nadded CDROM drive type emulation - tested ok with \"Fighting Forces\" RIP\r\nfixed FixCursorPos routine: cursor x,y compensation must always use pseudo-fullscreen window parameters - fixes Imperialism II mouse problems\r\nfixed Desktop Workarea position mode for ddraw games\r\nadded CoCreateInstanceEx hook - \"Final Fighter\" seems to be using it, but who knows why...?\r\nadded \"Don't move D3D Rendering Window\" window option to make \"Fable Lost Chapters\" working  \r\nGUI:\r\nupdated default values on new entry creation to map most-likely-to-work parameters\r\n\r\nv2.02.31\r\nCORE:\r\ndisabled annoying compilation security warnings\r\nimproved advapi32.dll hooking and logging\r\nhandling of complex primary surfaces with backbuffer surface inherited from one directdraw session to the following and with different interfaces\r\nfixed SetCooperativeLevel handling in case of WINDOWED mode against desktop hwnd==NULL\r\nfixed GetGDISurface in EMULATED mode \r\nhooked gdi32 API set for Imperialism I & II and 688 Hunter Killer:GetClipBox, Polyline, PolyBezierTo, PolylineTo, PolyDraw, MoveToEx, ArcTo, LineTo, StretchDIBits, SetDIBitsToDevice, SetPixel, Ellipse, Polygon, Arc, CreateEllipticRgn, CreateEllipticRgnIndirect, CreateRectRgn, CreateRectRgnIndirect, CreatePolygonRgn, DrawTextA, DrawTextExA.\r\nfixed gdi32.dll hooking for TextOutA, TabbedTextOutA, Rectangle, BitBlt, PatBlt, StretchBlt, CreateFont, CreateFontIndirect\r\nimproved ddraw proxy logging\r\nadded / fixed user32.dll API FrameRect, TabbedTextOutA, CloseWindow, DestroyWindow, SendMessageW\r\nopengl: fixed glCreateContext, wglMakeCurrent to make Descent III playable in opengl video mode.\r\nfixed DeferWindowPos hook to make Imperialism II working\r\nfixed SM_CXVIRTUALSCREEN, SM_CYVIRTUALSCREEN properties\r\nfixed window class logging causing program crash\r\nGUI:\r\nadded \"GDI/Scale font parameters\" & \"DirectX/Disable HAL support\" options\r\n\r\nv2.02.32\r\nCORE: \r\nadded new GDI handling mode, \"Emulated devce context\". Currently tested successfully on \"G-Nome\" only.\r\nfixed \"Prevent maximize\" windows handling avoiding to disable topmost style for child windows\r\nfixed handling of DDSCAPS_3DDEVICE surfaces in emulated mode: \"Nightmare Ned\" is working ok, \"The Sims\" works better (still crashing..)\r\nfixed banner handling in case of device context remmapped coordinates\r\nfixed memory leakage in SetDIBitsToDevice hooker\r\nGUI\r\nadded radiobutton group to set the preferred GDI emulation mode\r\n\r\nv2.02.33\r\nCORE:\r\nexperimental attempt to emulate the ZBUFFER attach to the BACKBUFFER surface\r\nimproved log to detail all ddraw object properties\r\nexperimental emulation of RGB to YUV conversion to investigate \"duckman\" problems on Win7\r\nimproved grayscale algorythm\r\nfixed missing DDPF_ALPHAPIXELS property causing several blit incompabilities\r\nfixed surface handling for \"Submarine Titans\"\r\nfixed mousewheel handling\r\nfixed hooking bug causing several problems (i.e. Age of Empires III)\r\nAdded FULLSCREENONLY option: fixes \"Submarine Titans\" intro movies\r\nAdded \"Bypass font unsupported api\" compatibility flag: makes \"Stratego\" working\r\nfixed several d3d8/9 hooking problems\r\nGUI\r\nadded controls for new core features\r\ndefaulted ddraw emulation mode to surface emulation\r\n\r\nv2.02.34\r\nCORE:\r\nMuch better surface description in log\r\nCompletely revised CreateSurface hook: emulated and direct code are merged as much as possible, and reference counter are kept accurate. Now most games can work both in emulated and direct mode.\r\nFixed surface capabilities for \"Vangers\", \"The Sims\" (now working in emulated mode again)\r\nUpdated \"Fixed aspect ratio\" option: now uses the x,y size declared in the configuration instead of the fixed 800 x 600 standard one.\r\nAdded virtual fullscreen \"Desktop\" mode.\r\nCompletely revised the Peek/GetMessage handling: now it uses the standard SetWindowHook API instead of the address redirection, making the handling more reliable and accurate: now \"Age of Empires III\" works at last!\r\nGUI:\r\nAdded virtual fullscreen \"Desktop\" mode.\r\nAdded \"Fix buffered IO after Win98\" flag: this is meant to fix an incompatibility in the ReadFile kernel32 API that must read from block boundaries, where a block was smaller up to Win98 and bigger after it.\r\nAs a result, games like \"Dylan Dog Horror Luna Park\" show IO errors while reading data from the CD. Unfortunately, this is not the only problem of this game, so Dylan Dog fans will have to wait further.\r\nMaybe some other programs suffer of this problem, and I will strongly appreciate if anyone finds some.\r\n\r\nv2.02.35\r\nfixed BACKBUFFER surface attributes in direct (not emulated) mode: Rayman 2 playable again\r\nadded FILTERMESSAGES flag (\"filter offending messages\") to eliminate some problems to games not developed to work windowized (Rayman 2, Mirror's Edge ...)\r\nfixed bug crashing the program when \"keep aspect ratio\" is selected with window size set to 0\r\n\r\nv2.02.36\r\nhooked GetAttachedSurface to non-PRIMARY surface to track ZBUFFER attach to BACKBUFFER. Useless, so far...\r\nrevised capability handling in CreateSurface \r\nhook trace is now activated from a separate log flag to reduce debug log size\r\nadded \"Peek all messages in queue\" to avoid queue saturation and automatic task kill in Win7 (thank to P K help)\r\nfixed message handling in the case messages are passed to a routine handle\r\n\r\nv2.02.37\r\ncode reorganization\r\nGUI:\r\nremoved useless flags and moved debug options in a hidden tab\r\n\r\nv2.02.38-40\r\nFixed coordinate calculation for blit operations when keeping aspect ratio.\r\nFixed window coordinate placement in desktop / client area mode for programs with a visible menu bar.\r\nChanged \"Lock win coordinates\" flag: now it allows window movement / resizing when driven by mouse input.\r\nFixed a bug in GDI \"Map DC to primary surface\"mode.\r\nAdded palette display window to GUI\r\n\r\nv2.02.41\r\nAdded \"suppress child process creation\"flag. This flag is introduced to manage games such as \"Heart of Iron 2\" that start intro movie by means of a separate process. HoI2 is starting the binkplay.exe program in the game's avi subfolder. This way you don't get a windowed movie, but completely suppress it.\r\n\r\nv2.02.42\r\nadded hook to kernel32.dll QueryPerformanceCounter API to enable time stretching to Rayman 2\r\nhandled GetAttachedSurface emulation for FLIP capability on primary surface - that makes the intro movies of Empire Earth visible.\r\nSome code cleaning\r\nCleared invisible debug flags ...\r\n\r\nv2.02.43\r\nSeveral changes for Empire Earth:\r\nfix: restore 16BPP color mode after directdraw session termination\r\nfix: recovered window destruction\r\nfix: proper handling of MIPMAP and LOCALVIDMEM surfaces \r\nfix: color depth handling - now when the program terminates the desktop is brought to the original color depth\r\n\r\nv2.02.44\r\nImproved debug logging for all palette operations\r\nfixed a bugged log causing the crash of Empire Earth in debug mode\r\nadded show time stretching flag - preliminary version. Some code cleaning as well.\r\nchange in automatic screen refresh - should make the \"palette update don't blit\" flag obsolete.....\r\nadded a static definition for the default system palette\r\nadded interception for CoCreateInstance following cases:\r\n\tcase 0xe436ebb3: Module=\"quartz\"; Class=\"CLSID_FilterGraph\";\r\n\tcase 0x4fd2a832: Module=\"ddrawex\"; Class=\"CLSID_DirectDrawEx\";\r\n\tcase 0x49c47ce5: Module=\"amstream\"; Class=\"CLSID_AMMultiMediaStream\";\r\npreliminary (proxed) interception for \"GetActiveWindow\" and \"GetForegroundWindow\"\r\n\r\nv2.02.45\r\nA small fix for ddraw 7 games that makes Praetorians playable, though with some problems!\r\n\r\nv2.02.46\r\nFixed handling of user32 CreateDialogIndirectParam call to avoid processing in non fullscreen mode - fix necessary to start \"Crimson Skies\".\r\n\r\nv2.02.47\r\nGUI:\r\nConfiguration tabs reorganization: now some tabs have merged making it easier to reach all options\r\ncore:\r\nimproved d3d wrapping and sdded ZBUFFER cleanup flags to fix some d3d games. In particular:\r\nClean ZBUFFER @1.0 fix: to fix \"Star Wars Episode I Racer\"\r\nClean ZBUFFER @0.0 fix: to fix \"Crimson Skies\" black blocks bug on ATI cards\r\n\r\nv2.02.48\r\nNew options: \"Disable fogging\", \"Textures not power of 2 fix\"\r\nA few fix to prevent game crashes\r\n\r\nv2.02.49\r\nSeparated ddraw, d3d and dxwnd log messages\r\nHooked GetAvailableVidMem method to limit memory values\r\nHooked ChangeDisplaySettings call in both versions ANSI and WIDECHAR, to prevent messing up with the screen\r\nAdded HookWindowProc() subroutine, called at dxhook.c@1534\r\nAdded \"Add proxy libs\" flag - so far to copy a d3d9.dll proxy lib to fix d3d9 games\r\nHooked d3d8/9 SetCursorPosition method\r\nHooked d3d8/9 AddRef / release methods (for logging)\r\nFixed D3DDevice8/9 hooking\r\nHooked QueryPerformanceFrequency\r\nFixed a bug in d3d7 hooking\r\nGUI: added desktop color setting\r\n\r\nv2.02.50\r\nAdded \"Intercept RDTSC\" option: so far, tested on Unreal Tournament only.\r\nTo implement RDTSC detection, I owe a big thank you to Olly who shared the disasm lib used to browse the assembly code.\r\n\r\nv2.02.51/52\r\nHooked window timers: now \"Ed Hunter\" can be time stretched\r\nadded NOFILLRECT debug option\r\nfixed WM_DISPLAYCHANGE handling (x,y swapped coordinates?)\r\nfixed int64 arithmetic for performance counters\r\nAdded (untested !!!) handling for RDTSCP opcode with \"Intercept RDTSC\" option\r\nAdded \"Limit screen resolution\" option: seems necessary for \"Sid Meyer's Civilization III\" to work\r\nImproved initial window coordinate & style handling\r\nfixed virtual screen size showing into status panel\r\nhooked SetPixelFormat, GetPixelFormat, ChoosePixelFormat and DescribePixelFormat to redirect desktop hwnd and make wglCreateContext work (needed for Civ III)\r\nfixed log message for TextOut parameters\r\nhooked DisableD3DSpy (invoked by The Bard's Tale)\r\nfixed extglViewport coordinate remapping when invoked with CW_USEDEFAULT values (Civ III)\r\nfixed bug in DirectDarawCreate/Ex hooking with wrong module handle\r\n\r\nv2.02.53\r\nHandling of ddraw screen color depth 15BPP - in \"Hesperian Wars\"\r\nfixed IAT scanning: now function addresses for remapping are searched in possibly multiple instances of dll text segment - in \"Aaron Hall's Dungeon Odissey\"\r\nhooked SystemParametersInfo call\r\nfixed window size logic to check for window menu bar, considering also the WS_CHILD case.\r\nfixed window move/resize when message processing is enabled: coordinates outside the child area or within ENTER/EXITSIZEMOVE must NOT be altered.\r\nexpanded timer processing to include user32 Set/KillTimer - in \"Aaron Hall's Dungeon Odissey\"\r\nfixed possible recursion while hooking child window procedure identical to parent's one\r\nfixed gdi emulation on top of ddraw surface, enough to play \"Sid Meyer's Civilization III\".\r\n\r\nv2.02.54\r\nfixed a bug in d3d GetAvailableVidMem that was causing too many troubles...\r\nfixed a bug in Suppress IME option\r\nfixed a bug in handled library list, possibly affecting d3d/d3d7 games\r\navoid fixing window style for non-desktop windows (fixed a Port Royale 2 bug)\r\neliminated \"Disable HAL support\", no longer necessary\r\nsome incomplete work on gdi game handling\r\nadded preliminary, incomplete (not working) glide handling\r\n\r\nv2.02.55\r\nadded \"Hide desktop background\" video option\r\n\r\nv2.02.56\r\nhooked RegisterClassA API (useless so far...)\r\nfixed bug in SendMessageW hooking: caused truncated text in window titles and form captions\r\nfixed several d3d1-7 hooks: prevented some d3d games to properly work, i.e. \"Thief the Dark Project\"\r\nfixed d3d GetDisplayMode to return virtual desktop size - fixed \"Affari Tuoi\", an italian game.\r\nfixed some log messages\r\n\r\nv2.02.57\r\nfixed WS_NCCALCSIZE & WM_NCPAINT messages to ensure a proper window's border and size - fixed Black Thorn window problems\r\nfixed \"Hide desktop background\" flag \r\n\r\nv2.02.58\r\nAdded Automatic DirectX mode: not workink always, but should make it much easier to guess a proper surface setting.\r\nAutomatic mode allows dynamic mode change depending on the situation: it is necessary for Populous 3 D3D version.\r\nfixed BltFast operation with SRC color key (often used to draw cursor from texures) directly to primary surface: this makes the cursor visible in Populous 3.\r\nminor fixes on logging\r\n\r\nv2.02.59\r\nfixed IDIrectDraw reference counter for ddraw release 1 session: fixes \"Warhammer 40K Rites Of War\" first screen\r\nfixed QueryPerformanceCounter handling: fixes \"New York Racer\" time stretching problems\r\n\r\nv2.02.60\r\nfixed time stretching to handle Total Soccer 2000\r\nfixed ZBUFFER surface creation to handle GOG Incoming troubles on some cards\r\nfixed handling of special effects (wireframe, no fogging, zbuffer always) to be valid on all d3d versions\r\n\r\nv2.02.61\r\nadded directx \"Compensate Flip emulation\" flag: used primarily to get rid of mouse artifacts due to emulated Flip rpocedure in windowed mode. Fixes Gruntz issues and some other games...\r\n\r\nv2.02.62\r\nfixed d3d7 CreateDevice hook and d3d7 rendering options (wireframe, disablefogging, zbufferalways)\r\nfixed doublebuffer emulation - avoid returning the backbuffer when zbuffer is requested. Fixes rendering problems of many games!\r\n\r\nv2.02.63\r\nfixed d3d hooking for Reset and GetDirect3D methods: now Jumpgate works at any available resolution, and the \"Add proxy libs\" option is no longer necessary\r\nfixed \"Compensate Flip emulation\" option for non emulated surface mode: fixes mouse artifacts for \"Rogue Spear Black Thorn\" \r\nadded preliminary handling for \"Disable Textures\" option\r\n\r\nv2.02.64\r\nGUI: implemented multiple file import\r\nDLL:\r\nfixed a ddraw session reference count error that prevented \"Jet Moto\" to start\r\nfixed \"Compensate Flip emulation\" for ddraw7 games: now \"Empire Earth\" supports this flag.\r\nfixed CloseWindow hook: now games that minimize/restore the main window on task switch can possibly recover (e.g. Hundred Swords)\r\nfixed process hook: now it should be a little more robust and efficient. Hopefully should fix some Macromedia Flash problems.\r\nfixed IDDrawSurface::Lock() prototype. Not gameplay improvements, though...\r\nadded DirectX \"Return 0 ref counter\" option as quick & dirty solution to many reference counter problems!\r\nfixed DirectDrawCreateEx failing to register the main ddraw session handle\r\nfixed palette problem in emulated mode: palette must be applied to backbuffer surface as well. Now \"Duckman\" and \"Total Soccer 2000\" show perfect colors.\r\n\r\nv2.02.65\r\nadded \"Fine time adjust\" flag to finely set timeslider by 10% steps ranging from about :2 to x2\r\nfixed a bug in DWORD timers introduced in v2.02.60: now \"Warcraft 2\" timing works again\r\nrevised logit to calculate delays to emulate VSync timing - now should be more accurate and depending on actual screen refresh rate\r\n\r\nv2.02.66\r\nfixed palette bug: \"Virtua Fighter PC\" now shows correct colors.\r\n\r\nv2.02.67\r\nfixed log for D3D CreateDevice method, missing in some D3D interface versions\r\nadded wildcarded program path: now you needn't set the full pathname, but it is sufficient to specify the rightmost part, e.g. the executable filename.\r\nadded emulated mode color conversion from 32BPP to 16BPP. Despite the fact that the best way to run a 32BPP game is against a 32BPP desktop, now it is possible to downgrade 32BPP colors to 16BPP. This fixed the fact that 32BPP games run on a 16BPP desktop showed simply black screens (e.g. Baldur's Gate II)\r\nfixed logic for EnumDisplayModes implementation: now screen resolutions and, for emulated mode only, also color depth, are generated by DxWnd and not derived directly from the real ones. This make it possible to fake support for very low screen resolutions (e.g. 320x200) on modern screens that support them no longer. This make \"Genocide\" running on both supported resolutions 320x200 and 320x240.\r\n\r\nv2.02.68\r\nadded screen resolution choice: either a set of SVGA resolutions (mostly for 3:4 monitors), HDTV resolutions (mostly for 16:9 monitors) or the native set of resolutions offered by your monitor / video card.\r\n\r\nv2.02.69\r\nimproved exception catching to intercept memory violation exceptions and to neutralize offending code. Thank again to olly didasm lib, now the assembly instruction length is automatically determined so that the opcode can be replaced by the correct number of NOP instructions. If this doesn't mean much for you, just consider that this makes playable the Win95 (patched) release of \"Star Wars Tie Fighter\".\r\nfixed FillRect user32 call - brings some improvements to Imperialism (still far from being acceptable).\r\n\r\nv2.02.70\r\nGUI:\r\nfixed saving wrong coordinates when dxwnd is terminated while minimized\r\nadded check for adminstrative capabilities on startup\r\nDLL:\r\nfix: moved DrawText/Ex api hooks into right library\r\nfix: corrected child window procedure handling - fixes \"Imperialism\" child window closing \r\nfixed FillRect coordinate handling - fixes \"Imperialism\" menus\r\nfixed SetWindowPlacement handling\r\n\r\nv2.02.71\r\nfix: Set/GetWindowLongA/W are always hooked.\r\nfix: added user32 GetDCEx hook for GDI Emulation & Directraw mode\r\nfix: hooked \"FrameRect\", \"TabbedTextOutA\", \"DrawTextA\", \"DrawTextExA\", \"FillRect\" in scaled mode only\r\nfix: FIXNCHITTEST mode\r\nfix: when main win is closed, blit area is made null to avoid messing with a wrong screen area\r\nadded \"Release mouse outside window\" option. This option causes the get cursor position to detect a centered mouse position when the cursor is moved outside the window, allowing interaction with other windows without scrolling ot the windowed program. Mainly, this option is meant to help people with a physical disability to use other programs (e. g. the virtual keyboard) to play games.\r\nadded \"Launch\" field (optional) to start the program with arguments or a separate task\r\n\r\nv2.02.72\r\nfix: fixed Launch field used with \"Use DLL injection\" flag\r\nfix: somehow improved \"Use DLL injection\" to avoid blocked tasks and allow exception handling\r\n\r\nv2.02.73\r\nAdd: preliminary support for (unchecked) \"Run in window\" flag. Now if the flag is unchecked, DxWnd does NOT force the program to run in a window. Still, some rendering modes are not working perfectly.\r\nadd: support for Unicode DefWindowProcW API call\r\nfixed some differences in D3D CreateDevice vs. CreateDeviceEx handling\r\nadded \"Window frame compensation\" input flag to set the cursor position properly in \"Sub Commando\"\r\nfix: properly handled the case of NULL WindowProc routine in CreateDialog/Indirect API calls. Makes \"LEGO Stunt Rally\" working.\r\nadded support for Unicode SystemParametersInfoW API call\r\n\r\nv2.02.74\r\nAdd: API hot patching, thank to aqrit precious support. Now Doom 3 is played in window.\r\nhooked GetCursorInfo call\r\nfix: recalculate vsync timers in case of time stretching\r\nfix: log failure for CreateWindowExW wchar api\r\nAdd: configurable keyboard commands\r\nAdd: timestretch toggle command\r\nAdd: \"Enable hotkeys\" flag to enable/disable hotkeys\r\nfix: eliminated dialogs with timer warning messages (to be investigated...)\r\nfix: moved \"no banner\" flag to main tab again\r\nfix: potential string violation, possible cause for flash crash?\r\n\r\nv2.02.75\r\nHooked D3DDevice::ShowCursor method to apply force show/hide cursor (preliminary...)\r\nfix: dynamic allocation for WndProc stack to eliminate predefined limit of 256 entries. Star Wars Rebellion uses more than 256.\r\nadded: \"Suppress D3D8/9 Reset\" flag\r\nfix: improved show FPS and Time Stretch overlay so that the two overlays won't overlap each other\r\nfix: bug in ddraw \"Locked surface\" mode preventing output on screen\r\nfix: fixed bug in critical common portion of the code that was crashing even unhooked programs (namely, Flash Player, ...)\r\n\r\nv2.02.76\r\nfixed and enhanced several features about registry emulation: added flags \"Emulate registry\" (to add missing entries) and \"Override registry\" (to fake existing entries with different values). Fixed \"Requiem Avenging Angel\" DirectX bogus check bug.\r\nfixed bug in emulate surface palette handling affecting \"Requiem Avenging Angel\" colors\r\n\r\nv2.02.77\r\nGUI: added program icon display\r\nfix: some log messages\r\nfix: handling of GetProcAddress D3D9 api \r\nfix: handling of EMULATEBUFFER option - fixes \"Star Trek Birth of the Federation\" \r\nfix: expanded hot patching scope - now can handle QueryPerformanceCounter and fix time stretching on obfuscated version of \"Wind Fantasy SP\"\r\nadded logging in D3DDevice9::GetAdapterIdentifier \r\n\r\nv2.02.78\r\nfix: hooked D3D8/9Device::BeginStateBlock\r\nddraw API hot swappable\r\nlog: helper for ChangeDisplaySettings() flags\r\nfix: hot patch handling of loaded modules\r\nlog: fixed some messages with no line ending for GetObjectType()\r\nd3d begin of code reorganization and cleaning\r\nole32, user32 API hot patched\r\nhandling of DWL_DLGPROC message \r\n\r\nv2.02.79\r\nfix: recovered capability to \"pin\" ddraw and d3d calls\r\n\r\nv2.02.80\r\nPreliminary multilanguage release, english and chinese, many thanks to gsky916 support\r\nfixed Sleep bug for small delays and accelerated timeshift: fixes \"Wind Fantasy SP\" reported bug\r\nadded log for DirectInput::SetCooperativeLevel flags\r\nfixed flip emulation mode when backbuffer is lost: fixes cursor problems in \"HellCopter\"\r\nfixed Pitch setting in DirectDraw::EnumDisplayModes when in SVGA emulation mode. Let \"Outlive\" use this setting\r\n\r\nv2.02.81\r\nfix: hooked GetMonitorInfoA/W that is a possible way to get the screen resolution. The hooker sets the virtual screen size  updating both rcWork & rcMonitor rects in the MONITORINFO structure. This fixes the mouse control in \"Tomb Raider Underworld\" and likely in other games with a similar engine.\r\n\r\nv2.02.82\r\nfix: completed chinese translation and language selection through dxwnd.ini file.\r\nadded very preliminary (and incomplete) italian translation for debugging.\r\n\r\nv2.02.83\r\nfix: small error in one coordinate scaling procedure\r\nfix: completed translation in italian (just for testing....)\r\nfix: added palette window activation in icon tray menu\r\nfix: supppressed BackBuffer release within D3D7:CreateDevice: this makes \"Tetris Worlds\" fully playable\r\nadd: build-in check for compatibility modes set!\r\n\r\nv2.02.84\r\nfix: removed extra reference to ddraw session causing window movements on fullscreen game exit: fixes another \"Wind Fantasy SP\" reported bug\r\n\r\nv2.02.85\r\nfix: revised handling of d3d D3DFORMAT field: fixes \"Call of Cthulhu DCotE\" color problems\r\nfix: added recovery for rounded child win coordinates: fixes blitting problems in Diablo when win size is not an exact multiple of native resolution.\r\n\r\nv2.02.86\r\nfix: thank to aqrit's research, hooked and hanlded user32.dll GetUpdateRgn API. This fixes refresh and crash problems in Diablo & Hellfire.\r\nadded bilinear filtering to directdraw palettized 8BPP emulated mode (where it is mostly needed!). A must try is \"Genocide\" !\r\n\r\nv2.02.87\r\nattempt to fix Win8 missing support for earlier ddraw releases (Croc legend of the Gobbos, Project I.G.I., ...)\r\nfix: optimized bilinear filtering with no horizontal / vertical sawtooth artifacts\r\nadded support for 16BPP and 32BPP desktop bilinear filtering\r\nsuppressed compatibility checking\r\nfix: doubled default window size when bilinear filtering is active\r\nadded repositioning of control parent window when main win is moved \r\nadded debug messages about hooked window class and name\r\nfix: ignore IME window when hooking main win, destroy it when requested\r\nfix: ignore HWND_MESSAGE type windows\r\nadded \"Diablo tweak\" compatibility flag for Diablo proper screen update handling. It is a temporary tweak waiting to understand better how to properly manage it.\r\n\r\nv2.02.88\r\nfix: DIABLOTWEAK flag defaulted to FALSE\r\nadd: CLEARTARGET flag - forces a Clear CLEAR_TARGET operation on D3D BeginPaint: useful in combination with wireframe mode.\r\nupdated \"Optimize CPU\" behavior: now it emulates a VSync wait also on D3D8/D3D9. Fixes some \"swimming\" problem in \"Soul Reaver 2\", and saves CPU time by limiting the FPS to the refresh rate.\r\nfixed positioning of FPS and time stretching indication on screen overlay\r\ncleaned up GUI project: no more japanese and localized resources, no more unreferenced resources.\r\nGUI: added Desktop status window\r\nGUI: added pixel format descriptor to DxWnd status\r\n\r\nv2.02.89\r\nfix: added SVGA 512x384 video mode. Necessary for \"Outcast\" loading screen.\r\nfix: using WINNLSEnableIME call to suppress IME window. \r\nfix: improved some logging\r\n\r\nv2.02.90\r\nadded: \"Filter winposchange messages\" flag - needed for \"RollerCoaster Tycoon / Deluxe / II\" games\r\nfix: correct handling of texture surfaces for \"Zoo Tycoon\" in surface emulation mode.\r\nfix: handling of GDI32.dll calls in GetProcAddress\r\nfix: improved logging\r\nfix: GetRgnBox hooking moved to normal window processing, to handle RollerCoaster Tycoon series.\r\nadded: GetTempFileName fix to handle Win95 differences. This makes \"Powerslide\" playable.\r\n\r\nv2.02.91\r\nfix: bug in bilinear filtering mode causing possible game crashes when blitting partial rectangles (es. Age of Empires II cursor)\r\nadded: AERO friendly mode - brings AERO compatibility and incredible performance boost for ddraw games in surface emulation mode\r\n\r\nv2.02.92\r\nfix: \"Keep aspect ratio\" fixed for AERO environment\r\nfix: improved \"Oprtimized for AERO mode\" compatibility, both when set / unset.\r\nfix: Skip / Limit FPS now acting on full scren blits only. For instance, they no longer slow cursor sprite.\r\n\r\nv2.02.93\r\nfix: handling of primary / backbuffer surfaces when DDSCAPS_3DDEVICE is set (es. Fifa 99 in Direct3D mode)\r\n\r\nv2.02.94\r\nfix: handling of \"Keep aspect ratio\" for aspect ratios different from 4:3\r\nfix: missing resolution 400x300 in \"Limit resolution\" handling\r\nfix: surface handling switch in automatic mode. \r\nadded two flags for DDSCAPS_SYSTEMMEMORY handling on different contexts. Added extra performances and compatibility with D3D in emulated mode.\r\nadded \"Updated bigger than 1/4 screen size\" flag, to perform FPS counting or limitations upon substantial screen updated (heuristic: bigger than 1/4 of the total size...)\r\nadded true bilinear filter. Previous one was renamed as fast 2x filter (BILINEAR2XFILTER).\r\nfix: when the window was minimized & the \"do not notify on task switch\" flag was on, the game crashed. Now the blitting operations to invalid rect coordinates are suppressed.\r\nfix: debug option \"highlight blit to primary\" was causing game crashes when the updated rect was too little. \r\nfix: trapped sporadic CloseHandle(hMenu) crashes in a try/catch clause.\r\nfix: attempt to fix FIXD3DFRAME option\r\nfix: added SetStretchBltMode(hdc,HALFTONE) to SetDIBitsToDevice hooker to improve stretching: fixes \"Celtic Kings Rage of War\"\r\n\r\nv2.02.95\r\nfix: handling of limit resolution field\r\nfix: FPS handling to screen updated made by SetDIBitsToDevice\r\nfix: PeekMessage implementation with \"Peek all message in queue\": fixes \"Shadow Watch\"\r\nfix: missing hook to CreateProcess - needed for \"Suppress child process creation\".\r\nfix: exception for bilinear filtering applied to certain games (e.g. \"Shadow Watch\")\r\n\r\nv2.02.96\r\nfix: FPS inticator on window title was causing the program to become irresponsive (partial fix)\r\nfix: proper setting of ddraw surface capabilities will allow primary surface emulation for most D3D1-7 games\r\nfix: missing initialization of variables in screen size limit handling\r\nfix: processing of mouse messages \r\nfix: GetSystemMetrics and LoadLibrary* calls hooked by hot patching to fix \"Wind Fantasy SP\" movie problems\r\nfix: completed winmm multimedia api hooking to fix \"Wind Fantasy SP\" movie problems, and not only....\r\nfix: revised FPS control to assure more stable fps when a FPS limit delay is set \r\n\r\nv2.02.97\r\nfix: mouse black trails in \"Deadlock II\"\r\nfix: missing default value for filter mode\r\n\r\nv2.02.98\r\nfix: better ddraw surface handling - now  \"Darkened Skye\" runs in emulated surface mode with perfect colors\r\nfix: fixed RDTSC opcode search loop - fixed time stretching for \"Ubik\"\r\nadd: added \"Peplace privileged opcodes\" flag - makes unpatched \"Ubik\" run\r\nfix: revised ddsurface capabilities policy to allow D3D1-7 games to run in emulated mode and bilinear filtering\r\n\r\nv2.02.99\r\nfix: completed bilinear filtering for 16bpp desktop color depth\r\nfix: fixed surface handling, Suppress SYSTEMMEMORY options now moved to debug flags (maybe unnecessary)\r\nfix: AERO compatibility is now declared just once\r\nfix: fast bilinear blitting in the 32 -> 32 BPP case\r\nadd: texture hooking\r\nadd: texture management\r\nadd: Direct3D dedicated configuration tab\r\n\r\nv2.03.01\r\nfix: fixed some bitmap handling while processing textures\r\nadd: texture management dump to texture.out folder and hack from texture.in folder\r\nfix: AERO optimized mode with ddraw7 only surfaces: \"Hoyle Casino Empire\" works at least in fullscreen mode.\r\nfix: bilinear filters compiled with optimized and openmp flags - big speed improvement.\r\nfix: reduced the maximum amount of visible video card with \"Limit available resources\" flag: now \"Breath of Fire IV\" works.\r\n\r\nv2.03.02\r\nfix: when creating an IID_IDirectDrawGammaControl object through lpdds->QueryInterface redirect fake primary surface to real one to make the object working. Fixes \"Might & Magic 7\"\r\nfix: fixed logging of ddraw Set/GetGammaRamp methods. Added SUPPRESSDXERRORS error suppression\r\nadd: texture extraction parameters (min & max x,y size) in dxwnd.ini config file\r\nadd: texture extraction / hack made in DxWnd install folder, to allow usage also for games running from unwritable (CDRom) directory\r\nfix: in \"prevent maximize\" mode, set the main window in maximized state. Allow \"Hoyle Casino Empire\" to continue after the intro movie is terminated\r\nadd: Process kill command now warns you about existence of task\r\nfix: DxWnd window position save now works on multiscreen desktop\r\n\r\nv2.03.04\r\nfix: changed surface capability policy so that \"Risk II\" works with identical surface pitches\r\n\r\nv2.03.05\r\nadd: texture dump for d3d8 & d3d9. Note: highlight & hack yet to be implemented. d3d10 & d3d11 yet to be implemented. Texture types not complete.\r\nfix: handling of d3d10 (Assassin's Creed) \r\n\r\nv2.03.06\r\nfix: do not try to set vsync delays on ddraw surface when not created yet \r\nfix: catched several sporadic errors before they could crash the application\r\nfix: GetAttachedSurface() now retrieves a backbuffer from the list, instead of referencing the last one - this fixes \"Tomb Raider III\" GOG release in non emulated mode.\r\nadd: \"Normalize performance counter\" flag to fix an improper use of QueryPerformanceCounter() made by \"Cyber Gladiators\"\r\nadd: \"GDI Color conversion\" debug flag\r\n\r\nv2.03.07\r\nfix: key matching for virtual registry now made case insensitive (needed for \"Die Hard Trilogy\")\r\nfix: handling of null values passed to extRegQueryValueEx as lpType and lpData arguments (needed for \"Die Hard Trilogy\")\r\nfix: DirectDrawSurface::GetPalette returns the virtual palette when applied to virtual primary / backup surfaces (needed for \"Die Hard Trilogy\")\r\nfix: fixed dump for 8BPP palettized textures (needed for \"Die Hard Trilogy\")\r\nfix: handling (with no operation) of D3DFMT_Q8W8V8U8 texture type and other bumpmap formats (used by \"Tiger Woods PGA Tour 08\")\r\nfix: handling of LIMITRESOURCES flag for DirectDraw::GetCaps method when memory exceeds 0x70000000 bytes\r\nfix: handling of LIMITRESOURCES flag for Direct3DDevice::GetAvailableTextureMem method when memory exceeds 1GB\r\nfix: don't change screen resolution in SetDisplayMode when wrong (negative) values are passed. Fixes a problem in binkplayer.exe\r\nfix: fixed OutTrace to avoid possible infinite recursion when loading C runtime libraries and logging LoadLibrary activity\r\nfix: eliminated critical races when using DLL injection, thank to Luigi Auriemma's suggestion (inject an endless loop in the main thread and remove it at the end of injection)\r\nfix: implemented DLL injection according to Luigi Auriemma's schema in CreateProcess hooking routine (needed for \"Die Hard Trilogy\")\r\nfix: using MinHook library to acquire compatibility with all APIs\r\nfix: hooked GetExitCodeProcess to handle \"SUPPRESSCHILD\" special case\r\nfix: using hot patching for SystemParametersInfo APIs\r\nfix: in SystemParametersInfo suppressed invalid operations in window mode: SPI_SETKEYBOARDDELAY SPI_SETKEYBOARDSPEED\r\nadd: son process handling with 4 different cases: 2 old cases (default case and \"SUPPRESSCHILD\") plus \"INJECTSON\" and \"ENABLESONHOOK\" to hook the son process without/with DLL injection\r\nadd: debug color conversion mode through GDI routines\r\nadd: multi-hooking for multiple processes contemporarily, adding the line \"multiprocesshook=1\" in [window] section of dxwnd.ini. Use at your own risk!\r\nadd: partial logging of Direct3DDevice::GetDeviceCaps output (to be completed)\r\nadd: handling of notes in the DxWnd GUI (configuration notes tab)\r\nmod: when log is not possible on program's folder, it is no longer written in %TEMP% dir, is now written in DxWnd local dir.\r\n\r\nv2.03.08\r\nadd: \"GDI mode\" ddraw surface handling mode\r\nadd: \"center to window\" option\r\nadd: \"message pump\" input flag - fixes Arxel Tribe games (Faust, Legend of the prophet & assassin, ...)\r\nfix: \"Viper Racing\" crash\r\nfix: \"limit resources\" option for \"Tiger Woods PGA World Tour 08\"\r\nfix: \"limit resources\" option for \"Jeff Gordon XS Racing demo\"\r\nadd: debug \"stress resources\" option\r\nfix: added a couple of directinput diagnostic logs\r\nadd: debug option \"freeze injected son\"\r\nadd: made check for admin rights configurable in dxwnd.ini\r\nadd: \"portable\" capability to configure relative pathnames\r\nfix: small bug in game menu string width - now game titles should not be trunked any longer.\r\n\r\nv2.03.09\r\ncode reorganization & reuse\r\nadd: \"Set texture pixel format\" flag, makes \"Jeff Gordon XS Racing\" working on emulated mode and 32BPP desktop\r\nadd: \"GDI mode\" emulation uses HALFTONE to activate GDI bilinear stretching when \"Full Bilinear\" filter is activated: slower, but better quality\r\nadd: preliminary hooking for EnumZBufferFormats ddraw7 method\r\nfix: eliminated some handle leakage when injecting launched processes\r\n\r\nv2.03.10\r\nadd: real time logging through OutputDebugString\r\nadd: menu command to launch DbgView.exe\r\nadd: support for timestamped logs\r\nadd: \"Erase trace file\" flag\r\nfix: handle leakage for primary hdc, causing rapid performance downgrade\r\nfix: log message reorganization\r\nadd: SetStretchBltMode HALFTONE in GDI mode to provide bilinear filtered GDI stretching\r\nfix: some GDI mode optimization - should bring performances similar to D3DWindower, with similar configuration\r\nfix: GDI mode bug, crashing when blitting from NULL surface (to do a color fill operation)\r\n\r\nv2.03.11\r\nfix: added DDSCAPS_FLIP capability to emulated backbuffer surface. Fixes \"Injection\" missing flips\r\nfix: added high order bit set to kernel32.dll GetVersion() wrapper in case of Win95/98 emulation. Fixes \"Warhead\" frontend program\r\nfix: coordinates returned by user32.dll GetClipCursor() must be scaled accordingly with virtual desktop size. Fixes \"SubCulture\" mouse control problems\r\n\r\nv2.03.12\r\nfix: several issues in fake registry hooks\r\nadd: continue char '\\' in fake registry configuration for hex values\r\nadd: GetClipList ddraw hooker: fixes \"Full Pipe\" blitting coordinates\r\nfix: proper handling of palette reserved entries\r\nfix: dinput GetDeviceData\r\nadd: implemented \"Release mouse outside window\" functionality in dinput calls\r\nfix: now \"Release mouse outside window\" leaves the mouse close to where it left the window\r\nfix: in GUI, keeps memory of last used paths\r\nfix: several log messages\r\n\r\nv2.03.13\r\nadd: integrated printscreen facility with 8BPP paletized dump, activated by \"printscreen\" special key (default Alt-F12)\r\nfix: recovery for lost surfaces (i.e. after a Ctrl+Alt+Del command)\r\nfix: palette display form showing active entries\r\nfix: EnumDisplayModes hook in emulate surface mode\r\nfix: several log improvements\r\n\r\nv2.03.14\r\nadd: window commands Minimize, Restore & Close\r\nadd: made palette behaviour configurable (until better understood...)\r\nadd: \"updatepaths\" tag in dxwnd.ini\r\n\r\nv2.03.15\r\nfix: keep aspect ratio calculations\r\nfix: d3d Present method, to properly scale to window size (fixes \"Silent Hunter III\" rendering)\r\nfix: GetMonitorInfo hooker: in windowed mode the call may fail, a virtual size and ok retcode should be returned\r\nfix: Blt method recovering errors when D3D CreateAdditionalSwapChain method fails: allow to see the intro movies of \"Silent Hunter III\".\r\nfix: added some missing D3D errorcode labels in log file\r\n\r\nv2.03.16\r\nfix: MapWindowPoints hook - added coordinate scaling (fixes \"NBA Live 99\" components size and position)\r\nfix: using \"Suppress D3D8/9 reset\" sets the backbuffer area as large as the whole desktop to avoid clipping\r\nadd: added \"Unlock Z-order\" flag to avoid window to stay locked on top of z-order (useful for \"NBA Live 99\")\r\nadd: added \"EA Sprots hack\" flag to suppress some interfering hooks set by EA games internally (useful for \"NBA Live 99\")\r\n\r\nv2.03.18:\r\nfix: eliminated direct output to primary surface, causing more troubles than goods (\"Divine Divinity\" flickering...)\r\nfix: handled CoCreateInstance calling CoCreateInstanceEx in hot patch mode.\r\nfix: eliminated InvalidateRect calls in ddrow Unlock hooker: this is not the right way to fix \"Deadlock II\", sorry.\r\nfix: DirectDrawEnumerateEx log\r\nfix: cursor is hidden in fullscreen mode only\r\nfix: CoCreateInstance & CoCreateInstanceEx wrappers. Now \"Crusaders of Might & Magic\" is playable in window\r\n\r\nv2.03.19:\r\nfix: scaling of movie coordinates rendered through MciSendString \r\nfix: doubled rendering to screen with fast 2x bilinear filtering\r\nfix: crash when setting \"showFPS overlay\" with DirectX \"hybrid mode\"\r\nfix: \"keep aspect ratio\" with DirectX \"GDI mode\"\r\nfix: when ddraw hook is set to \"none\", no hook operations are performed on ddraw\r\nadd: possibility to control the D3D8/9 SwapEffect field with the \"force swap effect\" flag\r\nfix: revised handling of GDI device context shared with DirectDraw primary surface, improved behaviour of \"Star trek Armada\"\r\n\r\nv2.03.20:\r\nfix: revised hookers for kernel32 GetVersionExA/W api, adding support for dwPlatformId field\r\nfix: texture handling for texture dump/hack/highlight\r\nadd: \"Reserve legacy memory segments\" compatibility flag, needed for \"Crusaders of Might & Magic\" \r\nadd: preliminary support for ddraw7 DirectDrawCreateClipper api\r\nadd: \"Suppress main window destruction\" flag, to make \"Prince of Persia 3D\" playable\r\nfix: fully revised ddraw surface handling in d3d1-7 versions. Now \"Might & Magic IX\" is supported\r\n\r\nv2.03.21:\r\nfix: full re-design of ddraw \"special\" surface management (primary & backbuffer): greater compatibility for emulation mode\r\nfix: GDI edit window positioning for \"Imperialism\" city name selection\r\n\r\nv2.03.22:\r\nmore code reorganization and cleanup\r\neliminated GDI over directdraw emulation (MAPGDITOPRIMARY flag)\r\nadd: support for texture D3DFMT_L8 dump (\"Turok\")\r\nfix: eliminate a possible divide by zero error\r\nfix: avoid intercepting WindowProc routines when set to special values 0xFFFFxxxx - makes \"The Hulk\" demo working\r\n\r\nv2.03.23:\r\nfix: implemented the correct interface of registry query calls that can be used to know the key data length \r\nfix: hexdump routine with NULL input used in registry operation log was causing crash\r\nadd: preliminary hooking for user32.dll desktop routines, like CreateDesktop() - makes \"STCC Swedish TouringCar Championship\" working\r\n\r\nv2.03.24:\r\nfix: added missing log for RegSetValueEx key value when type is REG_SZ (string)\r\nfix: handling of DDERR_SURFACEBUSY error in blit operations, recovers \"Virtua Cop\"\r\nfix: several changes in palette handling, improve (but don't fix!) \"Man in Black\" palette rendering\r\nfix: EnumDisplayMode hooker, passing wrong vodeo modes to the callback routine. Fixes \"Total Annihilation Kingdoms\" crash\r\nfix: DxWnd GUI build with very large width, causing slow interface responsiveness.\r\nadd: added the \"Suppress Release on backbuffer\" that makes \"Tetris Worlds\" working, avoiding to release the backbuffer surface too many times.\r\n\r\nv2.03.25:\r\nfix: CoCreateInstance hooking for IDirectDraw interface: fixes \"Darius Gaiden\"\r\nfix: BackBufferCaps value for NOSYSTEMEMULATED option. Fixes \"Forsaken\" crashes in AERO mode.\r\nfix: GDI GetDC and GetWindowDC must not redirect the zero hWnd to the current main window if not in fullscreen mode.\r\n\r\nv2.03.26:\r\nadd: Added \"Set KEY_WOW64_64KEY flag\" flag to registry operations. It could prove useful for old programs on recent W64 platforms.\r\nadd: Added \"fix movies color depth\" flag. It fixes some problems when windows multimedia functions detect and process the actual video color mode and they should rather consider the virtual value. Fixes \"Killing Time\" intro movies decoding.\r\nfix: suppressed hooking for comdlg32.dll module. Common dialogues never need to be altered. Fixes \"Road Rash\" save/load game dialog problems.\r\n\r\nv2.03.27:\r\nadd: dxwnd proxyes to get standalone windowed mode (ask for instructions)\r\nfix: added SetAppCompatData(1, 0) to AERO compatibility for lock operations - improves AERO compatibility, e.g. \"Age of Empires\" intro movie\r\nadd: added \"Disable max window mode\" flag for better compatibility with Win8/8.1\r\nfix: cleaned up some opengl hooking code. Mind possible regressions ....\r\n\r\nv2.03.28:\r\nadd: added \"Lock / Unlock pitch fix\" flag to compensate for pitch change in emulation mode. Fixes \"Snowboard racer\" slanted graphic\r\nadd: added \"Width not power of 2 fix\" flag to compensate for pitch change in emulation mode. Fixes \"Microsoft Midtown Madness\" slanted graphic\r\nadd: debug flag \"Highlight Locked surfaces\" to highlight service surfaces that are Lock-ed and Unlock-ed.\r\n\r\nv2.03.29:\r\nfix: wrong d3d7 hook, now \"Echelon\" works again.\r\nadd: \"hide taskbar\" option. A little experimental, so far. If the game crashes, the taskbar may not be reactivated: use menu commands to recover.\r\n\r\nv2.03.30:\r\nfix: reset for flipped DC retrieved from ddraw interface after ddraw creation. Fixes \"Powerslide\".\r\nadd: added \"Send WM_ACTIVATEAPP message\" flag: fixes \"Championship Manager 03 04\" mouse and \"Thorgal\" lock\r\nfix: FillRect hooker. Good for \"Premier Manager 98\" and \"Premier Manager 97\".\r\nfix: revised the DDSCAPS_SYSTEMMEMORY suppression, now separated for primary & backbuffer surfaces\r\n\r\nv2.03.31:\r\nfix: handling of \"No SYSTEMMEMORY on BackBuffer\" flag for no-emulation mode: necessary to run \"Microsoft Motocross Madness 2\" in this mode.\r\nfix: allowing hot patching to GetCursorPos() user32.dll call. This allows correct mouse control with obfuscated exes, like the chinese RPG \"Paladin 3\".\r\n\r\nv2.03.32:\r\nadd: flags \"Ask confirmation on window close\" and \"Terminate on window close\"\r\nfix: implemented surface stack cleanup on overflow: this should allow \"European Air War\" to run through several seasons.\r\ndebug: added a few diagnostic messages to trap possible errors in DLL injection functions\r\nfix: recovered the menu Edit->Add command that went disabled\r\n\r\nv2.03.33:\r\nadd: new surface handling, more similar to D3DWindower. The previous mode can be activated by setting the \"Flip emulation\" flag. The new mode can successfully manage \"Microsoft Motocross Madness 2\".\r\nfix: Reelease operation for primary surface when used for GDI GetDC operation\r\nfix: protections for GDI ReleaseDC operations against null window or DC\r\n\r\nv2.03.34:\r\nfix: handling of real primary/backbuffer surfaces in non-emulated modes and WinXP: now uses system memory if possible, video memory otherwise. \r\nfix: simulation of backbuffer attach in non emulated modes.\r\nfix: mciSendString hooker, was losing a final command line argument\r\n\r\nv2.03.35:\r\nadd: added \"Set ZBufferBitDepths capability\" flag to set a no longer supported fields in the capability structure. This makes \"\"Banzai Bug\" bypass the capability checks.\r\nfix: better handling of surface capabilities in flippable mode\r\nfix: fixed bug in primary surface handling when already created ...\r\nadd: added \"\"Share ddraw and GDI DC\" flag: sharing was introduced in release v2.03.19, but proved to be incompatible in many situations. Now it is off by default and enabled when necessary.\r\nfix: the flags for disabling DDSCAPS_SYSTEMMEMORY capability are now used also in non-emulated flipping emulation mode. Depending on the video card, it may help getting compatibility.\r\nfix: handling of NULL DC in non emulated modes: the NULL DC (corresponding to the whole desktop) is replaced by the window DC. This reduces problems like clearing the whole desktop.\r\nfix: EnumDisplayModes was returning wrong modes list in SVGA mode.\r\nfix: applied the error suppression to the DeleteAttachedSurface hooker.\r\nfix: hooked User32 CreateRectRegion/Indirect calls. \r\n\r\nv2.03.36:\r\nfix: fixed \"fix movies color depth\" flag for color depths greater than 8BPP. Fixes the \"Horde 2 the Citadel\" intro movie.\r\nadd: added the \"Set KEY_WOW64_32KEY flag\" flag to prevent registry redirection for win32 applications\r\nadd: virtual registry configuration integrated in DxWnd configuration and exported files\r\nadd: hooking of RegEnumValue() call. Useful for \"Star trek Generations\"\r\nfix: fixed mouse handling through \"Message processing\" option for child windows. Fixes \"Star Trek Armada\" mouse problems\r\nfix: fixed GetDC hooker for child windows. Fixes some \"Star Trek Armada\" graphic problems\r\nfix: CreateCompatibleDC hooker printing wrong error messages in normal conditions\r\nfix: fixed DrawText, DrawTextEx hookers returning wrong RECT structure. Fixes \"Star Trek Armada\" text placement problems\r\nadd: completed log messages for DrawTextEx, CreateDialogParam, DialogBoxParam and CreateDialogIndirectParam\r\n\r\nv2.03.37:\r\nadd: handling of RegEnumValue advapi call in virtual registry. Useful for \"Star trek Generations\"\r\nadd: virtual registry now integrated in dxwnd.ini configuration and activated automatically. No more handling of dxwnd.reg file\r\nfix: virtual registry optimization, code reorganization, bug fixing ....\r\nadd: \"Stretch ActiveMovie window\" flag. Fixes \"The Thing\" intro movies.\r\nfix: apply \"Blit from backbuffer\" option to both surface emulated and non emulated cases. Should help fixing \"Galapagos\" screen locks.\r\nfix: apply \"Limit screen resolution\" to the list of detected video modes in VGA emulated case\r\nfix: eliminated \"Automatic\" surface emulation mode, no longer supported\r\nfix: fixed InvalidateRect rectangle: avoids flickering in \"Microsoft Pandora's Box\"\r\nadd: added \"Bypass MCI calls\" flag. \r\n\r\nv2.03.38\r\nfix: handling of WM_ACTIVATE and WM_NCACTIVATE messages, should bring the window to HWND_NOTOPMOST z-order position only when activation is on, not off!\r\nfix: in \"Share GDI and draw DC\" mode, check if the primary surface really has a DC and switch to another one if the DC is missing.\r\nfix: eliminated some redundant code in GDI ReleaseDC in DC emulated mode\r\n\r\nv2.03.39\r\nadd: \"Fix glPixelZoom args\" flag to scale images rendered by OpenGL through GDI. It is needed for \"Strength and Honor\".\r\nadd: \"Reuse emulated DC\" flag to optimize GDI emulation. experimental.\r\n\r\nv2.03.40\r\nfix: detecting main window when setting FULLSCREEN mode against it. Helps handling \"Reah\"\r\nadd: option to de-interlace videos on 16BPP to 32BPP color transformation. Required for deinterlacing \"11th Hour\" movies\r\nadd: cornerized mode, could help handling Battlenet GDI menus\r\nadd: preliminary implementation of virtual desktop window. Useless so far.\r\nfix: hooked more GDI calls: CreateICA, GetViewportExtEx, IntersectClipRect, SetRectRgn\r\nfix: ChangeDisplaySettings no longer take note of video mode when called with CDS_TEST flag\r\nfix: merged user32 FillRect and FrameRect handling\r\nfix: fixed bug that was leaving a copy of dxwnd.ini on last visited directory on window close\r\n\r\nv2.03.41\r\nfix: filtering of mouse messages in \"Message pump\" option. Makes games more responsive to mouse clicks. Improves \"X-files\".\r\nfix: exclusion of DDSCL_SETDEVICEWINDOW, DDSCL_CREATEDEVICEWINDOW and DDSCL_SETFOCUSWINDOW flags in ddraw SetCooperativeLevel windowed mode\r\nfix: guess PRIMARY surface in ddraw1 when no flags (but BACKBUFFERCOUNT) are set. Necessary for \"Star Force Deluxe\"\r\ndelete: suppressed frame compensation option FRAMECOMPENSATION (unused).\r\nadd: added debug flag NOWINDOWHOOKS to avoid WindowProc hook.\r\nfix: GetPaletteEntries hook returns 256 value against hpal=NULL. Let \"M.I.B.\" run, though palette is still not ok.\r\nfix: StretchDIBits hook no longer can return an unassigned value\r\nfix: anti-recursion check in DialogBox WindowProc call\r\n\r\nv2.03.42\r\nadd: option \"Syncronize GDI and DDRAW palette\" - fixes \"Man in Black\" palette problems\r\nadd: apply \"Remap MCI coordinates\" options also to movies rendered through MCIWndCreate: fixes \"Man in Black\" movie problems\r\nfix: fixed InvalidateRect hooker logic - fixes \"Imperialism\" graphic.\r\n\r\nv2.03.43\r\nfix: eliminated SYSTEMMEMORY usage on DDSCAPS_3DDEVICE surfaces. Needed for \"Arx Fatalis\"\r\nfix: deleted emulation of ZBUFFER attach. Needed for \"Arx Fatalis\"\r\nfix: added emulation of PixelFormat in getPixelFormat hooker. Needed for \"Arx Fatalis\"\r\nadd: added virtual joystick feature. Required to play \"Tie Fighter 95\" with no real joystick\r\nv2.03.43.fix1\r\nfix: recovered virtual joystick buttons\r\n\r\nv2.03.44\r\nfix: GetSystemPaletteUse error message\r\nfix: transparent virtual joystick icons\r\nfix: RealizePalette hooker crash in \"Super Real Mahjong P7\"\r\nfix: complete recoding of GDI BitBlt, StretchBlt and PatBlt hookers: it fixes \"Reah\" problems\r\nfix: changes in USER32 BeginPaint hooker to support DC sharing with ddraw\r\nfix: increased configuration panels heigth do avoid clipping when desktop font size is set to 125%\r\n\r\nv2.03.45\r\nadd: virtual joystick center-lock feature, helps using the mouse as mouse leaving the joystick locked.\r\nfix: revised dinput hooking. dinput8 still to be completed. \r\nadd: option \"Unacquire input devices on focus lost\". Needed for Star wars \"Tie Fighter 95\".\r\nfix: set dinput SetCooperativeLevel flags to DISCL_NONEXCLUSIVE | DISCL_FOREGROUND\r\nfix: fixed CreateIC hooker call method (WINAPI)\r\nfix: emulated Unacquire on virtual joystick. Needed for Star wars \"Tie Fighter 95\".\r\n\r\nv2.03.46\r\nadd: added compatibility options \"Hook GOG libs\" and \"Byass GOG libs\" to manage GOG games\r\nadd: added \"Enable Time Freeze\" timing option and the virtual key \"freezetime\"\r\nadd: command line option /E to terminate exixting DxWnd session\r\nfix: relocation of WS_POPUP windows. Fixes \"Riven\" menu window.\r\n\r\nv2.03.47\r\nadd: added handling of DirectInput8 dinput8.dll\r\nfix: completely revised directinput hooking to manage multiple devices acquire/unacquire\r\nfix: added some dinput error codes to log messages\r\nfix: increased time freeze toggle key hysteresis time to 1 sec to avoid multiple activations\r\n\r\nv2.03.48\r\nfix: set proper surface capabilities for 3DDEVICE surfaces, according to VIDEOMEMORY capability.\r\nadd: \"force clipper\" flag to redirect clipper definition to main window and primary surface\r\nfix: better handling of surfaces on minimize / restore events, mainly on WinXP\r\nfix: proper default values for\"Share ddraw and GDI DC\" and \"Lock/Unlock Pitch Fix\" flags\r\n\r\nv2.03.49\r\nfix: a few improvements in handling NULL lpDDSSource in Blit/Flip operations\r\nadd: option to print relative timing to log\r\nfix: avoid handling textures at level greater than 0 since this seems to cause application crash\r\nfix: restore cursor clipping through WM_SETFOCUS and DefWindowProc when focus is gained\r\nfix: \"One Must Fall Battlegrounds\" keyboard fix - can't SetWindowsHookEx with WH_KEYBOARD and NULL thread\r\n\r\nv2.03.50\r\nfix: check for errors that could cause random GDI cursor clipping regions\r\nfix: more accurate hooking of ddraw pointers - fixes several DD_GENERIC_ERROR in Win8/10 platforms, makes \"SWAT 3\" working\r\nfix: improvements (not finished) in dinput handling\r\nadd: the OS version info is traced in the log file\r\nfix: added cursor clipping when requested on new main window creation\r\nfix: handling of cursor clipping when the window gain/lose focus threough DefWindowProc message handling\r\n\r\nv2.03.51\r\nfix: WinXP select file dialog bug, not appearing if pointing to nonexistent directory\r\nfix: export file bug - now forces the file to have a .dxw extension\r\nfix: eliminated 6 useless fields in dinput handling, now their value is calculated automatically and at runtime\r\nadd: DirectInput / \"Emulate mouse relative movement\". Eliminates the fake clipped regions inside the window (fix Geneforge series)\r\nfix: directinput mouse mode (absolute vs. relative) now correctly checked using the mouse device\r\nfix: attempt to fix FIXMOVIESCOLOR flag for 32BPP target color depth, but it doesn't still work on Win10\r\nfix: directinput RELEASEMOUSE flag applied to mouse device only\r\n\r\nv2.03.52\r\nadd: added Win NT 4.0 to the list of detected OS\r\nfix: DirectInput SetCooperativeLevel: should not change window handle - fix startup error in \"Storm Angel\"\r\nfix: fixed GetWindowRect to replace real desktop with virtual one - fix startup error in \"Storm Angel\"\r\nfix: ddraw hookers keep different original pointers for each interface: fixes several ddraw UNKNOWN_ERROR\r\nfix: eliminated the ddraw full log functionality, because of the increased complexity\r\nadd: added several supported fake screen resolutions - needed for \"Last resort\" SWAT3 mod\r\nfix: used fake resolutions also in USER32 EnumDisplaySettings\r\nfix: avoid hooking directinput dlls if not requested when loaded dynamically\r\nfix: added recovery of lost device in DirectInput GetDeviceData method\r\nfix: changed SetHook so that it can get function pointers without necessarily replacing them\r\nadd: option \"Limit ddraw interface\" to exclude support for IDirectDrawInterface greater than limit (range 1-7)\r\n\r\nv2.03.53(skipped)\r\nv2.03.54 (fix1+2)\r\nadd: syslib shared dc mode preliminary implementation, thank to Narzoul's ideas. Works for \"MS Golf 98\" and \"Deadlock II rel. 1.2\"\r\nfix: handling of cursor hide/show for programs that don't go through the message window (\"Deadlock II rel. 1.2\")\r\nadd: /R:n command line option to automatically start DxWnd in icon tray, run the n-th program in configuration and terminate.\r\nadd: option to disable the disabling of Alt-Tab key through SetWindowHooks through WH_KEYBOARD_LL event. Make it posssible to use Alt-Tab key on \"Dungeon Kepper II\".\r\nfix: palette object reference count decremented from extra references and zeroed by the \"Return 0 refcount\" flag: make it possible to run \"Dark Earth\" that makes a check on the palette reerence counter before starting the game.\r\n\r\nv2.03.55\r\nfix: differentiated handling of blitting from memory to DC vs. from DC vs. memory. The second case is less frequent, but altered the correct rendering of \"Battlezone 1998 edition\", now working both in scaled, emulated DC shared DC and shared ddraw and GDI DC. The fix impacts both BitBlt and ScaledBlt GDI calls.\r\nfix: prevented InvalidateRect to return giving a scaled rect. Fixes \"Deadlock 2\"partial screen updates.\r\n\r\nv2.03.56/fix1\r\nadd: capability to hook calls referenced by ordinal number\r\nadd: \"Acquire admin caps\" flag to self elevate DxWnd if configured as necessary\r\nadd: added third mode to handle potentially offending messages, that is process them by the Window default process routine WinDefaultProc. Good for \"Red Alert 2\".\r\nadd: \"fix clipper area in shared DC\", temporary solution to adapt the shared DC mode to the different situations (yet to finish).\r\nfix: fully integrated the patch for \"Silver\" game: returning backbuffer as a doublebuffer also when requested with DDSCAPS_VIDEOMEMORY caps.\r\nadd: FunkyFr3sh addition to process WM_SYSCOMMAND SC_CLOSE and force program termination when requested by \"Terminate on window close\" option.\r\n\r\nv2.03.57\r\nfix: improved handling of clipping regions in shared dc mode\r\nadd: added DWM status to log file\r\nadd: flags for preliminary hook of DirectSound and Smack libraries\r\nfix: changed icon colors (yellow for red, doesn't suggest the idea of error or danger)\r\nadd: menu commands for entry movement (top, bottom, up, down) or duplication\r\n\r\nv2.03/58\r\nadd: added program manifest stating Win10/8/7/Vista compatibility\r\nadd: \"Clear compatbility flag\" tool\r\nadd: \"Recover screen mode\" tool\r\nadd: \"Set path\" tool\r\nfix: reorganized menu commands\r\nfix: proper handling of DEFAULT win size on CreateWindowEx - fixes \"Imperialism\" problem\r\nfix: fixed stretced blit operation because Blt behaves differently from StretchBlt. Fixes \"3D Minigolf\" partial background\r\nfix: GetPixel logging\r\n\r\nv2.03.59\r\nfix: added extra ref to surface for ddraw version 2: fixes \"Warhammer Chaos Gate\"\r\nadd: view shims menu command, to analyze Win7/Win10 compatibility patches\r\nGUI: added the hook tab to move hooking flags in a single tab page\r\n\r\nv2.03.60 \r\ntoo many things, sorry, I'll fix it later.\r\n\r\nv2.03.61\r\nfix: set hook to ddraw SetPalette for all surface types (Drakan Order of the Flame)\r\nadd: preliminary support for windowed / fullscreen switching\r\nfix: preliminary d3d7 function pointers separation for different interfaces\r\nadd: block process priority class\r\nadd: autohide DxWnd feature\r\nfix: GUI kill process now kills the whole process tree to avoid leaving live processes around. Happens for instance in Win7 with rundll32.exe for compatibility in 64 bit environment, and that one uses a full core CPU!\r\nfix: added CDS_UPDATEREGISTRY to the ChangeDisplaySettings modes to be neutralized. Needed in \"Severance: Blade of Darkness\".\r\n\r\nv2.03.62\r\nfix: flag \"Intercept Alt-F4 key\" now working also alone with no need to set \"Enable hot keys\"\r\nfix: file open dialogs initialization on WinXP platform\r\nfix: hooked ANSI & WIDECHAR version of DirectInput8CreateDevice: makes \"Gooka the Mystery of Janatris\" working.\r\nfix: rebuild up-to-date dxwnd proxies\r\n\r\nv2.03.63\r\nfix: saved config changes in case DxWnd is restarted for acquiring admin caps\r\nfix: duplicated several function pointers in D3D8/9 wrappers: fix some GTA3 crashes and reduce the need to suppress Reset operation\r\nadd: flag \"Widechar program vs. ANSI\" to replace default ansi calls with widechar equivalents: fixes \"Tomb Raider Anniversary\" mouse problems\r\n\r\nv2.03.64\r\nfix: completed the hook pointers separation per COM interface version: this is of growing importance on Win10 because of the system updates (shims?)\r\nfix: fixed incoherences in task refences of the GUI\r\nfix: recovered task kill on WinXP\r\nfix: updated RedrawWindow, now allows better handling of \"Galapagos\" pause screen\r\n\r\nv2.03.65\r\nfix: handling of fullscreen switching on closest monitor (in multimonitor systems)\r\nfix: X,Y starting win position can now be negative integer (in multimonitor systems)\r\n\r\nv2.03.66\r\nfix: terminated the separation between ddraw method interfaces\r\nfix: force clipper now builds a clipper for the real primary surface (useful when desktop composition is disabled and on XP)\r\n\r\nv2.03.67\r\nfix: D3D7 hooks to make NBA2002 working\r\nfix: better virtual color depth settings to allow \"Moto Racer 2\" believe it is running on a fake 16bpp desktop\r\nfix: GUI placement coordinates are not saved when terminating in minimized or maximized state\r\n\r\nv2.03.68\r\nadd: options to limit the cpu usage of program threads, either inconditionally (\"CPU slow down\") or only for CPU consuming threads (\"CPU max usage\").\r\nfix: some logging details \r\n\r\nv2.03.69\r\nfix: fixed \"CPU max usage\" option\r\nfix: WindowFromPoint & WindowFromPointEx hooks\r\nfix: recovered partilly working implementation of \"shared dc\" mode\r\nadd: \"Suppress Win errors\" option, needed to skip a blocking error and make \"Migrosoft Golf '98\" starting\r\n\r\nv2.03.70\r\nadd: ddraw Overlay tracing (waiting to implement an emulation strategy)\r\nadd: SetWindowsHookExA logging, SetWindowsHookExW hooking\r\nfix: MessageHook logging\r\nGUI: some rearrangements / rationalizations to the interface\r\nadd: INIT24BPP and INIT32BPP flags\r\n\r\nv2.03.71\r\nfix: no need to save configuration before running with fake registry\r\nadd: icons to notify for non-empty registry and notes tabs\r\nfix: hooked ddrawex.dll DirectDrawEx methods - fixes \"Whiteout\", what else?\r\n\r\nv2.03.72\r\nfix: inserted bypass for DirectDraw::Compact method, that is unimplemented but can return errors. Fixes \"Crazy Climber\" error detection.\r\nfix: error in d3d9::CrerateDeviceEx method preventing it to work when moving fullscreen devices to window mode, as tipically happens using DxWnd. Fixes d3d9 version of \"Saint's Row the Third\"\r\nfix: accurate determination of \".text\" or \"CODE\" segments where to apply the REPLACERTSC and REPLACEPRIVOPS flags.\r\nfix: error in logic to add extra reference to backbuffer surface: fixes \"Warhammer 40k Rites of War\".\r\n\r\nv2.03.73\r\nfix: address hooking for GDI SetPixelFormat(): avoids resolution changes in \"T-Zwey\" configured for D3D8 rendering engine.\r\nfix: logic for restering last window position on multimonitor configurations\r\nadd: \"Help -> View Help\" to show help page\r\nadd: \"Fix GlobalUnlock\" flag to fix GlobalUnlock bad errorcodes in \"Grand Prix World\" and possibly other games.\r\nadd: revised log configuration, added \"Separate\" mode to make each process to write on a dedicated file.\r\n\r\nv2.03.74\r\nfix: logging of dwFOURCC field text value\r\nfix: Injection routine: avoid closing a few handles that should not be closed, simplified logic.\r\nadd: GUI global configuration panel\r\n\r\nv2.03.75/fix1\r\nfix: handling of restore previous screen mode when a primary fullscreen window is terminated. Fixes \"Dethkarz\" initialization error after 8BPP intro movie termination.\r\nfix: SystemParameterInfo for SPI_SETSCREENSAVERRUNNING does not return an error\r\nfix: added default pixel format specification to backbuffer: improves the possibility of ZBUFFER attach\r\nfix: recovery of DDERR_SURFACELOST error on primary surface in PrimaryStretchBlt routine. \r\nfix: possible palette handle leakage \r\nfix: DC leakage caused by CreateCompatibleDC. Fix \"Mechwarrior 3\" repeated play sessions.\r\nadd: GUI drag & drop of game executables\r\nfix: RegQueryValueEx bad retcode when Data ptr is NULL\r\nfix: recovered support for Windows XP\r\nfix: fake registry did not read last registry line! Fixed.\r\n\r\nv2.03.76\r\nfix: DC handle leakage in several places, this also fixed GDI \"emulated devie context\" mode.\r\nfix: FillRect wrapper, fixed coordinate remapping with wrong values. Fixes \"Imperialism\" menu and detailed view.\r\nfix: suppressed \"reuse emulated DC\" flag: it was no longer referenced in the code.\r\nfix: workaround for occasional DDERR_INVALIDPARAMS error in service GetDisplayMode to detect current video mode.\r\nfix: code cleanup: eliminated CREATEDESKTOP handling, experimental and no longer supported\r\nfix: vdxcore::IsToRemap now detects the NULL dc handle as remappable DC\r\nfix: some logging imperfections\r\nfix: palette log message crashing the program\r\n\r\nv2.03.77\r\nfix: SetCooperativeLevel with 0 HDC should not alter fullscreen status (fixes Portugal 1111 scrolling problem)\r\nadd: preliminary \"Show hints\" flag and feature\r\nGUI: multi-line tab control\r\nGUI: clicking on notes and registry icons the GUI goes straight to the relative tab pages.\r\nGUI: The DirectX tab is now splitted in two, so that there no longer are DirectX switches into the Direct3D tab.\r\n\r\nv2.03.78\r\nfix: DirectDrawSurface::GetCaps now returning VIDEOMEMORY+LOCALVIDMEM type for 3DDEVICES in system memory. Fixes \"Gothic 2\" controls.\r\nadd: Added SKIPDEVTYPEHID to avoid passing HID input devices to DirectInput::EnumDevices callback. Fixes \"Jetboat Superchamps 2\" crash.\r\nadd: hint for OS version compatibility flag\r\nadd: hint for obfuscated IAT detection\r\nadd: hint for safedisk and securom game protection\r\nadd: hint to show safedisc version \r\nfix: centralized handling of window styles\r\n\r\nv2.03.79\r\nfix: proper handling of DirectInputCreateEx function - fixes \"Gothik 2\" mouse and window control\r\nfix: avoids setting the pixel format of a window more than once through GDI SetPixelFormat call. Fixes \"Bugdom\" OpenGL rendering\r\nfix: improved bilinear filtering speed through gsky916 loop optimization \r\nfix: added delay handling to several gdi32 amnd user32 routines blitting to screen\r\n\r\nv2.03.80\r\nadd: \"Suppress DI common errors\" flag, fixes initial failures of Acquire method.\r\nfix: in centered window option, trims the window coordinates if they exceeds the screen size and risk getting negative values.\r\nfix: fixed injection logic to avoid hooking task when the \"Hook enabled\" flag is off\r\nfix: avoid calling GDI SetPixelFormat more than one upon a window since this is not supported. Fixes \"bugdom\" OpenGL problems.\r\nfix: scales glGetIntegerv(GL_VIEWPORT) returned values. Fixes \"bugdom\" rendering problems.\r\nadd: added GUI logging when debug mode is on.\r\nadd: added a third injection mode \"Inject suspended process\". Modified the GUI to select the injection mode through radio buttons. Improves injection compatibility, working mode for \"T-ZWei\" on WinXP.\r\n\r\nv2.03.81\r\nfix: hook AVIFileRelease to avoid call when avi file is NULL. Fixes a crash in \"Die hard trilogy\"\r\nfix: in DirectDrawSurface::QueryInterface added handling of Direct3DDevice objects: Needed for \"Die hard trilogy\"\r\nfix: hooking of DirectDrawSurface GetPalette / SetPalette methods\r\nadd: added \"Suppress DI common errors\" for Acquire / Unacquire methods: Needed for \"Die hard trilogy\"\r\nadd: some DirectSound methods for logging\r\nadd: some Direct3D error codes for logging\r\nfix: fixed some Direct3D methods hooking\r\nfix: Direct3DDevice::AddViewport hooker now delete a viewport that is still linked to a previous device. Needed for \"Die hard trilogy\"\r\nfix: fixed CreateProcess hooker for \"Extend injection\" mode: Needed for \"Die hard trilogy\"\r\n\r\nv2.03.82\r\nfix: fixed situations where the virtual desktop window was not fully blackened during initialization\r\nfix: added FlushInstructionCache call to \"suspended process\" injection type to make it more reliable\r\nfix: suppressed more capabilities when setting \"Suppress overlay capability\" flag\r\nfix: fixed logic for ZBUFFER capabilities: \"The Creed\" seems to have two, one in SYSTEMMEMORY and one in VIDEOMEMORY...\r\nfix: avoid setting cursor clipping when client area is returned with zero size. \r\nfix: fixed CreateProcessA hooker for \"suspended process\" injection type to forward all parameters to the system call\r\nadd: added \"Fix glBindTexture texture\" flag to compensate for the missing glActiveTexture call. Fixes \"bugdom\" 2D panels.\r\n\r\nv2.03.83\r\nfix: cleared surface list on primary surface creation: \"Daytona USA\" keeps creating new primary surfaces, so it saturated the surface list.\r\nfix: calling the proper GetGDISurface pointer in Lock wrapper\r\nfix: HookProc routine causing crash with GTA3, fixed for Win7 and Win10\r\nfix: LoadLibrayA/W after a SetWorkingDir invocation didn't load the local modules. Fixes \"The Rage\".\r\n\r\nv2.03.84\r\nadd: new flag \"No hook update\" (HOOKNOUPDATE) to disable update of original call address in case of change \r\nadd: hint message for \"No hook update\" condition\r\nadd: hint message for memory signed integer overflow\r\nadd: GUI flag \"Name by Folder\" to default the program name field with the program folder instead of program filename\r\nadd: new flag \"Set keyboard shared coop. level\" (SHAREDKEYBOARD) to change directinput keyboard cooperative level mode\r\nadd: new flag Direct3D / \"Enumerate 16bit modes\" (ENUM16BITMODES) to force enumeration of 16 bit video modes on Win10 desktop when not listed\r\nfix: GUI randomic value for Injection mode selector when adding new entry\r\n\r\nv2.03.85\r\nadd: added control to avoid hide of tray window. Useful for \"Planet of the Apes\"\r\nfix: fixed BIG window coordinates. Fixes \"Deer Hunter\" window positioning problems.\r\nfix: mciSendCommand wrapper for BYPASSMCI flag\r\n\r\nv2.03.86\r\nfix: completely revised the \"Keep aspect ratio\" flag, now should work with multi-windowed games too.\r\nadd: multi-monitor handling with dynamic detection and monitor selection\r\nfix: basic class reorganization - now it is a little more neat and simple\r\nadd: added 1280x1024 resolution limit\r\nadd: mult hooks option now available in global settings panel\r\nadd: viewfinder to grab coordinates from a window on screen \r\n\r\nv2.03.87\r\nfix: possibility to use @ token instead of \"\" in fake registry\r\nfix: independent hooking of DirectDraw3 objects, needed for \"Theocracy\"\r\nfix: eliminated shared hooking of \"Compact\" ddraw methods\r\nadd: improved caps masking in debug mode, now can change any flags\r\nfix: added missing hook for DirectDraw3 in QueryInterface\r\nfix: fixed wrong hook for GetGDISurface in DirectDraw3 interface\r\nfix: eliminated dialog box when hooking ddrawex\r\nfix: eliminated experimental hook to auxGetNumDevs returning 1 available device always. Fixes problems with \"Imperialism II\"\r\n\r\nv2.03.88\r\nfix: revised (simpler) window handling, hopefully more reliable (Diablo no longer crashes on fake-fullscreen modes?)\r\nfix: eliminated hook of smackw32.dll to reach GDI32/user32 calls beneath\r\nfix: added ddraw hooking in ddrawex/CreateDirectDraw() call: now \"Theocracy\" works with default \"Automatic\" ddraw hooking\r\nfix: added hook for EnumDisplayDevicesW used by \"Battleground Europe\"\r\nfix: added \"Hide multi monitors\" logic to EnumDisplayDevicesA/W \r\n\r\nv2.03.89\r\nfix: replaced hooked LoadLibrary with original call (*pLoadLibraryA), this seems to avoid the hook address replacements and the need for the \"No hook update\" flag. To be tested.\r\nfix: added some missing IID_DirectDraw3 case in DirectDraw hooking\r\nfix: fixed the logic for centering the main window for desktop with non-zero offset\r\nfix: improved logic for window placement in CreateWindowEx call\r\nfix: added wrapper for winmm/GetJoyPos() virtual joystick referenced in \"Jane's FA18\"\r\n\r\nv2.03.90\r\nadd: added flags/fields to define initial/maximum screen resolution\r\nadd: \"Lock color depth\" ddraw flag. Fixes \"Ahlgrens Bilspelet\" color problems\r\nadd: preliminary opengl/glut32 hook\r\nfix: ZBUFFER capabilities - allow \"Galapagos\" to run in hw accelerated mode\r\nfix: separated D3D FindDevice hookers for D3D version 1/2/3\r\nfix: some unused code cleanup\r\n\r\nv2.03.91\r\nfix: lowered priority level for dinput/GetDeviceState log message to debug\r\nfix: added unlock of source surface in EmuBlt* routines\r\nadd: reintroduced SmackW32.dll hooking - necessary for \"Galapagos\" intro movie\r\nfix: fixed GDI32 CreateDCA/W, hookers (pretty much reverted to previous working code...)\r\nadd: preliminary hook for OpenGL glCopyTexImage2D\r\nadd: OpenGL better logging\r\nfix: defaulting process all textures for limit = 0,0\r\nfix: manages the possibility or ValidateRect receiving a NULL RECT pointer - fix \"Galapagos\" crash in GDI scaled mode\r\nadd: auto-blit mode in SmakW32 frame loop - shows \"Galapagos\" company logo intro movie\r\nfix: force stop blitting on window minimize event - fixes \"Galapagos\" and many others ....\r\n\r\nv2.03.91.fx1-5:\r\nfix: eliminated LOC causing bad window sizing\r\nfix: better desktop hider management\r\nfix: DC emulation object leakage - fixes \"Yu No\" leakage\r\nfix: USER32 EndPaint DC leakage - fixes \"Yu No\" leakage\r\nfix: window position problems\r\nfix: GUI auto hide mode enabled and disabled without need of GUI restart\r\nfix: ddraw surface stack policy. Recovers \"Warhammer 40K Rites of War\" after v2.03.83 fix.\r\nadd: /q quiet mode, no message dialogs on screen\r\n\r\nv2.03.92.fx1-2:\r\nadd: option \"Fix FreeLibrary\" to emulate the Win9X behaviour returning errorcode upon attempts to free a deallocated module. Fixes \"Heavy Gear\" patch 1.2 endless loop problem.\r\nfix: added reference to Palette object to allow final Release() without crash - fixes \"Heavy Gear\" crash at end of mission\r\nfix: fix RECT structure passed to ddraw::Unlock method in case it points to bad coordinates. Fixes FIFA2000 in D3D mode\r\nfix: wrapped all OpenGL GetString methods and inserted proper logging. For diagnostic purposes.\r\nfix: fix ddraw::SetPalette wrapper in case lppd is NULL. Fixes Adrenix sw mode crash.\r\nfix: better way to manage extra modules to be hooked (Glide ddls, SmackW32)\r\n\r\nv2.03.93:\r\nadd: GUI game icon extracted also form separated *.ico icon file\r\nadd: GUI definition of default values for window position\r\nfix: ddrawsurface::Unlock lprect usage: doesn't use the input value but refers to rect passed in Lock operation. Fixes \"fifa 2000\" crash.\r\nfix: avoid issuing a GetPalette method against a deallocated object\r\nfix: automatic creation of Clipper object if needed for emulated ddraw blit to primary surface - fixes the well known black blitting problem\r\nfix: proper handling of dinput DirectInputDevice::GetDeviceData() DI_BUFFEROVERFLOW error condition\r\nfix: user32 GetCursorPos() wrapper\r\nfix: user32 mouse_event() wrapper\r\n\r\nv2.03.94.fx1-3:\r\nfix: aligned Lock cheats in Direct/Indirect mode ......\r\nfix: no window interventions in non windowed mode. Fix \"Gunbound\" in fullscreen mode\r\nfix: avoid multiple injection for early-hooked programs. Fix \"Gunbound\" regression.\r\nfix: Restore of all lost surfaces upon D3D BeginScene DDERR_LOSTSURFACE error. Fix \"Gunbound\" lost textures in fullscreen mode.\r\nadd: more logging in mciSendCommand - possibly some regression problem...\r\nfix: corrected clipping bug introduced in v2.03.93.\r\nfix: SetWindowLog hooker preventing to set DxWnd windowproc when not in fullscreen mode. Fixes \"Nascar Racing 3\" recursion and crash.\r\nfix: eliminated useless filter to suppress high resolutions detection in PREVENTMAXIMAZE mode\r\nfix: fixed mciSendCommand wrapper log messages that could crash the program\r\n\r\nv2.03.95:\r\nfix: fixed prototype for ICDrawBegin wrapper\r\nadd: extended logging for mci multimedia API\r\nadd: window position selector & \"locked size\" + \"anchored\" modes\r\nfix: transient mode when system tray is not available\r\nfix: recursion problem in kernel32 LoadLibrary* wrappers. Allows \"Hot patch\" on WinXP.\r\nfix: initial position problem.\r\n\r\nv2.03.96:\r\npreliminary handling of hidden window\r\nfix: handling of non-windowed mode. Fixes \"Warhammer 40.000 Rites of War\" in non-windowed mode\r\nadd: NODDEXCLUSIVEMODE flag. Forces non exclusive ddraw coop level in non-windowed mode. Fixes \"Warhammer 40.000 Rites of War\" in non-windowed mode\r\nadd: CLEARTEXTUREFOURCC flag. Suppresses FOURCC capability and handling. Should help to process compressed textures.\r\nfix: CreateDIBSection wrapper log messages\r\nfix: PREVENTMAXIMIZE window size checks: should avoid size bigger than initial size, bugged coding inhibited any growth.\r\nfix: GUI setting of execution folder when running \"Launcher\" task.\r\n\r\nv2.03.97.rc1/fx1-3:\r\nfix: emulation of proper ddraw surface capabilities in GetSurfaceDesc() and GetCaps() methods. Seems to cope with needs of most (all?) games.\r\nfix: recovered handling of WM_ERASEBKGND message. Fixes missing backgrounds in \"Adrenix\" and \"Adrenix 3D\" games.\r\nfix: cleaned up and unified capability handling in DirectDrawSurface GetCaps and GetSurfaceDesc methods\r\nadd: warning message and update when running a program with non updated virtual registry settings.fix: LoadLibrary wrappers failed to clear the recursion flag, stopping the hook of new modules after a recursion case.\r\nadd: warning messages when closing DxWnd and possibility to cancel the operation\r\n\r\nv2.03.98/fx1\r\nadd: fine tuning for vsync options: three modes (default: game native, force on, force off) three algorythms (ddraw WaitForVerticalBlank, loop controlled by GetScanLine, loop controlled by time delay)\r\nadd: fine tuning for WAIT options in ddraw Flip() and Blt() methods: three modes (default: game native, force on, force off)\r\nfix: better support for non windowed + no emulation mode, surfaces and blit operations are left (almost) in original state, surface capabilities are left inaltered\r\nfix: added missing recovery on surface lost\r\nfix: some missing or wrong logs\r\nfix: suppression of WS_EX_TOPMOST flag in all conditions for UNLOCKZORDER mode\r\nfix: SUPPRESSOVERLAY flag applied also to D3D capabilities from D3D GetDeviceCaps() method\r\nadd: added more API hookers in IMAGEHLP.DLL bypass\r\nfix: fixed logic to hook WindowProc routines for main window, childs and dialogs.\r\nfix: more frequent updates of window coordinates to avoid scaling errors\r\nfix: fixed CreateDialogIndirectParam and CreateDialogParam wrappers to make inner windows properly scaled (fixes red Alert 2)\r\nfix: recovered DEFAULTMESSAGES option\r\nfix: normalized output for ddraw GetScanLine() method\r\nfix: fixed the policy for redrecting the WindowProc routine. Fixes \"Ultimate Spiderman\" clipping problems, and possibly much more\r\n\r\nv2.03.99\r\nfix: unwanted hook to directsound when passing by CoCreateInstance()\r\nfix: transient mode, now checks for both the target and the launcher to be dead before terminating\r\nadd: Direct3D TRIMTEXTUREFORMAT flag, to mimic MS \"DirectXTrimTextureFormat\" shim. Fixes problems in \"Heavy Gear 2\" and \"Star Wars: Rogue Squardon 3D\".\r\nadd: D3DDevice GetCaps hooking and full dump of D3DDevice capabilities\r\nadd: \"No HAL Device\" flag, making it unavailable the IID_Direct3DHALDevice device. Fixes \"Grand Prix World\" when the 3D car models are invisible.\r\nadd: reorganization of mouse clipper fields, with the addition of LOCK mode (useful for Tribal Rage)\r\n\r\nv2.04.00/fx1\r\nadd: texture management for D3D textures: XCTn compressed textures, raw mode, texture highlight and hack\r\nadd: Input / \"fix MOUSEHOOK callback\" option, fixes \"Jagged Alliance 2\" mouse problems\r\nadd: GDI / \"Pretend Win visible & on top\" option: experimental, let the program believe that the main window is visible and on top of z-order as usually happens to full screen applications\r\nadd: GDI / \"Win insulation\" flag: avoid enumerating windows so that the program can't interfere with them. Fixes \"Tribal Rage\" damages to desktop.\r\nadd: hook to ddraw DuplicateSurface() method, so far for logging only.\r\nfix: eliminated possible divide by 0 exception when minimizing windows\r\nfix: mouse clipping now selected by radio buttons (default, off, on, locked)\r\nfix: bug in D3D device enumeration log\r\nfix: bug in Hybrid and GDI ddraw surface rendering\r\nfix: missing \"No HAL Device\" flag default to disabled\r\nfix: improvements in texture handling, dds format support for DirectDraw textures\r\n\r\nv2.04.01/fx5\r\nadd: preliminary WinG32 handling\r\nadd: minimal WinG32 replacement, thank to Wine source code\r\nadd: DirectX(2)/\"Create a Desktop Win\" option. Fixes \"Man TT Super Bike\"\r\nadd: new hooking schema for IAT organized like original \"Al Unser Jr. Arcade Racing\"\r\nfix: in virtual registry fix to handle the '@' void label case properly\r\nfix: added hook for RegQueryValueA, used by \"Warhammer 40.000 Shadow of the Horned Rat\"\r\nfix: virtual registry logging\r\nadd: added SmackW32 hooking to bypass SmackColorRemapWithTrans and SmackColorRemap: SmackColorRemap seems involved in changing screen resolution in \"Civil War Generals 2\"\r\nfix: some log messages\r\nfix: SetWindowLong hooker: eliminated a unassigned variable condition\r\nfix: added hooker for GDI32/SetROP2 call to insert a InvalidateRect as in older OS. Makes \"Titanic\" working.\r\nfix: added hooker for Smack32/SmackSetSystemRes call to prevent resolution change and set proper virtual screen size: see \"Spearhead\"\r\nfix: fixed virtual screen size initialization so that it doesn't override settings defined before first window creation: see \"Spearhead\"\r\nfix: fixed error condition when DirectDraw::GetCaps is invoked with wrong length - fix \"Spearhead\" bug\r\nfix?: ZBUFFER original capabilities passed to new surface created by QueryInterface - so far, useless\r\n\r\nv2.04.02\r\nfix: avoid crashing on View Shims command on WinXP\r\nfix: bilinear 2X crash\r\nfix: handling of 16 to 32 bpp color conversion in D3D8 IDirect3DDevice8 Copyrects and GetFrontBuffer methods. Fixes \"Dirt track Racing 2\" missing panels.\r\nfix: more / better logging\r\nfix: in USER32/CreateWindow* calls, handles the case where a to-be main window is moved/resized before being declared as main window. Fixes uncontrolled position changes in \"Civil Wars 2 Generals\".\r\nadd: preliminary hooks for message loop APIs USER32/PeekMessage, GetMessage, PostMessage. Now PeekMessage includes SLOWDOW flag processing, reduces CPU time in \"Civil Wars 2 Generals\".\r\n\r\nv2.04.03-fx1\r\nadd: D3D8 16bpp backbuffer emulation on 32bpp color depth. Fixes \"Dangerous Waters\" on 32bpp Win8-10 \r\nadd: more OpenGL wgl* hooks, used by \"StarSiege 2014\".\r\nfix: using correct version method pointers in bilinear blit, avoids crash in \"Daytona USA\" using bilinear filtering\r\nfix: do not try to CloseHandle the handle returned by GetMenu, avoids debugger exceptions.\r\n\r\nv2.04.04\r\nGUI:\r\nadd: run unhooked command \r\nfix: improved logic to propose config save only when virtual registry string is potentially updated\r\nfix: when hooking is disabled, STARTDEBUG and INJECTSUSPENDED processing don't take place\r\nDLL:\r\nfix: crashing condition on \"hide desktop background\" option - fixes M&MVI crash\r\nfix: mouse loop coordinate fix when main window is not set\r\nfix: eliminated log of dmDeviceName field in ChangeDisplaySettings* calls because the field may be not initialized\r\nfix: NOMOVIES option now stops also SmackW32 movies (making movie length only 1 photogram).\r\n\r\nv2.04.05\r\nGUI:\r\nadd: preliminary implementation of Dummy/Expert GUI modes\r\nfix: \"Explore\" command implementation for WinXP\r\nDLL:\r\nadd: preliminary implementation of virtual registry tokens to make configuration relocable\r\nfix: capability fix on surface creation. DDSCAPS_TEXTURE is replaced by DDSCAPS_OFFSCREENPLAIN. Fixes \"Dominant Species\" on certain situations where the surface creatuion returns DDERR_UNSUPPORTED code.\r\nadd: preliminary hook for GDI32 RemoveFontResources and EnumFonts\r\nfix: CreateRectRgnIndirect wrapper altered input RECT* coordinates\r\nfix: separated D3D QueryInterface pointers and wrappers, added wrapping for QueryInterface D3D v7\r\nfix: log cleanup\r\nadd: \"Dynamic ZBUFFER fix\" flag (DYNAMICZCLEAN): needed to fix some of \"Tonic Trouble\" rendering problems.\r\nadd: OpenGL dedicated logging\r\nadd: WinG32 dedicated logging\r\nfix?: bypass for WM_FONTCHANGE: avoids \"Warhammer: Shadow of the Horned Rat\" crash when entering battle\r\nadd: WinG32 debug highlighting of blitted rects on screen\r\nadd: GDI32 debug highlighting of blitted rects on screen\r\nadd: hooks for GDI32 GetTextExtentPointA and GetTextExtentPoint32A: needed for proper string rendering on \"Warhammer: Shadow of the Horned Rat\"\r\nadd: hook for GDI32 GdiAlphaBlend, very rare call that appeared in \"RHEM\" during savegame load.\r\n\r\nv2.04.06/fx3\r\nGUI:\r\nadd: Expert mode\r\nadd: experimental dump od DIB sections and blitted dc for debugging purposes\r\nDLL:\r\nfix: corrected condition to print two virtual registry log messages\r\nfix: improved logic to recover surfaces with DDSCAPS_TEXTURE capability - ref. \"Dominant Species\"\r\nfix: fixed cursor clipping state and toggle key to make it work in all conditions\r\nfix: D3D objects hooking with QueryInterface method. Fixes \"Wizardry Chronicle\"\r\nfix: add hook for GDI32 GdiGradientFill and GdiTransparentBlt, present in \"RHEM\"\r\nfix: log messages for CloseHandle wrapper\r\nfix: log messages for GetPixel wrapper\r\nfix: window position in MoveWindow for ANCHORED mode and big windows\r\nfix: DialogBoxParamA wrapper\r\n\r\nv2.04.07\r\nfix: QueryInterface wrapper for ddraw classes unified in a single procedure.\r\nfix: D3D2 SwapTextureHandles hook fix - fixes \"Wizardry Chronicle\" texture problems\r\nfix: string overflow in TextureHack procedure for D3D1-7 textures\r\n\r\nv2.04.08/fx1\r\nfix: improved DIB dumping & logging: fixed BMP header with negative size, dump only when DIB has attached image\r\nfix: safe CreateWindow mode, preserves original size & position within win creation. Fixes \"Warhammer SotHR\"\r\nblitting problems\r\nfix: virtual registry file created by GUI and not extracted by the dll. Ths avoids getting the first matching entry.\r\nfix: \"Scale font parameters\" fully revised, also renamed to \"Scale font size\"\r\nadd: \"High quality fonts\" flag to force antialiasing font style\r\nfix: ddraw surface capability regression for emulated backbuffer: fixes \"Dominant Species\" textures in SW mode\r\nfix: ddraw surface capability regression for direct primary/backbuffer: should fix \"Tomb raider 3\" in HW mode\r\nfix: ddraw surface capability regression for zbuffer: fixes \"Toca Touring Car\" in SW mode\r\nfix: in fx1, bug crashing app when querying unknown interfaces!\r\n\r\nv2.04.09\r\nadd: hook USER32 AdjustWindowRect/Ex calls: fix window position problems for \"Man TT Superbike\"\r\nadd: hook for USER32 GetActiveWindow() tracing. \r\nfix: version hooking for IDIrectDraw methods called by IDIrectDrawSurface methods: fixes many crashes on ddraw games\r\nfix: capability registration passed in IDIrectDrawSurface::QueryInterface() calls: fixes settings for ZBUFFER surfaces\r\nfix: capsdb logging (developer's use only)\r\nfix: handling of WM_NCCALCSIZE & WM_NCPAINT messages in winproc hooker to align behaviour to comment. To be tested ...\r\n\r\nv2.04.10\r\nGUI:\r\nadd: view flags window (expert mode only)\r\nDLL:\r\nfix: prevent InvalidateRect on desktop, eliminates some flickering\r\nfix: ZBUFFER capability management - fixes \"Galapagos\" in HW mode (but it may crash because of the intro movie...)\r\nfix: logging of log flags\r\nfix: D3D8/9 QueryInterface fully revisited \r\nadd: (very) preliminary texture transparency hack\r\n\r\nv2.04.11\r\nGUI:\r\nadd: \"Kill all\" menu command on expert mode\r\nadd: \"Lower background priority\" flag\r\nadd: \"Include menu in clipper area\" flag\r\nDLL:\r\nfix: decrement virtual reference counter in case of 3D surfaces with ZBuffer (experimental): fixes \"Microsoft International Soccer 2000\".\r\nadd: more message types in window message logging\r\nfix: fixed mouse clipper logic and moved code in dxwCore class\r\nfix: fixed GDI palette syncronization with ddraw: recovers \"Hyperblade\" black screen in gameplay\r\nfix: unhooked USER32 GetParent() call, causing recursion in hot patch mode, blanked dialogs (\"Galapagos\") and in general more problems than benefits \r\nfix: fixed AdjustWindowRect/Ex() wrapper to always neutralize window changes (good for \"Man TT Superbike\")\r\nfix: fixed message processing for FORCEWINRESIZE: now \"Man TT Superbike\" can be moved and resized (at least on Win10).\r\nadd: added BACKGROUNDPRIORITY handling\r\nadd: added CLIPMENU handling\r\n\r\nv2.04.12\r\nGUI:\r\nadd: \"Support offscreen 3D\" flag (OFFSCREENZBUFFER)\r\nDLL:\r\nfix: recursion bug in CreateWindowExA hooker\r\nadd: OFFSCREENZBUFFER flag\r\n\r\nv2.04.13\r\nfix: moved USER32/InvalidateRect hooker to always activate it and further reduce desktop flickering\r\nfix: fixed virtual registry tags that introduced extra characters in key string expansion\r\nadd: hooked SelectClipRgn - preliminary to attempt fixing \"Sid Meier's Alpha Centauri\"\r\nfix: fixed unsupported call to SetWindowsHook(WH_CBT, NULL). Fixes \"Starsiege\" deaf mouse control.\r\nfix: completed and rebuilt proxy dlls to be aligned with current DxWnd structure\r\n\r\nv2.04.14\r\nfix: virtual registry parser, token names now case insensitive (es. \"path\" = \"Path\")\r\nfix: virtual registry crash when replacing tokens and lplpData is NULL\r\nfix: virtual registry return code, must not return ERROR_MORE_DATA when lpData is NULL (fixes \"Rollcage II\")\r\nfix: eliminated error message in virtual palette processing when color depth is 8 bits\r\nfix: improved logging in EnumDisplayModes wrapper\r\nfix: EnumDisplayModes wrapper for nonemulated nonwindowed mode\r\nfix: deleted improper input clipper destruction after primary surface destruction. Fixes \"Settlers III\" clipper problems\r\nadd: virtual heap (makes some \"Wing Commander\" games work)\r\nfix: freak help->about...\r\nadd: GUI \"Tools->Recover system colors\" utility\r\n\r\nv2.04.15\r\nfix: suppress DDERR_EXCLUSIVEMODEALREADYSET error in ddraw::SetCooperativeLevel(). Fixes program termination in \"Sid Meier's Alpha centauri\".\r\nfix: exception caught on DirectDrawSurface::Release(): it may fix problems when using ddraw proxies\r\nfix: added clipper object to ddraw QueryInterface management\r\nfix: added IID_UNKNOWN object to ddraw QueryInterface management\r\nfix: better implementation of LIMITRESOURCES flag: now HD virtual space is 100MB free in a 120MB disk.\r\nfix: SLOWDOWN flag in PeekMessage now uses dxw.DoSlow(1) instead of *pSleep(1), preserves more messages\r\nadd: more cases in mciSendCommand wrapper for BYPASSMCI flag\r\nfix: in mciSendCommand using ANSI MCI_OVLY_WINDOW_PARMS instead of WIDECHAR version\r\nfix: DirectDraw:GetCaps wrapper crash when setting SUPPRESSOVERLAY and the hw or sw caps pointer is NULL\r\nfix: exception when trying to use ddraw SetAppCompatData and LoadLibrary failed\r\nfix: error messages on LoadLibrary errors\r\n\r\nv2.04.16\r\nadd: improved virtual joystick with configuration and monitoring panel, invert axis options, show crossfire.\r\nfix: GetAttachedSurface now simulates also the primary surface as attach to backbuffer. Fixes GTA first episode windows version.\r\n\r\nv2.04.17\r\nadd: 2 more DWORD flags, unused for now\r\nadd: virtual joystick sensivity control\r\nfix: check on ZBUFFER capability attribution in case the capsdb holds a wrong capability belonging to a different surface that was deleted\r\nadd: \"Fix LoadLibrary error\" flag (LOADLIBRARYERR) to return ERROR_DLL_NOT_FOUND instead of ERROR_MOD_NOT_FOUND error code. Fixes \"Nightmare Creatures\".\r\nadd: \"Hybrid\" flag for \"Shared ddraw & GDI DC\" mode - reduces \"Star Treck: Armada\" problems. \r\n\r\nv2.04.18\r\nadd: \"Fix AdjustWindowRect\" flag (FIXADJUSTWINDOWRECT) to selectively turn the AdjustWindowRect coordinate patching. The flag must be checked for \"Man TT Super Bike\" and unckecked for \"Imperialism II\".\r\nadd: \"Hook child WindowProc\" and \"Hook dialog WindowProc\" flags for better control over these risky operations.\r\nfix: bad GetParent hook: caused crash when checking \"Hook child WindowProc\" flag.\r\nfix: improvements in \"Hybrid\" emulation mode\r\n\r\nv2.04.19/fx1\r\nfix: major code reorganization: caps database & surface stack merged into a single object class, including ZBUFFER surfaces\r\nfix: eliminated arbitrary surface properties settings\r\nfix: joystick api promoted to hot patching to get a more powerful hooking\r\nadd: hooking of WM_STYLECHANGING/STYLECHANGED messages to allow D3D rendering within the window borders instead of over the  whole window area - fixes \"Nightmare Creatures\" and others.\r\nfix: fixed \"Need fos Speed 5\" peculiarity: QueryInterface of an object on top of itself.\r\n\r\nv2.04.20\r\nGUI:\r\nadd: two more 32bit words for additional flags\r\nadd: timestamp and dxwnd version added to exported files\r\nfix: window style selector through radio buttons\r\nfix: implementation of View->Shims\r\nDLL:\r\nadd: management of 3DREF surfaces to handle D3D CreateDevice with offscreen surface\r\nadd: FIXTHINFRAME option to get overlapped window with thin border\r\nfix: revised implementation for DirectDrawSurface getCaps and GetSurfaceDesc wrappers\r\nadd: hooker for SetWindowsHookEx WH_MOUSE_LL events - used by \"Royal Tramp 2\"\r\nfix: added WM_NCMOUSELEAVE to the list of potentially offending messages\r\n\r\nv2.04.21\r\nfix: proxed calls to SetCooperativeLevel with no specification for screen mode changes\r\nfix: locked rect fix applied only in case of not NULL rect specification. Fixes \"Shadow Watch\" font blitting problems.\r\nfix: DirectDrawEnumerate/Ex wrappers now filter video devices properly when a given monitor is selected. Partially fixes \"The Sting!\" behaviour on multi-monitor environment.\r\nfix: aligned primary surface capabilities for flipped native and emulated modes\r\nadd: wrappers for ddraw7 StartModeTest and EvaluateMode methods only for logging \r\nfix: wrapper for SetCooperativeLevel proxy the call when flags is DDSCL_FPUPRESERVE or DDSCL_FPUSETUP only. Seen in \"G-Darius\"\r\nadd: separated logging flag for structures hexdump\r\nfix: eliminated initial logging for undefined virtual keys (useless)\r\nfix: fixed unconditional logging for USER32:PolyLine\r\nadd: diagniostic DC dump in GDI32:SetDIBitsToDevice wrapper\r\nfix: GDI32:SetViewportOrgEx wrapper when ddraw surface is still missing\r\nadd: in ddraw::QueryInterface, logging for detection of Clipper or Palette objects\r\nfix: fix for /c:path argument of DxWnd command line usage, now can accept full file paths\r\nfix: log=none as default value for new dxwnd program entries"
  },
  {
    "path": "dll/Inject.cpp",
    "content": "#define  _CRT_SECURE_NO_WARNINGS\n\n#include <windows.h>\n#include <tlhelp32.h>\n#include <shlwapi.h>\n#include <conio.h>\n#include <stdio.h>\n\n#define WIN32_LEAN_AND_MEAN\n\n#define true 1\n#define false 0\n\n#include \"Winternl.h\"\n\nBOOL Inject(DWORD pID, const char * DLL_NAME)\n{\n\tHANDLE hProc, hThread;\n\tHMODULE hLib;\n\tchar buf[50] = {0};\n\tLPVOID RemoteString, LoadLibAddy;\n\t\t\n\tif(!pID) return false;\n\t//hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID); // not working on Win XP\n\thProc = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, FALSE, pID);\n\tif(!hProc){\n\t\tsprintf(buf, \"OpenProcess() failed: pid=%x err=%d\", pID, GetLastError());\n\t\tMessageBox(NULL, buf, \"Loader\", MB_OK);\n\t\treturn false;\n\t}\n\thLib=GetModuleHandle(\"kernel32.dll\");\n\tif(!hLib){\n\t\tsprintf(buf, \"GetModuleHandle(\\\"kernel32.dll\\\") failed: err=%d\", pID, GetLastError());\n\t\tMessageBox(NULL, buf, \"Loader\", MB_OK);\n\t\treturn false;\n\t}\n\tLoadLibAddy = (LPVOID)GetProcAddress(hLib, \"LoadLibraryA\");\n\tif(!LoadLibAddy){\n\t\tsprintf(buf, \"GetProcAddress(\\\"LoadLibraryA\\\") failed: err=%d\", pID, GetLastError());\n\t\tMessageBox(NULL, buf, \"Loader\", MB_OK);\n\t\treturn false;\n\t}\n\t// Allocate space in the process for the DLL\n\tRemoteString = (LPVOID)VirtualAllocEx(hProc, NULL, strlen(DLL_NAME), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);\n\t// Write the string name of the DLL in the memory allocated\n\tif(!WriteProcessMemory(hProc, (LPVOID)RemoteString, DLL_NAME, strlen(DLL_NAME), NULL)){\n\t\tsprintf(buf, \"WriteProcessMemory() failed: err=%d\", pID, GetLastError());\n\t\tMessageBox(NULL, buf, \"Loader\", MB_OK);\n\t\treturn false;\n\t}\n\t// Load the DLL\n\thThread=CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibAddy, (LPVOID)RemoteString, 0, NULL);\n\t// Free/Release/Close everything\n\tVirtualFreeEx(hProc, RemoteString, strlen(DLL_NAME), MEM_RELEASE);\n\tif(!hThread){\n\t\tsprintf(buf, \"CreateRemoteThread() failed: pid=%x err=%d\", pID, GetLastError());\n\t\tMessageBox(NULL, buf, \"Loader\", MB_OK);\n\t\tCloseHandle(hProc);\n\t\treturn false;\n\t}\n\tif(!SetThreadPriority(hThread, THREAD_PRIORITY_TIME_CRITICAL)){\n\t\tsprintf(buf, \"SetThreadPriority() failed: err=%d\", GetLastError());\n\t\tMessageBox(NULL, buf, \"Loader\", MB_OK);\n\t}\n\tCloseHandle(hThread);\n\tCloseHandle(hProc);\n\t//CloseHandle(hLib);\n\treturn true;\n}\n\n#define STATUS_SUCCESS    ((NTSTATUS)0x000 00000L)\n#define ThreadQuerySetWin32StartAddress 9\n\nLPVOID GetThreadStartAddress(HANDLE hThread)\n{\n    NTSTATUS ntStatus;\n    HANDLE hDupHandle;\n\tHMODULE hLibNTHandle;\n    LPVOID dwStartAddress;\n\n\ttypedef NTSTATUS (WINAPI *NtQueryInformationThread_Type)(HANDLE, THREADINFOCLASS, PVOID, ULONG, PULONG);\n\thLibNTHandle = GetModuleHandle(\"ntdll.dll\");\n\tif(!hLibNTHandle) return 0;\n\t\n\tNtQueryInformationThread_Type NtQueryInformationThread = \n\t\t(NtQueryInformationThread_Type)GetProcAddress(hLibNTHandle, \"NtQueryInformationThread\");\n\n    if(NtQueryInformationThread == NULL) return 0;\n\n    HANDLE hCurrentProcess = GetCurrentProcess();\n    if(!DuplicateHandle(hCurrentProcess, hThread, hCurrentProcess, &hDupHandle, THREAD_QUERY_INFORMATION, FALSE, 0)){\n        SetLastError(ERROR_ACCESS_DENIED);\n        return 0;\n    }\n\n    ntStatus = NtQueryInformationThread(hDupHandle, (THREADINFOCLASS)ThreadQuerySetWin32StartAddress, &dwStartAddress, sizeof(DWORD), NULL);\n    CloseHandle(hDupHandle);\n\tCloseHandle(hLibNTHandle);\n    //if(ntStatus != STATUS_SUCCESS) return 0;\n\n    return dwStartAddress;\n}"
  },
  {
    "path": "dll/advapi.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n\ntypedef LONG (WINAPI *RegFlushKey_Type)(HKEY);\nLONG WINAPI extRegFlushKey(HKEY);\nRegFlushKey_Type pRegFlushKey = NULL;\ntypedef LONG (WINAPI *RegEnumValueA_Type)(HKEY, DWORD, LPTSTR, LPDWORD, LPDWORD, LPDWORD, LPBYTE, LPDWORD);\nLONG WINAPI extRegEnumValueA(HKEY, DWORD, LPTSTR, LPDWORD, LPDWORD, LPDWORD, LPBYTE, LPDWORD);\nRegEnumValueA_Type pRegEnumValueA = NULL;\n\nstatic HookEntryEx_Type Hooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"RegOpenKeyExA\", NULL, (FARPROC *)&pRegOpenKeyEx, (FARPROC)extRegOpenKeyEx},\n\t{HOOK_IAT_CANDIDATE, 0, \"RegCloseKey\", NULL, (FARPROC *)&pRegCloseKey, (FARPROC)extRegCloseKey},\n\t{HOOK_IAT_CANDIDATE, 0, \"RegQueryValueA\", NULL, (FARPROC *)&pRegQueryValue, (FARPROC)extRegQueryValue},\n\t{HOOK_IAT_CANDIDATE, 0, \"RegQueryValueExA\", NULL, (FARPROC *)&pRegQueryValueEx, (FARPROC)extRegQueryValueEx},\n\t{HOOK_IAT_CANDIDATE, 0, \"RegCreateKeyA\", NULL, (FARPROC *)&pRegCreateKey, (FARPROC)extRegCreateKey},\n\t{HOOK_IAT_CANDIDATE, 0, \"RegCreateKeyExA\", NULL, (FARPROC *)&pRegCreateKeyEx, (FARPROC)extRegCreateKeyEx},\n\t{HOOK_IAT_CANDIDATE, 0, \"RegSetValueExA\", NULL, (FARPROC *)&pRegSetValueEx, (FARPROC)extRegSetValueEx},\n\t{HOOK_IAT_CANDIDATE, 0, \"RegFlushKey\", NULL, (FARPROC *)&pRegFlushKey, (FARPROC)extRegFlushKey},\n\t// v2.3.36\n\t{HOOK_IAT_CANDIDATE, 0, \"RegEnumValueA\", NULL, (FARPROC *)&pRegEnumValueA, (FARPROC)extRegEnumValueA},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n \nvoid HookAdvApi32(HMODULE module)\n{\n\tif( (dxw.dwFlags3 & EMULATEREGISTRY) || \n\t\t(dxw.dwFlags4 & OVERRIDEREGISTRY) || \n\t\t(dxw.dwFlags6 & (WOW32REGISTRY|WOW64REGISTRY)) || \n\t\t(dxw.dwTFlags & OUTREGISTRY))\n\tHookLibraryEx(module, Hooks, \"ADVAPI32.dll\");\n}\n\nFARPROC Remap_AdvApi32_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tif(!(dxw.dwFlags3 & EMULATEREGISTRY) || \n\t\t(dxw.dwFlags4 & OVERRIDEREGISTRY) || \n\t\t(dxw.dwFlags6 & (WOW32REGISTRY|WOW64REGISTRY)) || \n\t\t(dxw.dwTFlags & OUTREGISTRY)) return NULL;\n\tif (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\treturn NULL;\n}\n\n#define HKEY_FAKE ((HKEY)0x7FFFFFFF)\n#define HKEY_MASK 0x7FFFFF00\n#define IsFake(hKey) (((DWORD)hKey & HKEY_MASK) == HKEY_MASK)\n\nstatic FILE *OpenFakeRegistry();\nstatic char *hKey2String(HKEY);\nstatic LONG myRegOpenKeyEx(HKEY, LPCTSTR, PHKEY);\n\n// int ReplaceVar(pData, lplpData, lpcbData): \n// extract the token name from pData beginning up to '}' delimiter\n// calculates the value of the token. If the token is unknown, the value is null string.\n// if *lplpData, copies the token value string to *lplpData and increments *lplpData\n// if lpcbData, increments the key length of the token value length\n// returns the length of token label to advance the parsing loop\n\ntypedef enum {\n\tLABEL_PATH = 0,\n\tLABEL_WORKDIR,\n\tLABEL_VOID,\n\tLABEL_END\n};\nstatic char *sTokenLabels[LABEL_END+1]={\n\t\"path}\",\n\t\"work}\",\n\t\"}\",\n\tNULL\n};\n\nstatic int ReplaceVar(char *pData, LPBYTE *lplpData, LPDWORD lpcbData)\n{\n\tint iTokenLength;\n\tint iLabelLength;\n\tint iTokenIndex;\n\tchar sTokenValue[MAX_PATH];\n\t// search for a matching token\n\tfor(iTokenIndex=0; sTokenLabels[iTokenIndex]; iTokenIndex++){\n\t\tif(!_strnicmp(pData, sTokenLabels[iTokenIndex], strlen(sTokenLabels[iTokenIndex]))) break;\n\t}\n\t// set token label length\n\tiLabelLength = strlen(sTokenLabels[iTokenIndex]);\n\t// do replacement\n\tswitch(iTokenIndex){\n\t\tcase LABEL_PATH:\n\t\tcase LABEL_WORKDIR:\n\t\t\tGetCurrentDirectory(MAX_PATH, sTokenValue);\n\t\t\tbreak;\n\t\tcase LABEL_VOID:\n\t\tcase LABEL_END:\n\t\t\tstrcpy(sTokenValue, \"\");\n\t\t\tbreak;\n\t}\n\t// set output vars if not NULL\n\tiTokenLength = strlen(sTokenValue);\n\tOutTraceR(\"REPLACED token=%d val=\\\"%s\\\" len=%d\\n\", iTokenIndex, sTokenValue, iTokenLength);\n\tif(*lplpData) {\n\t\tstrcpy((char *)*lplpData, sTokenValue);\n\t\t*lplpData += iTokenLength;\n\t}\n\tif(lpcbData) *lpcbData += iTokenLength;\n\t// return label length to advance parsing\n\treturn iLabelLength;\n}\n\nstatic char *hKey2String(HKEY hKey)\n{\n\tchar *skey;\n\tstatic char sKey[MAX_PATH+1];\n\tstatic char skeybuf[10];\n\tif(IsFake(hKey)) {\n\t\tFILE *regf;\n\t\tchar RegBuf[MAX_PATH+1];\n\t\tregf=OpenFakeRegistry();\n\t\tif(regf!=NULL){\n\t\t\tHKEY hLocalKey=HKEY_FAKE;\n\t\t\tfgets(RegBuf, 256, regf);\n\t\t\twhile (!feof(regf)){\n\t\t\t\tif(RegBuf[0]=='['){\n\t\t\t\t\tif(hLocalKey == hKey){\n\t\t\t\t\t\t//OutTrace(\"building fake Key=\\\"%s\\\" hKey=%x\\n\", sKey, hKey);\n\t\t\t\t\t\tfclose(regf);\n\t\t\t\t\t\tstrcpy(sKey, &RegBuf[1]);\n\t\t\t\t\t\t//sKey[strlen(sKey)-2]=0; // get rid of \"]\"\n\t\t\t\t\t\tfor(int i=strlen(sKey)-1; i; i--){\n\t\t\t\t\t\t\tif(sKey[i]==']'){\n\t\t\t\t\t\t\t\tsKey[i]=0;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn sKey;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\thLocalKey--;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfgets(RegBuf, 256, regf);\n\t\t\t}\n\t\t\tfclose(regf);\n\t\t}\n\t\treturn \"HKEY_NOT_FOUND\";\t\n\t}\n\tswitch((ULONG)hKey){\n\t\tcase HKEY_CLASSES_ROOT:\t\tskey=\"HKEY_CLASSES_ROOT\"; break;\n        case HKEY_CURRENT_CONFIG:\tskey=\"HKEY_CURRENT_CONFIG\"; break;\n        case HKEY_CURRENT_USER:\t\tskey=\"HKEY_CURRENT_USER\"; break;\n        case HKEY_LOCAL_MACHINE:\tskey=\"HKEY_LOCAL_MACHINE\"; break;\n        case HKEY_USERS:\t\t\tskey=\"HKEY_USERS\"; break;\n\t\tdefault:\t\t\t\t\tsprintf(skeybuf, \"0x%x\", hKey); skey=skeybuf; break;\n\t}\n\treturn skey;\n}\n\nstatic char *Unescape(char *s, char **dest)\n{\n\tif(!*dest)\t*dest=(char *)malloc(strlen(s)+100);\n\telse\t\t*dest=(char *)realloc(*dest, strlen(s)+100); \n\tchar *t = *dest;\n\tfor(; *s; s++){\n\t\tif((*s=='\\\\') && (*(s+1)=='n')){\n\t\t\t*t++ = '\\n';\n\t\t\ts++;\n\t\t}\n\t\telse{\n\t\t\t*t++ = *s;\n\t\t}\n\t}\n\t*t=0;\n\treturn *dest;\n}\n\nstatic FILE *OpenFakeRegistry()\n{\n\tDWORD dwAttrib;\t\n\tchar sSourcePath[MAX_PATH+1];\n\tchar *p;\n\tdwAttrib = GetFileAttributes(\"dxwnd.dll\");\n\tif (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) return NULL;\n\tGetModuleFileName(GetModuleHandle(\"dxwnd\"), sSourcePath, MAX_PATH);\n\tp=&sSourcePath[strlen(sSourcePath)-strlen(\"dxwnd.dll\")];\n\tstrcpy(p, \"dxwnd.reg\");\n\treturn fopen(sSourcePath,\"r\");\n}\n\nstatic LONG SeekFakeKey(FILE *regf, HKEY hKey)\n{\n\tLONG res;\n\tres = ERROR_FILE_NOT_FOUND;\n\tchar RegBuf[MAX_PATH+1];\n\tHKEY hCurKey=HKEY_FAKE+1;\n\tfgets(RegBuf, 256, regf);\n\twhile (!feof(regf)){\n\t\tif(RegBuf[0]=='['){\n\t\t\thCurKey--;\n\t\t}\n\t\tif(hCurKey==hKey) {\n\t\t\t//OutTraceB(\"DEBUG: SeekFakeKey fount key at line=%s\\n\", RegBuf);\n\t\t\tres = ERROR_SUCCESS;\n\t\t\tbreak;\n\t\t}\n\t\tfgets(RegBuf, 256, regf);\n\t}\n\treturn res;\n}\n\nstatic LONG SeekValueName(FILE *regf, LPCTSTR lpValueName)\n{\n\tLONG res;\n\tchar RegBuf[MAX_PATH+1];\n\tlong KeySeekPtr;\n\tres = ERROR_FILE_NOT_FOUND;\n\t// v2.04.01: fix to handle the '@' case properly\n\tif(lpValueName) if(!lpValueName[0]) lpValueName=NULL; \n\tKeySeekPtr = ftell(regf);\n\tfgets(RegBuf, 256, regf);\n\twhile (!feof(regf)){\n\t\tif((RegBuf[0]=='\"') &&\n\t\t\t!_strnicmp(lpValueName, &RegBuf[1], strlen(lpValueName)) &&\n\t\t\t(RegBuf[strlen(lpValueName)+1]=='\"') &&\n\t\t\t(RegBuf[strlen(lpValueName)+2]=='='))\n\t\t\t{\n\t\t\tfseek(regf, KeySeekPtr, SEEK_SET);\n\t\t\treturn ERROR_SUCCESS;\n\t\t}\n\t\tif(!lpValueName && (RegBuf[0]=='@')){\n\t\t\tfseek(regf, KeySeekPtr, SEEK_SET);\n\t\t\treturn ERROR_SUCCESS;\n\t\t}\n\t\tif(RegBuf[0]=='[') return res;\n\t\tKeySeekPtr = ftell(regf);\n\t\tfgets(RegBuf, 256, regf);\n\t}\n\treturn res;\n}\n\nstatic LONG SeekValueIndex(FILE *regf, DWORD dwIndex, LPCTSTR lpValueName, LPDWORD lpcchValueName)\n{\n\tLONG res;\n\tchar RegBuf[MAX_PATH+1];\n\tlong KeySeekPtr;\n\tres = ERROR_NO_MORE_ITEMS;\n\tKeySeekPtr = ftell(regf);\n\tfgets(RegBuf, 256, regf);\n\tdwIndex++;\n\twhile (!feof(regf) && dwIndex){\n\t\tif(RegBuf[0]=='\"') dwIndex--;\n\t\tif(dwIndex == 0){\n\t\t\tfseek(regf, KeySeekPtr, SEEK_SET);\n\t\t\t//sscanf(RegBuf, \"\\\"%s\\\"=\", lpValueName);\n\t\t\tstrncpy((char *)lpValueName, strtok(&RegBuf[1], \"\\\"\"), *lpcchValueName);\n\t\t\t*lpcchValueName = strlen(lpValueName);\n\t\t\t//OutTrace(\"DEBUG: lpValueName=%s len=%d\\n\", lpValueName, *lpcchValueName);\n\t\t\treturn ERROR_SUCCESS;\n\t\t}\n\t\tif(RegBuf[0]=='[') return res;\n\t\tKeySeekPtr = ftell(regf);\n\t\tfgets(RegBuf, 256, regf);\n\t}\n\treturn res;\n}\n\nstatic DWORD GetKeyValue(\n\t\t\t\tFILE *regf,\n\t\t\t\tchar *ApiName, \n\t\t\t\tLPCTSTR lpValueName, \n\t\t\t\tLPDWORD lpType, // beware: could be NULL\n\t\t\t\tLPBYTE lpData,  // beware: could be NULL\n\t\t\t\tLPDWORD lpcbData)\n{\n\tLONG res;\n\tLPBYTE lpb;\n\tchar *pData;\n\tchar RegBuf[MAX_PATH+1];\n\tDWORD cbData=0;\n\n\t//OutTrace(\"GetKeyValue: ValueName=%s\\n\", lpValueName);\n\tfgets(RegBuf, 256, regf);\n\tif(RegBuf[0]=='@')\n\t\tpData=&RegBuf[2];\n\telse\n\t\tpData=&RegBuf[strlen(lpValueName)+3];\n\tlpb = lpData;\n\tif(lpcbData) {\n\t\tcbData = *lpcbData;\n\t\t*lpcbData=0;\n\t}\n\tdo {\n\t\tif(*pData=='\"'){ // string value\n\t\t\tif(lpType) *lpType=REG_SZ;\n\t\t\tpData++;\n\t\t\twhile(*pData && (*pData != '\"')){\n\t\t\t\tif(*pData=='\\\\') {\n\t\t\t\t\tpData++;\n\t\t\t\t\tswitch(*pData){\n\t\t\t\t\t\tcase '{':{\n\t\t\t\t\t\t\tpData++; // skip '{'\n\t\t\t\t\t\t\tpData += ReplaceVar(pData, &lpb, lpcbData);\n\t\t\t\t\t\t\tcontinue; // v2.04.13 fix\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault: \n\t\t\t\t\t\t\tbreak; // skip first '\\'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(lpData && lpcbData) if(*lpcbData < cbData) *lpb++=*pData;\n\t\t\t\tpData++;\n\t\t\t\tif(lpcbData) (*lpcbData)++;\n\t\t\t}\n\t\t\tif(lpcbData) (*lpcbData)++; // extra space for string terminator ?\n\t\t\tif(lpData && lpcbData) if(*lpcbData < cbData) *lpb = 0; // string terminator\n\t\t\tOutTraceR(\"%s: type=REG_SZ cbData=%d Data=\\\"%s\\\"\\n\", \n\t\t\t\tApiName, lpcbData ? *lpcbData : 0, lpData ? (char *)lpData : \"(NULL)\");\n\t\t\t// v2.04.14 fix: ERROR_MORE_DATA should be returned only in case lpData is not NULL\n\t\t\tres=ERROR_SUCCESS;\n\t\t\tif(lpData && lpcbData)\n\t\t\t\tif (*lpcbData > cbData) res = ERROR_MORE_DATA;\n\t\t\tbreak;\n\t\t}\n\t\tif(!strncmp(pData,\"dword:\",strlen(\"dword:\"))){ //dword value\n\t\t\tDWORD val;\n\t\t\tif(lpType) *lpType=REG_DWORD;\n\t\t\tpData+=strlen(\"dword:\");\n\t\t\tsscanf(pData, \"%x\", &val);\n\t\t\tif(lpData) {\n\t\t\t\tif (cbData >= sizeof(DWORD)) {\n\t\t\t\t\tmemcpy(lpData, &val, sizeof(DWORD));\n\t\t\t\t\tres=ERROR_SUCCESS;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tres=ERROR_MORE_DATA;\n\t\t\t}\n\t\t\telse \n\t\t\t\tres=ERROR_SUCCESS; // data not needed\n\t\t\tif (lpcbData) *lpcbData=sizeof(DWORD);\n\t\t\tOutTraceR(\"%s: type=REG_DWORD cbData=%x Data=0x%x\\n\", \n\t\t\t\tApiName, lpcbData ? *lpcbData : 0, val);\n\t\t\tbreak;\n\t\t}\n\t\tif(!strncmp(pData,\"hex:\",strlen(\"hex:\"))){ //hex value\n\t\t\tBYTE *p;\n\t\t\tif(lpType) *lpType=REG_BINARY;\n\t\t\tp = (BYTE *)pData;\n\t\t\tp+=strlen(\"hex:\");\n\t\t\twhile(TRUE){\n\t\t\t\tp[strlen((char *)p)-1]=0; // eliminates \\n at the end of line\n\t\t\t\twhile(strlen((char *)p)>1){\n\t\t\t\t\tif((*lpcbData < cbData) && lpData){\n\t\t\t\t\t\tsscanf((char *)p, \"%x,\", (char *)lpb);\n\t\t\t\t\t\tlpb++;\n\t\t\t\t\t}\n\t\t\t\t\tp+=3;\n\t\t\t\t\tif(lpcbData) (*lpcbData)++;\n\t\t\t\t}\n\t\t\t\tif(p[strlen((char *)p)-1]=='\\\\'){\n\t\t\t\t\tfgets(RegBuf, 256, regf);\n\t\t\t\t\tpData = RegBuf;\n\t\t\t\t\tp = (BYTE *)pData;\n\t\t\t\t}\n\t\t\t\telse break;\n\t\t\t}\n\t\t\tOutTraceR(\"%s: type=REG_BINARY cbData=%d Data=%s\\n\", \n\t\t\t\tApiName,\n\t\t\t\tlpcbData ? *lpcbData : 0, \n\t\t\t\tlpData ? \"(NULL)\" : hexdump(lpData, *lpcbData));\n\t\t\tres=(*lpcbData > cbData) ? ERROR_MORE_DATA : ERROR_SUCCESS;\n\t\t\tbreak;\n\t\t}\n\t} while(FALSE);\n\treturn res;\n} \n\nstatic void LogKeyValue(char *ApiName, LONG res, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData)\n{\n\tchar sInfo[1024];\n\tif(res) {\n\t\tOutTrace(\"%s: ERROR res=%d\\n\", ApiName, res);\n\t\treturn;\n\t}\n\tsprintf(sInfo, \"%s: res=ERROR_SUCCESS size=%d type=%x(%s)\", \n\t\tApiName, lpcbData?*lpcbData:0, lpType?*lpType:0, lpType?ExplainRegType(*lpType):\"none\");\n\tif(lpType && lpData && lpcbData) {\n\t\tDWORD cbData = *lpcbData;\n\t\tswitch(*lpType){\n\t\t\tcase REG_SZ: sprintf(sInfo, \"%s Data=\\\"%*.*s\\\"\\n\", sInfo, cbData-1, cbData-1, lpData); break; \n\t\t\tcase REG_DWORD: sprintf(sInfo, \"%s Data=0x%x\\n\", sInfo, *(DWORD *)lpData); break;\n\t\t\tcase REG_BINARY: sprintf(sInfo, \"%s Data=%s\\n\", sInfo, hexdump((BYTE *)lpData, cbData)); break;\n\t\t\tcase REG_NONE: sprintf(sInfo, \"%s Data=\\\"%s\\\"\\n\", sInfo, lpData); break;\n\t\t\tdefault: sprintf(sInfo, \"%s Data=???\\n\", sInfo); break;\n\t\t}\n\t}\n\telse \n\t\tsprintf(sInfo, \"%s\\n\", sInfo);\n\tOutTrace(sInfo);\n} \n\nstatic LONG myRegOpenKeyEx(\n\t\t\t    LPCSTR label,\n\t\t\t\tHKEY hKey,\n\t\t\t\tLPCTSTR lpSubKey,\n\t\t\t\tPHKEY phkResult)\n{\n\tFILE *regf;\n\tchar sKey[MAX_PATH+1];\n\tchar RegBuf[MAX_PATH+1];\n\n\tsprintf(sKey,\"%s\\\\%s\", hKey2String(hKey), lpSubKey);\n\tOutTraceR(\"%s: searching for key=\\\"%s\\\"\\n\", label, sKey);\n\n\tregf=OpenFakeRegistry();\n\tif(regf!=NULL){\n\t\tif(phkResult) *phkResult=HKEY_FAKE;\n\t\tfgets(RegBuf, 256, regf);\n\t\twhile (!feof(regf)){\n\t\t\tif(RegBuf[0]=='['){\n\t\t\t\t// beware: registry keys are case insensitive. Must use _strnicmp instead of strncmp\n\t\t\t\tif((!_strnicmp(&RegBuf[1],sKey,strlen(sKey))) && (RegBuf[strlen(sKey)+1]==']')){\n\t\t\t\t\tOutTraceR(\"%s: found fake Key=\\\"%s\\\" hkResult=%x\\n\", label, sKey, phkResult ? *phkResult : 0);\n\t\t\t\t\tfclose(regf);\n\t\t\t\t\treturn ERROR_SUCCESS;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif(phkResult) (*phkResult)--;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfgets(RegBuf, 256, regf);\n\t\t}\n\t\tfclose(regf);\n\t}\n\treturn ERROR_FILE_NOT_FOUND;\n}\n\n// ---------------------------------------------------------------------------------\n\nLONG WINAPI extRegOpenKeyEx(\n\t\t\t\tHKEY hKey,\n\t\t\t\tLPCTSTR lpSubKey,\n\t\t\t\tDWORD ulOptions,\n\t\t\t\tREGSAM samDesired,\n\t\t\t\tPHKEY phkResult)\n{\n\tLONG res;\n\n\tOutTraceR(\"RegOpenKeyEx: hKey=%x(%s) SubKey=\\\"%s\\\" Options=%x\\n\", \n\t\thKey, hKey2String(hKey), lpSubKey, ulOptions);\n\n\tif(dxw.dwFlags4 & OVERRIDEREGISTRY){\n\t\tres = myRegOpenKeyEx(\"RegOpenKeyEx\", hKey, lpSubKey, phkResult);\n\t\tif(res == ERROR_SUCCESS) return res;\n\t}\n\n\tif(dxw.dwFlags6 & WOW64REGISTRY){\n\t\tulOptions &= ~KEY_WOW64_32KEY;\n\t\tulOptions |= KEY_WOW64_64KEY;\n\t}\n\tif(dxw.dwFlags6 & WOW32REGISTRY){\n\t\tulOptions &= ~KEY_WOW64_64KEY;\n\t\tulOptions |= KEY_WOW64_32KEY;\n\t}\n\n\tres=(*pRegOpenKeyEx)(hKey, lpSubKey, ulOptions, samDesired, phkResult);\n\tOutTraceR(\"RegOpenKeyEx: res=%x phkResult=%x\\n\", res, phkResult ? *phkResult : 0); \n\n\tif((res==ERROR_SUCCESS) || !(dxw.dwFlags3 & EMULATEREGISTRY) || (dxw.dwFlags4 & OVERRIDEREGISTRY)) return res;\n\t\n\treturn myRegOpenKeyEx(\"RegOpenKeyEx\", hKey, lpSubKey, phkResult);\n}\n\n// extRegQueryValue: legacy API, almost always replaced by extRegQueryValueEx but referenced\n// in \"Warhammer 40.000 Shadow of the Horned Rat\"\n\nLONG WINAPI extRegQueryValue(\n\t\t\t\tHKEY hKey, \n\t\t\t\tLPCTSTR lpSubKey, \n\t\t\t\tLPTSTR lpValue, \n\t\t\t\tPLONG lpcbValue)\n{\n\tLONG res;\n\tFILE *regf;\n\n\tOutTraceR(\"RegQueryValue: hKey=%x(%s) SubKey=\\\"%s\\\"\\n\", hKey, hKey2String(hKey), lpSubKey);\n\t\n\tif (!IsFake(hKey)){\n\t\tres=(*pRegQueryValue)(hKey, lpSubKey, lpValue, lpcbValue);\n\t\tif(IsTraceR) LogKeyValue(\"RegQueryValue\", res, 0, (LPBYTE)lpValue, (LPDWORD)lpcbValue);\n\t\treturn res;\n\t}\n\n\tregf=OpenFakeRegistry();\n\tif(regf==NULL) {\n\t\tOutTraceR(\"RegQueryValue: error in OpenFakeRegistry err=%s\\n\", GetLastError());\t\n\t\treturn ERROR_FILE_NOT_FOUND;\n\t}\n\tres = SeekFakeKey(regf, hKey);\n\tif(res != ERROR_SUCCESS) {\n\t\tOutTraceR(\"RegQueryValue: error in SeekFakeKey res=%x hKey=%x\\n\", res, hKey);\t\n\t\treturn res;\n\t}\n\tres = SeekValueName(regf, lpSubKey);\n\tif(res != ERROR_SUCCESS) {\n\t\tOutTraceR(\"RegQueryValue: error in SeekValueName res=%x ValueName=%s\\n\", res, lpSubKey);\t\n\t\treturn res;\n\t}\n\tres = GetKeyValue(regf, \"RegQueryValue\", lpSubKey, NULL, (LPBYTE)lpValue, (LPDWORD)lpcbValue);\n\tif(IsTraceR) LogKeyValue(\"RegQueryValue\", res, NULL, (LPBYTE)lpValue, (LPDWORD)lpcbValue);\n\tfclose(regf);\n\treturn res;\n}\n\nLONG WINAPI extRegQueryValueEx(\n\t\t\t\tHKEY hKey, \n\t\t\t\tLPCTSTR lpValueName, \n\t\t\t\tLPDWORD lpReserved, \n\t\t\t\tLPDWORD lpType, // beware: could be NULL\n\t\t\t\tLPBYTE lpData,  // beware: could be NULL\n\t\t\t\tLPDWORD lpcbData)\n{\n\tLONG res;\n\tFILE *regf;\n\tDWORD cbData=0;\n\n\tOutTraceR(\"RegQueryValueEx: hKey=%x(\\\"%s\\\") ValueName=\\\"%s\\\" Reserved=%x lpType=%x lpData=%x lpcbData=%x\\n\", \n\t\thKey, hKey2String(hKey), lpValueName, lpReserved, lpType, lpData, lpcbData);\n\tif (!IsFake(hKey)){\n\t\tres=(*pRegQueryValueEx)(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData);\n\t\tif(IsTraceR) LogKeyValue(\"RegQueryValueEx\", res, lpType, lpData, lpcbData);\n\t\treturn res;\n\t}\n\n\tregf=OpenFakeRegistry();\n\tif(regf==NULL) {\n\t\tOutTraceR(\"RegQueryValueEx: error in OpenFakeRegistry err=%s\\n\", GetLastError());\t\n\t\treturn ERROR_FILE_NOT_FOUND;\n\t}\n\tres = SeekFakeKey(regf, hKey);\n\tif(res != ERROR_SUCCESS) {\n\t\tOutTraceR(\"RegQueryValueEx: error in SeekFakeKey res=%x hKey=%x\\n\", res, hKey);\t\n\t\treturn res;\n\t}\n\tres = SeekValueName(regf, lpValueName);\n\tif(res != ERROR_SUCCESS) {\n\t\tOutTraceR(\"RegQueryValueEx: error in SeekValueName res=%x ValueName=%s\\n\", res, lpValueName);\t\n\t\treturn res;\n\t}\n\tres = GetKeyValue(regf, \"RegQueryValueEx\", lpValueName, lpType, lpData, lpcbData);\n\tif(IsTraceR) LogKeyValue(\"RegQueryValueEx\", res, lpType, lpData, lpcbData);\n\tfclose(regf);\n\treturn res;\n}\n\nLONG WINAPI extRegCloseKey(HKEY hKey)\n{\n\tOutTraceR(\"RegCloseKey: hKey=%x\\n\", hKey);\n\tif (IsFake(hKey)) return ERROR_SUCCESS;\n\treturn (*pRegCloseKey)(hKey);\n}\n\nLONG WINAPI extRegFlushKey(HKEY hKey)\n{\n\tOutTraceR(\"RegFlushKey: hKey=%x\\n\", hKey);\n\tif (IsFake(hKey)) return ERROR_SUCCESS;\n\treturn (*pRegFlushKey)(hKey);\n}\n\nLONG WINAPI extRegSetValueEx(HKEY hKey, LPCTSTR lpValueName, DWORD Reserved, DWORD dwType, const BYTE *lpData, DWORD cbData)\n{\n\tif (IsTraceR){\n\t\tchar sInfo[1024];\n\t\tsprintf(sInfo, \"RegSetValueEx: hKey=%x ValueName=\\\"%s\\\" Type=%x(%s) cbData=%d\", hKey, lpValueName, dwType, ExplainRegType(dwType), cbData);\n\t\tswitch(dwType){\n\t\t\tcase REG_DWORD: OutTrace(\"%s Data=%x\\n\", sInfo, *(DWORD *)lpData); break;\n\t\t\tcase REG_NONE: OutTrace(\"%s Data=\\\"%s\\\"\\n\", sInfo, lpData); break;\n\t\t\tcase REG_BINARY: OutTrace(\"%s Data=%s\\n\", sInfo, hexdump((BYTE *)lpData, cbData)); break;\n\t\t\tcase REG_SZ: OutTrace(\"%s Data=\\\"%*.*s\\\"\\n\", sInfo, cbData-1, cbData-1, lpData); break;\n\t\t\tdefault: OutTrace(\"%s\\n\", sInfo);\n\t\t}\n\t}\n\tif(IsFake(hKey) && (dxw.dwFlags3 & EMULATEREGISTRY)) {\n\t\tOutTraceR(\"RegSetValueEx: SUPPRESS registry key set\\n\");\n\t\treturn ERROR_SUCCESS;\n\t}\n\treturn (*pRegSetValueEx)(hKey, lpValueName, Reserved, dwType, lpData, cbData);\n}\n\nLONG WINAPI extRegCreateKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LPTSTR lpClass, DWORD dwOptions, REGSAM samDesired,\n\t\t\t\tLPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition)\n{\n\tOutTraceR(\"RegCreateKeyEx: hKey=%x(%s) SubKey=\\\"%s\\\" Class=%x\\n\", hKey, hKey2String(hKey), lpSubKey, lpClass);\n\tif (dxw.dwFlags3 & EMULATEREGISTRY){\n\t\t*phkResult = HKEY_FAKE;\n        // V2.3.12: return existing fake key if any ....\n        if(dxw.dwFlags4 & OVERRIDEREGISTRY) myRegOpenKeyEx(\"RegCreateKeyEx\", hKey, lpSubKey, phkResult);\n\t\tif(lpdwDisposition) *lpdwDisposition=REG_OPENED_EXISTING_KEY;\n\t\treturn ERROR_SUCCESS;\n\t}\n\telse\n\t\treturn (*pRegCreateKeyEx)(hKey, lpSubKey, Reserved, lpClass, dwOptions, samDesired,\n\t\t\t\tlpSecurityAttributes, phkResult, lpdwDisposition);\n}\n\nLONG WINAPI extRegCreateKey(HKEY hKey, LPCTSTR lpSubKey, PHKEY phkResult)\n{\n\tOutTraceR(\"RegCreateKey: hKey=%x(%s) SubKey=\\\"%s\\\"\\n\", hKey, hKey2String(hKey), lpSubKey);\n\tif (dxw.dwFlags3 & EMULATEREGISTRY){\n\t\t*phkResult = HKEY_FAKE;\n        // V2.3.12: return existing fake key if any ....\n        if(dxw.dwFlags4 & OVERRIDEREGISTRY) myRegOpenKeyEx(\"RegCreateKey\", hKey, lpSubKey, phkResult);\n\t\treturn ERROR_SUCCESS;\n\t}\n\telse\n\t\treturn (*pRegCreateKey)(hKey, lpSubKey, phkResult);\n}\n\nLONG WINAPI extRegEnumValueA(HKEY hKey, DWORD dwIndex, LPTSTR lpValueName, LPDWORD lpcchValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData)\n{\n\tLONG res;\n\n\tOutTraceR(\"RegEnumValue: hKey=%x(\\\"%s\\\") index=%d cchValueName=%d Reserved=%x lpType=%x lpData=%x lpcbData=%x\\n\", \n\t\thKey, hKey2String(hKey), dwIndex, *lpcchValueName, lpReserved, lpType, lpData, lpcbData);\n\tif (!IsFake(hKey)){\n\t\tres=(*pRegEnumValueA)(hKey, dwIndex, lpValueName, lpcchValueName, lpReserved, lpType, lpData, lpcbData);\n\t\tif(IsTraceR) LogKeyValue(\"RegQueryValueEx\", res, lpType, lpData, lpcbData);\n\t\treturn res;\n\t}\n\n\t// try emulated registry\n\tFILE *regf;\n\tregf=OpenFakeRegistry();\n\tif(regf==NULL) return ERROR_FILE_NOT_FOUND;\n\tres = SeekFakeKey(regf, hKey);\n\tif(res != ERROR_SUCCESS) return res;\n\tres = SeekValueIndex(regf, dwIndex, lpValueName, lpcchValueName);\n\tif(res != ERROR_SUCCESS) return res;\n\tres = GetKeyValue(regf, \"RegEnumValue\", lpValueName, lpType, lpData, lpcbData);\n\tif(IsTraceR) LogKeyValue(\"RegEnumValue\", res, lpType, lpData, lpcbData);\n\tfclose(regf);\n\treturn res;\n}\n\n#ifdef TOBEDONE\nLONG WINAPI RegQueryInfoKey(\n  _In_        HKEY      hKey,\n  _Out_opt_   LPTSTR    lpClass,\n  _Inout_opt_ LPDWORD   lpcClass,\n  _Reserved_  LPDWORD   lpReserved,\n  _Out_opt_   LPDWORD   lpcSubKeys,\n  _Out_opt_   LPDWORD   lpcMaxSubKeyLen,\n  _Out_opt_   LPDWORD   lpcMaxClassLen,\n  _Out_opt_   LPDWORD   lpcValues,\n  _Out_opt_   LPDWORD   lpcMaxValueNameLen,\n  _Out_opt_   LPDWORD   lpcMaxValueLen,\n  _Out_opt_   LPDWORD   lpcbSecurityDescriptor,\n  _Out_opt_   PFILETIME lpftLastWriteTime\n);\n#endif"
  },
  {
    "path": "dll/avifile.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n//#include \"syslibs.h\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n#include <Vfw.h>\n\ntypedef VOID\t(WINAPI *AVIFileInit_Type)(void);\ntypedef LONG\t(WINAPI *AVIFileRelease_Type)(PAVIFILE);\ntypedef LONG\t(WINAPI *AVIStreamRelease_Type)(PAVISTREAM);\ntypedef PGETFRAME (WINAPI *AVIStreamGetFrameOpen_Type)(PAVISTREAM, LPBITMAPINFOHEADER);\ntypedef HRESULT (WINAPI *AVIFileOpenA_Type)(PAVIFILE *, LPCTSTR, UINT, LPCLSID); \ntypedef HRESULT (WINAPI *AVIFileOpenW_Type)(PAVIFILE *, LPCWSTR, UINT, LPCLSID); \ntypedef HRESULT (WINAPI *AVIFileGetStream_Type)(PAVIFILE, PAVISTREAM *, DWORD, LONG);\n\nAVIFileInit_Type pAVIFileInit = NULL;\nAVIFileRelease_Type pAVIFileRelease = NULL;\nAVIStreamRelease_Type pAVIStreamRelease = NULL;\nAVIStreamGetFrameOpen_Type pAVIStreamGetFrameOpen = NULL;\nAVIFileOpenA_Type pAVIFileOpenA = NULL;\nAVIFileOpenW_Type pAVIFileOpenW = NULL;\nAVIFileGetStream_Type pAVIFileGetStream = NULL;\n\nVOID WINAPI extAVIFileInit(void);\nLONG WINAPI extAVIFileRelease(PAVIFILE);\nLONG WINAPI extAVIStreamRelease(PAVISTREAM);\nPGETFRAME WINAPI extAVIStreamGetFrameOpen(PAVISTREAM, LPBITMAPINFOHEADER);\nHRESULT extAVIFileOpenA(PAVIFILE *, LPCTSTR, UINT, LPCLSID);\nHRESULT extAVIFileOpenW(PAVIFILE *, LPCWSTR, UINT, LPCLSID);\nHRESULT WINAPI extAVIFileGetStream(PAVIFILE, PAVISTREAM *, DWORD, LONG);\n\nstatic HookEntryEx_Type Hooks[]={\n\t//{HOOK_IAT_CANDIDATE, 0, \"AVIFileClose\", NULL, (FARPROC *)&pAVIFileClose, (FARPROC)extAVIFileClose},\n\t{HOOK_IAT_CANDIDATE, 0, \"AVIFileInit\", NULL, (FARPROC *)&pAVIFileInit, (FARPROC)extAVIFileInit},\n\t// hooking AVIFileOpenA makes \"Die Hard Trilogy\" DIEHARD.EXE crash!\n\t//{HOOK_IAT_CANDIDATE, 0, \"AVIFileOpenA\", NULL, (FARPROC *)&pAVIFileOpenA, (FARPROC)extAVIFileOpenA}, \n\t//{HOOK_IAT_CANDIDATE, 0, \"AVIFileOpenW\", NULL, (FARPROC *)&pAVIFileOpenW, (FARPROC)extAVIFileOpenW}, \n\t{HOOK_IAT_CANDIDATE, 0, \"AVIFileRelease\", NULL, (FARPROC *)&pAVIFileRelease, (FARPROC)extAVIFileRelease},\n\t{HOOK_IAT_CANDIDATE, 0, \"AVIStreamRelease\", NULL, (FARPROC *)&pAVIStreamRelease, (FARPROC)extAVIStreamRelease},\n\t{HOOK_IAT_CANDIDATE, 0, \"AVIStreamGetFrameOpen\", NULL, (FARPROC *)&pAVIStreamGetFrameOpen, (FARPROC)extAVIStreamGetFrameOpen},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\n\nvoid HookAVIFil32(HMODULE module)\n{\n\tHookLibraryEx(module, Hooks, \"AVIFIL32.dll\");\n}\n\nFARPROC Remap_AVIFil32_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tif (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\treturn NULL;\n}\n\nstatic char *AviErr(HRESULT res)\n{\n\tchar *s;\n\tswitch (res){\n\t\tcase AVIERR_BADFORMAT:\t\ts=\"AVIERR_BADFORMAT\"; break;\n\t\tcase AVIERR_MEMORY:\t\t\ts=\"AVIERR_MEMORY\"; break;\n\t\tcase AVIERR_FILEREAD:\t\ts=\"AVIERR_FILEREAD\"; break;\n\t\tcase AVIERR_FILEOPEN:\t\ts=\"AVIERR_FILEOPEN\"; break;\n\t\tcase REGDB_E_CLASSNOTREG:\ts=\"REGDB_E_CLASSNOTREG\"; break;\n\t\tcase AVIERR_NODATA:\t\t\ts=\"AVIERR_NODATA\"; break;\n\t\tcase AVIERR_BUFFERTOOSMALL:\ts=\"AVIERR_BUFFERTOOSMALL\"; break;\n\t\tdefault:\t\t\t\t\ts=\"unknown\"; break;\n\t}\n\treturn s;\n}\n\n// OF_CREATE\t\t\tCreates a new file. If the file already exists, it is truncated to zero length.\n// OF_PARSE\t\t\t\tSkips time-consuming operations, such as building an index. Set this flag if you want the function to return as quickly as possiblefor example, if you are going to query the file properties but not read the file.\n// OF_READ\t\t\t\tOpens the file for reading.\n// OF_READWRITE\t\t\tOpens the file for reading and writing.\n// OF_SHARE_DENY_NONE\tOpens the file nonexclusively. Other processes can open the file with read or write access. AVIFileOpen fails if another process has opened the file in compatibility mode.\n// OF_SHARE_DENY_READ\tOpens the file nonexclusively. Other processes can open the file with write access. AVIFileOpen fails if another process has opened the file in compatibility mode or has read access to it.\n// OF_SHARE_DENY_WRITE\tOpens the file nonexclusively. Other processes can open the file with read access. AVIFileOpen fails if another process has opened the file in compatibility mode or has write access to it.\n// OF_SHARE_EXCLUSIVE\tOpens the file and denies other processes any access to it. AVIFileOpen fails if any other process has opened the file.\n// OF_WRITE\t\t\t\tOpens the file for writing.\n\nstatic char *AviMode(UINT c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"OF_\");\n\tif (c & OF_CREATE) strcat(eb, \"CREATE+\");\n\tif (c & OF_PARSE) strcat(eb, \"PARSE+\");\n\tif (c & OF_READ) strcat(eb, \"READ+\");\n\tif (c & OF_READWRITE) strcat(eb, \"READWRITE+\");\n\tif (c & OF_SHARE_DENY_NONE) strcat(eb, \"SHARE_DENY_NONE+\"); \n\tif ((c & OF_SHARE_DENY_READ) == OF_SHARE_DENY_READ) strcat(eb, \"SHARE_DENY_READ+\"); // 0x30, there are two bits ....\n\tif (c & OF_SHARE_DENY_WRITE) strcat(eb, \"SHARE_DENY_WRITE+\");\n\tif (c & OF_SHARE_EXCLUSIVE) strcat(eb, \"SHARE_EXCLUSIVE+\");\n\tif (c & OF_WRITE) strcat(eb, \"WRITE+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"OF_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nVOID WINAPI extAVIFileInit(void)\n{\n\tOutTraceDW(\"AVIFileInit\\n\");\n\t(*pAVIFileInit)();\n}\n \nHRESULT extAVIFileOpenA(PAVIFILE *ppfile, LPCSTR szFile, UINT mode, LPCLSID pclsid)\n{\n\tHRESULT res;\n\tif(IsTraceDW){\n\t\tchar sClassId[80];\n\t\tif(pclsid) sprintf_s(sClassId, 80, \"%x.%x.%x.%x\", pclsid->Data1, pclsid->Data2, pclsid->Data3, pclsid->Data4);\n\t\telse strcpy(sClassId, \"(null)\");\n\t\tOutTrace(\"AVIFileOpenA: file=\\\"%s\\\" mode=%x(%s) clsid=%s\\n\", szFile, mode, AviMode(mode), sClassId);\n\t}\n\tres = (*pAVIFileOpenA)(ppfile, szFile, mode, pclsid);\n\tif(res) {\n\t\tOutTraceDW(\"AVIFileOpenA ERROR: res=%x(%s)\\n\", res, AviErr(res));\n\t}\n\telse {\n\t\tOutTraceE(\"AVIFileOpenA: pfile=%x\\n\", *ppfile);\n\t}\n\treturn res;\n}\n\nHRESULT extAVIFileOpenW(PAVIFILE *ppfile, LPCWSTR szFile, UINT mode, LPCLSID pclsid)\n{\n\tHRESULT res;\n\tif(IsTraceDW){\n\t\tchar sClassId[80];\n\t\tif(pclsid) sprintf_s(sClassId, 80, \"%x.%x.%x.%x\", pclsid->Data1, pclsid->Data2, pclsid->Data3, pclsid->Data4);\n\t\telse strcpy(sClassId, \"(null)\");\n\t\tOutTrace(\"AVIFileOpenW: file=\\\"%ls\\\" mode=%x(%s) clsid=%s\\n\", szFile, mode, AviMode(mode), sClassId);\n\t}\n\treturn (*pAVIFileOpenW)(ppfile, szFile, mode, pclsid);\n\tres = (*pAVIFileOpenW)(ppfile, szFile, mode, pclsid);\n\tif(res) {\n\t\tOutTraceDW(\"AVIFileOpenW ERROR: res=%x(%s)\\n\", res, AviErr(res));\n\t}\n\telse {\n\t\tOutTraceE(\"AVIFileOpenW: pfile=%x\\n\", *ppfile);\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extAVIFileGetStream(PAVIFILE pfile, PAVISTREAM *ppavi, DWORD fccType, LONG lParam)\n{\n\tHRESULT res;\n\tOutTraceDW(\"AVIFileGetStream: pfile=%x fcctype=%x lparam=%x\\n\", pfile, fccType, lParam);\n\tres = (*pAVIFileGetStream)(pfile, ppavi, fccType, lParam);\n\tif(res) {\n\t\tOutTraceDW(\"AVIFileGetStream ERROR: res=%x(%s)\\n\", res, AviErr(res));\n\t}\n\telse {\n\t\tOutTraceE(\"AVIFileGetStream: pavi=%x\\n\", *ppavi);\n\t}\n\treturn res;\n}\n\nLONG WINAPI extAVIFileRelease(PAVIFILE pavi)\n{\n\tOutTraceDW(\"AVIFileRelease: pavi=%x\\n\", pavi);\n\tif(pavi==NULL) {\n\t\t// intercepting AVIFileRelease(NULL) avoids an exception in \"Die Hard Trilogy\" !!!\n\t\tOutTraceE(\"AVIFileRelease: pavi=NULL condition - returns OK\\n\");\n\t\treturn 0;\n\t}\n\treturn (*pAVIFileRelease)(pavi);\n}\n\nLONG WINAPI extAVIStreamRelease(PAVISTREAM pavi)\n{\n\tOutTraceDW(\"AVIStreamRelease: pavi=%x\\n\", pavi);\n\tif(pavi==NULL) {\n\t\tOutTraceE(\"AVIFileRelease: pavi=NULL condition - returns OK\\n\");\n\t\treturn 0;\n\t}\n\treturn (*pAVIStreamRelease)(pavi);\n}\n\nPGETFRAME WINAPI extAVIStreamGetFrameOpen(PAVISTREAM pavi, LPBITMAPINFOHEADER lpbiWanted)\n{\n\tif(IsTraceDW){\n\t\tchar sColor[12];\n\t\tswitch ((DWORD)lpbiWanted){\n\t\t\tcase 0: strcpy(sColor, \"DEFAULT\"); break;\n\t\t\tcase AVIGETFRAMEF_BESTDISPLAYFMT: strcpy(sColor, \"BEST\"); break;\n\t\t\tdefault: sprintf(sColor,\"%d\", lpbiWanted->biBitCount);\n\t\t}\n\t\tOutTrace(\"AVIStreamGetFrameOpen: pavi=%x lpbiwanted=%x bitcount=%s\\n\", pavi, lpbiWanted, sColor);\n\t}\n\n\tif((dxw.dwFlags6 & FIXMOVIESCOLOR) && (((DWORD)lpbiWanted == 0) || ((DWORD)lpbiWanted == AVIGETFRAMEF_BESTDISPLAYFMT))){\n\t\tBITMAPINFOHEADER biWanted;\n\t\tmemset(&biWanted, 0, sizeof(BITMAPINFOHEADER));\n\t\tbiWanted.biSize = sizeof(BITMAPINFOHEADER);\n\t\tbiWanted.biBitCount = (WORD)dxw.VirtualPixelFormat.dwRGBBitCount;\n\t\tbiWanted.biPlanes = 1;\n\t\tif(biWanted.biBitCount < 32) \n\t\tbiWanted.biClrUsed = (0x1 << biWanted.biBitCount); // 8 -> 256;\n\t\telse\n\t\t\tbiWanted.biClrUsed = 0;\n\t\tbiWanted.biClrImportant = biWanted.biClrUsed;\n\t\treturn (*pAVIStreamGetFrameOpen)(pavi, &biWanted);\n\t}\n\n\treturn (*pAVIStreamGetFrameOpen)(pavi, lpbiWanted);\n}\n\n\n"
  },
  {
    "path": "dll/comctl32.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n\ntypedef BOOL (WINAPI *InitializeFlatSB_Type)(HWND);\nInitializeFlatSB_Type pInitializeFlatSB = NULL;\nBOOL WINAPI extInitializeFlatSB(HWND);\ntypedef BOOL (WINAPI *UninitializeFlatSB_Type)(HWND);\nInitializeFlatSB_Type pUninitializeFlatSB = NULL;\nBOOL WINAPI extUninitializeFlatSB(HWND);\n\nstatic HookEntryEx_Type Hooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"InitializeFlatSB\", NULL, (FARPROC *)&pInitializeFlatSB, (FARPROC)extInitializeFlatSB},\n\t{HOOK_IAT_CANDIDATE, 0, \"UninitializeFlatSB\", NULL, (FARPROC *)&pUninitializeFlatSB, (FARPROC)extUninitializeFlatSB},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nvoid HookComCtl32(HMODULE module)\n{\n\tHookLibraryEx(module, Hooks, \"comctl32.dll\");\n}\n\nFARPROC Remap_ComCtl32_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tif (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\treturn NULL;\n}\n\nBOOL WINAPI extInitializeFlatSB(HWND hwnd)\n{\n\tBOOL ret;\n\tOutTraceDW(\"InitializeFlatSB: hwnd=%x\\n\", hwnd);\n\tif(dxw.IsFullScreen() && dxw.IsRealDesktop(hwnd)) {\n\t\tOutTraceDW(\"InitializeFlatSB: hwnd=%x->%x\\n\", hwnd, dxw.GethWnd());\n\t\thwnd = dxw.GethWnd();\n\t}\n\tret = (*pInitializeFlatSB)(hwnd);\n\tif(!ret)OutTraceDW(\"InitializeFlatSB: ret=%x\\n\", ret);\n\treturn ret;\n}\n\nBOOL WINAPI extUninitializeFlatSB(HWND hwnd)\n{\n\tBOOL ret;\n\tOutTraceDW(\"InitializeFlatSB: hwnd=%x\\n\", hwnd);\n\tif(dxw.IsFullScreen() && dxw.IsRealDesktop(hwnd)) {\n\t\tOutTraceDW(\"UninitializeFlatSB: hwnd=%x->%x\\n\", hwnd, dxw.GethWnd());\n\t\thwnd = dxw.GethWnd();\n\t}\n\tret = (*pUninitializeFlatSB)(hwnd);\n\tif(!ret)OutTraceDW(\"UninitializeFlatSB: ret=%x\\n\", ret);\n\treturn ret;\n}\n"
  },
  {
    "path": "dll/comdlg32.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n\ntypedef BOOL (WINAPI *GetFileNameA_Type)(LPOPENFILENAMEA);\ntypedef BOOL (WINAPI *GetFileNameW_Type)(LPOPENFILENAMEW);\nGetFileNameA_Type pGetOpenFileNameA = NULL;\nGetFileNameA_Type pGetSaveFileNameA = NULL;\nGetFileNameW_Type pGetOpenFileNameW = NULL;\nGetFileNameW_Type pGetSaveFileNameW = NULL;\nBOOL WINAPI extGetSaveFileNameA(LPOPENFILENAMEA);\nBOOL WINAPI extGetOpenFileNameA(LPOPENFILENAMEA);\nBOOL WINAPI extGetSaveFileNameW(LPOPENFILENAMEW);\nBOOL WINAPI extGetOpenFileNameW(LPOPENFILENAMEW);\n\nstatic HookEntryEx_Type Hooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"GetSaveFileNameA\", NULL, (FARPROC *)&pGetSaveFileNameA, (FARPROC)extGetSaveFileNameA},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetOpenFileNameA\", NULL, (FARPROC *)&pGetOpenFileNameA, (FARPROC)extGetOpenFileNameA},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetSaveFileNameW\", NULL, (FARPROC *)&pGetSaveFileNameW, (FARPROC)extGetSaveFileNameW},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetOpenFileNameW\", NULL, (FARPROC *)&pGetOpenFileNameW, (FARPROC)extGetOpenFileNameW},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nvoid HookComDlg32(HMODULE module)\n{\n\tHookLibraryEx(module, Hooks, \"comdlg32.dll\");\n}\n\nFARPROC Remap_ComDlg32_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tif (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\treturn NULL;\n}\n\nBOOL WINAPI extGetSaveFileNameA(LPOPENFILENAMEA lpofn)\n{\n\tBOOL ret, FullScreen;\n\tFullScreen = dxw.IsFullScreen();\n\tOutTraceDW(\"GetSaveFileNameA: FullScreen=%x\\n\", FullScreen);\n\tdxw.SetFullScreen(FALSE);\n\tret = (*pGetSaveFileNameA)(lpofn);\n\tdxw.SetFullScreen(FullScreen);\n\tOutTraceDW(\"GetSaveFileNameA: ret=%x\\n\", ret);\n\treturn ret;\n}\n\nBOOL WINAPI extGetOpenFileNameA(LPOPENFILENAMEA lpofn)\n{\n\tBOOL ret, FullScreen;\n\tFullScreen = dxw.IsFullScreen();\n\tOutTraceDW(\"GetOpenFileNameA: FullScreen=%x\\n\", FullScreen);\n\tdxw.SetFullScreen(FALSE);\n\tret = (*pGetOpenFileNameA)(lpofn);\n\tdxw.SetFullScreen(FullScreen);\n\tOutTraceDW(\"GetOpenFileNameA: ret=%x\\n\", ret);\n\treturn ret;\n}\n\nBOOL WINAPI extGetSaveFileNameW(LPOPENFILENAMEW lpofn)\n{\n\tBOOL ret, FullScreen;\n\tFullScreen = dxw.IsFullScreen();\n\tOutTraceDW(\"GetSaveFileNameW: FullScreen=%x\\n\", FullScreen);\n\tdxw.SetFullScreen(FALSE);\n\tret = (*pGetSaveFileNameW)(lpofn);\n\tdxw.SetFullScreen(FullScreen);\n\tOutTraceDW(\"GetSaveFileNameW: ret=%x\\n\", ret);\n\treturn ret;\n}\n\nBOOL WINAPI extGetOpenFileNameW(LPOPENFILENAMEW lpofn)\n{\n\tBOOL ret, FullScreen;\n\tFullScreen = dxw.IsFullScreen();\n\tOutTraceDW(\"GetOpenFileNameW: FullScreen=%x\\n\", FullScreen);\n\tdxw.SetFullScreen(FALSE);\n\tret = (*pGetOpenFileNameW)(lpofn);\n\tdxw.SetFullScreen(FullScreen);\n\tOutTraceDW(\"GetOpenFileNameW: ret=%x\\n\", ret);\n\treturn ret;\n}\n"
  },
  {
    "path": "dll/cpulimit.cpp",
    "content": "#include <windows.h>\n#include <tlhelp32.h>\n#include <tchar.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n\n#define MAX_THREAD_ARRAY 40\n\n// forward declarations\nBOOL SlowCpuSpeed(DWORD, DWORD, int);\nBOOL LimitCpuUsage(DWORD, DWORD, int);\n\nDWORD WINAPI CpuSlow(LPVOID lpThreadParameter) \n{\n\tint iSlowDownRatio = dxw.SlowRatio;\n\tDWORD dwOwnerPID = GetCurrentProcessId();\n\tDWORD dwOwnerThread = GetCurrentThreadId();\n\tOutTrace(\"starting CPUSlow dwOwnerPID=%x Ratio=1:%d\\n\", dwOwnerPID, iSlowDownRatio);\n\tif(!dwOwnerPID) return FALSE;\n\tif(iSlowDownRatio < 1) return FALSE;\n\tSleep(100);\n\twhile(TRUE) SlowCpuSpeed(dwOwnerPID, dwOwnerThread, iSlowDownRatio);\n\treturn TRUE;\n} \n\nDWORD WINAPI CpuLimit(LPVOID lpThreadParameter) \n{\n\tint iSlowDownRatio = dxw.SlowRatio;\n\tDWORD dwOwnerPID = GetCurrentProcessId();\n\tDWORD dwOwnerThread = GetCurrentThreadId();\n\tOutTrace(\"starting CPULimit dwOwnerPID=%x Ratio=1:%d\\n\", dwOwnerPID, iSlowDownRatio);\n\tif(!dwOwnerPID) return FALSE;\n\tif(iSlowDownRatio < 1) return FALSE;\n\treturn LimitCpuUsage(dwOwnerPID, dwOwnerThread, iSlowDownRatio);\n}\n\nBOOL SlowCpuSpeed(DWORD dwOwnerPID, DWORD dwOwnerThread, int iSlowDownRatio) \n{ \n\tHANDLE hThreadSnap = INVALID_HANDLE_VALUE; \n\tTHREADENTRY32 te32; \n\tHANDLE SuspThreads[MAX_THREAD_ARRAY];\n\tint iThreadIndex, iNumThreads;\n\n\t// Take a snapshot of all running threads  \n\thThreadSnap = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 ); \n\tif(hThreadSnap == INVALID_HANDLE_VALUE) {\n\t\tOutTrace(\"LimitCpuUsage: CreateToolhelp32Snapshot ERROR err=%d\\n\", GetLastError());\n\t\treturn FALSE;\n\t}\n\n\t// Fill in the size of the structure before using it. \n\tte32.dwSize = sizeof(THREADENTRY32); \n\n\t// Retrieve information about the first thread, and exit if unsuccessful\n\tif(!Thread32First(hThreadSnap, &te32)){\n\t\tOutTrace(\"Thread32First ERROR: err=%d\\n\", GetLastError());  // Show cause of failure\n\t\tCloseHandle(hThreadSnap);     // Must clean up the snapshot object!\n\t\treturn FALSE;\n\t}\n\n\t// Now walk the thread list of the system,\n\t// and stop each low-priority thread\n\tiThreadIndex = 0;\n\tdo { \n\t\tif( (te32.th32OwnerProcessID == dwOwnerPID) && \n\t\t\t(te32.th32ThreadID != dwOwnerThread) &&\n\t\t\t(te32.tpBasePri < THREAD_PRIORITY_TIME_CRITICAL)) {\n\n\t\t\tHANDLE hThread = OpenThread(THREAD_SUSPEND_RESUME, FALSE, te32.th32ThreadID);\n\t\t\tSuspendThread(hThread);\n\t\t\tSuspThreads[iThreadIndex++] = hThread;\n\t\t}\n\t} while(Thread32Next(hThreadSnap, &te32) && (iThreadIndex<MAX_THREAD_ARRAY));\n\tiNumThreads = iThreadIndex;\n\n\t//  Don't forget to clean up the snapshot object.\n\tCloseHandle(hThreadSnap);\n\n\tSleep(iSlowDownRatio);\n\n\t// Now resume all suspended threads\n\tfor(iThreadIndex=0; iThreadIndex<iNumThreads; iThreadIndex++) {\n\t\tResumeThread(SuspThreads[iThreadIndex]);\n\t\tCloseHandle(SuspThreads[iThreadIndex]);\n\t}\n\n\t//Sleep(Percentage);\n\tSleep(1);\n\treturn TRUE;\n}\n\ntypedef struct{\n\tDWORD tid;\n\tHANDLE hThread;\n\tFILETIME LastUsed;\n\tsigned long DeltaUsed;\n\tBOOL Suspended;\n} ThreadDesc_Type;\n\nstatic FILETIME FTFTSUM(FILETIME a, FILETIME b)\n{\n\tFILETIME s;\n\ts.dwHighDateTime = a.dwHighDateTime + b.dwHighDateTime;\n\t__try{ s.dwLowDateTime = a.dwLowDateTime + b.dwLowDateTime;}\n\t__except (EXCEPTION_EXECUTE_HANDLER){ s.dwHighDateTime += 1; }; // add reminder on overflow\n\treturn s;\n}\n\nstatic FILETIME FTDWSUM(FILETIME a, DWORD b)\n{\n\tFILETIME s;\n\ts.dwHighDateTime = a.dwHighDateTime;\n\t__try{ s.dwLowDateTime = a.dwLowDateTime + b;}\n\t__except (EXCEPTION_EXECUTE_HANDLER){ s.dwHighDateTime += 1; }; // add reminder on overflow\n\treturn s;\n}\n\nstatic DWORD DWDIFF(FILETIME a, FILETIME b)\n{\n\t// we suppose that the difference can't be greater to 2^sizeof(DWORD), so\n\t// dwHighDateTime values are either identical or 1 greater\n\tDWORD d;\n\tif(a.dwHighDateTime == a.dwHighDateTime)\n\t\td = a.dwLowDateTime - b.dwLowDateTime;\n\telse\n\t\td = b.dwLowDateTime - a.dwLowDateTime;\n\treturn d;\n}\n\n//#define DEBUGTRACE 1\n\nstatic BOOL RefreshThreadList(int *iNumThreads, ThreadDesc_Type ProcessThreads[], DWORD dwOwnerPID, DWORD dwOwnerThread)\n{\n\tTHREADENTRY32 te32;\n\tHANDLE hThreadSnap = INVALID_HANDLE_VALUE; \n\tint iThreadIndex;\n\tFILETIME CreationTime, ExitTime, KernelTime, UserTime;\n\n\tOutTrace(\"LimitCpuUsage: refreshing thread list\\n\");\n\tte32.dwSize = sizeof(THREADENTRY32); \n\n\t// Take a snapshot of all running threads  \n\thThreadSnap = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 ); \n\tif(hThreadSnap == INVALID_HANDLE_VALUE) {\n\t\tOutTrace(\"LimitCpuUsage: CreateToolhelp32Snapshot ERROR err=%d\\n\", GetLastError());\n\t\treturn FALSE;\n\t}\n\n\t// Retrieve information about the first thread, and exit if unsuccessful\n\tif(!Thread32First(hThreadSnap, &te32)){\n\t\tOutTrace(\"LimitCpuUsage: Thread32First ERROR err=%d\\n\", GetLastError());  // Show cause of failure\n\t\tCloseHandle(hThreadSnap);     // Must clean up the snapshot object!\n\t\treturn FALSE;\n\t}\n\n\t// Now walk the thread list of the system threads,\n\t// and take a snapshot of each target low-priority thread\n\tdo { \n\t\tif( (te32.th32OwnerProcessID == dwOwnerPID) && \n\t\t\t(te32.th32ThreadID != dwOwnerThread) &&\n\t\t\t(te32.tpBasePri < THREAD_PRIORITY_TIME_CRITICAL)) {\n\n\t\t\t// find threads already listed\n\t\t\tBOOL IsListed = FALSE;\n\t\t\tiThreadIndex = *iNumThreads;\n\t\t\tfor(int j=0; j<(*iNumThreads); j++){\n\t\t\t\tif(ProcessThreads[j].tid == 0) iThreadIndex=j; // find a list hole, if existing\n\t\t\t\tif(te32.th32ThreadID == ProcessThreads[j].tid){\n\t\t\t\t\tIsListed = TRUE;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// if not in the list, add\n\t\t\tif(!IsListed){\n\t\t\t\tHANDLE hThread = OpenThread(THREAD_QUERY_INFORMATION|THREAD_SUSPEND_RESUME, FALSE, te32.th32ThreadID);\n\t\t\t\tif(!GetThreadTimes(hThread, &CreationTime, &ExitTime, &KernelTime, &UserTime)) continue;\n\t\t\t\tProcessThreads[iThreadIndex].LastUsed = FTFTSUM(UserTime, KernelTime);\n\t\t\t\tProcessThreads[iThreadIndex].hThread =hThread;\n\t\t\t\tProcessThreads[iThreadIndex].tid = te32.th32ThreadID;\n\t\t\t\tProcessThreads[iThreadIndex].Suspended = FALSE;\n#ifdef DEBUGTRACE\n\t\t\t\tOutTrace(\"Tid[%d]:%x init time=%d\\n\", iThreadIndex, te32.th32ThreadID, ProcessThreads[iThreadIndex].LastUsed);\n#endif\n\t\t\t\tiThreadIndex++;\n\t\t\t\tif(iThreadIndex> *iNumThreads) *iNumThreads = iThreadIndex;\n\t\t\t}\n\t\t}\n\t} while(Thread32Next(hThreadSnap, &te32) && (*iNumThreads<MAX_THREAD_ARRAY-1));\n#ifdef DEBUGTRACE\n\tOutTrace(\"Got %d threads\\n\", *iNumThreads);\n#endif\n\t//  Don't forget to clean up the snapshot object.\n\tCloseHandle(hThreadSnap);\n\treturn TRUE;\n}\n\n\nBOOL LimitCpuUsage(DWORD dwOwnerPID, DWORD dwOwnerThread, int iSlowDownRatio) \n{ \n\tThreadDesc_Type ProcessThreads[MAX_THREAD_ARRAY];\n\tint iThreadIndex, iNumThreads;\n\tint cycle;\n\tint iResumeCount;\n\tDWORD iTimeLimit = 100000;\n\tDWORD iTimeSlot = 100000 / iSlowDownRatio;\n\tFILETIME CreationTime, ExitTime, KernelTime, UserTime;\n\n\tOutTrace(\"LimitCpuUsage: TimeLimit=%ld TimeSlot=%ld\\n\", iTimeLimit, iTimeSlot);\n\n\t// Fill in the size of the structure before using it. \n\tfor(int i=0; i<MAX_THREAD_ARRAY; i++) {\n\t\tProcessThreads[i].DeltaUsed = 0;\n\t\tProcessThreads[i].Suspended = FALSE;\n\t\tProcessThreads[i].tid = 0;\n\t}\n\n\tiNumThreads = 0;\n\tfor(cycle=0; TRUE; cycle++){\n\t\tif(cycle == 0) if(!RefreshThreadList(&iNumThreads, ProcessThreads, dwOwnerPID, dwOwnerThread)) break;\n\n\t\tif(cycle > 100) cycle=0; // every 100 cyces forces a thread list refresh\n\n\t\tfor(iThreadIndex=0; iThreadIndex<iNumThreads; iThreadIndex++) {\n\t\t\tThreadDesc_Type *t = &ProcessThreads[iThreadIndex];\n\t\t\tif (t->DeltaUsed > (signed long)iTimeLimit) {\n#ifdef DEBUGTRACE\n\t\t\t\tOutTrace(\"Tid[%d]:%x delta=%d stopped at %d\\n\", iThreadIndex, t->tid, t->DeltaUsed,  __LINE__);\n#endif\n\t\t\t\tif ((iResumeCount=SuspendThread(t->hThread))== -1) {\n\t\t\t\t\tt->tid = NULL;\n\t\t\t\t\tCloseHandle(t->hThread);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tt->Suspended = TRUE;\n\t\t\t\tt->DeltaUsed -= iTimeSlot;\n\t\t\t}\n\t\t}\n\n\t\tSleep(iSlowDownRatio);\n\n\t\tfor(iThreadIndex=0; iThreadIndex<iNumThreads; iThreadIndex++) {\n\t\t\tThreadDesc_Type *t = &ProcessThreads[iThreadIndex];\n\n\t\t\tif (t->tid == NULL) continue; // skip terminated ones\n\n\t\t\tif (t->Suspended) {\n#ifdef DEBUGTRACE\n\t\t\t\tOutTrace(\"Tid[%d]=%x delta=%d started at %d\\n\", iThreadIndex, t->tid, t->DeltaUsed, __LINE__);\n#endif\n\t\t\t\tif ((iResumeCount=ResumeThread(t->hThread))== -1) {\n\t\t\t\t\tt->tid = NULL;\n\t\t\t\t\tCloseHandle(t->hThread);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tt->Suspended = FALSE;\n\t\t\t\tt->DeltaUsed -= iTimeSlot;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif(!GetThreadTimes(t->hThread, &CreationTime, &ExitTime, &KernelTime, &UserTime)) {\n\t\t\t\t\tt->tid = NULL;\n\t\t\t\t\tCloseHandle(t->hThread);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\t\n\t\t\t\tFILETIME tmp = t->LastUsed;\n\t\t\t\tt->LastUsed = FTFTSUM(UserTime, KernelTime);\n\t\t\t\tt->DeltaUsed = t->DeltaUsed + DWDIFF(t->LastUsed, tmp);\n#ifdef DEBUGTRACE\n\t\t\t\tOutTrace(\"Tid[%d]:%x delta=%d measured at %d\\n\", iThreadIndex, t->tid, t->DeltaUsed, __LINE__);\n#endif\n\t\t\t}\n\n\t\t}\n\t\tSleep(1);\n\t}\n\n\t// should never go here, but in case, awake all suspended threads\n\tfor(iThreadIndex=0; iThreadIndex<iNumThreads; iThreadIndex++) {\n\t\tThreadDesc_Type *t = &ProcessThreads[iThreadIndex];\n\t\tif (t->tid && t->Suspended) {\n\t\t\tResumeThread(t->hThread);\n\t\t}\n\t}\n\treturn TRUE;\n}\n\n"
  },
  {
    "path": "dll/d3d10.cpp",
    "content": "\n\nD3D10CreateDevice\n\nD3D10CreateDeviceAndSwapChain\n\n\n"
  },
  {
    "path": "dll/d3dtexture.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n#include <d3d9.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n#include \"syslibs.h\"\n#include \"stdio.h\"\n#include \"dxdds.h\"\n\n#define STB_DXT_IMPLEMENTATION\n#include \"stb_dxt.h\"\n\n//#define SOLIDCOLOR\n\nextern unsigned int HashSurface(BYTE *, int, int, int);\nextern char *GetDxWndPath();\n\ntypedef enum {\n\tFORMAT_BMP = 0,\n\tFORMAT_RAW,\n\tFORMAT_DDS\n};\n\nstatic unsigned int HashBuffer(BYTE *buf, int len)\n{\n\tunsigned int b    = 378551;\n\tunsigned int a    = 63689;\n\tDWORD hash = 0;\n\tfor(int i = 0; i < len; i++){\n\t\thash = (hash * a) + (*buf++);\n\t\ta    = a * b;\n\t}\n\treturn hash;\n}\n\nstatic WORD Melt_123(WORD c1, WORD c2)\n{\n\tWORD r1, r2, g1, g2, b1, b2;\n\tWORD r, g, b;\n\tr1 = (c1 & 0xF800) >> 11;\n\tr2 = (c2 & 0xF800) >> 11;\n\tg1 = (c1 & 0x07E0) >> 5;\n\tg2 = (c2 & 0x07E0) >> 5;\n\tb1 = (c1 & 0x001F) >> 0;\n\tb2 = (c2 & 0x001F) >> 0;\n\tr = (((r2 * 2) + r1) / 3) & 0x1F;\n\tg = (((g2 * 2) + g1) / 3) & 0x3F;\n\tb = (((b2 * 2) + b1) / 3) & 0x1F;\n\treturn (r << 11) | (g << 5) | (b << 0);\n}\n\nstatic DWORD Melt32_123(WORD c1, WORD c2)\n{\n\tWORD r1, r2, g1, g2, b1, b2;\n\tDWORD r, g, b;\n\tr1 = (c1 & 0xF800) >> 11;\n\tr2 = (c2 & 0xF800) >> 11;\n\tg1 = (c1 & 0x07E0) >> 5;\n\tg2 = (c2 & 0x07E0) >> 5;\n\tb1 = (c1 & 0x001F) >> 0;\n\tb2 = (c2 & 0x001F) >> 0;\n\tr = (((r2 * 2) + r1) / 3) & 0x1F;\n\tg = (((g2 * 2) + g1) / 3) & 0x3F;\n\tb = (((b2 * 2) + b1) / 3) & 0x1F;\n\treturn (r << (16+3)) | (g << (8+2)) | (b << (0+3));\n}\n\nstatic DWORD Conv32(WORD c)\n{\n\tDWORD r, g, b;\n\tr = ((c & 0xF800) >> 11) & 0x1F;\n\tg = ((c & 0x07E0) >> 5) & 0x3F;\n\tb = ((c & 0x001F) >> 0) & 0x1F;\n\treturn (r << (16+3)) | (g << (8+2)) | (b << (0+3));\n}\n\nchar *ExplainD3DSurfaceFormat(DWORD dwFormat)\n{\n\tchar *s;\n\tswitch(dwFormat){\n\t\tcase D3DFMT_UNKNOWN: s = \"UNKNOWN\"; break;\n\t\tcase D3DFMT_R8G8B8: s = \"R8G8B8\"; break;\n\t\tcase D3DFMT_A8R8G8B8: s = \"A8R8G8B8\"; break;\n\t\tcase D3DFMT_X8R8G8B8: s = \"X8R8G8B8\"; break;\n\t\tcase D3DFMT_R5G6B5: s = \"R5G6B5\"; break;\n\t\tcase D3DFMT_X1R5G5B5: s = \"X1R5G5B5\"; break;\n\t\tcase D3DFMT_A1R5G5B5: s = \"A1R5G5B5\"; break;\n\t\tcase D3DFMT_A4R4G4B4: s = \"A4R4G4B4\"; break;\n\t\tcase D3DFMT_R3G3B2: s = \"R3G3B2\"; break;\n\t\tcase D3DFMT_A8: s = \"A8\"; break;\n\t\tcase D3DFMT_A8R3G3B2: s = \"A8R3G3B2\"; break;\n\t\tcase D3DFMT_X4R4G4B4: s = \"X4R4G4B4\"; break;\n\t\tcase D3DFMT_A2B10G10R10: s = \"A2B10G10R10\"; break;\n\t\tcase D3DFMT_A8B8G8R8: s = \"A8B8G8R8\"; break;\n\t\tcase D3DFMT_X8B8G8R8: s = \"X8B8G8R8\"; break;\n\t\tcase D3DFMT_G16R16: s = \"G16R16\"; break;\n\t\tcase D3DFMT_A2R10G10B10: s = \"A2R10G10B10\"; break;\n\t\tcase D3DFMT_A16B16G16R16: s = \"A16B16G16R16\"; break;\n\t\tcase D3DFMT_A8P8: s = \"A8P8\"; break;\n\t\tcase D3DFMT_P8: s = \"P8\"; break;\n\t\tcase D3DFMT_L8: s = \"L8\"; break;\n\t\tcase D3DFMT_A8L8: s = \"A8L8\"; break;\n\t\tcase D3DFMT_A4L4: s = \"A4L4\"; break;\n\t\tcase D3DFMT_V8U8: s = \"V8U8\"; break;\n\t\tcase D3DFMT_L6V5U5: s = \"L6V5U5\"; break;\n\t\tcase D3DFMT_X8L8V8U8: s = \"X8L8V8U8\"; break;\n\t\tcase D3DFMT_Q8W8V8U8: s = \"Q8W8V8U8\"; break;\n\t\tcase D3DFMT_V16U16: s = \"V16U16\"; break;\n\t\tcase D3DFMT_A2W10V10U10: s = \"A2W10V10U10\"; break;\n\t\tcase D3DFMT_UYVY: s = \"UYVY\"; break;\n\t\tcase D3DFMT_R8G8_B8G8: s = \"R8G8_B8G8\"; break;\n\t\tcase D3DFMT_YUY2: s = \"YUY2\"; break;\n\t\tcase D3DFMT_G8R8_G8B8: s = \"G8R8_G8B8\"; break;\n\t\tcase D3DFMT_DXT1: s = \"DXT1\"; break;\n\t\tcase D3DFMT_DXT2: s = \"DXT2\"; break;\n\t\tcase D3DFMT_DXT3: s = \"DXT3\"; break;\n\t\tcase D3DFMT_DXT4: s = \"DXT4\"; break;\n\t\tcase D3DFMT_DXT5: s = \"DXT5\"; break;\n\t\tcase D3DFMT_D16_LOCKABLE: s = \"D16_LOCKABLE\"; break;\n\t\tcase D3DFMT_D32: s = \"D32\"; break;\n\t\tcase D3DFMT_D15S1: s = \"D15S1\"; break;\n\t\tcase D3DFMT_D24S8: s = \"D24S8\"; break;\n\t\tcase D3DFMT_D24X8: s = \"D24X8\"; break;\n\t\tcase D3DFMT_D24X4S4: s = \"D24X4S4\"; break;\n\t\tcase D3DFMT_D16: s = \"D16\"; break;\n\t\tcase D3DFMT_D32F_LOCKABLE: s = \"D32F_LOCKABLE\"; break;\n\t\tcase D3DFMT_D24FS8: s = \"D24FS8\"; break;\n\t\tcase D3DFMT_D32_LOCKABLE: s = \"D32_LOCKABLE\"; break;\n\t\tcase D3DFMT_S8_LOCKABLE: s = \"S8_LOCKABLE\"; break;\n\t\tcase D3DFMT_L16: s = \"L16\"; break;\n\t\tcase D3DFMT_VERTEXDATA: s = \"VERTEXDATA\"; break;\n\t\tcase D3DFMT_INDEX16: s = \"INDEX16\"; break;\n\t\tcase D3DFMT_INDEX32: s = \"INDEX32\"; break;\n\t\tcase D3DFMT_Q16W16V16U16: s = \"Q16W16V16U16\"; break;\n\t\tcase D3DFMT_MULTI2_ARGB8: s = \"MULTI2_ARGB8\"; break;\n\t\tcase D3DFMT_R16F: s = \"R16F\"; break;\n\t\tcase D3DFMT_G16R16F: s = \"G16R16F\"; break;\n\t\tcase D3DFMT_A16B16G16R16F: s = \"A16B16G16R16F\"; break;\n\t\tcase D3DFMT_R32F: s = \"R32F\"; break;\n\t\tcase D3DFMT_G32R32F: s = \"G32R32F\"; break;\n\t\tcase D3DFMT_A32B32G32R32F: s = \"A32B32G32R32F\"; break;\n\t\tcase D3DFMT_A1: s = \"A1\"; break;\n\t\tcase D3DFMT_A2B10G10R10_XR_BIAS: s = \"A2B10G10R10_XR_BIAS\"; break;\n\t\tcase D3DFMT_BINARYBUFFER: s = \"BINARYBUFFER\"; break;\n\t\tdefault: s = \"Unknown\"; break;\n\t}\n\treturn s;\n}\n\nstatic int FormatColorDepth(D3DFORMAT Format)\n{\n\tint iColorDepth = 0;\n\tswitch (Format){\n\t\tcase D3DFMT_X8R8G8B8: \n\t\tcase D3DFMT_A8R8G8B8: \n\t\tcase D3DFMT_DXT2:\n\t\tcase D3DFMT_DXT3:\n\t\tcase D3DFMT_DXT4:\n\t\tcase D3DFMT_DXT5:\n\t\tcase D3DFMT_A8:\n\t\tcase D3DFMT_L8:\n\t\t\tiColorDepth = 32;\n\t\t\tbreak;\n\t\tcase D3DFMT_DXT1:\n\t\tcase D3DFMT_A4R4G4B4: // AoE III\n\t\tcase D3DFMT_X4R4G4B4:\n\t\tcase D3DFMT_A1R5G5B5: //  AoE III\n\t\tcase D3DFMT_X1R5G5B5:\n\t\tcase D3DFMT_R5G6B5:\n\t\t\tiColorDepth = 16;\n\t\t\tbreak;\n\t}\n\treturn iColorDepth;\n}\n\nstatic DWORD DDSTextureType(D3DFORMAT Format)\n{\n\tint dwFlag = 0;\n\tswitch (Format){\n\t\tcase D3DFMT_X8R8G8B8: \n\t\tcase D3DFMT_X4R4G4B4:\n\t\tcase D3DFMT_X1R5G5B5:\n\t\tcase D3DFMT_R5G6B5:\t\t\n\t\t\tdwFlag = DDPF_RGB;\n\t\t\tbreak;\n\t\tcase D3DFMT_A8R8G8B8: \n\t\tcase D3DFMT_A4R4G4B4: // AoE III\n\t\tcase D3DFMT_A1R5G5B5: //  AoE III\n\t\t\tdwFlag = DDPF_RGB|DDPF_ALPHAPIXELS;\n\t\t\tbreak;\n\t\tcase D3DFMT_DXT1:\n\t\tcase D3DFMT_DXT2:\n\t\tcase D3DFMT_DXT3:\n\t\tcase D3DFMT_DXT4:\n\t\tcase D3DFMT_DXT5:\n\t\t\tdwFlag = DDPF_FOURCC;\n\t\t\tbreak;\n\t\tcase D3DFMT_A8:\n\t\tcase D3DFMT_L8:\n\t\t\tbreak;\n\t}\n\treturn dwFlag;\n}\n\n// FormatColorBytes macro gives color depth in bytes by dividing by 8 (=> lshift 3)\n#define FormatColorBytes(Format) (FormatColorDepth(Format) >> 3)\n\nstatic DWORD TextureSize(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect)\n{\n\tDWORD dwSize;\n\n\t// calculate the texture size \n\tswitch (Desc.Format){\n\t\tcase D3DFMT_A4R4G4B4:\n\t\tcase D3DFMT_X4R4G4B4:\n\t\tcase D3DFMT_X1R5G5B5:\n\t\tcase D3DFMT_A1R5G5B5:\n\t\tcase D3DFMT_R5G6B5:\n\t\tcase D3DFMT_X8R8G8B8: \n\t\tcase D3DFMT_A8R8G8B8: \n\t\t//case D3DFMT_A8:\n\t\t//case D3DFMT_L8:\n\t\t\tdwSize = Desc.Width * Desc.Height * FormatColorBytes(Desc.Format);\n\t\t\tbreak;\n\t\tcase D3DFMT_DXT1: \n\t\tcase D3DFMT_DXT2: \n\t\tcase D3DFMT_DXT3: \n\t\tcase D3DFMT_DXT4: \n\t\tcase D3DFMT_DXT5: \n\t\t\tdwSize = (Desc.Width * Desc.Height * FormatColorBytes(Desc.Format)) / 4;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tdwSize = 0; // 0 = unknown or not interesting\n\t\t\tbreak;\n\t}\n\treturn dwSize;\n}\n\nstatic void SetDDSPixelFormat(D3DFORMAT Format, DDS_PIXELFORMAT *pf)\n{\n\tswitch (Format){\n\t\tcase D3DFMT_X8R8G8B8: \n\t\tcase D3DFMT_A8R8G8B8: \n\t\tcase D3DFMT_DXT2:\n\t\tcase D3DFMT_DXT3:\n\t\tcase D3DFMT_DXT4:\n\t\tcase D3DFMT_DXT5:\n\t\tcase D3DFMT_A8:\n\t\tcase D3DFMT_L8:\n\t\t\tpf->dwRGBBitCount = 32;\n\t\t\tpf->dwRBitMask = 0x00FF0000;\n\t\t\tpf->dwGBitMask = 0x0000FF00;\n\t\t\tpf->dwBBitMask = 0x000000FF;\n\t\t\tpf->dwABitMask = 0xFF000000;\n\t\t\tbreak;\n\t\tcase D3DFMT_DXT1:\n\t\t\tpf->dwRGBBitCount = 16;\n\t\t\tpf->dwRBitMask = 0xF800;\n\t\t\tpf->dwGBitMask = 0x07E0;\n\t\t\tpf->dwBBitMask = 0x001F;\n\t\t\tpf->dwABitMask = 0x0000;\n\t\t\tbreak;\n\t\tcase D3DFMT_A4R4G4B4: // AoE III\n\t\tcase D3DFMT_X4R4G4B4:\n\t\t\tpf->dwRGBBitCount = 16;\n\t\t\tpf->dwRBitMask = 0x0F00;\n\t\t\tpf->dwGBitMask = 0x00F0;\n\t\t\tpf->dwBBitMask = 0x000F;\n\t\t\tpf->dwABitMask = 0xF000;\n\t\t\tbreak;\n\t\tcase D3DFMT_A1R5G5B5: //  AoE III\n\t\tcase D3DFMT_X1R5G5B5:\n\t\t\tpf->dwRGBBitCount = 16;\n\t\t\tpf->dwRBitMask = 0x7C00;\n\t\t\tpf->dwGBitMask = 0x03E0;\n\t\t\tpf->dwBBitMask = 0x001F;\n\t\t\tpf->dwABitMask = 0x8000;\n\t\t\tbreak;\t\t\n\t\tcase D3DFMT_R5G6B5:\n\t\t\tpf->dwRGBBitCount = 16;\n\t\t\tpf->dwRBitMask = 0x7C00;\n\t\t\tpf->dwGBitMask = 0x03E0;\n\t\t\tpf->dwBBitMask = 0x001F;\n\t\t\tpf->dwABitMask = 0x0000;\n\t\t\tbreak;\t\t\n\t}\n}\n\nstatic DWORD D3DHash(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect)\n{\n\tDWORD hash;\n\tstatic BOOL DoOnce = TRUE;\n\n\t// calculate the bitmap hash\n\thash = 0;\n\tswitch (Desc.Format){\n\t\t// hash for uncompressed bmp-like formats with possible empty area at end of pitch size\n\t\tcase D3DFMT_A4R4G4B4:\n\t\tcase D3DFMT_X4R4G4B4:\n\t\tcase D3DFMT_X8R8G8B8: \n\t\tcase D3DFMT_A8R8G8B8: \n\t\tcase D3DFMT_R5G6B5:\n\t\tcase D3DFMT_X1R5G5B5:\n\t\tcase D3DFMT_A1R5G5B5:\n\t\tcase D3DFMT_A8:\n\t\tcase D3DFMT_L8:\n\t\t\thash = HashSurface((BYTE *)LockedRect.pBits, LockedRect.Pitch, Desc.Width, Desc.Height);\n\t\t\tbreak;\n\t\t// hash for fixed ratio compressed formats\n\t\tcase D3DFMT_DXT1: \n\t\tcase D3DFMT_DXT2: \n\t\tcase D3DFMT_DXT3: \n\t\tcase D3DFMT_DXT4: \n\t\tcase D3DFMT_DXT5: \n\t\t\thash = HashBuffer((BYTE *)LockedRect.pBits, TextureSize(Desc, LockedRect)); \n\t\t\tbreak;\n\t\tcase D3DFMT_V8U8:\n\t\tcase D3DFMT_Q8W8V8U8: // Tiger Woods PGA Tour 08\n\t\tcase D3DFMT_V16U16:\n\t\tcase D3DFMT_Q16W16V16U16:\n\t\tcase D3DFMT_CxV8U8:\n\t\tcase D3DFMT_L6V5U5:\n\t\tcase D3DFMT_X8L8V8U8:\n\t\tcase D3DFMT_A2W10V10U10:\n\t\t\t// Bumpmap surfaces, dump is meaningless .....\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tchar sMsg[80+1];\n\t\t\tif(DoOnce){\n\t\t\t\tsprintf_s(sMsg, 80, \"Unhandled texture type=%d(%s)\", Desc.Format, ExplainD3DSurfaceFormat(Desc.Format));\n\t\t\t\tMessageBox(0, sMsg, \"WARN\", MB_OK | MB_ICONEXCLAMATION);\n\t\t\t\tDoOnce = FALSE;\n\t\t\t}\n\t\t\tbreak;\n\t}\n\treturn hash;\n}\n\nBOOL SetBMPStruct(LPBITMAPV4HEADER lpBV4Hdr, LPBITMAPFILEHEADER lpBFHdr, D3DSURFACE_DESC Desc)\n{\n\t// set bmp invariant parameters\n\tmemset((void *)lpBV4Hdr, 0, sizeof(BITMAPV4HEADER));\n\tlpBV4Hdr->bV4Size = sizeof(BITMAPV4HEADER); \n\tlpBV4Hdr->bV4Width = Desc.Width;\n\tlpBV4Hdr->bV4Height = Desc.Height;\n\tlpBV4Hdr->bV4Planes = 1;\n\tlpBV4Hdr->bV4V4Compression = BI_BITFIELDS;\n\tlpBV4Hdr->bV4XPelsPerMeter = 1;\n\tlpBV4Hdr->bV4YPelsPerMeter = 1;\n\tlpBV4Hdr->bV4ClrUsed = 0;\n\tlpBV4Hdr->bV4ClrImportant = 0;\n\tlpBV4Hdr->bV4CSType = LCS_CALIBRATED_RGB;\n\tlpBFHdr->bfType = 0x4d42;        // 0x42 = \"B\" 0x4d = \"M\"  \n\tlpBFHdr->bfReserved1 = 0; \n\tlpBFHdr->bfReserved2 = 0; \n\n\tswitch (Desc.Format){\n\t\tcase D3DFMT_X8R8G8B8: \n\t\tcase D3DFMT_A8R8G8B8: \n\t\tcase D3DFMT_DXT2:\n\t\tcase D3DFMT_DXT3:\n\t\tcase D3DFMT_DXT4:\n\t\tcase D3DFMT_DXT5:\n\t\tcase D3DFMT_A8:\n\t\tcase D3DFMT_L8:\n\t\t\tlpBV4Hdr->bV4BitCount = 32;\n\t\t\tlpBV4Hdr->bV4RedMask = 0x00FF0000;\n\t\t\tlpBV4Hdr->bV4GreenMask = 0x0000FF00;\n\t\t\tlpBV4Hdr->bV4BlueMask = 0x000000FF;\n\t\t\tlpBV4Hdr->bV4AlphaMask = 0xFF000000;\n\t\t\tbreak;\n\t\tcase D3DFMT_DXT1:\n\t\t\tlpBV4Hdr->bV4BitCount = 16;\n\t\t\tlpBV4Hdr->bV4RedMask = 0xF800;\n\t\t\tlpBV4Hdr->bV4GreenMask = 0x07E0;\n\t\t\tlpBV4Hdr->bV4BlueMask = 0x001F;\n\t\t\tlpBV4Hdr->bV4AlphaMask = 0x0000;\n\t\t\tbreak;\n\t\tcase D3DFMT_A4R4G4B4: // AoE III\n\t\tcase D3DFMT_X4R4G4B4:\n\t\t\tlpBV4Hdr->bV4BitCount = 16;\n\t\t\tlpBV4Hdr->bV4RedMask = 0x0F00;\n\t\t\tlpBV4Hdr->bV4GreenMask = 0x00F0;\n\t\t\tlpBV4Hdr->bV4BlueMask = 0x000F;\n\t\t\tlpBV4Hdr->bV4AlphaMask = 0xF000;\n\t\t\tbreak;\n\t\tcase D3DFMT_A1R5G5B5: //  AoE III\n\t\tcase D3DFMT_X1R5G5B5:\n\t\t\tlpBV4Hdr->bV4BitCount = 16;\n\t\t\tlpBV4Hdr->bV4RedMask = 0x7C00;\n\t\t\tlpBV4Hdr->bV4GreenMask = 0x03E0;\n\t\t\tlpBV4Hdr->bV4BlueMask = 0x001F;\n\t\t\tlpBV4Hdr->bV4AlphaMask = 0x8000;\n\t\t\tbreak;\t\t\n\t\tcase D3DFMT_R5G6B5:\n\t\t\tlpBV4Hdr->bV4BitCount = 16;\n\t\t\tlpBV4Hdr->bV4RedMask = 0x7C00;\n\t\t\tlpBV4Hdr->bV4GreenMask = 0x03E0;\n\t\t\tlpBV4Hdr->bV4BlueMask = 0x001F;\n\t\t\tlpBV4Hdr->bV4AlphaMask = 0x0000;\n\t\t\tbreak;\t\t\n\t}\n\n\tlpBV4Hdr->bV4SizeImage = ((lpBV4Hdr->bV4Width * lpBV4Hdr->bV4BitCount + 0x1F) & ~0x1F)/8 * lpBV4Hdr->bV4Height; \n\tlpBV4Hdr->bV4Height = - lpBV4Hdr->bV4Height;\n\n\t// Compute the size of the entire file.  \n\tlpBFHdr->bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + lpBV4Hdr->bV4Size + lpBV4Hdr->bV4ClrUsed * sizeof(RGBQUAD) + lpBV4Hdr->bV4SizeImage); \n\n\t// Compute the offset to the array of color indices.  \n\tlpBFHdr->bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + lpBV4Hdr->bV4Size + lpBV4Hdr->bV4ClrUsed * sizeof (RGBQUAD); \n\n\treturn 0;\n}\n\nvoid D3DTextureDump(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect)\n{\n\tstatic BOOL DoOnce = TRUE;\n\tstatic int MinTexX, MinTexY, MaxTexX, MaxTexY;\n\tFILE *hf;\n\tBITMAPFILEHEADER hdr;       // bitmap file-header \n\tBITMAPV4HEADER pbi;\t\t\t// bitmap info-header  \n\tint w, h; \n\tint iSurfaceSize, iScanLineSize;\n\tchar pszFile[MAX_PATH];\n\tchar *sExt;\n\tDWORD hash;\n\tstatic int iTextureFileFormat;\n\n\tif(DoOnce){\n\t\tchar sProfilePath[MAX_PATH];\n\t\tsprintf(sProfilePath, \"%s\\\\dxwnd.ini\", GetDxWndPath());\n\t\tMinTexX=GetPrivateProfileInt(\"Texture\", \"MinTexX\", 0, sProfilePath);\n\t\tMaxTexX=GetPrivateProfileInt(\"Texture\", \"MaxTexX\", 0, sProfilePath);\n\t\tMinTexY=GetPrivateProfileInt(\"Texture\", \"MinTexY\", 0, sProfilePath);\n\t\tMaxTexY=GetPrivateProfileInt(\"Texture\", \"MaxTexY\", 0, sProfilePath);\n\t\tsprintf_s(pszFile, MAX_PATH, \"%s\\\\texture.out\", GetDxWndPath());\n\t\tCreateDirectory(pszFile, NULL);\n\t\tiTextureFileFormat = FORMAT_BMP;\n\t\tif(dxw.dwFlags8 & RAWFORMAT) iTextureFileFormat = FORMAT_RAW;\n\t\tif(dxw.dwFlags8 & DDSFORMAT) iTextureFileFormat = FORMAT_DDS;\n\t\tOutTrace(\"TextureDump: size min=(%dx%d) max=(%dx%d) format=%d\\n\", MinTexX, MinTexY, MaxTexX, MaxTexY, iTextureFileFormat);\n\t\tDoOnce = FALSE;\n\t}\n\t\n\twhile (TRUE){ // fake loop 1\n\t\tw = Desc.Width;\n\t\th = Desc.Height;\n\t\tif((MinTexX && (w<MinTexX)) || (MinTexY && (h<MinTexY))) {\n\t\t\tOutTrace(\"TextureDump: SKIP small texture\\n\");\n\t\t\tbreak;\n\t\t}\n\t\tif((MaxTexX && (w>MaxTexX)) || (MaxTexY && (h>MaxTexY))) {\n\t\t\tOutTrace(\"TextureDump: SKIP big texture\\n\");\n\t\t\tbreak;\n\t\t}\n\t\tiSurfaceSize = Desc.Height * LockedRect.Pitch;\n\n\t\t// skip unsupported raw compressions\n\t\tif(!TextureSize(Desc, LockedRect)){\n\t\t\tOutTrace(\"TextureDump: UNSUPPORTED\\n\"); \n\t\t\tbreak; \n\t\t}\n\n\t\t// calculate the bitmap hash\n\t\thash = D3DHash(Desc, LockedRect);\n\t\tif(!hash) {\n\t\t\tOutTrace(\"TextureDump: hash=NULL\\n\"); \n\t\t\tbreak; // almost certainly, an empty black surface!\n\t\t}\n\n\t\t// Create the file. \n\t\tswitch (iTextureFileFormat){\n\t\t\tcase FORMAT_BMP: sExt = \"bmp\"; break; \n\t\t\tcase FORMAT_RAW: sExt = \"raw\"; break; \n\t\t\tcase FORMAT_DDS: sExt = \"dds\"; break; \n\t\t}\n\t\tsprintf_s(pszFile, MAX_PATH, \"%s\\\\texture.out\\\\texture.%03d.%03d.%s.%08X.%s\", \n\t\t\tGetDxWndPath(), Desc.Width, Desc.Height, ExplainD3DSurfaceFormat(Desc.Format), hash, sExt);\n\t\thf = fopen(pszFile, \"wb\");\n\t\tif(!hf) break;\n\n\t\tswitch(iTextureFileFormat){\n\n\t\t\tcase FORMAT_RAW:\n\n\t\t\t\tif(fwrite((BYTE *)LockedRect.pBits, TextureSize(Desc, LockedRect), 1, hf)!=1)\n\t\t\t\t\t\tOutTraceE(\"TextureHack: fwrite ERROR err=%d\\n\", GetLastError());\n\t\t\t\t\tfclose(hf);\n\t\t\t\t\tbreak;\n\n\t\t\tcase FORMAT_DDS: {\n\n\t\t\t\tDDS_HEADER ddsh;\n\t\t\t\tif(fwrite(\"DDS \", 4, 1, hf)!=1)\n\t\t\t\t\tOutTraceE(\"TextureHack: fwrite ERROR err=%d\\n\", GetLastError());\n\t\t\t\tmemset(&ddsh, 0, sizeof(ddsh));\n\t\t\t\tddsh.dwSize = sizeof(ddsh);\n\t\t\t\tddsh.dwFlags = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT;\n\t\t\t\tddsh.dwHeight = Desc.Height;\n\t\t\t\tddsh.dwWidth = Desc.Width;\n\t\t\t\tddsh.ddspf.dwSize = sizeof(DDS_PIXELFORMAT);\n\t\t\t\tddsh.ddspf.dwFlags = DDSTextureType(Desc.Format);\n\t\t\t\t// compressed formats must have 0 pitch\n\t\t\t\tif(ddsh.ddspf.dwFlags & DDPF_RGB) {\n\t\t\t\t\tddsh.dwPitchOrLinearSize = LockedRect.Pitch;\n\t\t\t\t\tddsh.dwFlags |= DDSD_PITCH;\n\t\t\t\t}\n\t\t\t\tif(ddsh.ddspf.dwFlags & DDPF_FOURCC) ddsh.ddspf.dwFourCC = Desc.Format;\n\t\t\t\tSetDDSPixelFormat(Desc.Format, &ddsh.ddspf);\n\t\t\t\tif(fwrite((BYTE *)&ddsh, sizeof(ddsh), 1, hf)!=1)\n\t\t\t\t\tOutTraceE(\"TextureHack: fwrite ERROR err=%d\\n\", GetLastError());\n\t\t\t\tif(fwrite((BYTE *)LockedRect.pBits, TextureSize(Desc, LockedRect), 1, hf)!=1)\n\t\t\t\t\t\tOutTraceE(\"TextureHack: fwrite ERROR err=%d\\n\", GetLastError());\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase FORMAT_BMP: \n\n\t\t\t// set bmp invariant parameters\n\t\t\tif (SetBMPStruct(&pbi, &hdr, Desc)) break;\n\t\t\tiScanLineSize = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8;\n\n\t\t\t// Copy the BITMAPFILEHEADER into the .BMP file.  \n\t\t\tfwrite((LPVOID)&hdr, sizeof(BITMAPFILEHEADER), 1, hf);\n\n\t\t\t// Copy the BITMAPINFOHEADER and RGBQUAD array into the file.  \n\t\t\tfwrite((LPVOID)&pbi, sizeof(BITMAPV4HEADER) + pbi.bV4ClrUsed * sizeof (RGBQUAD), 1, hf);\n\n\t\t\tswitch (Desc.Format){\n\t\t\t\tcase D3DFMT_X8R8G8B8: \n\t\t\t\tcase D3DFMT_A8R8G8B8: \n\t\t\t\tcase D3DFMT_A4R4G4B4:\n\t\t\t\tcase D3DFMT_X4R4G4B4:\n\t\t\t\tcase D3DFMT_A1R5G5B5:\t//  AoE III\n\t\t\t\tcase D3DFMT_R5G6B5:\t\t//  AoE III\n\t\t\t\tcase D3DFMT_X1R5G5B5:\n\t\t\t\t\t{\n\t\t\t\t\t\t// Copy the array of color indices into the .BMP file.  \n\t\t\t\t\t\tfor(int y=0; y<(int)Desc.Height; y++)\n\t\t\t\t\t\t\tfwrite((BYTE *)LockedRect.pBits + (y*LockedRect.Pitch), iScanLineSize, 1, hf);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase D3DFMT_A8:\n\t\t\t\tcase D3DFMT_L8:\n\t\t\t\t\t{\n\t\t\t\t\t\t// Copy the array of color indices into the .BMP file.  \n\t\t\t\t\t\tBYTE *p = (BYTE *)LockedRect.pBits;\n\t\t\t\t\t\tfor(int y=0; y<(int)Desc.Height; y++)\n\t\t\t\t\t\t\tfor(int x=0; x<(int)Desc.Width; x++){\n\t\t\t\t\t\t\t\tDWORD pixel;\n\t\t\t\t\t\t\t\tpixel = 0xFF000000 | *p | (*p << 8) | (*p << 16); // gray color\n\t\t\t\t\t\t\t\tfwrite((BYTE *)&pixel, sizeof(DWORD), 1, hf);\n\t\t\t\t\t\t\t\tp++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase D3DFMT_DXT1: \n\t\t\t\t\t{\n\t\t\t\t\t\t// Copy the array of color indices into the .BMP file.  \n\t\t\t\t\t\tWORD *bm;\n\t\t\t\t\t\tWORD *c;\n\t\t\t\t\t\tint bmsize;\n\t\t\t\t\t\tc = (WORD *)LockedRect.pBits;\n\t\t\t\t\t\tbmsize = Desc.Width * Desc.Height * sizeof(WORD);\n\t\t\t\t\t\tbm = (WORD *)malloc(bmsize);\n\t\t\t\t\t\tfor(int y=0; y<(int)Desc.Height; y+=4){\n\t\t\t\t\t\t\tfor(int x=0; x<(int)Desc.Width; x+=4){\n\t\t\t\t\t\t\t\tWORD color_0, color_1, color_2, color_3;\n\t\t\t\t\t\t\t\tcolor_0 = *c++;\n\t\t\t\t\t\t\t\tcolor_1 = *c++;\n\t\t\t\t\t\t\t\tcolor_2 = Melt_123(color_1, color_0);\n\t\t\t\t\t\t\t\tcolor_3 = Melt_123(color_0, color_1);\n\t\t\t\t\t\t\t\tfor(int n=0; n<2; n++){\n\t\t\t\t\t\t\t\t\tint dy;\n\t\t\t\t\t\t\t\t\tWORD color_indexes = *c++;\n\t\t\t\t\t\t\t\t\tWORD color;\n\t\t\t\t\t\t\t\t\tfor (int m=0; m<8; m++){\n\t\t\t\t\t\t\t\t\t\tswitch (color_indexes & 0x3){\n\t\t\t\t\t\t\t\t\t\t\tcase 0x00: color = color_0; break;\n\t\t\t\t\t\t\t\t\t\t\tcase 0x01: color = color_1; break;\n\t\t\t\t\t\t\t\t\t\t\tcase 0x02: color = color_2; break;\n\t\t\t\t\t\t\t\t\t\t\tcase 0x03: color = color_3; break;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdy = (m<4) ? 0 : 1;\n\t\t\t\t\t\t\t\t\t\tcolor_indexes >>= 2;\n\t\t\t\t\t\t\t\t\t\tint index = ((y+(2*n)+dy)*Desc.Width) + (x+(m%4));\n\t\t\t\t\t\t\t\t\t\tif(index < bmsize/2) bm[index]=color;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfwrite((BYTE *)bm, bmsize, 1, hf);\n\t\t\t\t\t\tfree(bm);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase D3DFMT_DXT2:\n\t\t\t\tcase D3DFMT_DXT3:\n\t\t\t\t\t{\n\t\t\t\t\t\t// Copy the array of color indices into the .BMP file.  \n\t\t\t\t\t\tDWORD *bm;\n\t\t\t\t\t\tWORD *c;\n\t\t\t\t\t\tint bmsize;\n\t\t\t\t\t\tc = (WORD *)LockedRect.pBits;\n\t\t\t\t\t\tbmsize = Desc.Width * Desc.Height * sizeof(DWORD);\n\t\t\t\t\t\tbm = (DWORD *)malloc(bmsize);\n\t\t\t\t\t\tmemset(bm, 0, bmsize);\n\t\t\t\t\t\tfor(int y=0; y<(int)Desc.Height; y+=4){\n\t\t\t\t\t\t\tfor(int x=0; x<(int)Desc.Width; x+=4){\n\t\t\t\t\t\t\t\tWORD color_0, color_1;\n\t\t\t\t\t\t\t\tDWORD dwcolor[4];\n\t\t\t\t\t\t\t\tBYTE alpha[16];\n\t\t\t\t\t\t\t\tWORD *pAlpha;\n\t\t\t\t\t\t\t\tpAlpha = (WORD *)c;\n\t\t\t\t\t\t\t\tfor(int row=0; row<4; row++){\n\t\t\t\t\t\t\t\t\tWORD a = *c++;\n\t\t\t\t\t\t\t\t\tfor(int col=0; col<4; col++){\n\t\t\t\t\t\t\t\t\t\talpha[(row<<2)+col] = (a & 0xF);\n\t\t\t\t\t\t\t\t\t\ta >>= 4;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcolor_0 = *c++;\n\t\t\t\t\t\t\t\tcolor_1 = *c++;\n\t\t\t\t\t\t\t\tdwcolor[0] = Conv32(color_0);\n\t\t\t\t\t\t\t\tdwcolor[1] = Conv32(color_1);\n\t\t\t\t\t\t\t\tdwcolor[2] = Melt32_123(color_1, color_0);\n\t\t\t\t\t\t\t\tdwcolor[3] = Melt32_123(color_0, color_1);\n\t\t\t\t\t\t\t\tfor(int n=0; n<2; n++){\n\t\t\t\t\t\t\t\t\tint dy;\n\t\t\t\t\t\t\t\t\tWORD color_indexes = *c++;\n\t\t\t\t\t\t\t\t\tDWORD color;\n\t\t\t\t\t\t\t\t\tfor (int m=0; m<8; m++){\n\t\t\t\t\t\t\t\t\t\tdy = (m<4) ? 0 : 1;\n\t\t\t\t\t\t\t\t\t\tcolor = dwcolor[color_indexes & 0x3] & 0x00FFFFFF;\n\t\t\t\t\t\t\t\t\t\tdy = (m<4) ? 0 : 1;\n\t\t\t\t\t\t\t\t\t\tcolor_indexes >>= 2;\n\t\t\t\t\t\t\t\t\t\tint index = ((y+(2*n)+dy)*Desc.Width) + (x+(m%4));\n\t\t\t\t\t\t\t\t\t\tint alpha_index = (((2*n) + dy)<<2) + (m % 4);\n\t\t\t\t\t\t\t\t\t\t//if(index < bmsize/4) bm[index] = color | 0xFF000000; // uncomment to get rid of alpha channel\n\t\t\t\t\t\t\t\t\t\tif(index < bmsize/4) bm[index] = color | (alpha[alpha_index]<<28);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfwrite((BYTE *)bm, bmsize, 1, hf);\n\t\t\t\t\t\tfree(bm);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase D3DFMT_DXT4:\n\t\t\t\tcase D3DFMT_DXT5:\n\t\t\t\t\t{\n\t\t\t\t\t\t// Copy the array of color indices into the .BMP file.  \n\t\t\t\t\t\tDWORD *bm;\n\t\t\t\t\t\tWORD *c;\n\t\t\t\t\t\tint bmsize;\n\t\t\t\t\t\tc = (WORD *)LockedRect.pBits;\n\t\t\t\t\t\tbmsize = Desc.Width * Desc.Height * sizeof(DWORD);\n\t\t\t\t\t\tbm = (DWORD *)malloc(bmsize);\n\t\t\t\t\t\tmemset(bm, 0, bmsize);\n\t\t\t\t\t\tfor(int y=0; y<(int)Desc.Height; y+=4){\n\t\t\t\t\t\t\tfor(int x=0; x<(int)Desc.Width; x+=4){\n\t\t\t\t\t\t\t\tWORD color_0, color_1;\n\t\t\t\t\t\t\t\tDWORD dwcolor[4];\n\t\t\t\t\t\t\t\tDWORD alpha[8];\n\t\t\t\t\t\t\t\t//  alpha section (4 words) ....\n\t\t\t\t\t\t\t\talpha[1] = ((*c) >> 8) & 0xFF;\n\t\t\t\t\t\t\t\talpha[0] = (*c) & 0xFF;\n\t\t\t\t\t\t\t\tc++;\n\t\t\t\t\t\t\t\tif(alpha[0] > alpha[1])\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t// 6 interpolated alpha values.\n\t\t\t\t\t\t\t\t\talpha[2] = ((6*alpha[0]) + (1*alpha[1])) / 7; // bit code 010\n\t\t\t\t\t\t\t\t\talpha[3] = ((5*alpha[0]) + (2*alpha[1])) / 7; // bit code 011\n\t\t\t\t\t\t\t\t\talpha[4] = ((4*alpha[0]) + (3*alpha[1])) / 7; // bit code 100\n\t\t\t\t\t\t\t\t\talpha[5] = ((3*alpha[0]) + (4*alpha[1])) / 7; // bit code 101\n\t\t\t\t\t\t\t\t\talpha[6] = ((2*alpha[0]) + (5*alpha[1])) / 7; // bit code 110\n\t\t\t\t\t\t\t\t\talpha[7] = ((1*alpha[0]) + (6*alpha[1])) / 7; // bit code 111\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse \n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t// 4 interpolated alpha values.\n\t\t\t\t\t\t\t\t\talpha[2] = ((4*alpha[0]) + (1*alpha[1])) / 5; // bit code 010\n\t\t\t\t\t\t\t\t\talpha[3] = ((3*alpha[0]) + (2*alpha[1])) / 5; // bit code 011\n\t\t\t\t\t\t\t\t\talpha[4] = ((2*alpha[0]) + (3*alpha[1])) / 5; // bit code 100\n\t\t\t\t\t\t\t\t\talpha[5] = ((1*alpha[0]) + (4*alpha[1])) / 5; // bit code 101\n\t\t\t\t\t\t\t\t\talpha[6] = 0x00;                              // bit code 110 (fully transparent)\n\t\t\t\t\t\t\t\t\talpha[7] = 0xFF;                              // bit code 111 (fully opaque)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tBYTE *pAlpha = (BYTE *)c;\n\t\t\t\t\t\t\t\tc += 3;\n\t\t\t\t\t\t\t\tcolor_0 = *c++;\n\t\t\t\t\t\t\t\tcolor_1 = *c++;\n\t\t\t\t\t\t\t\tdwcolor[0] = Conv32(color_0);\n\t\t\t\t\t\t\t\tdwcolor[1] = Conv32(color_1);\n\t\t\t\t\t\t\t\tdwcolor[2] = Melt32_123(color_1, color_0);\n\t\t\t\t\t\t\t\tdwcolor[3] = Melt32_123(color_0, color_1);\n\t\t\t\t\t\t\t\tfor(int n=0; n<2; n++){\n\t\t\t\t\t\t\t\t\tint dy;\n\t\t\t\t\t\t\t\t\tDWORD dwAlpha_indexes = (*(pAlpha+0) & 0x0000FF) | ((*(pAlpha+1)<<8) & 0x00FF00) | ((*(pAlpha+2)<<16) & 0xFF0000);\n\t\t\t\t\t\t\t\t\tpAlpha += 3;\n\t\t\t\t\t\t\t\t\tDWORD alpha_color;\n\t\t\t\t\t\t\t\t\tWORD color_indexes = *c++;\n\t\t\t\t\t\t\t\t\tDWORD color;\n\t\t\t\t\t\t\t\t\tfor (int m=0; m<8; m++){\n\t\t\t\t\t\t\t\t\t\talpha_color = (alpha[dwAlpha_indexes & 0x7] << 24) & 0xFF000000;\n\t\t\t\t\t\t\t\t\t\tdy = (m<4) ? 0 : 1;\n\t\t\t\t\t\t\t\t\t\tdwAlpha_indexes >>= 3;\n\t\t\t\t\t\t\t\t\t\tcolor = dwcolor[color_indexes & 0x3] & 0x00FFFFFF;\n\t\t\t\t\t\t\t\t\t\tdy = (m<4) ? 0 : 1;\n\t\t\t\t\t\t\t\t\t\tcolor_indexes >>= 2;\n\t\t\t\t\t\t\t\t\t\tint index = ((y+(2*n)+dy)*Desc.Width) + (x+(m%4));\n\t\t\t\t\t\t\t\t\t\tif(index < bmsize/4) bm[index] = color | alpha_color;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfwrite((BYTE *)bm, bmsize, 1, hf);\n\t\t\t\t\t\tfree(bm);\t\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// Close the .BMP file.  \n\t\t\tfclose(hf);\n\t\t}\n\t\tbreak;\n\t} // end of fake loop 1\n}\n\nvoid D3DTextureHack(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect)\n{\n\tstatic BOOL DoOnce = TRUE;\n\tstatic int MinTexX, MinTexY, MaxTexX, MaxTexY;\n\tFILE *hf;\n\tBITMAPFILEHEADER hdr;       // bitmap file-header \n\tBITMAPV4HEADER pbi;\t\t\t// bitmap info-header  \n\tint iSurfaceSize, iScanLineSize;\n\tchar pszFile[MAX_PATH];\n\tchar *sExt;\n\tDWORD hash;\n\tint w, h; \n\tstatic int iTextureFileFormat;\n\n\tOutTraceB(\"TextureHack(D3D)\\n\");\n\n\tif(DoOnce){\n\t\tchar sProfilePath[MAX_PATH];\n\t\tsprintf(sProfilePath, \"%s\\\\dxwnd.ini\", GetDxWndPath());\n\t\tMinTexX=GetPrivateProfileInt(\"Texture\", \"MinTexX\", 0, sProfilePath);\n\t\tMaxTexX=GetPrivateProfileInt(\"Texture\", \"MaxTexX\", 0, sProfilePath);\n\t\tMinTexY=GetPrivateProfileInt(\"Texture\", \"MinTexY\", 0, sProfilePath);\n\t\tMaxTexY=GetPrivateProfileInt(\"Texture\", \"MaxTexY\", 0, sProfilePath);\n\t\tiTextureFileFormat = FORMAT_BMP;\n\t\tif(dxw.dwFlags8 & RAWFORMAT) iTextureFileFormat = FORMAT_RAW;\n\t\tif(dxw.dwFlags8 & DDSFORMAT) iTextureFileFormat = FORMAT_DDS;\n\t\tOutTrace(\"TextureHack: size min=(%dx%d) max=(%dx%d) format=%d\\n\", MinTexX, MinTexY, MaxTexX, MaxTexY, iTextureFileFormat);\n\t\tDoOnce = FALSE;\n\t}\n\n\twhile(TRUE){ // fake loop\n\t\tw = Desc.Width;\n\t\th = Desc.Height;\n\t\tif((MinTexX && (w<MinTexX)) || (MinTexY && (h<MinTexY))) {\n\t\t\tOutTrace(\"TextureHack: SKIP small texture\\n\");\n\t\t\tbreak;\n\t\t}\n\t\tif((MaxTexX && (w>MaxTexX)) || (MaxTexY && (h>MaxTexY))) {\n\t\t\tOutTrace(\"TextureHack: SKIP big texture\\n\");\n\t\t\tbreak;\n\t\t}\n\t\tiSurfaceSize = Desc.Height * LockedRect.Pitch;\n\n\t\t// calculate the bitmap hash\n\t\thash = D3DHash(Desc, LockedRect);\n\t\tif(!hash) {\n\t\t\tOutTrace(\"TextureHack: hash=NULL\\n\"); \n\t\t\tbreak; // almost certainly, an empty black surface!\n\t\t}\n\n\t\t// Look for the .BMP file. \n\t\t// Create the file. \n\t\tswitch (iTextureFileFormat){\n\t\t\tcase FORMAT_BMP: sExt = \"bmp\"; break; \n\t\t\tcase FORMAT_RAW: sExt = \"raw\"; break; \n\t\t\tcase FORMAT_DDS: sExt = \"dds\"; break; \n\t\t}\n\t\tsprintf_s(pszFile, MAX_PATH, \"%s\\\\texture.in\\\\texture.%03d.%03d.%s.%08X.%s\", \n\t\t\tGetDxWndPath(), Desc.Width, Desc.Height, ExplainD3DSurfaceFormat(Desc.Format), \n\t\t\thash, sExt);\n\t\thf = fopen(pszFile, \"rb\");\n\t\tif(!hf) break; // no updated texture to load\n\n\t\tOutTrace(\"TextureHack: IMPORT path=%s\\n\", pszFile);\n\n\t\tswitch(iTextureFileFormat){\n\n\t\t\tcase FORMAT_RAW:\n\n\t\t\t\tif(fread((BYTE *)LockedRect.pBits, TextureSize(Desc, LockedRect), 1, hf)!=1)\n\t\t\t\t\tOutTraceE(\"TextureHack: fread ERROR err=%d\\n\", GetLastError());\n\t\t\t\tbreak;\n\n\t\t\tcase FORMAT_DDS: {\n\n\t\t\t\tBYTE magic[4];\n\t\t\t\tDDS_HEADER ddsh;\n\t\t\t\t// assume the file is sane, read and throw away magic and dds header\n\t\t\t\tif(fread(magic, 4, 1, hf)!=1)\n\t\t\t\t\tOutTraceE(\"TextureHack: fread ERROR err=%d\\n\", GetLastError());\n\t\t\t\tif(fread((BYTE *)&ddsh, sizeof(ddsh), 1, hf)!=1)\n\t\t\t\t\tOutTraceE(\"TextureHack: fread ERROR err=%d\\n\", GetLastError());\n\t\t\t\tmemset(&ddsh, 0, sizeof(ddsh));\n\t\t\t\tif(fread((BYTE *)LockedRect.pBits, TextureSize(Desc, LockedRect), 1, hf)!=1)\n\t\t\t\t\tOutTraceE(\"TextureHack: fread ERROR err=%d\\n\", GetLastError());\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase FORMAT_BMP:\n\n\t\t\tint iBitCount = FormatColorDepth(Desc.Format);\n\t\t\tif(iBitCount == 0){\n\t\t\t\tOutTrace(\"TextureHack: unsupported format=%x\\n\", Desc.Format); \n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tiScanLineSize = ((Desc.Width * iBitCount + 0x1F) & ~0x1F)/8;\n\n\t\t\twhile(TRUE) { // fake loop to ensure final fclose\n\t\t\t\t// Read the BITMAPFILEHEADER from the .BMP file (and throw away ...).  \n\t\t\t\tif(fread((LPVOID)&hdr, sizeof(BITMAPFILEHEADER), 1, hf) != 1)break;\n\n\t\t\t\t// Read the BITMAPINFOHEADER (and throw away ...).  \n\t\t\t\t// If the file contains BITMAPV4HEADER or BITMAPV5HEADER, no problem: next fseek will settle things\n\t\t\t\tif(fread((LPVOID)&pbi, sizeof(BITMAPINFOHEADER), 1, hf) != 1) break;\n\n\t\t\t\t// skip the RGBQUAD array if the editor inserted one\n\t\t\t\tfseek(hf, hdr.bfOffBits, SEEK_SET);\n\n\t\t\t\tswitch (Desc.Format){\n\t\t\t\t\tcase D3DFMT_X8R8G8B8: \n\t\t\t\t\tcase D3DFMT_A8R8G8B8: \n\t\t\t\t\t\t// Read the new texture  from the .BMP file.  \n\t\t\t\t\t\tif(pbi.bV4Height < 0){\n\t\t\t\t\t\t\t// biHeight < 0 -> scan lines from top to bottom, same as surface/texture convention\n\t\t\t\t\t\t\tfor(int y=0; y<(int)Desc.Height; y++){\n\t\t\t\t\t\t\t\tBYTE *p = (BYTE *)LockedRect.pBits + (LockedRect.Pitch * y);\n\t\t\t\t\t\t\t\tfseek(hf, hdr.bfOffBits + (iScanLineSize * y), SEEK_SET);\n\t\t\t\t\t\t\t\tif(fread((LPVOID)p, LockedRect.Pitch, 1, hf) != 1) break;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// biHeight > 0 -> scan lines from bottom to top, inverse order as surface/texture convention\n\t\t\t\t\t\t\tfor(int y=0; y<(int)Desc.Height; y++){\n\t\t\t\t\t\t\t\tBYTE *p = (BYTE *)LockedRect.pBits + (LockedRect.Pitch * ((Desc.Height-1) - y));\n\t\t\t\t\t\t\t\tfseek(hf, hdr.bfOffBits + (iScanLineSize * y), SEEK_SET);\n\t\t\t\t\t\t\t\tif(fread((LPVOID)p, LockedRect.Pitch, 1, hf) != 1) break;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase D3DFMT_DXT1:\n\t\t\t\t\t\t// Read the new texture  from the .BMP file.  \n\t\t\t\t\t\tif(pbi.bV4Height < 0){\n\t\t\t\t\t\t\tBYTE *p = (BYTE *)LockedRect.pBits;\n\t\t\t\t\t\t\tBYTE *fb;\n\t\t\t\t\t\t\tfb = (BYTE *)malloc(Desc.Width * Desc.Height * sizeof(WORD));\n\t\t\t\t\t\t\tif(!fb) {\n\t\t\t\t\t\t\t\tOutTrace(\"TextureHack: malloc error\\n\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfseek(hf, hdr.bfOffBits, SEEK_SET);\n\t\t\t\t\t\t\tif(fread((LPVOID)fb, Desc.Height * Desc.Width * (iBitCount / 8), 1, hf) != 1) {\n\t\t\t\t\t\t\t\tOutTrace(\"TextureHack: fread error\\n\");\n\t\t\t\t\t\t\t\tfree(fb);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// biHeight < 0 -> scan lines from top to bottom, same as surface/texture convention\n\t\t\t\t\t\t\tfor(int y=0; y<(int)Desc.Height; y+=4){\n\t\t\t\t\t\t\t\tfor(int x=0; x<(int)Desc.Width; x+=4){\n\t\t\t\t\t\t\t\t\tOutTrace(\"Compressing line=%d row=%d\\n\", y, x);\n\t\t\t\t\t\t\t\t\tstb_compress_dxt_block(p, fb, FALSE, STB_DXT_NORMAL);\n\t\t\t\t\t\t\t\t\tp += (16 * sizeof(DWORD) / 8);\n\t\t\t\t\t\t\t\t\tOutTrace(\"Compression done\\n\");\n\t\t\t\t\t\t\t\t\tfb += 4 * 2;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfree(fb);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase D3DFMT_DXT5:\n\t\t\t\t\t\t// Read the new texture  from the .BMP file.  \n\t\t\t\t\t\tif(pbi.bV4Height < 0){\n\t\t\t\t\t\t\tBYTE *p = (BYTE *)LockedRect.pBits;\n\t\t\t\t\t\t\tBYTE *fb;\n\t\t\t\t\t\t\tfb = (BYTE *)malloc(Desc.Width * Desc.Height * sizeof(DWORD));\n\t\t\t\t\t\t\tif(!fb) {\n\t\t\t\t\t\t\t\tOutTrace(\"TextureHack: malloc error\\n\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfseek(hf, hdr.bfOffBits, SEEK_SET);\n\t\t\t\t\t\t\tif(fread((LPVOID)fb, Desc.Height * Desc.Width * (iBitCount / 8), 1, hf) != 1) {\n\t\t\t\t\t\t\t\tOutTrace(\"TextureHack: fread error\\n\");\n\t\t\t\t\t\t\t\tfree(fb);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// biHeight < 0 -> scan lines from top to bottom, same as surface/texture convention\n\t\t\t\t\t\t\tfor(int y=0; y<(int)Desc.Height; y+=4){\n\t\t\t\t\t\t\t\tfor(int x=0; x<(int)Desc.Width; x+=4){\n\t\t\t\t\t\t\t\t\tOutTrace(\"Compressing line=%d row=%d\\n\", y, x);\n\t\t\t\t\t\t\t\t\tstb_compress_dxt_block(p, fb, FALSE, STB_DXT_NORMAL);\n\t\t\t\t\t\t\t\t\tp += (16 * sizeof(DWORD) / 4);\n\t\t\t\t\t\t\t\t\tOutTrace(\"Compression done\\n\");\n\t\t\t\t\t\t\t\t\tfb += 4 * 4;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfree(fb);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tOutTrace(\"TextureHack: TEXTURE LOAD DONE\\n\");\n\t\t\tbreak;\n\t\t}\n\n\t\tfclose(hf);\n\t\tbreak;\n\t}\n}\n\nvoid D3DTextureTransp(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect)\n{\n\tswitch (Desc.Format){\n\t\tcase D3DFMT_X8R8G8B8: \n\t\tcase D3DFMT_A8R8G8B8:\n\t\t\t{\n\t\t\t\tDWORD *p;\n\t\t\t\tfor(UINT y=0; y<Desc.Height; y++){\n\t\t\t\t\tp = (DWORD *)LockedRect.pBits + ((y * LockedRect.Pitch) >> 2);\n\t\t\t\t\tfor(UINT x=0; x<Desc.Width; x++) *(p+x) = (*(p+x) & 0x00FFFFFF) | 0x7F000000;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase D3DFMT_A4R4G4B4: // AoE III - to test ....\n\t\tcase D3DFMT_X4R4G4B4:\n\t\t\t{\n\t\t\t\tWORD *p;\n\t\t\t\tfor(UINT y=0; y<Desc.Height; y++){\n\t\t\t\t\tp = (WORD *)LockedRect.pBits + ((y * LockedRect.Pitch) >> 1);\n\t\t\t\t\tfor(UINT x=0; x<Desc.Width; x++) *(p+x) = (*(p+x) & 0x0FFF) | 0x7000;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase D3DFMT_DXT1:\n\t\t\t// no way, no alpha \n\t\t\tbreak;\n\t\tcase D3DFMT_DXT2:\n\t\tcase D3DFMT_DXT3:\n\t\t\t{\n\t\t\t\tWORD *p = (WORD *)LockedRect.pBits;\n\t\t\t\tfor(int y=0; y<(int)Desc.Height; y+=4){\n\t\t\t\t\tfor(int x=0; x<(int)Desc.Width; x+=4){\n\t\t\t\t\t\tfor(int row=0; row<4; row++) *(p+row) = 0x7F7F;\n\t\t\t\t\t\tp += 8;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase D3DFMT_DXT4:\n\t\tcase D3DFMT_DXT5:\n\t\t\t{\n\t\t\t\tWORD *p = (WORD *)LockedRect.pBits;\n\t\t\t\tfor(int y=0; y<(int)Desc.Height; y+=4){\n\t\t\t\t\tfor(int x=0; x<(int)Desc.Width; x+=4){\n\t\t\t\t\t\t//*p = 0x7F7F;\n\t\t\t\t\t\t*p = 0x5F5F;\n\t\t\t\t\t\t//*(p+1) = 0x0;\n\t\t\t\t\t\t//*(p+2) = 0x0;\n\t\t\t\t\t\t//*(p+3) = 0x0;\n\t\t\t\t\t\t*(p+1) = 0x9249;\n\t\t\t\t\t\t*(p+2) = 0x2492;\n\t\t\t\t\t\t*(p+3) = 0x4924;\n\t\t\t\t\t\tp += 8;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t// no way ....\n\t\t\tbreak;\n\t}\n}\n\n#define GRIDSIZE 16\n\nvoid D3DTextureHighlight(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect)\n{\n\tswitch (Desc.Format){\n\t\tcase D3DFMT_X8R8G8B8: \n\t\tcase D3DFMT_A8R8G8B8:\n\t\t\t{\n\t\t\t\tDWORD *p;\n\t\t\t\tDWORD color;\n\t\t\t\tcolor=(DWORD)(rand() & 0x00FFFFFF);\n\t\t\t\tfor(UINT y=0; y<Desc.Height; y++){\n\t\t\t\t\tp = (DWORD *)LockedRect.pBits + ((y * LockedRect.Pitch) >> 2);\n\t\t\t\t\tfor(UINT x=0; x<Desc.Width; x++) *(p+x) = color;\n\t\t\t\t}\n\t\t\t\tfor(UINT y=0; y<Desc.Height; y++){\n\t\t\t\t\tp = (DWORD *)LockedRect.pBits + ((y * LockedRect.Pitch) >> 2);\n\t\t\t\t\tfor(UINT x=0; x<Desc.Width; x+=GRIDSIZE) *(p+x) = 0;\n\t\t\t\t\tif((y%GRIDSIZE)==0) for(UINT x=0; x<Desc.Width; x++) *(p++) = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase D3DFMT_DXT1:\n\t\t\t{\n\t\t\t\tWORD color = (WORD)(rand() & 0x0000FFFF);\n\t\t\t\tWORD whiteline[4] = {0xFFFF, 0xFFFF, 0x0000, 0x0000};\n\t\t\t\tWORD coloredline[4] = {0xFFFF, 0xFFFF, 0x0000, 0x0000};\n\t\t\t\tBYTE *w = (BYTE *)LockedRect.pBits;\n\t\t\t\tcoloredline[0] = coloredline[1] = color;\n#ifdef SOLIDCOLOR\n\t\t\t\tint max = (int)TextureSize(Desc, LockedRect) / 8;\n\t\t\t\tfor(int i=0; i<max; i++, w+=8){\n\t\t\t\t\tmemcpy((void *)w, (i%16)?(void *)coloredline:(void *)whiteline, 8);\n\t\t\t\t}\n#else\n\t\t\t\tfor(UINT y=0; y<Desc.Height; y+=4){\n\t\t\t\t\tfor(UINT x=0; x<Desc.Width; x+=4){\n\t\t\t\t\t\tif((y%GRIDSIZE)==0) \n\t\t\t\t\t\t\tmemcpy((void *)w, (void *)whiteline, 8);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tmemcpy((void *)w, (x%GRIDSIZE)?(void *)coloredline:(void *)whiteline, 8);\n\t\t\t\t\t\tw+=8;\n\t\t\t\t\t}\n\t\t\t\t}\n#endif\n\t\t\t}\n\t\t\tbreak;\n\t\tcase D3DFMT_DXT2:\n\t\tcase D3DFMT_DXT3:\n\t\tcase D3DFMT_DXT4:\n\t\tcase D3DFMT_DXT5:\n\t\t\t{\n\t\t\t\tDWORD color = (WORD)(rand() & 0x00FFFFFF);\n\t\t\t\tDWORD whiteline[8] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};\n\t\t\t\tDWORD coloredline[8] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};\n\t\t\t\tBYTE *w = (BYTE *)LockedRect.pBits;\n\t\t\t\tcoloredline[2] = coloredline[3] = color;\n#ifdef SOLIDCOLOR\n\t\t\t\tint max = (int)TextureSize(Desc, LockedRect) / 8;\n\t\t\t\tfor(int i=0; i<max; i++, w+=8){\n\t\t\t\t\tmemcpy((void *)w, (i%16)?(void *)coloredline:(void *)whiteline, 8);\n\t\t\t\t}\n#else\n\t\t\t\tfor(UINT y=0; y<Desc.Height; y+=4){\n\t\t\t\t\tfor(UINT x=0; x<Desc.Width; x+=4){\n\t\t\t\t\t\tif((y%GRIDSIZE)==0) \n\t\t\t\t\t\t\tmemcpy((void *)w, (void *)whiteline, 16);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tmemcpy((void *)w, (x%GRIDSIZE)?(void *)coloredline:(void *)whiteline, 16);\n\t\t\t\t\t\tw+=16;\n\t\t\t\t\t}\n\t\t\t\t}\n#endif\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t{\n\t\t\t\tBYTE color;\n\t\t\t\tDWORD dwSize;\n\t\t\t\tcolor=(BYTE)(rand() & 0x000000FF);\n\t\t\t\tif(dwSize=TextureSize(Desc, LockedRect)){\n\t\t\t\t\tmemset(LockedRect.pBits, color, dwSize);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n"
  },
  {
    "path": "dll/ddblit.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n#include <windows.h>\n#include <ddraw.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"stdio.h\" \n#include \"hddraw.h\"\n#include \"dxhelper.h\"\n\nextern LPDIRECTDRAWSURFACE lpDDSEmu_Prim;\nextern BOOL bVSyncDone;\nextern LPDIRECTDRAW lpPrimaryDD;\nextern Blt_Type pBlt;\nextern ReleaseS_Type pReleaseSMethod(int);\nextern CreateSurface1_Type pCreateSurface1;\nextern CreateSurface1_Type pCreateSurface2;\nextern CreateSurface1_Type pCreateSurface3;\nextern CreateSurface2_Type pCreateSurface4;\nextern CreateSurface2_Type pCreateSurface7;\nextern Unlock4_Type pUnlockMethod(int);\nextern HDC hFlippedDC;\nextern BOOL bFlippedDC;\nextern ReleaseDC_Type pReleaseDC1;\nextern ReleaseDC_Type pReleaseDC2;\nextern ReleaseDC_Type pReleaseDC3;\nextern ReleaseDC_Type pReleaseDC4;\nextern ReleaseDC_Type pReleaseDC7;\n\nextern void BlitError(HRESULT, LPRECT, LPRECT, int);\nextern void BlitTrace(char *, LPRECT, LPRECT, int);\nextern void DescribeSurface(LPDIRECTDRAWSURFACE, int, char *, int);\nextern void TextureHandling(LPDIRECTDRAWSURFACE, int);\nextern GetSurfaceDesc2_Type pGetSurfaceDescMethod();\nextern GetSurfaceDesc2_Type GetSurfaceDescMethod();\nextern Blt_Type pBltMethod();\n\nstatic HRESULT sBltNoPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx)\n{\n\tRECT srcrect;\n\tHRESULT res;\n\tBOOL FromScreen;\n\n\tFromScreen=dxwss.IsAPrimarySurface(lpddssrc); \n\n\t// make a working copy of srcrect if not NULL\n\tif (lpsrcrect) srcrect=*lpsrcrect;\n\t// when blitting from a primary surface on screen (that is in non emulated mode), correct offsets\n\t// You should take account also for scaled primary surfaces, but that would be a hard task: \n\t// a reduced primary surface (in not-emulated mode) would bring quality loss!!!\n\t// v2.1.83: BLITFROMBACKBUFFER mode, let you chose to blit from backbuffer, where the surface size\n\t// is fixed no matter how the window/primary surface is scaled. \n\t// In \"The Sims\" there is no quality loss, but some scrolling artifact.\n\t//if(lpsrcrect && FromScreen){\n\tif(FromScreen){\n\t\tif ((dxw.dwFlags1 & EMULATESURFACE) || (dxw.dwFlags1 & EMULATEBUFFER)){\n\t\t\tif(dxw.dwFlags1 & BLITFROMBACKBUFFER){\n\t\t\t\tLPDIRECTDRAWSURFACE lpDDSBack;\n\t\t\t\tlpDDSBack = dxwss.GetBackBufferSurface();\n\t\t\t\tif(lpDDSBack) lpddssrc=lpDDSBack;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif(dxw.dwFlags1 & BLITFROMBACKBUFFER){\n\t\t\t\tLPDIRECTDRAWSURFACE lpDDSBack;\n\t\t\t\tlpDDSBack = dxwss.GetBackBufferSurface();\n\t\t\t\tif(lpDDSBack) lpddssrc=lpDDSBack;\n\t\t\t}\n\t\t\telse{\n\t\t\t\tsrcrect=dxw.MapWindowRect(lpsrcrect);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (IsDebug) BlitTrace(\"NOPRIM\", lpsrcrect, lpdestrect, __LINE__);\n\tres= (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags, lpddbltfx);\n\t// Blitting compressed data may work to screen surfaces only. In this case, it may be worth\n\t// trying blitting directly to lpDDSEmu_Prim: it makes DK2 intro movies working.\n\t// Wrong guess!!! The cause was not compression, but simply a pixelformat mismatch. Better\n\t// configure things properly and avoid this branch.\n\tswitch(res){\n\t// commented out: it was the cause of the \"Divine Divinity\" flickering.\n\t// commented in?: it seems useful in \"Axis and Allies\"....\n\t//case DDERR_UNSUPPORTED:\n\t//\tif (dxw.dwFlags1 & EMULATESURFACE){\n\t//\t\tRECT targetrect;\n\t//\t\tif (IsDebug) BlitTrace(\"UNSUPP\", lpsrcrect ? &srcrect : NULL, lpdestrect, __LINE__);\n\t//\t\ttargetrect = dxw.MapWindowRect(lpdestrect);\n\t//\t\tres=(*pBlt)(lpDDSEmu_Prim, &targetrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags, lpddbltfx);\n\t//\t}\n\t//\tbreak;\n\tcase DDERR_SURFACEBUSY:\n\t\tif (lpsrcrect) srcrect=*lpsrcrect;\n\t\t(*pUnlockMethod(dxversion))(lpdds, NULL);\n\t\tif (lpddssrc) (*pUnlockMethod(dxversion))(lpddssrc, NULL);\t\n\t\tif (IsDebug) BlitTrace(\"BUSY\", lpsrcrect ? &srcrect : NULL, lpdestrect, __LINE__);\n\t\tres=(*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags|DDBLT_WAIT, lpddbltfx);\n\t\tbreak;\n\tcase DDERR_UNSUPPORTED: \n\t\t// to be fixed: parameters coming from BltFast in Star Defender 1 are not compatible with Blt transformation, so clear all....\n\t\tif(dwflags & (DDBLT_KEYDEST|DDBLT_KEYSRC)){\n#if 1\n\t\t\tres= (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect ? &srcrect : NULL, 0, 0);\n#else\n\t\t\tDDBLTFX ddbltfx;\n\t\t\tmemset(&ddbltfx, 0, sizeof(ddbltfx));\n\t\t\tddbltfx.dwSize = sizeof(ddbltfx);\n\t\t\tif(dwflags & DDBLT_KEYDEST) ddbltfx.dwROP |= DDCKEYCAPS_DESTBLT;\n\t\t\tif(dwflags & DDBLT_KEYSRC ) ddbltfx.dwROP |= DDCKEYCAPS_SRCBLT;\n\t\t\tres= (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags|DDBLT_ROP, &ddbltfx);\n#endif\n\t\t}\n\t\tbreak;\n\tcase DDERR_SURFACELOST:\n\t\tlpdds->Restore();\n\t\tres= (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect ? &srcrect : NULL, dwflags, lpddbltfx);\n\t\tOutTraceDW(\"Blt SURFACELOST RETRY: ret=%x(%s)\\n\", res, ExplainDDError(res)); \n\t\tbreak;\n\tdefault:\n\t\tbreak;\n\t}\n\tif (res) BlitError(res, &srcrect, lpdestrect, __LINE__);\n\tif(IsDebug) {\n\t\tDescribeSurface(lpdds, 0, \"[DST]\" , __LINE__);\n\t\tif (lpddssrc) DescribeSurface(lpddssrc, 0, \"[SRC]\" , __LINE__); // lpddssrc could be NULL!!!\n\t}\n\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=0;\n\tif(dxw.dwFlags5 & TEXTUREMASK) {\n\t\t// Texture Handling on Blt\n\t\tTextureHandling(lpdds, dxversion);\n\t}\n\treturn res;\n}\n\nstatic HRESULT sBltToPrimary(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx, BOOL isFlipping)\n{\n\tHRESULT res;\n\tRECT destrect, emurect;\n\textern PrimaryBlt_Type pPrimaryBlt;\n\n\t// handle minimized states\n\tif(!dxw.IsVisible) return DD_OK;\n\n\t// check coordinates\n\tdxw.UpdateDesktopCoordinates();\n\n\t// debug suppressions\n\tif(isFlipping){\n\t\tif(dxw.dwFlags3 & NODDRAWFLIP) return DD_OK;\n\t}\n\telse {\n\t\tif(dxw.dwFlags3 & NODDRAWBLT) return DD_OK;\n\t}\n\n\t// v2.03.48: on WinXP it may happen (reported by Cloudstr) that alt tabbing produces\n\t// bad blit attempts where the client coordinates get the (-32000,-32000) - (-32000,-32000)\n\t// value. In such cases, it's adviseable to simulate an OK return code without attempting\n\t// any blit operation!\n\tif(lpdestrect && (lpdestrect->left == -32000)) return DD_OK; // no blit on invisible window\n\n#ifdef ONEPIXELFIX\n\tif (lpdestrect){\n\t\tif ((lpdestrect->top == 0) && (lpdestrect->bottom == dxw.GetScreenHeight() -1)) lpdestrect->bottom = dxw.GetScreenHeight();\n\t\tif ((lpdestrect->left == 0) && (lpdestrect->right  == dxw.GetScreenWidth()  -1)) lpdestrect->right  = dxw.GetScreenWidth();\n\t}\n\tif (lpsrcrect){\n\t\tif ((lpsrcrect->top == 0) && (lpsrcrect->bottom == dxw.GetScreenHeight() -1)) lpsrcrect->bottom = dxw.GetScreenHeight();\n\t\tif ((lpsrcrect->left == 0) && (lpsrcrect->right  == dxw.GetScreenWidth()  -1)) lpsrcrect->right  = dxw.GetScreenWidth();\n\t}\n#endif\n\n\t// seems necessary to \"cure\" the \"FIFA 2000\" soccer game in hw accelerated graphics, when the Unlock() method\n\t// receives RECT coordinates with big positive or negative numbers!\n\t// v2.03.94fx1: \"FIFA2002\" is ok with Unlock rect set to Lock previous value, but other games (\"Aztec Wars\", ...)\n\t// require some software clipping when moving the cursor outside the window or similar cases\n\tif(lpdestrect){\n\t\tif(lpdestrect->top < 0) lpdestrect->top = 0;\n\t\tif(lpdestrect->top > (LONG)dxw.GetScreenHeight()) lpdestrect->top = dxw.GetScreenHeight();\n\t\tif(lpdestrect->left < 0) lpdestrect->left = 0;\n\t\tif(lpdestrect->left > (LONG)dxw.GetScreenWidth()) lpdestrect->left = (LONG)dxw.GetScreenWidth();\n\t\tif(lpdestrect->bottom > (LONG)dxw.GetScreenHeight()) lpdestrect->bottom = dxw.GetScreenHeight();\n\t\tif(lpdestrect->right > (LONG)dxw.GetScreenWidth()) lpdestrect->right = dxw.GetScreenWidth();\n\t\tif(lpdestrect->bottom < lpdestrect->top) lpdestrect->bottom = lpdestrect->top;\n\t\tif(lpdestrect->right < lpdestrect->left) lpdestrect->right = lpdestrect->left;\n\t}\n\n\tif(dxw.dwFlags5 & QUARTERBLT){\n\t\tBOOL QuarterUpdate;\n\t\tQuarterUpdate = lpdestrect ? \n\t\t\t(((lpdestrect->bottom - lpdestrect->top) * (lpdestrect->right - lpdestrect->left)) > ((LONG)(dxw.GetScreenHeight() * dxw.GetScreenWidth()) >> 2)) \n\t\t\t: \n\t\t\tTRUE;\n\t\tif(QuarterUpdate) if(dxw.HandleFPS()) return DD_OK;\n\t}\n\telse\n\t\tif(dxw.HandleFPS()) return DD_OK;\n\tif(dxw.dwFlags5 & NOBLT) return DD_OK;\n\n\tdestrect=dxw.MapWindowRect(lpdestrect);\n\tOutTraceB(\"DESTRECT=(%d,%d)-(%d,%d) Screen=(%dx%d)\\n\", \n\t\tdestrect.left, destrect.top, destrect.right, destrect.bottom,\n\t\tdxw.GetScreenWidth(), dxw.GetScreenHeight());\n\n\t//if(!(lpddssrc || (dwflags & DDBLT_COLORFILL))) {\n\tif((lpddssrc==0) && !(dwflags & DDBLT_COLORFILL)){\n\t\tlpddssrc = dxwss.GetBackBufferSurface();\n\t\tOutTraceDW(\"Flip: setting flip chain to lpdds=%x\\n\", lpddssrc);\n\t}\n\n\t// =========================\n\t// Blit to primary direct or fullscreen surface \n\t// =========================\n\n\tif(!dxw.IsEmulated){ \n\t\tres=DD_OK;\n\n\t\tif((dxw.dwFlags1 & SAVELOAD) || (dxw.dwFlags8 & FORCEVSYNC)) {\n\t\t\tHRESULT res2;\n\t\t\tif(!bVSyncDone){\n\t\t\t\tif(res2=lpPrimaryDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN , 0))\n\t\t\t\t\tOutTraceE(\"WaitForVerticalBlank ERROR: res=%x\\n\", res2);\n\t\t\t}\n\t\t\tbVSyncDone = FALSE;\n\t\t}\n\t\t\n\t\tif(dxw.Windowize) lpdestrect = &destrect;\n\n\t\t// blit only when source and dest surface are different. Should make ScreenRefresh faster.\n\t\tif (lpdds != lpddssrc) {\n\t\t\tdxw.ShowOverlay(lpddssrc);\n\t\t\tif (IsDebug) BlitTrace(\"PRIM-NOEMU\", lpsrcrect, lpdestrect, __LINE__);\n\t\t\tres=(*pPrimaryBlt)(dxversion, pBlt, lpdds, lpdestrect, lpddssrc, lpsrcrect, lpddbltfx);\n\t\t\t//res=(*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);\n\t\t}\n\t\tif(res){\n\t\t\tBlitError(res, lpsrcrect, lpdestrect, __LINE__);\n\t\t\tif(IsDebug) {\n\t\t\t\tDescribeSurface(lpdds, 0, \"[DST]\" , __LINE__);\n\t\t\t\tif (lpddssrc) DescribeSurface(lpddssrc, 0, \"[SRC]\" , __LINE__); // lpddssrc could be NULL!!!\n\t\t\t}\n\t\t\t// Try to handle HDC lock concurrency....\t\t\n\t\t\tif(res==DDERR_SURFACEBUSY){\n\t\t\t\t(*pUnlockMethod(dxversion))(lpdds, NULL);\n\t\t\t\tif(lpddssrc) (*pUnlockMethod(dxversion))(lpdds, NULL);\n\t\t\t\tif (IsDebug) BlitTrace(\"BUSY\", lpsrcrect, lpdestrect, __LINE__);\n\t\t\t\tres= (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);\n\t\t\t\tif (res) BlitError(res, lpsrcrect, lpdestrect, __LINE__);\n\t\t\t}\n\t\t\t// Try to handle DDBLT_KEYSRC on primary surface\n\t\t\tif((res==DDERR_INVALIDPARAMS) && (dwflags & DDBLT_KEYSRC)){\n\t\t\t\t// to do: handle possible situations with surface 2 / 4 / 7 types\n\t\t\t\tDDSURFACEDESC2 ddsd;\n\t\t\t\tLPDIRECTDRAWSURFACE2 lpddsTmp;\n\t\t\t\textern CreateSurface2_Type pCreateSurfaceMethod(int);\n\t\t\t\tif (IsDebug) BlitTrace(\"KEYSRC\", lpsrcrect, lpdestrect, __LINE__);\n\t\t\t\tmemset(&ddsd, 0, sizeof(ddsd));\n\t\t\t\tddsd.dwSize = (dxversion < 4) ? sizeof(DDSURFACEDESC) : sizeof(DDSURFACEDESC2);\n\t\t\t\t(*pGetSurfaceDescMethod())((LPDIRECTDRAWSURFACE2)lpddssrc, &ddsd);\n\t\t\t\tres=(*pCreateSurfaceMethod(dxversion))(lpPrimaryDD, &ddsd, (LPDIRECTDRAWSURFACE *)&lpddsTmp, NULL);\n\t\t\t\tif(res) OutTraceE(\"CreateSurface: ERROR %x(%s) at %d\", res, ExplainDDError(res), __LINE__);\n\t\t\t\t// copy background\n\t\t\t\tres= (*pBlt)((LPDIRECTDRAWSURFACE)lpddsTmp, lpsrcrect, lpdds, lpdestrect, DDBLT_WAIT, NULL);\n\t\t\t\tif(res) OutTraceE(\"Blt: ERROR %x(%s) at %d\", res, ExplainDDError(res), __LINE__);\n\t\t\t\t// overlay texture\n\t\t\t\tres= (*pBlt)((LPDIRECTDRAWSURFACE)lpddsTmp, lpsrcrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);\n\t\t\t\tif(res) OutTraceE(\"Blt: ERROR %x(%s) at %d\", res, ExplainDDError(res), __LINE__);\n\t\t\t\t// copy back to destination\n\t\t\t\tres= (*pBlt)(lpdds, lpdestrect, (LPDIRECTDRAWSURFACE)lpddsTmp, lpsrcrect, DDBLT_WAIT, lpddbltfx);\n\t\t\t\tif(res) OutTraceE(\"Blt: ERROR %x(%s) at %d\", res, ExplainDDError(res), __LINE__);\n\t\t\t\tif (res) BlitError(res, lpsrcrect, lpdestrect, __LINE__);\n\t\t\t\t(*pReleaseSMethod(dxversion))((LPDIRECTDRAWSURFACE)lpddsTmp);\n\t\t\t}\n\t\t\tif(res==DDERR_SURFACELOST){\n\t\t\t\tlpdds->Restore();\n\t\t\t\tres=(*pPrimaryBlt)(dxversion, pBlt, lpdds, lpdestrect, lpddssrc, lpsrcrect, lpddbltfx);\n\t\t\t\tOutTraceDW(\"Blt SURFACELOST RETRY: ret=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__); \n\t\t\t}\n\t\t\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;\n\t\t}\n\n\t\treturn res;\n\t}\n\n\t// ... else blitting on emulated surface\n\t\n\t// =========================\n\t// Blit/Flip to emulated primary surface\n\t// =========================\n\n\tif(dxw.dwFlags5 & GDIMODE){\n\t\textern void BlitToWindow(HWND, LPDIRECTDRAWSURFACE);\n\t\tif((dxw.dwFlags1 & SAVELOAD) || (dxw.dwFlags8 & FORCEVSYNC)){\n\t\t\tHRESULT res2;\n\t\t\tif(!bVSyncDone){\n\t\t\t\tif(res2=lpPrimaryDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN , 0))\n\t\t\t\t\tOutTraceE(\"WaitForVerticalBlank ERROR: res=%x\\n\", res2);\n\t\t\t}\n\t\t\tbVSyncDone = FALSE;\n\t\t}\n\t\tBlitToWindow(dxw.GethWnd(), lpddssrc);\n\t\treturn DD_OK;\n\t}\n\n\tif (lpdestrect){\n\t\temurect=*lpdestrect;\n\t}\n\telse{\n\t\t// emurect: emulated rect is full surface (dwWidth x dwHeight)\n\t\temurect.left = 0;\n\t\temurect.top = 0;\n\t\temurect.right = dxw.GetScreenWidth();\n\t\temurect.bottom = dxw.GetScreenHeight();\n\t}\n\n\tres=DD_OK;\n\t// blit only when source and dest surface are different. Should make ScreenRefresh faster.\n\tif (lpdds != lpddssrc){\n\t\tif (IsDebug) BlitTrace(\"SRC2EMU\", &emurect, &destrect, __LINE__);\n\t\tif(destrect.top == -32000) return DD_OK; // happens when window is minimized & do not notify on task switch ...\n\t    if(lpdds->IsLost()) lpdds->Restore(); // lpDDSEmu_Back could get lost .....\n\t\tres=(*pBlt)(lpdds, &emurect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);\n\t}\n\n\tif (res) {\n\t\tBlitError(res, lpsrcrect, &emurect, __LINE__);\n\t\tDescribeSurface(lpdds,    0, \"[DST]\" , __LINE__);\n\t\tif (lpddssrc) DescribeSurface(lpddssrc, 0, \"[SRC]\" , __LINE__); // lpddssrc could be NULL!!!\n\t\t/* \n\t\tDungeon Keeper II intro movies bug ....\n\t\tit seems that you can't blit from compressed or different surfaces in memory,\n\t\twhile the operation COULD be supported to video. As a mater of fact, it DOES\n\t\twork on my PC. The error code is DDERR_UNSUPPORTED.\n\t\tv2.02.98: The same thing happens with \"New York Racer\", but with DDERR_EXCEPTION error code.\n\t\tV2.03.15: The same thing happens with \"Silent Hunter III\", but with DDERR_INVALIDRECT error code.\n\t\t*/\n\t\tif((res==DDERR_UNSUPPORTED) || (res==DDERR_EXCEPTION) || (res==DDERR_INVALIDRECT)){\n\t\t\t//RECT targetrect;\n\t\t\tdxw.ShowOverlay(lpddssrc);\n\t\t\tif (IsDebug) BlitTrace(\"UNSUPP\", &emurect, &destrect, __LINE__);\n\t\t\t//targetrect=dxw.MapWindowRect(&destrect); // v2.03.18\n\t\t\t//res=(*pBlt)(lpDDSEmu_Prim, &targetrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);\n\t\t\tres=(*pBlt)(lpDDSEmu_Prim, &destrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);\n\t\t\tif (res) BlitError(res, lpsrcrect, &destrect, __LINE__);\n\t\t}\n\n\t\t// Try to handle HDC lock concurrency....\t\t\n\t\tif(res==DDERR_SURFACEBUSY){\n\t\t\tif (bFlippedDC) {\n\t\t\t\tReleaseDC_Type pReleaseDC;\n\t\t\t\tswitch(dxversion){\n\t\t\t\t\tcase 1: pReleaseDC=pReleaseDC1; break;\n\t\t\t\t\tcase 2: pReleaseDC=pReleaseDC2; break;\n\t\t\t\t\tcase 3: pReleaseDC=pReleaseDC3; break;\n\t\t\t\t\tcase 4: pReleaseDC=pReleaseDC4; break;\n\t\t\t\t\tcase 7: pReleaseDC=pReleaseDC7; break;\n\t\t\t\t}\n\t\t\t\t(*pReleaseDC)(lpdds, hFlippedDC);\n\t\t\t}\n\n\t\t\t// v2.03.49: resumed because if fixes locked surfaces on \"Red Alert 1\" on WinXP as reported by cloudstr \n\t\t\tif(lpddssrc) { // lpddssrc could be NULL!!!\n\t\t\tres=(*pUnlockMethod(dxversion))(lpddssrc, NULL);\n\t\t\tif(res && (res!=DDERR_NOTLOCKED)) OutTraceE(\"Unlock ERROR: lpdds=%x err=%x(%s)\\n\", lpddssrc, res, ExplainDDError(res));\n\t\t\t}\n\t\t\tres=(*pUnlockMethod(dxversion))(lpdds, NULL); // v2.03.24 reintroduced because of \"Virtua Cop\"\n\t\t\tif(res && (res!=DDERR_NOTLOCKED)) OutTraceE(\"Unlock ERROR: lpdds=%x err=%x(%s)\\n\", lpdds, res, ExplainDDError(res));\n\n\t\t\tif (IsDebug) BlitTrace(\"BUSY\", &emurect, &destrect, __LINE__);\n\t\t\tres=(*pBlt)(lpdds, &emurect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);\n\t\t\tif (res) BlitError(res, lpsrcrect, &destrect, __LINE__);\n\t\t}\n\n\t\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;\n\t\treturn res;\n\t}\n\n\tLPDIRECTDRAWSURFACE lpDDSSource;\n\tif (res=(*pColorConversion)(dxversion, lpdds, emurect, &lpDDSSource)) {\n\t\tOutTraceE(\"sBlt ERROR: Color conversion failed res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;\n\t\treturn res;\n\t}\n\n\tif(lpDDSEmu_Prim->IsLost()) lpDDSEmu_Prim->Restore();\n\n\tdxw.ShowOverlay(lpDDSSource);\n\tif(dxw.dwFlags4 & BILINEAR2XFILTER){\n\t\temurect.right <<= 1;\n\t\temurect.bottom <<= 1;\n\t}\n\n\tif((dxw.dwFlags1 & SAVELOAD) || (dxw.dwFlags8 & FORCEVSYNC)) {\n\t\tHRESULT res2;\n\t\tif(!bVSyncDone){\n\t\t\tif(res2=lpPrimaryDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN , 0))\n\t\t\t\tOutTraceE(\"WaitForVerticalBlank ERROR: res=%x\\n\", res2);\n\t\t}\n\t\tbVSyncDone = FALSE;\n\t}\n\n\tif (IsDebug) BlitTrace(\"BACK2PRIM\", &emurect, &destrect, __LINE__);\n\tres=(*pPrimaryBlt)(dxversion, pBlt, lpDDSEmu_Prim, &destrect, lpDDSSource, &emurect, NULL);\n\n\tif (res) BlitError(res, &emurect, &destrect, __LINE__);\n\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;\n\tif (IsDebug) OutTrace(\"%s: done ret=%x at %d\\n\", api, res, __LINE__);\n\treturn res;\n}\n\nHRESULT WINAPI sBlt(int dxversion, Blt_Type pBlt, char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx, BOOL isFlipping)\n{\n\tPOINT p = {0, 0};\n\tHRESULT res;\n\tBOOL ToPrim, FromPrim, ToScreen, FromScreen;\n\n\tif(dxw.dwFlags5 & MESSAGEPUMP) dxw.MessagePump();\n\n\tToPrim=dxwss.IsAPrimarySurface(lpdds);\n\tFromPrim=dxwss.IsAPrimarySurface(lpddssrc);\n\tToScreen=ToPrim && !(dxw.dwFlags1 & EMULATESURFACE);\n\tFromScreen=FromPrim && !(dxw.dwFlags1 & EMULATESURFACE) && !(dxw.dwFlags1 & EMULATEBUFFER); // v2.02.77\n\n\t// log\n\tif(IsTraceDW){\n\t\tchar sLog[256];\n\t\tchar sInfo[128];\n\t\tsprintf(sLog, \"%s: dest=%x%s src=%x%s dwFlags=%x(%s)\",\n\t\t\tapi, lpdds, (ToPrim ? \"(PRIM)\":\"\"), lpddssrc, (FromPrim ? \"(PRIM)\":\"\"), dwflags, ExplainBltFlags(dwflags));\n\t\tif (lpdestrect)\n\t\t\tsprintf(sInfo, \" destrect=(%d,%d)-(%d,%d)\", lpdestrect->left, lpdestrect->top, lpdestrect->right, lpdestrect->bottom);\n\t\telse\n\t\t\tsprintf(sInfo, \" destrect=(NULL)\");\n\t\tstrcat(sLog, sInfo);\n\t\tif (lpsrcrect)\n\t\t\tsprintf(sInfo, \" srcrect=(%d,%d)-(%d,%d)\", lpsrcrect->left, lpsrcrect->top, lpsrcrect->right, lpsrcrect->bottom);\n\t\telse\n\t\t\tsprintf(sInfo, \" srcrect=(NULL)\");\n\t\tstrcat(sLog, sInfo);\n\t\tif(lpddbltfx){\n\t\t\tif (dwflags & DDBLT_COLORFILL){\n\t\t\t\tsprintf(sInfo, \" ddbltfx.FillColor=%x\", lpddbltfx->dwFillColor); \n\t\t\t\tstrcat(sLog, sInfo);\n\t\t\t}\n\t\t\tif (dwflags & DDBLT_KEYDESTOVERRIDE){\n\t\t\t\tsprintf(sInfo, \" ddbltfx.DestColorkey=%x\", lpddbltfx->ddckDestColorkey); \n\t\t\t\tstrcat(sLog, sInfo);\n\t\t\t}\n\t\t\tif (dwflags & DDBLT_KEYSRCOVERRIDE){\n\t\t\t\tsprintf(sInfo, \" ddbltfx.SrcColorkey=%x\", lpddbltfx->ddckSrcColorkey); \n\t\t\t\tstrcat(sLog, sInfo);\n\t\t\t}\n\t\t\tif (dwflags & DDBLT_ROP){\n\t\t\t\tsprintf(sInfo, \" ddbltfx.ROP=%x\", lpddbltfx->dwROP);\n\t\t\t\tstrcat(sLog, sInfo);\n\t\t\t}\n\t\t\tif (dwflags & DDBLT_DEPTHFILL){\n\t\t\t\tsprintf(sInfo, \" ddbltfx.FillDepth=%x\", lpddbltfx->dwFillDepth);\n\t\t\t\tstrcat(sLog, sInfo);\n\t\t\t}\n\t\t}\n\t\tstrcat(sLog,\"\\n\");\n\t\tOutTrace(sLog);\n\t}\n\n\tif(dxw.dwFlags8 & FORCEWAIT){\n\t\tdwflags |= DDBLT_WAIT;\n\t\tdwflags &= ~(DDBLT_ASYNC|DDBLT_DONOTWAIT);\n\t}\n\tif(dxw.dwFlags8 & FORCENOWAIT){\n\t\tdwflags &= ~DDBLT_WAIT;\n\t\tdwflags |= (DDBLT_ASYNC|DDBLT_DONOTWAIT);\n\t}\n\n\tif(ToPrim)\n\t\tres = sBltToPrimary(dxversion, pBlt, api, lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx, isFlipping);\n\telse\n\t\tres = sBltNoPrimary(dxversion, pBlt, api, lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx);\n\n\treturn res;\n}"
  },
  {
    "path": "dll/ddcreates.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n#define INITGUID\n//#define FULLHEXDUMP\n\n#include <windows.h>\n#include <ddraw.h>\n#include \"dxwnd.h\"\n#include \"dxhook.h\"\n#include \"ddrawi.h\"\n#include \"dxwcore.hpp\"\n#include \"stdio.h\" \n#include \"hddraw.h\"\n#include \"dxhelper.h\"\n#include \"syslibs.h\"\n\n#define MAXBACKBUFFERS 4\n\nextern void SetPixFmt(LPDDSURFACEDESC2);\nextern void GetPixFmt(LPDDSURFACEDESC2);\nextern CHAR *LogSurfaceAttributes(LPDDSURFACEDESC2, char *, int);\nextern void DumpPixFmt(LPDDSURFACEDESC2);\nextern void DescribeSurface(LPDIRECTDRAWSURFACE, int, char *, int);\nextern void HookDDSurface(LPDIRECTDRAWSURFACE *, int,  BOOL);\nextern void RegisterPixelFormat(int, LPDIRECTDRAWSURFACE);\nextern void SetVSyncDelays(int, LPDIRECTDRAW);\nextern char *DumpPixelFormat(LPDDSURFACEDESC2);\nextern void FixSurfaceCaps(LPDDSURFACEDESC2, int);\nextern SetPalette_Type pSetPaletteMethod(int);\nextern ReleaseS_Type pReleaseSMethod(int);\nextern CreatePalette_Type pCreatePaletteMethod(int);\nextern GetGDISurface_Type pGetGDISurfaceMethod(int);\n\nextern int iBakBufferVersion;\nextern LPDIRECTDRAWSURFACE lpDDSEmu_Prim;\nextern LPDIRECTDRAWSURFACE lpDDSEmu_Back;\nextern LPDIRECTDRAWSURFACE lpDDZBuffer;\nextern DDSURFACEDESC2 DDSD_Prim;\nextern LPDIRECTDRAWPALETTE lpDDP;\nextern LPDIRECTDRAWCLIPPER lpddC;\nextern LPDIRECTDRAW lpPrimaryDD;\nextern int iDDPExtraRefCounter;\nextern DWORD dwBackBufferCaps;\nextern BOOL bFlippedDC;\nextern PALETTEENTRY DefaultSystemPalette[];\nextern GetGDISurface_Type pGetGDISurface1, pGetGDISurface2, pGetGDISurface3, pGetGDISurface4, pGetGDISurface7;\nextern GetAttachedSurface_Type pGetAttachedSurface1, pGetAttachedSurface2, pGetAttachedSurface3, pGetAttachedSurface4, pGetAttachedSurface7;\nextern CreateSurface1_Type pCreateSurface1, pCreateSurface2, pCreateSurface3, pCreateSurface4, pCreateSurface7;\nextern ReleaseS_Type pReleaseS1, pReleaseS2, pReleaseS3, pReleaseS4, pReleaseS7;\nextern GetPixelFormat_Type pGetPixelFormat1, pGetPixelFormat2, pGetPixelFormat3, pGetPixelFormat4, pGetPixelFormat7;\n\nvoid InitDSScreenParameters(int dxversion, LPDIRECTDRAWSURFACE lpdds)\n{\n\tHRESULT res;\n\tDDPIXELFORMAT p;\n\tDDSURFACEDESC2 ddsd;\n\tGetPixelFormat_Type pGetPixelFormat;\n\tswitch(dxversion){\n\t\tcase 1: pGetPixelFormat=pGetPixelFormat1; break;\n\t\tcase 2: pGetPixelFormat=pGetPixelFormat2; break;\n\t\tcase 3: pGetPixelFormat=pGetPixelFormat3; break;\n\t\tcase 4: pGetPixelFormat=pGetPixelFormat4; break;\n\t\tcase 7: pGetPixelFormat=pGetPixelFormat7; break;\n\t}\n\t//OutTrace(\"dxversion=%d pGetPixelFormat=%x\\n\", dxversion, pGetPixelFormat);\n\tp.dwSize=sizeof(DDPIXELFORMAT);\n\tif(res=(*pGetPixelFormat)(lpdds, &p)){\n\t\tOutTraceE(\"GetPixelFormat: ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn;\n\t}\n\n\tddsd.ddpfPixelFormat = p;\n\tOutTraceDW(\"InitDSScreenParameters: version=%d Actual %s\\n\", dxversion, DumpPixelFormat(&ddsd));\n\tdxw.ActualPixelFormat = p;\n\tSetBltTransformations(dxversion);\n\treturn;\n}\n\nstatic void ClearSurfaceDesc(void *ddsd, int dxversion)\n{\n\tint size;\n\tsize = (dxversion < 4) ? sizeof(DDSURFACEDESC) : sizeof(DDSURFACEDESC2);\n\tmemset(ddsd, 0, size); // Clean all\n\t((LPDDSURFACEDESC)ddsd)->dwSize = size;\n}\n\nstatic void BuildRealSurfaces(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, int dxversion)\n{\n\tHRESULT res;\n\tDDSURFACEDESC2 ddsd;\n\n\tOutTraceDW(\"BuildRealSurfaces: lpdd=%x pCreateSurface=%x version=%d\\n\", lpdd, pCreateSurface, dxversion);\n\tif(lpDDSEmu_Prim==NULL){\n\t\tClearSurfaceDesc((void *)&ddsd, dxversion);\n\t\tddsd.dwFlags = DDSD_CAPS; \n\t\t// try DDSCAPS_SYSTEMMEMORY first, then suppress it if not supported\n\t\t// no, DDSCAPS_SYSTEMMEMORY cause screen flickering while moving the window (and other troubles?)\n\t\tddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;\n\t\tOutTraceDW(\"BuildRealSurfaces: %s\\n\", LogSurfaceAttributes(&ddsd, \"[EmuPrim]\", __LINE__));\n\t\tres=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Prim, 0);\n\t\tif(res==DDERR_PRIMARYSURFACEALREADYEXISTS){\n\t\t\tOutTraceDW(\"BuildRealSurfaces: ASSERT DDSEmu_Prim already exists\\n\");\n\t\t\tif(dxw.Windowize){\n\t\t\t\t// in Windowize mode, the desktop properties are untouched, then the current primary surface can be recycled\n\t\t\t\tres=(*pGetGDISurfaceMethod(dxversion))(lpdd, &lpDDSEmu_Prim); \n\t\t\t}\n\t\t\telse {\n\t\t\t\t// in non-Windowized mode, the primary surface must be released and rebuilt with the proper properties\n\t\t\t\tres=(*pGetGDISurfaceMethod(dxversion))(lpdd, &lpDDSEmu_Prim); \n\t\t\t\tif (lpDDSEmu_Prim) while((*pReleaseSMethod(dxversion))(lpDDSEmu_Prim));\n\t\t\t\tres=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Prim, 0);\n\t\t\t}\n\t\t}\n\t\tif(res){\n\t\t\tOutTraceE(\"BuildRealSurfaces: CreateSurface ERROR on DDSEmu_Prim res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\tif(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd);\n\t\t\treturn;\n\t\t}\n\t\tOutTraceDW(\"BuildRealSurfaces: created new DDSEmu_Prim=%x\\n\",lpDDSEmu_Prim);\n\t\tif(IsDebug) DescribeSurface(lpDDSEmu_Prim, dxversion, \"DDSEmu_Prim\", __LINE__);\n\t\tInitDSScreenParameters(dxversion, lpDDSEmu_Prim);\n\t\tdxwss.PopSurface(lpDDSEmu_Prim);\n\n\t\tif (dxw.dwFlags3 & FORCECLIPPER){\n\t\t\tOutTraceDW(\"BuildRealSurfaces: FORCE SetClipper on primary hwnd=%x lpdds=%x\\n\", dxw.GethWnd(), lpDDSEmu_Prim);\n\t\t\tres=lpdd->CreateClipper(0, &lpddC, NULL);\n\t\t\tif (res) OutTraceE(\"BuildRealSurfaces: CreateClipper ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\tres=lpddC->SetHWnd(0, dxw.GethWnd());\n\t\t\tif (res) OutTraceE(\"BuildRealSurfaces: SetHWnd ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\tres=lpDDSEmu_Prim->SetClipper(lpddC);\n\t\t\tif (res) OutTraceE(\"BuildRealSurfaces: SetClipper ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t}\n\t\t// can't hook lpDDSEmu_Prim as generic, since the Flip method is unimplemented for a PRIMARY surface!\n\t\t// better avoid it or hook just useful methods.\n\t\t//if (dxw.dwTFlags & OUTPROXYTRACE) HookDDSurfaceGeneric(&lpDDSEmu_Prim, dxw.dwDDVersion);\n\t}\n\n\tif(lpDDSEmu_Back==NULL){\n\t\tClearSurfaceDesc((void *)&ddsd, dxversion);\n\t\tddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;\n\t\tddsd.ddsCaps.dwCaps = dwBackBufferCaps;\n\t\tddsd.dwWidth = dxw.GetScreenWidth();\n\t\tddsd.dwHeight = dxw.GetScreenHeight();\n\t\tif(dxw.dwFlags4 & BILINEAR2XFILTER){\n\t\t\t// double backbuffer size\n\t\t\tddsd.dwWidth = dxw.GetScreenWidth() << 1;\n\t\t\tddsd.dwHeight = dxw.GetScreenHeight() << 1;\n\t\t}\n\n\t\tOutTraceDW(\"BuildRealSurfaces: %s\\n\", LogSurfaceAttributes(&ddsd, \"[EmuBack]\", __LINE__));\n\t\tres=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Back, 0);\n\t\tif(res) {\n\t\t\tddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY;\n\t\t\tOutTraceDW(\"BuildRealSurfaces: %s\\n\", LogSurfaceAttributes(&ddsd, \"[EmuBack]\", __LINE__));\n\t\t\tres=(*pCreateSurface)(lpdd, &ddsd, &lpDDSEmu_Back, 0);\n\t\t}\n\t\tif(res){\n\t\t\tOutTraceE(\"BuildRealSurfaces: CreateSurface ERROR on DDSEmuBack : res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\tif(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd);\n\t\t\treturn;\n\t\t}\n\t\tOutTraceDW(\"BuildRealSurfaces: created new DDSEmu_Back=%x\\n\", lpDDSEmu_Back);\n\t\tif(IsDebug) DescribeSurface(lpDDSEmu_Back, dxversion, \"DDSEmu_Back\", __LINE__);\n\t\tdxwss.PopSurface(lpDDSEmu_Back);\n\t\t//if (dxw.dwTFlags & OUTPROXYTRACE) HookDDSurfaceGeneric(&lpDDSEmu_Back, dxversion);\n\t}\n}\n\nvoid RestoreDDrawSurfaces()\n{\n\t// if it's a ddraw game ....\n\tif(lpPrimaryDD){\n\t\tOutTraceDW(\"RestoreDDrawSurfaces: rebuilding surfaces for dd session %x\\n\", lpPrimaryDD);\n\t\tReleaseS_Type pReleaseS;\n\t\tCreateSurface_Type pCreateSurface;\n\t\tswitch(iBakBufferVersion){\n\t\t\tcase 1: pCreateSurface=(CreateSurface_Type)pCreateSurface1; pReleaseS=pReleaseS1; break;\n\t\t\tcase 2: pCreateSurface=(CreateSurface_Type)pCreateSurface2; pReleaseS=pReleaseS2; break;\n\t\t\tcase 3: pCreateSurface=(CreateSurface_Type)pCreateSurface3; pReleaseS=pReleaseS3; break;\n\t\t\tcase 4: pCreateSurface=(CreateSurface_Type)pCreateSurface4; pReleaseS=pReleaseS4; break;\n\t\t\tcase 7: pCreateSurface=(CreateSurface_Type)pCreateSurface7; pReleaseS=pReleaseS7; break;\n\t\t}\n\t\tif(lpDDSEmu_Back) while((*pReleaseS)(lpDDSEmu_Back)); lpDDSEmu_Back=0;\n\t\tif(lpDDSEmu_Prim) while((*pReleaseS)(lpDDSEmu_Prim)); lpDDSEmu_Prim=0;\n\t\tBuildRealSurfaces(lpPrimaryDD, pCreateSurface, iBakBufferVersion);\n\t}\n}\n\nstatic HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{\n\tDDSURFACEDESC2 ddsd;\n\tHRESULT res;\n\n\tOutTraceDW(\"BuildPrimaryEmu: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\\n\", lpdd, pCreateSurface, lpddsd, dxversion);\n\t// emulated primary surface\n\tmemcpy((void *)&ddsd, lpddsd, lpddsd->dwSize);\n\n\t// handle the surface attributes before the ddsd.dwFlags gets updated:\n\t// if a surface desc is NOT specified, build one\n\tif(!(ddsd.dwFlags & DDSD_PIXELFORMAT)) SetPixFmt((LPDDSURFACEDESC2)&ddsd);\n\t// then save it\n\tdxw.VirtualPixelFormat = ddsd.ddpfPixelFormat;\n\n\tOutTraceDW(\"BuildPrimaryEmu: DDSD_PIXELFORMAT color=%d flags=%x\\n\", dxw.VirtualPixelFormat.dwRGBBitCount, dxw.VirtualPixelFormat.dwFlags);\n\tddsd.dwFlags &= ~(DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE);\n\tddsd.dwFlags |= (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT);\n\tddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM);\n\t// DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces\n\tddsd.ddsCaps.dwCaps |= (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY);\n\t// on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it....\n\tif(dxw.dwFlags6 & NOSYSMEMPRIMARY) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY;\n\n\tddsd.dwWidth = dxw.GetScreenWidth();\n\tddsd.dwHeight = dxw.GetScreenHeight();\n\n\t// create Primary surface\n\tOutTraceDW(\"BuildPrimaryEmu: %s\\n\", LogSurfaceAttributes(&ddsd, \"[Primary]\" , __LINE__));\n\tres=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);\n\tif(res){\n\t\tOutTraceE(\"BuildPrimaryEmu: CreateSurface ERROR on DDSPrim res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\tif(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd);\n\t\treturn res;\n\t}\n\tiBakBufferVersion=dxversion; // v2.03.01\n\n\tOutTraceDW(\"BuildPrimaryEmu: created PRIMARY DDSPrim=%x\\n\", *lplpdds);\n    if(IsDebug) DescribeSurface(*lplpdds, dxversion, \"DDSPrim\", __LINE__);\n\tHookDDSurface(lplpdds, dxversion, TRUE);\n\t// \"Hoyle Casino Empire\" opens a primary surface and NOT a backbuffer ....\n\n\t// build a default System palette and apply it to primary surface\n\tif((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) &&\n\t\t(dxw.dwFlags6 & SYNCPALETTE)){ \n\t\tif(lpDDP == NULL){\n\t\t\tres=(*pCreatePaletteMethod(dxversion))(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL);\n\t\t\tif(res) OutTrace(\"BuildPrimaryEmu: CreatePalette ERROR err=%x at %d\\n\", res, __LINE__); \n\t\t}\n\t\t// this must be done after hooking - who knows why?\n\t\tres=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP);\n\t\tif(res) {\n\t\t\tOutTraceE(\"BuildPrimaryEmu: SetPalette ERROR err=%x at %d\\n\", res, __LINE__);\n\t\t}\n\t\telse iDDPExtraRefCounter++;\n\t}\n\n\t// set a global capability value for surfaces that have to blit to primary\n\t// DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces\n\t// DDSCAPS_SYSTEMMEMORY makes operations faster, but it is not always good...\n\tdwBackBufferCaps = (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY);\n\t// on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it....\n\t// this is important to avoid that certain D3D operations will abort - see \"Forsaken\" problem\n\tif(dxw.dwFlags6 & NOSYSMEMBACKBUF) dwBackBufferCaps = DDSCAPS_OFFSCREENPLAIN;\n\n\tif(dxw.dwFlags6 & SHAREDDC) bFlippedDC = TRUE;\n\n\tif(dxw.dwFlags5 & GDIMODE) return DD_OK;\n\n\tBuildRealSurfaces(lpdd, pCreateSurface, dxversion);\n\treturn DD_OK;\n}\n\nstatic HRESULT BuildPrimaryFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{\n\tDDSURFACEDESC2 ddsd;\n\tHRESULT res;\n\n\tOutTraceDW(\"BuildPrimaryFlippable: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\\n\", lpdd, pCreateSurface, lpddsd, dxversion);\n\t// emulated primary surface\n\tmemcpy((void *)&ddsd, lpddsd, lpddsd->dwSize);\n\n\t// handle the surface attributes before the ddsd.dwFlags gets updated:\n\t// if a surface desc is NOT specified, build one\n\tif(!(ddsd.dwFlags & DDSD_PIXELFORMAT)) SetPixFmt((LPDDSURFACEDESC2)&ddsd);\n\t// then save it\n\tdxw.VirtualPixelFormat = ddsd.ddpfPixelFormat;\n\n\tOutTraceDW(\"BuildPrimaryFlippable: DDSD_PIXELFORMAT color=%d flags=%x\\n\", dxw.VirtualPixelFormat.dwRGBBitCount, dxw.VirtualPixelFormat.dwFlags);\n\n\t// dwFlags\n\tddsd.dwFlags &= ~(DDSD_REFRESHRATE);\n\tddsd.dwFlags |= (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT|DDSD_BACKBUFFERCOUNT);\n\t// DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces\n\tddsd.ddsCaps.dwCaps |= (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY);\n\n\t// dwBackBufferCount: set to at least 1\n\tif(!(lpddsd->dwFlags & DDSD_BACKBUFFERCOUNT) || (lpddsd->dwBackBufferCount == 0)) ddsd.dwBackBufferCount = 1;\n\n\t// dwCaps\n\tddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM|DDSCAPS_FRONTBUFFER);\n\tddsd.ddsCaps.dwCaps |= (DDSCAPS_COMPLEX|DDSCAPS_FLIP|DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY);\n\t// on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it....\n\tif(dxw.dwFlags6 & NOSYSMEMPRIMARY) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY;\n\n\t// dwWidth & dwHeight\n\tddsd.dwWidth = dxw.GetScreenWidth();\n\tddsd.dwHeight = dxw.GetScreenHeight();\n\n\t// create Primary surface\n\tOutTraceDW(\"BuildPrimaryFlippable: %s\\n\", LogSurfaceAttributes(&ddsd, \"[Primary]\" , __LINE__));\n\tres=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);\n\tif(res){\n\t\tOutTraceE(\"BuildPrimaryFlippable: CreateSurface ERROR on DDSPrim res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\tif(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd);\n\t\treturn res;\n\t}\n\tiBakBufferVersion=dxversion; // v2.03.01\n\n\tOutTraceDW(\"BuildPrimaryFlippable: created PRIMARY DDSPrim=%x\\n\", *lplpdds);\n    if(IsDebug) DescribeSurface(*lplpdds, dxversion, \"DDSPrim\", __LINE__);\n\tHookDDSurface(lplpdds, dxversion, TRUE);\n\t// \"Hoyle Casino Empire\" opens a primary surface and NOT a backbuffer ....\n\n\t// build a default System palette and apply it to primary surface\n\tif((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) &&\n\t\t(dxw.dwFlags6 & SYNCPALETTE)){ \n\t\tif(lpDDP == NULL){\n\t\t\tres=(*pCreatePaletteMethod(dxversion))(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL);\n\t\t\tif(res) OutTrace(\"BuildPrimaryFlippable: CreatePalette ERROR err=%x at %d\\n\", res, __LINE__); \n\t\t}\n\t\t// this must be done after hooking - who knows why?\n\t\tres=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP);\n\t\tif(res) {\n\t\t\tOutTraceE(\"BuildPrimaryFlippable: SetPalette ERROR err=%x at %d\\n\", res, __LINE__);\n\t\t}\n\t\telse iDDPExtraRefCounter++;\n\t}\n\n\t// set a global capability value for surfaces that have to blit to primary\n\tdwBackBufferCaps = (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY);\n\t// on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it....\n\t// this is important to avoid that certain D3D operations will abort - see \"Forsaken\" problem\n\tif(dxw.dwFlags6 & NOSYSMEMBACKBUF) dwBackBufferCaps = DDSCAPS_OFFSCREENPLAIN;\n\n\tif(dxw.dwFlags6 & SHAREDDC) bFlippedDC = TRUE;\n\n\tif(dxw.dwFlags5 & GDIMODE) return DD_OK;\n\n\tBuildRealSurfaces(lpdd, pCreateSurface, dxversion);\n\treturn DD_OK;\n}\n\nstatic HRESULT BuildPrimaryFullscreen(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{\n\tDDSURFACEDESC2 ddsd;\n\tHRESULT res;\n\n\tOutTraceDW(\"BuildPrimaryFullscreen: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\\n\", lpdd, pCreateSurface, lpddsd, dxversion);\n\t// genuine primary surface\n\tmemcpy((void *)&ddsd, lpddsd, lpddsd->dwSize);\n\n\t// create Primary surface\n\tOutTraceDW(\"BuildPrimaryFullscreen: %s\\n\", LogSurfaceAttributes(&ddsd, \"[Primary]\", __LINE__));\n\tres=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);\n\tif(res){\n\t\tif (res==DDERR_PRIMARYSURFACEALREADYEXISTS){\n\t\t\tLPDIRECTDRAWSURFACE lpPrim;\n\t\t\tGetGDISurface_Type pGetGDISurface;\n\t\t\tpGetGDISurface = pGetGDISurfaceMethod(dxversion);\n\t\t\tOutTraceE(\"BuildPrimaryFullscreen: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\\n\");\n\t\t\t(*pGetGDISurface)(lpPrimaryDD, &lpPrim);\n\t\t\twhile ((*pReleaseSMethod(dxversion))(lpPrim));\n\t\t\tres = (*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);\n\t\t}\n\t\t/* fall through */\n\t\tif(res){\n\t\t\tOutTraceE(\"BuildPrimaryFullscreen: CreateSurface ERROR on DDSPrim res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\tif(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd);\n\t\t\treturn res;\n\t\t}\n\t}\n\n\tOutTraceDW(\"BuildPrimaryFullscreen: created PRIMARY DDSPrim=%x\\n\", *lplpdds);\n    if(IsDebug) DescribeSurface(*lplpdds, dxversion, \"DDSPrim\", __LINE__);\n\n\tiBakBufferVersion=dxversion; \n\tHookDDSurface(lplpdds, dxversion, TRUE);\n\tif(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor();\n\n\treturn DD_OK;\n}\n\nstatic HRESULT BuildPrimaryDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{\n\tDDSURFACEDESC2 ddsd;\n\tHRESULT res;\n\n\tOutTraceDW(\"BuildPrimaryDir: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\\n\", lpdd, pCreateSurface, lpddsd, dxversion);\n\t// genuine primary surface\n\tmemcpy((void *)&ddsd, lpddsd, lpddsd->dwSize);\n\t// v2.03.98 - when going to fullscreen mode and no emulation do not alter the capability masks, or in other words ...\n\t// if doing emulation or in window mode, fix the capability masks (De Morgan docet)\n\tddsd.dwFlags &= ~(DDSD_WIDTH|DDSD_HEIGHT|DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE|DDSD_PIXELFORMAT);\n\tddsd.ddsCaps.dwCaps &= ~(DDSCAPS_FLIP|DDSCAPS_COMPLEX);\n\t// v2.02.93: don't move primary / backbuf surfaces on systemmemory when 3DDEVICE is requested\n\t// this impact also on capabilities for temporary surfaces for AERO optimized handling\n\t// v2.04.08: this seems not always true, so it can be bypassed by ALLOWSYSMEMON3DDEV, just in case.\n\t// should be tested with \"Tomb Raider 3\" in no emulation mode\n\tif(!(dxw.dwFlags8 & ALLOWSYSMEMON3DDEV)){\n\t\tif ((lpddsd->dwFlags & DDSD_CAPS) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE)) \n\t\t\tddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY;\n\t}\n\n\t// create Primary surface\n\tOutTraceDW(\"BuildPrimaryDir: %s\\n\", LogSurfaceAttributes(&ddsd, \"[Primary]\", __LINE__));\n\tres=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);\n\tif(res){\n\t\tif (res==DDERR_PRIMARYSURFACEALREADYEXISTS){\n\t\t\tLPDIRECTDRAWSURFACE lpPrim;\n\t\t\tGetGDISurface_Type pGetGDISurface;\n\t\t\tpGetGDISurface = pGetGDISurfaceMethod(dxversion);\n\t\t\tOutTraceE(\"BuildPrimaryDir: CreateSurface DDERR_PRIMARYSURFACEALREADYEXISTS workaround\\n\");\n\t\t\t(*pGetGDISurface)(lpPrimaryDD, &lpPrim);\n\t\t\twhile ((*pReleaseSMethod(dxversion))(lpPrim));\n\t\t\tres = (*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);\n\t\t}\n\t\t/* fall through */\n\t\tif(res){\n\t\t\tOutTraceE(\"BuildPrimaryDir: CreateSurface ERROR on DDSPrim res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\tif(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd);\n\t\t\treturn res;\n\t\t}\n\t}\n\n\tOutTraceDW(\"BuildPrimaryDir: created PRIMARY DDSPrim=%x\\n\", *lplpdds);\n    if(IsDebug) DescribeSurface(*lplpdds, dxversion, \"DDSPrim\", __LINE__);\n\n\tif(dxw.dwFlags1 & EMULATEBUFFER){\n\t\tlpDDSEmu_Prim = *lplpdds;\n\t\tdxwss.PopSurface(lpDDSEmu_Prim);\n\n\t\tddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS;\n\t\t// warning: can't create zero sized backbuffer surface !!!!\n\t\tddsd.dwWidth = dxw.GetScreenWidth();\n\t\tddsd.dwHeight = dxw.GetScreenHeight();\n\t\tddsd.ddsCaps.dwCaps = 0;\n\t\tif (dxversion >= 4) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN;\n\t\tOutTraceDW(\"BuildPrimaryDir: %s\\n\", LogSurfaceAttributes(&ddsd, \"[Dir FixBuf]\", __LINE__));\n\t\tres=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);\n\t\tif(res){\n\t\t\tOutTraceE(\"BuildPrimaryDir: CreateSurface ERROR on DDSPrim res=%x(%s) at %d\\n\",res, ExplainDDError(res), __LINE__);\n\t\t\treturn res;\n\t\t}\n\t\tOutTraceDW(\"BuildPrimaryDir: created FIX DDSPrim=%x\\n\", *lplpdds);\n\t\tif(IsDebug) DescribeSurface(*lplpdds, dxversion, \"DDSPrim(2)\", __LINE__);\n\t}\n\n\tiBakBufferVersion=dxversion; // v2.03.37\n\tHookDDSurface(lplpdds, dxversion, TRUE);\n\tif(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor();\n\n\treturn DD_OK;\n}\n\nstatic HRESULT BuildBackBufferEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{\n\tDDSURFACEDESC2 ddsd;\n\tHRESULT res;\n\n\tOutTraceDW(\"BuildBackBufferEmu: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\\n\", lpdd, pCreateSurface, lpddsd, dxversion);\n\t// create BackBuffer surface\n\tmemcpy(&ddsd, lpddsd, lpddsd->dwSize);\n\tddsd.dwFlags &= ~(DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE);\n\tddsd.dwFlags |= (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT);\n\tddsd.ddsCaps.dwCaps &= ~(DDSCAPS_BACKBUFFER|DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM);\n\n\t// v2.03.75: if a surface desc is NOT specified, build one. This will allow ZBUF attach.\n\tif(!(lpddsd->dwFlags & DDSD_PIXELFORMAT)) SetPixFmt((LPDDSURFACEDESC2)&ddsd);\n\n\t// DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces\n\tddsd.ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN);\n\t// necessary: Martian Gotic crashes otherwise\n\t// v2.04.08: this seems no longer true in some cases, so ALLOWSYSMEMON3DDEV will bypass it.\n\t// Should be tested with \"Martian Gotic\" and \"Dominant Species\" SW mode in emulation modes\n\tif(!(dxw.dwFlags8 & ALLOWSYSMEMON3DDEV)){\n\t\tif((ddsd.dwFlags & DDSD_CAPS) && (ddsd.ddsCaps.dwCaps & DDSCAPS_3DDEVICE))\n\t\t\tddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY;\n\t}\n\t// on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it....\n\tif(dxw.dwFlags6 & NOSYSMEMBACKBUF) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY;\n\tddsd.dwWidth = dxw.GetScreenWidth();\n\tddsd.dwHeight = dxw.GetScreenHeight();\n\tGetPixFmt(&ddsd);\n\n\tOutTraceDW(\"BuildBackBufferEmu: %s\\n\", LogSurfaceAttributes(&ddsd, \"[Backbuf]\", __LINE__));\n\tres=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);\n\tif(res) {\n\t\tOutTraceE(\"BuildBackBufferEmu: CreateSurface ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\tif(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd);\n\t\treturn res;\n\t}\n\n\tOutTraceDW(\"BuildBackBufferEmu: created BACK DDSBack=%x\\n\", *lplpdds);\n    if(IsDebug) DescribeSurface(*lplpdds, dxversion, \"DDSBack\", __LINE__);\n\tHookDDSurface(lplpdds, dxversion, FALSE); // added !!!\n\tiBakBufferVersion=dxversion; // v2.02.31\n\n\tif((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) &&\n\t\t(dxw.dwFlags6 & SYNCPALETTE)){ \n\t\tif(lpDDP == NULL){\n\t\t\tres=(*pCreatePaletteMethod(dxversion))(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL);\n\t\t\tif(res) OutTrace(\"BuildBackBufferEmu: CreatePalette ERROR err=%x at %d\\n\", res, __LINE__); \n\t\t}\n\t\t// this must be done after hooking - who knows why?\n\t\tres=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP);\n\t\tif(res) {\n\t\t\tOutTraceE(\"BuildBackBufferEmu: SetPalette ERROR err=%x at %d\\n\", res, __LINE__);\n\t\t}\n\t\telse iDDPExtraRefCounter++;\n\t}\n\n\t// V2.1.85/V2.2.34: tricky !!!!\n\t// When a real backbuffer is created, it has a reference to its frontbuffer.\n\t// some games (Monopoly 3D) may depend on this setting - i.e. they could close\n\t// the exceeding references - so this is better be replicated adding an initial\n\t// reference to the zero count. But you don't have to do this if the backbuffer\n\t// is created independently by the primary surface.\n\t(*lplpdds)->AddRef(); // should it be repeated BBCount times????\n\n\treturn DD_OK;\n}\n\nstatic HRESULT BuildBackBufferFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{\n\tDDSURFACEDESC2 ddsd;\n\tHRESULT res;\n\n\tOutTraceDW(\"BuildBackBufferFlippable: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\\n\", lpdd, pCreateSurface, lpddsd, dxversion);\n\t//MessageBox(NULL, \"BuildBackBufferFlippable\", \"DxWnd\", MB_OK);\n\t\n\t// create BackBuffer surface\n\tmemcpy(&ddsd, lpddsd, lpddsd->dwSize);\n\n\tddsd.dwFlags &= ~(DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE);\n\tddsd.dwFlags |= (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT);\n\n\tddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FRONTBUFFER|DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM);\n\tddsd.ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN);\n\n\tddsd.dwWidth = dxw.GetScreenWidth();\n\tddsd.dwHeight = dxw.GetScreenHeight();\n\tGetPixFmt(&ddsd);\n\n\tOutTraceDW(\"BuildBackBufferFlippable: %s\\n\", LogSurfaceAttributes(&ddsd, \"[Backbuf]\", __LINE__));\n\tres=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);\n\tif(res) {\n\t\tOutTraceE(\"BuildBackBufferFlippable: CreateSurface ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\tif(res==DDERR_INVALIDPIXELFORMAT) DumpPixFmt(&ddsd);\n\t\treturn res;\n\t}\n\n\tOutTraceDW(\"BuildBackBufferFlippable: created BACK DDSBack=%x\\n\", *lplpdds);\n    if(IsDebug) DescribeSurface(*lplpdds, dxversion, \"DDSBack\", __LINE__);\n\tHookDDSurface(lplpdds, dxversion, FALSE); // added !!!\n\tiBakBufferVersion=dxversion; // v2.02.31\n\n\tif((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) &&\n\t\t(dxw.dwFlags6 & SYNCPALETTE)){ \n\t\tif(lpDDP == NULL){\n\t\t\tres=(*pCreatePaletteMethod(dxversion))(lpdd, DDPCAPS_8BIT|DDPCAPS_ALLOW256, DefaultSystemPalette, &lpDDP, NULL);\n\t\t\tif(res) OutTrace(\"BuildBackBufferFlippable: CreatePalette ERROR err=%x at %d\\n\", res, __LINE__); \n\t\t}\n\t\t// this must be done after hooking - who knows why?\n\t\tres=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP);\n\t\tif(res) {\n\t\t\tOutTraceE(\"BuildBackBufferFlippable: SetPalette ERROR err=%x at %d\\n\", res, __LINE__);\n\t\t}\n\t\telse iDDPExtraRefCounter++;\n\t}\n\n\treturn DD_OK;\n}\n\nstatic HRESULT AttachBackBufferFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{\n\tHRESULT res;\n\tLPDIRECTDRAWSURFACE lpDDSPrim;\n\tOutTraceDW(\"AttachBackBufferFlippable: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\\n\", lpdd, pCreateSurface, lpddsd, dxversion);\n\n\t// retrieve the attached backbuffer surface and hook it\n\n\tif(lpddsd->dwBackBufferCount == 0) return DD_OK; // nothing to retrieve\n\n\tGetAttachedSurface_Type pGetAttachedSurface;\n\tDDSCAPS2 caps;\n\tswitch(dxversion){\n\t\tcase 1: pGetAttachedSurface = pGetAttachedSurface1; break;\n\t\tcase 2: pGetAttachedSurface = pGetAttachedSurface2; break;\n\t\tcase 3: pGetAttachedSurface = pGetAttachedSurface3; break;\n\t\tcase 4: pGetAttachedSurface = pGetAttachedSurface4; break;\n\t\tcase 7: pGetAttachedSurface = pGetAttachedSurface7; break;\n\t}\n\tmemset(&caps, 0, sizeof(caps));\n\tcaps.dwCaps = DDSCAPS_BACKBUFFER;\n\tlpDDSPrim = dxwss.GetPrimarySurface();\n\tres = (*pGetAttachedSurface)(lpDDSPrim, (LPDDSCAPS)&caps, lplpdds);\n\tif(res){\n\t\tOutTraceE(\"AttachBackBufferFlippable: GetAttachedSurface ERROR on DDSPrim res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tOutTraceDW(\"AttachBackBufferFlippable: retrieved BACK DDSBack=%x\\n\", *lplpdds);\n    if(IsDebug) DescribeSurface(*lplpdds, dxversion, \"DDSBack\", __LINE__);\n\tHookDDSurface(lplpdds, dxversion, FALSE); // added !!!\n\tiBakBufferVersion=dxversion; // v2.02.31\n\n\treturn DD_OK;\n}\n\nstatic HRESULT BuildBackBufferFullscreen(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{\n\tOutTraceDW(\"BuildBackBufferFullscreen: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\\n\", lpdd, pCreateSurface, lpddsd, dxversion);\n\treturn DD_OK;\n}\n\nstatic HRESULT AttachBackBufferFullscreen(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{\n\tOutTraceDW(\"AttachBackBufferFullscreen: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\\n\", lpdd, pCreateSurface, lpddsd, dxversion);\n\treturn DD_OK;\n}\n\nstatic HRESULT BuildBackBufferDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{\n\tDDSURFACEDESC2 ddsd;\n\tHRESULT res;\n\n\tOutTraceDW(\"BuildBackBufferDir: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\\n\", lpdd, pCreateSurface, lpddsd, dxversion);\n\t// create BackBuffer surface\n\t// ClearSurfaceDesc((void *)&ddsd, dxversion);\n\tmemcpy(&ddsd, lpddsd, lpddsd->dwSize);\n\tif(dxw.IsEmulated || dxw.Windowize){\n\t\tddsd.dwFlags &= ~(DDSD_WIDTH|DDSD_HEIGHT|DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE|DDSD_PIXELFORMAT);\n\t\tddsd.dwFlags |= (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH);\n\t\tddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX);\n\t\t// v2.02.93: don't move primary / backbuf surfaces on systemmemory when 3DDEVICE is requested\n\t\t// v2.04.08: possibly no longer true ... to test with \"Tomb Raider 3\" non emulated modes\n\t\tif(dxw.dwFlags8 & ALLOWSYSMEMON3DDEV){\n\t\t\tddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; \n\t\t\tif (dxversion >= 4) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN;\n\t\t\tddsd.ddsCaps.dwCaps &= ~(DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM);\n\t\t}\n\t\telse {\n\t\t\tif(lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) {\n\t\t\t\tddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; \n\t\t\t\tif (dxversion >= 4) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN;\n\t\t\t\tddsd.ddsCaps.dwCaps &= ~(DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM);\n\t\t\t}\n\t\t}\n\t}\n\tif(dxw.dwFlags6 & NOSYSMEMBACKBUF) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY;\n\tddsd.dwWidth = dxw.GetScreenWidth();\n\tddsd.dwHeight = dxw.GetScreenHeight();\n\n\tif (dxw.dwFlags2 & BACKBUFATTACH) {\n\t\tLPDIRECTDRAWSURFACE lpPrim;\n\t\tDDSURFACEDESC2 prim;\n\t\tGetGDISurface_Type pGetGDISurface;\n\t\tpGetGDISurface = pGetGDISurfaceMethod(dxversion);\n\t\t(*pGetGDISurface)(lpPrimaryDD, &lpPrim);\n\t\tmemset(&prim, 0, sizeof(DDSURFACEDESC2));\n\t\tprim.dwSize = (dxversion >= 4) ? sizeof(DDSURFACEDESC2) : sizeof(DDSURFACEDESC);\n\t\tres=lpPrim->GetSurfaceDesc((DDSURFACEDESC *)&prim);\n\t\t(*pReleaseSMethod(dxversion))(lpPrim);\n\t\tddsd.dwWidth = prim.dwWidth;\n\t\tddsd.dwHeight = prim.dwHeight;\n\t\tOutTraceDW(\"BuildBackBufferDir: BMX FIX res=%x(%s) wxh=(%dx%d)\\n\", res, ExplainDDError(res),ddsd.dwWidth, ddsd.dwHeight);\n\t}\n\tOutTraceDW(\"BuildBackBufferDir: %s\\n\", LogSurfaceAttributes(&ddsd, \"[Backbuf]\", __LINE__));\n\tres=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);\n\tif(res) {\n\t\tif ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res==DDERR_OUTOFVIDEOMEMORY)){\n\t\t\tOutTraceDW(\"BuildBackBufferDir: CreateSurface DDERR_OUTOFVIDEOMEMORY ERROR at %d, retry in SYSTEMMEMORY\\n\", __LINE__);\n\t\t\tddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; \n\t\t\tddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; \n\t\t\tres=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0);\n\t\t}\n\t\tif(res){\n\t\t\tOutTraceE(\"BuildBackBufferDir: CreateSurface ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\treturn res;\n\t\t}\n\t}\n\n\tOutTraceDW(\"BuildBackBufferDir: created BACK DDSBack=%x\\n\", *lplpdds);\n    if(IsDebug) DescribeSurface(*lplpdds, dxversion, \"DDSBack\", __LINE__);\n\tHookDDSurface(lplpdds, dxversion, FALSE); // added !!!\n\tiBakBufferVersion=dxversion; // v2.02.31\n\n\treturn DD_OK;\n}\t\t\n\nstatic HRESULT BuildGenericEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{\n\tDDSURFACEDESC2 ddsd;\n\tHRESULT res;\n\n\tOutTraceDW(\"BuildGenericEmu: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\\n\", lpdd, pCreateSurface, lpddsd, dxversion);\n\tmemcpy(&ddsd, lpddsd, lpddsd->dwSize); // Copy over ....\n\tFixSurfaceCaps(&ddsd, dxversion);\n\t// It looks that DDSCAPS_SYSTEMMEMORY surfaces can perfectly be DDSCAPS_3DDEVICE as well. \n\t// For \"Risk II\" it is necessary that both the primary surface and the offscreen surfaces are generated\n\t// with the same type, so that assuming an identical lPitch and memcopy-ing from one buffer to the \n\t// other is a legitimate operation. \n\n\tif(dxw.dwFlags6 & POWER2WIDTH){ // v2.03.28: POWER2WIDTH to fix \"Midtown Madness\" in surface emulation mode\n\t\tif(((ddsd.dwFlags & (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) == (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) &&\n\t\t\t(ddsd.ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN)\n\t\t){\n\t\t\tDWORD dwWidth;\n\t\t\tdwWidth = ((ddsd.dwWidth + 3) >> 2) << 2;\n\t\t\tif(dwWidth != ddsd.dwWidth) OutTraceDW(\"BuildGenericEmu: POWER2WIDTH fix surface width %d->%d\\n\", ddsd.dwWidth, dwWidth);\n\t\t\tddsd.dwWidth = dwWidth;\n\t\t}\n\t}\n\n\tres=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu);\n\t// v2.04.05: error condition found & fixed on certain platforms for \"Dominant Species\" only (so far).\n\tif (((res == DDERR_UNSUPPORTED) || (res == DDERR_UNSUPPORTEDMODE)) && \n\t\t(ddsd.ddsCaps.dwCaps & DDSCAPS_TEXTURE)){\n\t\tOutTraceDW(\"BuildGenericEmu: CreateSurface ERROR res=%x(%s) at %d, TEXTURE->OFFSCREENPLAIN retry\\n\", res, ExplainDDError(res), __LINE__);\n\t\tddsd.ddsCaps.dwCaps &= ~(DDSCAPS_TEXTURE|DDSCAPS_ALLOCONLOAD);\n\t\tddsd.ddsCaps.dwCaps |= (DDSCAPS_OFFSCREENPLAIN);\n\t\tres=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu);\n\t}\t\n\tif ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res!=DD_OK)){\n\t\tOutTraceDW(\"BuildGenericEmu: CreateSurface ERROR res=%x(%s) at %d, retry\\n\", res, ExplainDDError(res), __LINE__);\n\t\tddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY;\n\t\tddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;\n\t\tres=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu);\n\t}\n\tif (res) {\n\t\tOutTraceE(\"BuildGenericEmu: CreateSurface ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tOutTraceDW(\"BuildGenericEmu: CREATED lpddsd=%x version=%d %s\\n\", \n\t\t*lplpdds, dxversion, LogSurfaceAttributes(&ddsd, \"[Emu Generic]\", __LINE__));\n\t\t\n\t// v2.02.66: if 8BPP paletized surface and a primary palette exixts, apply.\n\t// fixes \"Virtua Fighter PC\" palette bug\n\tif(lpDDP && (ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8)){\n\t\tres=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP);\n\t\tif(res)\n\t\t\tOutTraceE(\"BuildGenericEmu: SetPalette ERROR lpdds=%x res=%x(%s) at %d\\n\", *lplpdds, res, ExplainDDError(res), __LINE__);\n\t\telse {\n\t\t\tOutTraceDW(\"BuildGenericEmu: applied palette lpddp=%x to lpdds=%x\\n\", lpDDP, *lplpdds);\n\t\t\tiDDPExtraRefCounter++;\n\t\t}\n\t}\n\n\t// diagnostic hooks ....\n\tHookDDSurface(lplpdds, dxversion, FALSE);\n\n\treturn DD_OK;\n}\n\nstatic HRESULT BuildGenericFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{\n\tDDSURFACEDESC2 ddsd;\n\tHRESULT res;\n\n\tOutTraceDW(\"BuildGenericFlippable: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\\n\", lpdd, pCreateSurface, lpddsd, dxversion);\n\tmemcpy(&ddsd, lpddsd, lpddsd->dwSize); // Copy over ....\n\tFixSurfaceCaps(&ddsd, dxversion);\n\n\tif(dxw.dwFlags6 & POWER2WIDTH){ // v2.03.28: POWER2WIDTH to fix \"Midtown Madness\" in surface emulation mode\n\t\tif(((ddsd.dwFlags & (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) == (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) &&\n\t\t\t(ddsd.ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN)\n\t\t){\n\t\t\tDWORD dwWidth;\n\t\t\tdwWidth = ((ddsd.dwWidth + 3) >> 2) << 2;\n\t\t\tif(dwWidth != ddsd.dwWidth) OutTraceDW(\"BuildGenericFlippable: POWER2WIDTH fix surface width %d->%d\\n\", ddsd.dwWidth, dwWidth);\n\t\t\tddsd.dwWidth = dwWidth;\n\t\t}\n\t}\n\n\tres=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu);\n\tif ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res!=DD_OK)){\n\t\tOutTraceDW(\"BuildGenericFlippable: CreateSurface ERROR res=%x(%s) at %d, retry\\n\", res, ExplainDDError(res), __LINE__);\n\t\tddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY;\n\t\tddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;\n\t\tres=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu);\n\t}\n\tif (res) {\n\t\tOutTraceE(\"BuildGenericFlippable: CreateSurface ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tOutTraceDW(\"BuildGenericFlippable: CREATED lpddsd=%x version=%d %s\\n\", \n\t\t*lplpdds, dxversion, LogSurfaceAttributes(&ddsd, \"[Emu Generic]\", __LINE__));\n\t\t\n\t// v2.02.66: if 8BPP paletized surface and a primary palette exixts, apply.\n\t// fixes \"Virtua Fighter PC\" palette bug\n\tif(lpDDP && (ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8)){\n\t\tres=(*pSetPaletteMethod(dxversion))(*lplpdds, lpDDP);\n\t\tif(res)\n\t\t\tOutTraceE(\"BuildGenericFlippable: SetPalette ERROR on lpdds=%x res=%x(%s) at %d\\n\", *lplpdds, res, ExplainDDError(res), __LINE__);\n\t\telse {\n\t\t\tOutTraceDW(\"BuildGenericFlippable: applied palette lpddp=%x to lpdds=%x\\n\", lpDDP, *lplpdds);\n\t\t\tiDDPExtraRefCounter++;\n\t\t}\n\t}\n\n\t// diagnostic hooks ....\n\tHookDDSurface(lplpdds, dxversion, FALSE);\n\n\treturn DD_OK;\n}\n\nstatic HRESULT BuildGenericDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurface, LPDDSURFACEDESC2 lpddsd, int dxversion, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{\n\tHRESULT res;\n\n\tOutTraceDW(\"BuildGenericDir: lpdd=%x pCreateSurface=%x lpddsd=%x version=%d\\n\", lpdd, pCreateSurface, lpddsd, dxversion);\n\tOutTraceDW(\"BuildGenericDir: %s\\n\", LogSurfaceAttributes(lpddsd, \"[Dir Generic]\", __LINE__));\n\n\tres = (*pCreateSurface)(lpdd, lpddsd, lplpdds, 0); \n\tif(res){\n\t\t// v2.02.60: Ref. game Incoming GOG release, post by Marek, error DDERR_UNSUPPORTED while trying to create ZBUFFER surface \n\t\tif ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && ((res==DDERR_OUTOFVIDEOMEMORY)||(res==DDERR_UNSUPPORTED))){\n\t\t\tOutTraceDW(\"BuildGenericDir: CreateSurface ERROR res=%x(%s) at %d, retry\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\tlpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY;\n\t\t\tlpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;\n\t\t\tres = (*pCreateSurface)(lpdd, lpddsd, lplpdds, 0); \n\t\t}\n\t\tif(res){\n\t\t\tOutTraceE(\"BuildGenericDir: CreateSurface ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\treturn res;\n\t\t}\n\t}\n\n\tOutTraceDW(\"BuildGenericDir: CREATED lpddsd=%x version=%d %s\\n\", \n\t\t*lplpdds, dxversion, LogSurfaceAttributes(lpddsd, \"[Dir Generic]\", __LINE__));\n\n\t// hooks ....\n\tHookDDSurface(lplpdds, dxversion, FALSE);\n\n\treturn DD_OK;\n}\n\nHRESULT WINAPI extCreateSurface(int dxversion, CreateSurface_Type pCreateSurface, LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd,\n\tLPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{\n\tHRESULT res;\n\tDDSURFACEDESC2 ddsd;\n\tLPDIRECTDRAWSURFACE lpDDSPrim;\n\tLPDIRECTDRAWSURFACE lpDDSBack = NULL;\n\tDWORD CurFlags;\n\tint TargetSize;\n\ttypedef HRESULT (*BuildSurface_Type)(LPDIRECTDRAW, CreateSurface_Type, LPDDSURFACEDESC2, int, LPDIRECTDRAWSURFACE *, void *);\n\tstatic BuildSurface_Type BuildPrimary = 0;\n\tstatic BuildSurface_Type BuildBackBuffer = 0;\n\tstatic BuildSurface_Type AttachBackBuffer = 0;\n\tstatic BuildSurface_Type BuildGeneric = 0;\n\tstatic enum  {\n\t\tPRIMARY_FULLSCREEN = 0,\n\t\tPRIMARY_DIRECT,\n\t\tPRIMARY_FLIPPABLE,\t\n\t\tPRIMARY_EMULATED\n\t} SurfaceMode;\n\n\tOutTraceDDRAW(\"CreateSurface(%d): lpdd=%x %s\\n\", \n\t\tdxversion, lpdd, LogSurfaceAttributes(lpddsd, \"[CreateSurface]\", __LINE__));\n\t\n\t// v2.03.95.fx1 - deleted: some texture handling REQUIRES a proper FourCC codec. \n\t// maybe it could be suppressed by a dedicated config. flag and on primary surfaces only?\n\t//lpddsd->ddpfPixelFormat.dwFourCC = 0;\n\n\t// if not initialized yet ....\n\tif(BuildPrimary == 0){ \n\t\tchar *sLabel;\n\t\tSurfaceMode = PRIMARY_FULLSCREEN;\n\t\tif(dxw.IsEmulated || dxw.Windowize){\n\t\t\tSurfaceMode = (dxw.dwFlags1 & EMULATESURFACE) ? \n\t\t\t\t((dxw.dwFlags6 & FLIPEMULATION) ? \n\t\t\t\t\tPRIMARY_EMULATED : \n\t\t\t\t\tPRIMARY_FLIPPABLE) : \n\t\t\t\tPRIMARY_DIRECT;\n\t\t}\n\n\t\tswitch(SurfaceMode)\t{\n\t\t\tcase PRIMARY_FULLSCREEN:\n\t\t\t\tBuildPrimary = BuildPrimaryFullscreen;\n\t\t\t\tBuildBackBuffer = BuildBackBufferFullscreen;\n\t\t\t\tAttachBackBuffer = AttachBackBufferFullscreen;\n\t\t\t\tBuildGeneric = BuildGenericDir;\n\t\t\t\tsLabel=\"FULLSCR\";\n\t\t\t\tbreak;\n\t\t\tcase PRIMARY_DIRECT: \n\t\t\t\tBuildPrimary = BuildPrimaryDir;\n\t\t\t\tBuildBackBuffer = BuildBackBufferDir;\n\t\t\t\tAttachBackBuffer = BuildBackBufferDir;\n\t\t\t\tBuildGeneric = BuildGenericDir;\n\t\t\t\tsLabel=\"DIRECT\";\n\t\t\t\tbreak;\n\t\t\tcase PRIMARY_FLIPPABLE:\n\t\t\t\tBuildPrimary = BuildPrimaryFlippable;\n\t\t\t\tBuildBackBuffer = BuildBackBufferFlippable;\n\t\t\t\tAttachBackBuffer = AttachBackBufferFlippable;\n\t\t\t\tBuildGeneric = BuildGenericFlippable;\n\t\t\t\tsLabel=\"FLIPPABLE\";\n\t\t\t\tbreak;\n\t\t\tcase PRIMARY_EMULATED:\n\t\t\t\tBuildPrimary = BuildPrimaryEmu;\n\t\t\t\tBuildBackBuffer = BuildBackBufferEmu;\n\t\t\t\tAttachBackBuffer = BuildBackBufferEmu;\n\t\t\t\tBuildGeneric = BuildGenericEmu;\n\t\t\t\tsLabel=\"EMULATED\";\n\t\t\t\tbreak;\t\n\t\t}\n\t\tOutTraceDW(\"CreateSurface: MODE INITIALIZED mode=%d(%s)\\n\", SurfaceMode, sLabel);\n\t}\n\n\t// check for lpddsd->dwSize value\n\tTargetSize=(dxversion<4)?sizeof(DDSURFACEDESC):sizeof(DDSURFACEDESC2);\n\tif(lpddsd->dwSize != TargetSize){\n\t\tchar sMsg[81];\n\t\tsprintf_s(sMsg,80, \"CreateSurface: ASSERT bad dwSize=%d dxversion=%d\\n\", \n\t\t\tlpddsd->dwSize, dxversion);\n\t\tOutTraceDW(sMsg);\n\t\tif(IsAssertEnabled) MessageBox(0, sMsg, \"CreateSurface\", MB_OK | MB_ICONEXCLAMATION);\n\t\treturn DDERR_INVALIDPARAMS;\n\t}\n\n\t//GHO workaround (needed for WarWind, Rogue Spear):\n\tif (lpddsd->dwFlags && !(lpddsd->dwFlags & 0x1)){\n\t\tOutTraceDW(\"CreateSurface: fixing illegal dwFlags value: %x -> %x\\n\",\n\t\t\tlpddsd->dwFlags, (lpddsd->dwFlags | DDSD_CAPS));\n\t\tlpddsd->dwFlags |= DDSD_CAPS;\n\t}\n\n\tmemcpy(&ddsd, lpddsd, lpddsd->dwSize); // Copy\n\n\t// v2.02.38: this is odd: in \"Star Force Deluxe\" there is no PRIMARY surface, but a surface with \n\t// 0 flags and 0 capabilities serves for this purpose. Is it a side-effect of old ddraw releases?\n\tif((dxversion == 1) && ((ddsd.dwFlags & ~DDSD_BACKBUFFERCOUNT) == 0)){ // Star Force Deluxe\n\t\tddsd.dwFlags = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH;\n\t\tddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;\n\t\t//if(dxw.VirtualPixelFormat.dwRGBBitCount == 8) ddsd.ddsCaps.dwCaps |= DDSCAPS_PALETTE;\n\t}\n\n\t// creation of the primary surface....\n\tif(ddsd.dwFlags & DDSD_CAPS && ddsd.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE){\n\t\tdxwss.ClearSurfaceList(); // v2.03.83: \"Daytona USA\" would saturate the list otherwise\n\t\tSetVSyncDelays(dxversion, lpdd);\n\t\tGetHookInfo()->Height=(short)dxw.GetScreenHeight();\n\t\tGetHookInfo()->Width=(short)dxw.GetScreenWidth();\n\t\tGetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount;\n\t\tGetHookInfo()->DXVersion=dxversion;\n\t\tlpPrimaryDD = lpdd; // v2.1.87\n\t\tmemcpy(&DDSD_Prim, lpddsd, sizeof(DDSD_Prim)); // v2.02.37\n\n\t\t// beware of the different behaviour between older and newer directdraw releases...\n\t\tif(dxversion >= 4){\n\t\t\tif (lpDDSEmu_Back) while(lpDDSEmu_Back->Release());\n\t\t\tif (lpDDSEmu_Prim) while(lpDDSEmu_Prim->Release());\n\t\t\tif (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) { // Praetorians !!!!\n\t\t\t\tlpDDSBack = dxwss.GetBackBufferSurface();\n\t\t\t\tif (lpDDSBack) {\n\t\t\t\t\tif(dxw.dwFlags6 & FLIPEMULATION) while(lpDDSBack->Release());\n\t\t\t\t\tdxwss.PopSurface(lpDDSBack);\n\t\t\t\t\tlpDDSBack = NULL;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tlpDDSEmu_Back=NULL;\n\t\tlpDDSEmu_Prim=NULL;\n\n\t\tint BBCount=0; // or 1 ??\n\t\tif (ddsd.dwFlags & DDSD_BACKBUFFERCOUNT) BBCount=ddsd.dwBackBufferCount;\n\t\tif ((BBCount > 0) && (iBakBufferVersion < 4)){ \n\t\t\tlpDDSBack=NULL;\n\t\t\tOutTraceDW(\"CreateSurface: backbuffer cleared - BackBufferCount=%d\\n\", BBCount);\n\t\t}\n\n\t\tif (BBCount > MAXBACKBUFFERS){\n\t\t\tchar sMsg[81];\n\t\t\tsprintf_s(sMsg, 80, \"CreateSurface: BackBufferCount=%d\\n\", BBCount);\n\t\t\tOutTraceDW(sMsg);\n\t\t\tif (IsAssertEnabled) MessageBox(0, sMsg, \"CreateSurface\", MB_OK | MB_ICONEXCLAMATION);\n\t\t\t// recover ...\n\t\t\tBBCount = MAXBACKBUFFERS;\n\t\t}\n\n\t\t// build emulated primary surface, real primary and backbuffer surfaces\n\t\tCurFlags=ddsd.dwFlags;\n\t\tres=BuildPrimary(lpdd, pCreateSurface, lpddsd, dxversion, lplpdds, NULL);\n\t\tif(res) return res;\n\t\tlpDDSPrim = *lplpdds;\n\t\tdxwss.PushPrimarySurface(lpDDSPrim, dxversion, lpddsd->ddsCaps.dwCaps);\n\t\tRegisterPixelFormat(dxversion, lpDDSPrim);\n\n\t\tif (BBCount){\n\t\t\tDWORD dwCaps;\n\t\t\t// build emulated backbuffer surface\n\t\t\tres=AttachBackBuffer(lpdd, pCreateSurface, lpddsd, dxversion, &lpDDSBack, NULL);\n\t\t\tif(res) return res;\n\t\t\t// here we try to guess what sort of capabilities would expose a built-in backbuffer surface\n\t\t\tdwCaps = lpddsd->ddsCaps.dwCaps;\n\t\t\tdwCaps &= ~DDSCAPS_PRIMARYSURFACE;\n\t\t\tdwCaps |= (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY);\n\t\t\tdxwss.PushBackBufferSurface(lpDDSBack, dxversion, dwCaps);\n\t\t}\n\n\t\tif(IsTraceDDRAW){\n\t\t\tchar sInfo[256+1];\n\t\t\tsprintf(sInfo, \"CreateSurface: created DDSPrim=%x DDSBack=%x\", lpDDSPrim, lpDDSBack);\n\t\t\tif(dxw.IsEmulated) sprintf(sInfo, \"%s DDSEmu_Prim=%x\", sInfo, lpDDSEmu_Prim);\n\t\t\tif(dxw.dwFlags1 & EMULATESURFACE) sprintf(sInfo, \"%s DDSEmu_Back=%x\", sInfo, lpDDSEmu_Back);\n\t\t\tstrcat(sInfo, \"\\n\");\n\t\t\tOutTrace(sInfo);\n\t\t}\n \n\t\t// rebuild the clipper area\n\t\tif(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor();\n\n\t\t// v2.2.64: added extra ref needed to preserve ddraw session for later use. Is it a ddraw1 legacy?\n\t\t// seems to fix problems in \"Warhammer 40K Rites Of War\" that uses a ddraw session after reaching 0 refcount.\n\t\t// v2.2.84: avoid the extra referenced in non windowed mode since it causes the window shift reported by gsky916\n\t\t// for Wind Fantasy SP.\n\t\t// v2.3.59: same extra reference is needed by \"Wahammer Chaos Gate\" that uses ddraw interface release 2\n\t\t// v2.3.72: fixed previous fix: condition is <=2, not >=2 ! \n\t\t// Be aware that it may perhaps become <=3, if we get the same problem elsewhere\n\t\t// v2.3.96: deleted the if(Windowized) condition: AddRef is needed also in fullscreen mode.\n\t\tif(dxw.dwDDVersion<=2) lpdd->AddRef();\n\n\t\treturn DD_OK;\n\t}\n\n\t// a request for a separate (not complex) backbuffer to attach later on, maybe.\n\tif ((ddsd.dwFlags & DDSD_CAPS) && (ddsd.ddsCaps.dwCaps & DDSCAPS_BACKBUFFER)){\n\t\tif (lpDDSBack) {\n\t\t\tOutTraceDW(\"CreateSurface: returning current DDSBack=%x\\n\", lpDDSBack);\n\t\t\t*lplpdds = lpDDSBack;\n\t\t\treturn DD_OK;\n\t\t}\n\n\t\tres=BuildBackBuffer(lpdd, pCreateSurface, lpddsd, dxversion, lplpdds, NULL);\n\t\tif(res == DD_OK) dxwss.PushBackBufferSurface(*lplpdds, dxversion, lpddsd->ddsCaps.dwCaps);\n\t\treturn res;\n\t}\n\n\t// if nothing else, it's a generic/zbuffer surface\n\t// Note: should DxWnd trace a memory 3D surface that will be used as reference surface for D3D CreateDevice?\n\n\tres=BuildGeneric(lpdd, pCreateSurface, lpddsd, dxversion, lplpdds, pu);\n\tif(!res) {\n\t\tdxwss.PopSurface(*lplpdds);\n\t\tif(lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER) {\n\t\t\t// v2.03.82: save ZBUFFER capabilities for later fix in D3D CreateDevice\n\t\t\tOutTraceDW(\"CreateSurface: lpDDZBuffer=%x save ZBUFFER caps=%x(%s)\\n\", *lplpdds, lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps));\n\t\t\tlpDDZBuffer = *lplpdds;\n\t\t\t// save surface size expressed in bytes\n\t\t\textern int ZBufferSize;\n\t\t\tZBufferSize = lpddsd->dwWidth * lpddsd->dwHeight * (lpddsd->ddpfPixelFormat.dwZBufferBitDepth >> 3); \n\t\t\tdxwss.PushZBufferSurface(*lplpdds, dxversion, lpddsd->ddsCaps.dwCaps);\n\t\t\tOutTraceDW(\"CreateSurface: ZBufferSize=%d\\n\", ZBufferSize);\n\t\t}\n\t\telse {\n\t\t\tif(lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) {\n\t\t\tOutTraceDW(\"CreateSurface: lpDD3DRef=%x save 3DREF caps=%x(%s)\\n\", *lplpdds, lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps));\n\t\t\t\tdxwss.Push3DRefSurface(*lplpdds, dxversion, lpddsd->ddsCaps.dwCaps);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn res;\n}"
  },
  {
    "path": "dll/ddraw.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n#define INITGUID\n//#define FULLHEXDUMP\n\n#include <windows.h>\n#include <ddraw.h>\n#include \"dxwnd.h\"\n#include \"dxhook.h\"\n#include \"ddrawi.h\"\n#include \"dxwcore.hpp\"\n#include \"stdio.h\" \n#include \"hddraw.h\"\n#include \"dxhelper.h\"\n#include \"syslibs.h\"\n\n#define HANDLEFLIPPABLE\n\n#ifdef CHECKMETHODPOINTERS\nstatic void NullMethodPointer(char *s) \n{\n\tchar msg[80];\n\tsprintf(msg, \"NULL %s method\", s);\n\tMessageBox(0, msg, \"DxWnd\", MB_OK);\n}\n#define CHECKPTR(p, s) if(!p) NullMethodPointer(s)\n#else\n#define CHECKPTR(p, s)\n#endif\n\nextern BOOL IsChangeDisplaySettingsHotPatched;\nextern void TextureHandling(LPDIRECTDRAWSURFACE, int);\nextern void SetMinimalCaps(int, LPDDCAPS, LPDDCAPS);\nColorConversion_Type pColorConversion = NULL;\nextern HRESULT WINAPI extQueryInterfaceDX(int, QueryInterface_Type, void *, REFIID, LPVOID *);\n\nHDC hFlippedDC = NULL;\nBOOL bFlippedDC = FALSE;\nDWORD dwBackBufferCaps = 0;\nBOOL bVSyncDone;\n\n// DirectDraw API\nHRESULT WINAPI extDirectDrawCreate(GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *);\nHRESULT WINAPI extDirectDrawCreateEx(GUID FAR *, LPDIRECTDRAW FAR *, REFIID, IUnknown FAR *);\nHRESULT WINAPI extDirectDrawEnumerateA(LPDDENUMCALLBACKA, LPVOID);\nHRESULT WINAPI extDirectDrawEnumerateExA(LPDDENUMCALLBACKEXA, LPVOID, DWORD);\nHRESULT WINAPI extDirectDrawEnumerateW(LPDDENUMCALLBACKW, LPVOID);\nHRESULT WINAPI extDirectDrawEnumerateExW(LPDDENUMCALLBACKEXW, LPVOID, DWORD);\nHRESULT WINAPI extDirectDrawCreateClipper(DWORD, LPDIRECTDRAWCLIPPER *, IUnknown *);\n\n// DirectDraw\nHRESULT WINAPI extQueryInterfaceD1(void *, REFIID, LPVOID *);\nHRESULT WINAPI extQueryInterfaceD2(void *, REFIID, LPVOID *);\nHRESULT WINAPI extQueryInterfaceD3(void *, REFIID, LPVOID *);\nHRESULT WINAPI extQueryInterfaceD4(void *, REFIID, LPVOID *);\nHRESULT WINAPI extQueryInterfaceD7(void *, REFIID, LPVOID *);\nULONG WINAPI extReleaseD1(LPDIRECTDRAW);\nULONG WINAPI extReleaseD2(LPDIRECTDRAW);\nULONG WINAPI extReleaseD3(LPDIRECTDRAW);\nULONG WINAPI extReleaseD4(LPDIRECTDRAW);\nULONG WINAPI extReleaseD7(LPDIRECTDRAW);\n\n    /*** IDirectDraw methods ***/\nHRESULT WINAPI extCompact(LPDIRECTDRAW); // unimplemented method ???\nHRESULT WINAPI extCreateClipper1(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*);\nHRESULT WINAPI extCreateClipper2(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*);\nHRESULT WINAPI extCreateClipper3(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*);\nHRESULT WINAPI extCreateClipper4(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*);\nHRESULT WINAPI extCreateClipper7(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*);\nHRESULT WINAPI extCreatePalette1(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *);\nHRESULT WINAPI extCreatePalette2(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *);\nHRESULT WINAPI extCreatePalette3(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *);\nHRESULT WINAPI extCreatePalette4(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *);\nHRESULT WINAPI extCreatePalette7(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *);\nHRESULT WINAPI extCreateSurface1(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *);\nHRESULT WINAPI extCreateSurface2(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *);\nHRESULT WINAPI extCreateSurface3(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *);\nHRESULT WINAPI extCreateSurface4(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *);\nHRESULT WINAPI extCreateSurface7(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *);\nHRESULT WINAPI extDuplicateSurface1(LPDIRECTDRAW, LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR *);\nHRESULT WINAPI extDuplicateSurface2(LPDIRECTDRAW, LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR *);\nHRESULT WINAPI extDuplicateSurface3(LPDIRECTDRAW, LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR *);\nHRESULT WINAPI extDuplicateSurface4(LPDIRECTDRAW, LPDIRECTDRAWSURFACE4, LPDIRECTDRAWSURFACE4 FAR *);\nHRESULT WINAPI extDuplicateSurface7(LPDIRECTDRAW, LPDIRECTDRAWSURFACE7, LPDIRECTDRAWSURFACE7 FAR *);\nHRESULT WINAPI extFlipToGDISurface1(LPDIRECTDRAW);\nHRESULT WINAPI extFlipToGDISurface2(LPDIRECTDRAW);\nHRESULT WINAPI extFlipToGDISurface3(LPDIRECTDRAW);\nHRESULT WINAPI extFlipToGDISurface4(LPDIRECTDRAW);\nHRESULT WINAPI extFlipToGDISurface7(LPDIRECTDRAW);\nHRESULT WINAPI extGetDisplayMode1(LPDIRECTDRAW, LPDDSURFACEDESC);\nHRESULT WINAPI extGetDisplayMode2(LPDIRECTDRAW, LPDDSURFACEDESC);\nHRESULT WINAPI extGetDisplayMode3(LPDIRECTDRAW, LPDDSURFACEDESC);\nHRESULT WINAPI extGetDisplayMode4(LPDIRECTDRAW, LPDDSURFACEDESC2);\nHRESULT WINAPI extGetDisplayMode7(LPDIRECTDRAW, LPDDSURFACEDESC2);\nHRESULT WINAPI extGetGDISurface1(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);\nHRESULT WINAPI extGetGDISurface2(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);\nHRESULT WINAPI extGetGDISurface3(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);\nHRESULT WINAPI extGetGDISurface4(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);\nHRESULT WINAPI extGetGDISurface7(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);\nHRESULT WINAPI extEnumDisplayModes1(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK);\nHRESULT WINAPI extEnumDisplayModes2(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK);\nHRESULT WINAPI extEnumDisplayModes3(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK);\nHRESULT WINAPI extEnumDisplayModes4(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2);\nHRESULT WINAPI extEnumDisplayModes7(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2);\nHRESULT WINAPI extInitialize1(LPDIRECTDRAW, FAR GUID *);\nHRESULT WINAPI extInitialize2(LPDIRECTDRAW, FAR GUID *);\nHRESULT WINAPI extInitialize3(LPDIRECTDRAW, FAR GUID *);\nHRESULT WINAPI extInitialize4(LPDIRECTDRAW, FAR GUID *);\nHRESULT WINAPI extInitialize7(LPDIRECTDRAW, FAR GUID *);\nHRESULT WINAPI extRestoreDisplayMode1(LPDIRECTDRAW);\nHRESULT WINAPI extRestoreDisplayMode2(LPDIRECTDRAW);\nHRESULT WINAPI extRestoreDisplayMode3(LPDIRECTDRAW);\nHRESULT WINAPI extRestoreDisplayMode4(LPDIRECTDRAW);\nHRESULT WINAPI extRestoreDisplayMode7(LPDIRECTDRAW);\nHRESULT WINAPI extSetCooperativeLevel1(LPDIRECTDRAW, HWND, DWORD);\nHRESULT WINAPI extSetCooperativeLevel2(LPDIRECTDRAW, HWND, DWORD);\nHRESULT WINAPI extSetCooperativeLevel3(LPDIRECTDRAW, HWND, DWORD);\nHRESULT WINAPI extSetCooperativeLevel4(LPDIRECTDRAW, HWND, DWORD);\nHRESULT WINAPI extSetCooperativeLevel7(LPDIRECTDRAW, HWND, DWORD);\nHRESULT WINAPI extSetDisplayMode1(LPDIRECTDRAW, DWORD, DWORD, DWORD);\nHRESULT WINAPI extSetDisplayMode2(LPDIRECTDRAW, DWORD, DWORD, DWORD, DWORD, DWORD);\nHRESULT WINAPI extSetDisplayMode3(LPDIRECTDRAW, DWORD, DWORD, DWORD, DWORD, DWORD);\nHRESULT WINAPI extSetDisplayMode4(LPDIRECTDRAW, DWORD, DWORD, DWORD, DWORD, DWORD);\nHRESULT WINAPI extSetDisplayMode7(LPDIRECTDRAW, DWORD, DWORD, DWORD, DWORD, DWORD);\nHRESULT WINAPI extWaitForVerticalBlank1(LPDIRECTDRAW, DWORD, HANDLE);\nHRESULT WINAPI extWaitForVerticalBlank2(LPDIRECTDRAW, DWORD, HANDLE);\nHRESULT WINAPI extWaitForVerticalBlank3(LPDIRECTDRAW, DWORD, HANDLE);\nHRESULT WINAPI extWaitForVerticalBlank4(LPDIRECTDRAW, DWORD, HANDLE);\nHRESULT WINAPI extWaitForVerticalBlank7(LPDIRECTDRAW, DWORD, HANDLE);\n    /*** Added in the V2 Interface ***/\nHRESULT WINAPI extGetAvailableVidMem2(LPDIRECTDRAW, LPDDSCAPS, LPDWORD, LPDWORD);\nHRESULT WINAPI extGetAvailableVidMem3(LPDIRECTDRAW, LPDDSCAPS, LPDWORD, LPDWORD);\nHRESULT WINAPI extGetAvailableVidMem4(LPDIRECTDRAW, LPDDSCAPS2, LPDWORD, LPDWORD);\nHRESULT WINAPI extGetAvailableVidMem7(LPDIRECTDRAW, LPDDSCAPS2, LPDWORD, LPDWORD);\n    /*** Added in the V4 Interface ***/\nHRESULT WINAPI extTestCooperativeLevel4(LPDIRECTDRAW);\nHRESULT WINAPI extTestCooperativeLevel7(LPDIRECTDRAW);\n//    STDMETHOD(StartModeTest)(THIS_ LPSIZE, DWORD, DWORD ) PURE;\n//    STDMETHOD(EvaluateMode)(THIS_ DWORD, DWORD * ) PURE;\nHRESULT WINAPI extGetCaps1D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS);\nHRESULT WINAPI extGetCaps2D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS);\nHRESULT WINAPI extGetCaps3D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS);\nHRESULT WINAPI extGetCaps4D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS);\nHRESULT WINAPI extGetCaps7D(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS);\nHRESULT WINAPI extGetScanLine1(LPDIRECTDRAW, LPDWORD);\nHRESULT WINAPI extGetScanLine2(LPDIRECTDRAW, LPDWORD);\nHRESULT WINAPI extGetScanLine3(LPDIRECTDRAW, LPDWORD);\nHRESULT WINAPI extGetScanLine4(LPDIRECTDRAW, LPDWORD);\nHRESULT WINAPI extGetScanLine7(LPDIRECTDRAW, LPDWORD);\n    /*** Added in the V7 Interface ??? ***/\nHRESULT WINAPI extStartModeTest(LPDIRECTDRAW, LPSIZE, DWORD, DWORD);\nHRESULT WINAPI extEvaluateMode(LPDIRECTDRAW, DWORD, DWORD *);\n\n// DirectDrawSurface\nHRESULT WINAPI extQueryInterfaceS1(void *, REFIID, LPVOID *);\nHRESULT WINAPI extQueryInterfaceS2(void *, REFIID, LPVOID *);\nHRESULT WINAPI extQueryInterfaceS3(void *, REFIID, LPVOID *);\nHRESULT WINAPI extQueryInterfaceS4(void *, REFIID, LPVOID *);\nHRESULT WINAPI extQueryInterfaceS7(void *, REFIID, LPVOID *);\nHRESULT WINAPI extReleaseS1(LPDIRECTDRAWSURFACE);\nHRESULT WINAPI extReleaseS2(LPDIRECTDRAWSURFACE);\nHRESULT WINAPI extReleaseS3(LPDIRECTDRAWSURFACE);\nHRESULT WINAPI extReleaseS4(LPDIRECTDRAWSURFACE);\nHRESULT WINAPI extReleaseS7(LPDIRECTDRAWSURFACE);\n\n    /*** IDirectDrawSurface methods ***/\nHRESULT WINAPI extAddAttachedSurface1(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE);\nHRESULT WINAPI extAddAttachedSurface2(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE);\nHRESULT WINAPI extAddAttachedSurface3(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE);\nHRESULT WINAPI extAddAttachedSurface4(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE);\nHRESULT WINAPI extAddAttachedSurface7(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE);\nHRESULT WINAPI extBlt1(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX);\nHRESULT WINAPI extBlt2(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX);\nHRESULT WINAPI extBlt3(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX);\nHRESULT WINAPI extBlt4(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX);\nHRESULT WINAPI extBlt7(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX);\nHRESULT WINAPI extBltFast1(LPDIRECTDRAWSURFACE, DWORD, DWORD, LPDIRECTDRAWSURFACE, LPRECT, DWORD);\nHRESULT WINAPI extBltFast2(LPDIRECTDRAWSURFACE, DWORD, DWORD, LPDIRECTDRAWSURFACE, LPRECT, DWORD);\nHRESULT WINAPI extBltFast3(LPDIRECTDRAWSURFACE, DWORD, DWORD, LPDIRECTDRAWSURFACE, LPRECT, DWORD);\nHRESULT WINAPI extBltFast4(LPDIRECTDRAWSURFACE, DWORD, DWORD, LPDIRECTDRAWSURFACE, LPRECT, DWORD);\nHRESULT WINAPI extBltFast7(LPDIRECTDRAWSURFACE, DWORD, DWORD, LPDIRECTDRAWSURFACE, LPRECT, DWORD);\nHRESULT WINAPI extDeleteAttachedSurface1(LPDIRECTDRAWSURFACE,  DWORD, LPDIRECTDRAWSURFACE);\nHRESULT WINAPI extDeleteAttachedSurface2(LPDIRECTDRAWSURFACE,  DWORD, LPDIRECTDRAWSURFACE);\nHRESULT WINAPI extDeleteAttachedSurface3(LPDIRECTDRAWSURFACE,  DWORD, LPDIRECTDRAWSURFACE);\nHRESULT WINAPI extDeleteAttachedSurface4(LPDIRECTDRAWSURFACE,  DWORD, LPDIRECTDRAWSURFACE);\nHRESULT WINAPI extDeleteAttachedSurface7(LPDIRECTDRAWSURFACE,  DWORD, LPDIRECTDRAWSURFACE);\nHRESULT WINAPI extEnumAttachedSurfaces1(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK);\nHRESULT WINAPI extEnumAttachedSurfaces2(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK);\nHRESULT WINAPI extEnumAttachedSurfaces3(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK);\nHRESULT WINAPI extEnumAttachedSurfaces4(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK);\nHRESULT WINAPI extEnumAttachedSurfaces7(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK);\nHRESULT WINAPI extFlip1(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD);\nHRESULT WINAPI extFlip2(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD);\nHRESULT WINAPI extFlip3(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD);\nHRESULT WINAPI extFlip4(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD);\nHRESULT WINAPI extFlip7(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD);\nHRESULT WINAPI extGetAttachedSurface1(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *);\nHRESULT WINAPI extGetAttachedSurface2(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *);\nHRESULT WINAPI extGetAttachedSurface3(LPDIRECTDRAWSURFACE, LPDDSCAPS, LPDIRECTDRAWSURFACE *);\nHRESULT WINAPI extGetAttachedSurface4(LPDIRECTDRAWSURFACE, LPDDSCAPS2, LPDIRECTDRAWSURFACE *);\nHRESULT WINAPI extGetAttachedSurface7(LPDIRECTDRAWSURFACE, LPDDSCAPS2, LPDIRECTDRAWSURFACE *);\nHRESULT WINAPI extGetCaps1S(LPDIRECTDRAWSURFACE, LPDDSCAPS);\nHRESULT WINAPI extGetCaps2S(LPDIRECTDRAWSURFACE, LPDDSCAPS);\nHRESULT WINAPI extGetCaps3S(LPDIRECTDRAWSURFACE, LPDDSCAPS);\nHRESULT WINAPI extGetCaps4S(LPDIRECTDRAWSURFACE, LPDDSCAPS2);\nHRESULT WINAPI extGetCaps7S(LPDIRECTDRAWSURFACE, LPDDSCAPS2);\nHRESULT WINAPI extGetColorKey1(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY);\nHRESULT WINAPI extGetColorKey2(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY);\nHRESULT WINAPI extGetColorKey3(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY);\nHRESULT WINAPI extGetColorKey4(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY);\nHRESULT WINAPI extGetColorKey7(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY);\nHRESULT WINAPI extGetDC1(LPDIRECTDRAWSURFACE, HDC FAR *);\nHRESULT WINAPI extGetDC2(LPDIRECTDRAWSURFACE, HDC FAR *);\nHRESULT WINAPI extGetDC3(LPDIRECTDRAWSURFACE, HDC FAR *);\nHRESULT WINAPI extGetDC4(LPDIRECTDRAWSURFACE, HDC FAR *);\nHRESULT WINAPI extGetDC7(LPDIRECTDRAWSURFACE, HDC FAR *);\nHRESULT WINAPI extGetPalette1(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE *);\nHRESULT WINAPI extGetPalette2(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE *);\nHRESULT WINAPI extGetPalette3(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE *);\nHRESULT WINAPI extGetPalette4(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE *);\nHRESULT WINAPI extGetPalette7(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE *);\nHRESULT WINAPI extGetPixelFormat1(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT);\nHRESULT WINAPI extGetPixelFormat2(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT);\nHRESULT WINAPI extGetPixelFormat3(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT);\nHRESULT WINAPI extGetPixelFormat4(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT);\nHRESULT WINAPI extGetPixelFormat7(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT);\nHRESULT WINAPI extGetSurfaceDesc1(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd);\nHRESULT WINAPI extGetSurfaceDesc2(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd);\nHRESULT WINAPI extGetSurfaceDesc3(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd);\nHRESULT WINAPI extGetSurfaceDesc4(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 lpddsd);\nHRESULT WINAPI extGetSurfaceDesc7(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 lpddsd);\nHRESULT WINAPI extLock1(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE);\nHRESULT WINAPI extLock2(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE);\nHRESULT WINAPI extLock3(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE);\nHRESULT WINAPI extLock4(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE);\nHRESULT WINAPI extLock7(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE);\nHRESULT WINAPI extLockDir1(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE);\nHRESULT WINAPI extLockDir2(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE);\nHRESULT WINAPI extLockDir3(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE);\nHRESULT WINAPI extLockDir4(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE);\nHRESULT WINAPI extLockDir7(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE);\nHRESULT WINAPI extReleaseDC1(LPDIRECTDRAWSURFACE, HDC);\nHRESULT WINAPI extReleaseDC2(LPDIRECTDRAWSURFACE, HDC);\nHRESULT WINAPI extReleaseDC3(LPDIRECTDRAWSURFACE, HDC);\nHRESULT WINAPI extReleaseDC4(LPDIRECTDRAWSURFACE, HDC);\nHRESULT WINAPI extReleaseDC7(LPDIRECTDRAWSURFACE, HDC);\nHRESULT WINAPI extSetClipper1(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER);\nHRESULT WINAPI extSetClipper2(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER);\nHRESULT WINAPI extSetClipper3(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER);\nHRESULT WINAPI extSetClipper4(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER);\nHRESULT WINAPI extSetClipper7(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER);\nHRESULT WINAPI extSetColorKey1(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY);\nHRESULT WINAPI extSetColorKey2(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY);\nHRESULT WINAPI extSetColorKey3(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY);\nHRESULT WINAPI extSetColorKey4(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY);\nHRESULT WINAPI extSetColorKey7(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY);\nHRESULT WINAPI extSetPalette1(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE);\nHRESULT WINAPI extSetPalette2(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE);\nHRESULT WINAPI extSetPalette3(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE);\nHRESULT WINAPI extSetPalette4(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE);\nHRESULT WINAPI extSetPalette7(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE);\nHRESULT WINAPI extUnlock1(LPDIRECTDRAWSURFACE, LPVOID);\nHRESULT WINAPI extUnlock2(LPDIRECTDRAWSURFACE, LPVOID);\nHRESULT WINAPI extUnlock3(LPDIRECTDRAWSURFACE, LPVOID);\nHRESULT WINAPI extUnlock4(LPDIRECTDRAWSURFACE, LPRECT);\nHRESULT WINAPI extUnlock7(LPDIRECTDRAWSURFACE, LPRECT);\nHRESULT WINAPI extUnlockDir1(LPDIRECTDRAWSURFACE, LPVOID);\nHRESULT WINAPI extUnlockDir2(LPDIRECTDRAWSURFACE, LPVOID);\nHRESULT WINAPI extUnlockDir3(LPDIRECTDRAWSURFACE, LPVOID);\nHRESULT WINAPI extUnlockDir4(LPDIRECTDRAWSURFACE, LPRECT);\nHRESULT WINAPI extUnlockDir7(LPDIRECTDRAWSURFACE, LPRECT);\nHRESULT WINAPI extEnumOverlayZOrders1(LPDIRECTDRAWSURFACE, DWORD, LPVOID, LPDDENUMSURFACESCALLBACK);\nHRESULT WINAPI extEnumOverlayZOrders2(LPDIRECTDRAWSURFACE, DWORD, LPVOID, LPDDENUMSURFACESCALLBACK);\nHRESULT WINAPI extEnumOverlayZOrders3(LPDIRECTDRAWSURFACE, DWORD, LPVOID, LPDDENUMSURFACESCALLBACK);\nHRESULT WINAPI extEnumOverlayZOrders4(LPDIRECTDRAWSURFACE, DWORD, LPVOID, LPDDENUMSURFACESCALLBACK);\nHRESULT WINAPI extEnumOverlayZOrders7(LPDIRECTDRAWSURFACE, DWORD, LPVOID, LPDDENUMSURFACESCALLBACK);\nHRESULT WINAPI extAddOverlayDirtyRect1(LPDIRECTDRAWSURFACE, LPRECT);\nHRESULT WINAPI extAddOverlayDirtyRect2(LPDIRECTDRAWSURFACE, LPRECT);\nHRESULT WINAPI extAddOverlayDirtyRect3(LPDIRECTDRAWSURFACE, LPRECT);\nHRESULT WINAPI extAddOverlayDirtyRect4(LPDIRECTDRAWSURFACE, LPRECT);\nHRESULT WINAPI extAddOverlayDirtyRect7(LPDIRECTDRAWSURFACE, LPRECT);\nHRESULT WINAPI extGetOverlayPosition1(LPDIRECTDRAWSURFACE, LPLONG, LPLONG);\nHRESULT WINAPI extGetOverlayPosition2(LPDIRECTDRAWSURFACE, LPLONG, LPLONG);\nHRESULT WINAPI extGetOverlayPosition3(LPDIRECTDRAWSURFACE, LPLONG, LPLONG);\nHRESULT WINAPI extGetOverlayPosition4(LPDIRECTDRAWSURFACE, LPLONG, LPLONG);\nHRESULT WINAPI extGetOverlayPosition7(LPDIRECTDRAWSURFACE, LPLONG, LPLONG);\nHRESULT WINAPI extSetOverlayPosition1(LPDIRECTDRAWSURFACE, LONG, LONG);\nHRESULT WINAPI extSetOverlayPosition2(LPDIRECTDRAWSURFACE, LONG, LONG);\nHRESULT WINAPI extSetOverlayPosition3(LPDIRECTDRAWSURFACE, LONG, LONG);\nHRESULT WINAPI extSetOverlayPosition4(LPDIRECTDRAWSURFACE, LONG, LONG);\nHRESULT WINAPI extSetOverlayPosition7(LPDIRECTDRAWSURFACE, LONG, LONG);\n\nextern HRESULT WINAPI extCreateSurface(int, CreateSurface_Type, LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *);\nHRESULT WINAPI extSetSurfaceDesc3(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, DWORD);\nHRESULT WINAPI extSetSurfaceDesc4(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, DWORD);\nHRESULT WINAPI extSetSurfaceDesc7(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, DWORD);\n\n// DirectDrawClipper\nHRESULT WINAPI extReleaseC(LPDIRECTDRAWCLIPPER);\nHRESULT WINAPI extGetClipList(LPDIRECTDRAWCLIPPER, LPRECT, LPRGNDATA, LPDWORD);\nHRESULT WINAPI extSetClipList(LPDIRECTDRAWCLIPPER, LPRGNDATA, DWORD);\nHRESULT WINAPI extSetHWnd(LPDIRECTDRAWCLIPPER, DWORD, HWND);\n\n// DirectDrawPalette\nHRESULT WINAPI extReleaseP(LPDIRECTDRAWPALETTE);\n//    STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD, LPPALETTEENTRY) PURE;\nHRESULT WINAPI extSetEntries(LPDIRECTDRAWPALETTE, DWORD, DWORD, DWORD, LPPALETTEENTRY);\n\n// GammaRamp\nHRESULT WINAPI extDDSetGammaRamp(LPDIRECTDRAWSURFACE, DWORD, LPDDGAMMARAMP);\nHRESULT WINAPI extDDGetGammaRamp(LPDIRECTDRAWSURFACE, DWORD, LPDDGAMMARAMP);\n\n\nHDC WINAPI extGDIGetDC(HWND);\nHDC WINAPI extGDIGetWindowDC(HWND);\nint WINAPI extGDIReleaseDC(HWND, HDC);\n\n/* DirectDraw APIs */\nDirectDrawCreate_Type pDirectDrawCreate = NULL;\nDirectDrawCreateEx_Type pDirectDrawCreateEx = NULL;\nDirectDrawEnumerateA_Type pDirectDrawEnumerateA = NULL;\nDirectDrawEnumerateW_Type pDirectDrawEnumerateW = NULL;\nDirectDrawEnumerateExA_Type pDirectDrawEnumerateExA = NULL;\nDirectDrawEnumerateExW_Type pDirectDrawEnumerateExW = NULL;\nDirectDrawCreateClipper_Type pDirectDrawCreateClipper = NULL;\nHandleDDThreadLock_Type pAcquireDDThreadLock = NULL;\nHandleDDThreadLock_Type pReleaseDDThreadLock = NULL;\nStartModeTest_Type pStartModeTest = NULL;\nEvaluateMode_Type pEvaluateMode = NULL; \n\n/* DirectDraw hook pointers */\nQueryInterface_Type pQueryInterfaceD1, pQueryInterfaceD2, pQueryInterfaceD3, pQueryInterfaceD4, pQueryInterfaceD7;\nAddRefD_Type pAddRefD;\nReleaseD_Type pReleaseD1, pReleaseD2, pReleaseD3, pReleaseD4, pReleaseD7;\nCompact_Type pCompact;\nCreateClipper_Type pCreateClipper1, pCreateClipper2, pCreateClipper3, pCreateClipper4, pCreateClipper7;\nCreatePalette_Type pCreatePalette1, pCreatePalette2, pCreatePalette3, pCreatePalette4, pCreatePalette7;\nCreateSurface1_Type pCreateSurface1, pCreateSurface2, pCreateSurface3, pCreateSurface4, pCreateSurface7;\nDuplicateSurface_Type pDuplicateSurface1, pDuplicateSurface2, pDuplicateSurface3;\nDuplicateSurface4_Type pDuplicateSurface4;\nDuplicateSurface7_Type pDuplicateSurface7;\nEnumDisplayModes1_Type pEnumDisplayModes1, pEnumDisplayModes2, pEnumDisplayModes3;\nEnumDisplayModes4_Type pEnumDisplayModes4, pEnumDisplayModes7;\nEnumSurfaces1_Type pEnumSurfaces1;\nEnumSurfaces4_Type pEnumSurfaces4;\nFlipToGDISurface_Type pFlipToGDISurface1, pFlipToGDISurface2, pFlipToGDISurface3, pFlipToGDISurface4, pFlipToGDISurface7;\nGetCapsD_Type pGetCaps1D, pGetCaps2D, pGetCaps3D, pGetCaps4D, pGetCaps7D;\nGetDisplayMode_Type pGetDisplayMode1, pGetDisplayMode2, pGetDisplayMode3;\nGetDisplayMode4_Type pGetDisplayMode4, pGetDisplayMode7;\nGetFourCCCodes_Type pGetFourCCCodes;\nGetGDISurface_Type pGetGDISurface1, pGetGDISurface2, pGetGDISurface3, pGetGDISurface4, pGetGDISurface7;\nGetMonitorFrequency_Type pGetMonitorFrequency;\nGetScanLine_Type pGetScanLine;\nGetVerticalBlankStatus_Type pGetVerticalBlankStatus;\nInitialize_Type pInitialize1, pInitialize2, pInitialize3, pInitialize4, pInitialize7;\nRestoreDisplayMode_Type pRestoreDisplayMode;\nSetCooperativeLevel_Type pSetCooperativeLevel1, pSetCooperativeLevel2, pSetCooperativeLevel3, pSetCooperativeLevel4, pSetCooperativeLevel7;\nSetDisplayMode1_Type pSetDisplayMode1;\nSetDisplayMode2_Type pSetDisplayMode2, pSetDisplayMode3, pSetDisplayMode4, pSetDisplayMode7;\nWaitForVerticalBlank_Type pWaitForVerticalBlank1, pWaitForVerticalBlank2, pWaitForVerticalBlank3, pWaitForVerticalBlank4, pWaitForVerticalBlank7;\nGetSurfaceFromDC_Type pGetSurfaceFromDC;\nGetAvailableVidMem_Type pGetAvailableVidMem2, pGetAvailableVidMem3; \nGetAvailableVidMem4_Type pGetAvailableVidMem4, pGetAvailableVidMem7;\nRestoreAllSurfaces_Type pRestoreAllSurfaces;\nTestCooperativeLevel_Type pTestCooperativeLevel4, pTestCooperativeLevel7;\nGetDeviceIdentifier_Type pGetDeviceIdentifier;\nRestoreDisplayMode_Type pRestoreDisplayMode1, pRestoreDisplayMode2, pRestoreDisplayMode3, pRestoreDisplayMode4, pRestoreDisplayMode7;\nGetScanLine_Type pGetScanLine1, pGetScanLine2, pGetScanLine3, pGetScanLine4, pGetScanLine7;\n\n/* DirectDrawSurface hook pointers */\nQueryInterface_Type pQueryInterfaceS1, pQueryInterfaceS2, pQueryInterfaceS3, pQueryInterfaceS4, pQueryInterfaceS7;\nReleaseS_Type pReleaseS1, pReleaseS2, pReleaseS3, pReleaseS4, pReleaseS7;\nAddAttachedSurface_Type pAddAttachedSurface1, pAddAttachedSurface2, pAddAttachedSurface3, pAddAttachedSurface4, pAddAttachedSurface7;\nAddOverlayDirtyRect_Type pAddOverlayDirtyRect;\nBlt_Type pBlt1, pBlt2, pBlt3, pBlt4, pBlt7;\n//BltBatch_Type pBltBatch;\nBltFast_Type pBltFast1, pBltFast2, pBltFast3, pBltFast4, pBltFast7;\nDeleteAttachedSurface_Type pDeleteAttachedSurface1, pDeleteAttachedSurface2, pDeleteAttachedSurface3, pDeleteAttachedSurface4, pDeleteAttachedSurface7;\nEnumAttachedSurfaces_Type pEnumAttachedSurfaces1, pEnumAttachedSurfaces2, pEnumAttachedSurfaces3, pEnumAttachedSurfaces4, pEnumAttachedSurfaces7;\nEnumOverlayZOrders_Type pEnumOverlayZOrders;\nFlip_Type pFlip1, pFlip2, pFlip3, pFlip4, pFlip7;\nGetAttachedSurface_Type pGetAttachedSurface1, pGetAttachedSurface2, pGetAttachedSurface3, pGetAttachedSurface4, pGetAttachedSurface7;\nGetBltStatus_Type pGetBltStatus;\nGetCapsS_Type pGetCaps1S, pGetCaps2S, pGetCaps3S, pGetCaps4S, pGetCaps7S;\nGetClipper_Type pGetClipper;\nGetColorKey_Type pGetColorKey1, pGetColorKey2, pGetColorKey3, pGetColorKey4, pGetColorKey7;\nGetDC_Type pGetDC1, pGetDC2, pGetDC3, pGetDC4, pGetDC7;\nGetFlipStatus_Type pGetFlipStatus;\nGetOverlayPosition_Type pGetOverlayPosition1, pGetOverlayPosition2, pGetOverlayPosition3, pGetOverlayPosition4, pGetOverlayPosition7;\nSetOverlayPosition_Type pSetOverlayPosition1, pSetOverlayPosition2, pSetOverlayPosition3, pSetOverlayPosition4, pSetOverlayPosition7;\nGetPalette_Type pGetPalette1, pGetPalette2, pGetPalette3, pGetPalette4, pGetPalette7;\nGetPixelFormat_Type pGetPixelFormat1, pGetPixelFormat2, pGetPixelFormat3, pGetPixelFormat4, pGetPixelFormat7;\nGetSurfaceDesc_Type pGetSurfaceDesc1, pGetSurfaceDesc2, pGetSurfaceDesc3;\nGetSurfaceDesc2_Type pGetSurfaceDesc4, pGetSurfaceDesc7;\nLock_Type pLock1, pLock2, pLock3, pLock4, pLock7;\nEnumOverlayZOrders_Type pEnumOverlayZOrders1, pEnumOverlayZOrders2, pEnumOverlayZOrders3, pEnumOverlayZOrders4, pEnumOverlayZOrders7;\nAddOverlayDirtyRect_Type pAddOverlayDirtyRect1, pAddOverlayDirtyRect2, pAddOverlayDirtyRect3, pAddOverlayDirtyRect4, pAddOverlayDirtyRect7;\n\n//Initialize\nIsLost_Type pIsLost;\nReleaseDC_Type pReleaseDC1, pReleaseDC2, pReleaseDC3, pReleaseDC4, pReleaseDC7;\nRestore_Type pRestore;\nSetClipper_Type pSetClipper1, pSetClipper2, pSetClipper3, pSetClipper4, pSetClipper7;\nSetColorKey_Type pSetColorKey1, pSetColorKey2, pSetColorKey3, pSetColorKey4, pSetColorKey7;\nSetOverlayPosition_Type pSetOverlayPosition;\nSetPalette_Type pSetPalette1, pSetPalette2, pSetPalette3, pSetPalette4, pSetPalette7;\nUnlock1_Type pUnlock1, pUnlock2, pUnlock3;\nUnlock4_Type pUnlock4, pUnlock7;\nUpdateOverlay_Type pUpdateOverlay;\nUpdateOverlayDisplay_Type pUpdateOverlayDisplay;\nUpdateOverlayZOrder_Type pUpdateOverlayZOrder;\nSetSurfaceDesc_Type pSetSurfaceDesc3, pSetSurfaceDesc4, pSetSurfaceDesc7;\n\n/* DirectDrawClipper hook pointers */\nQueryInterface_Type pQueryInterfaceC;\nAddRefC_Type pAddRefC;\nReleaseC_Type pReleaseC;\nGetClipList_Type pGetClipList;\nSetClipList_Type pSetClipList;\nGetHWnd_Type pGetHWnd;\nInitializeC_Type pInitializeC;\nIsClipListChanged_Type pIsClipListChanged;\nSetHWnd_Type pSetHWnd;\n\n/* DirectDrawPalette hook pointers */\nQueryInterfaceP_Type pQueryInterfaceP;\nAddRefP_Type pAddRefP;\nReleaseP_Type pReleaseP;\n    /*** IDirectDrawPalette methods ***/\nGetCapsP_Type pGetCapsP;\nGetEntries_Type pGetEntries;\n//    STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD, LPPALETTEENTRY) PURE;\nSetEntries_Type pSetEntries;\n\n// GammaRamp\nGammaRamp_Type pDDGetGammaRamp;\nGammaRamp_Type pDDSetGammaRamp;\n\n// ddraw global variables, constants & so on\n\nextern PALETTEENTRY DefaultSystemPalette[256];\nLPDIRECTDRAWSURFACE lpDDSEmu_Prim=NULL;\nLPDIRECTDRAWSURFACE lpDDSEmu_Back=NULL;\nLPDIRECTDRAWSURFACE lpDDZBuffer=NULL; // BEWARE! Likely, this global is useless ....\nint ZBufferSize; \n// v2.1.87: lpPrimaryDD is the DIRECTDRAW object to which the primary surface and all \n// the service objects (emulated backbuffer, emulater primary, ....) are attached.\nLPDIRECTDRAW lpPrimaryDD=NULL;\nint iBakBufferVersion;\nint iDirectDrawVersion;\nLPDIRECTDRAWPALETTE lpDDP=NULL;\nLPDIRECTDRAWCLIPPER lpddC=NULL;\nint iDDPExtraRefCounter=0;\n// v2.02.37: globals to store requested main surface capabilities \nDDSURFACEDESC2 DDSD_Prim;\nDWORD PaletteEntries[256];\nDWORD *Palette16BPP = NULL;\nvoid *EmuScreenBuffer = NULL; // to implement pitch bug fix\nDWORD rPitch = 0;\nLPVOID rSurface = NULL;\nvoid SetPixFmt(LPDDSURFACEDESC2);\nvoid GetPixFmt(LPDDSURFACEDESC2);\n\nstatic HookEntryEx_Type ddHooks[]={\n\t{HOOK_HOT_CANDIDATE, 0x08, \"DirectDrawCreate\", (FARPROC)NULL, (FARPROC *)&pDirectDrawCreate, (FARPROC)extDirectDrawCreate},\n\t{HOOK_HOT_CANDIDATE, 0x0A, \"DirectDrawCreateEx\", (FARPROC)NULL, (FARPROC *)&pDirectDrawCreateEx, (FARPROC)extDirectDrawCreateEx},\n\t{HOOK_HOT_CANDIDATE, 0x0B, \"DirectDrawEnumerateA\", (FARPROC)NULL, (FARPROC *)&pDirectDrawEnumerateA, (FARPROC)extDirectDrawEnumerateA},\n\t{HOOK_HOT_CANDIDATE, 0x0C, \"DirectDrawEnumerateExA\", (FARPROC)NULL, (FARPROC *)&pDirectDrawEnumerateExA, (FARPROC)extDirectDrawEnumerateExA},\n\t{HOOK_HOT_CANDIDATE, 0x09, \"DirectDrawCreateClipper\", (FARPROC)NULL, (FARPROC *)&pDirectDrawCreateClipper, (FARPROC)extDirectDrawCreateClipper},\n\t{HOOK_HOT_CANDIDATE, 0x01, \"AcquireDDThreadLock\", (FARPROC)NULL, (FARPROC *)&pAcquireDDThreadLock, (FARPROC)NULL},\n\t{HOOK_HOT_CANDIDATE, 0x15, \"ReleaseDDThreadLock\", (FARPROC)NULL, (FARPROC *)&pReleaseDDThreadLock, (FARPROC)NULL},\n\t{HOOK_IAT_CANDIDATE, 0x0E, \"DirectDrawEnumerateW\", (FARPROC)NULL, (FARPROC *)&pDirectDrawEnumerateW, (FARPROC)extDirectDrawCreate},\n\t{HOOK_IAT_CANDIDATE, 0x0D, \"DirectDrawEnumerateExW\", (FARPROC)NULL, (FARPROC *)&pDirectDrawEnumerateExW, (FARPROC)extDirectDrawCreate},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nFARPROC Remap_ddraw_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tif (dxw.dwTargetDDVersion == HOOKDDRAWNONE) return NULL;\n\tif (addr=RemapLibraryEx(proc, hModule, ddHooks)) return addr;\n\treturn NULL;\n}\n\nextern HRESULT WINAPI sBlt(int, Blt_Type pBlt, char *, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX, BOOL);\n\n/* ------------------------------------------------------------------------------ */\n// auxiliary (static) functions\n/* ------------------------------------------------------------------------------ */\n\nDWORD gdwRefreshRate;\n#define MAXREFRESHDELAYCOUNT 20\nint iRefreshDelays[MAXREFRESHDELAYCOUNT]={16, 17};\nint iRefreshDelayCount=2;\n\nstatic HRESULT myGetDisplayMode(int dxversion, LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpdds)\n{\n\tHRESULT res;\n\tswitch(dxversion){\n\t\tdefault:\n\t\tcase 1: res=(*pGetDisplayMode1)(lpdd, lpdds); break;\n\t\tcase 2: res=(*pGetDisplayMode2)(lpdd, lpdds); break;\n\t\tcase 3: res=(*pGetDisplayMode3)(lpdd, lpdds); break;\n\t\tcase 4: res=(*pGetDisplayMode4)(lpdd, (LPDDSURFACEDESC2)lpdds); break;\n\t\tcase 7: res=(*pGetDisplayMode7)(lpdd, (LPDDSURFACEDESC2)lpdds); break;\n\t}\n\treturn res;\n}\n\nvoid SetVSyncDelays(int dxversion, LPDIRECTDRAW lpdd)\n{\n\tDDSURFACEDESC2 ddsdRefreshRate;\n\tHRESULT res;\n\n\tmemset(&ddsdRefreshRate, 0, sizeof(ddsdRefreshRate));\n\tddsdRefreshRate.dwSize = sizeof(DDSURFACEDESC);\n\tres=myGetDisplayMode(dxversion, lpdd, (LPDDSURFACEDESC)&ddsdRefreshRate);\n\tif(res) return;\n\tdxw.SetVSyncDelays(ddsdRefreshRate.dwRefreshRate);\n}\n\nstatic DWORD GetBltWaitFlags(DWORD dwBltFlags)\n{\n\tif(dxw.dwFlags8 & FORCEWAIT) {\n\t\tdwBltFlags |= DDBLT_WAIT;\n\t\tdwBltFlags &= ~DDBLT_DONOTWAIT;\n\t}\n\tif(dxw.dwFlags8 & FORCENOWAIT){\n\t\tdwBltFlags |= DDBLT_DONOTWAIT;\n\t\tdwBltFlags &= ~DDBLT_WAIT;\n\t}\n\treturn dwBltFlags;\n}\n\nstatic DWORD GetFlipWaitFlags(DWORD dwFlipFlags)\n{\n\tif(dxw.dwFlags8 & FORCEWAIT) {\n\t\tdwFlipFlags |= DDFLIP_WAIT;\n\t\tdwFlipFlags &= ~DDFLIP_DONOTWAIT;\n\t}\n\tif(dxw.dwFlags8 & FORCENOWAIT){\n\t\tdwFlipFlags |= DDFLIP_DONOTWAIT;\n\t\tdwFlipFlags &= ~DDFLIP_WAIT;\n\t}\n\treturn dwFlipFlags;\n}\n\nstatic DWORD SetPrimaryCaps(DWORD dwCaps)\n{\n\tdwCaps |= (DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_FRONTBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_VISIBLE); // primary surfaces must be this way\n\tdwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // primary surfaces can't be this way\n\treturn dwCaps;\n}\n\nstatic DWORD SetBackBufferCaps(DWORD dwCaps)\t\t\t\n{\n\t// v2.03.11: added DDSCAPS_FLIP capability to backbuffer surface: \"Ignition\" checks for it before Flip-ping to primary\n\tdwCaps |= (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_FLIP|DDSCAPS_LOCALVIDMEM); // you never know....\n\tdwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // backbuffer surfaces can't be this way\n\treturn dwCaps;\n}\n\nstatic DWORD SetZBufferCaps(DWORD dwCaps)\n{\n\t// beware! the ZBUFFER surface could have never been registered!\n\t// in this case better adapt to the primary/backbuffer ones, since a ZBUFFER with no good caps won't work.\n\n\t// input caps not null or simply DDSCAPS_ZBUFFER, supposedly good, don't touch ....\n\tif(dwCaps & ~DDSCAPS_ZBUFFER) return dwCaps;\n\n\t// ... else try to cope with primary surface caps\n\tdwCaps = dxwss.GetCaps(dxwss.GetPrimarySurface());\n\tdwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_BACKBUFFER|DDSCAPS_3DDEVICE|DDSCAPS_COMPLEX);\n\tdwCaps |= DDSCAPS_ZBUFFER;\n\treturn dwCaps;\n}\n\nstatic void Stopper(char *s, int line)\n{\n\tchar sMsg[81];\n\tsprintf(sMsg,\"break: \\\"%s\\\"\", s);\n\tMessageBox(0, sMsg, \"break\", MB_OK | MB_ICONEXCLAMATION);\n}\n\n//#define STOPPER_TEST // comment out to eliminate\n#ifdef STOPPER_TEST\n#define STOPPER(s) Stopper(s, __LINE__)\n#else\n#define STOPPER(s)\n#endif\n\nchar *DumpPixelFormat(LPDDSURFACEDESC2 lpddsd)\n{\n\treturn ExplainPixelFormat(&(lpddsd->ddpfPixelFormat));\n}\n\nCHAR *LogSurfaceAttributes(LPDDSURFACEDESC2 lpddsd, char *label, int line)\n{\n\tstatic char sInfo[1024];\n\tsprintf(sInfo, \"SurfaceDesc: %s Flags=%x(%s)\",\n\t\tlabel, \n\t\tlpddsd->dwFlags, ExplainFlags(lpddsd->dwFlags));\n\tif (lpddsd->dwFlags & DDSD_BACKBUFFERCOUNT) sprintf(sInfo, \"%s BackBufferCount=%d\", sInfo, lpddsd->dwBackBufferCount);\n\tif (lpddsd->dwFlags & DDSD_WIDTH) sprintf(sInfo, \"%s Width=%d\", sInfo, lpddsd->dwWidth);\n\tif (lpddsd->dwFlags & DDSD_HEIGHT) sprintf(sInfo, \"%s Height=%d\", sInfo, lpddsd->dwHeight);\n\tif (lpddsd->dwFlags & DDSD_PITCH) sprintf(sInfo, \"%s Pitch=%d\", sInfo, lpddsd->lPitch);\n\tif (lpddsd->dwFlags & DDSD_MIPMAPCOUNT) sprintf(sInfo, \"%s MipMapCount=%d\", sInfo, lpddsd->dwMipMapCount);\n\tif (lpddsd->dwFlags & DDSD_CAPS) {\n\t\tsprintf(sInfo, \"%s Caps=%x(%s)\", sInfo, lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps));\n\t\tif(lpddsd->dwSize==sizeof(DDSURFACEDESC2)){\n\t\t\tLPDDSURFACEDESC2 lpddsd2=lpddsd;\n\t\t\tsprintf(sInfo, \"%s Caps2=%x(%s)\", sInfo, lpddsd2->ddsCaps.dwCaps2, ExplainDDSCaps2(lpddsd2->ddsCaps.dwCaps2));\n\t\t\tsprintf(sInfo, \"%s Caps3=%x(%s)\", sInfo, lpddsd2->ddsCaps.dwCaps3, ExplainDDSCaps3(lpddsd2->ddsCaps.dwCaps3));\n\t\t\tsprintf(sInfo, \"%s Caps4=%x(%s)\", sInfo, lpddsd2->ddsCaps.dwCaps4, ExplainDDSCaps4(lpddsd2->ddsCaps.dwCaps4));\n\t\t}\n\t}\n\tif (lpddsd->dwFlags & DDSD_CKDESTBLT ) sprintf(sInfo, \"%s CKDestBlt=(%x,%x)\", sInfo, lpddsd->ddckCKDestBlt.dwColorSpaceLowValue, lpddsd->ddckCKDestBlt.dwColorSpaceHighValue);\n\tif (lpddsd->dwFlags & DDSD_CKDESTOVERLAY ) sprintf(sInfo, \"%s CKDestOverlay=(%x,%x)\", sInfo, lpddsd->ddckCKDestOverlay.dwColorSpaceLowValue, lpddsd->ddckCKDestOverlay.dwColorSpaceHighValue);\n\tif (lpddsd->dwFlags & DDSD_CKSRCBLT ) sprintf(sInfo, \"%s CKSrcBlt=(%x,%x)\", sInfo, lpddsd->ddckCKSrcBlt.dwColorSpaceLowValue, lpddsd->ddckCKSrcBlt.dwColorSpaceHighValue);\n\tif (lpddsd->dwFlags & DDSD_CKSRCOVERLAY ) sprintf(sInfo, \"%s CKSrcOverlay=(%x,%x)\", sInfo, lpddsd->ddckCKSrcOverlay.dwColorSpaceLowValue, lpddsd->ddckCKSrcOverlay.dwColorSpaceHighValue);\n\tif (lpddsd->dwFlags & DDSD_PIXELFORMAT ) sprintf(sInfo, \"%s %s\", sInfo, DumpPixelFormat((LPDDSURFACEDESC2)lpddsd));\n\tif (lpddsd->dwFlags & DDSD_LPSURFACE) sprintf(sInfo, \"%s Surface=%x\", sInfo, lpddsd->lpSurface);\n\tif ((lpddsd->dwFlags & DDSD_ZBUFFERBITDEPTH) && (lpddsd->dwSize==sizeof(DDSURFACEDESC))) sprintf(sInfo, \"%s ZBufferBitDepth=%d\", sInfo, ((LPDDSURFACEDESC)lpddsd)->dwZBufferBitDepth);\n\tif (lpddsd->dwFlags & DDSD_ALPHABITDEPTH) sprintf(sInfo, \"%s AlphaBitDepth=%d\", sInfo, lpddsd->dwAlphaBitDepth);\n\tif (lpddsd->dwReserved) sprintf(sInfo, \"%s Reserved=%d\", sInfo, lpddsd->dwReserved);\n\tif (lpddsd->dwFlags & DDSD_REFRESHRATE) sprintf(sInfo, \"%s RefreshRate=%d\", sInfo, lpddsd->dwRefreshRate);\n\tif (lpddsd->dwFlags & DDSD_LINEARSIZE) sprintf(sInfo, \"%s LinearSize=%d\", sInfo, lpddsd->dwLinearSize);\n\tif (lpddsd->dwSize == sizeof(DDSURFACEDESC2)){\n\t\tif (lpddsd->dwFlags & DDSD_TEXTURESTAGE) sprintf(sInfo, \"%s TextureStage=%x\", sInfo, ((LPDDSURFACEDESC2)lpddsd)->dwTextureStage);\n\t\tif (lpddsd->dwFlags & DDSD_FVF) sprintf(sInfo, \"%s FVF=%x\", sInfo, ((LPDDSURFACEDESC2)lpddsd)->dwFVF);\n\t}\n\n\treturn sInfo;\n}\n\nvoid DumpPixFmt(LPDDSURFACEDESC2 lpdds)\n{\n\tOutTrace(\"PixelFormat: lpdds=%x %s\\n\", DumpPixelFormat(lpdds));\n}\n\n/* ------------------------------------------------------------------------------ */\n// auxiliary (static) functions for palette handling\n/* ------------------------------------------------------------------------------ */\n\nBOOL isPaletteUpdated;\n\nvoid mySetPalette(int dwstart, int dwcount, LPPALETTEENTRY lpentries)\n{\n\tint i;\n\textern DXWNDSTATUS *pStatus;\n\n\t// if has reserved palette entries, recover them\n\tif(dxw.dwFlags5 & LOCKRESERVEDPALETTE){\n\t\tint nStatCols, nPalEntries;\n\t\tPALETTEENTRY SysPalEntry[256];\n\t\tLPPALETTEENTRY lpEntry;\n\t\textern GetSystemPaletteEntries_Type pGDIGetSystemPaletteEntries;\n\t\textern GetDeviceCaps_Type pGDIGetDeviceCaps;\n\n\t\t// The number of static colours should be 20, but inquire it anyway \n\t\tnStatCols = (*pGDIGetDeviceCaps)(GetDC(0), NUMRESERVED);\n\n\t\t// fix the first nStatCols/2 and the last nStatCols/2 entries \n\t\tnPalEntries=(*pGDIGetSystemPaletteEntries)(GetDC(0), 0, 256, SysPalEntry);\n\n\t\tfor (i = 0; i < 256; i++){\n\t\t\t// skip intermediate un-reserved palette entries\n\t\t\tif(i==(nStatCols / 2)) i=256 - (nStatCols / 2); \n\t\t\tlpEntry = &lpentries[i];\n\t\t\tif(lpEntry->peFlags==0){\n\t\t\t\tlpEntry->peRed = SysPalEntry[i].peRed;\n\t\t\t\tlpEntry->peGreen = SysPalEntry[i].peGreen;\n\t\t\t\tlpEntry->peBlue = SysPalEntry[i].peBlue;\n\t\t\t}\n\t\t}\n\t}\n\n\t// copy the palette entries on the current system palette \n\tfor(int idx=0; idx<dwcount; idx++)  \n\t\tpStatus->Palette[dwstart+idx]= lpentries[idx];\n\n\tfor(i = 0; i < dwcount; i ++){\n\t\tPALETTEENTRY PalColor;\n\t\tPalColor = lpentries[i];\n\t\tif (dxw.dwFlags3 & BLACKWHITE){\n\t\t\t// (http://www.codeproject.com/Articles/66253/Converting-Colors-to-Gray-Shades):\n\t\t\t// gray = (red * 0.30) + (green * 0.59) + (blue * 0.11) \n\t\t\tDWORD grayscale;\n\t\t\t//grayscale = ((DWORD)lpentries[i].peRed + (DWORD)lpentries[i].peGreen + (DWORD)lpentries[i].peBlue) / 3;\n\t\t\tgrayscale = (((DWORD)PalColor.peRed * 30) + ((DWORD)PalColor.peGreen * 59) + ((DWORD)PalColor.peBlue) * 11) / 100;\n\t\t\tPalColor.peRed = PalColor.peGreen = PalColor.peBlue = (BYTE)grayscale;\n\t\t}\n\t\tswitch (dxw.ActualPixelFormat.dwRGBBitCount){\n\t\tcase 32:\n\t\t\tPaletteEntries[i + dwstart] =\n\t\t\t\t(((DWORD)PalColor.peRed) << 16) + (((DWORD)PalColor.peGreen) << 8) + ((DWORD)PalColor.peBlue);\n\t\t\tbreak;\n\t\tcase 16:\n\t\t\tPaletteEntries[i + dwstart] = (dxw.ActualPixelFormat.dwGBitMask == 0x03E0) ?\n\t\t\t\t(((DWORD)PalColor.peRed & 0xF8) << 8) + (((DWORD)PalColor.peGreen & 0xFC) << 3) + (((DWORD)PalColor.peBlue &0xF8) >> 3)\n\t\t\t\t:\n\t\t\t\t(((DWORD)PalColor.peRed & 0xF8) << 8) + (((DWORD)PalColor.peGreen & 0xF8) << 3) + (((DWORD)PalColor.peBlue &0xF8) >> 3);\n\t\t\tbreak;\n\t\tcase 8: // it may happen in unemulated modes\n\t\t\tPaletteEntries[i + dwstart] =\n\t\t\t\t(((DWORD)PalColor.peRed) << 16) + (((DWORD)PalColor.peGreen) << 8) + ((DWORD)PalColor.peBlue);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tOutTraceDW(\"ASSERT: unsupported Color BPP=%d\\n\", dxw.ActualPixelFormat.dwRGBBitCount);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tisPaletteUpdated = TRUE;\n}\n\nvoid InitDDScreenParameters(int dxversion, LPDIRECTDRAW lpdd)\n{\n\tHRESULT res;\n\tDDSURFACEDESC2 ddsd;\n\tddsd.dwSize=sizeof(DDSURFACEDESC);\n\tres=myGetDisplayMode(dxversion, lpdd, (LPDDSURFACEDESC)&ddsd);\n\tif(res){\n\t\tOutTraceE(\"GetDisplayMode: ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn;\n\t}\n\n\tOutTraceDW(\"InitDDScreenParameters: Actual %s\\n\", DumpPixelFormat((LPDDSURFACEDESC2)&ddsd));\n\tdxw.ActualPixelFormat=ddsd.ddpfPixelFormat;\n\tif(dxw.VirtualPixelFormat.dwRGBBitCount==0) dxw.VirtualPixelFormat=ddsd.ddpfPixelFormat;\n\tSetBltTransformations(dxversion);\n\treturn;\n}\n\nvoid InitScreenParameters(int dxversion)\n{\n\textern void FixPixelFormat(int , DDPIXELFORMAT *);\n\tDEVMODE CurrDevMode;\n\tstatic int DoOnce = FALSE;\n\tDWORD dwVJoyStatus;\n\n\tif(DoOnce) return;\n\tDoOnce = TRUE;\n\n\t// set default VGA mode 800x600\n\t// should I make it configurable ? (640x480, 800x600, 1024x768)\n\tdxw.SetScreenSize(); // 800 x 600 by default\n\tGetHookInfo()->Height=(short)dxw.GetScreenHeight();\n\tGetHookInfo()->Width=(short)dxw.GetScreenWidth();\n\tGetHookInfo()->ColorDepth=0; // unknown\n\tGetHookInfo()->DXVersion=0; // unknown\n\tGetHookInfo()->isLogging=(dxw.dwTFlags & OUTTRACE);\n\t\n\tdwVJoyStatus = GetHookInfo()->VJoyStatus;\n\tdwVJoyStatus &= ~VJOYPRESENT;\n\tif(dxw.dwFlags6 & VIRTUALJOYSTICK) dwVJoyStatus |= VJOYPRESENT;\n\tGetHookInfo()->VJoyStatus = dwVJoyStatus;\n\n\tif(!(*pEnumDisplaySettings)(NULL, ENUM_CURRENT_SETTINGS, &CurrDevMode)){\n\t\tOutTraceE(\"EnumDisplaySettings: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t\treturn;\n\t}\n\tmemset(&dxw.ActualPixelFormat, 0, sizeof(DDPIXELFORMAT));\n\t// initialize to default null values, but dwRGBBitCount\n\tdxw.ActualPixelFormat.dwRGBBitCount=CurrDevMode.dmBitsPerPel;\n\tdxw.VirtualPixelFormat.dwRGBBitCount=CurrDevMode.dmBitsPerPel; // until set differently\n\tif(dxw.dwFlags2 & INIT8BPP) FixPixelFormat(8, &dxw.VirtualPixelFormat);\n\tif(dxw.dwFlags2 & INIT16BPP) FixPixelFormat(16, &dxw.VirtualPixelFormat);\n\tif(dxw.dwFlags7 & INIT24BPP) FixPixelFormat(24, &dxw.VirtualPixelFormat);\n\tif(dxw.dwFlags7 & INIT32BPP) FixPixelFormat(32, &dxw.VirtualPixelFormat);\n\tOutTraceDW(\"InitScreenParameters: dxversion=%d RGBBitCount=%d\\n\", dxversion, CurrDevMode.dmBitsPerPel);\n\tSetBltTransformations(dxversion);\n\n\treturn;\n}\n\nvoid FixPixelFormat(int ColorDepth, DDPIXELFORMAT *pf)\n{\n\tpf->dwFlags = DDPF_RGB;\n\tswitch(ColorDepth){\n\tcase 8:\n\t\tpf->dwFlags |= DDPF_PALETTEINDEXED8;\t\t\n\t\tpf->dwRGBBitCount = 8;\n\t\tpf->dwRBitMask = 0;\n\t\tpf->dwGBitMask = 0;\n\t\tpf->dwBBitMask = 0;\n\t\tpf->dwRGBAlphaBitMask = 0x0000;\n\t\tbreak;\n\tcase 15: // v2.02.53: Hesperian Wars - so far the only game setting color depth to 15 BPP!\n\tcase 16:\n\t\tpf->dwRGBBitCount = 16;\n\t\tif (dxw.dwFlags1 & USERGB565){\n\t\t\tpf->dwRBitMask = 0xf800; \n\t\t\tpf->dwGBitMask = 0x07e0;\n\t\t\tpf->dwBBitMask = 0x001f;\n\t\t\tpf->dwRGBAlphaBitMask = 0x0000;\n\t\t}\n\t\telse {\n\t\t\tif(!(dxw.dwFlags4 & NOALPHACHANNEL) && (ColorDepth == 16)) pf->dwFlags |= DDPF_ALPHAPIXELS; // v2.02.33,40,53\t\n\t\t\tpf->dwRBitMask = 0x7c00;\n\t\t\tpf->dwGBitMask = 0x03e0;\n\t\t\tpf->dwBBitMask = 0x001f;\n\t\t\tpf->dwRGBAlphaBitMask = 0x8000;\n\t\t}\n\t\tbreak;\n\tcase 24:\n\t\tpf->dwRGBBitCount = 24;\n\t\tpf->dwRBitMask = 0x00FF0000;\n\t\tpf->dwGBitMask = 0x0000FF00;\n\t\tpf->dwBBitMask = 0x000000FF;\n\t\tpf->dwRGBAlphaBitMask = 0x00000000;\n\t\tbreak;\n\tcase 32:\n\t\tif(!(dxw.dwFlags4 & NOALPHACHANNEL)) pf->dwFlags |= DDPF_ALPHAPIXELS; // v2.02.33\n\t\tpf->dwRGBBitCount = 32;\n\t\tpf->dwRBitMask = 0x00FF0000;\n\t\tpf->dwGBitMask = 0x0000FF00;\n\t\tpf->dwBBitMask = 0x000000FF;\n\t\tpf->dwRGBAlphaBitMask = 0xFF000000;\n\t\tbreak;\n\t}\n}\n\nstatic void ddSetCompatibility()\n{\n\ttypedef HRESULT (WINAPI *SetAppCompatData_Type)(DWORD, DWORD);\n\tSetAppCompatData_Type pSetAppCompatData;\n\tHRESULT res;\n\tHINSTANCE hinst;\n\n\thinst=(*pLoadLibraryA)(\"ddraw.dll\");\n\tif(!hinst){\n\t\tOutTraceDW(\"LoadLibrary ddraw.dll ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t}\n\tpSetAppCompatData=(SetAppCompatData_Type)(*pGetProcAddress)(hinst, \"SetAppCompatData\");\n\tif(pSetAppCompatData) {\n\t\tif (dxw.dwFlags2 & SETCOMPATIBILITY){\n\t\t\t// v2.03.27: set DWM Off for both primary Lock and Blt. Good for Age of Empires intro movie!\n\t\t\tres=(*pSetAppCompatData)(1, 0);\n\t\t\tres=(*pSetAppCompatData)(2, 0);\n\t\t\tOutTraceDW(\"HookDirectDraw: SetAppCompatData(2,0) ret=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t}\n\t\tif (dxw.dwFlags6 & DISABLEMAXWINMODE){\n\t\t\tres=(*pSetAppCompatData)(12, 0);\n\t\t\tOutTraceDW(\"HookDirectDraw: SetAppCompatData(12,0) ret=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t}\n\t}\n\telse{\n\t\tOutTraceDW(\"HookDirectDraw: missing SetAppCompatData call\\n\");\n\t}\n\t(*pFreeLibrary)(hinst);\n}\n\nstatic void BypassGOGDDrawRedirector()\n{\n\t// this procedure bypasses the GOG proxy ddraw.dll that sometimes is found in the GOG game folders.\n\t// This way, there will be no more the need to rename or delete this file.\n\tchar sSysLibraryPath[MAX_PATH+10];\n\tHMODULE hinst;\n\n\tGetSystemDirectory(sSysLibraryPath, MAX_PATH);\n\tstrcat(sSysLibraryPath, \"\\\\ddraw.dll\");\n\thinst = (*pLoadLibraryA)(sSysLibraryPath);\n\tpDirectDrawEnumerateA = (DirectDrawEnumerateA_Type)GetProcAddress(hinst, \"DirectDrawEnumerateA\");\n\tpDirectDrawEnumerateExA = (DirectDrawEnumerateExA_Type)GetProcAddress(hinst, \"DirectDrawEnumerateExA\");\n\tpDirectDrawEnumerateW = (DirectDrawEnumerateW_Type)GetProcAddress(hinst, \"DirectDrawEnumerateW\");\n\tpDirectDrawEnumerateExW = (DirectDrawEnumerateExW_Type)GetProcAddress(hinst, \"DirectDrawEnumerateExW\");\n\tpDirectDrawCreate = (DirectDrawCreate_Type)GetProcAddress(hinst, \"DirectDrawCreate\");\n\tpDirectDrawCreateEx = (DirectDrawCreateEx_Type)GetProcAddress(hinst, \"DirectDrawCreateEx\");\n}\n\nint HookDirectDraw(HMODULE module, int version)\n{\n\tif(dxw.dwTargetDDVersion == HOOKDDRAWNONE) return 0;\n\n\tif ((dxw.dwFlags2 & SETCOMPATIBILITY) ||\n\t\t(dxw.dwFlags6 & DISABLEMAXWINMODE)){\n\t\tstatic BOOL AlreadyDone = FALSE;\n\t\tif(!AlreadyDone){\n\t\t\tddSetCompatibility();\n\t\t\tAlreadyDone = TRUE;\n\t\t}\n\t}\n\n\tif(dxw.dwFlags6 & BYPASSGOGLIBS) {\n\t\tBypassGOGDDrawRedirector();\n\t\treturn TRUE;\n\t}\n\n\tif(dxw.dwFlags4 & HOTPATCH) {\n\t\t// hot-patch all APIs and that's all folks!\n\t\tHookLibraryEx(module, ddHooks, \"ddraw.dll\");\n\t\treturn TRUE;\n\t}\n\n\t//const GUID dd7 = {0x15e65ec0,0x3b9c,0x11d2,0xb9,0x2f,0x00,0x60,0x97,0x97,0xea,0x5b};\n\tHMODULE hinst;\n\n\tOutTraceB(\"HookDirectDraw version=%d\\n\", version); //GHO\n\tswitch(version){\n\tcase 0: // automatic\n\t\tHookLibraryEx(module, ddHooks, \"ddraw.dll\");\n\t\tbreak;\n\tcase 1:\n\tcase 2:\n\tcase 3:\n\tcase 4:\n\tcase 5:\n\tcase 6:\n\t\tHookLibraryEx(module, ddHooks, \"ddraw.dll\");\n\t\tif(!pDirectDrawCreate){ // required for IAT patching \n\t\t\thinst = (*pLoadLibraryA)(\"ddraw.dll\");\n\t\t\tif(!hinst) OutTraceE(\"LoadLibrary ddraw.dll ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t\t\tpDirectDrawCreate = (DirectDrawCreate_Type)GetProcAddress(hinst, \"DirectDrawCreate\");\n\t\t\tpDirectDrawEnumerateA = (DirectDrawEnumerateA_Type)GetProcAddress(hinst, \"DirectDrawEnumerateA\");\t\t\n\t\t}\n\t\tif(pDirectDrawCreate){\n\t\t\tLPDIRECTDRAW lpdd;\n\t\t\tBOOL res;\n\t\t\tHookLibraryEx(module, ddHooks, \"ddraw.dll\");\n\t\t\tres=extDirectDrawCreate(0, &lpdd, 0);\n\t\t\tif (res){\n\t\t\t\tOutTraceE(\"DirectDrawCreate: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\t}\n\t\t\tlpdd->Release();\n\t\t}\n\t\tbreak;\n\tcase 7:\n\t\tHookLibraryEx(module, ddHooks, \"ddraw.dll\");\n\t\tif(!pDirectDrawCreate){ // required for IAT patching in \"Crimson skies\"\n\t\t\thinst = (*pLoadLibraryA)(\"ddraw.dll\");\n\t\t\tif(!hinst) OutTraceE(\"LoadLibrary ddraw.dll ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t\t\tpDirectDrawEnumerateA = (DirectDrawEnumerateA_Type)GetProcAddress(hinst, \"DirectDrawEnumerateA\");\n\t\t\tpDirectDrawEnumerateExA = (DirectDrawEnumerateExA_Type)GetProcAddress(hinst, \"DirectDrawEnumerateExA\");\n\t\t\tpDirectDrawCreate = (DirectDrawCreate_Type)GetProcAddress(hinst, \"DirectDrawCreate\");\n\t\t\tpDirectDrawCreateEx = (DirectDrawCreateEx_Type)GetProcAddress(hinst, \"DirectDrawCreateEx\");\n\t\t}\t\t\n\t\tif(pDirectDrawCreate){\n\t\t\tLPDIRECTDRAW lpdd;\n\t\t\tBOOL res;\n\t\t\tres=extDirectDrawCreate(0, &lpdd, 0);\n\t\t\tif (res) OutTraceE(\"DirectDrawCreate: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\tlpdd->Release();\n\t\t}\n\t\tbreak;\n\t}\n\n\tif(pDirectDrawCreate || pDirectDrawCreateEx) return 1;\n\treturn 0;\n}\n\nCreatePalette_Type pCreatePaletteMethod(int dxversion)\n{\n\tCreatePalette_Type pCreatePalette;\n\tswitch(dxversion){\n\t\tcase 1: pCreatePalette = pCreatePalette1; break;\n\t\tcase 2: pCreatePalette = pCreatePalette2; break;\n\t\tcase 3: pCreatePalette = pCreatePalette3; break;\n\t\tcase 4: pCreatePalette = pCreatePalette4; break;\n\t\tcase 7: pCreatePalette = pCreatePalette7; break;\n\t}\n\tCHECKPTR(pCreatePalette, \"CreatePalette\"); \n\treturn pCreatePalette;\n}\n\nSetPalette_Type pSetPaletteMethod(int dxversion)\n{\n\tSetPalette_Type pSetPalette;\n\tswitch(dxversion){\n\t\tcase 1: pSetPalette=pSetPalette1; break;\n\t\tcase 2: pSetPalette=pSetPalette2; break;\n\t\tcase 3: pSetPalette=pSetPalette3; break;\n\t\tcase 4: pSetPalette=pSetPalette4; break;\n\t\tcase 7: pSetPalette=pSetPalette7; break;\n\t}\n\tCHECKPTR(pSetPalette, \"SetPalette\"); \n\treturn pSetPalette;\n}\n\nReleaseS_Type pReleaseSMethod(int dxversion)\n{\n\tReleaseS_Type pReleaseS;\n\tswitch(dxversion){\n\t\tcase 1: pReleaseS=pReleaseS1; break;\n\t\tcase 2: pReleaseS=pReleaseS2; break;\n\t\tcase 3: pReleaseS=pReleaseS3; break;\n\t\tcase 4: pReleaseS=pReleaseS4; break;\n\t\tcase 7: pReleaseS=pReleaseS7; break;\n\t}\n\tCHECKPTR(pReleaseS, \"Surface::Release\"); \n\treturn pReleaseS;\n}\n\nReleaseDC_Type pReleaseDCMethod()\n{\n\tReleaseDC_Type pReleaseDC;\n\tswitch(iBakBufferVersion){\n\t\tcase 1: pReleaseDC=pReleaseDC1; break;\n\t\tcase 2: pReleaseDC=pReleaseDC2; break;\n\t\tcase 3: pReleaseDC=pReleaseDC3; break;\n\t\tcase 4: pReleaseDC=pReleaseDC4; break;\n\t\tcase 7: pReleaseDC=pReleaseDC7; break;\n\t}\n\tCHECKPTR(pReleaseDC, \"ReleaseDC\"); \n\treturn pReleaseDC;\n}\n\nSetClipper_Type pSetClipperMethod(int dxversion)\n{\n\tSetClipper_Type pSetClipper;\n\tswitch(dxversion){\n\t\tcase 1: pSetClipper=pSetClipper1; break;\n\t\tcase 2: pSetClipper=pSetClipper2; break;\n\t\tcase 3: pSetClipper=pSetClipper3; break;\n\t\tcase 4: pSetClipper=pSetClipper4; break;\n\t\tcase 7: pSetClipper=pSetClipper7; break;\n\t}\n\tCHECKPTR(pSetClipper, \"SetClipper\"); \n\treturn pSetClipper;\n}\n\nBlt_Type pGetBltMethod(int dxversion)\n{\n\tBlt_Type pBlt;\n\tswitch(dxversion){\n\t\tcase 1: pBlt=pBlt1; break;\n\t\tcase 2: pBlt=pBlt2; break;\n\t\tcase 3: pBlt=pBlt3; break;\n\t\tcase 4: pBlt=pBlt4; break;\n\t\tcase 7: pBlt=pBlt7; break;\n\t}\n\tCHECKPTR(pBlt, \"Blt\"); \n\treturn pBlt;\n}\n\nBlt_Type pBltMethod()\n{\n\tBlt_Type pBlt;\n\tswitch(iBakBufferVersion){\n\t\tcase 1: pBlt=pBlt1; break;\n\t\tcase 2: pBlt=pBlt2; break;\n\t\tcase 3: pBlt=pBlt3; break;\n\t\tcase 4: pBlt=pBlt4; break;\n\t\tcase 7: pBlt=pBlt7; break;\n\t}\n\tCHECKPTR(pBlt, \"Blt\"); \n\treturn pBlt;\n}\n\nGetDC_Type pGetDCMethod()\n{\n\tGetDC_Type pGetDC;\n\tswitch(iBakBufferVersion){\n\t\tcase 1: pGetDC=pGetDC1; break;\n\t\tcase 2: pGetDC=pGetDC2; break;\n\t\tcase 3: pGetDC=pGetDC3; break;\n\t\tcase 4: pGetDC=pGetDC4; break;\n\t\tcase 7: pGetDC=pGetDC7; break;\n\t}\n\tCHECKPTR(pGetDC, \"GetDC\"); \n\treturn pGetDC;\n}\n\nUnlock4_Type pUnlockMethod(int dxversion)\n{\n\tUnlock4_Type pUnlock;\n\tswitch(dxversion){\n\t\tcase 1: pUnlock=(Unlock4_Type)pUnlock1; break;\n\t\tcase 2: pUnlock=(Unlock4_Type)pUnlock2; break;\n\t\tcase 3: pUnlock=(Unlock4_Type)pUnlock3; break;\n\t\tcase 4: pUnlock=(Unlock4_Type)pUnlock4; break;\n\t\tcase 7: pUnlock=(Unlock4_Type)pUnlock7; break;\n\t}\n\tCHECKPTR(pUnlock, \"Unlock\"); \n\treturn pUnlock;\n}\n\nLock_Type pLockMethod(int dxversion)\n{\n\tLock_Type pLock;\n\tswitch(dxversion){\n\t\tcase 1: pLock=pLock1; break;\n\t\tcase 2: pLock=pLock2; break;\n\t\tcase 3: pLock=pLock3; break;\n\t\tcase 4: pLock=pLock4; break;\n\t\tcase 7: pLock=pLock7; break;\n\t}\n\tCHECKPTR(pLock, \"Lock\"); \n\treturn pLock;\n}\n\nCreateSurface2_Type pCreateSurfaceMethod(int dxversion)\n{\n\tCreateSurface2_Type pCreateSurface;\n\tswitch(dxversion){\n\t\tcase 1: pCreateSurface=(CreateSurface2_Type)pCreateSurface1; break;\n\t\tcase 2: pCreateSurface=(CreateSurface2_Type)pCreateSurface2; break;\n\t\tcase 3: pCreateSurface=(CreateSurface2_Type)pCreateSurface3; break;\n\t\tcase 4: pCreateSurface=(CreateSurface2_Type)pCreateSurface4; break;\n\t\tcase 7: pCreateSurface=(CreateSurface2_Type)pCreateSurface7; break;\n\t}\n\tCHECKPTR(pCreateSurface, \"CreateSurface\"); \n\treturn pCreateSurface;\n}\n\nGetSurfaceDesc2_Type pGetSurfaceDescMethod()\n{\n\tGetSurfaceDesc2_Type pGetSurfaceDesc;\n\tpGetSurfaceDesc = NULL;\n\tswitch(iBakBufferVersion){\n\t\tcase 1: pGetSurfaceDesc=(GetSurfaceDesc2_Type)pGetSurfaceDesc1; break;\n\t\tcase 2: pGetSurfaceDesc=(GetSurfaceDesc2_Type)pGetSurfaceDesc2; break;\n\t\tcase 3: pGetSurfaceDesc=(GetSurfaceDesc2_Type)pGetSurfaceDesc3; break;\n\t\tcase 4: pGetSurfaceDesc=(GetSurfaceDesc2_Type)pGetSurfaceDesc4; break;\n\t\tcase 7: pGetSurfaceDesc=(GetSurfaceDesc2_Type)pGetSurfaceDesc7; break;\n\t}\n\tCHECKPTR(pGetSurfaceDesc, \"GetSurfaceDesc\"); \n\treturn pGetSurfaceDesc;\n}\n\nGetGDISurface_Type pGetGDISurfaceMethod(int dxversion)\n{\n\tGetGDISurface_Type pGetGDISurface;\n\tswitch(dxversion){\n\t\tdefault: \n\t\tcase 1: pGetGDISurface = pGetGDISurface1; break;\n\t\tcase 2: pGetGDISurface = pGetGDISurface2; break;\n\t\tcase 3: pGetGDISurface = pGetGDISurface3; break;\n\t\tcase 4: pGetGDISurface = pGetGDISurface4; break;\n\t\tcase 7: pGetGDISurface = pGetGDISurface7; break;\n\t}\n\tCHECKPTR(pGetGDISurface, \"GetGDISurface\"); \n\treturn pGetGDISurface;\n}\n\nint lpddsHookedVersion()\n{\n\treturn iBakBufferVersion;\n}\n\nvoid DescribeSurface(LPDIRECTDRAWSURFACE lpdds, int dxversion, char *label, int line)\n{\n\tDDSURFACEDESC2 ddsd;\n\tHRESULT res;\n\tGetSurfaceDesc2_Type pGetSurfaceDesc = NULL;\n\tint dwSize = (dxversion<4)?sizeof(DDSURFACEDESC):sizeof(DDSURFACEDESC2);\n\tmemset(&ddsd, 0, dwSize);\n\tddsd.dwSize = dwSize;\n\tpGetSurfaceDesc = pGetSurfaceDescMethod();\n\tif(pGetSurfaceDesc==NULL) return;\n\tres=(*pGetSurfaceDescMethod())((LPDIRECTDRAWSURFACE2)lpdds, &ddsd);\n\tif(res)return;\n\tOutTraceDW(\"Surface %s: ddsd=%x dxversion=%d %s\\n\", \n\t\tlabel, lpdds, dxversion, LogSurfaceAttributes(&ddsd, label, line));\n}\n\nvoid RegisterPixelFormat(int dxversion, LPDIRECTDRAWSURFACE lpdds)\n{\n\tDDSURFACEDESC2 ddsdpix;\n\tmemset((void *)&ddsdpix, 0, sizeof(DDSURFACEDESC2));\n\tddsdpix.dwSize = (dxversion < 4) ? sizeof(DDSURFACEDESC) : sizeof(DDSURFACEDESC2);\n\tddsdpix.dwFlags = DDSD_PIXELFORMAT;\n\tswitch(dxversion){\n\t\tcase 1: if(pGetSurfaceDesc1)(*pGetSurfaceDesc1)((LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)&ddsdpix); break;\n\t\tcase 2: if(pGetSurfaceDesc2)(*pGetSurfaceDesc2)((LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)&ddsdpix); break;\n\t\tcase 3: if(pGetSurfaceDesc3)(*pGetSurfaceDesc3)((LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)&ddsdpix); break;\n\t\tcase 4: if(pGetSurfaceDesc4)(*pGetSurfaceDesc4)((LPDIRECTDRAWSURFACE2)lpdds, &ddsdpix); break;\n\t\tcase 7: if(pGetSurfaceDesc7)(*pGetSurfaceDesc7)((LPDIRECTDRAWSURFACE2)lpdds, &ddsdpix); break;\n\t}\n\tGetHookInfo()->pfd=ddsdpix.ddpfPixelFormat; // v2.02.88\n\tOutTraceB(\"RegisterPixelFormat: lpdds=%x %s\\n\", lpdds, DumpPixelFormat(&ddsdpix));\n}\n\n/* ------------------------------------------------------------------ */\n\n// SetPixFmt: builds a pixel format descriptor when no one is specified, starting from the color depth, the current\n// desktop pixel format (when the color depth is the same) or the config flags\n\nvoid SetPixFmt(LPDDSURFACEDESC2 lpdd)\n{\n\tOutTraceDW(\"SetPixFmt: BPP=%d Use565=%d NoAlpha=%d\\n\", \n\t\tdxw.VirtualPixelFormat.dwRGBBitCount, \n\t\tdxw.dwFlags1 & USERGB565 ? 1:0,\n\t\tdxw.dwFlags4 & NOALPHACHANNEL ? 1:0);\n\n\tmemset(&lpdd->ddpfPixelFormat,0,sizeof(DDPIXELFORMAT));\n\tlpdd->ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);\n\n\tswitch (dxw.VirtualPixelFormat.dwRGBBitCount)\n\t{\n\tcase 8:\n\tcase 15:\n\tcase 16:\n\tcase 24:\n\tcase 32:\n\t\tFixPixelFormat(dxw.VirtualPixelFormat.dwRGBBitCount, &lpdd->ddpfPixelFormat);\n\t\tbreak;\n\tdefault:\n\t\tOutTraceE(\"CreateSurface ERROR: Unsupported resolution ColorBPP=%d\\n\", dxw.VirtualPixelFormat.dwRGBBitCount);\n\t\tbreak;\n\t}\n\n\t// remember current virtual settings\n\tdxw.VirtualPixelFormat=lpdd->ddpfPixelFormat;\n\tOutTraceDW(\"SetPixFmt: %s\\n\", DumpPixelFormat(lpdd));\n}\n\n// retrieves the stored pixel format\n\nvoid GetPixFmt(LPDDSURFACEDESC2 lpdd)\n{\n\tlpdd->ddpfPixelFormat = dxw.VirtualPixelFormat;\n\tOutTraceDW(\"GetPixFmt: %s\\n\", DumpPixelFormat(lpdd));\n}\n\n/* ------------------------------------------------------------------ */\n// hook query functions that determines the object versioning ....\n/* ------------------------------------------------------------------ */\n\nint Set_dwSize_From_Surface()\n{\n\tint size;\n\tswitch(iBakBufferVersion){\n\t\tcase 1: size=sizeof(DDSURFACEDESC); break;\n\t\tcase 2: size=sizeof(DDSURFACEDESC); break;\n\t\tcase 3: size=sizeof(DDSURFACEDESC); break;\n\t\tcase 4: size=sizeof(DDSURFACEDESC2); break;\n\t\tcase 7: size=sizeof(DDSURFACEDESC2); break;\n\t}\n\treturn size;\n}\n\nvoid HookDDSession(LPDIRECTDRAW *lplpdd, int dxversion)\n{\n\tOutTraceDW(\"Hooking directdraw session dd=%x dxversion=%d thread_id=%x\\n\", \n\t\t*lplpdd, dxversion, GetCurrentThreadId());\n\n\tiDirectDrawVersion = dxversion; // save for ddraw session operations\n\n\t// unimplemented, but better not hook it with a single wrapper\n\t//SetHook((void *)(**(DWORD **)lplpdd + 12), extCompact, (void **)&pCompact, \"Compact\");\n\tswitch(dxversion) {\n\tcase 1:\n\t\tSetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD1, (void **)&pQueryInterfaceD1, \"QueryInterface(D1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  8), extReleaseD1, (void **)&pReleaseD1, \"Release(D1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 16), extCreateClipper1, (void **)&pCreateClipper1, \"CreateClipper(D1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette1, (void **)&pCreatePalette1, \"CreatePalette(D1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface1, (void **)&pCreateSurface1, \"CreateSurface(D1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 28), extDuplicateSurface1, (void **)&pDuplicateSurface1, \"DuplicateSurface(D1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 32), extEnumDisplayModes1, (void **)&pEnumDisplayModes1, \"EnumDisplayModes(D1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 40), extFlipToGDISurface1, (void **)&pFlipToGDISurface1, \"FlipToGDISurface(D1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps1D, (void **)&pGetCaps1D, \"GetCaps(D1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode1, (void **)&pGetDisplayMode1, \"GetDisplayMode(D1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface1, (void **)&pGetGDISurface1, \"GetGDISurface(D1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLine1, (void **)&pGetScanLine1, \"GetScanLine(D1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize1, (void **)&pInitialize1, \"Initialize(D1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode1, (void **)&pRestoreDisplayMode1, \"RestoreDisplayMode(D1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel1, (void **)&pSetCooperativeLevel1, \"SetCooperativeLevel(D1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode1, (void **)&pSetDisplayMode1, \"SetDisplayMode(D1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 88), extWaitForVerticalBlank1, (void **)&pWaitForVerticalBlank1, \"WaitForVerticalBlank(D1)\");\n\t\tbreak;\n\tcase 2:\n\t\tSetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD2, (void **)&pQueryInterfaceD2, \"QueryInterface(D2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  8), extReleaseD2, (void **)&pReleaseD2, \"Release(D2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 16), extCreateClipper2, (void **)&pCreateClipper2, \"CreateClipper(D2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette2, (void **)&pCreatePalette2, \"CreatePalette(D2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface2, (void **)&pCreateSurface2, \"CreateSurface(D2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 28), extDuplicateSurface2, (void **)&pDuplicateSurface2, \"DuplicateSurface(D2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 32), extEnumDisplayModes2, (void **)&pEnumDisplayModes2, \"EnumDisplayModes(D2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 40), extFlipToGDISurface2, (void **)&pFlipToGDISurface2, \"FlipToGDISurface(D2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps2D, (void **)&pGetCaps2D, \"GetCaps(D2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode2, (void **)&pGetDisplayMode2, \"GetDisplayMode(D2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface2, (void **)&pGetGDISurface2, \"GetGDISurface(D2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLine2, (void **)&pGetScanLine2, \"GetScanLine(D2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize2, (void **)&pInitialize2, \"Initialize(D2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode2, (void **)&pRestoreDisplayMode2, \"RestoreDisplayMode(D2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel2, (void **)&pSetCooperativeLevel2, \"SetCooperativeLevel(D2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode2, (void **)&pSetDisplayMode2, \"SetDisplayMode(D2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 88), extWaitForVerticalBlank2, (void **)&pWaitForVerticalBlank2, \"WaitForVerticalBlank(D2)\");\n\t\t// added in v2 interface\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 92), extGetAvailableVidMem2, (void **)&pGetAvailableVidMem2, \"GetAvailableVidMem(D2)\");\n\t\tbreak;\n\tcase 3:\n\t\tSetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD3, (void **)&pQueryInterfaceD3, \"QueryInterface(D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  8), extReleaseD3, (void **)&pReleaseD3, \"Release(D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 16), extCreateClipper3, (void **)&pCreateClipper3, \"CreateClipper(D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette3, (void **)&pCreatePalette3, \"CreatePalette(D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface3, (void **)&pCreateSurface3, \"CreateSurface(D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 28), extDuplicateSurface3, (void **)&pDuplicateSurface3, \"DuplicateSurface(D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 32), extEnumDisplayModes3, (void **)&pEnumDisplayModes3, \"EnumDisplayModes(D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 40), extFlipToGDISurface3, (void **)&pFlipToGDISurface3, \"FlipToGDISurface(D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps3D, (void **)&pGetCaps3D, \"GetCaps(D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode3, (void **)&pGetDisplayMode3, \"GetDisplayMode(D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface3, (void **)&pGetGDISurface3, \"GetGDISurface(D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLine3, (void **)&pGetScanLine3, \"GetScanLine(D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize3, (void **)&pInitialize3, \"Initialize(D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode3, (void **)&pRestoreDisplayMode3, \"RestoreDisplayMode(D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel3, (void **)&pSetCooperativeLevel3, \"SetCooperativeLevel(D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode3, (void **)&pSetDisplayMode3, \"SetDisplayMode(D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 88), extWaitForVerticalBlank3, (void **)&pWaitForVerticalBlank3, \"WaitForVerticalBlank(D3)\");\n\t\t// added in v2 interface\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 92), extGetAvailableVidMem3, (void **)&pGetAvailableVidMem3, \"GetAvailableVidMem(D3)\");\n\t\tbreak;\n\tcase 4:\n\t\tSetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD4, (void **)&pQueryInterfaceD4, \"QueryInterface(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  8), extReleaseD4, (void **)&pReleaseD4, \"Release(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 16), extCreateClipper4, (void **)&pCreateClipper4, \"CreateClipper(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette4, (void **)&pCreatePalette4, \"CreatePalette(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface4, (void **)&pCreateSurface4, \"CreateSurface(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 28), extDuplicateSurface4, (void **)&pDuplicateSurface4, \"DuplicateSurface(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 32), extEnumDisplayModes4, (void **)&pEnumDisplayModes4, \"EnumDisplayModes(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 40), extFlipToGDISurface4, (void **)&pFlipToGDISurface4, \"FlipToGDISurface(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps4D, (void **)&pGetCaps4D, \"GetCaps(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode4, (void **)&pGetDisplayMode4, \"GetDisplayMode(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface4, (void **)&pGetGDISurface4, \"GetGDISurface(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLine4, (void **)&pGetScanLine4, \"GetScanLine(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize4, (void **)&pInitialize4, \"Initialize(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode4, (void **)&pRestoreDisplayMode4, \"RestoreDisplayMode(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel4, (void **)&pSetCooperativeLevel4, \"SetCooperativeLevel(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode4, (void **)&pSetDisplayMode4, \"SetDisplayMode(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 88), extWaitForVerticalBlank4, (void **)&pWaitForVerticalBlank4, \"WaitForVerticalBlank(D4)\");\n\t\t// added in v2 interface\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 92), extGetAvailableVidMem4, (void **)&pGetAvailableVidMem4, \"GetAvailableVidMem(D4)\");\n\t\t// added in v4 interface\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 104), extTestCooperativeLevel4, (void **)&pTestCooperativeLevel4, \"TestCooperativeLevel(D4)\");\n\t\tbreak;\n\tcase 7:\n\t\tSetHook((void *)(**(DWORD **)lplpdd), extQueryInterfaceD7, (void **)&pQueryInterfaceD7, \"QueryInterface(D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  8), extReleaseD7, (void **)&pReleaseD7, \"Release(D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 16), extCreateClipper7, (void **)&pCreateClipper7, \"CreateClipper(D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 20), extCreatePalette7, (void **)&pCreatePalette7, \"CreatePalette(D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 24), extCreateSurface7, (void **)&pCreateSurface7, \"CreateSurface(D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 28), extDuplicateSurface7, (void **)&pDuplicateSurface7, \"DuplicateSurface(D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 32), extEnumDisplayModes7, (void **)&pEnumDisplayModes7, \"EnumDisplayModes(D4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 40), extFlipToGDISurface7, (void **)&pFlipToGDISurface7, \"FlipToGDISurface(D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 44), extGetCaps7D, (void **)&pGetCaps7D, \"GetCaps(D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 48), extGetDisplayMode7, (void **)&pGetDisplayMode7, \"GetDisplayMode(D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 56), extGetGDISurface7, (void **)&pGetGDISurface7, \"GetGDISurface(D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 64), extGetScanLine7, (void **)&pGetScanLine7, \"GetScanLine(D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize7, (void **)&pInitialize7, \"Initialize(D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 76), extRestoreDisplayMode7, (void **)&pRestoreDisplayMode7, \"RestoreDisplayMode(D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 80), extSetCooperativeLevel7, (void **)&pSetCooperativeLevel7, \"SetCooperativeLevel(D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 84), extSetDisplayMode7, (void **)&pSetDisplayMode7, \"SetDisplayMode(D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 88), extWaitForVerticalBlank7, (void **)&pWaitForVerticalBlank7, \"WaitForVerticalBlank(D7)\");\n\t\t// added in v2 interface\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 92), extGetAvailableVidMem7, (void **)&pGetAvailableVidMem7, \"GetAvailableVidMem(D7)\");\n\t\t// added in v4 interface\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 104), extTestCooperativeLevel7, (void **)&pTestCooperativeLevel7, \"TestCooperativeLevel(D7)\");\n\t\t// added in v7 interface\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 112), extStartModeTest, (void **)&pStartModeTest, \"StartModeTest(D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd + 116), extEvaluateMode, (void **)&pEvaluateMode, \"EvaluateMode(D7)\");\n\t\tbreak;\n\t}\n}\n\nvoid HookDDClipper(LPDIRECTDRAWCLIPPER FAR* lplpDDClipper)\n{\n\tOutTraceDW(\"Hooking directdraw clipper dd=%x\\n\", *lplpDDClipper);\n\n\tSetHook((void *)(**(DWORD **)lplpDDClipper + 8), extReleaseC, (void **)&pReleaseC, \"Release(C)\");\n\tSetHook((void *)(**(DWORD **)lplpDDClipper + 12), extGetClipList, (void **)&pGetClipList, \"GetClipList(C)\");\n\tSetHook((void *)(**(DWORD **)lplpDDClipper + 28), extSetClipList, (void **)&pSetClipList, \"SetClipList(C)\");\n\tSetHook((void *)(**(DWORD **)lplpDDClipper + 32), extSetHWnd, (void **)&pSetHWnd, \"SetHWnd(C)\");\n}\n\nstatic void HookDDPalette(LPDIRECTDRAWPALETTE FAR* lplpDDPalette)\n{\n\tOutTraceDW(\"Hooking directdraw palette dd=%x\\n\", *lplpDDPalette);\n\n    /*** IDirectDrawPalette methods ***/\n\tSetHook((void *)(**(DWORD **)lplpDDPalette + 8), extReleaseP, (void **)&pReleaseP, \"Release(P)\");\n\tSetHook((void *)(**(DWORD **)lplpDDPalette + 24), extSetEntries, (void **)&pSetEntries, \"SetEntries(P)\");\n}\n\nvoid HookDDSurface(LPDIRECTDRAWSURFACE *lplpdds, int dxversion, BOOL isPrim)\n{\n\tBOOL bEmu = dxw.IsEmulated;\n\tif(iBakBufferVersion==0) iBakBufferVersion=dxversion; // v2.03.60\n\n\tOutTraceDW(\"Hooking surface dds=%x dxversion=%d prim=%x thread_id=%x\\n\", \n\t\t*lplpdds, dxversion, isPrim, GetCurrentThreadId());\n\n\tswitch(dxversion) {\n\tcase 1:\n\t\tSetHook((void *)(**(DWORD **)lplpdds), extQueryInterfaceS1, (void **)&pQueryInterfaceS1, \"QueryInterface(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 8), extReleaseS1, (void **)&pReleaseS1, \"Release(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 12), extAddAttachedSurface1, (void **)&pAddAttachedSurface1, \"AddAttachedSurface(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRect1, (void **)&pAddOverlayDirtyRect1, \"AddOverlayDirtyRect(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast1, (void **)&pBltFast1, \"BltFast(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 20), extBlt1, (void **)&pBlt1, \"Blt(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface1, (void **)&pDeleteAttachedSurface1, \"DeleteAttachedSurface(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces1, (void **)&pEnumAttachedSurfaces1, \"EnumAttachedSurfaces(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 40), extEnumOverlayZOrders1, (void **)&pEnumOverlayZOrders1, \"EnumOverlayZOrders(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 44), extFlip1, (void **)&pFlip1, \"Flip(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface1, (void **)&pGetAttachedSurface1, \"GetAttachedSurface(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps1S, (void **)&pGetCaps1S, \"GetCaps(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 64), extGetColorKey1, (void **)&pGetColorKey1, \"GetColorKey(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 68), extGetDC1, (void **)&pGetDC1, \"GetDC(S1)\");\t\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 76), extGetOverlayPosition1, (void **)&pGetOverlayPosition1, \"GetOverlayPosition(S1)\");\t\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 80), extGetPalette1, (void **)&pGetPalette1, \"GetPalette(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 84), extGetPixelFormat1, (void **)&pGetPixelFormat1, \"GetPixelFormat(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc1, (void **)&pGetSurfaceDesc1, \"GetSurfaceDesc(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 100), bEmu ? extLock1 : extLockDir1, (void **)&pLock1, \"Lock(S1)\"); \n\t\tSetHook((void *)(**(DWORD **)lplpdds + 128), bEmu ? extUnlock1 : extUnlockDir1, (void **)&pUnlock1, \"Unlock(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 104), extReleaseDC1, (void **)&pReleaseDC1, \"ReleaseDC(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 120), extSetOverlayPosition1, (void **)&pSetOverlayPosition1, \"SetOverlayPosition(S1)\");\t\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 124), extSetPalette1, (void **)&pSetPalette1, \"SetPalette(S1)\");\n\t\tbreak;\n\tcase 2:\n\t\tSetHook((void *)(**(DWORD **)lplpdds), extQueryInterfaceS2, (void **)&pQueryInterfaceS2, \"QueryInterface(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 8), extReleaseS2, (void **)&pReleaseS2, \"Release(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 12), extAddAttachedSurface2, (void **)&pAddAttachedSurface2, \"AddAttachedSurface(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRect2, (void **)&pAddOverlayDirtyRect2, \"AddOverlayDirtyRect(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast2, (void **)&pBltFast2, \"BltFast(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 20), extBlt2, (void **)&pBlt2, \"Blt(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface2, (void **)&pDeleteAttachedSurface2, \"DeleteAttachedSurface(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces2, (void **)&pEnumAttachedSurfaces2, \"EnumAttachedSurfaces(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 40), extEnumOverlayZOrders2, (void **)&pEnumOverlayZOrders2, \"EnumOverlayZOrders(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 44), extFlip2, (void **)&pFlip2, \"Flip(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface2, (void **)&pGetAttachedSurface2, \"GetAttachedSurface(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps2S, (void **)&pGetCaps2S, \"GetCaps(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 64), extGetColorKey2, (void **)&pGetColorKey2, \"GetColorKey(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 68), extGetDC2, (void **)&pGetDC2, \"GetDC(S2)\");\t\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 76), extGetOverlayPosition2, (void **)&pGetOverlayPosition2, \"GetOverlayPosition(S2)\");\t\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 80), extGetPalette2, (void **)&pGetPalette2, \"GetPalette(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 84), extGetPixelFormat2, (void **)&pGetPixelFormat2, \"GetPixelFormat(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc2, (void **)&pGetSurfaceDesc2, \"GetSurfaceDesc(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 100), bEmu ? extLock2 : extLockDir2, (void **)&pLock2, \"Lock(S2)\"); \n\t\tSetHook((void *)(**(DWORD **)lplpdds + 128), bEmu ? extUnlock2 : extUnlockDir2, (void **)&pUnlock2, \"Unlock(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 104), extReleaseDC2, (void **)&pReleaseDC2, \"ReleaseDC(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 120), extSetOverlayPosition2, (void **)&pSetOverlayPosition2, \"SetOverlayPosition(S2)\");\t\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 124), extSetPalette2, (void **)&pSetPalette2, \"SetPalette(S2)\");\n\t\tbreak;\n\tcase 3:\n\t\tSetHook((void *)(**(DWORD **)lplpdds), extQueryInterfaceS3, (void **)&pQueryInterfaceS3, \"QueryInterface(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 8), extReleaseS3, (void **)&pReleaseS3, \"Release(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 12), extAddAttachedSurface3, (void **)&pAddAttachedSurface3, \"AddAttachedSurface(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRect3, (void **)&pAddOverlayDirtyRect3, \"AddOverlayDirtyRect(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast3, (void **)&pBltFast3, \"BltFast(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 20), extBlt3, (void **)&pBlt3, \"Blt(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface3, (void **)&pDeleteAttachedSurface3, \"DeleteAttachedSurface(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces3, (void **)&pEnumAttachedSurfaces3, \"EnumAttachedSurfaces(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 40), extEnumOverlayZOrders3, (void **)&pEnumOverlayZOrders3, \"EnumOverlayZOrders(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 44), extFlip3, (void **)&pFlip3, \"Flip(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface3, (void **)&pGetAttachedSurface3, \"GetAttachedSurface(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps3S, (void **)&pGetCaps3S, \"GetCaps(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 64), extGetColorKey3, (void **)&pGetColorKey3, \"GetColorKey(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 68), extGetDC3, (void **)&pGetDC3, \"GetDC(S3)\");\t\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 76), extGetOverlayPosition3, (void **)&pGetOverlayPosition3, \"GetOverlayPosition(S3)\");\t\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 80), extGetPalette3, (void **)&pGetPalette3, \"GetPalette(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 84), extGetPixelFormat3, (void **)&pGetPixelFormat3, \"GetPixelFormat(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc3, (void **)&pGetSurfaceDesc3, \"GetSurfaceDesc(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 100), bEmu ? extLock3 : extLockDir3, (void **)&pLock3, \"Lock(S3)\"); \n\t\tSetHook((void *)(**(DWORD **)lplpdds + 128), bEmu ? extUnlock3 : extUnlockDir3, (void **)&pUnlock3, \"Unlock(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 104), extReleaseDC3, (void **)&pReleaseDC3, \"ReleaseDC(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 120), extSetOverlayPosition3, (void **)&pSetOverlayPosition3, \"SetOverlayPosition(S3)\");\t\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 124), extSetPalette3, (void **)&pSetPalette3, \"SetPalette(S3)\");\n\t\t// added in interface version 3\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 156), extSetSurfaceDesc3, (void **)&pSetSurfaceDesc3, \"SetSurfaceDesc(S3)\");\n\t\tbreak;\n\tcase 4:\n\t\tSetHook((void *)(**(DWORD **)lplpdds), extQueryInterfaceS4, (void **)&pQueryInterfaceS4, \"QueryInterface(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 8), extReleaseS4, (void **)&pReleaseS4, \"Release(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 12), extAddAttachedSurface4, (void **)&pAddAttachedSurface4, \"AddAttachedSurface(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRect4, (void **)&pAddOverlayDirtyRect4, \"AddOverlayDirtyRect(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast4, (void **)&pBltFast4, \"BltFast(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 20), extBlt4, (void **)&pBlt4, \"Blt(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface4, (void **)&pDeleteAttachedSurface4, \"DeleteAttachedSurface(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces4, (void **)&pEnumAttachedSurfaces4, \"EnumAttachedSurfaces(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 40), extEnumOverlayZOrders4, (void **)&pEnumOverlayZOrders4, \"EnumOverlayZOrders(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 44), extFlip4, (void **)&pFlip4, \"Flip(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface4, (void **)&pGetAttachedSurface4, \"GetAttachedSurface(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps4S, (void **)&pGetCaps4S, \"GetCaps(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 64), extGetColorKey4, (void **)&pGetColorKey4, \"GetColorKey(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 68), extGetDC4, (void **)&pGetDC4, \"GetDC(S4)\");\t\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 76), extGetOverlayPosition4, (void **)&pGetOverlayPosition4, \"GetOverlayPosition(S4)\");\t\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 80), extGetPalette4, (void **)&pGetPalette4, \"GetPalette(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 84), extGetPixelFormat4, (void **)&pGetPixelFormat4, \"GetPixelFormat(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc4, (void **)&pGetSurfaceDesc4, \"GetSurfaceDesc(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 100), bEmu ? extLock4 : extLockDir4, (void **)&pLock4, \"Lock(S4)\"); \n\t\tSetHook((void *)(**(DWORD **)lplpdds + 128), bEmu ? extUnlock4 : extUnlockDir4, (void **)&pUnlock4, \"Unlock(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 104), extReleaseDC4, (void **)&pReleaseDC4, \"ReleaseDC(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 120), extSetOverlayPosition4, (void **)&pSetOverlayPosition4, \"SetOverlayPosition(S4)\");\t\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 124), extSetPalette4, (void **)&pSetPalette4, \"SetPalette(S4)\");\n\t\t// added in interface version 3\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 156), extSetSurfaceDesc4, (void **)&pSetSurfaceDesc4, \"SetSurfaceDesc(S4)\");\n\t\tbreak;\n\tcase 7:\n\t\tSetHook((void *)(**(DWORD **)lplpdds), extQueryInterfaceS7, (void **)&pQueryInterfaceS7, \"QueryInterface(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 8), extReleaseS7, (void **)&pReleaseS7, \"Release(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 12), extAddAttachedSurface7, (void **)&pAddAttachedSurface7, \"AddAttachedSurface(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 16), extAddOverlayDirtyRect7, (void **)&pAddOverlayDirtyRect7, \"AddOverlayDirtyRect(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 28), extBltFast7, (void **)&pBltFast7, \"BltFast(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 20), extBlt7, (void **)&pBlt7, \"Blt(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 32), extDeleteAttachedSurface7, (void **)&pDeleteAttachedSurface7, \"DeleteAttachedSurface(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 36), extEnumAttachedSurfaces7, (void **)&pEnumAttachedSurfaces7, \"EnumAttachedSurfaces(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 40), extEnumOverlayZOrders7, (void **)&pEnumOverlayZOrders7, \"EnumOverlayZOrders(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 44), extFlip7, (void **)&pFlip7, \"Flip(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 48), extGetAttachedSurface7, (void **)&pGetAttachedSurface7, \"GetAttachedSurface(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 56), extGetCaps7S, (void **)&pGetCaps7S, \"GetCaps(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 64), extGetColorKey7, (void **)&pGetColorKey7, \"GetColorKey(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 68), extGetDC7, (void **)&pGetDC7, \"GetDC(S7)\");\t\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 76), extGetOverlayPosition7, (void **)&pGetOverlayPosition7, \"GetOverlayPosition(S7)\");\t\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 80), extGetPalette7, (void **)&pGetPalette7, \"GetPalette(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 84), extGetPixelFormat7, (void **)&pGetPixelFormat7, \"GetPixelFormat(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 88), extGetSurfaceDesc7, (void **)&pGetSurfaceDesc7, \"GetSurfaceDesc(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 100), bEmu ? extLock7 : extLockDir7, (void **)&pLock7, \"Lock(S7)\"); \n\t\tSetHook((void *)(**(DWORD **)lplpdds + 128), bEmu ? extUnlock7 : extUnlockDir7, (void **)&pUnlock7, \"Unlock(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 104), extReleaseDC7, (void **)&pReleaseDC7, \"ReleaseDC(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 120), extSetOverlayPosition7, (void **)&pSetOverlayPosition7, \"SetOverlayPosition(S7)\");\t\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 124), extSetPalette7, (void **)&pSetPalette7, \"SetPalette(S7)\");\n\t\t// added in interface version 3\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 156), extSetSurfaceDesc7, (void **)&pSetSurfaceDesc7, \"SetSurfaceDesc(S7)\");\n\t\tbreak;\n\t}\n\n\tif (!isPrim) return;\n\n\tswitch(dxversion) {\n\tcase 1:\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper1, (void **)&pSetClipper1, \"SetClipper(S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKey1, (void **)&pSetColorKey1, \"SetColorKey(S1)\");\n\t\tbreak;\n\tcase 2:\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper2, (void **)&pSetClipper2, \"SetClipper(S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKey2, (void **)&pSetColorKey2, \"SetColorKey(S2)\");\n\t\tbreak;\n\tcase 3:\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper3, (void **)&pSetClipper3, \"SetClipper(S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKey3, (void **)&pSetColorKey3, \"SetColorKey(S3)\");\n\t\tbreak;\n\tcase 4:\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper4, (void **)&pSetClipper4, \"SetClipper(S4)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKey4, (void **)&pSetColorKey4, \"SetColorKey(S4)\");\n\t\tbreak;\n\tcase 7:\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 112), extSetClipper7, (void **)&pSetClipper7, \"SetClipper(S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdds + 116), extSetColorKey7, (void **)&pSetColorKey7, \"SetColorKey(S7)\");\n\t\tbreak;\n\t}\n}\n\n\nvoid HookGammaControl(LPVOID *obp)\n{\n\t// IDirectDrawGammaControl::GetGammaRamp\n\tSetHook((void *)(**(DWORD **)obp + 12), extDDGetGammaRamp, (void **)&pDDGetGammaRamp, \"GetGammaRamp(G)\");\n\t// IDirectDrawGammaControl::SetGammaRamp\n\tSetHook((void *)(**(DWORD **)obp + 16), extDDSetGammaRamp, (void **)&pDDSetGammaRamp, \"SetGammaRamp(G)\");\n}\n\n/* ------------------------------------------------------------------------------ */\n// CleanRect:\n// takes care of a corrupted RECT struct where some elements are not valid pointers.\n// In this case, the whole RECT * variable is set to NULL, a value that is interpreted\n// by directdraw functions as the whole surface area.\n/* ------------------------------------------------------------------------------ */\n\nstatic void CleanRect(RECT **lprect, int line)\n{\n\t__try {\n\t\t// normally unharmful statements\n\t\tif(*lprect){\n\t\t\tint i;\n\t\t\ti=(*lprect)->bottom;\n\t\t\ti=(*lprect)->top;\n\t\t\ti=(*lprect)->left;\n\t\t\ti=(*lprect)->right;\n\t\t}\n\t}\n\t__except(EXCEPTION_EXECUTE_HANDLER){ \n\t\tOutTraceE(\"Rectangle exception caught at %d: invalid RECT\\n\", __LINE__);\n\t\tif(IsAssertEnabled) MessageBox(0, \"Rectangle exception\", \"CleanRect\", MB_OK | MB_ICONEXCLAMATION);\n        *lprect=NULL;\n    }\n}\n\nstatic void MaskCapsD(LPDDCAPS c1, LPDDCAPS c2)\n{\n\tFILE *capfile;\n\t//char sBuf[80+1];\n\tDWORD val;\n\tif(IsDebug){\n\t\tchar CapsBuf[3*sizeof(DDCAPS_DX7)+20];\n\t\tint i;\n\t\tunsigned char *p;\n\t\tif(c1){\n\t\t\tp=(unsigned char *)c1;\n\t\t\tfor(i=0; i<sizeof(DDCAPS_DX7); i++) sprintf(&CapsBuf[3*i], \"%02.2X,\", p[i]);\n\t\t\tOutTrace(\"CapsDump(c1:HW)=%s\\n\", CapsBuf);\n\t\t}\n\t\tif(c2){\n\t\t\tp=(unsigned char *)c2;\n\t\t\tfor(i=0; i<sizeof(DDCAPS_DX7); i++) sprintf(&CapsBuf[3*i], \"%02.2X,\", p[i]);\n\t\t\tOutTrace(\"CapsDump(c2:SW)=%s\\n\", CapsBuf);\n\t\t}\n\t}\n\tcapfile=fopen(\"dxwnd.caps.txt\", \"r\");\n\tif(!capfile) return;\n\n\tint HwSwCap;\n\tint WordOffset;\n\tchar Operator;\n\tLPDDCAPS Caps;\n\tLPDWORD lpDWord;\n\twhile(TRUE){\n\t\tif(fscanf(capfile, \"C%d.%x[%c]=%x\\n\", &HwSwCap, &WordOffset, &Operator, &val)!=4) break;\n\t\tOutTrace(\"MaskCaps: C%d.%x[%c].x%08.8X\\n\", HwSwCap, WordOffset, Operator, val);\n\t\tCaps = (HwSwCap == 1) ? c1 : c2;\n\t\tif(!Caps) continue;\n\t\tlpDWord = &(Caps->dwSize) + WordOffset;\n\t\tswitch(Operator){\n\t\t\tcase '&': *lpDWord &= val; break;\n\t\t\tcase '|': *lpDWord |= val; break;\n\t\t\tcase '-': *lpDWord &= (~val); break;\n\t\t\tcase '=':\n\t\t\tdefault:  *lpDWord = val; break;\n\t\t}\n\t}\n\tfclose(capfile);\n\n\tif(c1) {\n\t\tOutTrace(\"MaskCaps(D-HW): caps=%x(%s) caps2=%x(%s) fxcaps=%x(%s) fxalphacaps=%x(%s) keycaps=%x(%s)\\n\", \n\t\t\tc1->dwCaps, ExplainDDDCaps(c1->dwCaps),\n\t\t\tc1->dwCaps2, ExplainDDDCaps2(c1->dwCaps2),\n\t\t\tc1->dwFXCaps, ExplainDDFXCaps(c1->dwFXCaps),\n\t\t\tc1->dwFXAlphaCaps, ExplainDDFXALPHACaps(c1->dwFXAlphaCaps),\n\t\t\tc1->dwCKeyCaps, ExplainDDCKeyCaps(c1->dwCKeyCaps));\n\t}\n\tif(c2) {\n\t\tOutTrace(\"MaskCaps(D-SW): caps=%x(%s) caps2=%x(%s) fxcaps=%x(%s) fxalphacaps=%x(%s) keycaps=%x(%s)\\n\", \n\t\t\tc2->dwCaps, ExplainDDDCaps(c2->dwCaps),\n\t\t\tc2->dwCaps2, ExplainDDDCaps2(c2->dwCaps2),\n\t\t\tc2->dwFXCaps, ExplainDDFXCaps(c2->dwFXCaps),\n\t\t\tc2->dwFXAlphaCaps, ExplainDDFXALPHACaps(c2->dwFXAlphaCaps),\n\t\t\tc2->dwCKeyCaps, ExplainDDCKeyCaps(c2->dwCKeyCaps));\n\t}\t\n}\n\n/* ------------------------------------------------------------------------------ */\n// directdraw method hooks\n/* ------------------------------------------------------------------------------ */\n\nstatic void HandleCapsD(char *sLabel, LPDDCAPS c)\n{\n\tconst DWORD dwMaxMem  = 0x70000000; \n\tconst DWORD dwHugeMem = 0xFFFFFFFF;\n\n\tOutTraceDDRAW(\n\t\t\"GetCaps(%s): caps=%x(%s) caps2=%x(%s) palcaps=%x(%s) \"\n\t\t\"fxcaps=%x(%s) fxalphacaps=%x(%s) keycaps=%x(%s)\\n\", \n\t\tsLabel,\n\t\tc->dwCaps, ExplainDDDCaps(c->dwCaps),\n\t\tc->dwCaps2, ExplainDDDCaps2(c->dwCaps2),\n\t\tc->dwPalCaps, ExplainDDPalCaps(c->dwPalCaps),\n\t\tc->dwFXCaps, ExplainDDFXCaps(c->dwFXCaps),\n\t\tc->dwFXAlphaCaps, ExplainDDFXALPHACaps(c->dwFXAlphaCaps),\n\t\tc->dwCKeyCaps, ExplainDDCKeyCaps(c->dwCKeyCaps));\n\tOutTraceDDRAW(\"GetCaps(%s): VidMemTotal=%x VidMemFree=%x ZBufferBitDepths=%x(%s)\\n\", \n\t\tsLabel, c->dwVidMemTotal, c->dwVidMemFree, c->dwZBufferBitDepths, ExplainZBufferBitDepths(c->dwZBufferBitDepths));\n\tOutTraceDDRAW(\"GetCaps(%s): MaxVisibleOverlays=%x CurrVisibleOverlays=%x\\n\",\n\t\tsLabel, c->dwMaxVisibleOverlays, c->dwCurrVisibleOverlays);\n\tif(IsTraceHex) HexTrace((unsigned char *)c, c->dwSize);\n\n\tif(dxw.bHintActive){\n\t\tif(c->dwVidMemTotal > dwMaxMem) ShowHint(HINT_LIMITMEM);\n\t\tif(c->dwVidMemFree  > dwMaxMem) ShowHint(HINT_LIMITMEM);\n\t}\n\n\tif(dxw.dwFlags2 & LIMITRESOURCES){ // check for memory value overflow\n\t\tif(c->dwVidMemTotal > dwMaxMem) c->dwVidMemTotal = dwMaxMem;\n\t\tif(c->dwVidMemFree  > dwMaxMem) c->dwVidMemFree  = dwMaxMem;\n\t}\n\tif(dxw.dwFlags5 & STRESSRESOURCES){\n\t\tc->dwVidMemTotal = dwHugeMem;\t\t\n\t\tc->dwVidMemFree  = dwHugeMem;\t\n\t}\n\tif(dxw.dwFlags6 & SETZBUFFERBITDEPTHS){\n\t\t// From MSDN https://msdn.microsoft.com/en-us/library/windows/desktop/gg426101%28v=vs.85%29.aspx :\n\t\t// dwZBufferBitDepths\n\t\t// DDBD_8, DDBD_16, DDBD_24, or DDBD_32. (Indicate 8, 16, 24, or 32 bits per pixel.) \n\t\t// This member is obsolete for DirectX 6.0 and later. \n\t\t// Use the IDirect3D7::EnumZBufferFormats to retrieve information about supported depth buffer formats.\n\t\t// v2.03.35: needed to bypass the \"Banzai Bug\" initial controls\n\t\tif (c->dwZBufferBitDepths == 0) {\n\t\t\tc->dwZBufferBitDepths = (DDBD_8|DDBD_16|DDBD_24|DDBD_32);\n\t\t\tOutTraceDDRAW(\"GetCaps(%s): FIXED ZBufferBitDepths=%x(%s)\\n\", \n\t\t\t\tsLabel, c->dwZBufferBitDepths, ExplainZBufferBitDepths(c->dwZBufferBitDepths));\n\t\t}\n\t}\n\tif((dxw.dwFlags5 & STRESSRESOURCES) || (dxw.dwFlags2 & LIMITRESOURCES))\n\t\tOutTraceDDRAW(\"GetCaps(%s): FIXED VidMemTotal=%x VidMemFree=%x\\n\", sLabel, c->dwVidMemTotal, c->dwVidMemFree);\n}\n\nstatic HRESULT WINAPI extGetCapsD(int dxversion, GetCapsD_Type pGetCapsD, LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2)\n{\n\tHRESULT res;\n\tOutTraceDDRAW(\"GetCaps(D%d): lpdd=%x %s %s\\n\", dxversion, lpdd, c1?\"c1\":\"NULL\", c2?\"c2\":\"NULL\");\n\tres=(*pGetCapsD)(lpdd, c1, c2);\n\tif(res) {\n\t\tOutTraceE(\"GetCaps(D): ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\n\tif (c1) HandleCapsD(\"D-HW\", c1);\n\tif (c2) HandleCapsD(\"D-SW\", c2);\n\n\tif((dxw.dwFlags3 & FORCESHEL) && c1) {\n\t\tDDCAPS_DX7 swcaps; // DDCAPS_DX7 because it is the bigger in size\n\t\tint size;\n\t\tsize=c1->dwSize;\n\t\tif (!c2) {\n\t\t\tmemset(&swcaps, 0, sizeof(DDCAPS_DX7));\n\t\t\tswcaps.dwSize=size;\n\t\t\tc2=&swcaps;\n\t\t\tres=(*pGetCapsD)(lpdd, NULL, c2);\n\t\t}\n\t\tDWORD dwVidMemTotal=c1->dwVidMemTotal;\n\t\tDWORD dwVidMemFree=c1->dwVidMemFree;\n\t\tmemcpy((void *)c1, (void *)c2, size);\n\t\tif(c1->dwVidMemTotal == 0) c1->dwVidMemTotal=dwVidMemTotal; \n\t\tif(c1->dwVidMemFree  == 0) c1->dwVidMemFree =dwVidMemFree; \n\t\tif(c1->dwVidMemTotal == 0) c1->dwVidMemTotal=0x20000000; // 500 MB\n\t\tif(c1->dwVidMemFree  == 0) c1->dwVidMemFree =0x20000000; // 500 MB\n\t\tif (c1) HandleCapsD(\"D-HW(fixed)\", c1);\n\t\tif (c2) HandleCapsD(\"D-SW(fixed)\", c2);\n\t}\n\n\tif((dxw.dwFlags8 & NOHALDEVICE) && c1) {\n\t\tOutTraceDW(\"GetCaps(D): NOHALDEVICE\\n\");\n\t\tc1->ddsCaps.dwCaps = DDCAPS_NOHARDWARE;\n\t\tc1->ddsCaps.dwCaps2 = DDCAPS2_CANRENDERWINDOWED;\n\t\tc1->dwPalCaps = 0;\n\t\tc1->dwFXCaps = 0;\n\t\tc1->dwFXAlphaCaps = 0;\n\t\tc1->dwCKeyCaps = 0;\n\t\tc1->dwVidMemTotal = c1->dwVidMemFree = 0;\n\t\tc1->dwZBufferBitDepths = 0;\n\t\tc1->dwMaxVisibleOverlays = c1->dwCurrVisibleOverlays = 0;\n\t\tHandleCapsD(\"D-HW(NoHAL)\", c1);\n\t}\n\n\tif((dxw.dwFlags3 & MINIMALCAPS)) SetMinimalCaps(dxversion, c1, c2);\n\n\tif(dxw.dwFlags3 & CAPMASK) MaskCapsD(c1, c2);\n\n#define OVERLAYLAYERCAPS \\\n\t(DDCAPS_OVERLAY|DDCAPS_OVERLAYCANTCLIP|\\\n\tDDCAPS_OVERLAYFOURCC|DDCAPS_OVERLAYSTRETCH)\n#define OVERLAYKEYCAPS \\\n\t(DDCKEYCAPS_DESTOVERLAY|DDCKEYCAPS_DESTOVERLAYYUV|\\\n\tDDCKEYCAPS_SRCOVERLAY|DDCKEYCAPS_SRCOVERLAYYUV|\\\n\tDDCKEYCAPS_SRCOVERLAYCLRSPACE|DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV)\n\n\tif(dxw.dwFlags7 & SUPPRESSOVERLAY){\n\t\tif(c1){\n\t\t\tc1->ddsCaps.dwCaps &= ~OVERLAYLAYERCAPS;\n\t\t\tc1->dwCKeyCaps &= ~OVERLAYKEYCAPS;\n\t\t\tc1->dwMaxVisibleOverlays = c1->dwCurrVisibleOverlays = 0;\n\t\t}\n\t\tif(c2){\n\t\t\tc2->ddsCaps.dwCaps &= ~OVERLAYLAYERCAPS;\n\t\t\tc2->dwCKeyCaps &= ~OVERLAYKEYCAPS;\n\t\t\tc2->dwMaxVisibleOverlays = c2->dwCurrVisibleOverlays = 0;\n\t\t}\n\t}\n\n\treturn res;\n}\n\nHRESULT WINAPI extGetCaps1D(LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2)\n{ return extGetCapsD(1, pGetCaps1D, lpdd, c1, c2); }\nHRESULT WINAPI extGetCaps2D(LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2)\n{ return extGetCapsD(2, pGetCaps2D, lpdd, c1, c2); }\nHRESULT WINAPI extGetCaps3D(LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2)\n{ return extGetCapsD(3, pGetCaps3D, lpdd, c1, c2); }\nHRESULT WINAPI extGetCaps4D(LPDIRECTDRAW lpdd, LPDDCAPS c1, LPDDCAPS c2)\n{ return extGetCapsD(4, pGetCaps4D, lpdd, c1, c2); }\nHRESULT WINAPI extGetCaps7D(LPDIRECTDRAW lpdd, LPDDCAPS_DX7 c1, LPDDCAPS_DX7 c2)\n{ return extGetCapsD(7, pGetCaps7D, lpdd, (LPDDCAPS)c1, (LPDDCAPS)c2); }\n\nHRESULT WINAPI extDirectDrawCreate(GUID FAR *lpguid, LPDIRECTDRAW FAR *lplpdd, IUnknown FAR *pu)\n{\n\tHRESULT res;\n\tGUID FAR *lpPrivGuid = lpguid;\n\n\tOutTraceDDRAW(\"DirectDrawCreate: guid=%x(%s)\\n\", lpguid, ExplainGUID(lpguid));\n\n\tif(!pDirectDrawCreate){ // not hooked yet....\n\t\tHINSTANCE hinst;\n\t\thinst = (*pLoadLibraryA)(\"ddraw.dll\");\n\t\tif(!hinst){\n\t\t\tOutTraceE(\"LoadLibrary ddraw.dll ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t\t}\n\t\tpDirectDrawCreate =\n\t\t\t(DirectDrawCreate_Type)GetProcAddress(hinst, \"DirectDrawCreate\");\n\t\tif(pDirectDrawCreate)\n\t\t\tHookAPI(hinst, \"ddraw.dll\", pDirectDrawCreate, \"DirectDrawCreate\", extDirectDrawCreate); // v2.02.52\n\t\telse{\n\t\t\tchar sMsg[81];\n\t\t\tsprintf_s(sMsg, 80, \"DirectDrawCreate hook failed: error=%d\\n\", GetLastError());\n\t\t\tOutTraceDW(sMsg);\n\t\t\tif(IsAssertEnabled) MessageBox(0, sMsg, \"Hook\", MB_OK | MB_ICONEXCLAMATION);\n\t\t\treturn DDERR_GENERIC; // is there a better one?\n\t\t}\n\t}\n\n\tif((dxw.dwFlags3 & FORCESHEL) && (lpguid==NULL)) lpPrivGuid=(GUID FAR *)DDCREATE_EMULATIONONLY;\n\n\tres = (*pDirectDrawCreate)(lpPrivGuid, lplpdd, pu);\n\tif(res) {\n\t\tOutTraceE(\"DirectDrawCreate: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\n\tif(dxw.dwFlags3 & COLORFIX) (*((DDRAWI_DIRECTDRAW_INT **)lplpdd))->lpLcl->dwAppHackFlags |= 0x800;\n\n\tdxw.dwDDVersion=1;\n\tchar *mode;\n\tswitch ((DWORD)lpPrivGuid){\n\t\tcase 0: mode=\"NULL\"; break;\n\t\tcase DDCREATE_HARDWAREONLY: mode=\"DDCREATE_HARDWAREONLY\"; break;\n\t\tcase DDCREATE_EMULATIONONLY: mode=\"DDCREATE_EMULATIONONLY\"; break;\n\t\tdefault:\n\t\t\tswitch (*(DWORD *)lpguid){\n\t\t\t\tcase 0x6C14DB80: dxw.dwDDVersion=1; mode=\"IID_IDirectDraw\"; break;\n\t\t\t\tcase 0xB3A6F3E0: dxw.dwDDVersion=2; mode=\"IID_IDirectDraw2\"; break;\n\t\t\t\tcase 0x618f8ad4: dxw.dwDDVersion=3; mode=\"IID_IDirectDraw3\"; break;\t\t\t\n\t\t\t\tcase 0x9c59509a: dxw.dwDDVersion=4; mode=\"IID_IDirectDraw4\"; break;\n\t\t\t\tcase 0x15e65ec0: dxw.dwDDVersion=7; mode=\"IID_IDirectDraw7\"; break;\n\t\t\t\tdefault: mode=\"unknown\"; break;\n\t\t\t}\n\t\t\tbreak;\n\t}\n\tOutTraceDDRAW(\"DirectDrawCreate: lpdd=%x guid=%s DDVersion=%d\\n\", *lplpdd, mode, dxw.dwDDVersion);\n\n\tHookDDSession(lplpdd, dxw.dwDDVersion);\n\n\t// beware: old ddraw games seem to reuse a closed ddraw handle. The theory is that maybe whenever\n\t// you created a ddraw session, you got more than one reference count, so that releasing it once \n\t// did not destroy the object.... but why? when (I mean, in which situations? Maybe not always...)\n\t// and for which releases? The fix here assumes that this fact is true and holds always for ddraw 1\n\t// sessions. \n\t// update: this is no good for \"Jet Moto\" that created a ddraw session and expects to Release it \n\t// with a refcount zero.\n\n\t//if(dxw.dwDDVersion==1) (*lplpdd)->AddRef(); // seems to fix problems in \"Warhammer 40K Rites Of War\"\n\n\tif(IsDebug){\n\t\tDDCAPS DriverCaps, EmulCaps;\n\t\tmemset(&DriverCaps, 0, sizeof(DriverCaps));\n\t\tDriverCaps.dwSize=sizeof(DriverCaps);\n\t\tmemset(&EmulCaps, 0, sizeof(EmulCaps));\n\t\tEmulCaps.dwSize=sizeof(EmulCaps);\n\t\t(LPDIRECTDRAW)(*lplpdd)->GetCaps(&DriverCaps, &EmulCaps);\n\t\t//OutTrace(\"DirectDrawCreate: drivercaps=%x(%s) emulcaps=%x(%s)\\n\", DriverCaps.ddsCaps, \"???\", EmulCaps.ddsCaps, \"???\");\n\t}\n\n\tif(lpPrimaryDD==NULL) lpPrimaryDD=*lplpdd; // do not override the value set when creating the primary surface!\n\tbFlippedDC = FALSE; // v02.03.30\n#ifdef AUTOSETCOOPERATIVELEVEL\n\tOutTrace(\"Setting cooperative level version=%d hwnd=%x\\n\", dxw.dwDDVersion, dxw.GethWnd());\n\tswitch(dxw.dwDDVersion){\n\t\tcase 1: res=(*pSetCooperativeLevel1)(*lplpdd, dxw.GethWnd(), DDSCL_NORMAL); break;\n\t\tcase 2: res=(*pSetCooperativeLevel2)(*lplpdd, dxw.GethWnd(), DDSCL_NORMAL); break;\n\t\tcase 4: res=(*pSetCooperativeLevel4)(*lplpdd, dxw.GethWnd(), DDSCL_NORMAL); break;\n\t\tcase 7: res=(*pSetCooperativeLevel7)(*lplpdd, dxw.GethWnd(), DDSCL_NORMAL); break;\n\t}\n\tif(res) OutTraceE(\"SetCooperativeLevel ERROR: err=%x(%s)\\n\", res, ExplainDDError(res));\n#endif\n\treturn DD_OK;\n}\n\nHRESULT WINAPI extDirectDrawCreateEx(GUID FAR *lpguid,\n\tLPDIRECTDRAW FAR *lplpdd, REFIID iid, IUnknown FAR *pu)\n{\n\tHRESULT res;\n\tGUID FAR *lpPrivGuid = lpguid;\n\n\tOutTraceDDRAW(\"DirectDrawCreateEx: guid=%x(%s) refiid=%x\\n\", lpguid, ExplainGUID(lpguid), iid);\n\n\t// v2.1.70: auto-hooking (just in case...)\n\tif(!pDirectDrawCreateEx){ // not hooked yet....\n\t\tHINSTANCE hinst;\n\t\thinst = (*pLoadLibraryA)(\"ddraw.dll\");\n\t\tif(!hinst){\n\t\t\tOutTraceE(\"LoadLibrary ddraw.dll ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t\t}\n\t\tpDirectDrawCreateEx =\n\t\t\t(DirectDrawCreateEx_Type)GetProcAddress(hinst, \"DirectDrawCreateEx\");\n\t\tif(pDirectDrawCreateEx)\n\t\t\tHookAPI(hinst, \"ddraw.dll\", pDirectDrawCreateEx, \"DirectDrawCreateEx\", extDirectDrawCreateEx); // v2.02.52\n\t\telse{\n\t\t\tchar sMsg[81];\n\t\t\tsprintf_s(sMsg, 80, \"DirectDrawCreateEx hook failed: error=%d\\n\", GetLastError());\n\t\t\tOutTraceDW(sMsg);\n\t\t\tif(IsAssertEnabled) MessageBox(0, sMsg, \"Hook\", MB_OK | MB_ICONEXCLAMATION);\n\t\t\treturn DDERR_GENERIC; // is there a better one?\n\t\t}\n\t}\n\n\tif((dxw.dwFlags3 & FORCESHEL) && (lpguid==NULL)) lpPrivGuid=(GUID FAR *)DDCREATE_EMULATIONONLY;\n\n\tres = (*pDirectDrawCreateEx)(lpPrivGuid, lplpdd, iid, pu);\n\tif (res){\n\t\tOutTraceDW(\"DirectDrawCreateEx: res=%x(%s)\\n\",res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\n\tif(dxw.dwFlags3 & COLORFIX) (*((DDRAWI_DIRECTDRAW_INT **)lplpdd))->lpLcl->dwAppHackFlags |= 0x800;\n\n\tdxw.dwDDVersion=7;\n\tchar *mode;\n\tswitch ((DWORD)lpPrivGuid){\n\t\tcase 0: mode=\"NULL\"; break;\n\t\tcase DDCREATE_HARDWAREONLY: mode=\"DDCREATE_HARDWAREONLY\"; break;\n\t\tcase DDCREATE_EMULATIONONLY: mode=\"DDCREATE_EMULATIONONLY\"; break;\n\t\tdefault:\n\t\t\tswitch (*(DWORD *)lpguid){\n\t\t\t\tcase 0x6C14DB80: dxw.dwDDVersion=1; mode=\"IID_IDirectDraw\"; break;\n\t\t\t\tcase 0xB3A6F3E0: dxw.dwDDVersion=2; mode=\"IID_IDirectDraw2\"; break;\n\t\t\t\tcase 0x618f8ad4: dxw.dwDDVersion=3; mode=\"IID_IDirectDraw3\"; break;\n\t\t\t\tcase 0x9c59509a: dxw.dwDDVersion=4; mode=\"IID_IDirectDraw4\"; break;\n\t\t\t\tcase 0x15e65ec0: dxw.dwDDVersion=7; mode=\"IID_IDirectDraw7\"; break;\n\t\t\t\tdefault: mode=\"unknown\"; break;\n\t\t\t}\n\t\t\tbreak;\n\t}\n\tOutTraceDDRAW(\"DirectDrawCreateEx: lpdd=%x guid=%s DDVersion=%d\\n\", *lplpdd, mode, dxw.dwDDVersion);\n\n\tHookDDSession(lplpdd, dxw.dwDDVersion);\n\n\tif(IsDebug){\n\t\tDDCAPS DriverCaps, EmulCaps;\n\t\tmemset(&DriverCaps, 0, sizeof(DriverCaps));\n\t\tDriverCaps.dwSize=sizeof(DriverCaps);\n\t\tmemset(&EmulCaps, 0, sizeof(EmulCaps));\n\t\tEmulCaps.dwSize=sizeof(EmulCaps);\n\t\t(LPDIRECTDRAW)(*lplpdd)->GetCaps(&DriverCaps, &EmulCaps);\n\t\t//OutTrace(\"DirectDrawCreate: drivercaps=%x(%s) emulcaps=%x(%s)\\n\", DriverCaps.ddsCaps, \"???\", EmulCaps.ddsCaps, \"???\");\n\t}\n\n\tif(lpPrimaryDD==NULL) lpPrimaryDD=*lplpdd; // do not override the value set when creating the primary surface!\n\tbFlippedDC = FALSE; // v02.03.30: fix for Powerslide\n\treturn DD_OK;\n}\n\nstatic HRESULT WINAPI extInitialize(int dxversion, Initialize_Type pInitialize, LPDIRECTDRAW lpdd, GUID FAR *lpguid)\n{\n\tHRESULT res;\n\tGUID FAR *lpPrivGuid = lpguid;\n\n\tOutTraceDDRAW(\"Initialize(%d): lpdd=%x guid=%x(%s)\\n\", dxversion, lpdd, lpguid, ExplainGUID(lpguid));\n\n\tif((dxw.dwFlags3 & FORCESHEL) && (lpguid==NULL)) lpPrivGuid=(GUID FAR *)DDCREATE_EMULATIONONLY;\n\n\tres=(*pInitialize)(lpdd, lpPrivGuid);\n\n\tif(res == DDERR_ALREADYINITIALIZED) {\n\t\tOutTrace(\"Initialize: SKIP DDERR_ALREADYINITIALIZED error\\n\");\n\t\tres=DD_OK; // v2.03.18: this error could be caused by the CoCreateInstance implementation\n\t}\n\tif(dxw.dwFlags3 & COLORFIX) (((DDRAWI_DIRECTDRAW_INT *)lpdd))->lpLcl->dwAppHackFlags |= 0x800;\n\tif(res) OutTraceE(\"Initialize ERROR: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\n\treturn res;\n}\n\nHRESULT WINAPI extInitialize1(LPDIRECTDRAW lpdd, GUID FAR *lpguid)\n{ return extInitialize(1, pInitialize1, lpdd, lpguid); }\nHRESULT WINAPI extInitialize2(LPDIRECTDRAW lpdd, GUID FAR *lpguid)\n{ return extInitialize(2, pInitialize2, lpdd, lpguid); }\nHRESULT WINAPI extInitialize3(LPDIRECTDRAW lpdd, GUID FAR *lpguid)\n{ return extInitialize(3, pInitialize3, lpdd, lpguid); }\nHRESULT WINAPI extInitialize4(LPDIRECTDRAW lpdd, GUID FAR *lpguid)\n{ return extInitialize(4, pInitialize4, lpdd, lpguid); }\nHRESULT WINAPI extInitialize7(LPDIRECTDRAW lpdd, GUID FAR *lpguid)\n{ return extInitialize(7, pInitialize7, lpdd, lpguid); }\n\nstatic HRESULT WINAPI extRestoreDisplayMode(int dxversion, RestoreDisplayMode_Type pRestoreDisplayMode, LPDIRECTDRAW lpdd)\n{\n\tOutTraceDW(\"RestoreDisplayMode(%d): lpdd=%x\\n\", dxversion, lpdd);\n\tif(dxw.IsEmulated){ \n\t\tOutTraceDW(\"RestoreDisplayMode: BYPASS\\n\");\n\t\treturn DD_OK;\n\t}\n\treturn (*pRestoreDisplayMode)(lpdd);\n}\n\nHRESULT WINAPI extRestoreDisplayMode1(LPDIRECTDRAW lpdd)\n{ return extRestoreDisplayMode(1, pRestoreDisplayMode1, lpdd); }\nHRESULT WINAPI extRestoreDisplayMode2(LPDIRECTDRAW lpdd)\n{ return extRestoreDisplayMode(2, pRestoreDisplayMode2, lpdd); }\nHRESULT WINAPI extRestoreDisplayMode3(LPDIRECTDRAW lpdd)\n{ return extRestoreDisplayMode(3, pRestoreDisplayMode3, lpdd); }\nHRESULT WINAPI extRestoreDisplayMode4(LPDIRECTDRAW lpdd)\n{ return extRestoreDisplayMode(4, pRestoreDisplayMode4, lpdd); }\nHRESULT WINAPI extRestoreDisplayMode7(LPDIRECTDRAW lpdd)\n{ return extRestoreDisplayMode(7, pRestoreDisplayMode7, lpdd); }\n\nHRESULT WINAPI extGetScanLine(int dxversion, GetScanLine_Type pGetScanLine, LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine)\n{\n\tHRESULT res;\n\tres = pGetScanLine(lpdd, lpdwScanLine);\n\tOutTraceB(\"GetScanLine(%d): lpdd=%x res=%x line=%d\\n\", dxversion, lpdd, res, *lpdwScanLine);\n\n\tif(!res && dxw.Windowize && dxw.dwRealScreenHeight){\n\t\t*lpdwScanLine = (*lpdwScanLine * dxw.GetScreenHeight()) / dxw.dwRealScreenHeight;\n\t\tOutTraceB(\"GetScanLine(%d): FIXED line=%d\\n\", *lpdwScanLine);\n\t}\n\n\treturn res;\n}\n\nHRESULT WINAPI extGetScanLine1(LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine)\n{ return extGetScanLine(1, pGetScanLine1, lpdd, lpdwScanLine); }\nHRESULT WINAPI extGetScanLine2(LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine)\n{ return extGetScanLine(2, pGetScanLine2, lpdd, lpdwScanLine); }\nHRESULT WINAPI extGetScanLine3(LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine)\n{ return extGetScanLine(3, pGetScanLine3, lpdd, lpdwScanLine); }\nHRESULT WINAPI extGetScanLine4(LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine)\n{ return extGetScanLine(4, pGetScanLine4, lpdd, lpdwScanLine); }\nHRESULT WINAPI extGetScanLine7(LPDIRECTDRAW lpdd, LPDWORD lpdwScanLine)\n{ return extGetScanLine(7, pGetScanLine7, lpdd, lpdwScanLine); }\n\nHRESULT WINAPI extQueryInterfaceD1(void *lpdd, REFIID riid, LPVOID *obp)\n{ return extQueryInterfaceDX(1, pQueryInterfaceD1, lpdd, riid, obp); }\nHRESULT WINAPI extQueryInterfaceD2(void *lpdd, REFIID riid, LPVOID *obp)\n{ return extQueryInterfaceDX(2, pQueryInterfaceD2, lpdd, riid, obp); }\nHRESULT WINAPI extQueryInterfaceD3(void *lpdd, REFIID riid, LPVOID *obp)\n{ return extQueryInterfaceDX(3, pQueryInterfaceD3, lpdd, riid, obp); }\nHRESULT WINAPI extQueryInterfaceD4(void *lpdd, REFIID riid, LPVOID *obp)\n{ return extQueryInterfaceDX(4, pQueryInterfaceD4, lpdd, riid, obp); }\nHRESULT WINAPI extQueryInterfaceD7(void *lpdd, REFIID riid, LPVOID *obp)\n{ return extQueryInterfaceDX(7, pQueryInterfaceD7, lpdd, riid, obp); }\n\nHRESULT WINAPI extQueryInterfaceS1(void *lpdds, REFIID riid, LPVOID *obp)\n{ return extQueryInterfaceDX(1, pQueryInterfaceS1, lpdds, riid, obp); }\nHRESULT WINAPI extQueryInterfaceS2(void *lpdds, REFIID riid, LPVOID *obp)\n{ return extQueryInterfaceDX(2, pQueryInterfaceS2, lpdds, riid, obp); }\nHRESULT WINAPI extQueryInterfaceS3(void *lpdds, REFIID riid, LPVOID *obp)\n{ return extQueryInterfaceDX(3, pQueryInterfaceS3, lpdds, riid, obp); }\nHRESULT WINAPI extQueryInterfaceS4(void *lpdds, REFIID riid, LPVOID *obp)\n{ return extQueryInterfaceDX(4, pQueryInterfaceS4, lpdds, riid, obp); }\nHRESULT WINAPI extQueryInterfaceS7(void *lpdds, REFIID riid, LPVOID *obp)\n{ return extQueryInterfaceDX(7, pQueryInterfaceS7, lpdds, riid, obp); }\n\nHRESULT WINAPI extSetDisplayMode(int dxversion, LPDIRECTDRAW lpdd,\n\tDWORD dwwidth, DWORD dwheight, DWORD dwbpp, DWORD dwrefreshrate, DWORD dwflags)\n{\n\tDDSURFACEDESC2 ddsd;\n\tHRESULT res = 0;\n\n\tif(IsTraceDDRAW){\n\t\tchar sInfo[81];\n\t\tstrcpy(sInfo, \"\");\n\t\tif (dxversion>=4) sprintf(sInfo, \" dwRefresh=%i dwFlags=%x\", dwrefreshrate, dwflags);\n\t\tOutTrace(\"SetDisplayMode(%d): dwWidth=%i dwHeight=%i dwBPP=%i%s\\n\",\n\t\t\tdxversion, dwwidth, dwheight, dwbpp, sInfo);\n\t}\n\n\t// binkplayer fix\n\tif((int)dwwidth < 0) dwwidth = dxw.GetScreenWidth();\n\tif((int)dwheight < 0) dwheight = dxw.GetScreenHeight();\n\n\t// v2.03.90: add LOCKCOLORDEPTH, easiest way to manage \"Ahlgrens bisplet\"!\n\tif(dxw.dwFlags7 & LOCKCOLORDEPTH){\n\t\tOutTraceDW(\"SetDisplayMode: LOCKCOLORDEPTH bpp=%d->%d\\n\", dwbpp, dxw.ActualPixelFormat.dwRGBBitCount);\n\t\tdwbpp = dxw.ActualPixelFormat.dwRGBBitCount;\n\t}\n\n\tdxw.SetScreenSize(dwwidth, dwheight);\n\tGetHookInfo()->Height=(short)dxw.GetScreenHeight();\n\tGetHookInfo()->Width=(short)dxw.GetScreenWidth();\n\tGetHookInfo()->ColorDepth=(short)dwbpp;\n\tif(dxw.Windowize) AdjustWindowFrame(dxw.GethWnd(), dwwidth, dwheight);\n\n\tif(dxw.dwFlags1 & EMULATESURFACE){\n\t\t// in EMULATESURFACE mode, let SetPixFmt decide upon the PixelFormat\n\t\tdxw.VirtualPixelFormat.dwRGBBitCount = dwbpp;\n\t\tmemset(&ddsd, 0, sizeof(ddsd));\n\t\tddsd.dwSize=sizeof(ddsd);\n\t\tSetPixFmt(&ddsd);\n\t\tSetBltTransformations(dxversion);\n\t\tif(dxw.Windowize) {\n\t\t\tOutTraceDW(\"SetDisplayMode: mode=EMULATE %s ret=OK\\n\", DumpPixelFormat(&ddsd));\n\t\t\tSetVSyncDelays(dxversion, lpdd);\n\t\t\treturn DD_OK;\n\t\t}\n\t}\n\telse{\n\t\tOutTraceDW(\"SetDisplayMode: mode=STANDARD BPP=%d\\n\", dwbpp);\n\t\tdxw.VirtualPixelFormat.dwRGBBitCount = dwbpp;\n\t\tdxw.ActualPixelFormat.dwRGBBitCount = dwbpp;\n\t}\n\n\tZeroMemory(&ddsd, sizeof(ddsd));\n\tddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_REFRESHRATE;\n\tddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);\n\tddsd.ddpfPixelFormat.dwFlags = DDPF_RGB; \n\tswitch(dxversion){\n\t\tdefault:\n\t\tcase 1: ddsd.dwSize=sizeof(LPDDSURFACEDESC); res=(*pGetDisplayMode1)(lpdd, (LPDDSURFACEDESC)&ddsd); break;\n\t\tcase 2: ddsd.dwSize=sizeof(LPDDSURFACEDESC); res=(*pGetDisplayMode2)(lpdd, (LPDDSURFACEDESC)&ddsd); break;\n\t\tcase 3: ddsd.dwSize=sizeof(LPDDSURFACEDESC); res=(*pGetDisplayMode3)(lpdd, (LPDDSURFACEDESC)&ddsd); break;\n\t\tcase 4: ddsd.dwSize=sizeof(LPDDSURFACEDESC2); res=(*pGetDisplayMode4)(lpdd, &ddsd); break;\n\t\tcase 7: ddsd.dwSize=sizeof(LPDDSURFACEDESC2); res=(*pGetDisplayMode7)(lpdd, &ddsd); break;\n\t}\n\n\tif(res){\n\t\tOutTraceE(\"SetDisplayMode: GetDisplayMode err=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t// fix for Win10 platform returning DDERR_INVALIDPARAMS\n\t\tRECT desktop;\n\t\tddsd.ddpfPixelFormat.dwRGBBitCount = 32;\n\t\t(*pGetClientRect)((*pGetDesktopWindow)(), &desktop);\n\t\tddsd.dwWidth = desktop.right;\n\t\tddsd.dwHeight = desktop.bottom;\n\t}\n\t\n\tOutTraceB(\"SetDisplayMode: detected screen size=(%dx%d)\\n\", ddsd.dwWidth, ddsd.dwHeight);\n\n\tif(dxw.Windowize){\n\t\tif(!IsChangeDisplaySettingsHotPatched){\n\t\t\tdwwidth = ddsd.dwWidth;\n\t\t\tdwheight = ddsd.dwHeight;\n\t\t}\n\t\tOutTraceDW(\"SetDisplayMode: fixing colordepth current=%d required=%d size=(%dx%d)\\n\",\n\t\t\t\tddsd.ddpfPixelFormat.dwRGBBitCount, dwbpp, dwwidth, dwheight);\n\t}\n\n\tif(dxw.dwFlags1 & EMULATESURFACE){\n\t\tdwbpp = ddsd.ddpfPixelFormat.dwRGBBitCount;\n\t}\n\n\tswitch(dxversion){\n\t\tdefault:\n\t\tcase 1: res=(*pSetDisplayMode1)(lpdd, dwwidth, dwheight, dwbpp); break;\n\t\tcase 2: res=(*pSetDisplayMode2)(lpdd, dwwidth, dwheight, dwbpp, ddsd.dwRefreshRate, 0); break;\n\t\tcase 3: res=(*pSetDisplayMode3)(lpdd, dwwidth, dwheight, dwbpp, ddsd.dwRefreshRate, 0); break;\n\t\tcase 4: res=(*pSetDisplayMode4)(lpdd, dwwidth, dwheight, dwbpp, ddsd.dwRefreshRate, 0); break;\n\t\tcase 7: res=(*pSetDisplayMode7)(lpdd, dwwidth, dwheight, dwbpp, ddsd.dwRefreshRate, 0); break;\n\t}\n\tif(res) OutTraceE(\"SetDisplayMode: error=%x(%s)\\n\", res, ExplainDDError(res));\n\n\tSetVSyncDelays(dxversion, lpdd);\n\n\t// set a default palette ???\n\tif(dxw.VirtualPixelFormat.dwRGBBitCount == 8) mySetPalette(0, 256, DefaultSystemPalette);\n\n\tif(dxw.bAutoScale) dxw.AutoScale();\n\n\treturn DD_OK;\n}\n\nHRESULT WINAPI extSetDisplayMode1(LPDIRECTDRAW lpdd, DWORD dwwidth, DWORD dwheight, DWORD dwbpp)\n{ return extSetDisplayMode(1, lpdd, dwwidth, dwheight, dwbpp, 0, 0); }\nHRESULT WINAPI extSetDisplayMode2(LPDIRECTDRAW lpdd, DWORD dwwidth, DWORD dwheight, DWORD dwbpp, DWORD dwrefreshrate, DWORD dwflags)\n{ return extSetDisplayMode(2, lpdd, dwwidth, dwheight, dwbpp, dwrefreshrate, dwflags); }\nHRESULT WINAPI extSetDisplayMode3(LPDIRECTDRAW lpdd, DWORD dwwidth, DWORD dwheight, DWORD dwbpp, DWORD dwrefreshrate, DWORD dwflags)\n{ return extSetDisplayMode(3, lpdd, dwwidth, dwheight, dwbpp, dwrefreshrate, dwflags); }\nHRESULT WINAPI extSetDisplayMode4(LPDIRECTDRAW lpdd, DWORD dwwidth, DWORD dwheight, DWORD dwbpp, DWORD dwrefreshrate, DWORD dwflags)\n{ return extSetDisplayMode(4, lpdd, dwwidth, dwheight, dwbpp, dwrefreshrate, dwflags); }\nHRESULT WINAPI extSetDisplayMode7(LPDIRECTDRAW lpdd, DWORD dwwidth, DWORD dwheight, DWORD dwbpp, DWORD dwrefreshrate, DWORD dwflags)\n{ return extSetDisplayMode(7, lpdd, dwwidth, dwheight, dwbpp, dwrefreshrate, dwflags);}\n\nHRESULT WINAPI extGetDisplayMode(int dxversion, GetDisplayMode_Type pGetDisplayMode, LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd)\n{\n\tOutTraceDDRAW(\"GetDisplayMode(D%d): lpdd=%x lpddsd=%x\\n\", dxversion, lpdd, lpddsd);\n\n\t(*pGetDisplayMode)(lpdd, lpddsd);\n\tif(dxw.dwFlags1 & EMULATESURFACE) {\n\t\tGetPixFmt((LPDDSURFACEDESC2)lpddsd);\n\t\tif(!lpddsd->ddpfPixelFormat.dwFlags) SetPixFmt((LPDDSURFACEDESC2)lpddsd);\n\t}\n\n\tdxw.dwRealScreenWidth = lpddsd->dwWidth;\n\tdxw.dwRealScreenHeight = lpddsd->dwHeight;\n\tif(dxw.Windowize){\n\t\tlpddsd->dwWidth = dxw.GetScreenWidth();\n\t\tlpddsd->dwHeight = dxw.GetScreenHeight();\n\t}\n\n\t// v2.1.96: fake screen color depth\n\t// v2.03.96: moved out from dxw.Windowize condition\n\tif((dxw.dwFlags2 & (INIT8BPP|INIT16BPP)) || (dxw.dwFlags7 & (INIT24BPP|INIT32BPP))){ // v2.02.32 fix\n\t\tif(dxw.dwFlags2 & INIT8BPP) FixPixelFormat(8, &lpddsd->ddpfPixelFormat);\n\t\tif(dxw.dwFlags2 & INIT16BPP) FixPixelFormat(16, &lpddsd->ddpfPixelFormat);\n\t\tif(dxw.dwFlags7 & INIT24BPP) FixPixelFormat(24, &lpddsd->ddpfPixelFormat);\n\t\tif(dxw.dwFlags7 & INIT32BPP) FixPixelFormat(32, &lpddsd->ddpfPixelFormat);\n\t\tOutTraceDW(\"GetDisplayMode: fix RGBBitCount=%d\\n\", lpddsd->ddpfPixelFormat.dwRGBBitCount);\n\t}\n\n\t//OutTraceDW(\"GetDisplayMode: returning WxH=(%dx%d) PixelFormat Flags=%x(%s) RGBBitCount=%d RGBAmask=(%x,%x,%x,%x) Caps=%x(%s)\\n\",\n\t//\tlpddsd->dwWidth, lpddsd->dwHeight, \n\t//\tlpddsd->ddpfPixelFormat.dwFlags, ExplainPixelFormatFlags(lpddsd->ddpfPixelFormat.dwFlags),\n\t//\tlpddsd->ddpfPixelFormat.dwRGBBitCount,\n\t//\tlpddsd->ddpfPixelFormat.dwRBitMask, lpddsd->ddpfPixelFormat.dwGBitMask, lpddsd->ddpfPixelFormat.dwBBitMask,\n\t//\tlpddsd->ddpfPixelFormat.dwRGBAlphaBitMask,\n\t//\tlpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps));\n\n\tOutTraceDDRAW(\"GetDisplayMode: returning size=(%dx%d) %s\\n\", lpddsd->dwWidth, lpddsd->dwHeight, DumpPixelFormat((LPDDSURFACEDESC2)lpddsd));\n\n\treturn DD_OK;\n}\n\nHRESULT WINAPI extGetDisplayMode1(LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd)\n{ return extGetDisplayMode(1, pGetDisplayMode1, lpdd, lpddsd); }\nHRESULT WINAPI extGetDisplayMode2(LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd)\n{ return extGetDisplayMode(2, pGetDisplayMode2, lpdd, lpddsd); }\nHRESULT WINAPI extGetDisplayMode3(LPDIRECTDRAW lpdd, LPDDSURFACEDESC lpddsd)\n{ return extGetDisplayMode(3, pGetDisplayMode3, lpdd, lpddsd); }\nHRESULT WINAPI extGetDisplayMode4(LPDIRECTDRAW lpdd, LPDDSURFACEDESC2 lpddsd)\n{ return extGetDisplayMode(4, (GetDisplayMode_Type)pGetDisplayMode4, lpdd, (LPDDSURFACEDESC)lpddsd); }\nHRESULT WINAPI extGetDisplayMode7(LPDIRECTDRAW lpdd, LPDDSURFACEDESC2 lpddsd)\n{ return extGetDisplayMode(7, (GetDisplayMode_Type)pGetDisplayMode7, lpdd, (LPDDSURFACEDESC)lpddsd); }\n\nstatic HWND CreateVirtualDesktop(LPRECT TargetPos)\n{\n\tHWND hDesktopWindow;\n\tHINSTANCE hinst=NULL;\n\n\tHWND hParent = GetDesktopWindow(); // not hooked yet !\n\thDesktopWindow=(*pCreateWindowExA)(0, \"Static\", \"DxWnd Desktop\", WS_OVERLAPPEDWINDOW, 0, 0, 0, 0, hParent, NULL, hinst, NULL);\n\tif(hDesktopWindow){\n\t\t(*pMoveWindow)(hDesktopWindow, TargetPos->left, TargetPos->top, TargetPos->right-TargetPos->left, TargetPos->bottom-TargetPos->top, TRUE);\n\t\t(*pSetWindowLong)(hDesktopWindow, GWL_STYLE, WS_OVERLAPPEDWINDOW);\n\t\t(*pShowWindow)(hDesktopWindow, SW_RESTORE);\n\t\tOutTraceDW(\"created desktop emulation: hwnd=%x\\n\", hDesktopWindow);\n\t\treturn hDesktopWindow; \n\n\t}\n\telse{\n\t\tOutTraceE(\"CreateWindowEx ERROR: err=%d at %d\\n\", GetLastError(), __LINE__);\n\t\treturn NULL;\n\t}\n}\n\nHRESULT WINAPI extSetCooperativeLevel(int dxversion, SetCooperativeLevel_Type pSetCooperativeLevel, LPDIRECTDRAW lpdd, HWND hwnd, DWORD dwflags)\n{\n\tHRESULT res;\n\tBOOL bFixFrame = FALSE;\n\n\tOutTraceDDRAW(\"SetCooperativeLevel(D%d): lpdd=%x hwnd=%x dwFlags=%x(%s)\\n\",\n\t\tdxversion, lpdd, hwnd, dwflags,ExplainCoopFlags(dwflags));\n\n\t// when SetCooperativeLevel is called for the only purpose of setting the FPU policy,\n\t// just proxy the call. Seen in \"G-Darius\".\n\tswitch(dwflags){\n\t\tcase DDSCL_FPUSETUP:\n\t\tcase DDSCL_FPUPRESERVE:\n\t\t\tres=(*pSetCooperativeLevel)(lpdd, hwnd, dwflags);\n\t\t\tif(res){\n\t\t\t\tOutTraceE(\"SetCooperativeLevel: ERROR bypass err=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\t}\n\t\t\treturn DD_OK;\n\t\t\tbreak;\n\t}\n\n\tDDSURFACEDESC2 ddsd;\n\tswitch(dxversion){\n\t\tdefault:\n\t\tcase 1: ddsd.dwSize=sizeof(DDSURFACEDESC); res=(*pGetDisplayMode1)(lpdd, (LPDDSURFACEDESC)&ddsd); break;\n\t\tcase 2: ddsd.dwSize=sizeof(DDSURFACEDESC); res=(*pGetDisplayMode2)(lpdd, (LPDDSURFACEDESC)&ddsd); break;\n\t\tcase 3: ddsd.dwSize=sizeof(DDSURFACEDESC); res=(*pGetDisplayMode3)(lpdd, (LPDDSURFACEDESC)&ddsd); break;\n\t\tcase 4: ddsd.dwSize=sizeof(DDSURFACEDESC2); res=(*pGetDisplayMode4)(lpdd, &ddsd); break;\n\t\tcase 7: ddsd.dwSize=sizeof(DDSURFACEDESC2); res=(*pGetDisplayMode7)(lpdd, &ddsd); break;\n\t}\n\tif(res){\n\t\tOutTraceE(\"SetCooperativeLevel: GetDisplayMode ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tOutTraceDW(\"InitDDScreenParameters: Actual size=(%dx%d)%s\\n\", ddsd.dwWidth, ddsd.dwHeight, DumpPixelFormat((LPDDSURFACEDESC2)&ddsd));\n\tdxw.ActualPixelFormat=ddsd.ddpfPixelFormat;\n\tif(dxw.VirtualPixelFormat.dwRGBBitCount==0) dxw.VirtualPixelFormat=ddsd.ddpfPixelFormat;\n\tSetBltTransformations(dxversion);\n\n\tif(dxw.Windowize || (dxw.dwFlags7 & NODDEXCLUSIVEMODE)){\n\t\tif (dwflags & DDSCL_FULLSCREEN){\n\n\t\t\t// v2.04.01: CREATEDESKTOP option for games that despite all efforts don't have\n\t\t\t// a valid main window, so we build one. \n\t\t\t// Fixes (somehow) \"Man TT Super Bike\".\n\t\t\tif(dxw.dwFlags6 & CREATEDESKTOP){\n\t\t\t\tstatic BOOL bDoOnce = TRUE;\n\t\t\t\tif(bDoOnce){\n\t\t\t\t\tRECT desktop = dxw.GetUnmappedScreenRect();\n\t\t\t\t\thwnd = CreateVirtualDesktop(&desktop);\n\t\t\t\t\tdxw.SethWnd(hwnd);\n\t\t\t\t\tbDoOnce=FALSE;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// v2.01.82 fix:\n\t\t\t// WARN: Tomb Raider 4 demo is setting cooperative level against hwnd 0 (desktop)\n\t\t\t// so in this case better use the registered hWnd value. Same as GP500, who uses \n\t\t\t// the desktop window handle.\n\t\t\t// v2.02.31 fix:\n\t\t\t// Hooligans - Storm over Europe wants to set cooperative level NORMAL to hwnd 0\n\t\t\t// that is legitimate, but setting against desktop window gives an error code - so\n\t\t\t// the zero hwnd redirection had to be moved within the FULLSCREEN if case.\n\t\t\tif(dxw.IsRealDesktop(hwnd)){\n\t\t\t\tOutTraceDW(\"SetCooperativeLevel: desktop hwnd=%x -> %x\\n\", hwnd, dxw.GethWnd());\n\t\t\t\thwnd=dxw.GethWnd();\n\t\t\t}\n\t\t\t// v2.03.40 fix:\n\t\t\t// WARN: \"Reah\" creates a main window undetected. Setting a FULLSCREEN cooperative level\n\t\t\t// against it is a good enough proof that this is the real main window!\n\t\t\tif(hwnd != dxw.GethWnd()){\n\t\t\t\tOutTraceDW(\"SetCooperativeLevel: setting new main hwnd=%x -> %x\\n\", dxw.GethWnd(), hwnd);\n\t\t\t\tdxw.SethWnd(hwnd);\n\t\t\t}\n\t\t\tdxw.SetFullScreen(TRUE);\n\t\t\t// v2.03.41: added suppression of DDSCL_SETDEVICEWINDOW DDSCL_CREATEDEVICEWINDOW DDSCL_SETFOCUSWINDOW used by \"PBA Bowling 2\"\n\t\t\tdwflags &= ~(DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_ALLOWMODEX | DDSCL_SETDEVICEWINDOW | DDSCL_CREATEDEVICEWINDOW | DDSCL_SETFOCUSWINDOW);\n\t\t\tdwflags |= DDSCL_NORMAL;\n\t\t\tbFixFrame = TRUE;\n\t\t}\n\t\telse{\n\t\t\t// v2.03.77: the game \"Portugal 1111\" calls SetCooperativeLevel with hwnd=0. \n\t\t\t// in such a case, you can get the window size, so better leave the previous \n\t\t\t// FullScreen setting unchanged. This is a wise politic also in case of any \n\t\t\t// sort of GetClientRect error code.\n\t\t\tif(hwnd){\n\t\t\t\tRECT client;\n\t\t\t\tBOOL ret;\n\t\t\t\tret=(*pGetClientRect)(hwnd, &client);\n\t\t\t\t// v2.02.11:\n\t\t\t\t// Non fullscreen cooperative mode means windowed, unless the window occupies the whole desktop area\n\t\t\t\tif (ret) dxw.SetFullScreen(client.right==dxw.iSizX && client.bottom==dxw.iSizY);\n\t\t\t}\n\t\t}\n\t}\n\n\tres=(*pSetCooperativeLevel)(lpdd, hwnd, dwflags);\n\tif(res){\n\t\tswitch(res){\n\t\t\tcase DDERR_EXCLUSIVEMODEALREADYSET: // v2.04.15 - \"Sid Meier's Alpha Centauri\" in non-windowed mode\n\t\t\t\tOutTraceDW(\"SetCooperativeLevel: bypass DDERR_EXCLUSIVEMODEALREADYSET\\n\");\n\t\t\t\tres = 0;\n\t\t\t\tbreak;\n\t\t\tcase DDERR_INVALIDPARAMS:\n\t\t\t\t//hwnd = GetForegroundWindow();\n\t\t\t\tPostMessage(hwnd, WM_SYSCOMMAND, SC_RESTORE, 0);\n\t\t\t\tSleep(1000);\n\t\t\t\tres=(*pSetCooperativeLevel)(lpdd, hwnd, dwflags);\n\t\t\t\tbreak;\n\t\t}\n\t\tif(res){\n\t\t\tOutTraceE(\"SetCooperativeLevel: ERROR lpdd=%x hwnd=%x Flags=%x err=%x(%s) at %d\\n\", \n\t\t\t\tlpdd, hwnd, dwflags, res, ExplainDDError(res), __LINE__);\n\t\t}\n\t}\n\n\tif(bFixFrame){\n\t\tAdjustWindowFrame(hwnd, dxw.GetScreenWidth(), dxw.GetScreenHeight());\n\t\tif ((dxw.dwFlags1 & FIXWINFRAME) || (dxw.dwFlags9 & FIXTHINFRAME)) dxw.FixWindowFrame(hwnd);\n\t}\n\n\tGetHookInfo()->IsFullScreen=dxw.IsFullScreen();\n\n\t// WARN: GP500 was setting cooperative level against the desktop! This can be partially\n\t// intercepted by hooking the GetDesktopWindow() call, but in windowed mode this can't be \n\t// done, so better repeat the check here.\n\n\tif ((res==DD_OK) && (hwnd!=NULL)){\n\t\tif (hwnd==(*pGetDesktopWindow)()){\n\t\t\tOutTraceE(\"SetCooperativeLevel: attempt to work on desktop window\\n\");\n\t\t}\n\t\telse\n\t\t\tdxw.SethWnd(hwnd); // save the good one\t\n\t}\n\n\treturn res;\n}\n\nHRESULT WINAPI extSetCooperativeLevel1(LPDIRECTDRAW lpdd, HWND hwnd, DWORD dwflags)\n{ return extSetCooperativeLevel(1, pSetCooperativeLevel1, lpdd, hwnd, dwflags); }\nHRESULT WINAPI extSetCooperativeLevel2(LPDIRECTDRAW lpdd, HWND hwnd, DWORD dwflags)\n{ return extSetCooperativeLevel(2, pSetCooperativeLevel2, lpdd, hwnd, dwflags); }\nHRESULT WINAPI extSetCooperativeLevel3(LPDIRECTDRAW lpdd, HWND hwnd, DWORD dwflags)\n{ return extSetCooperativeLevel(3, pSetCooperativeLevel3, lpdd, hwnd, dwflags); }\nHRESULT WINAPI extSetCooperativeLevel4(LPDIRECTDRAW lpdd, HWND hwnd, DWORD dwflags)\n{ return extSetCooperativeLevel(4, pSetCooperativeLevel4, lpdd, hwnd, dwflags); }\nHRESULT WINAPI extSetCooperativeLevel7(LPDIRECTDRAW lpdd, HWND hwnd, DWORD dwflags)\n{ return extSetCooperativeLevel(7, pSetCooperativeLevel7, lpdd, hwnd, dwflags); }\n\nvoid FixSurfaceCapsInner(LPDDSURFACEDESC2 lpddsd, int dxversion)\n{\t\n\t// rules of thumb:\n\t// 1) textures should be left untouched (switching to SYSTEMMEMORY when forcing HEL may even fail!)\n\t// 1.1) textures with no DDSD_PIXELFORMAT specification should have one when virtual color depth is not equal to real color depth?\n\t// 2) if a pixel format is specified, if DDSCAPS_SYSTEMMEMORY add DDSCAPS_OFFSCREENPLAY (if pixel formats are different?), otherwise do not touch anything.\n\t// 3) if the surface is used as a buffer (DDSD_WIDTH set, DDSD_HEIGHT unset) do not touch anything.\n\t// 4) zbuffer surfaces (DDSCAPS_ZBUFFER set) must have DDSCAPS_SYSTEMMEMORY \n\t// 5) DDSCAPS_3DDEVICE surfaces should have a defined pixel format\n\t// 6) in all remaining cases, adjust the pixel format and ensure you have DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN\n\n\tif(!(lpddsd->dwFlags & DDSD_CAPS)) lpddsd->ddsCaps.dwCaps = 0;\n\n\t// DDSCAPS_TEXTURE surfaces must be left untouched, unless you set FORCESHEL: in this case switch VIDEOMEMORY to SYSTEMMEMORY\n\tif((lpddsd->dwFlags & DDSD_CAPS) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_TEXTURE)){\n\t\tif (dxw.dwFlags3 & FORCESHEL) {\n\t\t\tlpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY;\n\t\t\tlpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;\n\t\t}\n\t\tif((dxw.dwFlags5 & TEXTUREFORMAT) && !(lpddsd->dwFlags & DDSD_PIXELFORMAT)){\n\t\t\t// TEXTURE: enforce PIXELFORMAT on MEMORY\n\t\t\tlpddsd->dwFlags |= DDSD_PIXELFORMAT;\n\t\t\tGetPixFmt(lpddsd); \n\t\t\t// trytry\n\t\t\t// lpddsd->ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; // OFFSCREENPLAIN to set a different pixel format\n\t\t}\n\t\tif((lpddsd->dwFlags & DDSD_PIXELFORMAT) && \n\t\t\t(lpddsd->ddpfPixelFormat.dwFlags & DDPF_FOURCC) &&\n\t\t\t(dxw.dwFlags7 & CLEARTEXTUREFOURCC)){\n\t\t\tlpddsd->ddpfPixelFormat = dxw.VirtualPixelFormat;\n\t\t\tlpddsd->ddpfPixelFormat.dwFourCC = 0;\n\t\t\tlpddsd->ddpfPixelFormat.dwFlags &= ~DDPF_FOURCC;\n\t\t}\n\t\treturn;\n\t}\n\n\tif((lpddsd->dwFlags & DDSD_CAPS) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER)) { // z-buffer surface - set to memory\n\t\tif(dxw.dwFlags8 & OFFSCREENZBUFFER) return; \n\t\tlpddsd->ddsCaps.dwCaps = DDSCAPS_ZBUFFER;  \n\t\tif (dxw.dwFlags8 & ALLOWSYSMEMON3DDEV) lpddsd->ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY|DDSCAPS_ZBUFFER;  \n\t\treturn;\n\t}\n\n\t// this is valid just in case the above block eliminated TEXTURE surfaces....\n\tif (lpddsd->dwFlags & DDSD_PIXELFORMAT){ // pixel format defined\n\t\t// trytry\n\t\t//if (lpddsd->ddsCaps.dwCaps & DDSCAPS_SYSTEMMEMORY) lpddsd->ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; // to allow for pixel format conversion (Quest for Glory 5 - GOG version)\n\t\tlpddsd->ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN;\n\t\treturn;\n\t}\n\n\t// buffer surface\n\tif ((lpddsd->dwFlags & (DDSD_WIDTH|DDSD_HEIGHT)) == DDSD_WIDTH) return;\n\n\t// 3DDEVICE no TEXTURE: enforce PIXELFORMAT\n\t// v2.02.90: added for \"Zoo Tycoon\" textures\n\t// v2.03.48 - there are two situations\n\t// \"Arx fatalis\" asks for DDSCAPS_3DDEVICE+DDSCAPS_OFFSCREENPLAIN capability and needs no DDSCAPS_SYSTEMMEMORY capability\n\t// \"Bunnies must die\" asks for DDSCAPS_3DDEVICE+DDSCAPS_OFFSCREENPLAIN+DDSCAPS_VIDEOMEMORY capability and requires DDSCAPS_SYSTEMMEMORY capability\n\t// we try to manage them by checking for the DDSCAPS_VIDEOMEMORY capability ...\n\tif((lpddsd->dwFlags & DDSD_CAPS) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE)){ \n\t\tlpddsd->dwFlags |= DDSD_PIXELFORMAT;\n\t\tGetPixFmt(lpddsd);\n\t\tif(dxw.dwFlags8 & OFFSCREENZBUFFER) {\n\t\t\t// add OFFSCREENPLAIN to set a different pixel format\n\t\t\tlpddsd->ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; \n\t\t\treturn; \n\t\t}\n\t\tif(lpddsd->ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY) \n\t\t\tlpddsd->ddsCaps.dwCaps = (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_3DDEVICE|DDSCAPS_SYSTEMMEMORY); // good for \"Bunnies must die\", NO \"Arx Fatalis\"\n\t\telse\n\t\t\tlpddsd->ddsCaps.dwCaps = (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_3DDEVICE); // good for \"Arx Fatalis\", NO \"Bunnies must die\"\n\t\treturn;\n\t}\n\n\t// default case: adjust pixel format\n\tOutTraceB(\"FixSurfaceCaps: suppress DDSCAPS_VIDEOMEMORY case\\n\");\n\tlpddsd->dwFlags |= (DDSD_CAPS|DDSD_PIXELFORMAT); \n\tif(!(dxw.dwFlags8 & OFFSCREENZBUFFER)){\n\t\tlpddsd->ddsCaps.dwCaps &= ~(DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); // v2.02.43\n\t\tlpddsd->ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN);\n\t}\n\tif(!(dxw.dwFlags3 & NOPIXELFORMAT)) GetPixFmt(lpddsd);\n\treturn;\n}\n\nvoid FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd, int dxversion)\n{\n\tOutTraceDW(\"FixSurfaceCaps:  INPUT Flags=%x(%s) Caps=%x(%s)\\n\",\n\t\tlpddsd->dwFlags, ExplainFlags(lpddsd->dwFlags), lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps));\n\n\tFixSurfaceCapsInner(lpddsd, dxversion);\n\n\tOutTraceDW(\"FixSurfaceCaps: OUTPUT Flags=%x(%s) Caps=%x(%s)\\n\",\n\t\tlpddsd->dwFlags, ExplainFlags(lpddsd->dwFlags), lpddsd->ddsCaps.dwCaps, ExplainDDSCaps(lpddsd->ddsCaps.dwCaps));\n}\n\nHRESULT WINAPI extCreateSurface1(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{ return extCreateSurface(1, (CreateSurface_Type)pCreateSurface1, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); }\nHRESULT WINAPI extCreateSurface2(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{ return extCreateSurface(2, (CreateSurface_Type)pCreateSurface2, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); }\nHRESULT WINAPI extCreateSurface3(LPDIRECTDRAW lpdd, DDSURFACEDESC *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{ return extCreateSurface(3, (CreateSurface_Type)pCreateSurface3, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); }\nHRESULT WINAPI extCreateSurface4(LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{ return extCreateSurface(4, (CreateSurface_Type)pCreateSurface4, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); }\nHRESULT WINAPI extCreateSurface7(LPDIRECTDRAW lpdd, DDSURFACEDESC2 *lpddsd, LPDIRECTDRAWSURFACE *lplpdds, void *pu)\n{ return extCreateSurface(7, (CreateSurface_Type)pCreateSurface7, lpdd, (DDSURFACEDESC2 *)lpddsd, lplpdds, pu); }\n\n\nHRESULT WINAPI extGetAttachedSurface(int dxversion, GetAttachedSurface_Type pGetAttachedSurface,\n\tLPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 lpddsc, LPDIRECTDRAWSURFACE *lplpddas)\n{\n\tHRESULT res;\n\tBOOL IsPrim;\n\tBOOL IsBack;\n\n\tIsPrim=dxwss.IsAPrimarySurface(lpdds);\n\tIsBack=dxwss.IsABackBufferSurface(lpdds);\n\tif(IsTraceDDRAW){\n\t\tchar sCaps2[60];\n\t\tstrcpy(sCaps2, \"\");\n\t\tif(dxversion >= 4) sprintf(sCaps2, \" caps2=%x caps3=%x caps4=%x\", lpddsc->dwCaps2, lpddsc->dwCaps3, lpddsc->dwCaps4);\n\t\tOutTrace(\"GetAttachedSurface(%d): lpdds=%x%s caps=%x(%s)%s\\n\", \n\t\t\tdxversion, lpdds, (IsPrim?\"(PRIM)\":(IsBack ? \"(BACK)\":\"\")), \n\t\t\tlpddsc->dwCaps, ExplainDDSCaps(lpddsc->dwCaps), sCaps2);\n\t}\n\n\tif(dxw.dwFlags1 & EMULATESURFACE){\n\n\t\t// v2.1.81: fix to make \"Silver\" working: if the primary surface was created with \n\t\t// backbuffercount == 2, the game expects some more surface to be attached to \n\t\t// the attached backbuffer. Since there would be no use for it, just return\n\t\t// the attached backbuffer itself. Makes Silver working, anyway....\n\t\t// beware: \"Snowboard Racer\" fails if you return an attached surface anyhow! There,\n\t\t// the primary surface was created with back buffer count == 1.\n\t\t// v2.2.62 fix: a check to implement doublebuffer emulation only in case of DDSCAPS_BACKBUFFER\n\t\t// requests. A call to GetAttachedSurface can be made to retrieve DDSCAPS_ZBUFFER surfaces, and in \n\t\t// this case the BackBuffer surface can't be returned.\n\t\t// v2.03.56.fix1: the double buffer trick for Silver works in generic EMULATESURFACE mode, but the\n\t\t// surface is requested also as a DDSCAPS_VIDEOMEMORY one.\n\n\t\tif (IsBack && (DDSD_Prim.dwBackBufferCount > 1) && (lpddsc->dwCaps & (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY))){ \n\t\t\t*lplpddas = lpdds;\n\t\t\tOutTraceDW(\"GetAttachedSurface(%d): DOUBLEBUFFER attached to BACK=%x\\n\", dxversion, lpdds); \n\t\t\treturn DD_OK;\n\t\t}\n\n\t\t// on primary surface return the backbuffer surface coming from either an explicit\n\t\t// AddAttachedSurface, or a primary complex surface creation otherwise....\n\n\t\tif(IsPrim && (lpddsc->dwCaps & (DDSCAPS_BACKBUFFER|DDSCAPS_FLIP))) { // v2.02.42 added DDSCAPS_FLIP for Empire Earth\n\t\t\t// in \"Tomb Raider III\" GOG release, the primary surface is queryed and has no attached\n\t\t\t// backbuffer, but a backbuffer does exist and has to be retrieved by GetBackBufferSurface.\n\t\t\tLPDIRECTDRAWSURFACE lpddsback = dxwss.GetBackBufferSurface();\n\t\t\tif (lpddsback) {\n\t\t\t\t*lplpddas = lpddsback;\n\t\t\t\tOutTraceDW(\"GetAttachedSurface(%d): BACKBUFFER attached=%x\\n\", dxversion, *lplpddas); \n\t\t\t\treturn DD_OK;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t*lplpddas = NULL;\n\t\t\t\tOutTraceDW(\"GetAttachedSurface(%d): no attached BACKBUFFER\\n\", dxversion); \n\t\t\t\treturn DDERR_NOTFOUND;\n\t\t\t}\n\t\t}\n\n\t\tif((dxw.dwFlags8 & NOHALDEVICE) && (lpddsc->dwCaps & DDSCAPS_ZBUFFER)){\n\t\t\t// tested with \"Grand Prix World\": if a ZBUFFER is returned, CreateDevice fails!\n\t\t\t*lplpddas = NULL;\n\t\t\tOutTraceDW(\"GetAttachedSurface(%d): NOHALDEVICE no attached ZBUFFER\\n\", dxversion);\n\t\t\treturn DDERR_NOTFOUND;\n\t\t}\n\n\t\t// attempt to fix S.C.A.R.S. black screen bug ... failed\n\t\t//if(lpddsc->dwCaps == (DDSCAPS_TEXTURE|DDSCAPS_MIPMAP)) lpddsc->dwCaps = DDSCAPS_TEXTURE;\n\t}\n\telse {\n\t\t// Virtual primary surfaces are created with no DDSCAPS_3DDEVICE caps, so don't look for it ....\n\t\tif(IsPrim && (lpddsc->dwCaps & (DDSCAPS_BACKBUFFER|DDSCAPS_FLIP))) \n\t\t\tlpddsc->dwCaps &= ~DDSCAPS_3DDEVICE;\n\t}\n\n\t// proxy the call...\n\n\tres=(*pGetAttachedSurface)(lpdds, (LPDDSCAPS)lpddsc, lplpddas);\n\tif(res) {\n\t\t// if possible, simulate a backbuffer attached to primary surface\n\t\tif (IsPrim && (DDSD_Prim.dwBackBufferCount > 0) && (lpddsc->dwCaps & (DDSCAPS_BACKBUFFER|DDSCAPS_FLIP))){ \n\t\t\tLPDIRECTDRAWSURFACE lpBackBuffer;\n\t\t\tlpBackBuffer = dxwss.GetBackBufferSurface();\n\t\t\tif(lpBackBuffer){\n\t\t\t\t*lplpddas = lpBackBuffer;\n\t\t\t\tOutTraceDW(\"GetAttachedSurface(%d): SIMULATE BACKBUF attach to PRIM=%x\\n\", dxversion, lpdds); \n\t\t\t\treturn DD_OK;\n\t\t\t}\n\t\t}\n\n\t\t// Warning: AVOID simulating a ZBUFFER attach to any surface that has not it really attached\n\t\t// otherwise the program steps over but crashes afterwards, as soon as it tries to use the ZBUFFER.\n\t\t// Better return the error (most programs overcome the problem) or change caps policy so that the\n\t\t// ZBUFFER becomes attached.\n\t\t// Ref: \"Arx Fatalis\", \"TOCA Touring Car Championship\"\n\n\t\tOutTraceE(\"GetAttachedSurface(%d): ERROR res=%x(%s) at %d\\n\", dxversion, res, ExplainDDError(res), __LINE__);\n\t}\n\telse {\n\t\tOutTraceDDRAW(\"GetAttachedSurface(%d): attached=%x\\n\", dxversion, *lplpddas); \n\n\t\tif(lpddsc->dwCaps & DDSCAPS_ZBUFFER){\n\t\t\tchar *sMode;\n\t\t\t// Martian Gothic and others: if the ZBUFFER is unknown, then you must register virtual capabilities \n\t\t\t// compatible with those of the original surface!\n\t\t\tDWORD dwCaps;\n\t\t\tlpDDZBuffer = *lplpddas;\n\t\t\tdwCaps = dxwss.GetCaps(*lplpddas);\n\t\t\t// v2.04.17 - beware: the caps db is not properly cleaned on surface destruction, so it may happen \n\t\t\t// that you get a fake-known case where the caps are referred to some other surface type.\n\t\t\t// Happened in \"Star Treck: Armada\" where the ZBUFFER collects an old PRIMARY caps entry.\n\t\t\tif(!dwCaps || !(dwCaps & DDSCAPS_ZBUFFER)){\n\t\t\t\tdwCaps = dxwss.GetCaps(lpdds);\n\t\t\t\tif(dwCaps){\n\t\t\t\t\tdwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_BACKBUFFER|DDSCAPS_3DDEVICE|DDSCAPS_COMPLEX);\n\t\t\t\t\tdwCaps |= DDSCAPS_ZBUFFER;\n\t\t\t\t\t//if(dwCaps & DDSCAPS_VIDEOMEMORY) dwCaps|=DDSCAPS_LOCALVIDMEM;\n\t\t\t\t\tdxwss.PushZBufferSurface(*lplpddas, dxversion, dwCaps);\n\t\t\t\t\tsMode = \"derived\";\n\t\t\t\t}\n\t\t\t\telse sMode = \"unknown\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsMode = \"known\";\n\t\t\t}\n\t\t\tOutTraceDW(\"GetAttachedSurface(%d): ZBUFFER caps=%x(%s) (%s)\\n\", dxversion, dwCaps, ExplainDDSCaps(dwCaps), sMode);\n\t\t}\n\t}\n\n\treturn res;\n\t\n}\n\nHRESULT WINAPI extGetAttachedSurface1(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS lpddsc, LPDIRECTDRAWSURFACE *lplpddas)\n{ return extGetAttachedSurface(1, pGetAttachedSurface1, lpdds, (LPDDSCAPS2)lpddsc, lplpddas); }\nHRESULT WINAPI extGetAttachedSurface2(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS lpddsc, LPDIRECTDRAWSURFACE *lplpddas)\n{ return extGetAttachedSurface(2, pGetAttachedSurface2, lpdds, (LPDDSCAPS2)lpddsc, lplpddas); }\nHRESULT WINAPI extGetAttachedSurface3(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS lpddsc, LPDIRECTDRAWSURFACE *lplpddas)\n{ return extGetAttachedSurface(3, pGetAttachedSurface3, lpdds, (LPDDSCAPS2)lpddsc, lplpddas); }\nHRESULT WINAPI extGetAttachedSurface4(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 lpddsc, LPDIRECTDRAWSURFACE *lplpddas)\n{ return extGetAttachedSurface(4, pGetAttachedSurface4, lpdds, lpddsc, lplpddas); }\nHRESULT WINAPI extGetAttachedSurface7(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 lpddsc, LPDIRECTDRAWSURFACE *lplpddas)\n{ return extGetAttachedSurface(7, pGetAttachedSurface7, lpdds, lpddsc, lplpddas); }\n\nvoid BlitError(HRESULT res, LPRECT lps, LPRECT lpd, int line)\n{\n\tchar sInfo[512];\n\tsprintf(sInfo, \"Blt: ERROR %x(%s) at %d\", res, ExplainDDError(res), line);\n\tif (res==DDERR_INVALIDRECT){\n\t\tif (lps)\n\t\t\tsprintf(sInfo, \"%s src=(%d,%d)-(%d,%d)\", sInfo, lps->left, lps->top, lps->right, lps->bottom);\n\t\telse\n\t\t\tsprintf(sInfo, \"%s src=(NULL)\", sInfo);\n\t\tif (lpd)\n\t\t\tsprintf(sInfo, \"%s dest=(%d,%d)-(%d,%d)\", sInfo, lpd->left, lpd->top, lpd->right, lpd->bottom);\n\t\telse\n\t\t\tsprintf(sInfo, \"%s dest=(NULL)\", sInfo);\n\t}\n\tstrcat(sInfo, \"\\n\");\n\tOutTrace(sInfo);\n\treturn;\n}\n\nvoid BlitTrace(char *label, LPRECT lps, LPRECT lpd, int line)\n{\n\tchar sInfo[512];\n\tsprintf(sInfo, \"[%s]\", label);\n\tif (lps)\n\t\tsprintf(sInfo, \"%s src=(%d,%d)-(%d,%d)\", sInfo, lps->left, lps->top, lps->right, lps->bottom);\n\telse\n\t\tsprintf(sInfo, \"%s src=(NULL)\", sInfo);\n\tif (lpd)\n\t\tsprintf(sInfo, \"%s dest=(%d,%d)-(%d,%d)\", sInfo, lpd->left, lpd->top, lpd->right, lpd->bottom);\n\telse\n\t\tsprintf(sInfo, \"%s dest=(NULL)\", sInfo);\n\tsprintf(sInfo, \"%s at %d\\n\", sInfo, line);\n\tOutTrace(sInfo);\n\treturn;\n}\n\nHRESULT WINAPI PrimaryBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, LPDDBLTFX lpddbltfx)\n{\n\tHRESULT res;\n\tres = (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect, GetBltWaitFlags(DDBLT_WAIT), lpddbltfx);\n\tif(res == DDERR_SURFACELOST) {\n\t\tif(lpdds->IsLost()) {\n\t\t\tOutTraceDW(\"RECOVERY of lost surface lpdds=%x\\n\", lpdds);\n\t\t\tlpdds->Restore();\n\t\t\tif(res) {\n\t\t\t\tOutTraceE(\"PrimaryBlt: Restore ERROR lpdds=%x err=%x(%s) at %d\\n\", lpdds, res, ExplainDDError(res), __LINE__);\n\t\t\t}\n\t\t}\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI PrimaryFastBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, LPDDBLTFX lpddbltfx)\n{\n\tHRESULT res;\n\tRECT client;\n\tint iXOffset, iYOffset; // offsets to center surface area to window\n\t(*pGetClientRect)(dxw.GethWnd(), &client);\n\tiXOffset = (client.right - dxw.GetScreenWidth()) >> 1;\n\tiYOffset = (client.bottom - dxw.GetScreenHeight()) >> 1;\n\tif(dxw.dwFlags3 & FORCECLIPPER){\n\t\tRECT destrect;\n\t\tdestrect.left = iXOffset + lpdestrect->left;\n\t\tdestrect.right = iXOffset + lpdestrect->right;\n\t\tdestrect.top = iYOffset + lpdestrect->top;\n\t\tdestrect.bottom = iYOffset + lpdestrect->bottom;\n\t\tres = (*pBlt)(lpdds, &destrect, lpddssrc, lpsrcrect, GetBltWaitFlags(DDBLT_WAIT), 0);\n\t}\n\telse {\n\t\tBltFast_Type pBltFast;\n\t\tswitch(dxversion){\n\t\t\tcase 1: pBltFast=pBltFast1; break;\n\t\t\tcase 2: pBltFast=pBltFast2; break;\n\t\t\tcase 3: pBltFast=pBltFast3; break;\n\t\t\tcase 4: pBltFast=pBltFast4; break;\n\t\t\tcase 7: pBltFast=pBltFast7; break;\n\t\t}\n\t\tres= (*pBltFast)(lpdds, iXOffset + lpdestrect->left, iYOffset + lpdestrect->top, lpddssrc, lpsrcrect, GetFlipWaitFlags(DDFLIP_WAIT));\n\t}\n\tif(res == DDERR_SURFACELOST) {\n\t\tif(lpdds->IsLost()) {\n\t\t\tOutTraceDW(\"RECOVERY of lost surface lpdds=%x\\n\", lpdds);\n\t\t\tres = lpdds->Restore();\n\t\t\tif(res) {\n\t\t\t\tOutTraceE(\"PrimaryBlt: Restore ERROR lpdds=%x err=%x(%s) at %d\\n\", lpdds, res, ExplainDDError(res), __LINE__);\n\t\t\t}\n\t\t}\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI PrimaryStretchBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, LPDDBLTFX lpddbltfx)\n{\n\tHRESULT res;\n\tDDSURFACEDESC2 ddsd; \n\tRECT TmpRect;\n\tLPDIRECTDRAWSURFACE lpddsTmp;\n\tLPDIRECTDRAWSURFACE lpddsBak;\n\tDDSCAPS caps;\n\tCreateSurface1_Type pCreateSurface;\n\tCreateClipper_Type pCreateClipper;\n\tSetClipper_Type pSetClipper;\n\tBltFast_Type pBltFast;\n\tint dwSize;\n\tstatic BOOL bUseFastBlt = !(dxw.dwFlags3 & FORCECLIPPER);\n\n\tswitch(iBakBufferVersion){\n\t\tdefault:\n\t\tcase 1: pBltFast=pBltFast1; pCreateSurface=pCreateSurface1; dwSize = sizeof(DDSURFACEDESC); break;\n\t\tcase 2: pBltFast=pBltFast2; pCreateSurface=(CreateSurface1_Type)pCreateSurface2; dwSize = sizeof(DDSURFACEDESC); break;\n\t\tcase 3: pBltFast=pBltFast3; pCreateSurface=(CreateSurface1_Type)pCreateSurface3; dwSize = sizeof(DDSURFACEDESC); break;\n\t\tcase 4: pBltFast=pBltFast4; pCreateSurface=(CreateSurface1_Type)pCreateSurface4; dwSize = sizeof(DDSURFACEDESC2); break;\n\t\tcase 7: pBltFast=pBltFast7; pCreateSurface=(CreateSurface1_Type)pCreateSurface7; dwSize = sizeof(DDSURFACEDESC2); break;\n\t}\n\tcaps.dwCaps = DDSCAPS_BACKBUFFER;\n\tmemset(&ddsd, 0, sizeof(ddsd));\n\tddsd.dwSize = dwSize;\n\tif(lpddssrc==NULL){\n\t\t// blit from backbuffer\n\t\tlpdds->GetAttachedSurface(&caps, &(LPDIRECTDRAWSURFACE)lpddsBak);\n\t\tif(lpddsBak == NULL) {\n\t\t\tOutTraceE(\"PrimaryStretchBlt: skip - lpddsBak=%x at %d\\n\", lpddsBak, __LINE__);\n\t\t\treturn DD_OK; // fake a success ...\n\t\t}\n\t\tlpddsBak->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd);\n\t}\n\telse{\n\t\t// blit from surface\n\t\tlpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd);\n\t}\n\tTmpRect.left = TmpRect.top = 0;\n\tTmpRect.bottom = ddsd.dwHeight = lpdestrect->bottom - lpdestrect->top;\n\tTmpRect.right  = ddsd.dwWidth  = lpdestrect->right  - lpdestrect->left;\n\tif((TmpRect.bottom==0) || (TmpRect.right==0)) return DD_OK; // avoid blitting to null areas (Fifa 2000 D3D)\n\tddsd.dwFlags = (DDSD_HEIGHT | DDSD_WIDTH | DDSD_CAPS);\n\t// capabilities must cope with primary / backbuffer surface capabilities to get speedy operations\n\tddsd.ddsCaps.dwCaps = dwBackBufferCaps;\n\tres=(*pCreateSurface)(lpPrimaryDD, (LPDDSURFACEDESC)&ddsd, &lpddsTmp, NULL);\n\tif(res) {\n\t\tOutTraceE(\"PrimaryStretchBlt: CreateSurface ERROR %x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\tOutTraceB(\"PrimaryStretchBlt: CreateSurface %s\\n\", LogSurfaceAttributes(&ddsd, \"[Gateway]\", __LINE__));\n\t\treturn res;\n\t}\n\t// stretch-blit to target size on OFFSCREENPLAIN temp surface\n\tres= (*pBlt)(lpddsTmp, &TmpRect, lpddssrc, lpsrcrect, DDBLT_WAIT, 0);\n\tif(res) {\n\t\tOutTraceE(\"PrimaryStretchBlt: Blt ERROR %x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t}\n\telse {\n\t\twhile(TRUE) {\n\t\t\tif(bUseFastBlt){\n\t\t\t\tres= (*pBltFast)(lpdds, lpdestrect->left, lpdestrect->top, lpddsTmp, &TmpRect, GetFlipWaitFlags(DDBLTFAST_WAIT));\n\t\t\t}\n\t\t\telse{\n\t\t\t\tres= (*pBlt)(lpdds, lpdestrect, lpddsTmp, &TmpRect, GetBltWaitFlags(DDBLT_WAIT), 0);\n\t\t\t}\n\t\t\tif(res == DDERR_INVALIDRECT){\n\t\t\t\tOutTraceDW(\"PrimaryStretchBlt: adding clipper ddversion=%x at %d\\n\", iDirectDrawVersion, __LINE__);\n\t\t\t\tbUseFastBlt = FALSE;\n\t\t\t\tswitch(iDirectDrawVersion){\n\t\t\t\t\tcase 1: pCreateClipper = pCreateClipper1; break;\n\t\t\t\t\tcase 2: pCreateClipper = pCreateClipper2; break;\n\t\t\t\t\tcase 3: pCreateClipper = pCreateClipper3; break;\n\t\t\t\t\tcase 4: pCreateClipper = pCreateClipper4; break;\n\t\t\t\t\tcase 7: pCreateClipper = pCreateClipper7; break;\n\t\t\t\t}\n\t\t\t\tswitch(iBakBufferVersion){\n\t\t\t\t\tcase 1: pSetClipper = pSetClipper1; break;\n\t\t\t\t\tcase 2: pSetClipper = pSetClipper2; break;\n\t\t\t\t\tcase 3: pSetClipper = pSetClipper3; break;\n\t\t\t\t\tcase 4: pSetClipper = pSetClipper4; break;\n\t\t\t\t\tcase 7: pSetClipper = pSetClipper7; break;\n\t\t\t\t}\n\t\t\t\tif(!lpddC){\n\t\t\t\t\tres=(*pCreateClipper)(lpPrimaryDD, 0, &lpddC, NULL);\n\t\t\t\t\tif(res) OutTraceE(\"CreateClipper ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t\t}\n\t\t\t\t//res=(*pSetHWnd)(lpddC, 0, dxw.GethWnd()); // no good, cliper object could be unhooked yet! \"Settlers III\" would crash!\n\t\t\t\tres=lpddC->SetHWnd(0, dxw.GethWnd());\n\t\t\t\tif(res) OutTraceE(\"SetHWnd ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t\tres=(*pSetClipper)(lpdds, lpddC);\n\t\t\t\tif(res) OutTraceE(\"SetClipper ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t\tOutTraceDW(\"PrimaryStretchBlt: added clipper lpddc=%x at %d\\n\", lpddC, __LINE__);\n\n\t\t\t\tres= (*pBlt)(lpdds, lpdestrect, lpddsTmp, &TmpRect, GetBltWaitFlags(DDBLT_WAIT), 0);\n\t\t\t}\n\t\t\tif(res) OutTraceE(\"PrimaryStretchBlt: %s ERROR %x(%s) at %d\\n\", bUseFastBlt?\"BltFast\":\"Blt\", res, ExplainDDError(res), __LINE__);\n\t\t\tif(res == DDERR_SURFACELOST){\n\t\t\t\tif(lpdds->IsLost()) {\n\t\t\t\t\tOutTraceDW(\"RECOVERY of lost surface lpdds=%x\\n\", lpdds);\n\t\t\t\t\tres = lpdds->Restore();\n\t\t\t\t\tif(res) {\n\t\t\t\t\t\tOutTraceE(\"PrimaryStretchBlt: Restore ERROR lpdds=%x err=%x(%s) at %d\\n\", lpdds, res, ExplainDDError(res), __LINE__);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(lpddsTmp->IsLost()) {\n\t\t\t\t\tOutTraceDW(\"RECOVERY of lost surface lpdds=%x\\n\", lpddsTmp);\n\t\t\t\t\tres = lpddsTmp->Restore();\n\t\t\t\t\tif(res) {\n\t\t\t\t\t\tOutTraceE(\"PrimaryStretchBlt: Restore ERROR lpdds=%x err=%x(%s) at %d\\n\", lpddsTmp, res, ExplainDDError(res), __LINE__);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!res) {\n\t\t\t\t\tOutTraceDW(\"PrimaryStretchBlt: surface sucessfully recovered, retry\\n\"); \n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n\t(*pReleaseSMethod(dxversion))(lpddsTmp);\n\treturn res;\n}\n\nvoid *LoadFilter(char *apiname)\n{\n\tHMODULE filterlib;\n\t#define MAX_FILE_PATH 512\n\tchar sSourcePath[MAX_FILE_PATH+1];\n\tchar *p;\n\tDWORD dwAttrib;\t\n\t\n\tdwAttrib = GetFileAttributes(\"dxwnd.dll\");\n\tif (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) return NULL;\n\tGetModuleFileName(GetModuleHandle(\"dxwnd\"), sSourcePath, MAX_FILE_PATH);\n\tp=&sSourcePath[strlen(sSourcePath)-strlen(\"dxwnd.dll\")];\n\n\t*p=0;\n\tSetDllDirectory(sSourcePath);\n\n\tstrcpy(p, \"filter.dll\");\n\tfilterlib=(*pLoadLibraryA)(sSourcePath);\n\tif(!filterlib) {\n\t\tOutTraceDW(\"DXWND: Load lib=\\\"%s\\\" failed err=%d\\n\", sSourcePath, GetLastError());\n\t\treturn NULL;\n\t}\n\treturn (*pGetProcAddress)(filterlib, apiname);\n}\n\nHRESULT WINAPI PrimaryBilinearBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, LPDDBLTFX lpddbltfx)\n{\n\tHRESULT res;\n\ttypedef void (WINAPI *Resize_HQ_Type)( unsigned char*, RECT *, int, unsigned char*, RECT *, int);\n\tstatic Resize_HQ_Type pResize_HQ = NULL;\n\t/* to be implemented .... */\n\n\tDDSURFACEDESC2 ddsd; \n\tRECT TmpRect, SrcRect;\n\tLPDIRECTDRAWSURFACE lpddsTmp;\n\tLPDIRECTDRAWSURFACE lpddsBak;\n\tLPDIRECTDRAWSURFACE lpddsCopy=NULL;\n\tDDSCAPS caps;\n\tBYTE *bSourceBuf, *bDestBuf;\n\tLONG dwWidth, dwHeight;\n\tint SrcPitch, DestPitch;\n\tCreateSurface1_Type pCreateSurface;\n\tBltFast_Type pBltFast;\n\tint dwSize;\n\n\tswitch(iBakBufferVersion){ // v2.04.03.fx1 fix: must use iBakBufferVersion, not dxversion!\n\t\tdefault:\n\t\tcase 1: pBltFast=pBltFast1; pCreateSurface=pCreateSurface1; dwSize = sizeof(DDSURFACEDESC); break;\n\t\tcase 2: pBltFast=pBltFast2; pCreateSurface=(CreateSurface1_Type)pCreateSurface2; dwSize = sizeof(DDSURFACEDESC); break;\n\t\tcase 3: pBltFast=pBltFast3; pCreateSurface=(CreateSurface1_Type)pCreateSurface3; dwSize = sizeof(DDSURFACEDESC); break;\n\t\tcase 4: pBltFast=pBltFast4; pCreateSurface=(CreateSurface1_Type)pCreateSurface4; dwSize = sizeof(DDSURFACEDESC2); break;\n\t\tcase 7: pBltFast=pBltFast7; pCreateSurface=(CreateSurface1_Type)pCreateSurface7; dwSize = sizeof(DDSURFACEDESC2); break;\n\t}\n\n\tcaps.dwCaps = DDSCAPS_BACKBUFFER;\n\tmemset(&ddsd, 0, sizeof(DDSURFACEDESC));\n\tddsd.dwSize = dwSize;\n\tif(lpddssrc==NULL){\n\t\t// blit from backbuffer\n\t\tlpdds->GetAttachedSurface(&caps, &lpddsBak);\n\t\tif(lpddsBak) lpddsBak->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd);\n\t}\n\telse{\n\t\t// blit from surface\n\t\tlpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd);\n\t}\n\t\n\t// assign source RECT values anyway....\n\tif(!lpsrcrect){\n\t\tlpsrcrect = &SrcRect;\n\t\tlpsrcrect->left = lpsrcrect->top = 0;\n\t\tlpsrcrect->right = dxw.GetScreenWidth();\n\t\tlpsrcrect->bottom = dxw.GetScreenHeight();\n\t}\n\n\tdwWidth = lpdestrect->right  - lpdestrect->left;\n\tdwHeight = lpdestrect->bottom - lpdestrect->top;\n\tTmpRect.left = TmpRect.top = 0;\n\tTmpRect.bottom = ddsd.dwHeight = dwHeight;\n\tTmpRect.right  = ddsd.dwWidth  = dwWidth;\n\tddsd.dwFlags = (DDSD_HEIGHT | DDSD_WIDTH | DDSD_CAPS);\n\t// capabilities must cope with primary / backbuffer surface capabilities to get speedy operations\n\tddsd.ddsCaps.dwCaps = dwBackBufferCaps;\n\tres=(*pCreateSurface)(lpPrimaryDD, (LPDDSURFACEDESC)&ddsd, &lpddsTmp, NULL);\n\tif(res) OutTraceE(\"PrimaryBilinearBlt: CreateSurface ERROR %x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\n\t// get informations\n\tmemset(&ddsd,0,dwSize);\n\tddsd.dwSize = dwSize;\n\tddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tres=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0);\n\tif(res) {\n\t\tOutTraceE(\"PrimaryBilinearBlt: Lock ERROR %x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn DD_OK;\n\t}\n\tbSourceBuf = (BYTE *)ddsd.lpSurface;\n\tSrcPitch = ddsd.lPitch;\n\tmemset(&ddsd,0,dwSize);\n\tddsd.dwSize = dwSize;\n\tddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tres=(*pLockMethod(dxversion))(lpddsTmp, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0);\n\tif(res) {\n\t\tOutTraceE(\"PrimaryBilinearBlt: Lock ERROR %x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn DD_OK;\n\t}\n\tbDestBuf = (BYTE *)ddsd.lpSurface;\n\tDestPitch = ddsd.lPitch;\n\n\t// do the filtering\n\tif(!pResize_HQ) {\n\t\tchar *filter;\n\t\tHMODULE filterlib;\n\t\tswitch(ddsd.ddpfPixelFormat.dwGBitMask)\n\t\t{\n\t\tdefault:\n\t\tcase 0x00FF00:\n\t\t\tfilter = \"Resize_HQ_4ch\";\n\t\t\tbreak;\n\t\tcase 0x0007E0: // RGB565\n\t\t\tfilter = \"Resize_HQ_2ch565\";\n\t\t\tbreak;\n\t\tcase 0x0003E0: // RGB555\n\t\t\tfilter = \"Resize_HQ_2ch555\";\n\t\t\tbreak;\n\t\t}\n\n\t\tfilterlib=(*pLoadLibraryA)(\"filter.dll\");\n\t\tif(!filterlib) {\n\t\t\tchar sMsg[80+1];\n\t\t\tsprintf(sMsg, \"DXWND: ERROR can't load lib=\\\"filter.dll\\\" err=%x\\n\", GetLastError());\n\t\t\tOutTraceE(sMsg);\n\t\t\tMessageBox(0, sMsg, \"ERROR\", MB_OK | MB_ICONEXCLAMATION);\n\t\t\texit(0);\n\t\t}\n\t\tpResize_HQ = (Resize_HQ_Type)(*pGetProcAddress)(filterlib, filter);\n\t\tif(!pResize_HQ){\n\t\t\tchar sMsg[80+1];\n\t\t\tsprintf(sMsg, \"DXWND: ERROR can't load name=\\\"%s\\\"\\n\", filter);\n\t\t\tOutTraceE(sMsg);\n\t\t\tMessageBox(0, sMsg, \"ERROR\", MB_OK | MB_ICONEXCLAMATION);\n\t\t\texit(0);\n\t\t}\n\t}\n\t(*pResize_HQ)(bSourceBuf, lpsrcrect, SrcPitch, bDestBuf, lpdestrect, DestPitch);\n\n\t// fast-blit to primary\n\t(*pUnlockMethod(dxversion))(lpddssrc, NULL);\n\t(*pUnlockMethod(dxversion))(lpddsTmp, NULL);\n\tif(dxw.dwFlags3 & FORCECLIPPER) {\n\t\tres= (*pBlt)(lpdds, lpdestrect, lpddsTmp, &TmpRect, DDBLT_WAIT, 0);\n\t\tif(res) OutTraceE(\"PrimaryBilinearBlt: Blt ERROR %x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t}\n\telse {\n\t\tres= (*pBltFast)(lpdds, lpdestrect->left, lpdestrect->top, lpddsTmp, &TmpRect, DDBLTFAST_WAIT);\n\t\tif(res) OutTraceE(\"PrimaryBilinearBlt: BltFast ERROR %x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t}\n\t(*pReleaseSMethod(dxversion))(lpddsTmp);\t\n\tif(lpddsCopy) (*pReleaseSMethod(dxversion))(lpddsCopy);\n\treturn res;\n}\n\nHRESULT WINAPI PrimaryNoBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, LPDDBLTFX lpddbltfx)\n{\n\treturn DD_OK;\n}\n\ntypedef HRESULT (WINAPI *ColorConversion_Type)(int, LPDIRECTDRAWSURFACE, RECT, LPDIRECTDRAWSURFACE *);\n\nHRESULT WINAPI ColorConversionEmulated(int dxversion, LPDIRECTDRAWSURFACE lpdds, RECT emurect, LPDIRECTDRAWSURFACE *lpddssource)\n{\n\tHRESULT res;\n\tBlt_Type pBlt;\n\tRECT srcrect, destrect;\n\tpBlt = pGetBltMethod(dxversion);\n\t// v2.04.01.fx6: copy emurect since pEmuBlt will alter values!\n\tsrcrect=destrect=emurect;\n\tres=(*pEmuBlt)(dxversion, pBlt, lpDDSEmu_Back, &destrect, lpdds, &srcrect, DDBLT_WAIT, 0);\n\tif(res==DDERR_SURFACEBUSY){\n\t\t(*pUnlockMethod(dxversion))(lpdds, NULL);\n\t\t(*pUnlockMethod(dxversion))(lpDDSEmu_Back, NULL);\n\t\t//srcrect=destrect=emurect;\n\t\t//res=(*pEmuBlt)(dxversion, pBlt, lpDDSEmu_Back, &destrect, lpdds, &srcrect, DDBLT_WAIT, 0);\n\t\tres=DD_OK;\n\t}\n\tif(res) {\n\t\tBlitError(res, &emurect, &emurect, __LINE__);\n\t\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=0;\n\t}\n\t*lpddssource = lpDDSEmu_Back;\n\treturn res;\n}\n\nHRESULT WINAPI ColorConversionGDI(int version, LPDIRECTDRAWSURFACE lpdds, RECT emurect, LPDIRECTDRAWSURFACE *lpddssource)\n{\n\t// GDICOLORCONV: use GDI capabilities to convert color depth by BitBlt-ting between different hdc\n\tHRESULT res;\n\tGetDC_Type pGetDC = pGetDCMethod();\n\tReleaseDC_Type pReleaseDC = pReleaseDCMethod();\n\tdo {\n\t\tHDC hdc_source, hdc_dest;\n\t\tres=(*pGetDC)(lpdds, &hdc_source);\n\t\tif(res) {\n\t\t\tOutTraceE(\"GetDC ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\tbreak;\n\t\t}\n\t\tres=(*pGetDC)(lpDDSEmu_Back, &hdc_dest);\n\t\tif(res) {\n\t\t\tOutTraceE(\"GetDC ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\tbreak;\n\t\t}\n\t\tif(!BitBlt(hdc_dest, 0, 0, dxw.GetScreenWidth(), dxw.GetScreenHeight(), hdc_source, 0, 0, SRCCOPY)){\n\t\t\tOutTraceE(\"BitBlt ERROR: err=%d at %d\\n\", GetLastError(), __LINE__);\n\t\t}\n\t\tres=(*pReleaseDC)(lpdds, hdc_source);\n\t\tif(res) {\n\t\t\tOutTraceE(\"ReleaseDC ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\tbreak;\n\t\t}\n\t\tres=(*pReleaseDC)(lpDDSEmu_Back, hdc_dest);\n\t\tif(res) {\n\t\t\tOutTraceE(\"ReleaseDC ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\tbreak;\n\t\t}\n\t} while(FALSE);\n\t*lpddssource = lpDDSEmu_Back;\n\treturn res;\n}\n\nHRESULT WINAPI ColorConversionDDRAW(int dxversion, LPDIRECTDRAWSURFACE lpdds, RECT emurect, LPDIRECTDRAWSURFACE *lpddssource)\n{\n\t*lpddssource = lpdds;\n\treturn DD_OK;\n}\n\nHRESULT WINAPI extFlip(int dxversion, Flip_Type pFlip, LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddssrc, DWORD dwflags)\n{\n\tBOOL IsPrim;\n\tHRESULT res;\n\tDDSURFACEDESC2 ddsd;\n\tLPDIRECTDRAWSURFACE lpddsTmp;\n\tLPDIRECTDRAWSURFACE lpDDSBack;\n\tDWORD dwBltFlags;\n\tBOOL bEmulatedFlip;\n\n\tbEmulatedFlip = dxw.Windowize || dxw.IsEmulated;\n\tIsPrim=dxwss.IsAPrimarySurface(lpdds);\n\tOutTraceDDRAW(\"Flip(%d): %s lpdds=%x%s, src=%x, flags=%x(%s)\\n\", \n\t\tdxversion, bEmulatedFlip?\"EMULATED\":\"GENUINE\",\n\t\tlpdds, IsPrim?\"(PRIM)\":\"\", lpddssrc, dwflags, ExplainFlipFlags(dwflags));\n\n\tBlt_Type pBlt;\n\tpBlt = pGetBltMethod(dxversion);\n\n\tif (!IsPrim){\n\t\tif(lpddssrc){\n\t\t\tres=(*pFlip)(lpdds, lpddssrc, dwflags);\n\t\t}\n\t\telse{\n\t\t\tLPDIRECTDRAWSURFACE lpddsAttached;\n\t\t\tDDSCAPS ddsc;\n\t\t\tDDSURFACEDESC2 sd;\n\n\t\t\tsd.dwSize=Set_dwSize_From_Surface();\n\t\t\tres=lpdds->GetSurfaceDesc((DDSURFACEDESC *)&sd);\n\t\t\tif (res) OutTraceDW(\"Flip: GetSurfaceDesc res=%x at %d\\n\",res, __LINE__);\n\n\t\t\t// replace these CAPS (good for seven kingdoms II) with same as lpdds surface\n\t\t\tddsc.dwCaps=sd.ddsCaps.dwCaps;\n\n\t\t\tres=lpdds->GetAttachedSurface(&ddsc, &lpddsAttached);\n\t\t\tif(res){\n\t\t\t\tOutTraceE(\"Flip: GetAttachedSurface ERROR %x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t\treturn res;\n\t\t\t}\n\t\t\tres=sBlt(dxversion, pBlt, \"Flip\", lpdds, NULL, lpddsAttached, NULL, DDBLT_WAIT, 0, TRUE);\n\t\t\tif(res){\n\t\t\t\tOutTraceE(\"Flip: Blt ERROR %x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\t\tif(res)\tOutTraceE(\"Flip: ERROR %x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n#ifdef HANDLEFLIPPABLE\n\tif(!bEmulatedFlip){\n\t\tdwBltFlags = GetFlipWaitFlags(dwflags);\n\t\tres=(*pFlip)(lpdds, lpddssrc, dwBltFlags);\n\t\tif(res)\tOutTraceE(\"Flip: ERROR %x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n#endif\n\n\t// emulation to primary surface Flip - you can't flip to window surfaces,\n\t// so you have to replace it with Blt operations.\n\t// v2.03.98: moved closer to actual video operations to avoid the risk of losing the end of vertical blank period\n\t// while doing calculations \n\t//if((dwflags & DDFLIP_WAIT) || (dxw.dwFlags1 & SAVELOAD)) lpPrimaryDD->WaitForVerticalBlank(DDWAITVB_BLOCKEND , 0);\n\n\tlpDDSBack = dxwss.GetBackBufferSurface();\n\n\t// from ddraw.h:\n\t// On IDirectDrawSurface7 and higher interfaces, the default is DDFLIP_WAIT. If you wish\n\t// to override the default and use time when the accelerator is busy (as denoted by\n\t// the DDERR_WASSTILLDRAWING return code) then use DDFLIP_DONOTWAIT.\n\n\tif(dxversion >= 7)\n\t\tdwBltFlags = (dwflags & DDFLIP_DONOTWAIT) ? DDBLT_DONOTWAIT : DDBLT_WAIT;\n\telse\n\t\tdwBltFlags = (dwflags & DDFLIP_WAIT) ? DDBLT_WAIT : 0;\n\n\tdwBltFlags = GetBltWaitFlags(dwBltFlags);\n\n\tif(dxw.dwFlags4 & NOFLIPEMULATION){\n\t\tHRESULT res2;\n\t\t// create a temporary working surface\n\t\tmemset(&ddsd, 0, sizeof(ddsd));\n\t\tddsd.dwSize = (dxversion <4) ? sizeof(DDSURFACEDESC) : sizeof(DDSURFACEDESC2); // v2.03.60 insidious bug fix !!!\n\t\t// v2.02.80: the BackBuffer may not exist? see \"HellCopter\"\n\t\tif(lpDDSBack){\n\t\t\t(*pGetSurfaceDescMethod())((LPDIRECTDRAWSURFACE2)lpDDSBack, &ddsd);\n\t\t\tddsd.dwFlags &= ~DDSD_PITCH;\n\t\t}\n\t\telse{\n\t\t\tddsd.dwFlags = (DDSD_HEIGHT | DDSD_WIDTH | DDSD_CAPS);\n\t\t\tddsd.ddsCaps.dwCaps = (DDSCAPS_OFFSCREENPLAIN);\n\t\t\tddsd.dwHeight = dxw.GetScreenHeight();\n\t\t\tddsd.dwWidth = dxw.GetScreenWidth();\n\t\t}\n\t\t// v2.04.09 fix: dxversion replaced with iBakBufferVersion - fixes \"Gruntz\" crash\n\t\tres2=(*pCreateSurfaceMethod(iBakBufferVersion))(lpPrimaryDD, &ddsd, &lpddsTmp, NULL); \n\t\tif(res2) {\n\t\t\tOutTraceE(\"CreateSurface: ERROR %x(%s) at %d\\n\", res2, ExplainDDError(res2), __LINE__);\n\t\t\tOutTraceE(\"Size=%d lpPrimaryDD=%x lpDDSBack=%x %s\\n\", \n\t\t\t\tddsd.dwSize, lpPrimaryDD, lpDDSBack, LogSurfaceAttributes(&ddsd, \"[FlipBuf]\", __LINE__));\n\t\t}\n\t\t//OutTrace(\"DEBUG: copied surface size=(%dx%d)\\n\", ddsd.dwWidth, ddsd.dwHeight);\n\t\t// copy front buffer \n\t\tif(dxw.dwFlags1 & EMULATESURFACE){\n\t\t\t// in emulated mode, the primary surface is virtual and you can pick it all\n\t\t\t// needed for \"Gruntz\"\n\t\t\tres2= (*pBlt)(lpddsTmp, NULL, lpdds, NULL, DDBLT_WAIT, NULL);\n\t\t\tif(res2) BlitError(res2, NULL, NULL,  __LINE__);\n\t\t}\n\t\telse {\n\t\t\t// in no-emulated mode, the primary surface is the whole screen, so you have to pick...\n\t\t\t// needed for \"Black Thorn\"\n\t\t\tRECT clip;\n\t\t\tif(dxw.dwFlags1 & EMULATEBUFFER) \n\t\t\t\tclip=dxw.GetScreenRect();\n\t\t\telse\n\t\t\tclip=dxw.GetUnmappedScreenRect();\n\t\t\tres2= (*pBlt)(lpddsTmp, NULL, lpdds, &clip, DDBLT_WAIT, NULL);\n\t\t\tif(res2) BlitError(res2, &clip, NULL,  __LINE__);\n\t\t}\n\t}\n\n\tif(lpddssrc){\n\t\t//res=lpdds->Blt(0, lpddssrc, 0, DDBLT_WAIT, 0);\n\t\tres=sBlt(dxversion, pBlt, \"Flip\", lpdds, NULL, lpddssrc, NULL, dwBltFlags, 0, TRUE);\n\t}\n\telse{\n\t\tif(!lpDDSBack){\n\t\t\tOutTraceE(\"Flip: no backbuffer\\n\");\n\t\t\treturn DDERR_INVALIDPARAMS;\n\t\t}\n\t\tif (dxw.dwFlags2 & BACKBUFATTACH){\n\t\t\tRECT NullArea;\n\t\t\tNullArea.left=NullArea.top=0;\n\t\t\tNullArea.bottom=dxw.GetScreenHeight();\n\t\t\tNullArea.right=dxw.GetScreenWidth();\n\t\t\tres=sBlt(dxversion, pBlt, \"Flip\", lpdds, NULL, lpDDSBack, &NullArea, dwBltFlags, 0, TRUE);\n\t\t}\n\t\telse\n\t\t\tres=sBlt(dxversion, pBlt, \"Flip\", lpdds, NULL, lpDDSBack, NULL, dwBltFlags, 0, TRUE);\n\n\t\tlpddssrc = lpDDSBack;\n\t}\n\n\tif(dxw.dwFlags4 & NOFLIPEMULATION){\n\t\tHRESULT res2;\n\t\t// restore flipped backbuffer and delete temporary surface\n\t\tres2= (*pBlt)(lpddssrc, NULL, lpddsTmp, NULL, DDBLT_WAIT, NULL);\n\t\tif(res2) OutTraceE(\"Blt: ERROR %x(%s) at %d\\n\", res2, ExplainDDError(res2), __LINE__);\n\t\t(*pReleaseSMethod(dxversion))(lpddsTmp);\n\t}\n\n\tif(res) OutTraceE(\"Flip: Blt ERROR %x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extFlip1(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddssrc, DWORD dwflags)\n{ return extFlip(1, pFlip1, lpdds, lpddssrc, dwflags); }\nHRESULT WINAPI extFlip2(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddssrc, DWORD dwflags)\n{ return extFlip(2, pFlip2, lpdds, lpddssrc, dwflags); }\nHRESULT WINAPI extFlip3(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddssrc, DWORD dwflags)\n{ return extFlip(3, pFlip3, lpdds, lpddssrc, dwflags); }\nHRESULT WINAPI extFlip4(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddssrc, DWORD dwflags)\n{ return extFlip(4, pFlip4, lpdds, lpddssrc, dwflags); }\nHRESULT WINAPI extFlip7(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddssrc, DWORD dwflags)\n{ return extFlip(7, pFlip7, lpdds, lpddssrc, dwflags); }\n\nHRESULT WINAPI extBlt(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx)\n{\n\tif ((dxw.dwFlags2 & FULLRECTBLT) && dxwss.IsAPrimarySurface(lpdds)){\n\t\tlpsrcrect=NULL;\n\t\tlpdestrect=NULL;\n\t}\n\n\treturn sBlt(dxversion, pBlt, \"Blt\", lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx, FALSE);\n}\n\nHRESULT WINAPI extBlt1(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx)\n{ return extBlt(1, pBlt1, lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); }\nHRESULT WINAPI extBlt2(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx)\n{ return extBlt(2, pBlt2, lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); }\nHRESULT WINAPI extBlt3(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx)\n{ return extBlt(3, pBlt3, lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); }\nHRESULT WINAPI extBlt4(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx)\n{ return extBlt(4, pBlt4, lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); }\nHRESULT WINAPI extBlt7(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx)\n{ return extBlt(7, pBlt7, lpdds, lpdestrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); }\n\nstatic HRESULT WINAPI extBltFast(int dxversion, Blt_Type pBlt, BltFast_Type pBltFast, \n\tLPDIRECTDRAWSURFACE lpdds, DWORD dwx, DWORD dwy, \n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwtrans)\n{\n\t// BltFast is supported just on screen surfaces, so it has to be replaced\n\t// by ordinary Blt operation in EMULATESURFACE mode.\n\t// Mind that screen surface doesn't necessarily mean PRIMARY surfaces!\n\n\tRECT srcrect, destrect;\n\tDWORD flags = 0;\n\tDDSURFACEDESC2 ddsd;\n\tHRESULT ret;\n\tBOOL ToPrim, FromPrim;\n\n\tToPrim=dxwss.IsAPrimarySurface(lpdds);\n\tFromPrim=dxwss.IsAPrimarySurface(lpddssrc);\n\n\tCleanRect(&lpsrcrect,__LINE__);\n\n\tif(IsTraceDDRAW){\n\t\tchar sRect[81];\n\t\tif (lpsrcrect) sprintf(sRect, \"(%d,%d)-(%d,%d)\", lpsrcrect->left, lpsrcrect->top, lpsrcrect->right, lpsrcrect->bottom);\n\t\telse strcpy(sRect, \"(NULL)\");\n\t\tOutTrace(\"BltFast(%d): dest=%x%s src=%x%s dwTrans=%x(%s) (x,y)=(%d,%d) srcrect=%s\\n\", \n\t\t\tdxversion, lpdds, ToPrim?\"(PRIM)\":\"\", lpddssrc, FromPrim?\"(PRIM)\":\"\", dwtrans, ExplainBltFastFlags(dwtrans), dwx, dwy, sRect);\n\t}\n\n\t// try the actual method first, it may work in some corcumstances....\n\t// when ret is DDERR_UNSUPPORTED try the emulated path.\n\tif(!(ToPrim || FromPrim)) {\n\t\tif(dxw.dwFlags5 & MESSAGEPUMP) dxw.MessagePump();\n\t\tret = pBltFast(lpdds, dwx, dwy, lpddssrc, lpsrcrect, dwtrans);\n\t\tif(ret != DDERR_UNSUPPORTED) {\n\t\t\tif(ret) OutTraceE(\"BltFast ERROR: res=%x(%s)\\n\", ret, ExplainDDError(ret));\n\t\t\treturn ret;\n\t\t}\n\t}\n\n\t// consistency check ....\n\t// situation found for instance in \"Warlords Battlecry II demo\".\n\tif (lpsrcrect)\n\t\tif((lpsrcrect->left >= lpsrcrect->right) || (lpsrcrect->top >= lpsrcrect->bottom)) {\n\t\t\tOutTraceDW(\"BltFast: ASSERT bad rect at %d\\n\", __LINE__);\n\t\t\treturn 0;\n\t\t}\n\n\tflags = 0;\n\tif(dwtrans & DDBLTFAST_WAIT) flags = DDBLT_WAIT;\n\tif(dwtrans & DDBLTFAST_DESTCOLORKEY) flags |= DDBLT_KEYDEST;\n\tif(dwtrans & DDBLTFAST_SRCCOLORKEY) flags |= DDBLT_KEYSRC;\n\n\tif ((dxw.dwFlags2 & FULLRECTBLT) && ToPrim){\n\t\tret = sBlt(dxversion, pBlt, \"BltFast\", lpdds, NULL, lpddssrc, lpsrcrect, flags, NULL, FALSE);\n\t\tif(ret) {\n\t\t\tOutTraceE(\"BltFast FULLRECBLT res=%x\\n\", ret);\n\t\t}\n\t\telse {\n\t\t\tOutTraceDDRAW(\"BltFast FULLRECBLT res=DD_OK\\n\");\n\t\t}\n\t\treturn ret;\n\t}\n\n\tdestrect.left = dwx;\n\tdestrect.top = dwy;\n\tif(lpsrcrect){\n\t\tdestrect.right = destrect.left + lpsrcrect->right - lpsrcrect->left;\n\t\tdestrect.bottom = destrect.top + lpsrcrect->bottom - lpsrcrect->top;\n\t\t// avoid altering pointed values....\n\t\tsrcrect=*lpsrcrect;\n\t\tret=sBlt(dxversion, pBlt, \"BltFast\", lpdds, &destrect, lpddssrc, &srcrect, flags, NULL, FALSE);\n\t}\n\telse{\n\t\t// does it EVER goes through here? NULL is not a valid rect value for BltFast call....\n\t\t// yes, forced in FULLRECTBLT mode!\n\t\t// yes, when BltFast on DDBLTFAST_SRCCOLORKEY!! (Pax Corpus)\n\t\tif(lpddssrc){\n\t\t\tddsd.dwSize=Set_dwSize_From_Surface();\n\t\t\tddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT;\n\t\t\tret=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd);\n\t\t\tif (ret){\n\t\t\t\tOutTraceE(\"BltFast: GetSurfaceDesc ERROR %x at %d\\n\", ret, __LINE__);\n\t\t\t\treturn DD_OK;\n\t\t\t}\n\t\t\tdestrect.right = destrect.left + ddsd.dwWidth;\n\t\t\tdestrect.bottom = destrect.top + ddsd.dwHeight;\n\t\t\tret=sBlt(dxversion, pBlt, \"BltFast\", lpdds, &destrect, lpddssrc, NULL, flags, NULL, FALSE);\n\t\t}\n\t\telse{\n\t\t\t//ret=sBlt(\"BltFast\", lpdds, NULL, lpddssrc, NULL, flags, NULL, FALSE);\n\t\t\tOutTraceDW(\"BltFast FAKE res=DD_OK at %d\\n\", __LINE__);\n\t\t\tret=DD_OK;\n\t\t}\n\t}\n\n\tif(ret) {\n\t\tOutTraceE(\"BltFast ERROR: res=%x(%s)\\n\", ret, ExplainDDError(ret));\n\t}\n\telse {\n\t\tOutTraceDDRAW(\"BltFast: res=DD_OK\\n\");\n\t}\n\treturn ret;\n}\n\nHRESULT WINAPI extBltFast1(LPDIRECTDRAWSURFACE lpdds, DWORD dwx, DWORD dwy, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwtrans)\n{ return extBltFast(1, pBlt1, pBltFast1, lpdds, dwx, dwy, lpddssrc, lpsrcrect, dwtrans); }\nHRESULT WINAPI extBltFast2(LPDIRECTDRAWSURFACE lpdds, DWORD dwx, DWORD dwy, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwtrans)\n{ return extBltFast(2, pBlt2, pBltFast2, lpdds, dwx, dwy, lpddssrc, lpsrcrect, dwtrans); }\nHRESULT WINAPI extBltFast3(LPDIRECTDRAWSURFACE lpdds, DWORD dwx, DWORD dwy, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwtrans)\n{ return extBltFast(3, pBlt3, pBltFast3, lpdds, dwx, dwy, lpddssrc, lpsrcrect, dwtrans); }\nHRESULT WINAPI extBltFast4(LPDIRECTDRAWSURFACE lpdds, DWORD dwx, DWORD dwy, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwtrans)\n{ return extBltFast(4, pBlt4, pBltFast4, lpdds, dwx, dwy, lpddssrc, lpsrcrect, dwtrans); }\nHRESULT WINAPI extBltFast7(LPDIRECTDRAWSURFACE lpdds, DWORD dwx, DWORD dwy, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwtrans)\n{ return extBltFast(7, pBlt7, pBltFast7, lpdds, dwx, dwy, lpddssrc, lpsrcrect, dwtrans); }\n\nHRESULT WINAPI extWaitForVerticalBlank(WaitForVerticalBlank_Type pWaitForVerticalBlank, LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE hevent)\n{\n\t// set a global to avoid double calls\n\tbVSyncDone = TRUE;\n\n\tif(dxw.dwFlags8 & FORCENOVSYNC) return DD_OK;\n\n\tif(dxw.dwFlags1 & SAVELOAD){\n\t\tdxw.VSyncWait();\n\t\treturn DD_OK;\n\t}\n\n\tif(dxw.dwFlags8 & VSYNCSCANLINE){\n\t\tdxw.VSyncWaitLine(((DWORD)dxw.ScanLine * 100) / dxw.GetScreenHeight());\n\t\treturn DD_OK;\n\t}\n\n\treturn (*pWaitForVerticalBlank)(lpdd, dwflags, hevent);\n}\n\nHRESULT WINAPI extWaitForVerticalBlank1(LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE hevent)\n{ return extWaitForVerticalBlank(pWaitForVerticalBlank1, lpdd, dwflags, hevent); }\nHRESULT WINAPI extWaitForVerticalBlank2(LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE hevent)\n{ return extWaitForVerticalBlank(pWaitForVerticalBlank2, lpdd, dwflags, hevent); }\nHRESULT WINAPI extWaitForVerticalBlank3(LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE hevent)\n{ return extWaitForVerticalBlank(pWaitForVerticalBlank3, lpdd, dwflags, hevent); }\nHRESULT WINAPI extWaitForVerticalBlank4(LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE hevent)\n{ return extWaitForVerticalBlank(pWaitForVerticalBlank4, lpdd, dwflags, hevent); }\nHRESULT WINAPI extWaitForVerticalBlank7(LPDIRECTDRAW lpdd, DWORD dwflags, HANDLE hevent)\n{ return extWaitForVerticalBlank(pWaitForVerticalBlank7, lpdd, dwflags, hevent); }\n\n#define DDPCAPS_INITIALIZE_LEGACY 0x00000008l\n\nHRESULT WINAPI extCreatePalette(int version, CreatePalette_Type pCreatePalette, \n\tLPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)\n{\n\tHRESULT res;\n\n\tOutTraceDDRAW(\"CreatePalette: lpdd=%x dwFlags=%x(%s)\\n\", lpdd, dwflags, ExplainCreatePaletteFlags(dwflags));\n\tif(IsDebug && (dwflags & DDPCAPS_8BIT)) dxw.DumpPalette(256, lpddpa);\n\n\tif(dxw.dwFlags1 & EMULATESURFACE) dwflags &= ~DDPCAPS_PRIMARYSURFACE;\n\tres = (*pCreatePalette)(lpdd, dwflags, lpddpa, lplpddp, pu);\n\tif (res) {\n\t\tOutTraceE(\"CreatePalette: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\n\tOutTraceDDRAW(\"CreatePalette: OK lpddp=%x\\n\", *lplpddp);\n\tHookDDPalette(lplpddp);\n\treturn DD_OK;\n}\n\nHRESULT WINAPI extCreatePalette1(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)\n{ return extCreatePalette(1, (CreatePalette_Type)pCreatePalette1, lpdd, dwflags, lpddpa, lplpddp, pu); }\nHRESULT WINAPI extCreatePalette2(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)\n{ return extCreatePalette(2, (CreatePalette_Type)pCreatePalette2, lpdd, dwflags, lpddpa, lplpddp, pu); }\nHRESULT WINAPI extCreatePalette3(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)\n{ return extCreatePalette(3, (CreatePalette_Type)pCreatePalette3, lpdd, dwflags, lpddpa, lplpddp, pu); }\nHRESULT WINAPI extCreatePalette4(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)\n{ return extCreatePalette(4, (CreatePalette_Type)pCreatePalette4, lpdd, dwflags, lpddpa, lplpddp, pu); }\nHRESULT WINAPI extCreatePalette7(LPDIRECTDRAW lpdd, DWORD dwflags, LPPALETTEENTRY lpddpa, LPDIRECTDRAWPALETTE *lplpddp, IUnknown *pu)\n{ return extCreatePalette(7, (CreatePalette_Type)pCreatePalette7, lpdd, dwflags, lpddpa, lplpddp, pu); }\n\nHRESULT WINAPI extGetPalette(int dxversion, GetPalette_Type pGetPalette, LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lplpddp)\n{\n\tHRESULT res;\n\tBOOL isPrim, isBack;\n\n\tisPrim=dxwss.IsAPrimarySurface(lpdds);\n\tisBack=dxwss.IsABackBufferSurface(lpdds);\n\tOutTraceDDRAW(\"GetPalette(%d): lpdds=%x%s%s\\n\", dxversion, lpdds, isPrim?\"(PRIM)\":\"\", isBack?\"(BACK)\":\"\");\n\n\tres = DD_OK;\n\tlpdds->AddRef();\n\tif(lpdds->Release()) res=(*pGetPalette)(lpdds, lplpddp);\n\n\t// v2.03.07: in \"Die Hard Trilogy\" the backbuffer surface is queryed for the palette\n    // v2.03.08: in \"Viper Racing\" lpDDP is still NULL (how could it be?)\n\tif((dxw.dwFlags1 & EMULATESURFACE) && (res == DDERR_NOPALETTEATTACHED) && (isPrim||isBack) && lpDDP){\n\t\tOutTraceDW(\"GetPalette: retrieve PRIMARY palette for emulated surface lpDDP=%x\\n\", lpDDP);\n\t\t*lplpddp = lpDDP;\n\t\tlpDDP->AddRef();\n\t\tiDDPExtraRefCounter++;\n\t\tres=DD_OK;\n\t}\n\n\tif (res) {\n\t\tOutTraceE(\"GetPalette: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t}\n\telse {\n\t\tOutTraceDDRAW(\"GetPalette: OK lplpddp=%x\\n\", *lplpddp);\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extGetPalette1(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lplpddp)\n{ return extGetPalette(1, pGetPalette1, lpdds, lplpddp); }\nHRESULT WINAPI extGetPalette2(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lplpddp)\n{ return extGetPalette(2, pGetPalette2, lpdds, lplpddp); }\nHRESULT WINAPI extGetPalette3(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lplpddp)\n{ return extGetPalette(3, pGetPalette3, lpdds, lplpddp); }\nHRESULT WINAPI extGetPalette4(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lplpddp)\n{ return extGetPalette(4, pGetPalette4, lpdds, lplpddp); }\nHRESULT WINAPI extGetPalette7(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lplpddp)\n{ return extGetPalette(7, pGetPalette7, lpdds, lplpddp); }\n\nHRESULT WINAPI extSetPalette(int dxversion, SetPalette_Type pSetPalette, LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpddp)\n{\n\tPALETTEENTRY *lpentries;\n\tBOOL isPrim;\n\tHRESULT res;\n\t\n\tisPrim=dxwss.IsAPrimarySurface(lpdds);\n\tOutTraceDDRAW(\"SetPalette(%d): lpdds=%x%s lpddp=%x\\n\", dxversion, lpdds, isPrim?\"(PRIM)\":\"\", lpddp);\n\n\tres=(*pSetPalette)(lpdds, lpddp);\n\tif(res){\n\t\tOutTraceE(\"SetPalette: ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t// from MSDN, about lpddp:\n\t\t// A pointer to the IDirectDrawPalette interface for the palette object to be used with this surface. \n\t\t// If NULL, the current palette is detached.\n\t\tif(lpddp) lpddp->AddRef(); // to allow final Release() without crash - fixes \"Heavy Gear\" crash at end of mission\n\t}\n\telse OutTraceDDRAW(\"SetPalette: OK\\n\");\n\tres=DD_OK;\n\n\tif((dxw.dwFlags1 & EMULATESURFACE) && isPrim){\n\t\tOutTraceDW(\"SetPalette: register PRIMARY palette lpDDP=%x\\n\", lpddp);\n\t\tlpDDP = lpddp;\n\t\tLPDIRECTDRAWSURFACE lpDDSBack;\n\t\tif(lpddp){\n\t\t\tHRESULT res2;\n\t\t\tlpentries = (LPPALETTEENTRY)PaletteEntries;\n\t\t\tres2=lpddp->GetEntries(0, 0, 256, lpentries);\n\t\t\tif(res2) OutTraceE(\"SetPalette: GetEntries ERROR res=%x(%s)\\n\", res2, ExplainDDError(res2));\n\t\t\tmySetPalette(0, 256, lpentries); // v2.02.76: necessary for \"Requiem Avenging Angel\" in SURFACEEMULATION mode\n\t\t}\n\t\t// Apply palette to backbuffer surface. This is necessary on some games: \"Duckman private dick\", \"Total Soccer 2000\", ...\n\t\tlpDDSBack = dxwss.GetBackBufferSurface();\n\t\tif (lpDDSBack){\n\t\t\t\tOutTraceDW(\"SetPalette: apply PRIMARY palette lpDDP=%x to DDSBack=%x\\n\", lpddp, lpDDSBack);\n\t\t\t\tres=(*pSetPalette)(lpDDSBack, lpddp);\n\t\t\t\tif(res) OutTraceE(\"SetPalette: ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t}\n\t\t// add a reference to simulate what would happen in reality....\n\t\tif(lpddp) lpdds->AddRef();\n\t\tres=DD_OK;\n\t}\n\n\treturn res;\n}\n\nHRESULT WINAPI extSetPalette1(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpddp)\n{ return extSetPalette(1, pSetPalette1, lpdds, lpddp); }\nHRESULT WINAPI extSetPalette2(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpddp)\n{ return extSetPalette(2, pSetPalette2, lpdds, lpddp); }\nHRESULT WINAPI extSetPalette3(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpddp)\n{ return extSetPalette(3, pSetPalette3, lpdds, lpddp); }\nHRESULT WINAPI extSetPalette4(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpddp)\n{ return extSetPalette(4, pSetPalette4, lpdds, lpddp); }\nHRESULT WINAPI extSetPalette7(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpddp)\n{ return extSetPalette(7, pSetPalette7, lpdds, lpddp); }\n\nHRESULT WINAPI extSetEntries(LPDIRECTDRAWPALETTE lpddp, DWORD dwflags, DWORD dwstart, DWORD dwcount, LPPALETTEENTRY lpentries)\n{\n\tHRESULT res;\n\n\tOutTraceDDRAW(\"SetEntries: lpddp=%x dwFlags=%x, start=%d, count=%d entries=%x\\n\", //GHO: added trace infos\n\t\tlpddp, dwflags, dwstart, dwcount, lpentries);\n\tif(IsDebug) dxw.DumpPalette(dwcount, &lpentries[dwstart]);\n\n\tif((dxw.dwFlags1 & EMULATESURFACE) && (lpDDP == lpddp)){\n\t\tOutTraceDW(\"SetEntries: update PRIMARY palette lpDDP=%x\\n\", lpddp);\n\t\tif ((dwstart + dwcount > 256) || (dwstart<0)){\n\t\t\tdwcount=256;\n\t\t\tdwstart=0;\n\t\t\tOutTraceDW(\"SetEntries: ASSERT start+count > 256\\n\");\n\t\t}\n\n\t\tmySetPalette(dwstart, dwcount, lpentries);\n\n\t\t// GHO: needed for fixed rect and variable palette animations, \n\t\t// e.g. dungeon keeper loading screen, Warcraft II splash, ...\n\t\t// GHO: but refreshing cause flickering when GDI was used without updating the primary surface\n\t\t// e.g. Tomb Raider 2 intro titles, Virtua Fighter PC, ...\n\t\t// v2.03.10: do not blit also in case of GDI mode\n\t\tif ((dxw.dwFlags1 & EMULATESURFACE) && !(dxw.dwFlags2 & NOPALETTEUPDATE) && !(dxw.dwFlags5 & GDIMODE)) dxw.ScreenRefresh();\n\t}\n\t\n\t// this part (setentry against all surfaces, including virtual primary) can be necessary whenever the game uses mixed access to the \n\t// screen (like ddraw & GDI) and is necessary on \"Road Rash\".\n\tres = (*pSetEntries)(lpddp, dwflags, dwstart, dwcount, lpentries);\n\tif(res) OutTraceE(\"SetEntries: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\telse OutTraceDDRAW(\"SetEntries: OK\\n\");\n\treturn res;\n}\n\nstatic HRESULT WINAPI extSetClipper(int dxversion, SetClipper_Type pSetClipper, LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc)\n{\n\tHRESULT res;\n\tBOOL isPrim;\n\tisPrim=dxwss.IsAPrimarySurface(lpdds);\n\tOutTraceDDRAW(\"SetClipper(%d): lpdds=%x%s lpddc=%x\\n\", dxversion, lpdds, isPrim?\"(PRIM)\":\"\", lpddc);\n\n\t// v2.1.84: SUPPRESSCLIPPING flag - improves \"Monopoly Edition 3D\" where continuous\n\t// clipping ON & OFF affects blitting on primary surface.\n\t// Needed also to avoid \"New Yourk Racer\" intro movie clipping.\n\tif(dxw.dwFlags1 & SUPPRESSCLIPPING) return 0;\n\n\tif(dxw.IsEmulated){\n\t\tif (dxw.dwFlags3 & FORCECLIPPER){\n\t\t\t// v2.03.48: FORCECLIPPER ensures that a valid clipper is issued on the real primary surface\n\t\t\t// and on the main game window. Then, you won't be able to BltFast any longer....\n\t\t\tif ((isPrim || dxwss.IsABackBufferSurface(lpdds)) && lpDDSEmu_Prim){\n\t\t\t\tOutTraceDW(\"SetClipper: redirect surface to primary hwnd=%x lpdds=%x%s->%x\\n\", \n\t\t\t\t\tdxw.GethWnd(), lpdds, isPrim?\"(PRIM)\":\"\", lpDDSEmu_Prim);\n\t\t\t\tres=(*pSetHWnd)(lpddc, 0, dxw.GethWnd());\n\t\t\t\t//res=lpddc->SetHWnd(0, dxw.GethWnd());\n\t\t\t\tif (res) OutTraceE(\"SetClipper: SetHWnd ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\t\tres=(*pSetClipper)(lpDDSEmu_Prim, lpddc);\n\t\t\t\tif (res) OutTraceE(\"SetClipper: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif ((isPrim && lpDDSEmu_Prim) || \n\t\t\t\t(dxwss.IsABackBufferSurface(lpdds) && lpDDSEmu_Back)){\n\t\t\t\tOutTraceDW(\"SetClipper: skip primary/backbuffer lpdds=%x\\n\", lpdds);\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t}\n\t\t\t\n\tres=(*pSetClipper)(lpdds, lpddc);\n\n\tif (res)\n\t\tOutTraceE(\"SetClipper: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extSetClipper1(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc)\n{ return extSetClipper(1, pSetClipper1, lpdds, lpddc); }\nHRESULT WINAPI extSetClipper2(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc)\n{ return extSetClipper(2, pSetClipper2, lpdds, lpddc); }\nHRESULT WINAPI extSetClipper3(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc)\n{ return extSetClipper(3, pSetClipper3, lpdds, lpddc); }\nHRESULT WINAPI extSetClipper4(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc)\n{ return extSetClipper(4, pSetClipper4, lpdds, lpddc); }\nHRESULT WINAPI extSetClipper7(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWCLIPPER lpddc)\n{ return extSetClipper(7, pSetClipper7, lpdds, lpddc); }\n\nDDSURFACEDESC SaveSurfaceDesc;\nLPDIRECTDRAWSURFACE SaveSurface = NULL;\nLPRECT SaveLockedlpRect = NULL;\nRECT SaveLockedRect;\nLPDIRECTDRAWSURFACE SaveLockedSurface = NULL;\n\nstatic void PushLockedRect(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect)\n{\n\tSaveLockedSurface = lpdds;\n\tSaveLockedlpRect = lprect;\n\tif(SaveLockedlpRect) SaveLockedRect = *lprect;\n}\n\nstatic LPRECT PopLockedRect(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect)\n{\n\tif(lpdds == SaveLockedSurface){\n\t\tSaveLockedSurface = NULL;\n\t\treturn SaveLockedlpRect;\n\t}\n\telse \n\t\treturn lprect;\n}\n\nstatic HRESULT WINAPI extLock(int dxversion, Lock_Type pLock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent)\n{\n\tHRESULT res;\n\n\tCleanRect(&lprect, __LINE__);\n\n\tif(IsTraceDDRAW){\n\t\tBOOL IsPrim=dxwss.IsAPrimarySurface(lpdds);\n\t\tchar sRect[81];\n\t\tif (lprect) sprintf_s(sRect, 80, \"(%d,%d)-(%d,%d)\", lprect->left, lprect->top, lprect->right, lprect->bottom);\n\t\telse strcpy(sRect, \"(NULL)\");\n\t\tOutTrace(\"Lock(%d): lpdds=%x%s flags=%x(%s) lpDDSurfaceDesc=%x rect=%s\\n\", \n\t\t\tdxversion, lpdds, (IsPrim ? \"(PRIM)\":\"\"), flags, ExplainLockFlags(flags), lpDDSurfaceDesc, sRect);\n\t}\n\n\tPushLockedRect(lpdds, lprect);\n\n\tres=(*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent);\n\tif(res==DDERR_SURFACEBUSY){ // v70: fix for \"Ancient Evil\"\n\t\t(*pUnlockMethod(dxversion))(lpdds, NULL);\n\t\tres = (*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent);\n\t\tOutTraceDW(\"Lock SURFACEBUSY RETRY: ret=%x(%s)\\n\", res, ExplainDDError(res));\n\t}\n\tif(res==DDERR_SURFACELOST){ \n\t\tlpdds->Restore();\n\t\tres = (*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent);\n\t\tOutTraceDW(\"Lock SURFACELOST RETRY: ret=%x(%s)\\n\", res, ExplainDDError(res));\n\t}\n\tif(res) OutTraceE(\"Lock ERROR: ret=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\tOutTraceB(\"Lock: lPitch=%d lpSurface=%x %s\\n\", \n\t\tlpDDSurfaceDesc->lPitch, lpDDSurfaceDesc->lpSurface, LogSurfaceAttributes((LPDDSURFACEDESC2)lpDDSurfaceDesc, \"[Locked]\", __LINE__));\n\n\t// v2.03.60: necessary for \"Mech Commander 2\"\n\tif(dxw.dwFlags6 & SETZBUFFERBITDEPTHS) \n\t\tlpDDSurfaceDesc->dwZBufferBitDepth = dxw.VirtualPixelFormat.dwRGBBitCount;\n\n\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;\n\t\n\tif((dxw.dwFlags6 & FIXPITCH) || (dxw.dwFlags3 & MARKLOCK)){\n\t\tSaveSurfaceDesc = *lpDDSurfaceDesc;\n\t\tSaveSurface = lpdds;\n\t}\n\n\treturn res;\n}\n\nHRESULT WINAPI extLock1(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent)\n{ return extLock(1, pLock1, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); }\nHRESULT WINAPI extLock2(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent)\n{ return extLock(2, pLock2, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); }\nHRESULT WINAPI extLock3(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent)\n{ return extLock(3, pLock3, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); }\nHRESULT WINAPI extLock4(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent)\n{ return extLock(4, pLock4, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); }\nHRESULT WINAPI extLock7(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent)\n{ return extLock(7, pLock7, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); }\n\nLPDIRECTDRAWSURFACE2 lpDDSBuffer = NULL;\n\nstatic HRESULT WINAPI extLockDir(int dxversion, Lock_Type pLock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent)\n{\n\tHRESULT res, res2;\n\tstatic RECT client;\n\tPOINT upleft={0,0};\n\tBlt_Type pBlt;\n\tGetGDISurface_Type pGetGDISurface;\n\n\t// this hooker operates on \n\t// Beware!!! for strange reason, the function gets hooked to ANY surface, also non primary ones!!!\n\t// to find out whether it is the primary or not, using lpdds==lpPrimaryDD->GetGDISurface(&lpDDSPrim);\n\n\tif(IsTraceDDRAW){\n\t\tBOOL IsPrim=dxwss.IsAPrimarySurface(lpdds);\n\t\tchar sRect[81];\n\t\tif (lprect) sprintf_s(sRect, 80, \"(%d,%d)-(%d,%d)\", lprect->left, lprect->top, lprect->right, lprect->bottom);\n\t\telse strcpy(sRect, \"(NULL)\");\n\t\tOutTrace(\"Lock(%d): lpdds=%x%s flags=%x(%s) lpDDSurfaceDesc=%x rect=%s\\n\", \n\t\t\tdxversion, lpdds, (IsPrim ? \"(PRIM)\":\"\"), flags, ExplainLockFlags(flags), lpDDSurfaceDesc, sRect);\n\t}\n\n\tPushLockedRect(lpdds, lprect);\n\n\t// v2.04.09: for IDirectDraw methods use iBakBufferVersion instead of dxversion ...\n\tpBlt = pGetBltMethod(dxversion);\n\tpGetGDISurface = pGetGDISurfaceMethod(iBakBufferVersion);\n\n\t// V2.02.43: Empire Earth does some test Lock operations apparently before the primary surface is created\n\tif(lpPrimaryDD){\n\t\tLPDIRECTDRAWSURFACE lpDDSPrim = 0;\n\t\tres2=(*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim);\n\t\tif(res2)\n\t\t\tOutTraceE(\"Lock: GetGDISurface ERROR res=%x(%s) at %d\\n\", res2, ExplainDDError(res2), __LINE__);\n\t\telse\n\t\t\t(*pReleaseSMethod(dxversion))(lpDDSPrim);\n\t\tif(lpdds==lpDDSPrim){\n\t\t\tif(dxw.dwFlags1 & LOCKEDSURFACE){\n\t\t\t\tDDSURFACEDESC2 ddsd;\n\t\t\t\tDDBLTFX fx;\n\t\t\t\tmemset(&ddsd, 0, sizeof(ddsd));\n\t\t\t\tddsd.dwSize=sizeof(DDSURFACEDESC);\n\t\t\t\tddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS;\n\t\t\t\tddsd.dwWidth = dxw.GetScreenWidth();\n\t\t\t\tddsd.dwHeight = dxw.GetScreenHeight();\n\t\t\t\tddsd.ddsCaps.dwCaps = 0;\n\t\t\t\tOutTraceB(\"Lock: %s\\n\", LogSurfaceAttributes(&ddsd, \"[Dir FixBuf]\" , __LINE__));\n\t\t\t\tres=(*pCreateSurface1)(lpPrimaryDD, (DDSURFACEDESC *)&ddsd, (LPDIRECTDRAWSURFACE *)&lpDDSBuffer, 0);\n\t\t\t\tif(res){\n\t\t\t\t\tOutTraceE(\"CreateSurface: ERROR on DDSBuffer res=%x(%s) at %d\\n\",res, ExplainDDError(res), __LINE__);\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t\tmemset(&fx, 0, sizeof(fx));\n\t\t\t\tfx.dwSize=sizeof(DDBLTFX);\n\t\t\t\tfx.dwFillColor=0;\n\t\t\t\tres=(*pBlt)((LPDIRECTDRAWSURFACE)lpDDSBuffer, NULL, NULL, NULL, DDBLT_WAIT|DDBLT_COLORFILL, &fx);\n\t\t\t\tif(res){\n\t\t\t\t\tOutTraceE(\"Blt: ERROR on DDSBuffer res=%x(%s) at %d\\n\",res, ExplainDDError(res), __LINE__);\n\t\t\t\t}\n\t\t\t\tlpdds=(LPDIRECTDRAWSURFACE)lpDDSBuffer;\n\t\t\t}\n\t\t\telse{\n\t\t\t\t// since it can't scale, at least the updated rect is centered into the window.\n\t\t\t\tHWND hwnd;\n\t\t\t\thwnd = dxw.GethWnd();\n\t\t\t\t(*pGetClientRect)(hwnd, &client);\n\t\t\t\t(*pClientToScreen)(hwnd, &upleft);\n\t\t\t\tif (!lprect) lprect=&client;\n\t\t\t\tOffsetRect(lprect, \n\t\t\t\t\tupleft.x+(client.right-dxw.GetScreenWidth())/2, \n\t\t\t\t\tupleft.y+(client.bottom-dxw.GetScreenHeight())/2);\n\t\t\t\tOutTraceDW(\"Lock: NULL rect remapped to (%d,%d)-(%d,%d)\\n\", \n\t\t\t\t\tlprect->left, lprect->top, lprect->right, lprect->bottom);\n\t\t\t}\n\t\t}\n\t}\n\n\tres=(*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent);\n\tif(res==DDERR_SURFACEBUSY){ // v70: fix for \"Ancient Evil\"\n\t\t(*pUnlockMethod(dxversion))(lpdds, NULL);\n\t\tres = (*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent);\n\t\tOutTraceDW(\"Lock SURFACEBUSY RETRY: ret=%x(%s)\\n\", res, ExplainDDError(res));\n\t}\n\tif(res==DDERR_SURFACELOST){ \n\t\tlpdds->Restore();\n\t\tres = (*pLock)(lpdds, lprect, lpDDSurfaceDesc, flags, hEvent);\n\t\tOutTraceDW(\"Lock SURFACELOST RETRY: ret=%x(%s)\\n\", res, ExplainDDError(res)); \n\t}\n\n\tif(res) OutTraceE(\"Lock ERROR: ret=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\tOutTraceB(\"Lock: lPitch=%d lpSurface=%x %s\\n\", \n\t\tlpDDSurfaceDesc->lPitch, lpDDSurfaceDesc->lpSurface, LogSurfaceAttributes((LPDDSURFACEDESC2)lpDDSurfaceDesc, \"[Locked]\", __LINE__));\n\n\t// v2.03.60: necessary for \"Mech Commander 2\"\n\tif(dxw.dwFlags6 & SETZBUFFERBITDEPTHS) \n\t\tlpDDSurfaceDesc->dwZBufferBitDepth = dxw.VirtualPixelFormat.dwRGBBitCount;\n\t\n\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;\n\n\tif((dxw.dwFlags6 & FIXPITCH) || (dxw.dwFlags3 & MARKLOCK)){\n\t\tSaveSurfaceDesc = *lpDDSurfaceDesc;\n\t\tSaveSurface = lpdds;\n\t}\n\n\treturn res;\n}\n\nHRESULT WINAPI extLockDir1(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent)\n{ return extLockDir(1, pLock1, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); }\nHRESULT WINAPI extLockDir2(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent)\n{ return extLockDir(2, pLock2, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); }\nHRESULT WINAPI extLockDir3(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent)\n{ return extLockDir(3, pLock3, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); }\nHRESULT WINAPI extLockDir4(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent)\n{ return extLockDir(4, pLock4, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); }\nHRESULT WINAPI extLockDir7(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD flags, HANDLE hEvent)\n{ return extLockDir(7, pLock7, lpdds, lprect, lpDDSurfaceDesc, flags, hEvent); }\n\n#define MARK16COLOR 0x7C1F\n#define MARK32COLOR 0x00FF00FF\n\nstatic HRESULT WINAPI extUnlock(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect)\n{\n\tHRESULT res;\n\tBOOL IsPrim;\n\tBOOL IsBack;\n\tBlt_Type pBlt;\n\tRECT rect;\n\n\tIsPrim=dxwss.IsAPrimarySurface(lpdds);\n\tIsBack=dxwss.IsABackBufferSurface(lpdds);\n\n\tif(IsTraceDDRAW){\n\t\tchar sRect[81];\n\t\tswitch(dxversion){\n\t\t\tcase 1:\n\t\t\tcase 2:\n\t\t\tcase 3:\n\t\t\t\tsprintf_s(sRect, 80, \"lpvoid=%x\", lprect);\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\tcase 7:\n\t\t\t\tif (lprect) sprintf_s(sRect, 80, \"rect=(%d,%d)-(%d,%d)\", lprect->left, lprect->top, lprect->right, lprect->bottom);\n\t\t\t\telse strcpy(sRect, \"rect=(NULL)\");\n\t\t\t\tbreak;\n\t\t}\n\t\tOutTrace(\"Unlock(%d): lpdds=%x%s %s\\n\", dxversion, lpdds, (IsPrim ? \"(PRIM)\": (IsBack ? \"(BACK)\" : \"\")), sRect);\n\t}\n\n\tif ((dxw.dwFlags8 & ZBUFFERHARDCLEAN) && dxwss.IsAZBufferSurface(lpdds)){\n\t\tDWORD dwSize = (dxversion<4)?sizeof(DDSURFACEDESC):sizeof(DDSURFACEDESC2);\n\t\tDDSURFACEDESC2 ddsd;\n\t\tmemset(&ddsd, 0, dwSize);\n\t\tddsd.dwSize = dwSize;\n\t\tres=(*pUnlock)(lpdds, NULL); \n\t\tif(res) OutTraceDW(\"Unlock ZBUFFER: Unlock err=%x at %d\\n\", res, __LINE__);\n\t\tres=(*pLockMethod(dxversion))(lpdds, NULL, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY, 0);\n\t\tif(res) OutTraceDW(\"Unlock ZBUFFER: Lock err=%x at %d\\n\", res, __LINE__);\n\t\tmemset(ddsd.lpSurface, 0xFF, ZBufferSize);\n\t\tres=(*pUnlock)(lpdds, lprect); \n\t\tif(res) OutTraceDW(\"Unlock ZBUFFER: Unlock err=%x at %d\\n\", res, __LINE__);\n\t\treturn res;\n\t}\n\n\tswitch(dxversion){\n\t\tcase 4:\n\t\t\t// v2.02.92: found in Fifa 2000: lpRect is completely ignored, receiving bogus values like (-1, -1, -1, -1}\n\t\t\t// or {0, 0, 0, 0}, or {-109119151, -109119151, -109119151, -109119151}.\n\t\t\t// better use the Lock-ed rect\n\t\t\t// v2.04.21: the fix is proper only when lprect is not NULL, when NULL better leave it unaltered.\n\t\t\t// Fixing the lprect value unconditionally breaks \"Shadow Watch\" text blitting on game menus.\n\t\t\tif(lprect) lprect = PopLockedRect(lpdds, lprect);\n\t\t\tbreak;\n\t\tcase 7:\n\t\t\tif(lprect){\n\t\t\t\trect = *lprect;\n\t\t\t\tlprect = &rect;\n\t\t\t\t// v2.03.20: apparently, it seems that in ddraw 7 you can set an empty rectangle to mean the whole area ....\n\t\t\t\t// this fixes the black screen otherwise present in \"Arcanum\".\n\t\t\t\tif(IsPrim && ((lprect->right - lprect->left) == 0) && ((lprect->bottom - lprect->top) == 0)) lprect = NULL;\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\tif((dxw.dwFlags6 & FIXPITCH) && !(IsPrim||IsBack) && (lpdds == SaveSurface)){\n\t\tOutTrace(\"DEBUG: fixing lpdds=%x size=(%dx%d) surface=%x pitch=%d bpp=%d\\n\",\n\t\t\tlpdds, SaveSurfaceDesc.dwWidth, SaveSurfaceDesc.dwHeight, SaveSurfaceDesc.lpSurface, SaveSurfaceDesc.lPitch, SaveSurfaceDesc.ddpfPixelFormat.dwRGBBitCount);\n\t\tint y;\n\t\tLONG lVirtualPitch;\n\t\tLPVOID p1, p2;\n\t\tlVirtualPitch = (((SaveSurfaceDesc.dwWidth+1)>>1) * SaveSurfaceDesc.ddpfPixelFormat.dwRGBBitCount) >> 2;\n\t\tif(lVirtualPitch != SaveSurfaceDesc.lPitch){ // do just if necessary ...\n\t\t\tfor (y=SaveSurfaceDesc.dwHeight-1; y; y--){ // for each scan line ...\n\t\t\t\tp1 = (LPVOID)((DWORD)SaveSurfaceDesc.lpSurface + (y * lVirtualPitch));\n\t\t\t\tp2 = (LPVOID)((DWORD)SaveSurfaceDesc.lpSurface + (y * SaveSurfaceDesc.lPitch));\n\t\t\t\tmemcpy(p2, p1, SaveSurfaceDesc.lPitch); // copy line to correct offset\n\t\t\t}\n\t\t}\n\t}\n\n\tif((dxw.dwFlags3 & MARKLOCK) && !(IsPrim||IsBack) && (lpdds == SaveSurface)){\n\t\tswitch(SaveSurfaceDesc.ddpfPixelFormat.dwRGBBitCount){\n\t\t\tcase 16:\n\t\t\t\tfor (UINT y=0; y<SaveSurfaceDesc.dwHeight; y++){ // for each scan line ...\n\t\t\t\t\tUSHORT *p;\n\t\t\t\t\tp = (USHORT *)((DWORD)SaveSurfaceDesc.lpSurface + (y * SaveSurfaceDesc.lPitch));\n\t\t\t\t\tp[0] = MARK16COLOR;\n\t\t\t\t\tp[SaveSurfaceDesc.dwWidth-1] = MARK16COLOR;\n\t\t\t\t\tif((y==0) || (y==(SaveSurfaceDesc.dwHeight-1)))\n\t\t\t\t\t\tfor (UINT x=0; x<SaveSurfaceDesc.dwWidth; x++) p[x] = MARK16COLOR;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 32:\n\t\t\t\tfor (UINT y=0; y<SaveSurfaceDesc.dwHeight; y++){ // for each scan line ...\n\t\t\t\t\tULONG *p;\n\t\t\t\t\tp = (ULONG *)((DWORD)SaveSurfaceDesc.lpSurface + (y * SaveSurfaceDesc.lPitch));\n\t\t\t\t\tp[0] = MARK32COLOR;\n\t\t\t\t\tp[SaveSurfaceDesc.dwWidth-1] = MARK32COLOR;\n\t\t\t\t\tif((y==0) || (y==(SaveSurfaceDesc.dwHeight-1)))\n\t\t\t\t\t\tfor (UINT x=0; x<SaveSurfaceDesc.dwWidth; x++) p[x] = MARK32COLOR;\n\t\t\t\t}\n\t\t\t\tbreak;\t\n\t\t}\n\t}\n\n\tres=(*pUnlock)(lpdds, lprect); \n\tif(res==DDERR_NOTLOCKED) res=DD_OK; // ignore not locked error\n\tif (IsPrim && res==DD_OK) {\n\t\tpBlt = pGetBltMethod(dxversion);\n\t\tif(dxversion < 4) lprect=NULL; // v2.03.60\n\t\tres=sBlt(dxversion, pBlt, \"Unlock\", lpdds, lprect, lpdds, lprect, NULL, 0, FALSE);\n\t}\n\tif (res) OutTraceE(\"Unlock ERROR res=%x(%s) at %d\\n\",res, ExplainDDError(res), __LINE__);\n\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;\n\tif((dxw.dwFlags5 & TEXTUREMASK) && (!IsPrim)) {\n\t\t// Texture Handling on Unlock\n\t\tTextureHandling(lpdds, dxversion);\n\t}\n\tOutTraceB(\"Unlock OK\\n\");\n\treturn res;\n}\n\nHRESULT WINAPI extUnlock1(LPDIRECTDRAWSURFACE lpdds, LPVOID lpvoid)\n{ return extUnlock(1, (Unlock4_Type)pUnlock1, lpdds, (LPRECT)lpvoid); }\nHRESULT WINAPI extUnlock2(LPDIRECTDRAWSURFACE lpdds, LPVOID lpvoid)\n{ return extUnlock(2, (Unlock4_Type)pUnlock2, lpdds, (LPRECT)lpvoid); }\nHRESULT WINAPI extUnlock3(LPDIRECTDRAWSURFACE lpdds, LPVOID lpvoid)\n{ return extUnlock(3, (Unlock4_Type)pUnlock3, lpdds, (LPRECT)lpvoid); }\nHRESULT WINAPI extUnlock4(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect)\n{ return extUnlock(4, pUnlock4, lpdds, lprect); }\nHRESULT WINAPI extUnlock7(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect)\n{ return extUnlock(7, pUnlock7, lpdds, lprect); }\n\nstatic HRESULT WINAPI extUnlockDir(int dxversion, Unlock4_Type pUnlock, LPDIRECTDRAWSURFACE lpdds, LPRECT lprect)\n{\n\tHRESULT res;\n\tBOOL IsPrim;\n\tBOOL IsBack;\n\tBlt_Type pBlt;\n\tRECT rect;\n\n\tIsPrim=dxwss.IsAPrimarySurface(lpdds);\n\tIsBack=dxwss.IsABackBufferSurface(lpdds);\n\n\tif(IsTraceDDRAW){\n\t\tchar sRect[81];\n\t\tswitch(dxversion){\n\t\t\tcase 1:\n\t\t\tcase 2:\n\t\t\tcase 3:\n\t\t\t\tsprintf_s(sRect, 80, \"lpvoid=%x\", lprect);\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\tcase 7:\n\t\t\t\tif (lprect) sprintf_s(sRect, 80, \"rect=(%d,%d)-(%d,%d)\", lprect->left, lprect->top, lprect->right, lprect->bottom);\n\t\t\t\telse strcpy(sRect, \"rect=(NULL)\");\n\t\t\t\tbreak;\n\t\t}\n\t\tOutTrace(\"Unlock(%d): lpdds=%x%s %s\\n\", dxversion, lpdds, (IsPrim ? \"(PRIM)\": (IsBack ? \"(BACK)\" : \"\")), sRect);\n\t}\n\n\tif ((dxw.dwFlags8 & ZBUFFERHARDCLEAN) && dxwss.IsAZBufferSurface(lpdds)){\n\t\tDWORD dwSize = (dxversion<4)?sizeof(DDSURFACEDESC):sizeof(DDSURFACEDESC2);\n\t\tDDSURFACEDESC2 ddsd;\n\t\tmemset(&ddsd, 0, dwSize);\n\t\tddsd.dwSize = dwSize;\n\t\tres=(*pUnlock)(lpdds, NULL); \n\t\tif(res) OutTraceDW(\"Unlock ZBUFFER: Unlock err=%x at %d\\n\", res, __LINE__);\n\t\tres=(*pLockMethod(dxversion))(lpdds, NULL, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY, 0);\n\t\tif(res) OutTraceDW(\"Unlock ZBUFFER: Lock err=%x at %d\\n\", res, __LINE__);\n\t\tmemset(ddsd.lpSurface, 0xFF, ZBufferSize);\n\t\tres=(*pUnlock)(lpdds, lprect); \n\t\tif(res) OutTraceDW(\"Unlock ZBUFFER: Unlock err=%x at %d\\n\", res, __LINE__);\n\t\treturn res;\n\t}\n\n\tswitch(dxversion){\n\t\tcase 4:\n\t\t\t// v2.02.92: found in Fifa 2000: lpRect is completely ignored, receiving bogus values like (-1, -1, -1, -1}\n\t\t\t// or {0, 0, 0, 0}, or {-109119151, -109119151, -109119151, -109119151}.\n\t\t\t// better use the Lock-ed rect\n\t\t\t// v2.04.21: the fix is proper only when lprect is not NULL, when NULL better leave it unaltered.\n\t\t\t// Fixing the lprect value unconditionally breaks \"Shadow Watch\" text blitting on game menus.\n\t\t\tif(lprect) lprect = PopLockedRect(lpdds, lprect);\n\t\t\tbreak;\n\t\tcase 7:\n\t\t\tif(lprect){\n\t\t\t\trect = *lprect;\n\t\t\t\tlprect = &rect;\n\t\t\t\t// v2.03.20: apparently, it seems that in ddraw 7 you can set an empty rectangle to mean the whole area ....\n\t\t\t\t// this fixes the black screen otherwise present in \"Arcanum\".\n\t\t\t\tif(IsPrim && ((lprect->right - lprect->left) == 0) && ((lprect->bottom - lprect->top) == 0)) lprect = NULL;\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\t// v2.04.09: for IDirectDraw methods use iBakBufferVersion instead of dxversion ...\n\tpBlt = pGetBltMethod(dxversion);\n\n\tif(dxw.dwFlags1 & LOCKEDSURFACE){\n\t\tLPDIRECTDRAWSURFACE lpDDSPrim = 0;\n\t\tGetGDISurface_Type pGetGDISurface = pGetGDISurfaceMethod(iBakBufferVersion);\n\n\t\t(*pGetGDISurface)(lpPrimaryDD, &lpDDSPrim);\n\t\tif(lpdds==lpDDSPrim && lpDDSBuffer){\n\t\t\tRECT client;\n\t\t\tPOINT upleft={0,0};\n\t\t\t(*pGetClientRect)(dxw.GethWnd(), &client);\n\t\t\t(*pClientToScreen)(dxw.GethWnd(), &upleft);\n\t\t\tif (!lprect) lprect=&client;\n\t\t\tOffsetRect(lprect, upleft.x, upleft.y);\n\t\t\tres=(*pUnlock)((LPDIRECTDRAWSURFACE)lpDDSBuffer, lprect);\n\t\t\t(*pBlt)(lpdds, lprect, (LPDIRECTDRAWSURFACE)lpDDSBuffer, NULL, DDBLT_WAIT, 0);\n\t\t\t(*pReleaseSMethod(dxversion))((LPDIRECTDRAWSURFACE)lpDDSBuffer);\n\t\t\tlpDDSBuffer = NULL;\n\t\t}\n\t\t(*pReleaseSMethod(dxversion))(lpDDSPrim); // to leave a correct refcount \n\t}\n\n\tres=(*pUnlock)(lpdds, lprect);\n\tif(res==DDERR_NOTLOCKED) res=DD_OK; // ignore not locked error\n\tif (IsPrim && res==DD_OK) {\n\t\tif(dxversion < 4) lprect=NULL; // v2.03.60\n\t\tres=sBlt(dxversion, pBlt, \"Unlock\", lpdds, lprect, lpdds, lprect, NULL, 0, FALSE);\n\t}\n\tif (res) OutTraceE(\"Unlock ERROR res=%x(%s) at %d\\n\",res, ExplainDDError(res), __LINE__);\n\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;\n\tif((dxw.dwFlags5 & TEXTUREMASK) && (!IsPrim)) {\n\t\t// Texture Handling on Unlock\n\t\tTextureHandling(lpdds, dxversion);\n\t}\n\tOutTraceB(\"Unlock OK\\n\");\n\treturn res;\n}\n\nHRESULT WINAPI extUnlockDir1(LPDIRECTDRAWSURFACE lpdds, LPVOID lpvoid)\n{ return extUnlockDir(1, (Unlock4_Type)pUnlock1, lpdds, (LPRECT)lpvoid); }\nHRESULT WINAPI extUnlockDir2(LPDIRECTDRAWSURFACE lpdds, LPVOID lpvoid)\n{ return extUnlockDir(2, (Unlock4_Type)pUnlock2, lpdds, (LPRECT)lpvoid); }\nHRESULT WINAPI extUnlockDir3(LPDIRECTDRAWSURFACE lpdds, LPVOID lpvoid)\n{ return extUnlockDir(3, (Unlock4_Type)pUnlock3, lpdds, (LPRECT)lpvoid); }\nHRESULT WINAPI extUnlockDir4(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect)\n{ return extUnlockDir(4, pUnlock4, lpdds, lprect); }\nHRESULT WINAPI extUnlockDir7(LPDIRECTDRAWSURFACE lpdds, LPRECT lprect)\n{ return extUnlockDir(7, pUnlock7, lpdds, lprect); }\n\n/* to do: instead of calling GDI GetDC, try to map GetDC with Lock and\nReleaseDC with Unlock, returning the surface memory ptr (???) as HDC\nand avoiding the consistency check performed by surface::GetDC (why\nshould it bother if the screen is 32BPP and the surface is not??? */\n\nstatic HRESULT WINAPI extGetDC(int dxversion, GetDC_Type pGetDC, LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC)\n{\n\tHRESULT res;\n\tBOOL IsPrim;\n\n\tIsPrim=dxwss.IsAPrimarySurface(lpdds);\n\tOutTraceDDRAW(\"GetDC: lpdss=%x%s\\n\",lpdds, IsPrim?\"(PRIM)\":\"\");\n\n\t// In non-emulated mode, better return the window DC rather than the actual primary surfce DC,\n\t// because that would refer to the whole desktop\n\tif (!(dxw.dwFlags1 & EMULATESURFACE) && IsPrim) {\n\t\t*pHDC = (*pGDIGetDC)(dxw.GethWnd());\n\t\treturn DD_OK;\n\t}\n\n\tres=(*pGetDC)(lpdds, pHDC);\n\n\tif (res==DDERR_CANTCREATEDC && \n\t\t(dxw.dwFlags1 & EMULATESURFACE) && \n\t\tdxw.VirtualPixelFormat.dwRGBBitCount==8) {\n\t\t// for 8BPP palettized surfaces, connect them to either the ddraw emulated palette or the GDI emulated palette\n\t\tOutTraceDW(\"GetDC: adding 8BPP palette to surface lpdds=%x\\n\", lpdds);\n\t\tif(lpDDP==NULL){\n\t\t\t// should link here to the GDI palette? See Hyperblade....\n\t\t\tdxw.palNumEntries=256;\n\t\t\tres=(*pCreatePaletteMethod(dxversion))(lpPrimaryDD, DDPCAPS_ALLOW256|DDPCAPS_8BIT|DDPCAPS_INITIALIZE, dxw.palPalEntry, &lpDDP, NULL);\n\t\t\tif (res) {\n\t\t\t\tOutTraceE(\"GetDC: CreatePalette ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\t\tres=(*pSetPaletteMethod(dxversion))(lpdds, lpDDP);\n\t\tif (res) {\n\t\t\tOutTraceE(\"GetDC: SetPalette ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\treturn res;\n\t\t}\n\t\tiDDPExtraRefCounter++;\n\t\t// retry ....\n\t\tres=(*pGetDC)(lpdds, pHDC);\n\t}\n\n\tOutTraceDDRAW(\"GetDC: res=%x(%s) hdc=%x\\n\", res, ExplainDDError(res), *pHDC);\n\treturn res;\n}\n\nHRESULT WINAPI extGetDC1(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC)\n{ return extGetDC(1, pGetDC1, lpdds, pHDC); }\nHRESULT WINAPI extGetDC2(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC)\n{ return extGetDC(2, pGetDC2, lpdds, pHDC); }\nHRESULT WINAPI extGetDC3(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC)\n{ return extGetDC(3, pGetDC3, lpdds, pHDC); }\nHRESULT WINAPI extGetDC4(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC)\n{ return extGetDC(4, pGetDC4, lpdds, pHDC); }\nHRESULT WINAPI extGetDC7(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC)\n{ return extGetDC(7, pGetDC7, lpdds, pHDC); }\n\nHRESULT WINAPI extReleaseDC(int dxversion, ReleaseDC_Type pReleaseDC, LPDIRECTDRAWSURFACE lpdds, HDC FAR hdc)\n{\n\tHRESULT res;\n\tBOOL IsPrim;\n\n\tIsPrim=dxwss.IsAPrimarySurface(lpdds);\n\tOutTraceDDRAW(\"ReleaseDC: lpdss=%x%s hdc=%x\\n\",lpdds, IsPrim?\"(PRIM)\":\"\", hdc);\t\n\tres=(*pReleaseDC)(lpdds, hdc);\n\tif((IsPrim) && (dxw.dwFlags1 & EMULATESURFACE)) {\n\t\tBlt_Type pBlt;\n\t\tGetGDISurface_Type pGetGDISurface;\n\t\t// v2.04.09: for IDirectDraw methods use iBakBufferVersion instead of dxversion ...\n\t\tpBlt = pGetBltMethod(dxversion);\n\t\tpGetGDISurface = pGetGDISurfaceMethod(iBakBufferVersion);\n\t\tsBlt(dxversion, pBlt, \"ReleaseDC\", lpdds, NULL, lpdds, NULL, 0, NULL, FALSE);\n\t}\n\tif (res) OutTraceE(\"ReleaseDC: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;\n\treturn res;\n}\n\nHRESULT WINAPI extReleaseDC1(LPDIRECTDRAWSURFACE lpdds, HDC FAR hdc)\n{ return extReleaseDC(1, pReleaseDC1, lpdds, hdc); }\nHRESULT WINAPI extReleaseDC2(LPDIRECTDRAWSURFACE lpdds, HDC FAR hdc)\n{ return extReleaseDC(2, pReleaseDC2, lpdds, hdc); }\nHRESULT WINAPI extReleaseDC3(LPDIRECTDRAWSURFACE lpdds, HDC FAR hdc)\n{ return extReleaseDC(3, pReleaseDC3, lpdds, hdc); }\nHRESULT WINAPI extReleaseDC4(LPDIRECTDRAWSURFACE lpdds, HDC FAR hdc)\n{ return extReleaseDC(4, pReleaseDC4, lpdds, hdc); }\nHRESULT WINAPI extReleaseDC7(LPDIRECTDRAWSURFACE lpdds, HDC FAR hdc)\n{ return extReleaseDC(7, pReleaseDC7, lpdds, hdc); }\n\n\nHRESULT WINAPI extFlipToGDISurface(FlipToGDISurface_Type pFlipToGDISurface, LPDIRECTDRAW lpdd)\n{\n\t// HRESULT res;\n\n\tOutTraceDDRAW(\"FlipToGDISurface: lpdd=%x\\n\", lpdd);\n\t// to revise: so far, it seems the best thing to do is NOTHING, just return 0.\n\t// res=(*pFlipToGDISurface)(lpdd);\n\t// if (res) OutTraceE(\"FlipToGDISurface: ERROR res=%x(%s), skipping\\n\", res, ExplainDDError(res));\n\t// pretend you flipped anyway....\n\n\tif(dxw.dwFlags6 & SHAREDDC) bFlippedDC = TRUE;\n\n\treturn DD_OK;\n}\n\nHRESULT WINAPI extFlipToGDISurface1(LPDIRECTDRAW lpdd)\n{ return extFlipToGDISurface(pFlipToGDISurface1, lpdd); }\nHRESULT WINAPI extFlipToGDISurface2(LPDIRECTDRAW lpdd)\n{ return extFlipToGDISurface(pFlipToGDISurface2, lpdd); }\nHRESULT WINAPI extFlipToGDISurface3(LPDIRECTDRAW lpdd)\n{ return extFlipToGDISurface(pFlipToGDISurface3, lpdd); }\nHRESULT WINAPI extFlipToGDISurface4(LPDIRECTDRAW lpdd)\n{ return extFlipToGDISurface(pFlipToGDISurface4, lpdd); }\nHRESULT WINAPI extFlipToGDISurface7(LPDIRECTDRAW lpdd)\n{ return extFlipToGDISurface(pFlipToGDISurface7, lpdd); }\n\nHRESULT WINAPI extGetGDISurface(int dxversion, GetGDISurface_Type pGetGDISurface, LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)\n{\n\tint res;\n\n\tOutTraceDDRAW(\"GetGDISurface(%d): lpdd=%x\\n\", dxversion, lpdd);\n\n\t// v2.02.31:\n\t// in EMULATED mode, should not return the actual ddraw primary surface, but the virtual one.\n\tif(dxw.dwFlags1 & EMULATESURFACE){\n\t\t*w=dxwss.GetPrimarySurface();\n\t\tOutTraceDW(\"GetGDISurface: EMULATED lpdd=%x w=%x\\n\", lpdd, *w);\n\t\treturn DD_OK;\n\t}\n\n\tres=(*pGetGDISurface)(lpdd, w);\n\tif (res) {\n\t\tOutTraceE(\"GetGDISurface: ERROR lpdd=%x res=%x(%s)\\n\", lpdd, res, ExplainDDError(res));\n\t}\n\telse {\n\t\tOutTraceDDRAW(\"GetGDISurface: lpdd=%x w=%x\\n\", lpdd, *w);\n\t}\n\n\treturn res;\n}\n\nHRESULT WINAPI extGetGDISurface1(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)\n{ return extGetGDISurface(1, pGetGDISurface1, lpdd, w); }\nHRESULT WINAPI extGetGDISurface2(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)\n{ return extGetGDISurface(2, pGetGDISurface2, lpdd, w); }\nHRESULT WINAPI extGetGDISurface3(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)\n{ return extGetGDISurface(3, pGetGDISurface3, lpdd, w); }\nHRESULT WINAPI extGetGDISurface4(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)\n{ return extGetGDISurface(4, pGetGDISurface4, lpdd, w); }\nHRESULT WINAPI extGetGDISurface7(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE *w)\n{ return extGetGDISurface(7, pGetGDISurface7, lpdd, w); }\n\n// debug function to dump all video modes queried by the DirectDrav::EnumDisplayModes method\n\nHRESULT WINAPI EnumModesCallbackDumper(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext)\n{\n\tOutTrace(\"EnumModesCallback:\\n\");\n\tOutTrace(\"\\tdwSize=%d\\n\", lpDDSurfaceDesc->dwSize);\n\tOutTrace(\"\\tddpfPixelFormat depth=%d rgba=(%X-%X-%X-%X)\\n\", \n\t\tlpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount,\n\t\tlpDDSurfaceDesc->ddpfPixelFormat.dwRBitMask,\n\t\tlpDDSurfaceDesc->ddpfPixelFormat.dwGBitMask,\n\t\tlpDDSurfaceDesc->ddpfPixelFormat.dwBBitMask,\n\t\tlpDDSurfaceDesc->ddpfPixelFormat.dwRGBAlphaBitMask);\n\tOutTrace(\"\\tdwFlags=%x(%s)\\n\", lpDDSurfaceDesc->dwFlags, ExplainFlags(lpDDSurfaceDesc->dwFlags));\n \tOutTrace(\"\\tdwWidth x dwHeight=(%d,%d)\\n\", lpDDSurfaceDesc->dwWidth, lpDDSurfaceDesc->dwHeight);\n\tOutTrace(\"\\tlPitch=%d\\n\", lpDDSurfaceDesc->lPitch);\n\t//OutTrace(\"\\tdwBackBufferCount=%d\\n\", lpDDSurfaceDesc->dwBackBufferCount);\n\tOutTrace(\"\\tdwRefreshRate=%d\\n\", lpDDSurfaceDesc->dwRefreshRate);\n\t//OutTrace(\"\\tlpSurface=%x\\n\", lpDDSurfaceDesc->lpSurface);\n\t//OutTrace(\"\\tCaps=%x(%s)\\n\", lpDDSurfaceDesc->ddsCaps.dwCaps, ExplainDDSCaps(lpDDSurfaceDesc->ddsCaps.dwCaps));\n\t//if ((NewContext_Type *)lpContext->dxversion >= 4) {\n\t//\tOutTrace(\"\\tddpfPixelFormat %s\\n\", DumpPixelFormat((LPDDSURFACEDESC2)lpDDSurfaceDesc));\n\t//}\n\n#ifdef FULLHEXDUMP\n\tOutTrace(\"DDSurfaceDesc=\");\n\tOutTraceHex((BYTE *)lpDDSurfaceDesc, sizeof(DDSURFACEDESC));\n#endif\n\n\treturn DDENUMRET_OK;\n}\n\ntypedef HRESULT (WINAPI *EnumModesCallback_Type)(LPDDSURFACEDESC, LPVOID);\ntypedef struct {\n\tLPVOID lpContext; \n\tEnumModesCallback_Type lpCallback; \n\tDWORD dwWidth;\n\tDWORD dwHeight;\n\tint dxversion;\n} NewContext_Type;\n\nstatic BOOL CheckResolutionLimit(LPDDSURFACEDESC lpDDSurfaceDesc)\n{\n\tif(dxw.dwFlags4 & LIMITSCREENRES) {\n\t\t#define HUGE 100000\n\t\tDWORD maxw, maxh;\n\t\tmaxw=HUGE; maxh=HUGE;\n\t\tswitch(dxw.MaxScreenRes){\n\t\t\tcase DXW_LIMIT_320x200: maxw=320; maxh=200; break;\n\t\t\tcase DXW_LIMIT_640x480: maxw=640; maxh=480; break;\n\t\t\tcase DXW_LIMIT_800x600: maxw=800; maxh=600; break;\n\t\t\tcase DXW_LIMIT_1024x768: maxw=1024; maxh=768; break;\n\t\t\tcase DXW_LIMIT_1280x960: maxw=1280; maxh=960; break;\n\t\t}\n\t\tif((lpDDSurfaceDesc->dwWidth > maxw) || (lpDDSurfaceDesc->dwHeight > maxh)){\n\t\t\tOutTraceDW(\"EnumDisplaySettings: hide device mode=(%d,%d)\\n\", maxw, maxh);\n\t\t\treturn TRUE;\n\t\t}\n\t}\n\n\tif(dxw.dwFlags7 & MAXIMUMRES) {\n\t\tif((lpDDSurfaceDesc->dwWidth > (DWORD)dxw.iMaxW) || (lpDDSurfaceDesc->dwHeight > (DWORD)dxw.iMaxH)){\n\t\t\tOutTraceDW(\"EnumDisplaySettings: hide device mode=(%d,%d)\\n\", dxw.iMaxW, dxw.iMaxH);\n\t\t\treturn TRUE;\n\t\t}\t\n\t}\n\n\treturn FALSE;\n}\n\nHRESULT WINAPI myEnumModesFilterDirect(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext)\n{\n\tHRESULT res;\n\tSupportedRes_Type *SupportedRes;\n\n\tif ((((NewContext_Type *)lpContext)->dwHeight != lpDDSurfaceDesc->dwHeight) ||\n\t\t(((NewContext_Type *)lpContext)->dwWidth != lpDDSurfaceDesc->dwWidth)) return DDENUMRET_OK;\n\n\tif (IsDebug) EnumModesCallbackDumper(lpDDSurfaceDesc, NULL);\n\n\t// tricky part: for each color depth related to current video resolution, fake each of the \n\t// supported resolutions, unless is greater than maximum allowed\n\n\tSupportedRes = (dxw.dwFlags4 & SUPPORTHDTV) ? &SupportedHDTVRes[0] : &SupportedSVGARes[0];\n\n\tfor (int ResIdx=0; SupportedRes[ResIdx].h; ResIdx++){\n\t\tlpDDSurfaceDesc->dwHeight=SupportedRes[ResIdx].h;\n\t\tlpDDSurfaceDesc->dwWidth=SupportedRes[ResIdx].w;\n\t\tif(CheckResolutionLimit(lpDDSurfaceDesc)) return DDENUMRET_OK;\n\t\tres=(*((NewContext_Type *)lpContext)->lpCallback)(lpDDSurfaceDesc, ((NewContext_Type *)lpContext)->lpContext);\n\t\tOutTraceDW(\"EnumDisplayModes(D): proposed size[%d]=(%d,%d) res=%x\\n\", ResIdx, SupportedRes[ResIdx].w, SupportedRes[ResIdx].h, res);\n\t\tif(res==DDENUMRET_CANCEL) break;\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI myEnumModesFilterNative(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext)\n{\n\tHRESULT res;\n\n\tif (IsDebug) EnumModesCallbackDumper(lpDDSurfaceDesc, NULL);\n\n\tif (dxw.dwFlags1 & PREVENTMAXIMIZE){\n\t\t// if PREVENTMAXIMIZE is set, don't let the caller know about forbidden screen settings.\n\t\tif((lpDDSurfaceDesc->dwHeight > dxw.GetScreenHeight()) ||\n\t\t\t(lpDDSurfaceDesc->dwWidth > dxw.GetScreenWidth())){\n\t\t\tOutTraceDW(\"EnumDisplayModes: skipping screen size=(%d,%d)\\n\", lpDDSurfaceDesc->dwHeight, lpDDSurfaceDesc->dwWidth);\n\t\t\treturn DDENUMRET_OK;\n\t\t}\n\t}\n\n\tif(CheckResolutionLimit(lpDDSurfaceDesc)) return DDENUMRET_OK;\n\tres=(*((NewContext_Type *)lpContext)->lpCallback)(lpDDSurfaceDesc, ((NewContext_Type *)lpContext)->lpContext);\n\tOutTraceDW(\"EnumDisplayModes(D): native size=(%d,%d) bpp=%d res=%x\\n\", lpDDSurfaceDesc->dwWidth, lpDDSurfaceDesc->dwHeight, lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount, res);\n\treturn res;\n}\n\nstatic char *sDisplayModesFlags(DWORD dwFlags)\n{\n\tstatic char sBuf[81];\n\tsize_t l;\n\tstrcpy(sBuf, \"DDEDM_\");\n\tif(dwFlags & DDEDM_REFRESHRATES) strcat(sBuf, \"REFRESHRATES+\");  \n\tif(dwFlags & DDEDM_STANDARDVGAMODES) strcat(sBuf, \"STANDARDVGAMODES+\");  \n\tl=strlen(sBuf);\n\tif (l>strlen(\"DDEDM_\")) sBuf[l-1]=0; // delete last '+' if any\n\telse sBuf[0]=0;\n\treturn(sBuf);\n}\n\nHRESULT WINAPI extEnumDisplayModes(int dxversion, EnumDisplayModes1_Type pEnumDisplayModes, LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK cb)\n{\n\tHRESULT res;\n\tSupportedRes_Type *SupportedRes;\n\tNewContext_Type NewContext;\n\n\tOutTraceDDRAW(\"EnumDisplayModes(D%d): lpdd=%x flags=%x lpddsd=%x callback=%x\\n\", dxversion, lpdd, dwflags, lpddsd, cb);\n\tif(lpddsd) OutTraceDDRAW(\"EnumDisplayModes(D): %s\\n\", LogSurfaceAttributes((LPDDSURFACEDESC2)lpddsd, \"EnumDisplayModes\", __LINE__));\n\n\tif ((dxw.dwFlags4 & NATIVERES) ||\n\t\t(!(dxw.dwFlags1 & EMULATESURFACE) && !dxw.Windowize)){ // v2.04.14 - make nonemulated nonwindowed mode work ...\n\t\tNewContext.dwWidth = 0;\n\t\tNewContext.dwHeight = 0;\n\t\tNewContext.lpContext = lpContext;\n\t\tNewContext.lpCallback = cb;\n\t\tNewContext.dxversion = dxversion;\n\t\tres=(*pEnumDisplayModes)(lpdd, dwflags, lpddsd, &NewContext, myEnumModesFilterNative);\n\t\tif(res) OutTraceE(\"EnumDisplayModes(D): ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\t// note: extEnumDisplayModes serves both the EnumDisplayModes and EnumDisplayModes2 interfaces:\n\t// they differ for the lpddsd argument that should point to either DDSURFACEDESC or DDSURFACEDESC2\n\t// structures, but unification is possible if the lpddsd->dwSize is properly set and is left untouched.\n\n\tif((dxw.dwFlags1 & EMULATESURFACE)){\n\t\tint SupportedDepths[5]={8,16,24,32,0};\n\t\tint ResIdx, DepthIdx;\n\t\tDDSURFACEDESC2 EmuDesc;\n\t\tDWORD dwSize;\n\n\t\tEmuDesc.dwRefreshRate = 0; \n\t\tEmuDesc.ddpfPixelFormat.dwFlags = DDPF_RGB;\n\t\tif (lpddsd) dwSize=lpddsd->dwSize; // sizeof either DDSURFACEDESC or DDSURFACEDESC2 !!!\n\t\telse dwSize= (dxversion < 4) ? sizeof(DDSURFACEDESC) : sizeof(DDSURFACEDESC2);\n\t\tmemset(&EmuDesc, 0, dwSize);\n\t\tEmuDesc.dwSize=dwSize;\n\t\tEmuDesc.dwFlags=DDSD_PIXELFORMAT|DDSD_REFRESHRATE|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PITCH; \n\t\tSupportedRes = (dxw.dwFlags4 & SUPPORTHDTV) ? &SupportedHDTVRes[0] : &SupportedSVGARes[0];\n\t\tres=DD_OK;\n\t\tfor (ResIdx=0; SupportedRes[ResIdx].h; ResIdx++){\n\t\t\tEmuDesc.dwHeight=SupportedRes[ResIdx].h;\n\t\t\tEmuDesc.dwWidth=SupportedRes[ResIdx].w;\n\t\t\tif(CheckResolutionLimit((LPDDSURFACEDESC)&EmuDesc)) break;\n\t\t\tEmuDesc.ddpfPixelFormat.dwSize=sizeof(DDPIXELFORMAT);\n\t\t\tEmuDesc.ddpfPixelFormat.dwFlags=DDPF_RGB;\n\t\t\tfor (DepthIdx=0; SupportedDepths[DepthIdx]; DepthIdx++) {\n\t\t\t\t// v2.03.24: if lpddsd is not null, compatible colr depth must be selected. Skip incompatible ones.\n\t\t\t\t// Fixes \"Total Annihilation Kingdoms\" crash\n\t\t\t\tif(lpddsd && (lpddsd->dwFlags & DDSD_PIXELFORMAT) && (lpddsd->ddpfPixelFormat.dwRGBBitCount != SupportedDepths[DepthIdx])) continue;\n\t\t\t\tEmuDesc.ddpfPixelFormat.dwRGBBitCount=SupportedDepths[DepthIdx];\n\t\t\t\tEmuDesc.lPitch=SupportedRes[ResIdx].w * SupportedDepths[DepthIdx] / 8;\n\t\t\t\tFixPixelFormat(EmuDesc.ddpfPixelFormat.dwRGBBitCount, &(EmuDesc.ddpfPixelFormat));\n\t\t\t\tif(IsDebug) EnumModesCallbackDumper((LPDDSURFACEDESC)&EmuDesc, lpContext);\n\t\t\t\tres=(*cb)((LPDDSURFACEDESC)&EmuDesc, lpContext);\n\t\t\t\tif(res==DDENUMRET_CANCEL) break;\n\t\t\t}\n\t\t\tif(res==DDENUMRET_CANCEL) break;\n\t\t}\n\t\tres=DD_OK;\n\t}\n\telse{\n\t\tDDSURFACEDESC2 EmuDesc;\n\t\tmemset(&EmuDesc, 0, sizeof(EmuDesc));\n\t\tEmuDesc.dwSize = sizeof(DDSURFACEDESC); // using release 1 type ....\n\t \tres=myGetDisplayMode(dxversion, lpdd, (LPDDSURFACEDESC)&EmuDesc);\n\t\tif(res){\n\t\t\tOutTraceE(\"EnumDisplayModes(D): GetDisplayMode ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\treturn res;\n\t\t}\n\t\tNewContext_Type NewContext;\n\t\tNewContext.dwWidth = EmuDesc.dwWidth;\n\t\tNewContext.dwHeight = EmuDesc.dwHeight;\n\t\tNewContext.lpContext=lpContext;\n\t\tNewContext.lpCallback=cb;\n\t\tres=(*pEnumDisplayModes)(lpdd, dwflags, lpddsd, &NewContext, myEnumModesFilterDirect);\n\t}\n\tif(res) OutTraceE(\"EnumDisplayModes(D): ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extEnumDisplayModes1(LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK cb)\n{ return extEnumDisplayModes(1, pEnumDisplayModes1, lpdd, dwflags, lpddsd, lpContext, cb); }\nHRESULT WINAPI extEnumDisplayModes2(LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK cb)\n{ return extEnumDisplayModes(2, pEnumDisplayModes2, lpdd, dwflags, lpddsd, lpContext, cb); }\nHRESULT WINAPI extEnumDisplayModes3(LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK cb)\n{ return extEnumDisplayModes(3, pEnumDisplayModes3, lpdd, dwflags, lpddsd, lpContext, cb); }\nHRESULT WINAPI extEnumDisplayModes4(LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC2 lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK2 cb)\n{ return extEnumDisplayModes(4, (EnumDisplayModes1_Type)pEnumDisplayModes4, lpdd, dwflags, (LPDDSURFACEDESC)lpddsd, lpContext, (LPDDENUMMODESCALLBACK)cb); }\nHRESULT WINAPI extEnumDisplayModes7(LPDIRECTDRAW lpdd, DWORD dwflags, LPDDSURFACEDESC2 lpddsd, LPVOID lpContext, LPDDENUMMODESCALLBACK2 cb)\n{ return extEnumDisplayModes(7, (EnumDisplayModes1_Type)pEnumDisplayModes7, lpdd, dwflags, (LPDDSURFACEDESC)lpddsd, lpContext, (LPDDENUMMODESCALLBACK)cb); }\n\nHRESULT WINAPI extGetPixelFormat(GetPixelFormat_Type pGetPixelFormat, LPDIRECTDRAWSURFACE lpdds, LPDDPIXELFORMAT p)\n{\n\tDWORD res;\n\tBOOL IsPrim;\n\n\tIsPrim=dxwss.IsAPrimarySurface(lpdds);\n\tOutTraceDDRAW(\"GetPixelFormat: lpdds=%x%s\\n\", lpdds, IsPrim?\"(PRIM)\":\"\");\n\tres=(*pGetPixelFormat)(lpdds, p);\n\tif(res){\n\t\tOutTraceE(\"GetPixelFormat: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t}\n\telse{\n\t\tOutTraceDDRAW(\"GetPixelFormat: Flags=%x(%s) FourCC=%x BitCount=%d RGBA=(%x,%x,%x,%x)\\n\", \n\t\t\tp->dwFlags, ExplainPixelFormatFlags(p->dwFlags), p->dwFourCC, p->dwRGBBitCount, \n\t\t\tp->dwRBitMask, p->dwGBitMask, p->dwBBitMask, p->dwRGBAlphaBitMask );\n\t}\n\n\t// fix: virtual pixel definition is helpful not only on promary surfaces, but more in general\n\t// on every surface that returns an error. It fixes \"Arx Fatalis\" crash.\n\tif ((dxw.dwFlags1 & EMULATESURFACE) && res){\n\t\tp->dwFlags = dxw.VirtualPixelFormat.dwFlags;\n\t\tp->dwRGBBitCount= dxw.VirtualPixelFormat.dwRGBBitCount;\n\t\tp->dwRBitMask = dxw.VirtualPixelFormat.dwRBitMask; \n\t\tp->dwGBitMask = dxw.VirtualPixelFormat.dwGBitMask;\n\t\tp->dwBBitMask = dxw.VirtualPixelFormat.dwBBitMask;\n\t\tp->dwRGBAlphaBitMask = dxw.VirtualPixelFormat.dwRGBAlphaBitMask;\n\t\tOutTraceDW(\"GetPixelFormat: EMULATED BitCount=%d RGBA=(%x,%x,%x,%x)\\n\", \n\t\t\tp->dwRGBBitCount, p->dwRBitMask, p->dwGBitMask, p->dwBBitMask, p->dwRGBAlphaBitMask );\n\t\tres = DD_OK;\n\t}\n\n\treturn res;\n}\n\nHRESULT WINAPI extGetPixelFormat1(LPDIRECTDRAWSURFACE lpdds, LPDDPIXELFORMAT p)\n{ return extGetPixelFormat(pGetPixelFormat1, lpdds, p); }\nHRESULT WINAPI extGetPixelFormat2(LPDIRECTDRAWSURFACE lpdds, LPDDPIXELFORMAT p)\n{ return extGetPixelFormat(pGetPixelFormat2, lpdds, p); }\nHRESULT WINAPI extGetPixelFormat3(LPDIRECTDRAWSURFACE lpdds, LPDDPIXELFORMAT p)\n{ return extGetPixelFormat(pGetPixelFormat3, lpdds, p); }\nHRESULT WINAPI extGetPixelFormat4(LPDIRECTDRAWSURFACE lpdds, LPDDPIXELFORMAT p)\n{ return extGetPixelFormat(pGetPixelFormat4, lpdds, p); }\nHRESULT WINAPI extGetPixelFormat7(LPDIRECTDRAWSURFACE lpdds, LPDDPIXELFORMAT p)\n{ return extGetPixelFormat(pGetPixelFormat7, lpdds, p); }\n\nHRESULT WINAPI extTestCooperativeLevel(TestCooperativeLevel_Type pTestCooperativeLevel, LPDIRECTDRAW lpdd)\n{\n\tHRESULT res;\n\tres=(*pTestCooperativeLevel)(lpdd);\n\tOutTraceB(\"TestCooperativeLevel: lpdd=%x res=%x(%s)\\n\", lpdd, res, ExplainDDError(res));\n\tif(res==DDERR_WRONGMODE) {\n\t\tres=((LPDIRECTDRAW7)lpdd)->RestoreAllSurfaces();\n\t\tif(res) OutTraceE(\"TestCooperativeLevel: RestoreAllSurfaces ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t}\n\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;\n\treturn res;\n}\n\nHRESULT WINAPI extTestCooperativeLevel4(LPDIRECTDRAW lpdd)\n{ return extTestCooperativeLevel(pTestCooperativeLevel4, lpdd); }\nHRESULT WINAPI extTestCooperativeLevel7(LPDIRECTDRAW lpdd)\n{ return extTestCooperativeLevel(pTestCooperativeLevel7, lpdd); }\n\nHRESULT WINAPI extReleaseS(ReleaseS_Type pReleaseS, LPDIRECTDRAWSURFACE lpdds)\n{\n\tHRESULT res;\n\tBOOL IsPrim;\n\tBOOL IsBack;\n\n\tIsPrim=dxwss.IsAPrimarySurface(lpdds);\n\tIsBack=dxwss.IsABackBufferSurface(lpdds);\n\n\t// fix for Tetris World .... ???\n\tif (IsBack && (dxw.dwFlags6 & SUPPRESSRELEASE)) {\n\t\tOutTraceDDRAW(\"Release(S): SUPPRESS lpdds=%x%s res=0\\n\", lpdds, dxwss.ExplainSurfaceRole(lpdds));\n\t\treturn 0;\n\t}\n\n\t__try { // try/except useful when using proxy dll \n\t\tres = (*pReleaseS)(lpdds);\n\t}\n\t__except(EXCEPTION_EXECUTE_HANDLER){ \n\t\tOutTraceE(\"Release(S): EXCEPTION lpdds=%x%s res=0\\n\", lpdds, dxwss.ExplainSurfaceRole(lpdds));\n\t\tres = 0;\n\t}\n\n\tOutTraceDDRAW(\"Release(S): lpdds=%x%s refcount=%d\\n\", lpdds, dxwss.ExplainSurfaceRole(lpdds), res);\n\tif (res==0) { // common precondition\n\t\t// erase surface from primary or backbuffer list\n\t\t// v2-03-20: d3d 1-7 play a dirty trick: it Release the surface passed as argument until refcount == 0,\n\t\t// but then rebuilds it with the original attributes! So, better not forget them.\n\t\tif(IsPrim || IsBack) dxwss.UnrefSurface(lpdds);\n\n\t\t// when releasing primary surface, erase clipping region\n\t\t// v2.04.14: commented out, better not to! The game could close and reopen a new primary surface.\n\t\t// fixes \"Settlers III\" clipping problems\n\t\t// if(IsPrim && (dxw.dwFlags1 & CLIPCURSOR)) dxw.EraseClipCursor();\n\t\t\n\t\t// clear service surface pointers\n\t\tif (dxw.dwFlags1 & EMULATESURFACE) {\n\t\t\tif(lpdds==lpDDSEmu_Prim) {\n\t\t\t\tOutTraceDW(\"Release(S): Clearing lpDDSEmu_Prim pointer\\n\");\n\t\t\t\tlpDDSEmu_Prim=NULL;\n\t\t\t}\n\t\t\tif(lpdds==lpDDSEmu_Back) {\n\t\t\t\tOutTraceDW(\"Release(S): Clearing lpDDSEmu_Back pointer\\n\");\n\t\t\t\tlpDDSEmu_Back=NULL;\n\t\t\t}\n\t\t}\n\t}\n\n\tif(dxw.dwFlags4 & RETURNNULLREF) return 0;\n\treturn res;\n}\n\nHRESULT WINAPI extReleaseS1(LPDIRECTDRAWSURFACE lpdds)\n{ return extReleaseS(pReleaseS1, lpdds); }\nHRESULT WINAPI extReleaseS2(LPDIRECTDRAWSURFACE lpdds)\n{ return extReleaseS(pReleaseS2, lpdds); }\nHRESULT WINAPI extReleaseS3(LPDIRECTDRAWSURFACE lpdds)\n{ return extReleaseS(pReleaseS3, lpdds); }\nHRESULT WINAPI extReleaseS4(LPDIRECTDRAWSURFACE lpdds)\n{ return extReleaseS(pReleaseS4, lpdds); }\nHRESULT WINAPI extReleaseS7(LPDIRECTDRAWSURFACE lpdds)\n{ return extReleaseS(pReleaseS7, lpdds); }\n\nstatic HRESULT WINAPI extSetColorKey(SetColorKey_Type pSetColorKey, LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey)\n{\n\tHRESULT res;\n\tBOOL IsPrim;\n\tIsPrim=dxwss.IsAPrimarySurface(lpdds);\n\tif(IsTraceDDRAW){\n\t\tchar sInfo[81];\n\t\tif (lpDDColorKey) sprintf(sInfo, \"(L:%x,H:%x)\",lpDDColorKey->dwColorSpaceLowValue, lpDDColorKey->dwColorSpaceHighValue);\n\t\telse strcpy(sInfo, \"(NULL)\");\n\t\tOutTrace(\"SetColorKey: lpdds=%x%s flags=%x(%s) colors=%s\\n\", \n\t\t\tlpdds, (IsPrim ? \"(PRIM)\" : \"\"), flags, ExplainColorKeyFlag(flags), sInfo);\n\t}\n\t\t\n\tres=(*pSetColorKey)(lpdds, flags, lpDDColorKey);\n\tif(res) OutTraceE(\"SetColorKey: ERROR flags=%x lpdds=%x res=%x(%s)\\n\", \n\t\tflags, lpdds, res, ExplainDDError(res));\n\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;\n\treturn res;\n}\n\nHRESULT WINAPI extSetColorKey1(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey)\n{ return extSetColorKey(pSetColorKey1, lpdds, flags, lpDDColorKey); }\nHRESULT WINAPI extSetColorKey2(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey)\n{ return extSetColorKey(pSetColorKey2, lpdds, flags, lpDDColorKey); }\nHRESULT WINAPI extSetColorKey3(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey)\n{ return extSetColorKey(pSetColorKey3, lpdds, flags, lpDDColorKey); }\nHRESULT WINAPI extSetColorKey4(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey)\n{ return extSetColorKey(pSetColorKey4, lpdds, flags, lpDDColorKey); }\nHRESULT WINAPI extSetColorKey7(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey)\n{ return extSetColorKey(pSetColorKey7, lpdds, flags, lpDDColorKey); }\n\nstatic HRESULT WINAPI extGetColorKey(int dxversion, GetColorKey_Type pGetColorKey, LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey)\n{\n\tHRESULT res;\n\tBOOL IsPrim;\n\tIsPrim=dxwss.IsAPrimarySurface(lpdds);\n\tOutTraceDDRAW(\"GetColorKey(S%d): lpdds=%x%s flags=%x(%s)\\n\", \n\t\tdxversion, lpdds, (IsPrim ? \"(PRIM)\" : \"\"), flags, ExplainColorKeyFlag(flags));\n\tres=(*pGetColorKey)(lpdds, flags, lpDDColorKey);\n\tif(res) \n\t\tOutTraceE(\"GetColorKey: ERROR lpdds=%x flags=%x res=%x(%s)\\n\", lpdds, flags, res, ExplainDDError(res));\n\telse\n\t\tOutTraceDDRAW(\"GetColorKey: colors=(L:%x,H:%x)\\n\", \n\t\t\tlpDDColorKey->dwColorSpaceLowValue, lpDDColorKey->dwColorSpaceHighValue);\n\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;\n\treturn res;\n}\n\nHRESULT WINAPI extGetColorKey1(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey)\n{ return extGetColorKey(1, pGetColorKey1, lpdds, flags, lpDDColorKey); }\nHRESULT WINAPI extGetColorKey2(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey)\n{ return extGetColorKey(2, pGetColorKey2, lpdds, flags, lpDDColorKey); }\nHRESULT WINAPI extGetColorKey3(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey)\n{ return extGetColorKey(3, pGetColorKey3, lpdds, flags, lpDDColorKey); }\nHRESULT WINAPI extGetColorKey4(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey)\n{ return extGetColorKey(4, pGetColorKey4, lpdds, flags, lpDDColorKey); }\nHRESULT WINAPI extGetColorKey7(LPDIRECTDRAWSURFACE lpdds, DWORD flags, LPDDCOLORKEY lpDDColorKey)\n{ return extGetColorKey(7, pGetColorKey7, lpdds, flags, lpDDColorKey); }\n\nstatic HRESULT WINAPI extEnumAttachedSurfaces(EnumAttachedSurfaces_Type pEnumAttachedSurfaces, LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback)\n{\n\tHRESULT res;\n\tBOOL IsPrim, IsBack;\n\n\tIsPrim=dxwss.IsAPrimarySurface(lpdds);\n\tIsBack=dxwss.IsABackBufferSurface(lpdds);\n\n\tOutTraceDDRAW(\"EnumAttachedSurfaces: lpdds=%x%s Context=%x Callback=%x\\n\", \n\t\tlpdds, (IsPrim ? \"(PRIM)\":\"\"), lpContext, lpEnumSurfacesCallback);\n\n\tif (IsPrim){\n\t\tLPDIRECTDRAWSURFACE lpDDSBack;\n\t\t// A Primary surface has not backbuffer attached surfaces actually, \n\t\t// so don't rely on ddraw and call the callback function directly.\n\t\t// Needed to make Nox working.\n\t\tDDSURFACEDESC2 ddsd;\n\t\t// first, call hooked function\n\t\tres=(*pEnumAttachedSurfaces)(lpdds, lpContext, lpEnumSurfacesCallback);\n\t\tif (res) \n\t\t\tOutTraceE(\"EnumAttachedSurfaces: ERROR %x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\tif(lpDDSBack = dxwss.GetBackBufferSurface()){\n\t\t\tddsd.dwSize=Set_dwSize_From_Surface();\n\t\t\tres=lpDDSBack->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd);\n\t\t\tif(res){\n\t\t\t\tOutTraceE(\"EnumAttachedSurfaces: GetSurfaceDesc ERROR %x(%s)\\n\",\n\t\t\t\tres, ExplainDDError(res));\n\t\t\t\treturn res;\n\t\t\t}\n\t\t\tres=(lpEnumSurfacesCallback)(lpDDSBack, (LPDDSURFACEDESC)&ddsd, lpContext);\n\t\t\tOutTraceDW(\"EnumSurfacesCallback: on DDSBack res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t}\n\t\treturn DD_OK; // for Black Dahlia\n\t}\n\n\tif(IsBack){\n\t\tLPDIRECTDRAWSURFACE lpDDSPrim;\n\t\t// A Primary surface has not backbuffer attached surfaces actually, \n\t\t// so don't rely on ddraw and call the callback function directly.\n\t\t// Needed to make Nox working.\n\t\tDDSURFACEDESC2 ddsd;\n\t\t// first, call hooked function\n\t\tres=(*pEnumAttachedSurfaces)(lpdds, lpContext, lpEnumSurfacesCallback);\n\t\tif (res) \n\t\t\tOutTraceE(\"EnumAttachedSurfaces: ERROR %x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\tif(lpDDSPrim = dxwss.GetPrimarySurface()){\n\t\t\tddsd.dwSize=Set_dwSize_From_Surface();\n\t\t\tres=lpDDSPrim->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd);\n\t\t\tif(res){\n\t\t\t\tOutTraceE(\"EnumAttachedSurfaces: GetSurfaceDesc ERROR %x(%s)\\n\",\n\t\t\t\tres, ExplainDDError(res));\n\t\t\t\treturn res;\n\t\t\t}\n\t\t\tres=(lpEnumSurfacesCallback)(lpDDSPrim, (LPDDSURFACEDESC)&ddsd, lpContext);\n\t\t\tOutTraceDW(\"EnumSurfacesCallback: on DDSPrim res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t}\n\t\treturn DD_OK; // for GTA (first episode, window version \"gtawin.exe\")\n\t}\n\tres=(*pEnumAttachedSurfaces)(lpdds, lpContext, lpEnumSurfacesCallback);\n\tif (res) \n\t\tOutTraceE(\"EnumAttachedSurfaces: ERROR %x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\treturn res;\n}\n\nHRESULT WINAPI extEnumAttachedSurfaces1(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback)\n{ return extEnumAttachedSurfaces(pEnumAttachedSurfaces1, lpdds, lpContext, lpEnumSurfacesCallback); }\nHRESULT WINAPI extEnumAttachedSurfaces2(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback)\n{ return extEnumAttachedSurfaces(pEnumAttachedSurfaces2, lpdds, lpContext, lpEnumSurfacesCallback); }\nHRESULT WINAPI extEnumAttachedSurfaces3(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback)\n{ return extEnumAttachedSurfaces(pEnumAttachedSurfaces3, lpdds, lpContext, lpEnumSurfacesCallback); }\nHRESULT WINAPI extEnumAttachedSurfaces4(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback)\n{ return extEnumAttachedSurfaces(pEnumAttachedSurfaces4, lpdds, lpContext, lpEnumSurfacesCallback); }\nHRESULT WINAPI extEnumAttachedSurfaces7(LPDIRECTDRAWSURFACE lpdds, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback)\n{ return extEnumAttachedSurfaces(pEnumAttachedSurfaces7, lpdds, lpContext, lpEnumSurfacesCallback); }\n\nstatic HRESULT WINAPI extAddAttachedSurface(AddAttachedSurface_Type pAddAttachedSurface, LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddsadd)\n{\n\tHRESULT res;\n\tBOOL IsPrim, IsBack;\n\n\t// You can add backbuffers to primary surfaces to join the flipping chain, but you can't do that\n\t// to an emulated primary surface, and you receive a DDERR_CANNOTATTACHSURFACE error code.\n\t// In that case, it's worth to try to emulate the attach, and since the Flip method is emulated, \n\t// just remember this for further handling in the Flip operation.\n\t// But beware: this holds to BACKBUFFER surfaces only, and NOT for attached ZBUFFERS or similar!\n\n\t// If the surface was created with DDSCAPS_BACKBUFFER/ZBUFFER capabilities, it should be in the \n\t// surface stack already, so better avoid setting unknown version and capabilities here... \n\n\t// Note: should DxWnd trace the difference between a potential BACK/ZBUFFER surface and an active one?\n\t// The program can create a surface with backbuffer/zbuffer capabilities, but assign the effective \n\t// role afterwards, here while performing the attach to the master surface.\n\n\tIsPrim=dxwss.IsAPrimarySurface(lpdds);\n\tIsBack=dxwss.IsABackBufferSurface(lpdds);\n\tOutTraceDDRAW(\"AddAttachedSurface: lpdds=%x%s lpddsadd=%x%s\\n\", lpdds, IsPrim?\"(PRIM)\":(IsBack?\"(BACK)\":\"\"), lpddsadd, (lpddsadd==lpDDZBuffer)?\"(ZBUF)\":\"\");\n\n\t//if(!lpddsadd) return DDERR_CANNOTATTACHSURFACE; // to avoid a crash...\n\tres=(*pAddAttachedSurface)(lpdds, lpddsadd);\n\tif (res) {\n\t\tHRESULT sdres;\n\t\tDDSURFACEDESC2 sd;\n\t\tif (res) OutTraceE(\"AddAttachedSurface: ERROR %x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\tsd.dwSize=Set_dwSize_From_Surface();\n\t\tsdres=lpddsadd->GetSurfaceDesc((DDSURFACEDESC *)&sd);\n\t\tif (sdres) \n\t\t\tOutTraceE(\"AddAttachedSurface: GetSurfaceDesc ERROR res=%x at %d\\n\", sdres, __LINE__);\n\t\telse\n\t\t\tOutTraceDW(\"AddAttachedSurface: GetSurfaceDesc dwCaps=%x(%s)\\n\", \n\t\t\t\tsd.ddsCaps.dwCaps, ExplainDDSCaps(sd.ddsCaps.dwCaps));\n\t\tif (IsPrim){\n\t\t\tif (sd.ddsCaps.dwCaps & DDSCAPS_BACKBUFFER)\n\t\t\tif ((dxw.dwFlags1 & EMULATESURFACE) && (res==DDERR_CANNOTATTACHSURFACE) ||\n\t\t\t\t(res==DDERR_NOEXCLUSIVEMODE))\n\t\t\tOutTraceDW(\"AddAttachedSurface: emulating BACKBUFFER attach on PRIMARY\\n\");\n\t\t\tres=DD_OK;\n\t\t}\n\t\t//else if (IsBack) {\n\t\telse {\n\t\t\t// v2.02.13: emulate ZBUFFER attach to backbuffer/plain surface: do nothing and return OK\n\t\t\t// this trick makes at least \"Nocturne\" work also in emulated mode when hardware acceleration\n\t\t\t// is set in the game \"Options\" menu. \n\t\t\tif (sd.ddsCaps.dwCaps & DDSCAPS_ZBUFFER) // DDSCAPS_BACKBUFFER for double buffering ???\n\t\t\tif ((dxw.dwFlags1 & EMULATESURFACE) && (res==DDERR_CANNOTATTACHSURFACE)){\n\t\t\t\tOutTraceDW(\"AddAttachedSurface: emulating ZBUFFER attach on %s surface\\n\", IsBack ? \"BACKBUFFER\" : \"PLAIN\");\n\t\t\t\tres=DD_OK;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (res) OutTraceE(\"AddAttachedSurface: ERROR %x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extAddAttachedSurface1(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddsadd)\n{ return extAddAttachedSurface(pAddAttachedSurface1, lpdds, lpddsadd); }\nHRESULT WINAPI extAddAttachedSurface2(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddsadd)\n{ return extAddAttachedSurface(pAddAttachedSurface2, lpdds, lpddsadd); }\nHRESULT WINAPI extAddAttachedSurface3(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddsadd)\n{ return extAddAttachedSurface(pAddAttachedSurface3, lpdds, lpddsadd); }\nHRESULT WINAPI extAddAttachedSurface4(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddsadd)\n{ return extAddAttachedSurface(pAddAttachedSurface4, lpdds, lpddsadd); }\nHRESULT WINAPI extAddAttachedSurface7(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddsadd)\n{ return extAddAttachedSurface(pAddAttachedSurface7, lpdds, lpddsadd); }\n\nstatic HRESULT WINAPI extDeleteAttachedSurface(DeleteAttachedSurface_Type pDeleteAttachedSurface, LPDIRECTDRAWSURFACE lpdds,  DWORD dwflags, LPDIRECTDRAWSURFACE lpddsdel)\n{\n\tHRESULT res;\n\tOutTraceDDRAW(\"DeleteAttachedSurface: lpdds=%x flags=%x lpddsdel=%x\\n\", lpdds, dwflags, lpddsdel);\n\tres=(*pDeleteAttachedSurface)(lpdds, dwflags, lpddsdel);\n\tif(res) OutTraceE(\"DeleteAttachedSurface: ERROR %x(%s)\\n\", res, ExplainDDError(res));\n\tif (res && dxwss.IsABackBufferSurface(lpddsdel)){\n\t\tOutTraceDW(\"DeleteAttachedSurface: emulating surface detach lpdds=%x\\n\", lpddsdel);\n\t\tres = DD_OK;\n\t}\n\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;\n\treturn res;\n}\n\nHRESULT WINAPI extDeleteAttachedSurface1(LPDIRECTDRAWSURFACE lpdds,  DWORD dwflags, LPDIRECTDRAWSURFACE lpddsdel)\n{ return extDeleteAttachedSurface(pDeleteAttachedSurface1, lpdds,  dwflags, lpddsdel); }\nHRESULT WINAPI extDeleteAttachedSurface2(LPDIRECTDRAWSURFACE lpdds,  DWORD dwflags, LPDIRECTDRAWSURFACE lpddsdel)\n{ return extDeleteAttachedSurface(pDeleteAttachedSurface2, lpdds,  dwflags, lpddsdel); }\nHRESULT WINAPI extDeleteAttachedSurface3(LPDIRECTDRAWSURFACE lpdds,  DWORD dwflags, LPDIRECTDRAWSURFACE lpddsdel)\n{ return extDeleteAttachedSurface(pDeleteAttachedSurface3, lpdds,  dwflags, lpddsdel); }\nHRESULT WINAPI extDeleteAttachedSurface4(LPDIRECTDRAWSURFACE lpdds,  DWORD dwflags, LPDIRECTDRAWSURFACE lpddsdel)\n{ return extDeleteAttachedSurface(pDeleteAttachedSurface4, lpdds,  dwflags, lpddsdel); }\nHRESULT WINAPI extDeleteAttachedSurface7(LPDIRECTDRAWSURFACE lpdds,  DWORD dwflags, LPDIRECTDRAWSURFACE lpddsdel)\n{ return extDeleteAttachedSurface(pDeleteAttachedSurface7, lpdds,  dwflags, lpddsdel); }\n\nHRESULT WINAPI cbDump(LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext)\n{\n\tOutTraceDW(\"EnumDisplayModes: CALLBACK lpdds=%x Context=%x Caps=%x(%s)\\n\", \n\t\tlpDDSurfaceDesc, lpContext,\n\t\tlpDDSurfaceDesc->ddsCaps.dwCaps, ExplainDDSCaps(lpDDSurfaceDesc->ddsCaps.dwCaps));\n\treturn 1;\n}\n\n// BEWARE!!!\n// in order to meet Direct3D expectations, it seems that we require this policy:\n// when a ZBUFFER surface is created, its dwCaps value must be saved and restored identically on GetSurfaceDesc and GetCaps\n// A surface is known to be virtually a primary or backbuffer only by looking at the surfaces stack dxwss\n// On the contrary, a surface is known to be a ZBUFFER only after retrieving its capabilities with pGetCaps or pGetSurfaceDesc\n// hence the IsZBuf flag is set after the query and can't be reflected in the first log line!\n// The same comment / logic is valid also for extGetSurfaceDesc wrapper\n\nstatic HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps)\n{\n\tHRESULT res;\n\tBOOL IsFixed=FALSE;\n\tint role;\n\tSurfaceDB_Type *ps;\n\tchar *sLabel;\n\n\tps = dxwss.GetSurface(lpdds);\n\n\t// BEWARE: ZBUFFER surfaces could be created automatically so that they could exist without\n\t// being regisered in surface stack. You must query the actual surface capabilities.\n\tres=(*pGetCapsS)(lpdds, caps);\n\tif(res) \n\t\tOutTraceE(\"GetCaps(S%d): ERROR lpdds=%x err=%x(%s)\\n\", dxInterface, lpdds, res, ExplainDDError(res));\n\telse\n\t\tOutTraceDDRAW(\"GetCaps(S%d): lpdds=%x caps=%x(%s)\\n\", dxInterface, lpdds, caps->dwCaps, ExplainDDSCaps(caps->dwCaps));\n\n\tsLabel=\"\";\n\trole = SURFACE_ROLE_UNKNOWN;\n\tif (ps) {\n\t\trole = ps->uRole;\n\t\tswitch(role){\n\t\t\tcase SURFACE_ROLE_PRIMARY: sLabel=\"(PRIM)\"; break;\n\t\t\tcase SURFACE_ROLE_BACKBUFFER: sLabel=\"(BACK)\"; break;\n\t\t\tcase SURFACE_ROLE_ZBUFFER: sLabel=\"(ZBUF)\"; break;\n\t\t\tcase SURFACE_ROLE_3DREF: sLabel=\"(3DREF)\"; break;\n\t\t}\n\t}\n\telse {\n\t\tif (caps->dwCaps & DDSCAPS_ZBUFFER) {\n\t\t\tsLabel=\"(ZBUF)\";\n\t\t\trole = SURFACE_ROLE_ZBUFFER;\n\t\t}\n\t}\n\n\tif(!(dxw.IsEmulated || dxw.Windowize)) return res;\n\n\tswitch(role) {\n\t\tcase SURFACE_ROLE_PRIMARY:\n\t\t\tIsFixed=TRUE;\n\t\t\tcaps->dwCaps = SetPrimaryCaps(dxwss.GetCaps(lpdds));\n\t\t\tbreak;\n\t\tcase SURFACE_ROLE_BACKBUFFER:\n\t\t\tIsFixed=TRUE;\n\t\t\tcaps->dwCaps = SetBackBufferCaps(dxwss.GetCaps(lpdds));\n\t\t\tbreak;\n\t\tcase SURFACE_ROLE_ZBUFFER:\n\t\t\tIsFixed=TRUE;\n\t\t\tcaps->dwCaps = SetZBufferCaps(dxwss.GetCaps(lpdds));\n\t\t\tbreak;\n\t\tcase SURFACE_ROLE_3DREF:\n\t\t\tIsFixed=TRUE;\n\t\t\tcaps->dwCaps = dxwss.GetCaps(lpdds);\n\t\t\tbreak;\n\t}\n\n\tif(IsFixed) OutTraceDW(\"GetCaps(S%d): lpdds=%x FIXED %s caps=%x(%s)\\n\", dxInterface, lpdds, sLabel, caps->dwCaps, ExplainDDSCaps(caps->dwCaps));\n\tif(IsTraceHex) HexTrace((unsigned char *)caps, sizeof(DDSCAPS));\n\treturn res;\n}\n\nHRESULT WINAPI extGetCaps1S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps)\n{ return extGetCapsS(1, pGetCaps1S, lpdds, caps); }\nHRESULT WINAPI extGetCaps2S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps)\n{ return extGetCapsS(2, pGetCaps2S, lpdds, caps); }\nHRESULT WINAPI extGetCaps3S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS caps)\n{ return extGetCapsS(3, pGetCaps3S, lpdds, caps); }\nHRESULT WINAPI extGetCaps4S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 caps)\n{ return extGetCapsS(4, (GetCapsS_Type)pGetCaps4S, lpdds, (LPDDSCAPS)caps); }\nHRESULT WINAPI extGetCaps7S(LPDIRECTDRAWSURFACE lpdds, LPDDSCAPS2 caps)\n{ return extGetCapsS(7, (GetCapsS_Type)pGetCaps7S, lpdds, (LPDDSCAPS)caps); }\n\nstatic HRESULT WINAPI extGetSurfaceDesc(int dxversion, GetSurfaceDesc_Type pGetSurfaceDesc, LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd)\n{\n\tHRESULT res;\n\tBOOL IsFixed = FALSE;\n\tSurfaceDB_Type *ps;\n\tint role;\n\tchar *sLabel;\n\n\tif (!pGetSurfaceDesc) {\n\t\tOutTraceE(\"GetSurfaceDesc: ERROR no hooked function\\n\");\n\t\treturn DDERR_INVALIDPARAMS;\n\t}\n\n\tps = dxwss.GetSurface(lpdds);\n\n\tint prevsize = lpddsd->dwSize;\n\tswitch(dxversion){\n\t\tcase 1:\n\t\tcase 2:\n\t\tcase 3: \n\t\t\tlpddsd->dwSize = sizeof(DDSURFACEDESC);\n\t\t\tbreak;\n\t\tcase 4:\n\t\tcase 7:\n\t\t\tlpddsd->dwSize = sizeof(DDSURFACEDESC2);\n\t\t\tbreak;\n\t}\n\tif(prevsize != lpddsd->dwSize) OutTraceDW(\"GetSurfaceDesc(%d): FIXED dwSize=%d->%d\\n\", dxversion, prevsize, lpddsd->dwSize);\n\n\tres=(*pGetSurfaceDesc)(lpdds, lpddsd);\n\tif(res) {\n\t\tOutTraceE(\"GetSurfaceDesc(%d): ERROR err=%x(%s)\\n\", dxversion, res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\n\tsLabel=\"\";\n\trole = SURFACE_ROLE_UNKNOWN;\n\tif (ps) {\n\t\trole = ps->uRole;\n\t\tswitch(role){\n\t\t\tcase SURFACE_ROLE_PRIMARY: sLabel=\"(PRIM)\"; break;\n\t\t\tcase SURFACE_ROLE_BACKBUFFER: sLabel=\"(BACK)\"; break;\n\t\t\tcase SURFACE_ROLE_ZBUFFER: sLabel=\"(ZBUF)\"; break;\n\t\t\tcase SURFACE_ROLE_3DREF: sLabel=\"(3DREF)\"; break;\n\t\t}\n\t}\n\telse {\n\t\tif (lpddsd->ddsCaps.dwCaps & DDSCAPS_ZBUFFER) {\n\t\t\tsLabel=\"(ZBUF)\";\n\t\t\trole = SURFACE_ROLE_ZBUFFER;\n\t\t}\n\t}\n\n\tOutTraceDDRAW(\"GetSurfaceDesc(%d): lpdds=%x%s %s\\n\", dxversion, lpdds, sLabel, LogSurfaceAttributes((LPDDSURFACEDESC2)lpddsd, \"GetSurfaceDesc\", __LINE__));\n\n\tif(!(dxw.IsEmulated || dxw.Windowize)) return res;\n\n\tswitch(role) {\n\t\tcase SURFACE_ROLE_PRIMARY:\n\t\t\tIsFixed=TRUE;\n\t\t\t//if (dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddpfPixelFormat = dxw.VirtualPixelFormat;\n\t\t\tlpddsd->ddsCaps.dwCaps = SetPrimaryCaps(dxwss.GetCaps(lpdds));\n\t\t\tlpddsd->dwBackBufferCount=DDSD_Prim.dwBackBufferCount;\n\t\t\tlpddsd->dwHeight=dxw.GetScreenHeight();\n\t\t\tlpddsd->dwWidth=dxw.GetScreenWidth();\n\t\t\tbreak;\n\t\tcase SURFACE_ROLE_BACKBUFFER:\n\t\t\tIsFixed=TRUE;\n\t\t\t//if (dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddpfPixelFormat = dxw.VirtualPixelFormat; // v2.04.20\n\t\t\tlpddsd->ddsCaps.dwCaps = SetBackBufferCaps(dxwss.GetCaps(lpdds));\n\t\t\tbreak;\n\t\tcase SURFACE_ROLE_ZBUFFER:\n\t\t\tIsFixed=TRUE;\n\t\t\tlpddsd->ddsCaps.dwCaps = SetZBufferCaps(dxwss.GetCaps(lpdds));\n\t\t\tbreak;\n\t\tcase SURFACE_ROLE_3DREF:\n\t\t\tIsFixed=TRUE;\n\t\t\tlpddsd->ddsCaps.dwCaps = dxwss.GetCaps(lpdds);\n\t\t\tbreak;\n\t}\n\t\n\tif(IsFixed) OutTraceDW(\"GetSurfaceDesc: FIXED lpdds=%x %s\\n\", lpdds, LogSurfaceAttributes((LPDDSURFACEDESC2)lpddsd, sLabel, __LINE__));\n\tif(IsTraceHex) HexTrace((unsigned char *)lpddsd, sizeof(DDSURFACEDESC));\n\treturn DD_OK;\n}\n\n// Beware: despite the surface version, some game (The Sims!!!) intentionally uses a different dwSize, so that\n// you shouldn't reset the value\n\nHRESULT WINAPI extGetSurfaceDesc1(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd)\n{ return extGetSurfaceDesc(1, pGetSurfaceDesc1, lpdds, lpddsd); }\nHRESULT WINAPI extGetSurfaceDesc2(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd)\n{ return extGetSurfaceDesc(2, pGetSurfaceDesc2, lpdds, lpddsd); }\nHRESULT WINAPI extGetSurfaceDesc3(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpddsd)\n{ return extGetSurfaceDesc(3, pGetSurfaceDesc3, lpdds, lpddsd); }\nHRESULT WINAPI extGetSurfaceDesc4(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 lpddsd)\n{ return extGetSurfaceDesc(4, (GetSurfaceDesc_Type)pGetSurfaceDesc4, (LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)lpddsd); }\nHRESULT WINAPI extGetSurfaceDesc7(LPDIRECTDRAWSURFACE2 lpdds, LPDDSURFACEDESC2 lpddsd)\n{ return extGetSurfaceDesc(7, (GetSurfaceDesc_Type)pGetSurfaceDesc7, (LPDIRECTDRAWSURFACE)lpdds, (LPDDSURFACEDESC)lpddsd); }\n\nstatic ULONG WINAPI extReleaseD(int dxversion, ReleaseD_Type pReleaseD, LPDIRECTDRAW lpdd)\n{\n\tULONG ActualRef;\n\tLONG VirtualRef;\n\n\tOutTraceDDRAW(\"Release(D%d): lpdd=%x\\n\", dxversion, lpdd);\n\tif((ReleaseD_Type)extReleaseD == pReleaseD) {\n\t\tOutTraceE(\"Release(D) ERROR: bad hooker pReleaseD=%x\\n\", pReleaseD);\n\t\treturn 0;\n\t}\n\n\tActualRef=(*pReleaseD)(lpdd);\n\tVirtualRef=(LONG)ActualRef;\n\tOutTraceDW(\"Release(D): lpdd=%x service_lpdd=%x ref=%d\\n\", lpdd, lpPrimaryDD, ActualRef);\n\n\tif (lpdd == lpPrimaryDD) { // v2.1.87: fix for Dungeon Keeper II\n\t\tif(dxw.dwFlags4 & FIXREFCOUNTER){\n\t\t\t// v2.02.41: fix the ref counter to sumulate the unwindowed original situation\n\t\t\t--VirtualRef; // why ????\n\t\t\tif(dxwss.GetBackBufferSurface()) --VirtualRef;\n\t\t\tif(dxw.dwFlags1 & EMULATESURFACE){\n\t\t\t\tif(lpDDSEmu_Prim) --VirtualRef;\n\t\t\t\tif(lpDDSEmu_Back) --VirtualRef;\n\t\t\t\tif(lpDDZBuffer) --VirtualRef; // is it correct ? Inserted to fix \"Microsoft International Soccer 2000\" in hw mode\n\t\t\t}\n\t\t\tif(VirtualRef<0) VirtualRef=0;\n\t\t\tOutTraceDW(\"Release(D): fixed ref counter %d->%d\\n\", ActualRef, VirtualRef);\n\t\t}\n\t\tif((dxversion<4) && (ActualRef==0)){\n\t\t\t// directdraw old versions automatically free all linked objects when the parent session is closed.\n\t\t\tOutTraceDW(\"Release(D): RefCount=0 - service object RESET condition\\n\");\n\t\t\tlpDDSEmu_Prim=NULL;\n\t\t\tlpDDSEmu_Back=NULL;\n\t\t\tlpDDP=NULL;\n\t\t\tiDDPExtraRefCounter = 0;\n\t\t}\n\t\tif(ActualRef==0) lpPrimaryDD=NULL; // v2.03.61\n\t}\n\n\t// when lpdd session is closed (ref==0) the system restores the default color depth\n\t// so if FORCE16BPP is set, dxwnd must restore the 16BPP value\n\t//extern void SwitchTo16BPP();\n\t//if((ActualRef==0) && (dxw.dwFlags3 & FORCE16BPP)) SwitchTo16BPP();\n\n\tif(dxw.dwFlags4 & RETURNNULLREF) VirtualRef = 0;\n\n\tOutTraceDDRAW(\"Release(D): lpdd=%x ref=%x\\n\", lpdd, VirtualRef);\n\treturn (ULONG)VirtualRef;\n}\n\nULONG WINAPI extReleaseD1(LPDIRECTDRAW lpdd)\n{ return extReleaseD(1, pReleaseD1, lpdd); }\nULONG WINAPI extReleaseD2(LPDIRECTDRAW lpdd)\n{ return extReleaseD(2, pReleaseD2, lpdd); }\nULONG WINAPI extReleaseD3(LPDIRECTDRAW lpdd)\n{ return extReleaseD(3, pReleaseD3, lpdd); }\nULONG WINAPI extReleaseD4(LPDIRECTDRAW lpdd)\n{ return extReleaseD(4, pReleaseD4, lpdd); }\nULONG WINAPI extReleaseD7(LPDIRECTDRAW lpdd)\n{ return extReleaseD(7, pReleaseD7, lpdd); }\n\nstatic HRESULT WINAPI extCreateClipper(int dxversion, CreateClipper_Type pCreateClipper, LPDIRECTDRAW lpdd, DWORD dwflags, \n\t\tLPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter)\n{\n\tHRESULT res;\n\tOutTraceDDRAW(\"CreateClipper(%d): lpdd=%x flags=%x\\n\", dxversion, lpdd, dwflags);\n\tres=(*pCreateClipper)(lpdd, dwflags, lplpDDClipper, pUnkOuter);\n\tif(res) {\n\t\tOutTraceE(\"CreateClipper: ERROR res=%x(%s)\\n\", lpdd, res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\tOutTraceDDRAW(\"CreateClipper: OK lpddclipper=%x\\n\", *lplpDDClipper);\n\tHookDDClipper(lplpDDClipper); // there is a single Clipper intrface!\n\treturn res;\n}\n\nHRESULT WINAPI extCreateClipper1(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter)\n{ return extCreateClipper(1, pCreateClipper1, lpdd, dwflags, lplpDDClipper, pUnkOuter); }\nHRESULT WINAPI extCreateClipper2(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter)\n{ return extCreateClipper(2, pCreateClipper2, lpdd, dwflags, lplpDDClipper, pUnkOuter); }\nHRESULT WINAPI extCreateClipper3(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter)\n{ return extCreateClipper(3, pCreateClipper3, lpdd, dwflags, lplpDDClipper, pUnkOuter); }\nHRESULT WINAPI extCreateClipper4(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter)\n{ return extCreateClipper(4, pCreateClipper4, lpdd, dwflags, lplpDDClipper, pUnkOuter); }\nHRESULT WINAPI extCreateClipper7(LPDIRECTDRAW lpdd, DWORD dwflags, LPDIRECTDRAWCLIPPER FAR* lplpDDClipper, IUnknown FAR* pUnkOuter)\n{ return extCreateClipper(7, pCreateClipper7, lpdd, dwflags, lplpDDClipper, pUnkOuter); }\n\nHRESULT WINAPI extReleaseC(LPDIRECTDRAWCLIPPER lpddClip)\n{\n\tULONG ref;\n\n\tref = (*pReleaseC)(lpddClip);\n\n\tOutTraceDDRAW(\"Release(C): PROXED lpddClip=%x ref=%x\\n\", lpddClip, ref);\n\treturn ref;\n}\n\nHRESULT WINAPI extGetClipList(LPDIRECTDRAWCLIPPER lpddClip, LPRECT lpRect, LPRGNDATA lpRgnData, LPDWORD lpw)\n{\n\tHRESULT res;\n\n\t// returned clip region (both RgnData and single RECT array) should be relocated in window mode\n\t// an easy way to do that, though not accurate, is to consider the clip region as the whole virtual screen\n\t// a better way is to use the dxw.UnmapWindow(RECT *) method\n\t// this makes \"Full Pipe\" working without clipping problems.\n\n\tif(IsTraceDDRAW){\n\t\tchar sInfo[81];\n\t\tif (lpRect) sprintf(sInfo, \"rect=(%d,%d)-(%d,%d) \", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t\telse sprintf(sInfo, \"rect=(NULL) \");\n\t\tOutTrace(\"GetClipList(C): lpddClip=%x %s\\n\", lpddClip, sInfo);\n\t}\n\tres=(*pGetClipList)(lpddClip, lpRect, lpRgnData, lpw);\n\tif(IsTraceDDRAW){\n\t\tif(res) OutTrace(\"GetClipList(C): ERROR err=%x(%s)\\n\", res, ExplainDDError(res));\n\t\telse{\n\t\t\tif(lpRgnData){\n\t\t\t\tOutTrace(\"GetClipList(C): w=%x rgndataheader{size=%d type=%x count=%d RgnSize=%d bound=(%d,%d)-(%d,%d)}\\n\", \n\t\t\t\t\t*lpw, lpRgnData->rdh.dwSize, lpRgnData->rdh.iType, lpRgnData->rdh.nCount, lpRgnData->rdh.nRgnSize, \n\t\t\t\t\tlpRgnData->rdh.rcBound.left, lpRgnData->rdh.rcBound.top, lpRgnData->rdh.rcBound.right, lpRgnData->rdh.rcBound.bottom);\n\t\t\t\tif(dxw.Windowize && (dxw.dwFlags1 & CLIENTREMAPPING)){\n\t\t\t\t\tdxw.UnmapWindow(&lpRgnData->rdh.rcBound);\n\t\t\t\t\t//lpRgnData->rdh.rcBound = dxw.GetScreenRect();\n\t\t\t\t\tOutTraceDW(\"GetClipList(C): w=%x rgndataheader{size=%d type=%x count=%d RgnSize=%d REMAPPED bound=(%d,%d)-(%d,%d)}\\n\", \n\t\t\t\t\t\t*lpw, lpRgnData->rdh.dwSize, lpRgnData->rdh.iType, lpRgnData->rdh.nCount, lpRgnData->rdh.nRgnSize, \n\t\t\t\t\t\tlpRgnData->rdh.rcBound.left, lpRgnData->rdh.rcBound.top, lpRgnData->rdh.rcBound.right, lpRgnData->rdh.rcBound.bottom);\n\t\t\t\t}\n\t\t\t\tif(IsDebug){\n\t\t\t\t\tRECT *rgns;\n\t\t\t\t\trgns = (RECT *)lpRgnData->Buffer;\n\t\t\t\t\tfor(DWORD i=0; i<lpRgnData->rdh.nCount; i++){\n\t\t\t\t\t\tOutTrace(\"GetClipList(C): rect[%d]=(%d,%d)-(%d,%d)\\n\", \n\t\t\t\t\t\t\ti, rgns[i].left, rgns[i].top, rgns[i].right, rgns[i].bottom);\n\t\t\t\t\t\tif(dxw.Windowize && (dxw.dwFlags1 & CLIENTREMAPPING)){\n\t\t\t\t\t\t\tdxw.UnmapWindow(&rgns[i]);\n\t\t\t\t\t\t\t//rgns[i] = dxw.GetScreenRect();\n\t\t\t\t\t\t\tOutTrace(\"GetClipList(C): REMAPPED rect[%d]=(%d,%d)-(%d,%d)\\n\", \n\t\t\t\t\t\t\t\ti, rgns[i].left, rgns[i].top, rgns[i].right, rgns[i].bottom);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse{\n\t\t\t\tOutTrace(\"GetClipList(C): w=%x\\n\", *lpw);\n\t\t\t}\n\t\t}\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extSetClipList(LPDIRECTDRAWCLIPPER lpddClip, LPRGNDATA lpClipList, DWORD dwFlags)\n{\n\tHRESULT res;\n\tOutTraceP(\"SetClipList(C): lpddClip=%x lpcliplist=%x flags=%x\\n\", lpddClip, lpClipList, dwFlags);\n\tres = (*pSetClipList)(lpddClip, lpClipList, dwFlags);\n\tif(res) OutTraceP(\"SetClipList(C): ERROR err=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extSetHWnd(LPDIRECTDRAWCLIPPER lpddClip, DWORD w, HWND hwnd)\n{\n\tHRESULT res;\n\tOutTraceP(\"SetHWnd(C): lpddClip=%x w=%x hwnd=%x\\n\", lpddClip, w, hwnd);\n\tres=(*pSetHWnd)(lpddClip, w, hwnd);\n\tif(res) OutTraceP(\"SetHWnd(C): ERROR err=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extReleaseP(LPDIRECTDRAWPALETTE lpddPalette)\n{\n\tULONG ref;\n\t\n\tref = (*pReleaseP)(lpddPalette);\n\tOutTraceDDRAW(\"Release(P): lpddPalette=%x ref=%x\\n\", lpddPalette, ref);\n\n\tif (lpddPalette == lpDDP) {\n\t\tif(dxw.dwFlags4 & FIXREFCOUNTER) {\n\t\t\tOutTraceDW(\"Release(P): lpDDP extrarefcount=%d\\n\", iDDPExtraRefCounter);\n\t\t\tif((ULONG)iDDPExtraRefCounter >= ref){\n\t\t\t\twhile(ref) ref = (*pReleaseP)(lpddPalette);\n\t\t\t\tlpDDP=NULL;\n\t\t\t\tiDDPExtraRefCounter = 0;\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tref -= iDDPExtraRefCounter;\n\t\t}\n\t\tif (ref <= 0) {\n\t\t\tref = 0;\n\t\t\tOutTraceDW(\"Release(P): clearing lpDDP=%x->NULL\\n\", lpDDP);\n\t\t\tlpDDP=NULL; \n\t\t}\n\t\tif(dxw.dwFlags4 & RETURNNULLREF) ref = 0;\n\t}\n\n\treturn ref;\n}\n\nstatic BOOL IsMatchingDeviceW(LPWSTR lpDriverName)\n{\n\tWCHAR MatchDev[20];\n\twsprintfW(MatchDev, L\"DISPLAY%d\", dxw.MonitorId+1);\n\treturn (wcsstr(lpDriverName, MatchDev) != NULL);\n}\n\nstatic BOOL IsMatchingDeviceA(LPCSTR lpDriverName)\n{\n\tCHAR MatchDev[20];\n\tsprintf(MatchDev, \"DISPLAY%d\", dxw.MonitorId+1);\n\treturn (strstr(lpDriverName, MatchDev) != NULL);\n}\n\nBOOL FAR PASCAL DDEnumerateCallbackFilterW(GUID FAR *lpGuid, LPWSTR lpDriverDescription, LPWSTR lpDriverName, LPVOID lpContext)\n{\n\tBOOL res;\n\ttypedef struct {LPDDENUMCALLBACKW lpCallback; LPVOID lpContext;} Context_Type;\n\tContext_Type *p=(Context_Type *)lpContext;\n\tOutTraceDW(\"DDEnumerateCallback: guid=%x DriverDescription=\\\"%ls\\\" DriverName=\\\"%ls\\\" Context=%x\\n\", \n\t\tlpGuid, lpDriverDescription, lpDriverName, p->lpContext);\n\tif(dxw.MonitorId != -1){\n\t\tif(IsMatchingDeviceW(lpDriverName)){\n\t\t\t(*p->lpCallback)(lpGuid, lpDriverDescription, lpDriverName, p->lpContext);\n\t\t\tres=FALSE;\n\t\t}\n\t\telse {\n\t\t\tOutTraceDW(\"DDEnumerateCallback: SKIP DriverName=\\\"%ls\\\"\\n\", lpDriverName);\n\t\t\tres=TRUE;\n\t\t}\n\t}\n\telse{\n\t\tif((lpGuid==NULL) || !(dxw.dwFlags2 & HIDEMULTIMONITOR)) res=(*p->lpCallback)(lpGuid, lpDriverDescription, lpDriverName, p->lpContext);\n\t\tif((lpGuid==NULL) && (dxw.dwFlags2 & HIDEMULTIMONITOR)) res=FALSE;\n\t}\n\tOutTraceDW(\"DDEnumerateCallback: res=%x(%s)\\n\", res, res?\"continue\":\"break\");\n\treturn res;\n}\n\nBOOL FAR PASCAL DDEnumerateCallbackExFilterW(GUID FAR *lpGuid, LPWSTR lpDriverDescription, LPWSTR lpDriverName, LPVOID lpContext, HMONITOR hm)\n{\n\tBOOL res;\n\ttypedef struct {LPDDENUMCALLBACKEXW lpCallback; LPVOID lpContext;} Context_Type;\n\tContext_Type *p=(Context_Type *)lpContext;\n\tOutTraceDW(\"DDEnumerateCallbackEx: guid=%x DriverDescription=\\\"%ls\\\" DriverName=\\\"%ls\\\" Context=%x hm=%x\\n\", \n\t\tlpGuid, lpDriverDescription, lpDriverName, lpContext, hm);\n\tres=TRUE;\n\t// single monitor handling\n\tif(dxw.MonitorId != -1){\n\t\tif(IsMatchingDeviceW(lpDriverName)){\n\t\t\t(*p->lpCallback)(lpGuid, lpDriverDescription, lpDriverName, p->lpContext, hm);\n\t\t\tres=FALSE;\n\t\t}\n\t\telse{\n\t\t\tOutTraceDW(\"DDEnumerateCallbackEx: SKIP DriverName=\\\"%ls\\\"\\n\", lpDriverName);\n\t\t\tres=TRUE;\n\t\t}\n\t}\n\telse{\n\t\tif((lpGuid==NULL) || !(dxw.dwFlags2 & HIDEMULTIMONITOR)) res=(*p->lpCallback)(lpGuid, lpDriverDescription, lpDriverName, p->lpContext, hm);\n\t\tif((lpGuid==NULL) && (dxw.dwFlags2 & HIDEMULTIMONITOR)) res=FALSE;\n\t}\n\tOutTraceDW(\"DDEnumerateCallbackEx: res=%x(%s)\\n\", res, res?\"continue\":\"break\");\n\treturn res;\n}\n\nBOOL FAR PASCAL DDEnumerateCallbackFilterA(GUID FAR *lpGuid, LPSTR lpDriverDescription, LPSTR lpDriverName, LPVOID lpContext)\n{\n\tBOOL res;\n\ttypedef struct {LPDDENUMCALLBACK lpCallback; LPVOID lpContext;} Context_Type;\n\tContext_Type *p=(Context_Type *)lpContext;\n\tOutTraceDW(\"DDEnumerateCallback: guid=%x DriverDescription=\\\"%s\\\" DriverName=\\\"%s\\\" Context=%x\\n\", \n\t\tlpGuid, lpDriverDescription, lpDriverName, p->lpContext);\n\tres=TRUE;\n\tif(dxw.MonitorId != -1){\n\t\tif(IsMatchingDeviceA(lpDriverName)){\n\t\t\t(*p->lpCallback)(lpGuid, lpDriverDescription, lpDriverName, p->lpContext);\n\t\t\tres=FALSE;\n\t\t}\n\t\telse{\n\t\t\tOutTraceDW(\"DDEnumerateCallback: SKIP DriverName=\\\"%s\\\"\\n\", lpDriverName);\n\t\t\tres=TRUE;\n\t\t}\n\t}\n\telse{\n\t\tif((lpGuid==NULL) || !(dxw.dwFlags2 & HIDEMULTIMONITOR)) res=(*p->lpCallback)(lpGuid, lpDriverDescription, lpDriverName, p->lpContext);\n\t\tif((lpGuid==NULL) && (dxw.dwFlags2 & HIDEMULTIMONITOR)) res=FALSE;\n\t}\n\tOutTraceDW(\"DDEnumerateCallback: res=%x(%s)\\n\", res, res?\"continue\":\"break\");\n\treturn res;\n}\n\nBOOL FAR PASCAL DDEnumerateCallbackExFilterA(GUID FAR *lpGuid, LPSTR lpDriverDescription, LPSTR lpDriverName, LPVOID lpContext, HMONITOR hm)\n{\n\tBOOL res;\n\ttypedef struct {LPDDENUMCALLBACKEX lpCallback; LPVOID lpContext;} Context_Type;\n\tContext_Type *p=(Context_Type *)lpContext;\n\tOutTraceDW(\"DDEnumerateCallbackEx: guid=%x DriverDescription=\\\"%s\\\" DriverName=\\\"%s\\\" Context=%x hm=%x\\n\", \n\t\tlpGuid, lpDriverDescription, lpDriverName, lpContext, hm);\n\tres=TRUE;\n\tif(dxw.MonitorId != -1){\n\t\tif(IsMatchingDeviceA(lpDriverName)){\n\t\t\t(*p->lpCallback)(lpGuid, lpDriverDescription, lpDriverName, p->lpContext, hm);\n\t\t\tres=FALSE;\n\t\t}\n\t\telse{\n\t\t\tOutTraceDW(\"DDEnumerateCallbackEx: SKIP DriverName=\\\"%s\\\"\\n\", lpDriverName);\n\t\t\tres=TRUE;\n\t\t}\n\t}\n\telse{\n\t\tif((lpGuid==NULL) || !(dxw.dwFlags2 & HIDEMULTIMONITOR)) res=(*p->lpCallback)(lpGuid, lpDriverDescription, lpDriverName, p->lpContext, hm);\n\t\tif((lpGuid==NULL) && (dxw.dwFlags2 & HIDEMULTIMONITOR)) res=FALSE;\n\t}\n\tOutTraceDW(\"DDEnumerateCallbackEx: res=%x(%s)\\n\", res, res?\"continue\":\"break\");\n\treturn res;\n}\n\nHRESULT WINAPI extDirectDrawEnumerateA(LPDDENUMCALLBACKA lpCallback, LPVOID lpContext)\n{\n\tHRESULT ret;\n\tOutTraceDDRAW(\"DirectDrawEnumerate[A]: lpCallback=%x lpContext=%x\\n\", lpCallback, lpContext);\n\tif((dxw.dwFlags2 & HIDEMULTIMONITOR) || (dxw.dwTFlags & OUTDEBUG) || (dxw.MonitorId != -1)){\n\t\tstruct {LPDDENUMCALLBACKA lpCallback; LPVOID lpContext;} myContext;\n\t\tmyContext.lpCallback=lpCallback;\n\t\tmyContext.lpContext=lpContext;\n\t\tret=(*pDirectDrawEnumerateA)(DDEnumerateCallbackFilterA, (LPVOID)&myContext);\n\t}\n\telse\n\t\tret=(*pDirectDrawEnumerateA)(lpCallback, lpContext);\n\tif(ret) OutTraceE(\"DirectDrawEnumerate: ERROR res=%x(%s)\\n\", ret, ExplainDDError(ret));\n\treturn ret;\n}\n\nHRESULT WINAPI extDirectDrawEnumerateW(LPDDENUMCALLBACKW lpCallback, LPVOID lpContext)\n{\n\tHRESULT ret;\n\tOutTraceDDRAW(\"DirectDrawEnumerate[W]: lpCallback=%x lpContext=%x\\n\", lpCallback, lpContext);\n\tif((dxw.dwFlags2 & HIDEMULTIMONITOR) || (dxw.dwTFlags & OUTDEBUG) || (dxw.MonitorId != -1)){\n\t\tstruct {LPDDENUMCALLBACKW lpCallback; LPVOID lpContext;} myContext;\n\t\tmyContext.lpCallback=lpCallback;\n\t\tmyContext.lpContext=lpContext;\n\t\tret=(*pDirectDrawEnumerateW)(DDEnumerateCallbackFilterW, (LPVOID)&myContext);\n\t}\n\telse\n\t\tret=(*pDirectDrawEnumerateW)(lpCallback, lpContext);\n\tif(ret) OutTraceE(\"DirectDrawEnumerate: ERROR res=%x(%s)\\n\", ret, ExplainDDError(ret));\n\treturn ret;\n}\n\nHRESULT WINAPI extDirectDrawEnumerateExA(LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags)\n{\n\tHRESULT ret;\n\tOutTraceDDRAW(\"DirectDrawEnumerateEx[A]: lpCallback=%x lpContext=%x Flags=%x(%s)\\n\", \n\t\tlpCallback, lpContext, dwFlags, ExplainDDEnumerateFlags(dwFlags));\n\tif((dxw.dwFlags2 & HIDEMULTIMONITOR) || (dxw.dwTFlags & OUTDEBUG) || (dxw.MonitorId != -1)){\n\t\tstruct {LPDDENUMCALLBACKEXA lpCallback; LPVOID lpContext;} myContext;\n\t\tmyContext.lpCallback=lpCallback;\n\t\tmyContext.lpContext=lpContext;\n\t\tif(dxw.dwFlags2 & HIDEMULTIMONITOR){\n\t\t\tdwFlags &= ~(DDENUM_ATTACHEDSECONDARYDEVICES|DDENUM_DETACHEDSECONDARYDEVICES|DDENUM_NONDISPLAYDEVICES);\n\t\t}\n\t\tret=(*pDirectDrawEnumerateExA)(DDEnumerateCallbackExFilterA, (LPVOID)&myContext, dwFlags);\n\t}\n\telse{\n\t\tret=(*pDirectDrawEnumerateExA)(lpCallback, lpContext, dwFlags);\n\t}\n\tif(ret) OutTraceE(\"DirectDrawEnumerateEx: ERROR res=%x(%s)\\n\", ret, ExplainDDError(ret));\n\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) ret=DD_OK;\n\treturn ret;\n}\n\nHRESULT WINAPI extDirectDrawEnumerateExW(LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags)\n{\n\tHRESULT ret;\n\tOutTraceDDRAW(\"DirectDrawEnumerateEx[W]: lpCallback=%x lpContext=%x Flags=%x(%s)\\n\", \n\t\tlpCallback, lpContext, dwFlags, ExplainDDEnumerateFlags(dwFlags));\n\tif((dxw.dwFlags2 & HIDEMULTIMONITOR) || (dxw.dwTFlags & OUTDEBUG) || (dxw.MonitorId != -1)){\n\t\tstruct {LPDDENUMCALLBACKEXW lpCallback; LPVOID lpContext;} myContext;\n\t\tmyContext.lpCallback=lpCallback;\n\t\tmyContext.lpContext=lpContext;\n\t\tif(dxw.dwFlags2 & HIDEMULTIMONITOR){\n\t\t\tdwFlags &= ~(DDENUM_ATTACHEDSECONDARYDEVICES|DDENUM_DETACHEDSECONDARYDEVICES|DDENUM_NONDISPLAYDEVICES);\n\t\t}\n\t\tret=(*pDirectDrawEnumerateExW)(DDEnumerateCallbackExFilterW, (LPVOID)&myContext, dwFlags);\n\t}\n\telse{\n\t\tret=(*pDirectDrawEnumerateExW)(lpCallback, lpContext, dwFlags);\n\t}\n\tif(ret) OutTraceE(\"DirectDrawEnumerateEx: ERROR res=%x(%s)\\n\", ret, ExplainDDError(ret));\n\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) ret=DD_OK;\n\treturn ret;\n}\n\nHRESULT WINAPI extDDGetGammaRamp(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPDDGAMMARAMP lpgr)\n{\n\tHRESULT ret;\n\tOutTraceDDRAW(\"GetGammaRamp: dds=%x dwFlags=%x\\n\", lpdds, dwFlags);\n\n\tif(dxwss.IsAPrimarySurface(lpdds)) lpdds=lpDDSEmu_Prim;\n\t\n\tret=(*pDDGetGammaRamp)(lpdds, dwFlags, lpgr);\n\tif(ret) {\n\t\tOutTraceE(\"GetGammaRamp: ERROR res=%x(%s)\\n\", ret, ExplainDDError(ret));\n\t\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) {\n\t\t\t// clear the error code, and provide a reasonable gamma ramp array\n\t\t\tfor(int i=0; i<256; i++) lpgr->red[i]=lpgr->green[i]=lpgr->blue[i]=(i * 0x100);\n\t\t\tret=0;\n\t\t}\n\t}\n\telse{\n\t\tif(IsDebug){\n\t\t\tOutTrace(\"GetGammaRamp: RGB=\"); \n\t\t\tfor(int i=0; i<256; i++) OutTrace(\"(%x,%x,%x)\", lpgr->red[i], lpgr->green[i], lpgr->blue[i]);\n\t\t\tOutTrace(\"\\n\");\n\t\t}\n\t}\n\treturn ret;\n}\n\nHRESULT WINAPI extDDSetGammaRamp(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPDDGAMMARAMP lpgr)\n{\n\tHRESULT ret;\n\tOutTraceDDRAW(\"SetGammaRamp: dds=%x dwFlags=%x\\n\", lpdds, dwFlags);\n\tif(IsDebug){\n\t\tOutTrace(\"GetGammaRamp: RGB=\"); \n\t\tfor(int i=0; i<256; i++) OutTrace(\"(%x,%x,%x)\", lpgr->red[i], lpgr->green[i], lpgr->blue[i]);\n\t\tOutTrace(\"\\n\");\n\t}\n\tif (dxw.dwFlags2 & DISABLEGAMMARAMP) return DD_OK;\n\tret=(*pDDSetGammaRamp)(lpdds, dwFlags, lpgr);\n\tif(ret) OutTraceE(\"SetGammaRamp: ERROR res=%x(%s)\\n\", ret, ExplainDDError(ret));\n\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) ret = DD_OK;\n\treturn ret;\n}\n\nstatic HRESULT WINAPI extGetAvailableVidMem(int dxversion, GetAvailableVidMem4_Type pGetAvailableVidMem, LPDIRECTDRAW lpdd, LPDDSCAPS2 lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree)\n{\n\tHRESULT res; \n\t//const DWORD dwMaxMem = 0x7FFFF000;\n        // v03.01.01: limit to smaller value to allow \"Breath of Fire IV\" card detection\n\tconst DWORD dwMaxMem = 0x70000000; \n\tconst DWORD dwHugeMem = 0xF0000000; \n\tOutTraceDDRAW(\"GetAvailableVidMem(D%d): lpdd=%x\\n\", dxversion, lpdd);\n\tres=(*pGetAvailableVidMem)(lpdd, lpDDSCaps, lpdwTotal, lpdwFree);\n\tif(res){\n\t\tif((dxw.dwFlags3 & FORCESHEL) && (res==DDERR_NODIRECTDRAWHW)){\n\t\t\t// fake some video memory....\n\t\t\tOutTraceDW(\"GetAvailableVidMem(D): FORCESHEL mode Total=Free=%x\\n\", dwMaxMem);\n\t\t\tif(lpdwTotal) *lpdwTotal = dwMaxMem; \n\t\t\tif(lpdwFree) *lpdwFree = dwMaxMem;\n\t\t\treturn DD_OK;\n\t\t}\n\t\tOutTraceE(\"GetAvailableVidMem(D): ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\treturn res; \n\t}\n\n\tif(dxversion < 4){ // fix: should include also dxversion 3!!!\n\t\tOutTraceDW(\"GetAvailableVidMem(D%d): DDSCaps=%x(%s) Total=%x Free=%x\\n\", \n\t\t\tdxversion,\n\t\t\tlpDDSCaps->dwCaps, ExplainDDSCaps(lpDDSCaps->dwCaps), \n\t\t\tlpdwTotal?*lpdwTotal:0, lpdwFree?*lpdwFree:0);\n\t}\n\telse{\n\t\tOutTraceDW(\"GetAvailableVidMem(D%d): DDSCaps=%x(%s).%x.%x.%x volumedepth=%d Total=%x Free=%x\\n\", \n\t\t\tdxversion,\n\t\t\tlpDDSCaps->dwCaps, ExplainDDSCaps(lpDDSCaps->dwCaps), \n\t\t\tlpDDSCaps->dwCaps2, lpDDSCaps->dwCaps3, lpDDSCaps->dwCaps4, lpDDSCaps->dwVolumeDepth,\n\t\t\tlpdwTotal?*lpdwTotal:0, lpdwFree?*lpdwFree:0);\n\t}\n\n\tif(!(dxw.dwFlags2 & LIMITRESOURCES)) return res;\n\t\n\t// may need hints ....\n\tif(dxw.bHintActive){\n\t\tif(lpdwTotal && (*lpdwTotal > dwMaxMem)) ShowHint(HINT_LIMITMEM);\n\t\tif(lpdwFree  && (*lpdwFree  > dwMaxMem)) ShowHint(HINT_LIMITMEM);\n\t}\n\n\t// simulate a value overflow condition\n\tif(dxw.dwFlags5 & STRESSRESOURCES){\n\t\tif(lpdwTotal) *lpdwTotal = dwHugeMem;\n\t\tif(lpdwFree) *lpdwFree = dwHugeMem;\n\t\treturn DD_OK;\n\t}\n\t\n\t// check for memory value overflow - see \"Mageslayer\" and \"Take no Prisoners\"\n\tDWORD dwLocalTotal;\n\tif(lpdwTotal == NULL) {\n\t\tlpdwTotal = &dwLocalTotal; // point to usable memory....\n\t\tres=(*pGetAvailableVidMem)(lpdd, lpDDSCaps, lpdwTotal, lpdwFree); // do it again to get total memory\n\t}\n\tif(*lpdwTotal > dwMaxMem){\n\t\tif(lpdwFree != NULL){\n\t\t\tDWORD dwDiff = *lpdwTotal - *lpdwFree;\n\t\t\tif(dwDiff > dwMaxMem){\n\t\t\t\t*lpdwFree = dwMaxMem;\n\t\t\t}\n\t\t\telse{\n\t\t\t\t*lpdwFree = dwMaxMem - dwDiff;\n\t\t\t}\n\t\t}\n\t\t*lpdwTotal = dwMaxMem;\n\t\tOutTraceDW(\"GetAvailableVidMem(D): FIXED Total=%x Free=%x\\n\", *lpdwTotal, *lpdwFree);\n\t}\n\n\treturn res; \n}\n\nHRESULT WINAPI extGetAvailableVidMem2(LPDIRECTDRAW lpdd, LPDDSCAPS lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree)\n{ return extGetAvailableVidMem(2, (GetAvailableVidMem4_Type)pGetAvailableVidMem2, lpdd, (LPDDSCAPS2)lpDDSCaps, lpdwTotal, lpdwFree); }\nHRESULT WINAPI extGetAvailableVidMem3(LPDIRECTDRAW lpdd, LPDDSCAPS lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree)\n{ return extGetAvailableVidMem(3, (GetAvailableVidMem4_Type)pGetAvailableVidMem3, lpdd, (LPDDSCAPS2)lpDDSCaps, lpdwTotal, lpdwFree); }\nHRESULT WINAPI extGetAvailableVidMem4(LPDIRECTDRAW lpdd, LPDDSCAPS2 lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree)\n{ return extGetAvailableVidMem(4, pGetAvailableVidMem4, lpdd, lpDDSCaps, lpdwTotal, lpdwFree); }\nHRESULT WINAPI extGetAvailableVidMem7(LPDIRECTDRAW lpdd, LPDDSCAPS2 lpDDSCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree)\n{ return extGetAvailableVidMem(7, pGetAvailableVidMem7, lpdd, lpDDSCaps, lpdwTotal, lpdwFree); }\n\nHRESULT WINAPI extSetSurfaceDesc(SetSurfaceDesc_Type pSetSurfaceDesc, LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpDDsd2, DWORD dwFlags)\n{\n\tHRESULT res;\n\tOutTrace(\"SetSurfaceDesc: REACHED\\n\");\n\tres = (*pSetSurfaceDesc)(lpdds, lpDDsd2, dwFlags);\n\tif(res) OutTraceE(\"SetSurfaceDesc: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extSetSurfaceDesc3(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpDDsd2, DWORD dwFlags)\n{ return extSetSurfaceDesc(pSetSurfaceDesc3, lpdds, lpDDsd2, dwFlags); }\nHRESULT WINAPI extSetSurfaceDesc4(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpDDsd2, DWORD dwFlags)\n{ return extSetSurfaceDesc(pSetSurfaceDesc4, lpdds, lpDDsd2, dwFlags); }\nHRESULT WINAPI extSetSurfaceDesc7(LPDIRECTDRAWSURFACE lpdds, LPDDSURFACEDESC lpDDsd2, DWORD dwFlags)\n{ return extSetSurfaceDesc(pSetSurfaceDesc7, lpdds, lpDDsd2, dwFlags); }\n\nHRESULT WINAPI extDirectDrawCreateClipper(DWORD dwFlags, LPDIRECTDRAWCLIPPER *lplpDDClipper, IUnknown *pUnkOuter)\n{\n\tHRESULT res;\n\tOutTraceDW(\"DirectDrawCreateClipper: flags=%x\\n\", dwFlags);\n\tres = (*pDirectDrawCreateClipper)(dwFlags, lplpDDClipper, pUnkOuter);\n\tif(res) {\n\t\tOutTraceE(\"DirectDrawCreateClipper: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\tOutTraceDW(\"DirectDrawCreateClipper: OK lpclipper=%x\\n\", *lplpDDClipper);\n\tHookDDClipper(lplpDDClipper);\n\treturn res;\n}\n\nHRESULT WINAPI extEnumOverlayZOrders(int dxversion, EnumOverlayZOrders_Type pEnumOverlayZOrders, LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback)\n{\n\tHRESULT res;\n\tOutTrace(\"EnumOverlayZOrders(%d): lpdds=%x flags=%x(%s)\\n\", dxversion, lpdds, dwFlags, dwFlags?\"FRONTTOBACK\":\"BACKTOFRONT\");\n\tres = (*pEnumOverlayZOrders)(lpdds, dwFlags, lpContext, lpfnCallback);\n\tOutTrace(\"EnumOverlayZOrders: res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extEnumOverlayZOrders1(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback)\n{ return extEnumOverlayZOrders(1, pEnumOverlayZOrders1, lpdds, dwFlags, lpContext, lpfnCallback); }\nHRESULT WINAPI extEnumOverlayZOrders2(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback)\n{ return extEnumOverlayZOrders(2, pEnumOverlayZOrders2, lpdds, dwFlags, lpContext, lpfnCallback); }\nHRESULT WINAPI extEnumOverlayZOrders3(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback)\n{ return extEnumOverlayZOrders(3, pEnumOverlayZOrders3, lpdds, dwFlags, lpContext, lpfnCallback); }\nHRESULT WINAPI extEnumOverlayZOrders4(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback)\n{ return extEnumOverlayZOrders(4, pEnumOverlayZOrders4, lpdds, dwFlags, lpContext, lpfnCallback); }\nHRESULT WINAPI extEnumOverlayZOrders7(LPDIRECTDRAWSURFACE lpdds, DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback)\n{ return extEnumOverlayZOrders(7, pEnumOverlayZOrders7, lpdds, dwFlags, lpContext, lpfnCallback); }\n\nHRESULT WINAPI extAddOverlayDirtyRect(int dxversion, AddOverlayDirtyRect_Type pAddOverlayDirtyRect, LPDIRECTDRAWSURFACE lpdds, LPRECT lpRect)\n{\n\tHRESULT res;\n\tchar sInfo[128];\n\tif (lpRect)\n\t\tsprintf(sInfo, \"(%d,%d)-(%d,%d)\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\telse\n\t\tsprintf(sInfo, \"(NULL)\");\n\n\tOutTrace(\"AddOverlayDirtyRect(%d): lpdds=%x rect=%s\\n\", dxversion, lpdds, sInfo);\n\tres=(*pAddOverlayDirtyRect)(lpdds, lpRect);\n\tOutTrace(\"AddOverlayDirtyRect: res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extAddOverlayDirtyRect1(LPDIRECTDRAWSURFACE lpdds, LPRECT lpRect)\n{ return extAddOverlayDirtyRect(1, pAddOverlayDirtyRect1, lpdds, lpRect); }\nHRESULT WINAPI extAddOverlayDirtyRect2(LPDIRECTDRAWSURFACE lpdds, LPRECT lpRect)\n{ return extAddOverlayDirtyRect(2, pAddOverlayDirtyRect2, lpdds, lpRect); }\nHRESULT WINAPI extAddOverlayDirtyRect3(LPDIRECTDRAWSURFACE lpdds, LPRECT lpRect)\n{ return extAddOverlayDirtyRect(3, pAddOverlayDirtyRect3, lpdds, lpRect); }\nHRESULT WINAPI extAddOverlayDirtyRect4(LPDIRECTDRAWSURFACE lpdds, LPRECT lpRect)\n{ return extAddOverlayDirtyRect(4, pAddOverlayDirtyRect4, lpdds, lpRect); }\nHRESULT WINAPI extAddOverlayDirtyRect7(LPDIRECTDRAWSURFACE lpdds, LPRECT lpRect)\n{ return extAddOverlayDirtyRect(7, pAddOverlayDirtyRect7, lpdds, lpRect); }\n\nHRESULT WINAPI extCompact(LPDIRECTDRAW lpdd)\n{\n\tOutTraceDW(\"Compact: lpdd=%x\\n\", lpdd);\n\treturn DD_OK;\n}\n\nHRESULT WINAPI extDuplicateSurface(int dxversion, DuplicateSurface_Type pDuplicateSurface, LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE lpddssrc, LPDIRECTDRAWSURFACE FAR *lpddsdest)\n{\n\tHRESULT res;\n\tOutTrace(\"DuplicateSurface(%d): lpdd=%x lpddsrc=%x\\n\", dxversion, lpdd, lpddssrc);\n\tres = (*pDuplicateSurface)(lpdd, lpddssrc, lpddsdest);\n\tif(res)\n\t\t\tOutTrace(\"DuplicateSurface: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\telse\n\t\tOutTrace(\"DuplicateSurface: lpddsdest=%x\\n\", *lpddsdest);\n\treturn res;\n}\n\nHRESULT WINAPI extDuplicateSurface1(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE lpddssrc, LPDIRECTDRAWSURFACE FAR *lpddsdest)\n{ return extDuplicateSurface(1, pDuplicateSurface1, lpdd, lpddssrc, lpddsdest); }\nHRESULT WINAPI extDuplicateSurface2(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE lpddssrc, LPDIRECTDRAWSURFACE FAR *lpddsdest)\n{ return extDuplicateSurface(2, pDuplicateSurface2, lpdd, lpddssrc, lpddsdest); }\nHRESULT WINAPI extDuplicateSurface3(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE lpddssrc, LPDIRECTDRAWSURFACE FAR *lpddsdest)\n{ return extDuplicateSurface(3, pDuplicateSurface3, lpdd, lpddssrc, lpddsdest); }\nHRESULT WINAPI extDuplicateSurface4(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE4 lpddssrc, LPDIRECTDRAWSURFACE4 FAR *lpddsdest)\n{ return extDuplicateSurface(4, (DuplicateSurface_Type)pDuplicateSurface4, lpdd, (LPDIRECTDRAWSURFACE)lpddssrc, (LPDIRECTDRAWSURFACE *)lpddsdest); }\nHRESULT WINAPI extDuplicateSurface7(LPDIRECTDRAW lpdd, LPDIRECTDRAWSURFACE7 lpddssrc, LPDIRECTDRAWSURFACE7 FAR *lpddsdest)\n{ return extDuplicateSurface(7, (DuplicateSurface_Type)pDuplicateSurface7, lpdd, (LPDIRECTDRAWSURFACE)lpddssrc, (LPDIRECTDRAWSURFACE *)lpddsdest); }\n\nstatic HRESULT WINAPI extSetOverlayPosition(int dxversion, SetOverlayPosition_Type pSetOverlayPosition, LPDIRECTDRAWSURFACE lpdds, LONG lX, LONG lY)\n{\n\tHRESULT res;\n\tOutTrace(\"SetOverlayPosition(%d): lpdds=%x pos=(%ld,%ld)\\n\", dxversion, lpdds, lX, lY);\n\tres = (*pSetOverlayPosition)(lpdds, lX, lY);\n\tif(res) \n\t\tOutTraceE(\"SetOverlayPosition: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extSetOverlayPosition1(LPDIRECTDRAWSURFACE lpdds, LONG lX, LONG lY)\n{ return extSetOverlayPosition(1, pSetOverlayPosition1, lpdds, lX, lY); }\nHRESULT WINAPI extSetOverlayPosition2(LPDIRECTDRAWSURFACE lpdds, LONG lX, LONG lY)\n{ return extSetOverlayPosition(2, pSetOverlayPosition2, lpdds, lX, lY); }\nHRESULT WINAPI extSetOverlayPosition3(LPDIRECTDRAWSURFACE lpdds, LONG lX, LONG lY)\n{ return extSetOverlayPosition(3, pSetOverlayPosition3, lpdds, lX, lY); }\nHRESULT WINAPI extSetOverlayPosition4(LPDIRECTDRAWSURFACE lpdds, LONG lX, LONG lY)\n{ return extSetOverlayPosition(4, pSetOverlayPosition4, lpdds, lX, lY); }\nHRESULT WINAPI extSetOverlayPosition7(LPDIRECTDRAWSURFACE lpdds, LONG lX, LONG lY)\n{ return extSetOverlayPosition(7, pSetOverlayPosition7, lpdds, lX, lY); }\n\nstatic HRESULT WINAPI extGetOverlayPosition(int dxversion, GetOverlayPosition_Type pGetOverlayPosition, LPDIRECTDRAWSURFACE lpdds, LPLONG lX, LPLONG lY)\n{\n\tHRESULT res;\n\tOutTrace(\"GetOverlayPosition(%d): lpdds=%x\\n\", dxversion, lpdds);\n\tres = (*pGetOverlayPosition)(lpdds, lX, lY);\n\tif(res) \n\t\tOutTraceE(\"GetOverlayPosition: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\telse{\n\t\tOutTraceDW(\"GetOverlayPosition: pos=(%ld,%ld)\\n\", *lX, *lY);\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extGetOverlayPosition1(LPDIRECTDRAWSURFACE lpdds, LPLONG lX, LPLONG lY)\n{ return extGetOverlayPosition(1, pGetOverlayPosition1, lpdds, lX, lY); }\nHRESULT WINAPI extGetOverlayPosition2(LPDIRECTDRAWSURFACE lpdds, LPLONG lX, LPLONG lY)\n{ return extGetOverlayPosition(2, pGetOverlayPosition2, lpdds, lX, lY); }\nHRESULT WINAPI extGetOverlayPosition3(LPDIRECTDRAWSURFACE lpdds, LPLONG lX, LPLONG lY)\n{ return extGetOverlayPosition(3, pGetOverlayPosition3, lpdds, lX, lY); }\nHRESULT WINAPI extGetOverlayPosition4(LPDIRECTDRAWSURFACE lpdds, LPLONG lX, LPLONG lY)\n{ return extGetOverlayPosition(4, pGetOverlayPosition4, lpdds, lX, lY); }\nHRESULT WINAPI extGetOverlayPosition7(LPDIRECTDRAWSURFACE lpdds, LPLONG lX, LPLONG lY)\n{ return extGetOverlayPosition(7, pGetOverlayPosition7, lpdds, lX, lY); }\n\nHRESULT WINAPI extStartModeTest(LPDIRECTDRAW lpdds, LPSIZE lpModesToTest, DWORD dwNumEntries, DWORD dwFlags)\n{\n\tHRESULT res;\n\tif(IsTraceDW){\n\t\tchar sBuf[80];\n\t\tOutTrace(\"StartModeTest(7): lpdds=%x flags=%x num=%d modes=\", lpdds, dwFlags, dwNumEntries);\n\t\tfor(DWORD i=0; i<dwNumEntries; i++) {\n\t\t\tsprintf(sBuf, \"(%d x %d)\", lpModesToTest[i].cx, lpModesToTest[i].cy);\n\t\t\tOutTrace(sBuf);\n\t\t}\n\t}\n\tres=(*pStartModeTest)(lpdds, lpModesToTest, dwNumEntries, dwFlags);\n\tOutTraceDW(\"StartModeTest: res=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extEvaluateMode(LPDIRECTDRAW lpdds, DWORD dwFlags, DWORD *pSecondsUntilTimeout)\n{\n\tHRESULT res;\n\tOutTraceDW(\"EvaluateMode(7): lpdds=%x flags=%x\\n\", lpdds, dwFlags);\n\tres = (*pEvaluateMode)(lpdds, dwFlags, pSecondsUntilTimeout);\n\tOutTraceDW(\"EvaluateMode: res=%x timeout=%d\\n\", res, *pSecondsUntilTimeout);\n\treturn res;\n}\n\n"
  },
  {
    "path": "dll/ddrawex.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n#define INITGUID\n\n#include <windows.h>\n#include <ddrawex.h>\n#include \"dxwnd.h\"\n#include \"dxhook.h\"\n#include \"ddrawi.h\"\n#include \"dxwcore.hpp\"\n#include \"stdio.h\" \n#include \"hddraw.h\"\n#include \"dxhelper.h\"\n#include \"syslibs.h\"\n\n/*\nUsing DirectDrawEx\n\nThis article provides a brief overview of DirectDrawEx and how it extends the functionality of a DirectDraw object as described in the Microsoft DirectX SDK.\n\nContents of this article:\n    What Is DirectDrawEx?\n    Advantages of Using DirectDrawEx\n    Creating DirectDraw Objects and Surfaces with DirectDrawEx\n    Distinctions Between DirectDraw and DirectDrawEx \n\nWhat Is DirectDrawEx?\n\nDirectDrawEx is a dynamic-link library (DLL) that embellishes current functionality of DirectDraw, enhancing \nexisting features and providing new functionality. \nDirectDrawEx also exposes new interfaces that applications can use when you include the ddrawex.h header file.\nTo create a DirectDraw object that can use the extended features provided by DirectDrawEx, you must create the \nobject by using the IDirectDrawFactory interface. A DirectDraw object created with the IDirectDrawFactory \ninterface will support the IDirectDraw3 interface, aggregation of DirectDraw surfaces, data exchange, and palette \nmapping, in addition to the features of DirectDraw objects described in the DirectX SDK.\n\nAdvantages of Using DirectDrawEx\n\nThe primary advantage of creating a DirectDraw object through the IDirectDrawFactory interface is that it exposes \nthe IDirectDraw3 interface. The IDirectDraw3 interface inherits all the functionality of the IDirectDraw and the \nIDirectDraw2 interfaces and provides a new method that can retrieve a pointer to an IDirectDrawSurface interface, \ngiven a handle to a device context.\nTo obtain the IDirectDraw3 interface, you must call the IDirectDrawFactory::CreateDirectDraw method to create the \nDirectDraw object and expose the IUnknown and IDirectDraw interfaces. Applications can then call QueryInterface to \nobtain a pointer to the IDirectDraw3 interface. To view sample code that demonstrates this, see Creating DirectDraw \nObjects and Surfaces with DirectDrawEx.\nAnother advantage of using DirectDrawEx over using DirectDraw is that you can now aggregate inner objects with outer \nobjects by using the IDirectDraw3::CreateSurface method. Formerly, IDirectDraw::CreateSurface and \nIDirectDraw2::CreateSurface did not provide COM aggregation features. \nFor a thorough description of how IDirectDraw3 implements aggregation see, IDirectDraw3::CreateSurface.\n\nFinally, DirectDrawEx now also provides the DDSCAPS_DATAEXCHANGE flag for the DDSCAPS structure's dwcaps member. \nSetting this flag in conjunction with the DDSCAPS_OWNDC flag enables applications to call the \nIDirectDrawSurface::GetDC method to lock the device context for as long they require, without holding a lock on the surface.\n\nCreating DirectDraw Objects and Surfaces with DirectDrawEx\n\nThe following sample code demonstrates how to create a DirectDraw object by using DirectDrawEx, and get a pointer to \nthe IDirectDraw3 interface. The code shows how to create and call DirectDraw objects.\n\n#include ddrawex.h\n\nvoid CreateDDEx()\n{\n\t//Declarations\n\tHRESULT \thr;\n\tIDirectDraw \t*pDD;    \n\tIDirectDraw3 \t*pDD3; \n\tIDirectDrawFactory *pDDF;\n\n\t//Initialize COM library\t\n\tCoInitialize(NULL);\n\n\n\t//Create a DirectDrawFactory object and get  \n\t//an IDirectDrawFactory interface pointer\n\tCoCreateInstance(CLSID_DirectDrawFactory, NULL, CLSCTX_INPROC_SERVER, \n\t\t\t\t\t\t\tIID_IDirectDrawFactory, (void **)&pDDF);\n\n\t//Call the IDirectDrawFactory::CreateDirectDraw method to create the \n\t//DirectDraw surface, set the cooperative level, and get the address \n\t//of an IDirectDraw interface pointer\n\thr = (pDDF->CreateDirectDraw(NULL, GetDesktopWindow(), DDSCL_NORMAL, \n\t\t\t\tNULL, NULL, &pDD));\n\n\tif (hr !=DD_OK) {//error checking\n\t}\n\t\n\t//Now query for the new IDirectDraw3 interface, and release the old one.\n\thr =(pDD->QueryInterface(IID_IDirectDraw3, (LPVOID*)&pDD3));\n\t\n\tif (hr !=S_OK) {//error checking\n\t}\n\t\n\t//Release IDirectDraw\n\tpDD->Release();\n\tpDD= NULL;\t\n\n\t//Initialize the DDSURFACEDESC structure for the primary surface\n\tZeroMemory(&ddsd, sizeof(ddsd));\n      ddsd.dwSize = sizeof(ddsd);    \n\tddsd.dwFlags = DDSD_CAPS;\n      ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; \n      hr = pDD3->CreateSurface(&ddsd, &pPrimarySurface, NULL);\n\t\n\n\t//Do whatever you need to do in your application here with your \n\t//DirectDraw surface\n\n\t//Release IDirectDraw3, IDirectDrawFactory, and the DirectDraw surface\n\tpDD3->Release();\n\tpDDF->Release();\n\tpPrimarySurface->Release();    \n\n\t//Close the COM library\n\tCoUninitialize();\n}\n\nDistinctions Between DirectDraw and DirectDrawEx\nOne important distinction to note between DirectDrawEx and DirectDraw is that applications that have created \nmultiple DirectDrawSurfaces through a DirectDrawEx surface must release every DirectDraw surface.\nAlso, calling the GetDDInterface method from any surface created under DirectDrawEx will return a pointer to \nthe IUnknown interface instead of a pointer to an IDirectDraw interface. Applications must use the \nIUnknown::QueryInterface method to retrieve the IDirectDraw, IDirectDraw2, or IDirectDraw3 interfaces.\nFinally, DirectDrawEx does not currently support blitting between surfaces created by DirectDrawEx and surfaces\ncreated by DirectDraw. Applications should blit only between similar surfaces.\n\n 1997 Microsoft Corporation. All rights reserved. Terms of Use. \n*/\n\n// from ddrawex.h\n//DECLARE_INTERFACE_(IDirectDrawFactory, IUnknown)\n//{\n//    /*** IUnknown methods ***/\n//    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\n//    STDMETHOD_(ULONG,AddRef) (THIS)  PURE;\n//    STDMETHOD_(ULONG,Release) (THIS) PURE;\n//    /*** IDirectDrawFactory methods ***/\n//    STDMETHOD(CreateDirectDraw) (THIS_ GUID * pGUID, HWND hWnd, DWORD dwCoopLevelFlags, DWORD dwReserved, IUnknown *pUnkOuter, IDirectDraw **ppDirectDraw) PURE;\n//    STDMETHOD(DirectDrawEnumerate) (THIS_ LPDDENUMCALLBACK lpCallback, LPVOID lpContext) PURE;\n//};\n\n// DirectDrawEx API (undocumented)\nHRESULT WINAPI extDllCanUnloadNow(void);\nHRESULT WINAPI extDllGetClassObject(REFCLSID, REFIID, void **);\nHRESULT WINAPI extDllRegisterServer(void);\nHRESULT WINAPI extDllUnregisterServer(void);\n\ntypedef HRESULT (WINAPI *DllCanUnloadNow_Type)(void);\ntypedef HRESULT (WINAPI *DllGetClassObject_Type)(REFCLSID, REFIID, void **);\ntypedef HRESULT (WINAPI *DllRegisterServer_Type)(void);\ntypedef HRESULT (WINAPI *DllUnregisterServer_Type)(void);\n\nDllCanUnloadNow_Type pDllCanUnloadNow;\nDllGetClassObject_Type pDllGetClassObject;\nDllRegisterServer_Type pDllRegisterServer;\nDllUnregisterServer_Type pDllUnregisterServer;\n\n// DirectDrawEx class objects\nHRESULT WINAPI extCreateDirectDraw(void *, GUID *, HWND, DWORD, DWORD, IUnknown *, IDirectDraw **);\nHRESULT WINAPI extDirectDrawEnumerateEX(void *, LPDDENUMCALLBACK, LPVOID);\n\ntypedef HRESULT (WINAPI *CreateDirectDrawEX_Type)(void *, GUID *, HWND, DWORD, DWORD, IUnknown *, IDirectDraw **);\ntypedef HRESULT (WINAPI *DirectDrawEnumerateEX_Type)(void *, LPDDENUMCALLBACK, LPVOID);\n\nCreateDirectDrawEX_Type pCreateDirectDrawEX = NULL;\nDirectDrawEnumerateEX_Type pDirectDrawEnumerateEX = NULL;\n\n// static functions\n\nstatic char *sGUID(GUID *pGUID)\n{\n\tstatic char sGUIDBuffer[81];\n\tswitch ((DWORD)pGUID){\n\t\tcase 0: return \"(NULL)\"; break;\n\t\tcase DDCREATE_EMULATIONONLY: return \"DDCREATE_EMULATIONONLY\"; break;\n\t\tcase DDCREATE_HARDWAREONLY:  return \"DDCREATE_HARDWAREONLY\"; break;\n\t\tdefault: sprintf(sGUIDBuffer, \"%x.%x.%x.%x\", pGUID->Data1, pGUID->Data2, pGUID->Data3, pGUID->Data4); return sGUIDBuffer; break;\n\t}\n}\n\n// Library hook\n\nstatic HookEntryEx_Type ddexHooks[]={\n\t{HOOK_HOT_CANDIDATE, 0x01, \"DllCanUnloadNow\", (FARPROC)NULL, (FARPROC *)&pDllCanUnloadNow, (FARPROC)extDllCanUnloadNow},\n\t{HOOK_HOT_CANDIDATE, 0x02, \"DllGetClassObject\", (FARPROC)NULL, (FARPROC *)&pDllGetClassObject, (FARPROC)extDllGetClassObject},\n\t{HOOK_HOT_CANDIDATE, 0x03, \"DllRegisterServer\", (FARPROC)NULL, (FARPROC *)&pDllRegisterServer, (FARPROC)extDllRegisterServer},\n\t{HOOK_HOT_CANDIDATE, 0x04, \"DllUnregisterServer\", (FARPROC)NULL, (FARPROC *)&pDllUnregisterServer, (FARPROC)extDllUnregisterServer},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nvoid HookDirectDrawFactoryLib(HMODULE module)\n{\n\tHookLibraryEx(module, ddexHooks, \"ddrawex.dll\");\n}\n\n// Objects Hook\n\nvoid HookDirectDrawFactory(void *obj)\n{\n\t//MessageBox(0,\"Hooking IID_DirectDrawFactory object\", \"DxWnd\", MB_OK);\n\tOutTrace(\"Hooking IID_DirectDrawFactory object\\n\");\n\t//SetHook((void *)(**(DWORD **)obj      ), extQueryInterfaceD1, (void **)&pQueryInterfaceD1, \"QueryInterface(D1)\");\n\t//SetHook((void *)(**(DWORD **)obj +   8), extReleaseD1, (void **)&pReleaseD1, \"Release(D1)\");\n\tSetHook((void *)(**(DWORD **)obj +  12), extCreateDirectDraw, (void **)&pCreateDirectDrawEX, \"CreateDirectDraw(ex)\");\n\tSetHook((void *)(**(DWORD **)obj +  16), extDirectDrawEnumerateEX, (void **)&pDirectDrawEnumerateEX, \"DirectDrawEnumerate(ex)\");\n}\n\n// API wrappers\n\nHRESULT WINAPI extDllCanUnloadNow(void)\n{\n\tHRESULT res;\n\tOutTraceDW(\"ddrawex#DllCanUnloadNow\\n\");\n\tres = (*pDllCanUnloadNow)();\n\tif(res) OutTraceE(\"ddrawex#DllCanUnloadNow ERROR: res=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extDllGetClassObject(REFCLSID rclsid, REFIID riid, void **out)\n{\n\tHRESULT res;\n\tOutTraceDW(\"ddrawex#DllGetClassObject: clsid=%x refiid=%x\\n\", rclsid, riid);\n\tres = (*pDllGetClassObject)(rclsid, riid, out);\n\tif(res) OutTraceE(\"ddrawex#DllGetClassObject ERROR: res=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extDllRegisterServer(void)\n{\n\tHRESULT res;\n\tOutTraceDW(\"ddrawex#DllRegisterServer\\n\");\n\tres = (*pDllRegisterServer)();\n\tif(res) OutTraceE(\"ddrawex#DllRegisterServer ERROR: res=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extDllUnregisterServer(void)\n{\n\tHRESULT res;\n\tOutTraceDW(\"ddrawex#DllUnregisterServer\\n\");\n\tres = (*pDllUnregisterServer)();\n\tif(res) OutTraceE(\"ddrawex#DllUnregisterServer ERROR: res=%x\\n\", res);\n\treturn res;\n}\n\n// COM bject wrappers\n\nHRESULT WINAPI extCreateDirectDraw(void *ddf, GUID *pGUID, HWND hWnd, DWORD dwCoopLevelFlags, DWORD dwReserved, IUnknown *pUnkOuter, IDirectDraw **ppDirectDraw)\n{\n\tHRESULT res;\n\tif(IsTraceDW){\n\t\tOutTrace(\"CreateDirectDraw(EX): factory=%x guid=%s hwnd=%x coopflags=%x(%s)\\n\", \n\t\t\tddf, sGUID(pGUID), hWnd, dwCoopLevelFlags, ExplainCoopFlags(dwCoopLevelFlags));\n\t}\n\n\tres = (*pCreateDirectDrawEX)(ddf, pGUID, hWnd, dwCoopLevelFlags, dwReserved, pUnkOuter, ppDirectDraw);\n\tif(res){\n\t\tOutTraceE(\"CreateDirectDraw(EX) ERROR: res=%x\\n\");\n\t}\n\telse {\n\t\t// CreateDirectDraw can load an unreferences ddraw.dll module, so it's time now to hook it.\n\t\textern DirectDrawCreate_Type pDirectDrawCreate;\n\t\tif(pDirectDrawCreate == NULL){\n\t\t\tHINSTANCE hinst;\n\t\t\thinst=(*pLoadLibraryA)(\"ddraw.dll\");\n\t\t\tHookDirectDraw(hinst, 1);\n\t\t\tFreeLibrary(hinst);\n\t\t}\n\t\tOutTraceDW(\"CreateDirectDraw(EX): guid=%s pDirectDraw=%x\\n\", sGUID(pGUID), *ppDirectDraw);\n\t}\n\n\treturn res;\n}\n\nHRESULT WINAPI extDirectDrawEnumerateEX(void *ddf, LPDDENUMCALLBACK lpCallback, LPVOID lpContext)\n{\n\tHRESULT res;\n\tOutTraceDW(\"DirectDrawEnumerate(EX): factory=%x\\n\", ddf);\n\tres = (*pDirectDrawEnumerateEX)(ddf, lpCallback, lpContext);\n\tif(res) OutTraceE(\"DirectDrawEnumerate(EX) ERROR: res=%x\\n\");\n\treturn res;\n}\n"
  },
  {
    "path": "dll/ddshot.cpp",
    "content": "#define  _CRT_SECURE_NO_WARNINGS\n\n#include <windows.h>\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"dxhelper.h\"\n\nextern char *ExplainDDError(DWORD);\n\ntypedef HRESULT (WINAPI *Lock_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE);\ntypedef HRESULT (WINAPI *Unlock4_Type)(LPDIRECTDRAWSURFACE, LPRECT);\ntypedef HRESULT (WINAPI *Unlock1_Type)(LPDIRECTDRAWSURFACE, LPVOID);\n\nextern Lock_Type pLockMethod(int);\nextern Unlock4_Type pUnlockMethod(int);\nextern int Set_dwSize_From_Surface();\n\nvoid DDrawScreenShot(int dxversion)\n{\n\tLPDIRECTDRAWSURFACE s;\n\tDDSURFACEDESC2 ddsd;\n\tint w, h, iSurfaceSize, iScanLineSize;\n\tHRESULT res;\n\tstatic int MinTexX, MinTexY, MaxTexX, MaxTexY;\n\tstatic BOOL DoOnce = TRUE;\n\tchar pszFile[MAX_PATH];\n\tstatic int hash = 0;\n\n\tif(DoOnce){\n\t\tsprintf_s(pszFile, MAX_PATH, \"%s\\\\screenshot.out\", GetDxWndPath());\n\t\tCreateDirectory(pszFile, NULL);\n\t\twhile(TRUE){\t\n\t\t\tsprintf_s(pszFile, MAX_PATH, \"%s\\\\screenshot.out\\\\shot.%08d.bmp\", GetDxWndPath(), hash);\n\t\t\tif(GetFileAttributes(pszFile) == INVALID_FILE_ATTRIBUTES) break;\n\t\t\thash++;\n\t\t}\n\t\tDoOnce = FALSE;\n\t}\n\n\tif(dxw.dwFlags5 & GDIMODE){\n\t\ts = dxwss.GetBackBufferSurface();\n\t}\n\telse{\n\t\ts = dxwss.GetPrimarySurface();\n\t}\n\tif(!s) return;\n\n\tmemset(&ddsd,0,sizeof(DDSURFACEDESC2));\n\tddsd.dwSize = Set_dwSize_From_Surface();\n\tddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif(res=(*pLockMethod(dxversion))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"ScreenShot: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn;\n\t}\n\n\twhile (TRUE) { // fake loop\n\t\tOutTrace(\"ScreenShot: lpdds=%x BitCount=%d size=(%dx%d)\\n\", \n\t\t\ts, ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.dwWidth, ddsd.dwHeight);\n\t\tw = ddsd.dwWidth;\n\t\th = ddsd.dwHeight;\n\t\tif(ddsd.ddpfPixelFormat.dwRGBBitCount == 0) {\n\t\t\tOutTrace(\"ScreenShot: SKIP 0BPP texture\\n\");\n\t\t\tbreak;\n\t\t}\n\n\t\tiSurfaceSize = ddsd.dwHeight * ddsd.lPitch;\n\n\t\tFILE *hf;\n\t\tBITMAPFILEHEADER hdr;       // bitmap file-header \n\t\tBITMAPV4HEADER pbi;\t\t\t// bitmap info-header  \n\n\t\tmemset((void *)&pbi, 0, sizeof(BITMAPV4HEADER));\n\t\tpbi.bV4Size = sizeof(BITMAPV4HEADER); \n\t\tpbi.bV4Width = ddsd.dwWidth;\n\t\tpbi.bV4Height = ddsd.dwHeight;\n\t\tpbi.bV4BitCount = (WORD)ddsd.ddpfPixelFormat.dwRGBBitCount;\n\t\tpbi.bV4SizeImage = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8 * pbi.bV4Height; \n\t\tpbi.bV4Height = - pbi.bV4Height;\n\t\tpbi.bV4Planes = 1;\n\t\tpbi.bV4V4Compression = BI_BITFIELDS;\n\t\tif(pbi.bV4BitCount == 8) pbi.bV4V4Compression = BI_RGB;\n\t\tpbi.bV4XPelsPerMeter = 1;\n\t\tpbi.bV4YPelsPerMeter = 1;\n\t\tpbi.bV4ClrUsed = 0;\n\t\tif(pbi.bV4BitCount == 8) pbi.bV4ClrUsed = 256;\n\t\tpbi.bV4ClrImportant = 0;\n\t\tpbi.bV4RedMask = ddsd.ddpfPixelFormat.dwRBitMask;\n\t\tpbi.bV4GreenMask = ddsd.ddpfPixelFormat.dwGBitMask;\n\t\tpbi.bV4BlueMask = ddsd.ddpfPixelFormat.dwBBitMask;\n\t\tpbi.bV4AlphaMask = ddsd.ddpfPixelFormat.dwRGBAlphaBitMask;\n\t\tpbi.bV4CSType = LCS_CALIBRATED_RGB;\n\t\tiScanLineSize = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8;\n\n\t\t// Create the .BMP file. \n\t\tsprintf_s(pszFile, MAX_PATH, \"%s\\\\screenshot.out\\\\shot.%08d.bmp\", GetDxWndPath(), hash++);\n\t\thf = fopen(pszFile, \"wb\");\n\t\tif(!hf) break;\n\n\t\thdr.bfType = 0x4d42;        // 0x42 = \"B\" 0x4d = \"M\"  \n\t\t// Compute the size of the entire file.  \n\t\thdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof(RGBQUAD) + pbi.bV4SizeImage); \n\t\thdr.bfReserved1 = 0; \n\t\thdr.bfReserved2 = 0; \n\n\t\t// Compute the offset to the array of color indices.  \n\t\thdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof (RGBQUAD); \n\n\t\t// Copy the BITMAPFILEHEADER into the .BMP file.  \n\t\tfwrite((LPVOID)&hdr, sizeof(BITMAPFILEHEADER), 1, hf);\n\n\t\t// Copy the BITMAPINFOHEADER array into the file.  \n\t\tfwrite((LPVOID)&pbi, sizeof(BITMAPV4HEADER), 1, hf);\n\n\t\t// Copy the RGBQUAD array into the file.  \n\t\tif(pbi.bV4ClrUsed){\n\t\t\textern DWORD PaletteEntries[256];\n\t\t\tfwrite((LPVOID)PaletteEntries, pbi.bV4ClrUsed * sizeof (RGBQUAD), 1, hf);\n\t\t}\n\n\t\t// Copy the array of color indices into the .BMP file.  \n\t\tfor(int y=0; y<(int)ddsd.dwHeight; y++)\n\t\t\tfwrite((BYTE *)ddsd.lpSurface + (y*ddsd.lPitch), iScanLineSize, 1, hf);\n\n\t\t// Close the .BMP file.  \n\t\tfclose(hf);\n\t\tbreak;\n\t}\n\tres=(*pUnlockMethod(dxversion))(s, NULL);\n\tif (res) OutTraceE(\"ScreenShot: Unlock ERROR lpdds=%x res=%x(%s) at %d\\n\", s, res, ExplainDDError(res), __LINE__);\n}\n"
  },
  {
    "path": "dll/ddtexture.cpp",
    "content": "#define  _CRT_SECURE_NO_WARNINGS\n\n#include <windows.h>\n#include <d3d.h>\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"dxhook.h\"\n#include \"syslibs.h\"\n#include \"dxhelper.h\"\n#include \"dxdds.h\"\n\nextern char *ExplainDDError(DWORD);\n\ntypedef HRESULT (WINAPI *Lock_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE);\ntypedef HRESULT (WINAPI *Unlock4_Type)(LPDIRECTDRAWSURFACE, LPRECT);\ntypedef HRESULT (WINAPI *Unlock1_Type)(LPDIRECTDRAWSURFACE, LPVOID);\n\nextern Lock_Type pLockMethod(int);\nextern Unlock4_Type pUnlockMethod(int);\nextern int Set_dwSize_From_Surface();\n\n#define GRIDSIZE 16\n\ntypedef enum {\n\tFORMAT_BMP = 0,\n\tFORMAT_RAW,\n\tFORMAT_DDS\n};\n\n/* RS Hash Function */\n\nstatic unsigned int Hash(BYTE *buf, int len)\n{\n   unsigned int b    = 378551;\n   unsigned int a    = 63689;\n   DWORD hash = 0;\n   for(int i = 0; i < len; i++){\n      hash = hash * a + buf[i];\n      a    = a * b;\n   }\n   return hash;\n}\n\nunsigned int HashSurface(BYTE *buf, int pitch, int width, int height)\n{\n\tunsigned int b    = 378551;\n\tunsigned int a    = 63689;\n\tint pixelsize;\n\tDWORD hash = 0;\n\t// integer divide, intentionally throwing reminder away\n\tif (width == 0) return 0; // avoid DivBy0 error\n\tpixelsize = pitch / width; \n\tfor(int y = 0; y < height; y++){\n\t\tBYTE *p = buf + (y * pitch);\n\t\tfor(int x = 0; x < width; x++){\n\t\t\tfor(int pixelbyte = 0; pixelbyte < pixelsize; pixelbyte++){\n\t\t\t\thash = (hash * a) + (*p++);\n\t\t\t\ta    = a * b;\n\t\t\t}\n\t\t}\n\t}\n\treturn hash;\n}\n\nstatic char *SurfaceType(DDPIXELFORMAT ddpfPixelFormat)\n{\n\tstatic char sSurfaceType[81];\n\tchar sColorType[21];\n\tDWORD mask;\n\tint i, count;\n\n\tif(ddpfPixelFormat.dwRGBBitCount == 8) return \"RGB8\";\n\n\tstrcpy(sSurfaceType, \"\");\n\t// red\n\tmask=ddpfPixelFormat.dwRBitMask;\n\tfor (i=0, count=0; i<32; i++) {\n\t\tif(mask & 0x1) count++;\n\t\tmask >>= 1;\n\t}\n\tsprintf(sColorType, \"R%d\", count);\n\tstrcat(sSurfaceType, sColorType);\n\t// green\n\tmask=ddpfPixelFormat.dwGBitMask;\n\tfor (i=0, count=0; i<32; i++) {\n\t\tif(mask & 0x1) count++;\n\t\tmask >>= 1;\n\t}\n\tsprintf(sColorType, \"G%d\", count);\n\tstrcat(sSurfaceType, sColorType);\n\t// blue\n\tmask=ddpfPixelFormat.dwBBitMask;\n\tfor (i=0, count=0; i<32; i++) {\n\t\tif(mask & 0x1) count++;\n\t\tmask >>= 1;\n\t}\n\tsprintf(sColorType, \"B%d\", count);\n\tstrcat(sSurfaceType, sColorType);\n\t// alpha channel\n\tmask=ddpfPixelFormat.dwRGBAlphaBitMask;\n\tif(mask){\n\t\tfor (i=0, count=0; i<32; i++) {\n\t\t\tif(mask & 0x1) count++;\n\t\t\tmask >>= 1;\n\t\t}\n\t\tsprintf(sColorType, \"A%d\", count);\n\t\tstrcat(sSurfaceType, sColorType);\n\t}\n\treturn sSurfaceType;\n}\n\nvoid TextureHighlight(LPDIRECTDRAWSURFACE s, int dxversion)\n{\n\tDDSURFACEDESC2 ddsd;\n\tint x, y, w, h;\n\tHRESULT res;\n\n\tOutTraceB(\"TextureHigh(%d): lpdds=%x\\n\", dxversion, s);\n\n\tmemset(&ddsd,0,sizeof(DDSURFACEDESC2));\n\tddsd.dwSize = Set_dwSize_From_Surface();\n\tddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n//\tif(res=(*pLockMethod(lpddsHookedVersion()))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\tif(res=(*pLockMethod(dxversion))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"TextureHigh(%d): Lock ERROR res=%x(%s) at %d\\n\", dxversion, res, ExplainDDError(res), __LINE__);\n\t\treturn;\n\t}\n\tif((ddsd.ddsCaps.dwCaps & DDSCAPS_TEXTURE) && !dxwss.IsABackBufferSurface(s)) {\n\t\tOutTrace(\"TextureHigh(%d): lpdds=%x BitCount=%d size=(%dx%d)\\n\", \n\t\t\tdxversion, s, ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.dwWidth, ddsd.dwHeight);\n\t\tw = ddsd.dwWidth;\n\t\th = ddsd.dwHeight;\n\t\tswitch (ddsd.ddpfPixelFormat.dwRGBBitCount){\n\t\t\tcase 8:\n\t\t\t\t{ \n\t\t\t\t\tBYTE *p;\n\t\t\t\t\tBYTE color;\n\t\t\t\t\tcolor=(BYTE)(rand() & 0xFF);\n\t\t\t\t\tfor(y=0; y<h; y++){\n\t\t\t\t\t\tp = (BYTE *)ddsd.lpSurface + (y * ddsd.lPitch);\n\t\t\t\t\t\tfor(x=0; x<w; x++) *(p+x) = color;\n\t\t\t\t\t}\n\t\t\t\t\tfor(y=0; y<h; y++){\n\t\t\t\t\t\tp = (BYTE *)ddsd.lpSurface + (y * ddsd.lPitch);\n\t\t\t\t\t\tfor(x=0; x<w; x+=GRIDSIZE) *(p+x) = 0;\n\t\t\t\t\t\tif((y%GRIDSIZE)==0) for(x=0; x<w; x++) *(p++) = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 16: \n\t\t\t\t{\n\t\t\t\t\tSHORT *p;\n\t\t\t\t\tSHORT color;\n\t\t\t\t\tcolor=(SHORT)(rand() & 0x7FFF);\n\t\t\t\t\tfor(y=0; y<h; y++){\n\t\t\t\t\t\tp = (SHORT *)ddsd.lpSurface + ((y * ddsd.lPitch) >> 1);\n\t\t\t\t\t\tfor(x=0; x<w; x++) *(p+x) = color;\n\t\t\t\t\t}\n\t\t\t\t\tfor(y=0; y<h; y++){\n\t\t\t\t\t\tp = (SHORT *)ddsd.lpSurface + ((y * ddsd.lPitch) >> 1);\n\t\t\t\t\t\tfor(x=0; x<w; x+=GRIDSIZE) *(p+x) = 0;\n\t\t\t\t\t\tif((y%GRIDSIZE)==0) for(x=0; x<w; x++) *(p++) = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 32: \n\t\t\t\t{\n\t\t\t\t\tDWORD *p;\n\t\t\t\t\tDWORD color;\n\t\t\t\t\tcolor=(DWORD)(rand() & 0xFFFFFFFF);\n\t\t\t\t\tfor(y=0; y<h; y++){\n\t\t\t\t\t\tp = (DWORD *)ddsd.lpSurface + ((y * ddsd.lPitch) >> 2);\n\t\t\t\t\t\tfor(x=0; x<w; x++) *(p+x) = color;\n\t\t\t\t\t}\n\t\t\t\t\tfor(y=0; y<h; y++){\n\t\t\t\t\t\tp = (DWORD *)ddsd.lpSurface + ((y * ddsd.lPitch) >> 2);\n\t\t\t\t\t\tfor(x=0; x<w; x+=GRIDSIZE) *(p+x) = 0;\n\t\t\t\t\t\tif((y%GRIDSIZE)==0) for(x=0; x<w; x++) *(p++) = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tres=(*pUnlockMethod(dxversion))(s, NULL);\n\tif (res) OutTraceE(\"TextureHigh: Unlock ERROR lpdds=%x res=%x(%s) at %d\\n\", s, res, ExplainDDError(res), __LINE__);\n}\n\nstatic void TextureDump(LPDIRECTDRAWSURFACE s, int dxversion)\n{\n\tDDSURFACEDESC2 ddsd;\n\tint w, h, iSurfaceSize, iScanLineSize;\n\tHRESULT res;\n\tstatic int MinTexX, MinTexY, MaxTexX, MaxTexY;\n\tstatic BOOL DoOnce = TRUE;\n\tchar pszFile[MAX_PATH];\n\tchar *sExt;\n\tstatic int iTextureFileFormat;\n\n\tOutTraceB(\"TextureDump(%d): lpdds=%x\\n\", dxversion, s);\n\n\tif(DoOnce){\n\t\tchar sProfilePath[MAX_PATH];\n\t\tsprintf(sProfilePath, \"%s\\\\dxwnd.ini\", GetDxWndPath());\n\t\tMinTexX=GetPrivateProfileInt(\"Texture\", \"MinTexX\", 0, sProfilePath);\n\t\tMaxTexX=GetPrivateProfileInt(\"Texture\", \"MaxTexX\", 0, sProfilePath);\n\t\tMinTexY=GetPrivateProfileInt(\"Texture\", \"MinTexY\", 0, sProfilePath);\n\t\tMaxTexY=GetPrivateProfileInt(\"Texture\", \"MaxTexY\", 0, sProfilePath);\n\t\tsprintf_s(pszFile, MAX_PATH, \"%s\\\\texture.out\", GetDxWndPath());\n\t\tCreateDirectory(pszFile, NULL);\n\t\tiTextureFileFormat = FORMAT_BMP;\n\t\tif(dxw.dwFlags8 & RAWFORMAT) iTextureFileFormat = FORMAT_RAW;\n\t\tif(dxw.dwFlags8 & DDSFORMAT) iTextureFileFormat = FORMAT_DDS;\n\t\tOutTrace(\"TextureDump: size min=(%dx%d) max=(%dx%d) format=%d\\n\", MinTexX, MinTexY, MaxTexX, MaxTexY, iTextureFileFormat);\n\t\tDoOnce = FALSE;\n\t}\n\n\tmemset(&ddsd,0,sizeof(DDSURFACEDESC2));\n\tddsd.dwSize = Set_dwSize_From_Surface();\n\tddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif(res=(*pLockMethod(dxversion))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"TextureDump: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn;\n\t}\n\n\tif((ddsd.ddsCaps.dwCaps & DDSCAPS_TEXTURE) && !dxwss.IsABackBufferSurface(s)) while (TRUE) {\n\t\tOutTrace(\"TextureDump(%d): lpdds=%x BitCount=%d size=(%dx%d)\\n\", \n\t\t\tdxversion, s, ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.dwWidth, ddsd.dwHeight);\n\t\tw = ddsd.dwWidth;\n\t\th = ddsd.dwHeight;\n\t\tif((MinTexX && (w<MinTexX)) || (MinTexY && (h<MinTexY))) {\n\t\t\tOutTrace(\"TextureDump: SKIP small texture\\n\");\n\t\t\tbreak;\n\t\t}\n\t\tif((MaxTexX && (w>MaxTexX)) || (MaxTexY && (h>MaxTexY))) {\n\t\t\tOutTrace(\"TextureDump: SKIP big texture\\n\");\n\t\t\tbreak;\n\t\t}\n\t\tif(ddsd.ddpfPixelFormat.dwRGBBitCount == 0) {\n\t\t\tOutTrace(\"TextureDump: SKIP 0BPP texture\\n\");\n\t\t\tbreak;\n\t\t}\n\t\tif((ddsd.lPitch == 0) || (ddsd.dwHeight == 0)) {\n\t\t\tOutTrace(\"TextureDump: SKIP void texture\\n\");\n\t\t\tbreak;\n\t\t}\n\n\t\tiSurfaceSize = ddsd.dwHeight * ddsd.lPitch;\n\n\t\tFILE *hf;\n\t\tBITMAPFILEHEADER hdr;       // bitmap file-header \n\t\tBITMAPV4HEADER pbi;\t\t\t// bitmap info-header  \n\n\t\tmemset((void *)&pbi, 0, sizeof(BITMAPV4HEADER));\n\t\tpbi.bV4Size = sizeof(BITMAPV4HEADER); \n\t\tpbi.bV4Width = ddsd.dwWidth;\n\t\tpbi.bV4Height = ddsd.dwHeight;\n\t\tpbi.bV4BitCount = (WORD)ddsd.ddpfPixelFormat.dwRGBBitCount;\n\t\tpbi.bV4SizeImage = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8 * pbi.bV4Height; \n\t\tpbi.bV4Height = - pbi.bV4Height;\n\t\tpbi.bV4Planes = 1;\n\t\tpbi.bV4V4Compression = BI_BITFIELDS;\n\t\tif(pbi.bV4BitCount == 8) pbi.bV4V4Compression = BI_RGB;\n\t\tpbi.bV4XPelsPerMeter = 1;\n\t\tpbi.bV4YPelsPerMeter = 1;\n\t\tpbi.bV4ClrUsed = 0;\n\t\tif(pbi.bV4BitCount == 8) pbi.bV4ClrUsed = 256;\n\t\tpbi.bV4ClrImportant = 0;\n\t\tpbi.bV4RedMask = ddsd.ddpfPixelFormat.dwRBitMask;\n\t\tpbi.bV4GreenMask = ddsd.ddpfPixelFormat.dwGBitMask;\n\t\tpbi.bV4BlueMask = ddsd.ddpfPixelFormat.dwBBitMask;\n\t\tpbi.bV4AlphaMask = ddsd.ddpfPixelFormat.dwRGBAlphaBitMask;\n\t\tpbi.bV4CSType = LCS_CALIBRATED_RGB;\n\t\tiScanLineSize = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8;\n\n\t\t// calculate the bitmap hash\n\t\tDWORD hash;\n\t\thash = HashSurface((BYTE *)ddsd.lpSurface, ddsd.lPitch, ddsd.dwWidth, ddsd.dwHeight); \n\t\tif(!hash) {\n\t\t\tOutTrace(\"TextureDump: lpdds=%x hash=NULL\\n\", s); \n\t\t\tbreak; // almost certainly, an empty black surface!\n\t\t}\n\n\t\t// Create the .BMP file. \n\t\tswitch (iTextureFileFormat){\n\t\t\tcase FORMAT_BMP: sExt = \"bmp\"; break; \n\t\t\tcase FORMAT_RAW: sExt = \"raw\"; break; \n\t\t\tcase FORMAT_DDS: sExt = \"dds\"; break; \n\t\t}\n\t\tsprintf_s(pszFile, MAX_PATH, \"%s\\\\texture.out\\\\texture.%03d.%03d.%s.%08X.%s\", \n\t\t\tGetDxWndPath(), ddsd.dwWidth, ddsd.dwHeight, SurfaceType(ddsd.ddpfPixelFormat), hash, sExt);\n\t\thf = fopen(pszFile, \"wb\");\n\t\tif(!hf) break;\n\n\t\tswitch(iTextureFileFormat){\n\n\t\t\tcase FORMAT_RAW:\n\n\t\t\t\tif(fwrite((BYTE *)ddsd.lpSurface, ddsd.lPitch * ddsd.dwHeight, 1, hf)!=1)\n\t\t\t\t\tOutTraceE(\"TextureHack: fwrite ERROR err=%d\\n\", GetLastError());\n\t\t\t\tbreak;\n\n\t\t\tcase FORMAT_DDS: {\n\n\t\t\t\t// no good for 8bpp textured bitmaps !!!\n\t\t\t\tDDS_HEADER ddsh;\n\t\t\t\tif(fwrite(\"DDS \", 4, 1, hf)!=1)\n\t\t\t\t\tOutTraceE(\"TextureHack: fwrite ERROR err=%d\\n\", GetLastError());\n\t\t\t\tmemset(&ddsh, 0, sizeof(ddsh));\n\t\t\t\tddsh.dwSize = sizeof(ddsh);\n\t\t\t\tddsh.dwFlags = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|DDSD_PITCH;\n\t\t\t\tddsh.dwHeight = ddsd.dwHeight;\n\t\t\t\tddsh.dwWidth = ddsd.dwWidth;\n\t\t\t\tddsh.ddspf.dwSize = sizeof(DDS_PIXELFORMAT);\n\t\t\t\tddsh.ddspf.dwFlags = DDPF_RGB;\t\t\t\n\t\t\t\tddsh.dwPitchOrLinearSize = (DWORD)ddsd.lPitch;\n\t\t\t\tddsh.ddspf.dwABitMask = ddsd.ddpfPixelFormat.dwRGBAlphaBitMask;\n\t\t\t\tddsh.ddspf.dwRBitMask = ddsd.ddpfPixelFormat.dwRBitMask;\n\t\t\t\tddsh.ddspf.dwGBitMask = ddsd.ddpfPixelFormat.dwGBitMask;\n\t\t\t\tddsh.ddspf.dwBBitMask = ddsd.ddpfPixelFormat.dwBBitMask;\n\t\t\t\tddsh.ddspf.dwRGBBitCount = ddsd.ddpfPixelFormat.dwRGBBitCount;\n\t\t\t\tif(fwrite((BYTE *)&ddsh, sizeof(ddsh), 1, hf)!=1)\n\t\t\t\t\tOutTraceE(\"TextureHack: fwrite ERROR err=%d\\n\", GetLastError());\n\t\t\t\tif(fwrite((BYTE *)ddsd.lpSurface, ddsd.lPitch * ddsd.dwHeight, 1, hf)!=1)\n\t\t\t\t\tOutTraceE(\"TextureHack: fwrite ERROR err=%d\\n\", GetLastError());\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase FORMAT_BMP:\n\n\t\t\t\thdr.bfType = 0x4d42;        // 0x42 = \"B\" 0x4d = \"M\"  \n\t\t\t\t// Compute the size of the entire file.  \n\t\t\t\thdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof(RGBQUAD) + pbi.bV4SizeImage); \n\t\t\t\thdr.bfReserved1 = 0; \n\t\t\t\thdr.bfReserved2 = 0; \n\n\t\t\t\t// Compute the offset to the array of color indices.  \n\t\t\t\thdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof (RGBQUAD); \n\n\t\t\t\t// Copy the BITMAPFILEHEADER into the .BMP file.  \n\t\t\t\tfwrite((LPVOID)&hdr, sizeof(BITMAPFILEHEADER), 1, hf);\n\n\t\t\t\t// Copy the BITMAPINFOHEADER array into the file.  \n\t\t\t\tfwrite((LPVOID)&pbi, sizeof(BITMAPV4HEADER), 1, hf);\n\n\t\t\t\t// Copy the RGBQUAD array into the file.  \n\t\t\t\tif(pbi.bV4ClrUsed){\n\t\t\t\t\textern DWORD PaletteEntries[256];\n\t\t\t\t\tfwrite((LPVOID)PaletteEntries, pbi.bV4ClrUsed * sizeof (RGBQUAD), 1, hf);\n\t\t\t\t}\n\n\t\t\t\t// Copy the array of color indices into the .BMP file.  \n\t\t\t\tfor(int y=0; y<(int)ddsd.dwHeight; y++)\n\t\t\t\t\tfwrite((BYTE *)ddsd.lpSurface + (y*ddsd.lPitch), iScanLineSize, 1, hf);\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Close the .BMP file.  \n\t\tfclose(hf);\n\t\tbreak;\n\t}\n\tres=(*pUnlockMethod(dxversion))(s, NULL);\n\tif (res) OutTraceE(\"TextureDump: Unlock ERROR lpdds=%x res=%x(%s) at %d\\n\", s, res, ExplainDDError(res), __LINE__);\n}\n\nstatic void TextureHack(LPDIRECTDRAWSURFACE s, int dxversion)\n{\n\tstatic BOOL DoOnce = TRUE;\n\tDDSURFACEDESC2 ddsd;\n\tint w, h, iSurfaceSize, iScanLineSize;\n\tHRESULT res;\n\tchar *sExt;\n\tstatic int iTextureFileFormat;\n\n\tif(DoOnce){\n\t\t//char sProfilePath[MAX_PATH];\n\t\t//sprintf(sProfilePath, \"%s\\\\dxwnd.ini\", GetDxWndPath());\n\t\t//MinTexX=GetPrivateProfileInt(\"Texture\", \"MinTexX\", 0, sProfilePath);\n\t\t//MaxTexX=GetPrivateProfileInt(\"Texture\", \"MaxTexX\", 0, sProfilePath);\n\t\t//MinTexY=GetPrivateProfileInt(\"Texture\", \"MinTexY\", 0, sProfilePath);\n\t\t//MaxTexY=GetPrivateProfileInt(\"Texture\", \"MaxTexY\", 0, sProfilePath);\n\t\t//sprintf_s(pszFile, MAX_PATH, \"%s\\\\texture.in\", GetDxWndPath());\n\t\tiTextureFileFormat = FORMAT_BMP;\n\t\tif(dxw.dwFlags8 & RAWFORMAT) iTextureFileFormat = FORMAT_RAW;\n\t\tif(dxw.dwFlags8 & DDSFORMAT) iTextureFileFormat = FORMAT_DDS;\n\t\t//OutTrace(\"TextureHack: size min=(%dx%d) max=(%dx%d) format=%d\\n\", MinTexX, MinTexY, MaxTexX, MaxTexY, iTextureFileFormat);\n\t\tOutTrace(\"TextureHack: format=%d\\n\", iTextureFileFormat);\n\t}\n\n\tOutTraceB(\"TextureHack(%d): lpdds=%x\\n\", dxversion, s);\n\n\tmemset(&ddsd,0,sizeof(DDSURFACEDESC2));\n\tddsd.dwSize = Set_dwSize_From_Surface();\n\tddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif(res=(*pLockMethod(dxversion))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"TextureHack: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn;\n\t}\n\tif((ddsd.ddsCaps.dwCaps & DDSCAPS_TEXTURE) && !dxwss.IsABackBufferSurface(s)) while (TRUE) { // fake loop to ensure final Unlock\n\t\tOutTrace(\"TextureHack(%d): lpdds=%x BitCount=%d size=(%dx%d) surface=%x\\n\", \n\t\t\tdxversion, s, ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.dwWidth, ddsd.dwHeight, ddsd.lpSurface);\n\t\tw = ddsd.dwWidth;\n\t\th = ddsd.dwHeight;\n\t\tiSurfaceSize = ddsd.dwHeight * ddsd.lPitch;\n\n\t\tFILE *hf;\n\t\tBITMAPFILEHEADER hdr;       // bitmap file-header \n\t\tBITMAPINFOHEADER pbi;\t\t// bitmap info-header  \n\t\tchar pszFile[MAX_PATH];\n\t\tint iSizeImage;\n\n\t\t// calculate the bitmap hash\n\t\tDWORD hash;\n\t\thash = HashSurface((BYTE *)ddsd.lpSurface, ddsd.lPitch, ddsd.dwWidth, ddsd.dwHeight); \n\t\tif(!hash) break; // almost certainly, an empty black surface!\n\n\t\t// Look for the .BMP file. \n\t\tswitch (iTextureFileFormat){\n\t\t\tcase FORMAT_BMP: sExt = \"bmp\"; break; \n\t\t\tcase FORMAT_RAW: sExt = \"raw\"; break; \n\t\t\tcase FORMAT_DDS: sExt = \"dds\"; break; \n\t\t}\n\t\tsprintf_s(pszFile, MAX_PATH, \"%s\\\\texture.in\\\\texture.%03d.%03d.%s.%08X.%s\", \n\t\t\tGetDxWndPath(), ddsd.dwWidth, ddsd.dwHeight, SurfaceType(ddsd.ddpfPixelFormat), hash, sExt);\n\t\thf = fopen(pszFile, \"rb\");\n\t\tif(!hf) break; // no updated texture to load\n\n\t\tOutTrace(\"TextureHack: IMPORT path=%s\\n\", pszFile);\n\n\t\tswitch(iTextureFileFormat){\n\n\t\t\tcase FORMAT_RAW: {\n\n\t\t\t\tif(fread((BYTE *)ddsd.lpSurface, ddsd.lPitch * ddsd.dwHeight, 1, hf)!=1)\n\t\t\t\t\tOutTraceE(\"TextureHack: fread ERROR err=%d\\n\", GetLastError());\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase FORMAT_DDS: {\n\n\t\t\t\tBYTE magic[4];\n\t\t\t\tDDS_HEADER ddsh;\n\t\t\t\t// assume the file is sane, read and throw away magic and dds header\n\t\t\t\tif(fread(magic, 4, 1, hf)!=1)\n\t\t\t\t\tOutTraceE(\"TextureHack: fread ERROR err=%d\\n\", GetLastError());\n\t\t\t\tif(fread((BYTE *)&ddsh, sizeof(ddsh), 1, hf)!=1)\n\t\t\t\t\tOutTraceE(\"TextureHack: fread ERROR err=%d\\n\", GetLastError());\n\t\t\t\tmemset(&ddsh, 0, sizeof(ddsh));\n\t\t\t\tif(fread((BYTE *)ddsd.lpSurface, ddsd.lPitch * ddsd.dwHeight, 1, hf)!=1)\n\t\t\t\t\tOutTraceE(\"TextureHack: fread ERROR err=%d\\n\", GetLastError());\n\t\t\t}\n\t\t\tbreak;\n\n\t\t\tcase FORMAT_BMP: \n\n\t\t\t\tmemset((void *)&pbi, 0, sizeof(BITMAPINFOHEADER));\n\t\t\t\tpbi.biSize = sizeof(BITMAPINFOHEADER); \n\t\t\t\tpbi.biWidth = ddsd.dwWidth;\n\t\t\t\tpbi.biHeight = ddsd.dwHeight;\n\t\t\t\tpbi.biBitCount = (WORD)ddsd.ddpfPixelFormat.dwRGBBitCount;\n\t\t\t\tpbi.biSizeImage = ((pbi.biWidth * pbi.biBitCount + 0x1F) & ~0x1F)/8 * pbi.biHeight; \n\t\t\t\tiSizeImage = pbi.biSizeImage;\n\t\t\t\tiScanLineSize = ((pbi.biWidth * pbi.biBitCount + 0x1F) & ~0x1F)/8;\n\n\t\t\t\twhile(TRUE) { // fake loop to ensure final fclose\n\t\t\t\t\t// Read the BITMAPFILEHEADER from the .BMP file (and throw away ...).  \n\t\t\t\t\tif(fread((LPVOID)&hdr, sizeof(BITMAPFILEHEADER), 1, hf) != 1)break;\n\n\t\t\t\t\t// Read the BITMAPINFOHEADER (and throw away ...).  \n\t\t\t\t\t// If the file contains BITMAPV4HEADER or BITMAPV5HEADER, no problem: next fseek will settle things\n\t\t\t\t\tif(fread((LPVOID)&pbi, sizeof(BITMAPINFOHEADER), 1, hf) != 1) break;\n\n\t\t\t\t\t// skip the RGBQUAD array if the editor inserted one\n\t\t\t\t\tfseek(hf, hdr.bfOffBits, SEEK_SET);\n\n\t\t\t\t\t// Read the new texture  from the .BMP file.  \n\t\t\t\t\tif(pbi.biHeight < 0){\n\t\t\t\t\t\t// biHeight < 0 -> scan lines from top to bottom, same as surface/texture convention\n\t\t\t\t\t\tfor(int y=0; y<(int)ddsd.dwHeight; y++){\n\t\t\t\t\t\t\tBYTE *p = (BYTE *)ddsd.lpSurface + (ddsd.lPitch * y);\n\t\t\t\t\t\t\tfseek(hf, hdr.bfOffBits + (iScanLineSize * y), SEEK_SET);\n\t\t\t\t\t\t\tif(fread((LPVOID)p, ddsd.lPitch, 1, hf) != 1) break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// biHeight > 0 -> scan lines from bottom to top, inverse order as surface/texture convention\n\t\t\t\t\t\tfor(int y=0; y<(int)ddsd.dwHeight; y++){\n\t\t\t\t\t\t\tBYTE *p = (BYTE *)ddsd.lpSurface + (ddsd.lPitch * ((ddsd.dwHeight-1) - y));\n\t\t\t\t\t\t\tfseek(hf, hdr.bfOffBits + (iScanLineSize * y), SEEK_SET);\n\t\t\t\t\t\t\tif(fread((LPVOID)p, ddsd.lPitch, 1, hf) != 1) break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tOutTrace(\"TextureHack: TEXTURE LOAD DONE\\n\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\t// Close the .BMP file.  \n\t\tfclose(hf);\n\t\tbreak;\n\t}\n\tres=(*pUnlockMethod(dxversion))(s, NULL);\n\tif (res) OutTraceE(\"TextureHack: Unlock ERROR lpdds=%x res=%x(%s) at %d\\n\", s, res, ExplainDDError(res), __LINE__);\n}\n\nvoid TextureTransp(LPDIRECTDRAWSURFACE s, int dxversion)\n{\n\tDDSURFACEDESC2 ddsd;\n\tint x, y, w, h;\n\tHRESULT res;\n\n\tOutTraceB(\"TextureTransp(%d): lpdds=%x\\n\", dxversion, s);\n\n\tmemset(&ddsd,0,sizeof(DDSURFACEDESC2));\n\tddsd.dwSize = Set_dwSize_From_Surface();\n\tddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n//\tif(res=(*pLockMethod(lpddsHookedVersion()))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\tif(res=(*pLockMethod(dxversion))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"TextureTransp(%d): Lock ERROR res=%x(%s) at %d\\n\", dxversion, res, ExplainDDError(res), __LINE__);\n\t\treturn;\n\t}\n\tif((ddsd.ddsCaps.dwCaps & DDSCAPS_TEXTURE) && !dxwss.IsABackBufferSurface(s)) {\n\t\tOutTrace(\"TextureTransp(%d): lpdds=%x BitCount=%d size=(%dx%d)\\n\", \n\t\t\tdxversion, s, ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.dwWidth, ddsd.dwHeight);\n\t\tw = ddsd.dwWidth;\n\t\th = ddsd.dwHeight;\n\t\tswitch (ddsd.ddpfPixelFormat.dwRGBBitCount){\n\t\t\tcase 8:\n\t\t\t\t// no way\n\t\t\t\tbreak;\n\t\t\tcase 16: \n\t\t\t\t{\n\t\t\t\t\tWORD *p;\n\t\t\t\t\tfor(y=0; y<h; y++){\n\t\t\t\t\t\tp = (WORD *)ddsd.lpSurface + ((y * ddsd.lPitch) >> 1);\n\t\t\t\t\t\tfor(x=0; x<w; x++) *(p+x) = (*(p+x) & 0x7FFF) | 0x8000;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 32: \n\t\t\t\t{\n\t\t\t\t\tDWORD *p;\n\t\t\t\t\tfor(y=0; y<h; y++){\n\t\t\t\t\t\tp = (DWORD *)ddsd.lpSurface + ((y * ddsd.lPitch) >> 2);\n\t\t\t\t\t\tfor(x=0; x<w; x++) *(p+x) = (*(p+x) & 0x00FFFFFF) | 0x7F000000;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tres=(*pUnlockMethod(dxversion))(s, NULL);\n\tif (res) OutTraceE(\"TextureTransp: Unlock ERROR lpdds=%x res=%x(%s) at %d\\n\", s, res, ExplainDDError(res), __LINE__);\n}\n\nvoid TextureHandling(LPDIRECTDRAWSURFACE s, int dxversion)\n{\n\t//OutTrace(\"TextureHandling(1-7): dxw.dwFlags5 = %x\\n\", dxw.dwFlags5 & (TEXTUREHIGHLIGHT|TEXTUREDUMP|TEXTUREHACK));\n\tswitch(dxw.dwFlags5 & TEXTUREMASK){\n\t\tdefault:\n\t\tcase TEXTUREHIGHLIGHT: \n\t\t\tTextureHighlight(s, dxversion);\n\t\t\tbreak;\n\t\tcase TEXTUREDUMP: \n\t\t\tTextureDump(s, dxversion);\n\t\t\tbreak;\n\t\tcase TEXTUREHACK:\n\t\t\tTextureHack(s, dxversion);\n\t\t\tbreak;\n\t\tcase TEXTURETRANSP:\n\t\t\tTextureTransp(s, dxversion);\n\t\t\tbreak;\n\t}\n}\n"
  },
  {
    "path": "dll/dibdump.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"hddraw.h\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n#include \"shareddc.hpp\"\n\n#include \"stdio.h\"\n\nvoid DumpDibSection(const BITMAPINFO *pbmi, UINT iUsage, VOID *pvBits)\n{\n\tstatic int prog=0;\n\tFILE *fdump;\n\tchar path[81];\n\tBITMAPFILEHEADER hdr;       // bitmap file-header \n\tBITMAPV4HEADER pbi;\t\t\t// bitmap info-header  \n\tint iScanLineSize;\n\tLONG bV4SizeImage;\n\n\tif(iUsage != DIB_RGB_COLORS) return;\n\tif(prog==0) CreateDirectory(\".\\\\bmp.out\", NULL);\n\tsprintf(path,\".\\\\bmp.out\\\\dib.%08.8d.bmp\", prog);\n\tfdump=fopen(path, \"wb\");\n\tif(!fdump) return;\n\tmemset((void *)&pbi, 0, sizeof(BITMAPV4HEADER));\n\tpbi.bV4Size = sizeof(BITMAPV4HEADER); \n\tpbi.bV4Width = pbmi->bmiHeader.biWidth;\n\tpbi.bV4Height = pbmi->bmiHeader.biHeight;\n\tpbi.bV4BitCount = pbmi->bmiHeader.biBitCount;\n\tbV4SizeImage = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8 * pbi.bV4Height; \n\tif(bV4SizeImage < 0) bV4SizeImage = -bV4SizeImage;\n\tpbi.bV4SizeImage = bV4SizeImage;\n\tpbi.bV4Height = - pbi.bV4Height;\n\tpbi.bV4Planes = pbmi->bmiHeader.biPlanes;\n\tpbi.bV4V4Compression = pbmi->bmiHeader.biCompression;\n\tpbi.bV4XPelsPerMeter = 1;\n\tpbi.bV4YPelsPerMeter = 1;\n\tpbi.bV4ClrUsed = pbmi->bmiHeader.biClrUsed;\n\tif(!pbi.bV4ClrUsed) pbi.bV4ClrUsed = 1 << pbi.bV4BitCount;\n\tpbi.bV4ClrImportant = pbmi->bmiHeader.biClrImportant;\n\tpbi.bV4RedMask = 0;\n\tpbi.bV4RedMask = 0;\n\tpbi.bV4GreenMask = 0;\n\tpbi.bV4BlueMask = 0;\n\tpbi.bV4AlphaMask = 0;\n\tpbi.bV4CSType = LCS_CALIBRATED_RGB;\n\tiScanLineSize = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8;\n\tOutTrace(\"DumpDibSection: prog=%08.8d size=%d wxh=(%dx%d) bc=%d sizeimg=%d planes=%d comp=%x ppm=(%dx%d) colors=%d imp=%d\\n\",\n\t\tprog,\n\t\tpbi.bV4Size, pbi.bV4Width, pbi.bV4Height, pbi.bV4BitCount, pbi.bV4SizeImage,\n\t\tpbi.bV4Planes, pbi.bV4V4Compression, pbi.bV4XPelsPerMeter, pbi.bV4YPelsPerMeter,\n\t\tpbi.bV4ClrUsed, pbi.bV4ClrImportant);\n\n\tprog++;\n\thdr.bfType = 0x4d42;        // 0x42 = \"B\" 0x4d = \"M\"  \n\t// Compute the size of the entire file.  \n\thdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof(RGBQUAD) + pbi.bV4SizeImage); \n\thdr.bfReserved1 = 0; \n\thdr.bfReserved2 = 0; \n\n\t// Compute the offset to the array of color indices.  \n\thdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof (RGBQUAD); \n\n\t// Copy the BITMAPFILEHEADER into the .BMP file.  \n\tfwrite((LPVOID)&hdr, sizeof(BITMAPFILEHEADER), 1, fdump);\n\n\t// Copy the BITMAPINFOHEADER array into the file.  \n\tfwrite((LPVOID)&pbi, sizeof(BITMAPV4HEADER), 1, fdump);\n\n\t// Copy the RGBQUAD array into the file.  \n\tif(pbi.bV4ClrUsed) fwrite(&pbmi->bmiColors[0], pbi.bV4ClrUsed * sizeof (RGBQUAD), 1, fdump);\n\n\t// Copy the array of color indices into the .BMP file.  \n\t//for(int y=0; y<(int)ddsd.dwHeight; y++)\n\t//\tfwrite((BYTE *)ddsd.lpSurface + (y*ddsd.lPitch), iScanLineSize, 1, fdump);\n\tfwrite((BYTE *)pvBits, pbi.bV4SizeImage, 1, fdump);\n\n\t// Close the .BMP file.  \n\tfclose(fdump);\n}\n\nvoid DumpHDC(HDC hdc, int x0, int y0, int w, int h)\n{\n\tFILE *fdump;\n\tstatic int prog = 0;\n\tchar path[81];\n\tBITMAPFILEHEADER  hdr;\n\tBITMAPV4HEADER pbi;\t\t\t// bitmap info-header  \n\n\tif (w<0) w = -w;\n\tif (h<0) h = -h;\n\n\tif(prog==0) CreateDirectory(\".\\\\bmp.out\", NULL);\n\tsprintf(path,\".\\\\bmp.out\\\\hdc.%08.8d.bmp\", prog);\n\tfdump=fopen(path, \"wb\");\n\tif(!fdump) {\n\t\tOutTrace(\"DumpHDC: err=%d\\n\", GetLastError());\n\t\treturn;\n\t}\n\n\t// this bitmap is not created in the same format of the original HDC: using the GetPixel call to read the pixels\n\t// means that the resulting image will be 32bpp color depth\n\n\tmemset((void *)&pbi, 0, sizeof(BITMAPV4HEADER));\n\tpbi.bV4Size = sizeof(BITMAPV4HEADER); \n\tpbi.bV4Width = w;\n\tpbi.bV4Height = h;\n\tpbi.bV4BitCount = 32;\n\tpbi.bV4SizeImage = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8 * pbi.bV4Height; \n\tpbi.bV4Height = -pbi.bV4Height;\n\tpbi.bV4Planes = 1;\n\tpbi.bV4V4Compression = BI_BITFIELDS;\n\tpbi.bV4XPelsPerMeter = 1;\n\tpbi.bV4YPelsPerMeter = 1;\n\tpbi.bV4ClrUsed = 0;\n\tpbi.bV4ClrImportant = 0;\n\tpbi.bV4RedMask = 0x000000FF;\n\tpbi.bV4GreenMask = 0x0000FF00;\n\tpbi.bV4BlueMask = 0x00FF0000;\n\tpbi.bV4AlphaMask = 0x00000000;\n\tpbi.bV4CSType = LCS_CALIBRATED_RGB;\n\tint iScanLineSize = ((pbi.bV4Width * pbi.bV4BitCount + 0x1F) & ~0x1F)/8;\n\tOutTrace(\"DumpDevContext: prog=%08.8d size=%d wxh=(%dx%d) bc=%d sizeimg=%d planes=%d comp=%x ppm=(%dx%d) colors=%d imp=%d\\n\",\n\t\tprog,\n\t\tpbi.bV4Size, pbi.bV4Width, pbi.bV4Height, pbi.bV4BitCount, pbi.bV4SizeImage,\n\t\tpbi.bV4Planes, pbi.bV4V4Compression, pbi.bV4XPelsPerMeter, pbi.bV4YPelsPerMeter,\n\t\tpbi.bV4ClrUsed, pbi.bV4ClrImportant);\n\n\tprog++;\n\t// Fill in the fields of the file header \n\thdr.bfType        = ((WORD) ('M' << 8) | 'B');    // is always \"BM\"\n\thdr.bfSize        = (w * h) + sizeof( hdr );\n\thdr.bfReserved1   = 0;\n\thdr.bfReserved2   = 0;\n\thdr.bfOffBits     = (DWORD)(sizeof(hdr) + sizeof(pbi));\n\n\t// Write the file header \n\tfwrite( &hdr, sizeof(hdr), 1, fdump);\n\t// Write the DIB header\n\tfwrite( &pbi, sizeof(pbi), 1, fdump );\n\t// Write the bits \n\tfor(int y=y0; y<y0+h; y++)\n\t\tfor(int x=x0; x<x0+w; x++){\n\t\t\tDWORD pixel=GetPixel(hdc, x, y);\n\t\t\tfwrite(&pixel, sizeof(DWORD), 1, fdump);\n\t\t}\n\n\tfclose(fdump);\n}\n\n// eof"
  },
  {
    "path": "dll/dinput.cpp",
    "content": "#define DIRECTINPUT_VERSION 0x700\n#define DIRECTINPUT8_VERSION 0x800\n#define  _CRT_SECURE_NO_WARNINGS\n\n#define RECOVERINPUTLOST TRUE // to become a flag?\n\n#include <windows.h>\n#include <dinput.h>\n#include \"dxwnd.h\"\n#include \"dxhook.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhelper.h\"\n\n#ifndef DIDEVTYPE_MOUSE\n#define DIDEVTYPE_DEVICE        1\n#define DIDEVTYPE_MOUSE         2\n#define DIDEVTYPE_KEYBOARD      3\n#define DIDEVTYPE_JOYSTICK      4\n#endif\n\nextern BOOL WINAPI extGetCursorPos(LPPOINT);\n\n#ifndef OLDDIRECTINPUTVERSION\n#define OLDDIRECTINPUTVERSION 0x8007047e\n#endif\n\n/*\nDEFINE_GUID(IID_IDirectInputA,     0x89521360,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInputW,     0x89521361,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInput2A,    0x5944E662,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInput2W,    0x5944E663,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInput7A,    0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);\nDEFINE_GUID(IID_IDirectInput7W,    0x9A4CB685,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);\nDEFINE_GUID(IID_IDirectInput8A,    0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00);\nDEFINE_GUID(IID_IDirectInput8W,    0xBF798031,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00);\nDEFINE_GUID(IID_IDirectInputDeviceA, 0x5944E680,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInputDeviceW, 0x5944E681,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInputDevice2A,0x5944E682,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInputDevice2W,0x5944E683,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00);\nDEFINE_GUID(IID_IDirectInputDevice7A,0x57D7C6BC,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);\nDEFINE_GUID(IID_IDirectInputDevice7W,0x57D7C6BD,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE);\nDEFINE_GUID(IID_IDirectInputDevice8A,0x54D41080,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79);\nDEFINE_GUID(IID_IDirectInputDevice8W,0x54D41081,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79);\nDEFINE_GUID(IID_IDirectInputEffect,  0xE7E1F7C0,0x88D2,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35);\n*/\n\ntypedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *);\ntypedef HRESULT (WINAPI *DirectInputCreateA_Type)(HINSTANCE, DWORD, LPDIRECTINPUTA *, LPUNKNOWN);\ntypedef HRESULT (WINAPI *DirectInputCreateW_Type)(HINSTANCE, DWORD, LPDIRECTINPUTW *, LPUNKNOWN);\ntypedef HRESULT (WINAPI *DirectInputCreateEx_Type)(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN);\ntypedef HRESULT (WINAPI *DICreateDeviceA_Type)(LPDIRECTINPUTA, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN);\ntypedef HRESULT (WINAPI *DICreateDeviceW_Type)(LPDIRECTINPUTW, REFGUID, LPDIRECTINPUTDEVICEW *, LPUNKNOWN);\ntypedef HRESULT (WINAPI *DICreateDeviceEx_Type)(LPDIRECTINPUT, REFGUID, REFIID, LPVOID *, LPUNKNOWN);\ntypedef HRESULT (WINAPI *GetDeviceData_Type)(LPDIRECTINPUTDEVICE, DWORD, LPVOID, LPDWORD, DWORD);\ntypedef HRESULT (WINAPI *GetDeviceState_Type)(LPDIRECTINPUTDEVICE, DWORD, LPDIMOUSESTATE);\ntypedef HRESULT (WINAPI *DISetCooperativeLevel_Type)(LPDIRECTINPUTDEVICE, HWND, DWORD);\ntypedef HRESULT (WINAPI *SetDataFormat_Type)(LPDIRECTINPUTDEVICE, LPCDIDATAFORMAT);\ntypedef HRESULT (WINAPI *DIEnumDevicesA_Type)(void *, DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD);\ntypedef HRESULT (WINAPI *DIEnumDevicesW_Type)(void *, DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD);\ntypedef HRESULT (WINAPI *Acquire_Type)(LPDIRECTINPUTDEVICE);\ntypedef HRESULT (WINAPI *Unacquire_Type)(LPDIRECTINPUTDEVICE);\ntypedef HRESULT (WINAPI *DirectInput8Create_Type)(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN);\n//typedef HRESULT (WINAPI *DIFindDeviceA8_Type)(void *, REFGUID, LPCSTR, LPGUID);\n//typedef HRESULT (WINAPI *EnumDevicesBySemantics_Type)(void *, LPCTSTR, LPDIACTIONFORMAT, LPDIENUMDEVICESBYSEMANTICSCB, LPVOID, DWORD);\n \nHRESULT WINAPI extDirectInputCreateA(HINSTANCE, DWORD, LPDIRECTINPUTA *, LPUNKNOWN);\nHRESULT WINAPI extDirectInputCreateW(HINSTANCE, DWORD, LPDIRECTINPUTW *, LPUNKNOWN);\nHRESULT WINAPI extDirectInputCreateEx(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN);\nHRESULT WINAPI extDirectInput8Create(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN);\nHRESULT WINAPI extDICreateDeviceA1(LPDIRECTINPUTA, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN);\nHRESULT WINAPI extDICreateDeviceA2(LPDIRECTINPUTA, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN);\nHRESULT WINAPI extDICreateDeviceA7(LPDIRECTINPUTA, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN);\nHRESULT WINAPI extDICreateDeviceA8(LPDIRECTINPUTA, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN);\nHRESULT WINAPI extDICreateDeviceW1(LPDIRECTINPUTW, REFGUID, LPDIRECTINPUTDEVICEW *, LPUNKNOWN);\nHRESULT WINAPI extDICreateDeviceW2(LPDIRECTINPUTW, REFGUID, LPDIRECTINPUTDEVICEW *, LPUNKNOWN);\nHRESULT WINAPI extDICreateDeviceW7(LPDIRECTINPUTW, REFGUID, LPDIRECTINPUTDEVICEW *, LPUNKNOWN);\nHRESULT WINAPI extDICreateDeviceW8(LPDIRECTINPUTW, REFGUID, LPDIRECTINPUTDEVICEW *, LPUNKNOWN);\nHRESULT WINAPI extDICreateDeviceExA(LPDIRECTINPUTA, REFGUID, REFIID, LPVOID *, LPUNKNOWN);\nHRESULT WINAPI extDICreateDeviceExW(LPDIRECTINPUTW, REFGUID, REFIID, LPVOID *, LPUNKNOWN);\nHRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE, DWORD, LPVOID, LPDWORD, DWORD);\nHRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE, DWORD, LPDIMOUSESTATE);\nHRESULT WINAPI extDISetCooperativeLevel(LPDIRECTINPUTDEVICE, HWND, DWORD);\nHRESULT WINAPI extSetDataFormat(LPDIRECTINPUTDEVICE, LPCDIDATAFORMAT);\nHRESULT WINAPI extDIQueryInterface(void *, REFIID, LPVOID *);\nHRESULT WINAPI extDIEnumDevicesA1(void *, DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD);\nHRESULT WINAPI extDIEnumDevicesA2(void *, DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD);\nHRESULT WINAPI extDIEnumDevicesA7(void *, DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD);\nHRESULT WINAPI extDIEnumDevicesA8(void *, DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD);\nHRESULT WINAPI extDIEnumDevicesW1(void *, DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD);\nHRESULT WINAPI extDIEnumDevicesW2(void *, DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD);\nHRESULT WINAPI extDIEnumDevicesW7(void *, DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD);\nHRESULT WINAPI extDIEnumDevicesW8(void *, DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD);\nHRESULT WINAPI extAcquire(LPDIRECTINPUTDEVICE);\nHRESULT WINAPI extUnacquire(LPDIRECTINPUTDEVICE);\nHRESULT WINAPI extDirectInput8Create(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN);\n//HRESULT WINAPI extDIFindDeviceA8(void *, REFGUID, LPCSTR, LPGUID);\n//HRESULT WINAPI extEnumDevicesBySemantics(void *, LPCTSTR, LPDIACTIONFORMAT, LPDIENUMDEVICESBYSEMANTICSCB, LPVOID, DWORD);\n\nDirectInputCreateA_Type pDirectInputCreateA = NULL;\nDirectInputCreateW_Type pDirectInputCreateW = NULL;\nDirectInputCreateEx_Type pDirectInputCreateEx;\nDICreateDeviceA_Type pDICreateDeviceA1, pDICreateDeviceA2, pDICreateDeviceA7, pDICreateDeviceA8;\nDICreateDeviceW_Type pDICreateDeviceW1, pDICreateDeviceW2, pDICreateDeviceW7, pDICreateDeviceW8;\nDICreateDeviceEx_Type pDICreateDeviceExA, pDICreateDeviceExW;\n//DICreateDeviceEx_Type pDICreateDeviceEx;\nGetDeviceData_Type pGetDeviceData = NULL;\nGetDeviceState_Type pGetDeviceState = NULL;\nDISetCooperativeLevel_Type pDISetCooperativeLevel = NULL;\nSetDataFormat_Type pSetDataFormat = NULL;\nQueryInterface_Type pDIQueryInterface = NULL;\nDIEnumDevicesA_Type pDIEnumDevicesA1, pDIEnumDevicesA2, pDIEnumDevicesA7, pDIEnumDevicesA8;\nDIEnumDevicesW_Type pDIEnumDevicesW1, pDIEnumDevicesW2, pDIEnumDevicesW7, pDIEnumDevicesW8;\nAcquire_Type pAcquire = NULL;\nUnacquire_Type pUnacquire = NULL;\nDirectInput8Create_Type pDirectInput8Create = NULL;\n//DIFindDeviceA8_Type pDIFindDeviceA8 = NULL;\n//EnumDevicesBySemantics_Type pEnumDevicesBySemantics = NULL;\n\nstatic HookEntryEx_Type diHooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"DirectInputCreateA\", (FARPROC)NULL, (FARPROC *)&pDirectInputCreateA, (FARPROC)extDirectInputCreateA},\n\t{HOOK_HOT_CANDIDATE, 0, \"DirectInputCreateW\", (FARPROC)NULL, (FARPROC *)&pDirectInputCreateW, (FARPROC)extDirectInputCreateW},\n\t{HOOK_HOT_CANDIDATE, 0, \"DirectInputCreateEx\", (FARPROC)NULL, (FARPROC *)&pDirectInputCreateEx, (FARPROC)extDirectInputCreateEx},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type di8Hooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"DirectInput8Create\", (FARPROC)NULL, (FARPROC *)&pDirectInput8Create, (FARPROC)extDirectInput8Create},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nvoid GetMousePosition(int *, int *);\nvoid InitPosition(int, int, int, int, int, int);\n\nint iCursorX;\nint iCursorY;\nint iCursorXBuf;\nint iCursorYBuf;\nint iCurMinX;\nint iCurMinY;\nint iCurMaxX;\nint iCurMaxY;\n\nLPDIRECTINPUTDEVICE lpDIDDevice  = NULL;\nLPDIRECTINPUTDEVICE lpDIDKeyboard = NULL;\nLPDIRECTINPUTDEVICE lpDIDSysMouse = NULL;\nLPDIRECTINPUTDEVICE lpDIDJoystick = NULL;\n\nstatic char *sDevice(LPDIRECTINPUTDEVICE lpdid)\n{\n\tchar *ret;\n\tret = NULL;\n\tif(lpdid==lpDIDDevice) ret = \"Device\";\n\tif(lpdid==lpDIDKeyboard) ret = \"Keyboard\";\n\tif(lpdid==lpDIDSysMouse) ret = \"Mouse\";\n\tif(lpdid==lpDIDJoystick) ret = \"Joystick\";\n\tif (ret) \n\t\treturn ret;\n\telse\n\t\treturn (lpdid ? \"unknown\" : \"NULL\");\n}\n\nvoid HookDirectInput(HMODULE module)\n{\n\tconst GUID di7 = {0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE};\n\tHINSTANCE hinst;\n\tLPDIRECTINPUT lpdi;\n\n\tif(!(dxw.dwFlags1 & HOOKDI)) return;\n\n\tHookLibraryEx(module, diHooks, \"dinput.dll\");\n\tif(!pDirectInputCreateA && !pDirectInputCreateW && !pDirectInputCreateEx){\n\t\thinst = LoadLibrary(\"dinput.dll\");\n\t\tif(!hinst) {\n\t\t\tOutTraceE(\"LoadLibrary dinput.dll ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t\t\treturn;\n\t\t}\n\t\tpDirectInputCreateA = (DirectInputCreateA_Type)GetProcAddress(hinst, \"DirectInputCreateA\");\n\t\tif(pDirectInputCreateA)\n\t\t\tif(!extDirectInputCreateA(GetModuleHandle(0), DIRECTINPUT_VERSION,\n\t\t\t\t&lpdi, 0)) lpdi->Release();\n\t\tpDirectInputCreateEx = (DirectInputCreateEx_Type)GetProcAddress(hinst, \"DirectInputCreateEx\");\n\t\tif(pDirectInputCreateEx)\n\t\t\tif(!extDirectInputCreateEx(GetModuleHandle(0), DIRECTINPUT_VERSION,\n\t\t\t\tdi7, (void **)&lpdi, 0)) lpdi->Release();\n\t}\n}\n\nvoid HookDirectInput8(HMODULE module)\n{\n\tconst GUID di8 = {0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00};\n\tHINSTANCE hinst;\n\tLPDIRECTINPUT lpdi;\n\n\tif(!(dxw.dwFlags1 & HOOKDI8)) return;\n\n\tHookLibraryEx(module, di8Hooks, \"dinput8.dll\");\n\tif(!pDirectInput8Create){\n\t\thinst = LoadLibrary(\"dinput8.dll\");\n\t\tif(!hinst) {\n\t\t\tOutTraceE(\"LoadLibrary dinput8.dll ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t\t\treturn;\n\t\t}\n\t\tpDirectInput8Create = (DirectInput8Create_Type)GetProcAddress(hinst, \"DirectInput8Create\");\n\t\tif(pDirectInput8Create)\n\t\t\tif(!extDirectInput8Create(GetModuleHandle(0), DIRECTINPUT8_VERSION,\n\t\t\t\tdi8, (LPVOID *)&lpdi, 0)) lpdi->Release();\n\t}\n}\n\nFARPROC Remap_DInput_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tif ((dxw.dwFlags1 & HOOKDI) && (addr=RemapLibraryEx(proc, hModule, diHooks))) return addr;\n\treturn NULL;\n}\n\nFARPROC Remap_DInput8_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tif ((dxw.dwFlags1 & HOOKDI8) && (addr=RemapLibraryEx(proc, hModule, di8Hooks))) return addr;\n\treturn NULL;\n}\n\nconst GUID FAR IID_IDirectInput8A = { 0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00 };\nconst GUID FAR IID_IDirectInput8W = { 0xBF798031,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00 };\n#define OLDDIVERSION FALSE\n\nHRESULT WINAPI extDirectInputCreateA(HINSTANCE hinst, DWORD dwversion, LPDIRECTINPUT *lplpdi, LPUNKNOWN pu)\n{\n\tHRESULT res;\n\n\tOutTraceDW(\"DirectInputCreateA(%x)\\n\", dwversion);\n\n\tres = (*pDirectInputCreateA)(hinst, dwversion, lplpdi, pu);\n\tif(res) {\n\t\tif ((res == OLDDIRECTINPUTVERSION) && (dwversion == 0x800) && OLDDIVERSION){\n\t\t\tOutTraceE(\"DirectInputCreateA: ERROR err=OLDDIRECTINPUTVERSION version=800 try to call DirectInput8 interface\\n\");\n\t\t\tif(!pDirectInput8Create) {\n\t\t\t\tHMODULE hDI8;\n\t\t\t\thDI8 = (*pLoadLibraryA)(\"dinput8.dll\");\n\t\t\t\tpDirectInput8Create = (DirectInput8Create_Type)(*pGetProcAddress)(hDI8, \"DirectInput8Create\");\n\t\t\t}\n\t\t\tif(pDirectInput8Create){\n\t\t\t\tres = extDirectInput8Create(hinst, dwversion, IID_IDirectInput8A, (LPVOID *)lplpdi, pu);\n\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\t\tOutTraceE(\"DirectInputCreateA: ERROR err=%x(%s)\\n\", res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\tSetHook((void *)(**(DWORD **)lplpdi), extDIQueryInterface, (void **)&pDIQueryInterface, \"QueryInterface(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdi + 12), extDICreateDeviceA1, (void **)&pDICreateDeviceA1, \"CreateDevice(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdi + 16), extDIEnumDevicesA1, (void **)&pDIEnumDevicesA1, \"EnumDevices(I)\");\n\treturn 0;\n}\n\nHRESULT WINAPI extDirectInputCreateW(HINSTANCE hinst, DWORD dwversion, LPDIRECTINPUTW *lplpdi, LPUNKNOWN pu)\n{\n\tHRESULT res;\n\n\tOutTraceDW(\"DirectInputCreateW(%x)\\n\", dwversion);\n\n\tres = (*pDirectInputCreateW)(hinst, dwversion, lplpdi, pu);\n\tif(res) {\n\t\tif ((res == OLDDIRECTINPUTVERSION) && (dwversion == 0x800) && OLDDIVERSION){\n\t\t\tOutTraceE(\"DirectInputCreateA: ERROR err=OLDDIRECTINPUTVERSION version=800 try to call DirectInput8 interface\\n\");\n\t\t\tif(!pDirectInput8Create) {\n\t\t\t\tHMODULE hDI8;\n\t\t\t\thDI8 = (*pLoadLibraryA)(\"dinput8.dll\");\n\t\t\t\tpDirectInput8Create = (DirectInput8Create_Type)(*pGetProcAddress)(hDI8, \"DirectInput8Create\");\n\t\t\t}\n\t\t\tif(pDirectInput8Create){\n\t\t\t\tres = extDirectInput8Create(hinst, dwversion, IID_IDirectInput8W, (LPVOID *)lplpdi, pu);\n\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\t\tOutTraceE(\"DirectInputCreateW: ERROR err=%x(%s)\\n\", res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\tSetHook((void *)(**(DWORD **)lplpdi), extDIQueryInterface, (void **)&pDIQueryInterface, \"QueryInterface(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdi + 12), extDICreateDeviceW1, (void **)&pDICreateDeviceW1, \"CreateDevice(IW1)\");\n\tSetHook((void *)(**(DWORD **)lplpdi + 16), extDIEnumDevicesW1, (void **)&pDIEnumDevicesW1, \"EnumDevices(IW1)\");\n\treturn 0;\n}\n\nHRESULT WINAPI extDirectInputCreateEx(HINSTANCE hinst, DWORD dwversion, REFIID riidltf, LPVOID *ppvout, LPUNKNOWN pu)\n{\n\tHRESULT res;\n\n\tOutTraceDW(\"DirectInputCreateEx: dwVersion=%x REFIID=%x(%s)\\n\",\n\t\tdwversion, riidltf.Data1, ExplainGUID((GUID *)&riidltf));\n\n\tres = (*pDirectInputCreateEx)(hinst, dwversion, riidltf, ppvout, pu);\n\tif(res) {\n\t\tif ((res == OLDDIRECTINPUTVERSION) && (dwversion == 0x800) && OLDDIVERSION){\n\t\t\tOutTraceE(\"DirectInputCreateA: ERROR err=OLDDIRECTINPUTVERSION version=800 try to call DirectInput8 interface\\n\");\n\t\t\tif(!pDirectInput8Create) {\n\t\t\t\tHMODULE hDI8;\n\t\t\t\thDI8 = (*pLoadLibraryA)(\"dinput8.dll\");\n\t\t\t\tpDirectInput8Create = (DirectInput8Create_Type)(*pGetProcAddress)(hDI8, \"DirectInput8Create\");\n\t\t\t}\n\t\t\tif(pDirectInput8Create){\n\t\t\t\tswitch (riidltf.Data1){\n\t\t\t\t\tcase 0x9A4CB684: res = extDirectInput8Create(hinst, dwversion, IID_IDirectInput8A, ppvout, pu); break;\n\t\t\t\t\tcase 0x9A4CB685: res = extDirectInput8Create(hinst, dwversion, IID_IDirectInput8W, ppvout, pu); break;\n\t\t\t\t}\n\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\t\tOutTraceE(\"DirectInputCreateEx: ERROR err=%x(%s)\\n\", res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\tswitch (riidltf.Data1){\n\t\tcase 0x9A4CB684: \n\t\t\tSetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDeviceA7, (void **)&pDICreateDeviceA7, \"CreateDevice(IA7)\");\n\t\t\tSetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevicesA7, (void **)&pDIEnumDevicesA7, \"EnumDevices(IA7)\");\n\t\t\tif(dwversion >= 700)\n\t\t\t\tSetHook((void *)(**(DWORD **)ppvout + 36), extDICreateDeviceExA, (void **)&pDICreateDeviceExA, \"CreateDeviceEx(IA7)\");\n\t\t\tbreak;\n\t\tcase 0x9A4CB685:\n\t\t\t\tSetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDeviceW7, (void **)&pDICreateDeviceA7, \"CreateDevice(IA7)\");\n\t\t\t\tSetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevicesW7, (void **)&pDIEnumDevicesA7, \"EnumDevices(IA7)\");\n\t\t\t\tif(dwversion >= 700)\n\t\t\t\t\tSetHook((void *)(**(DWORD **)ppvout + 36), extDICreateDeviceExW, (void **)&pDICreateDeviceExA, \"CreateDeviceEx(IA7)\");\n\t\tbreak;\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extDIQueryInterface(void * lpdi, REFIID riid, LPVOID *obp)\n{\n\tHRESULT res;\n\n\tOutTraceDW(\"QueryInterface(I): REFIID=%x(%s)\\n\",\n\t\triid.Data1, ExplainGUID((GUID *)&riid));\n\n\tres = (*pDIQueryInterface)(lpdi, riid, obp);\n\tif(res) return res;\n\n\tswitch(riid.Data1){\n\tcase 0x89521360:\t\t//DirectInputA\n\t\tSetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceA1, (void **)&pDICreateDeviceA1, \"CreateDevice(IA1)\");\n\t\tSetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesA1, (void **)&pDIEnumDevicesA1, \"EnumDevices(IA1)\");\n\t\tbreak;\n\tcase 0x89521361:\t\t//DirectInputW\n\t\tSetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceW1, (void **)&pDICreateDeviceW1, \"CreateDevice(IW1)\");\n\t\tSetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesW1, (void **)&pDIEnumDevicesW1, \"EnumDevices(IW1)\");\n\t\tbreak;\n\tcase 0x5944E662:\t\t//DirectInput2A\n\t\tSetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceA2, (void **)&pDICreateDeviceA2, \"CreateDevice(IA2)\");\n\t\tSetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesA2, (void **)&pDIEnumDevicesA2, \"EnumDevices(IA2)\");\n\t\tbreak;\n\tcase 0x5944E663:\t\t//DirectInput2W\n\t\tSetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceW2, (void **)&pDICreateDeviceW2, \"CreateDevice(IW2)\");\n\t\tSetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesW2, (void **)&pDIEnumDevicesW2, \"EnumDevices(IW2)\");\n\t\tbreak;\n\tcase 0x9A4CB684:\t\t//IDirectInput7A\n\t\tSetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceA7, (void **)&pDICreateDeviceA7, \"CreateDevice(IA7)\");\n\t\tSetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesA7, (void **)&pDIEnumDevicesA7, \"EnumDevices(IA7)\");\n\t\tSetHook((void *)(**(DWORD **)obp + 36), extDICreateDeviceExA, (void **)&pDICreateDeviceExA, \"CreateDeviceEx(IA7)\");\n\tcase 0x9A4CB685:\t\t//IDirectInput7W\n\t\tSetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceW7, (void **)&pDICreateDeviceW7, \"CreateDevice(IW7)\");\n\t\tSetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesW7, (void **)&pDIEnumDevicesW7, \"EnumDevices(IW7)\");\n\t\tSetHook((void *)(**(DWORD **)obp + 36), extDICreateDeviceExW, (void **)&pDICreateDeviceExW, \"CreateDeviceEx(IW7)\");\n\t\tbreak;\n\t}\n\treturn 0;\n}\n\nHRESULT WINAPI extDirectInput8Create(HINSTANCE hinst, DWORD dwversion, REFIID riidltf, LPVOID *ppvout, LPUNKNOWN pu)\n{\n\tHRESULT res;\n\n\tOutTraceDW(\"DirectInput8Create: dwVersion=%x REFIID=%x(%s)\\n\",\n\t\tdwversion, riidltf.Data1, ExplainGUID((GUID *)&riidltf));\n\n\tres = (*pDirectInput8Create)(hinst, dwversion, riidltf, ppvout, pu);\n\tif(res) {\n\t\tOutTraceE(\"DirectInput8Create: ERROR res=%x\\n\", res);\n\t\treturn res;\n\t}\n\tOutTraceDW(\"DirectInput8Create: di=%x\\n\", *ppvout);\n\tswitch(riidltf.Data1){\n\t\tcase 0xBF798030:\n\t\t\tSetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDeviceA8, (void **)&pDICreateDeviceA8, \"CreateDevice(IA8)\");\n\t\t\tSetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevicesA8, (void **)&pDIEnumDevicesA8, \"EnumDevices(IA8)\");\n\t\t\t//SetHook((void *)(**(DWORD **)ppvout + 32), extDIFindDeviceA8, (void **)&pDIFindDeviceA8, \"FindDevice(IA8)\");\n\t\t\tbreak;\n\t\tcase 0xBF798031:\n\t\t\tSetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDeviceW8, (void **)&pDICreateDeviceW8, \"CreateDevice(IW8)\");\n\t\t\tSetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevicesW8, (void **)&pDIEnumDevicesW8, \"EnumDevices(IW8)\");\n\t\t\t//SetHook((void *)(**(DWORD **)ppvout + 32), extDIFindDeviceW8, (void **)&pDIFindDeviceW8, \"FindDevice(IW8)\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tMessageBox(0, \"Bad DirectInput REFIID\", \"warning\", 0);\n\t\t\tbreak;\n\t}\n\t//SetHook((void *)(**(DWORD **)ppvout + 36), extEnumDevicesBySemantics, (void **)&pEnumDevicesBySemantics, \"EnumDevicesBySemantics(I8)\");\n\treturn 0;\n}\n\nstatic char *sDeviceType(REFGUID rguid)\n{\n\tchar *devtype;\n\tswitch(rguid.Data1){\n\t\tcase 0x6F1D2B60: devtype = \"SysMouse\"; break;\n\t\tcase 0x6F1D2B61: devtype = \"SysKeyboard\"; break;\n\t\tcase 0x6F1D2B70: devtype = \"Joystick\"; break;\n\t\tcase 0x6F1D2B80: devtype = \"SysMouseEm\"; break;\n\t\tcase 0x6F1D2B81: devtype = \"SysMouseEm2\"; break;\n\t\tcase 0x6F1D2B82: devtype = \"SysKeyboardEm\"; break;\n\t\tcase 0x6F1D2B83: devtype = \"SysKeyboardEm2\"; break;\n\t\tdefault: devtype = \"Unknown\"; break;\n\t}\n\treturn devtype;\n}\n\nstatic int iDeviceType(REFGUID rguid)\n{\n\tint devtype;\n\tswitch(rguid.Data1){\n\t\tcase 0x6F1D2B60: devtype = DIDEVTYPE_MOUSE; break;\n\t\tcase 0x6F1D2B61: devtype = DIDEVTYPE_KEYBOARD; break;\n\t\tcase 0x6F1D2B70: devtype = DIDEVTYPE_JOYSTICK; break;\n\t\tdefault: devtype = 0; break;\n\t}\n\treturn devtype;\n}\n\nHRESULT WINAPI extDICreateDeviceA(DICreateDeviceA_Type pDICreateDevice, LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpdid, LPUNKNOWN pu)\n{\n\tHRESULT res;\n\n\tOutTraceDW(\"CreateDeviceA(I): REFGUID=%x(%s)\\n\", rguid.Data1, sDeviceType(rguid));\n\n\tres = (*pDICreateDevice)(lpdi, rguid, lplpdid, pu);\n\tif(res) {\n\t\tOutTraceE(\"CreateDeviceA(I): ERROR res=%x\\n\", res);\n\t\treturn res;\n\t}\n\n\tOutTraceDW(\"CreateDevice(I): did=%x\\n\", *lplpdid);\n\tSetHook((void *)(**(DWORD **)lplpdid + 28), extAcquire, (void **)&pAcquire, \"Acquire(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdid + 32), extUnacquire, (void **)&pUnacquire, \"Unacquire(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdid + 36), extGetDeviceState, (void **)&pGetDeviceState, \"GetDeviceState(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdid + 40), extGetDeviceData, (void **)&pGetDeviceData, \"GetDeviceData(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdid + 44), extSetDataFormat, (void **)&pSetDataFormat, \"SetDataFormat(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdid + 52), extDISetCooperativeLevel, (void **)&pDISetCooperativeLevel, \"SetCooperativeLevel(I)\");\n\n\tswitch(iDeviceType(rguid)){\n\t\tcase DIDEVTYPE_DEVICE:\t lpDIDDevice   = *lplpdid; break;\n\t\tcase DIDEVTYPE_MOUSE:\t lpDIDSysMouse = *lplpdid; break;\n\t\tcase DIDEVTYPE_KEYBOARD: lpDIDKeyboard = *lplpdid; break;\n\t\tcase DIDEVTYPE_JOYSTICK: lpDIDJoystick = *lplpdid; break;\n\t}\n\treturn DI_OK;\n}\n\nHRESULT WINAPI extDICreateDeviceA1(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpdid, LPUNKNOWN pu)\n{ return extDICreateDeviceA(pDICreateDeviceA1, lpdi, rguid, lplpdid, pu); }\nHRESULT WINAPI extDICreateDeviceA2(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpdid, LPUNKNOWN pu)\n{ return extDICreateDeviceA(pDICreateDeviceA2, lpdi, rguid, lplpdid, pu); }\nHRESULT WINAPI extDICreateDeviceA7(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpdid, LPUNKNOWN pu)\n{ return extDICreateDeviceA(pDICreateDeviceA7, lpdi, rguid, lplpdid, pu); }\nHRESULT WINAPI extDICreateDeviceA8(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpdid, LPUNKNOWN pu)\n{ return extDICreateDeviceA(pDICreateDeviceA8, lpdi, rguid, lplpdid, pu); }\n\nHRESULT WINAPI extDICreateDeviceW(DICreateDeviceW_Type pDICreateDevice, LPDIRECTINPUTW lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpdid, LPUNKNOWN pu)\n{\n\tHRESULT res;\n\n\tOutTraceDW(\"CreateDeviceW(I): REFGUID=%x(%s)\\n\", rguid.Data1, sDeviceType(rguid));\n\n\tres = (*pDICreateDevice)(lpdi, rguid, lplpdid, pu);\n\tif(res) {\n\t\tOutTraceE(\"CreateDeviceW(I): ERROR res=%x\\n\", res);\n\t\treturn res;\n\t}\n\n\tOutTraceDW(\"CreateDevice(I): did=%x\\n\", *lplpdid);\n\tSetHook((void *)(**(DWORD **)lplpdid + 28), extAcquire, (void **)&pAcquire, \"Acquire(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdid + 32), extUnacquire, (void **)&pUnacquire, \"Unacquire(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdid + 36), extGetDeviceState, (void **)&pGetDeviceState, \"GetDeviceState(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdid + 40), extGetDeviceData, (void **)&pGetDeviceData, \"GetDeviceData(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdid + 44), extSetDataFormat, (void **)&pSetDataFormat, \"SetDataFormat(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdid + 52), extDISetCooperativeLevel, (void **)&pDISetCooperativeLevel, \"SetCooperativeLevel(I)\");\n\n\tswitch(iDeviceType(rguid)){\n\t\tcase DIDEVTYPE_DEVICE:\t lpDIDDevice   = (LPDIRECTINPUTDEVICE)*lplpdid; break;\n\t\tcase DIDEVTYPE_MOUSE:\t lpDIDSysMouse = (LPDIRECTINPUTDEVICE)*lplpdid; break;\n\t\tcase DIDEVTYPE_KEYBOARD: lpDIDKeyboard = (LPDIRECTINPUTDEVICE)*lplpdid; break;\n\t\tcase DIDEVTYPE_JOYSTICK: lpDIDJoystick = (LPDIRECTINPUTDEVICE)*lplpdid; break;\n\t}\n\treturn DI_OK;\n}\n\nHRESULT WINAPI extDICreateDeviceW1(LPDIRECTINPUTW lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpdid, LPUNKNOWN pu)\n{ return extDICreateDeviceW(pDICreateDeviceW1, lpdi, rguid, lplpdid, pu); }\nHRESULT WINAPI extDICreateDeviceW2(LPDIRECTINPUTW lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpdid, LPUNKNOWN pu)\n{ return extDICreateDeviceW(pDICreateDeviceW2, lpdi, rguid, lplpdid, pu); }\nHRESULT WINAPI extDICreateDeviceW7(LPDIRECTINPUTW lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpdid, LPUNKNOWN pu)\n{ return extDICreateDeviceW(pDICreateDeviceW7, lpdi, rguid, lplpdid, pu); }\nHRESULT WINAPI extDICreateDeviceW8(LPDIRECTINPUTW lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpdid, LPUNKNOWN pu)\n{ return extDICreateDeviceW(pDICreateDeviceW8, lpdi, rguid, lplpdid, pu); }\n\nHRESULT WINAPI extDICreateDeviceEx(LPDIRECTINPUT lpdi, REFGUID rguid,\n\tREFIID riid, LPVOID *pvout, LPUNKNOWN pu)\n{\n\tHRESULT res;\n\n\tOutTraceDW(\"CreateDeviceEx(I): GUID=%x(%s) REFIID=%x\\n\", rguid.Data1, sDeviceType(rguid), riid.Data1);\n\n\tres = (*pDICreateDeviceExA)(lpdi, rguid, riid, pvout, pu);\n\tif(res) {\n\t\tOutTraceE(\"CreateDeviceEx(I): ERROR res=%x\\n\", res);\n\t\treturn res;\n\t}\n\tOutTraceDW(\"CreateDeviceEx(I): did=%x\\n\", *pvout);\n\tSetHook((void *)(**(DWORD **)pvout + 28), extAcquire, (void **)&pAcquire, \"Acquire(I)\");\n\tSetHook((void *)(**(DWORD **)pvout + 32), extUnacquire, (void **)&pUnacquire, \"Unacquire(I)\");\n\tSetHook((void *)(**(DWORD **)pvout + 36), extGetDeviceState, (void **)&pGetDeviceState, \"GetDeviceState(I)\");\n\tSetHook((void *)(**(DWORD **)pvout + 40), extGetDeviceData, (void **)&pGetDeviceData, \"GetDeviceData(I)\");\n\tSetHook((void *)(**(DWORD **)pvout + 44), extSetDataFormat, (void **)&pSetDataFormat, \"SetDataFormat(I)\");\n\tSetHook((void *)(**(DWORD **)pvout + 52), extDISetCooperativeLevel, (void **)&pDISetCooperativeLevel, \"SetCooperativeLevel(I)\");\n\n\tswitch(iDeviceType(rguid)){\n\t\tcase DIDEVTYPE_DEVICE:\t lpDIDDevice   = *(LPDIRECTINPUTDEVICE *)pvout; break;\n\t\tcase DIDEVTYPE_MOUSE:\t lpDIDSysMouse = *(LPDIRECTINPUTDEVICE *)pvout; break;\n\t\tcase DIDEVTYPE_KEYBOARD: lpDIDKeyboard = *(LPDIRECTINPUTDEVICE *)pvout; break;\n\t\tcase DIDEVTYPE_JOYSTICK: lpDIDJoystick = *(LPDIRECTINPUTDEVICE *)pvout; break;\n\t}\n\treturn DI_OK;\n}\n\n// to do\nHRESULT WINAPI extDICreateDeviceExA(LPDIRECTINPUTA lpdi, REFGUID rguid, REFIID riid, LPVOID *pvout, LPUNKNOWN pu)\n{ return extDICreateDeviceEx(lpdi, rguid, riid, pvout, pu); }\nHRESULT WINAPI extDICreateDeviceExW(LPDIRECTINPUTW lpdi, REFGUID rguid, REFIID riid, LPVOID *pvout, LPUNKNOWN pu)\n{ return extDICreateDeviceEx((LPDIRECTINPUT)lpdi, rguid, riid, pvout, pu); }\n\n\n/* from MSDN:\ncbObjectData\n    Size of the DIDEVICEOBJECTDATA structure, in bytes. \nrgdod\n    Array of DIDEVICEOBJECTDATA structures to receive the buffered data. \n\tThe number of elements in this array must be equal to the value of the pdwInOut parameter. \n\tIf this parameter is NULL, the buffered data is not stored anywhere, but all other side effects take place. \npdwInOut\n    On entry, the number of elements in the array pointed to by the rgdod parameter. \n\tOn exit, the number of elements actually obtained. \ndwFlags\n    Flags that control the manner in which data is obtained. \n\tThis value can be 0 or the following flag.\n\n    DIGDD_PEEK\n        Do not remove the items from the buffer. A subsequent IDirectInputDevice8::GetDeviceData call will read the same data. \n\t\tNormally, data is removed from the buffer after it is read.\n*/\n\n/* Mind the following scenarios!\nYour application can query for the number of elements in the device buffer by setting the rgdod parameter to NULL, setting pdwInOut to INFINITE \nand setting dwFlags to DIGDD_PEEK. The following code example illustrates how this can be done.\n\ndwItems = INFINITE; \nhres = idirectinputdevice9_GetDeviceData( \n            pdid, \n            sizeof(DIDEVICEOBJECTDATA), \n            NULL, \n            &dwItems, \n            DIGDD_PEEK); \nif (SUCCEEDED(hres)) { \n    // dwItems = Number of elements in buffer. \n    if (hres == DI_BUFFEROVERFLOW) { \n        // Buffer overflow occurred; not all data \n        //   was successfully captured. \n    } \n} \n\nTo query about whether a buffer overflow has occurred, set the rgdod parameter to NULL and the pdwInOut parameter to 0. \nThe following code example illustrates how this can be done.\n\ndwItems = 0; \nhres = idirectinputdevice9_GetDeviceData( \n            pdid, \n            sizeof(DIDEVICEOBJECTDATA), \n            NULL, \n            &dwItems, \n            0); \nif (hres == DI_BUFFEROVERFLOW) { \n    // Buffer overflow occurred. \n} \n*/\n\nHRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID rgdod, LPDWORD pdwinout, DWORD dwflags)\n{\n\tHRESULT res;\n\tBYTE *tmp;\n\tunsigned int i;\n\tPOINT p;\n\n\tOutTraceDW(\"GetDeviceData(I): did=%x(%s) cbdata=%i rgdod=%x, inout=%d flags=%x\\n\", \n\t\tlpdid, sDevice(lpdid), cbdata, rgdod, *pdwinout, dwflags);\n\n\tres = (*pGetDeviceData)(lpdid, cbdata, rgdod, pdwinout, dwflags);\n\n\tif (((res == DIERR_INPUTLOST) || (res == DIERR_NOTACQUIRED)) && RECOVERINPUTLOST){\n\t\tOutTraceE(\"GetDeviceState(I) recovering DIERR_INPUTLOST\\n\"); \n\t\tif(lpdid == lpDIDSysMouse) {\n\t\t\tres = (*pDISetCooperativeLevel)(lpdid, dxw.GethWnd(), DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);\n\t\t\tif(res) OutTraceE(\"GetDeviceState(I): SetCooperativeLevel ERROR: err=%x(%s)\\n\", res, ExplainDDError(res)); \n\t\t\tif(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor();\n\t\t}\n\t\tres = (*pAcquire)(lpdid);\n\t\tif(res) OutTraceE(\"GetDeviceState(I): Acquire ERROR: err=%x(%s)\\n\", res, ExplainDDError(res)); \n\t\tres = (*pGetDeviceData)(lpdid, cbdata, rgdod, pdwinout, dwflags);\n\t}\n\n\tswitch(res){\n\t\tcase DI_OK:\n\t\tcase DI_BUFFEROVERFLOW:\n\t\t\tbreak;\n\t\tcase DIERR_NOTACQUIRED: \n\t\tcase DIERR_INPUTLOST: \n\t\t\tOutTraceB(\"GetDeviceData(I): handling err=%s\\n\", ExplainDDError(res));\n\t\t\t*pdwinout = 0; // to avoid crashes\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tOutTraceE(\"GetDeviceData(I) ERROR: err=%x(%s)\\n\", res, ExplainDDError(res)); \n\t\t\treturn res;\n\t\t\tbreak;\n\t}\n\n\tif(!dxw.bActive) {\n\t\t*pdwinout = 0;\n\t\treturn DI_OK;\n\t}\n\n\tif(lpdid == lpDIDSysMouse){\n\t\tif(dxw.dwFlags4 & RELEASEMOUSE) {\n\t\t\tPOINT curr;\n\t\t\tRECT client;\n\t\t\textern GetCursorPos_Type pGetCursorPos;\n\t\t\textern GetClientRect_Type pGetClientRect;\n\t\t\textern ScreenToClient_Type pScreenToClient;\n\t\t\t(*pGetCursorPos)(&curr);\n\t\t\t(*pScreenToClient)(dxw.GethWnd(), &curr);\n\t\t\t(*pGetClientRect)(dxw.GethWnd(), &client);\n\t\t\tif ((curr.x < client.left) || (curr.y < client.top) || (curr.x > client.right) || (curr.y > client.bottom)){\n\t\t\t\t*pdwinout = 0;\n\t\t\t\treturn DI_OK;\n\t\t\t}\n\t\t}\n\n\t\ttmp = (BYTE *)rgdod;\n\t\tif(!tmp) return res;\n\n\t\tif(dxw.bDInputAbs){\n\t\t\tGetMousePosition((int *)&p.x, (int *)&p.y);\n\t\t\tfor(i = 0; (i < *pdwinout) && ((LPDIDEVICEOBJECTDATA)tmp)->dwOfs; i ++){\n\t\t\t\tif(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_X)((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.x;\n\t\t\t\tif(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_Y)((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.y;\n\t\t\t\ttmp += cbdata;\n\t\t\t}\n\t\t\tOutTraceB(\"GetDeviceData(I): ABS mousedata=(%d,%d)\\n\", p.x, p.y);\n\t\t}\n\t\telse{\n\t\t\tfor(i = 0; (i < *pdwinout) && ((LPDIDEVICEOBJECTDATA)tmp)->dwOfs; i ++){\n\t\t\t\tif(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_X) OutTraceB(\"GetDeviceData(I): REL mousedata X=%d\\n\", ((LPDIDEVICEOBJECTDATA)tmp)->dwData);\n\t\t\t\tif(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_Y) OutTraceB(\"GetDeviceData(I): REL mousedata Y=%d\\n\", ((LPDIDEVICEOBJECTDATA)tmp)->dwData);\n\t \t\t\ttmp += cbdata;\n\t\t\t}\n\t\t}\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPDIMOUSESTATE lpvdata)\n{\n\tHRESULT res; \n\tPOINT p = {0, 0};\n\n\tOutTraceB(\"GetDeviceState(I): did=%x(%s) cbData=%i,%i\\n\", lpdid, sDevice(lpdid), cbdata, dxw.bActive);\n\n\tres = (*pGetDeviceState)(lpdid, cbdata, lpvdata);\n\n\tif (((res == DIERR_INPUTLOST) || (res == DIERR_NOTACQUIRED)) && RECOVERINPUTLOST){\n\t\tOutTraceE(\"GetDeviceState(I) recovering DIERR_INPUTLOST\\n\"); \n\t\tif(lpdid == lpDIDSysMouse) {\n\t\t\tres = (*pDISetCooperativeLevel)(lpdid, dxw.GethWnd(), DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);\n\t\t\tif(res) OutTraceE(\"GetDeviceState(I): SetCooperativeLevel ERROR: err=%x(%s)\\n\", res, ExplainDDError(res)); \n\t\t\tif(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor();\n\t\t}\n\t\tres = (*pAcquire)(lpdid);\n\t\tif(res) OutTraceE(\"GetDeviceState(I): Acquire ERROR: err=%x(%s)\\n\", res, ExplainDDError(res)); \n\t\tres = (*pGetDeviceState)(lpdid, cbdata, lpvdata);\n\t}\n\n\tswitch(res){\n\t\tcase DI_OK:\n\t\t\tbreak;\n\t\tcase DIERR_NOTACQUIRED: \n\t\tcase DIERR_INPUTLOST: \n\t\t\tOutTraceB(\"GetDeviceState(I): handling err=%s\\n\", ExplainDDError(res));\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tOutTraceE(\"GetDeviceState(I) ERROR: err=%x(%s)\\n\", res, ExplainDDError(res)); \n\t\t\treturn res;\n\t\t\tbreak;\n\t}\n\n\tif(\tcbdata == sizeof(DIMOUSESTATE) || cbdata == sizeof(DIMOUSESTATE2)){\n\n\t\tif(!dxw.bActive){\n\t\t\tlpvdata->lZ = 0;\n\t\t\t*(DWORD *)lpvdata->rgbButtons = 0;\n\t\t\tOutTraceB(\"GetDeviceState(I): DEBUG cleared mousestate=(%d,%d)\\n\", p.x, p.y);\n\t\t\treturn DI_OK;\n\t\t}\n\n\t\tif(dxw.bDInputAbs){ // absolute position\n\t\t\tPOINT p;\n\t\t\textGetCursorPos(&p);\n\t\t\tlpvdata->lX = p.x;\n\t\t\tlpvdata->lY = p.y;\n\t\t\tOutTraceDW(\"GetMousePosition(I): x,y=(%d,%d)\\n\", p.x, p.y);\n\t\t}\n\t\telse { // relative position\n\t\t\tif(dxw.dwFlags6 & EMULATERELMOUSE){\n\t\t\t\tint iMaxX, iMaxY, iMinX, iMinY;\n\t\t\t\tRECT WinRect = dxw.GetUnmappedScreenRect();\n\t\t\t\tiMinX = WinRect.left;\n\t\t\t\tiMaxX = WinRect.right;\n\t\t\t\tiMinY = WinRect.top;\n\t\t\t\tiMaxY = WinRect.bottom;\n\t\t\t\tiCursorX = (iMaxX+iMinX)/2;\n\t\t\t\tiCursorY = (iMaxY+iMinY)/2;\n\t\t\t\tOutTraceB(\"GetDeviceState(I): RELATIVE clip=(%d,%d)-(%d,%d) pos=(%d,%d)\\n\", iMinX, iMinY, iMaxX, iMaxY, iCursorX, iCursorY);\n\t\t\t\t(*pGetCursorPos)(&p);\n\t\t\t\tlpvdata->lX = p.x - iCursorX;\n\t\t\t\tlpvdata->lY = p.y - iCursorY;\n\t\t\t\t(*pSetCursorPos)(iCursorX, iCursorY);\n\t\t\t}\n\t\t}\n\t}\n\n\t// SysKeybd device\n\tif(cbdata == 256 && !dxw.bActive) {\n\t\tZeroMemory(lpvdata, 256);\n\t\tOutTraceB(\"GetDeviceState(I): DEBUG cleared syskeybdstate\\n\");\n\t}\n\treturn DI_OK;\n}\n\nstatic char *didftype(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"DIDFT_\");\n\tswitch (c & 0x00000003){\n\t\tcase DIDFT_RELAXIS: strcat(eb, \"RELAXIS+\"); break;\n\t\tcase DIDFT_ABSAXIS: strcat(eb, \"ABSAXIS+\"); break;\n\t\tcase DIDFT_AXIS: strcat(eb, \"AXIS+\"); break;\n\t}\n\tswitch (c & 0x0000000C){\n\t\tcase DIDFT_PSHBUTTON: strcat(eb, \"PSHBUTTON+\"); break;\n\t\tcase DIDFT_TGLBUTTON: strcat(eb, \"TGLBUTTON+\"); break;\n\t\tcase DIDFT_BUTTON: strcat(eb, \"BUTTON+\"); break;\n\t}\n\tif (c & DIDFT_POV) strcat(eb, \"POV+\");\n\tif (c & DIDFT_COLLECTION) strcat(eb, \"COLLECTION+\");\n\tif (c & DIDFT_NODATA) strcat(eb, \"NODATA+\");\n\tif (c & DIDFT_FFACTUATOR) strcat(eb, \"FFACTUATOR+\");\n\tif (c & DIDFT_FFEFFECTTRIGGER) strcat(eb, \"FFEFFECTTRIGGER+\");\n\tif (c & DIDFT_VENDORDEFINED) strcat(eb, \"VENDORDEFINED+\");\n\tif (c & DIDFT_OUTPUT) strcat(eb, \"OUTPUT+\");\n\tif (c & DIDFT_ALIAS) strcat(eb, \"ALIAS+\");\n\tif (c & DIDFT_OPTIONAL) strcat(eb, \"OPTIONAL+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DIDFT_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\nstatic char *ExplainDataFormatFlags(DWORD f)\n{\n\tchar *s;\n\ts=\"unknown\";\n\tswitch(f){\n\t\tcase DIDF_ABSAXIS: s=\"DIDF_ABSAXIS\";\n\t\tcase DIDF_RELAXIS: s=\"DIDF_RELAXIS\";\n\t}\n\treturn s;\n}\n\nHRESULT WINAPI extSetDataFormat(LPDIRECTINPUTDEVICE lpdid, LPCDIDATAFORMAT lpdf)\n{\n\tOutTraceDW(\"SetDataFormat(I): did=%x(%s) lpdf=%x size=%d objsize=%d flags=0x%x(%s) datasize=%d numobjects=%d\\n\", \n\t\tlpdid, sDevice(lpdid), lpdf, lpdf->dwSize, lpdf->dwObjSize, lpdf->dwFlags, ExplainDataFormatFlags(lpdf->dwFlags), lpdf->dwDataSize, lpdf->dwNumObjs);\n\tif(IsDebug){\n\t\tDIOBJECTDATAFORMAT *df;\n\t\tdf = lpdf->rgodf;\n\t\tfor(DWORD i=0; i<lpdf->dwNumObjs; i++){\n\t\t\tOutTrace(\"SetDataFormat(I): DataFormat[%d] ofs=%x flags=%x type=%x(%s)\\n\", \n\t\t\t\ti, df[i].dwOfs, df[i].dwFlags, df[i].dwType, didftype(df[i].dwType));\n\t\t}\n\t}\n\n\tif(lpdid == lpDIDSysMouse){\n\t\tif(lpdf->dwFlags & DIDF_ABSAXIS) dxw.bDInputAbs = 1;\n\t\tif(lpdf->dwFlags & DIDF_RELAXIS) dxw.bDInputAbs = 0;\n\t}\n\treturn (*pSetDataFormat)(lpdid, lpdf);\n}\n\nHRESULT WINAPI extDISetCooperativeLevel(LPDIRECTINPUTDEVICE lpdid, HWND hwnd, DWORD dwflags)\n{\n\tHRESULT res;\n\n\tOutTraceDW(\"SetCooperativeLevel(I): did=%x(%s) hwnd=%x flags=%x(%s)\\n\", \n\t\tlpdid, sDevice(lpdid), hwnd, dwflags, ExplainDICooperativeFlags(dwflags));\n\n\tif(dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd();\n\n\tif(lpdid == lpDIDSysMouse) dwflags = (DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);\n\t// v2.03.84: SHAREDKEYBOARD option to prevent situations like \"Planet of the Apes\"\n\t// not processing the PrintScreen syskeys.\n\tif((lpdid == lpDIDKeyboard) && (dxw.dwFlags7 & SHAREDKEYBOARD))\n\t\tdwflags = (DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);\n\n\tres = (*pDISetCooperativeLevel)(lpdid, hwnd, dwflags);\n\tif(res != DD_OK){\n\t\tOutTraceE(\"SetCooperativeLevel(I) ERROR: err=%x(%s)\\n\", res, ExplainDDError(res)); \n\t}\n\n\treturn res;\n}\n\n// Simplified version, taking in proper account the GetCursorPos API hooking & coordinate processing\nvoid GetMousePosition(int *x, int *y)\n{\n\tPOINT p;\n\n\textern BOOL WINAPI extGetCursorPos(LPPOINT);\n\textGetCursorPos(&p);\n\t*x = p.x;\n\t*y = p.y;\n\tOutTraceDW(\"GetMousePosition(I): x,y=(%d,%d)\\n\", *x, *y);\n}\n\ntypedef struct {\n\tLPDIENUMDEVICESCALLBACK cb;\n\tLPVOID arg;\n} CallbackArg;\n\nHRESULT WINAPI extDeviceProxy(LPCDIDEVICEINSTANCE dev, LPVOID arg)\n{\n\tHRESULT res;\n\tchar *p;\n\tswitch (dev->dwSize) {\n\t\tcase sizeof(DIDEVICEINSTANCEA): p=\"ASCII\"; break;\n\t\tcase sizeof(DIDEVICEINSTANCEW): p=\"WIDECHAR\"; break;\n\t\tdefault: p=\"UNKNOWN\"; break;\n\t}\n\tOutTraceDW(\"EnumDevices(I): CALLBACK size=%d(%s) GUID=(%x.%x.%x.%x) type=%x InstanceName=\\\"%s\\\", ProductName=\\\"%s\\\"\\n\", \n\t\tdev->dwSize, p, dev->guidInstance.Data1, dev->guidInstance.Data2, dev->guidInstance.Data3, dev->guidInstance.Data4, \n\t\tdev->dwDevType, dev->tszInstanceName, dev->tszProductName);\n\n\tif((dxw.dwFlags7 & SKIPDEVTYPEHID) && (dev->dwDevType & DIDEVTYPE_HID)) {\n\t\tOutTraceDW(\"EnumDevices(I): skip HID device devtype=%x\\n\", dev->dwDevType);\n\t\treturn TRUE; // skip DIDEVTYPE_HID\n\t}\n\t\n\tres = (*(((CallbackArg *)arg)->cb))(dev, ((CallbackArg *)arg)->arg);\n\tOutTraceDW(\"EnumDevices: CALLBACK ret=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extDIEnumDevicesA(DIEnumDevicesA_Type pDIEnumDevices, void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags)\n{\n\tHRESULT res;\n\tCallbackArg Arg;\n\tOutTraceDW(\"EnumDevicesA(I): di=%x DevType=%x CallBack=%x Ref=%x Flags=%x\\n\", lpdi, dwDevType, lpCallback, pvRef, dwFlags);\n\tArg.cb= lpCallback;\n\tArg.arg=pvRef;\n\tres=(*pDIEnumDevices)( lpdi, dwDevType, (LPDIENUMDEVICESCALLBACKA)extDeviceProxy, &Arg, dwFlags); // V2.02.80 fix\n\t//res=(*pDIEnumDevices)( lpdi, dwDevType, lpCallback, pvRef, dwFlags);\n\tOutTraceDW(\"EnumDevicesA(I): res=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extDIEnumDevicesA1(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACK lpCallback, LPVOID pvRef, DWORD dwFlags)\n{ return extDIEnumDevicesA(pDIEnumDevicesA1, lpdi, dwDevType, lpCallback, pvRef, dwFlags); }\nHRESULT WINAPI extDIEnumDevicesA2(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACK lpCallback, LPVOID pvRef, DWORD dwFlags)\n{ return extDIEnumDevicesA(pDIEnumDevicesA2, lpdi, dwDevType, lpCallback, pvRef, dwFlags); }\nHRESULT WINAPI extDIEnumDevicesA7(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACK lpCallback, LPVOID pvRef, DWORD dwFlags)\n{ return extDIEnumDevicesA(pDIEnumDevicesA7, lpdi, dwDevType, lpCallback, pvRef, dwFlags); }\nHRESULT WINAPI extDIEnumDevicesA8(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACK lpCallback, LPVOID pvRef, DWORD dwFlags)\n{ return extDIEnumDevicesA(pDIEnumDevicesA8, lpdi, dwDevType, lpCallback, pvRef, dwFlags); }\n\nHRESULT WINAPI extDIEnumDevicesW(DIEnumDevicesW_Type pDIEnumDevices, void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags)\n{\n\tHRESULT res;\n\tCallbackArg Arg;\n\tOutTraceDW(\"EnumDevicesW(I): di=%x DevType=%x CallBack=%x Ref=%x Flags=%x\\n\", lpdi, dwDevType, lpCallback, pvRef, dwFlags);\n\tArg.cb= (LPDIENUMDEVICESCALLBACKA)lpCallback;\n\tArg.arg=pvRef;\n\tres=(*pDIEnumDevices)( lpdi, dwDevType, (LPDIENUMDEVICESCALLBACKW)extDeviceProxy, &Arg, dwFlags); // V2.02.80 fix\n\t//res=(*pDIEnumDevices)( lpdi, dwDevType, lpCallback, pvRef, dwFlags);\n\tOutTraceDW(\"EnumDevicesW(I): res=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extDIEnumDevicesW1(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags)\n{ return extDIEnumDevicesW(pDIEnumDevicesW1, lpdi, dwDevType, lpCallback, pvRef, dwFlags); }\nHRESULT WINAPI extDIEnumDevicesW2(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags)\n{ return extDIEnumDevicesW(pDIEnumDevicesW2, lpdi, dwDevType, lpCallback, pvRef, dwFlags); }\nHRESULT WINAPI extDIEnumDevicesW7(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags)\n{ return extDIEnumDevicesW(pDIEnumDevicesW7, lpdi, dwDevType, lpCallback, pvRef, dwFlags); }\nHRESULT WINAPI extDIEnumDevicesW8(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags)\n{ return extDIEnumDevicesW(pDIEnumDevicesW8, lpdi, dwDevType, lpCallback, pvRef, dwFlags); }\n\nHRESULT WINAPI extAcquire(LPDIRECTINPUTDEVICE lpdid)\n{\n\tHRESULT res;\n\tres = (*pAcquire)(lpdid);\n\tOutTrace(\"Acquire(I): lpdid=%x(%s) res=%x(%s)\\n\", lpdid, sDevice(lpdid), res, ExplainDDError(res));\n\tif((dxw.dwFlags7 & SUPPRESSDIERRORS) && (res == DIERR_OTHERAPPHASPRIO)) res = DI_OK;\n\treturn res;\n}\n\nHRESULT WINAPI extUnacquire(LPDIRECTINPUTDEVICE lpdid)\n{\n\tHRESULT res;\n\tres = (*pUnacquire)(lpdid);\n\tOutTrace(\"Unacquire(I): lpdid=%x(%s) res=%x(%s)\\n\", lpdid, sDevice(lpdid), res, ExplainDDError(res));\n\tif((dxw.dwFlags7 & SUPPRESSDIERRORS) && (res == DIERR_OTHERAPPHASPRIO)) res = DI_OK;\n\treturn res;\n}\t\n\nvoid ToggleAcquiredDevices(BOOL flag)\n{\n\tif(flag && pAcquire){\n\t\tif(lpDIDSysMouse) (*pAcquire)(lpDIDSysMouse);\n\t\tif(lpDIDKeyboard) (*pAcquire)(lpDIDKeyboard);\n\t\tif(lpDIDJoystick) (*pAcquire)(lpDIDJoystick);\n\t\tif (dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor();\n\t}\n\tif(!flag && pUnacquire){\n\t\tif(lpDIDSysMouse) (*pUnacquire)(lpDIDSysMouse);\n\t\tif(lpDIDKeyboard) (*pUnacquire)(lpDIDKeyboard);\n\t\tif(lpDIDJoystick) (*pUnacquire)(lpDIDJoystick);\n\t\tif (dxw.dwFlags1 & CLIPCURSOR) dxw.EraseClipCursor();\n\t}\n}\n\n//HRESULT WINAPI extDIFindDeviceA8(void *di, REFGUID rguidClass, LPCSTR ptszName, LPGUID pguidInstance)\n//{\n//\tHRESULT res;\n//\tMessageBox(0, \"calling FindDevice\", \"debug\", 0);\n//\tres=(*pDIFindDeviceA8)(di, rguidClass, ptszName, pguidInstance);\n//\treturn res;\n//}\n\n//HRESULT WINAPI extEnumDevicesBySemantics(void *di, LPCTSTR ptszUserName, LPDIACTIONFORMAT lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCB lpCallback, LPVOID pvRef, DWORD dwFlags)\n//{\n//\tHRESULT res;\n//\tMessageBox(0, \"calling EnumDevicesBySemantics\", \"debug\", 0);\n//\tres=(*pEnumDevicesBySemantics)(di, ptszUserName, lpdiActionFormat, lpCallback, pvRef, dwFlags);\n//\treturn res;\n//}\n\n//BOOL WINAPI extDIEnumDevicesBySemanticsCallback(LPCDIDEVICEINSTANCE lpddi, LPDIRECTINPUTDEVICE8 lpdid,  DWORD dwFlags, DWORD dwRemaining, LPVOID pvRef)\n//{\n//\tBOOL res;\n//\tMessageBox(0, \"calling EnumDevicesBySemanticsCallback\", \"debug\", 0);\n//\tres=(*pDIFindDeviceA8)(di, rguidClass, ptszName, pguidInstance);\n//\treturn res;\n//}\n"
  },
  {
    "path": "dll/dsound.cpp",
    "content": "#define _WIN32_WINNT 0x0600\n#define WIN32_LEAN_AND_MEAN\n#define _CRT_SECURE_NO_WARNINGS\n#define _CRT_NON_CONFORMING_SWPRINTFS\n\n#include <stdio.h>\n#include <stdlib.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhook.h\"\n#include \"dsound.h\"\n#include \"dxhelper.h\"\n\ntypedef HRESULT\t(WINAPI *DirectSoundCreate_Type)(LPGUID, LPDIRECTSOUND *, LPUNKNOWN);\ntypedef HRESULT (WINAPI *DirectSoundCreate8_Type)(LPCGUID, LPDIRECTSOUND8 *, LPUNKNOWN);\ntypedef HRESULT\t(WINAPI *SetCooperativeLevel_Type)  (void *, HWND, DWORD);\ntypedef HRESULT (WINAPI *CreateSoundBuffer_Type) (void *, LPCDSBUFFERDESC, LPDIRECTSOUNDBUFFER *, LPUNKNOWN);\ntypedef HRESULT (WINAPI *DirectSoundEnumerateA_Type)(LPDSENUMCALLBACKA, LPVOID);\ntypedef HRESULT (WINAPI *DirectSoundEnumerateW_Type)(LPDSENUMCALLBACKW, LPVOID);\ntypedef HRESULT (WINAPI *GetSpeakerConfig_Type)(void *, LPDWORD);\ntypedef HRESULT (WINAPI *SetSpeakerConfig_Type)(void *, DWORD);\ntypedef HRESULT (WINAPI *DSInitialize_Type)(void *, LPCGUID);\n\nDirectSoundCreate_Type pDirectSoundCreate = NULL;\nDirectSoundCreate8_Type pDirectSoundCreate8 = NULL;\nSetCooperativeLevel_Type pDSSetCooperativeLevel = NULL;\nCreateSoundBuffer_Type pCreateSoundBuffer = NULL;\nDirectSoundEnumerateA_Type pDirectSoundEnumerateA = NULL;\nDirectSoundEnumerateW_Type pDirectSoundEnumerateW = NULL;\nGetSpeakerConfig_Type pGetSpeakerConfig = NULL;\nSetSpeakerConfig_Type pSetSpeakerConfig = NULL;\nDSInitialize_Type pDSInitialize = NULL;\n\nHRESULT WINAPI extDirectSoundCreate(LPGUID, LPDIRECTSOUND *, LPUNKNOWN);\nHRESULT WINAPI extDirectSoundCreate8(LPCGUID, LPDIRECTSOUND8 *, LPUNKNOWN);\nHRESULT WINAPI extDSSetCooperativeLevel(void *, HWND, DWORD);\nHRESULT WINAPI extCreateSoundBuffer(void *, LPCDSBUFFERDESC, LPDIRECTSOUNDBUFFER *, LPUNKNOWN);\nHRESULT WINAPI extDirectSoundEnumerateA(LPDSENUMCALLBACKA, LPVOID);\nHRESULT WINAPI extDirectSoundEnumerateW(LPDSENUMCALLBACKW, LPVOID);\nHRESULT WINAPI extGetSpeakerConfig(void *, LPDWORD);\nHRESULT WINAPI extSetSpeakerConfig(void *, DWORD);\nHRESULT WINAPI extDSInitialize(void *, LPCGUID);\n\nstatic HookEntryEx_Type Hooks[]={\n\t{HOOK_HOT_CANDIDATE, 0x0001, \"DirectSoundCreate\", (FARPROC)NULL, (FARPROC *)&pDirectSoundCreate, (FARPROC)extDirectSoundCreate},\n\t{HOOK_HOT_CANDIDATE, 0x000B, \"DirectSoundCreate8\", (FARPROC)NULL, (FARPROC *)&pDirectSoundCreate8, (FARPROC)extDirectSoundCreate8},\n\t{HOOK_HOT_CANDIDATE, 0x000B, \"DirectSoundEnumerateA\", (FARPROC)NULL, (FARPROC *)&pDirectSoundEnumerateA, (FARPROC)extDirectSoundEnumerateA},\n\t{HOOK_HOT_CANDIDATE, 0x000B, \"DirectSoundEnumerateW\", (FARPROC)NULL, (FARPROC *)&pDirectSoundEnumerateW, (FARPROC)extDirectSoundEnumerateW},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nFARPROC Remap_DSound_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tif(!(dxw.dwFlags7 & HOOKDIRECTSOUND)) return NULL;\n\tif (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\treturn NULL;\n}\n\nstatic char *libname = \"dsound.dll\";\n\nvoid HookDirectSound(HMODULE hModule)\n{\n\tif(!(dxw.dwFlags7 & HOOKDIRECTSOUND)) return;\n\tHookLibraryEx(hModule, Hooks, \"dsound.dll\");\n}\n\nvoid HookDirectSoundInit()\n{\n\tHookLibInitEx(Hooks);\n}\n\nvoid HookDirectSoundObj(LPDIRECTSOUND *lpds)\n{\n\t// v2.03.99: check or DirectSound could be hooked through CoCreateInstance !!\n\tif(!(dxw.dwFlags7 & HOOKDIRECTSOUND)) return;\n\t// IDIrectSound::SetCooperativeLevel\n\tSetHook((void *)(**(DWORD **)lpds + 12), extCreateSoundBuffer, (void **)&pCreateSoundBuffer, \"CreateSoundBuffer\");\n\tSetHook((void *)(**(DWORD **)lpds + 24), extDSSetCooperativeLevel, (void **)&pDSSetCooperativeLevel, \"SetCooperativeLevel(DSound)\");\n\tSetHook((void *)(**(DWORD **)lpds + 32), extGetSpeakerConfig, (void **)&pGetSpeakerConfig, \"GetSpeakerConfig(DSound)\");\n\tSetHook((void *)(**(DWORD **)lpds + 36), extSetSpeakerConfig, (void **)&pSetSpeakerConfig, \"SetSpeakerConfig(DSound)\");\n\tSetHook((void *)(**(DWORD **)lpds + 40), extDSInitialize, (void **)&pDSInitialize, \"Initialize(DSound)\");\n}\n\nHRESULT WINAPI extDirectSoundCreate(LPGUID guid, LPDIRECTSOUND *lpds, LPUNKNOWN unk)\n{\n\tHRESULT res;\n\n\tOutTraceDW(\"DirectSoundCreate: guid=%x\\n\", guid);\n\tres = (*pDirectSoundCreate)(guid, lpds, unk);\n\tif(res){\n\t\tOutTraceE(\"DirectSoundCreate ERROR: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t}\n\telse {\n\t\tOutTraceDW(\"DirectSoundCreate lpDS=%x\\n\", *lpds);\n\t\tHookDirectSoundObj(lpds);\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extDirectSoundCreate8(LPCGUID lpcGuidDevice, LPDIRECTSOUND8 *ppDS8, LPUNKNOWN pUnkOuter)\n{\n\tHRESULT res;\n\n\tOutTraceDW(\"DirectSoundCreate8: guid=%x\\n\", lpcGuidDevice);\n\tres = (*pDirectSoundCreate8)(lpcGuidDevice, ppDS8, pUnkOuter);\n\tres = DD_OK;\n\tif(res){\n\t\tOutTraceE(\"DirectSoundCreate8 ERROR: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t}\n\telse {\n\t\tOutTraceDW(\"DirectSoundCreate8 lpDS8=%x\\n\", *ppDS8);\n\t\tHookDirectSoundObj((LPDIRECTSOUND *)ppDS8);\n\t}\n\treturn res;\n}\n\n#define DSSCL_NORMAL                0x00000001\n#define DSSCL_PRIORITY              0x00000002\n#define DSSCL_EXCLUSIVE             0x00000003\n#define DSSCL_WRITEPRIMARY          0x00000004\n\nstatic char *ExplainLevel(DWORD lev)\n{\n\tchar *s;\n\tswitch(lev){\n\t\tcase DSSCL_NORMAL: s=\"NORMAL\"; break;\n\t\tcase DSSCL_PRIORITY: s=\"PRIORITY\"; break;\n\t\tcase DSSCL_EXCLUSIVE: s=\"EXCLUSIVE\"; break;\n\t\tcase DSSCL_WRITEPRIMARY: s=\"WRITEPRIMARY\"; break;\n\t\tdefault: s=\"invalid\"; break;\n\t}\n\treturn s;\n}\n\nHRESULT WINAPI extDSSetCooperativeLevel(void *lpds, HWND hwnd, DWORD dwLevel)\n{\n\tHRESULT res;\n\n\tOutTrace(\"DirectSound::SetCooperativeLevel: lpds=%x hwnd=%x level=%x(%s)\\n\", lpds, hwnd, dwLevel, ExplainLevel(dwLevel));\n\tif(dwLevel == DSSCL_EXCLUSIVE) {\n\t\tOutTrace(\"DirectSound::SetCooperativeLevel: PATCH\\n\");\n\t\tdwLevel=DSSCL_PRIORITY; // Arxel Tribe patch\n\t\t//dwLevel=DSSCL_NORMAL; // Arxel Tribe patch\n\t\thwnd=dxw.GethWnd();\n\t\t//hwnd=(*pGetDesktopWindow)();\n\t\t//hwnd=0;\n\t}\n\tres = (*pDSSetCooperativeLevel)(lpds, hwnd, dwLevel);\n\tif(res){\n\t\tOutTraceE(\"DirectSound::SetCooperativeLevel ERROR: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t}\n\treturn res;\n}\n\nchar *ExplainCSBFlags(DWORD c)\n{\n\tstatic char eb[512];\n\tunsigned int l;\n\tstrcpy(eb,\"\");\n\tif (c & DSBCAPS_PRIMARYBUFFER) strcat(eb, \"PRIMARYBUFFER+\");\n\tif (c & DSBCAPS_STATIC) strcat(eb, \"STATIC+\");\n\tif (c & DSBCAPS_LOCHARDWARE) strcat(eb, \"LOCHARDWARE+\");\n\tif (c & DSBCAPS_LOCSOFTWARE) strcat(eb, \"LOCSOFTWARE+\");\n\tif (c & DSBCAPS_CTRL3D) strcat(eb, \"CTRL3D+\");\n\tif (c & DSBCAPS_CTRLFREQUENCY) strcat(eb, \"CTRLFREQUENCY+\");\n\tif (c & DSBCAPS_CTRLPAN) strcat(eb, \"CTRLPAN+\");\n\tif (c & DSBCAPS_CTRLVOLUME) strcat(eb, \"CTRLVOLUME+\");\n\tif (c & DSBCAPS_CTRLPOSITIONNOTIFY) strcat(eb, \"CTRLPOSITIONNOTIFY+\");\n\tif (c & DSBCAPS_CTRLFX) strcat(eb, \"CTRLFX+\");\n\tif (c & DSBCAPS_STICKYFOCUS) strcat(eb, \"STICKYFOCUS+\");\n\tif (c & DSBCAPS_GLOBALFOCUS) strcat(eb, \"GLOBALFOCUS+\");\n\tif (c & DSBCAPS_GETCURRENTPOSITION2) strcat(eb, \"GETCURRENTPOSITION2+\");\n\tif (c & DSBCAPS_MUTE3DATMAXDISTANCE) strcat(eb, \"MUTE3DATMAXDISTANCE+\");\n\tif (c & DSBCAPS_LOCDEFER) strcat(eb, \"LOCDEFER+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DSBCAPS_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nHRESULT WINAPI extCreateSoundBuffer (void *lpds, LPCDSBUFFERDESC pcDSBufferDesc, LPDIRECTSOUNDBUFFER *ppDSBuffer, LPUNKNOWN pUnkOuter)\n{\n\tHRESULT res;\n\tOutTraceDW(\"CreateSoundBuffer: flags=%x(%s) BufferBytes=%d\\n\", pcDSBufferDesc->dwFlags, ExplainCSBFlags(pcDSBufferDesc->dwFlags), pcDSBufferDesc->dwBufferBytes);\n\tres = (*pCreateSoundBuffer)(lpds, pcDSBufferDesc, ppDSBuffer, pUnkOuter);\n\tif(res) OutTraceE(\"CreateSoundBuffer ERROR: res=%x(s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extDirectSoundEnumerateA(LPDSENUMCALLBACKA pDSEnumCallback, LPVOID pContext)\n{\n\tHRESULT res;\n\tOutTraceDW(\"DirectSoundEnumerateA\\n\");\n\tres = (*pDirectSoundEnumerateA)(pDSEnumCallback, pContext);\n\tif(res) OutTraceE(\"DirectSoundEnumerateA ERROR: res=%x(s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extDirectSoundEnumerateW(LPDSENUMCALLBACKW pDSEnumCallback, LPVOID pContext)\n{\n\tHRESULT res;\n\tOutTraceDW(\"DirectSoundEnumerateW\\n\");\n\tres = (*pDirectSoundEnumerateW)(pDSEnumCallback, pContext);\n\tif(res) OutTraceE(\"DirectSoundEnumerateW ERROR: res=%x(s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extGetSpeakerConfig(void *lpds, LPDWORD pdwSpeakerConfig)\n{\n\tHRESULT res;\n\tOutTraceDW(\"DirectSound::GetSpeakerConfig\\n\");\n\tres = (*pGetSpeakerConfig)(lpds, pdwSpeakerConfig);\n\tif(res) OutTraceE(\"GetSpeakerConfig ERROR: res=%x(s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extSetSpeakerConfig(void *lpds, DWORD pdwSpeakerConfig)\n{\n\tHRESULT res;\n\tOutTraceDW(\"DirectSound::SetSpeakerConfig\\n\");\n\tres = (*pSetSpeakerConfig)(lpds, pdwSpeakerConfig);\n\tif(res) OutTraceE(\"SetSpeakerConfig ERROR: res=%x(s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extDSInitialize(void *lpds, LPCGUID pcGuidDevice)\n{\n\tHRESULT res;\n\tOutTraceDW(\"DirectSound::Initialize\\n\");\n\tres = (*pDSInitialize)(lpds, pcGuidDevice);\n\tif(res) OutTraceE(\"Initialize ERROR: res=%x(s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n"
  },
  {
    "path": "dll/dwhide.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhelper.h\"\n\n//#define FOUR_WINDOWS_STRIPED_HIDER\n\n/****************************************************************************\n *\tFunction Name\t: gShowHideTaskBar()\t\t\t\t\t\t\t\t\t*\n *\tParameters\t\t: BOOL bHide (flag to toggle Show/Hide of Taskbar)\t\t*\n *\tReturn type\t\t: void\t\t\t\t\t\t\t\t\t\t\t\t\t*\n *\tPurpose\t\t\t: Function is used to Show/Hide the TaskBar\t\t\t\t*\n *\tAuthor\t\t\t: Ashutosh R. Bhatikar (ARB)\t\t\t\t\t\t\t*\n *\tDate written\t: 20th December 2000\t\t\t\t\t\t\t\t\t*\n *\tModification History :\t\t\t\t\t\t\t\t\t\t\t\t\t*\n *\tDate of modification\t\t\t\t\tReason\t\t\t\t\t\t\t*\n *  25th December 2000\t\t\t\tAdded methods to Show/Hide menu\t\t\t*\n ****************************************************************************/\n\nvoid gShowHideTaskBar(BOOL bHide /*=FALSE*/)\n{\n\tRECT rectWorkArea;\n\tRECT rectTaskBar;\n\tstatic HWND pWnd = NULL;\n\tstatic HWND pStart = NULL;\n\n\tif(!pWnd) {\n\t\tpWnd = FindWindow(\"Shell_TrayWnd\", \"\");\n\t\t// WinXP find\n\t\tpStart = FindWindowEx(pWnd, NULL, \"Button\", NULL);\n\t\t// if unsuccessful, do a Win7/8 find\n\t\tif(!pStart) pStart = FindWindowEx((*pGetDesktopWindow)(), NULL, \"Button\", \"Start\");\n\t}\n\n\t(*pSystemParametersInfoA)(SPI_GETWORKAREA,0, (LPVOID)&rectWorkArea, 0);\n\t(*pGetWindowRect)(pWnd, &rectTaskBar);\n\tif( bHide ){\n\t\t// Code to Hide the System Task Bar\n\t\trectWorkArea.bottom += (rectTaskBar.bottom - rectTaskBar.top);\n\t\t(*pSystemParametersInfoA)(SPI_SETWORKAREA, 0, (LPVOID)&rectWorkArea, 0);\n\t\t(*pShowWindow)(pWnd, SW_HIDE);\n\t\t(*pShowWindow)(pStart, SW_HIDE);\n\t}\n\telse{\n\t\t// Code to Show the System Task Bar\n\t\trectWorkArea.bottom -= (rectTaskBar.bottom - rectTaskBar.top);\n\t\t(*pSystemParametersInfoA)(SPI_SETWORKAREA, 0, (LPVOID)&rectWorkArea, 0);\n\t\t(*pShowWindow)(pWnd, SW_SHOW);\n\t\t(*pShowWindow)(pStart, SW_SHOW);\n\t}\n}\n\nstatic bool quit = false;\nstatic HWND wHider=0;\nstatic RECT wDesktop;\n\n#ifdef FOUR_WINDOWS_STRIPED_HIDER\nLRESULT CALLBACK dw_Hider_Message_Handler(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam)\n{\n    switch(umsg)\n    {\n        case WM_DESTROY:\n            PostQuitMessage(0);\n        break;\n        case WM_CLOSE:\n            quit = true;\n        break;\n    }\n\n\treturn (*pDefWindowProcA)(hwnd, umsg, wparam, lparam);\n}\n#else\nLRESULT CALLBACK dw_Hider_Message_Handler(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam)\n{\n\n\textern void ExplainMsg(char *, HWND, UINT, WPARAM, LPARAM);\n\t// ExplainMsg(\"HIDER\", hwnd, umsg, wparam, lparam);\n\n\t//LRESULT ret;\n    switch(umsg)\n    {\n        case WM_DESTROY:\n            PostQuitMessage(0);\n        break;\n        case WM_CLOSE:\n            quit = true;\n        break;\n    }\n\n\t// OutTrace(\"HIDER: msg=%x(%s) w/lparam= %x-%x\\n\", umsg, ExplainWinMessage(umsg), wparam, lparam);\n\n\tif(hwnd == wHider){\n\t\tWINDOWPOS *wp;\n\t\tswitch(umsg){\n\t\t\tcase WM_NOTIFY:\n\t\t\tcase WM_SETFOCUS:\n\t\t\tcase WM_LBUTTONDOWN:\n\t\t\t//case WM_LBUTTONUP:\n\t\t\t//case WM_LBUTTONDBLCLK:\n\t\t\tcase WM_RBUTTONDOWN:\n\t\t\t//case WM_RBUTTONUP:\n\t\t\t//case WM_RBUTTONDBLCLK:\n\t\t\tcase WM_MBUTTONDOWN:\n\t\t\t//case WM_MBUTTONUP:\n\t\t\t//case WM_MBUTTONDBLCLK:\n\t\t\t\t(*pInvalidateRect)(hwnd, NULL, TRUE);\n\t\t\t\t(*pSetWindowPos)(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOOWNERZORDER|SWP_NOSENDCHANGING);\n\t\t\t\t(*pSetWindowPos)(dxw.GethWnd(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOOWNERZORDER|SWP_NOSENDCHANGING);\n\t\t\t\treturn 0;\n\t\t\t\tbreak;\n\t\t\tcase WM_WINDOWPOSCHANGING:\n\t\t\tcase WM_WINDOWPOSCHANGED:\n\t\t\t\twp = (WINDOWPOS *)lparam;\n\t\t\t\twp->x = wDesktop.left;\n\t\t\t\twp->y = wDesktop.top;\n\t\t\t\twp->cx = wDesktop.right - wDesktop.left;\n\t\t\t\twp->cy = wDesktop.bottom - wDesktop.top;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn (*pDefWindowProcA)(hwnd, umsg, wparam, lparam);\n}\n#endif\n\nstatic HINSTANCE RegisterHiderWindow()\n{\n\tWNDCLASSEX WndClsEx;\n\tHINSTANCE hinst = NULL;\n\tstatic ATOM aClass;\n\n#ifdef DISABLEAERODESKTOP\n\ttypedef HRESULT (WINAPI *DwmEnableComposition_Type)(UINT);\n\tDwmEnableComposition_Type pDwmEnableComposition;\n\tHMODULE hlib;\n\n\t// try to disable AERO desktop interface, if possible ...\n\tpDwmEnableComposition = NULL;\n\thlib=(*pLoadLibraryA)(\"dwmapi.dll\");\n\tif(hlib){\n\t\tpDwmEnableComposition = (DwmEnableComposition_Type)(*pGetProcAddress)(hlib, \"DwmEnableComposition\");\n\t}\n\tif(pDwmEnableComposition) {\n\t\t(*pDwmEnableComposition)(FALSE);\n\t}\n#endif\n\n\thinst=GetModuleHandle(NULL);\n\tif(!hinst)\n\t\tOutTrace(\"GetModuleHandle ERROR err=%d\\n\", GetLastError());\n\telse\n\t\tOutTrace(\"GetModuleHandle hinst=%x\\n\", hinst);\n\n\tWndClsEx.cbSize        = sizeof(WNDCLASSEX);\n\tWndClsEx.style         = 0;\n\tWndClsEx.lpfnWndProc   = dw_Hider_Message_Handler; //DefWindowProc;\n\tWndClsEx.cbClsExtra    = 0;\n\tWndClsEx.cbWndExtra    = 0;\n\tWndClsEx.hIcon         = LoadIcon(NULL, IDI_APPLICATION);\n\t//WndClsEx.hCursor       = LoadCursor(NULL, IDC_CROSS);\n\tWndClsEx.hCursor       = NULL;\n\tWndClsEx.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);\n\t//WndClsEx.hbrBackground = CreateSolidBrush(RGB(200,0,0));\n\tWndClsEx.lpszMenuName  = NULL;\n\tWndClsEx.lpszClassName = \"dxwnd:hider\";\n\tWndClsEx.hInstance     = hinst;\n\tWndClsEx.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);\n\n\t// Register the application\n\taClass=(*pRegisterClassExA)(&WndClsEx);\n\tif(!aClass) OutTraceE(\"RegisterClassEx: ERROR err=%d\\n\", GetLastError());\n\treturn hinst;\n}\n\n#ifdef FOUR_WINDOWS_STRIPED_HIDER\n\nvoid dxwCore::HideDesktop(HWND hwnd)\n{\n\tstatic BOOL DoOnce=TRUE;\n\tstatic ATOM aClass;\n\tstatic HWND wleft=0, wright=0, wtop=0, wbottom=0;\n\tBOOL bleft, bright, btop, bbottom;\n\tRECT wRect, wDesktop;\n\tstatic HINSTANCE hinst=NULL;\n\n\tif(DoOnce){\n\t\thinst=RegisterHiderWindow();\n\t\tDoOnce=FALSE;\n\t}\n\n\tif(!(*pGetWindowRect)(hwnd, &wRect)) {\n\t\tOutTrace(\"GetWindowRect ERROR hwnd=%x err=%d\\n\", hWnd, GetLastError());\n\t\treturn;\n\t}\n\tif(!(*pGetWindowRect)((*pGetDesktopWindow)(), &wDesktop)) {\n\t\tOutTrace(\"GetWindowRect ERROR hwnd=%x err=%d\\n\", NULL, GetLastError());\n\t\treturn;\n\t}\n\n\tif(dxw.dwFlags6 & HIDETASKBAR){\n\t\twDesktop.left = 0;\n\t\twDesktop.top = 0;\n\t\twDesktop.right = (*pGetSystemMetrics)(SM_CXSCREEN);\n\t\twDesktop.bottom = (*pGetSystemMetrics)(SM_CYSCREEN);\n\t\tgShowHideTaskBar(TRUE);\n\t}\n\n\tbleft =\t\t(wDesktop.left != wRect.left);\n\tbright =\t(wDesktop.right != wRect.right);\n\tbtop =\t\t(wDesktop.top != wRect.top);\n\tbbottom =\t(wDesktop.bottom != wRect.bottom);\n\n\tOutTrace(\"Hider: desktop=(%d,%d)-(%d,%d)\\n\", wDesktop.left, wDesktop.top, wDesktop.right, wDesktop.bottom);\n\tOutTrace(\"Hider: window =(%d,%d)-(%d,%d)\\n\", wRect.left, wRect.top, wRect.right, wRect.bottom);\n\n\t// this is tricky: if you create a window with zero style, the manager seems to apply a default\n\t// overlapped window style. The only way I got to be sure that the style is exactly nothing\n\t// at all is to repeat the command by a SetWindowLong(hwnd, GWL_STYLE, 0) that sets again zero\n\t// as the correct window style.\n\n\t// create the windows that are necessary\n\n\tHWND hParent = (*pGetDesktopWindow)();\n\tif(!wleft && bleft) {\n\t\twleft=(*pCreateWindowExA)(0, \"dxwnd:hider\", \"hider\", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL);\n\t\t(*pSetWindowLongA)(wleft, GWL_STYLE, 0);\n\t}\n\tif(!wright && bright) {\n\t\twright=(*pCreateWindowExA)(0, \"dxwnd:hider\", \"hider\", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL);\n\t\t(*pSetWindowLongA)(wright, GWL_STYLE, 0);\n\t}\n\tif(!wtop && btop) {\n\t\twtop=(*pCreateWindowExA)(0, \"dxwnd:hider\", \"hider\", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL);\n\t\t(*pSetWindowLongA)(wtop, GWL_STYLE, 0);\n\t}\n\tif(!wbottom && bbottom) {\n\t\twbottom=(*pCreateWindowExA)(0, \"dxwnd:hider\", \"hider\", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL);\n\t\t(*pSetWindowLongA)(wbottom, GWL_STYLE, 0);\n\t}\n\n\t// destroy the windows no longer useful\n\n\tif(wleft && !bleft) { \n\t\t(*pDestroyWindow)(wleft);\n\t\twleft=0;\n\t}\n\tif(wright && !bright) { \n\t\t(*pDestroyWindow)(wright);\n\t\twright=0;\n\t}\n\tif(wtop && !btop) { \n\t\t(*pDestroyWindow)(wtop);\n\t\twtop=0;\n\t}\n\tif(wbottom && !bbottom) { \n\t\t(*pDestroyWindow)(wbottom);\n\t\twbottom=0;\n\t}\n\n\tif(bleft) {\n\t\t(*pMoveWindow)(wleft, wDesktop.left, wDesktop.top, wRect.left-wDesktop.left, wDesktop.bottom-wDesktop.top, TRUE);\n\t\t(*pSetWindowLongA)(wleft, GWL_EXSTYLE, WS_EX_TOPMOST);\n\t\t(*pShowWindow)(wleft, SW_SHOW);\n\t}\n\tif(bright) {\n\t\t(*pMoveWindow)(wright, wRect.right, wDesktop.top, wDesktop.right-wRect.right, wDesktop.bottom-wDesktop.top, TRUE);\n\t\t(*pSetWindowLongA)(wright, GWL_EXSTYLE, WS_EX_TOPMOST);\n\t\t(*pShowWindow)(wright, SW_SHOW);\n\t}\n\tif(btop) {\n\t\t(*pMoveWindow)(wtop, wDesktop.left, wDesktop.top, wDesktop.right-wDesktop.left, wRect.top-wDesktop.top, TRUE);\n\t\t(*pSetWindowLongA)(wtop, GWL_EXSTYLE, WS_EX_TOPMOST);\n\t\t(*pShowWindow)(wtop, SW_SHOW);\n\t}\n\tif(bbottom) {\n\t\t(*pMoveWindow)(wbottom, wDesktop.left, wRect.bottom, wDesktop.right-wDesktop.left, wDesktop.bottom-wRect.bottom, TRUE);\n\t\t(*pSetWindowLongA)(wbottom, GWL_EXSTYLE, WS_EX_TOPMOST);\n\t\t(*pShowWindow)(wbottom, SW_SHOW);\n\t}\n}\n\n#else\n\nvoid dxwCore::HideDesktop(HWND hwnd)\n{\n\tstatic BOOL DoOnce=TRUE;\n\tstatic ATOM aClass;\n\tRECT wRect;\n\tstatic HINSTANCE hinst=NULL;\n\n\tif(DoOnce){\n\t\thinst=RegisterHiderWindow();\n\t\tDoOnce=FALSE;\n\t}\n\n\tif(!(*pGetWindowRect)(hwnd, &wRect)) {\n\t\tOutTrace(\"GetWindowRect ERROR hwnd=%x err=%d\\n\", hwnd, GetLastError());\n\t\treturn;\n\t}\n\n\tdxw.GetMonitorWorkarea(&wDesktop, (Coordinates != DXW_DESKTOP_FULL));\n\tif(dxw.dwFlags6 & HIDETASKBAR)gShowHideTaskBar(TRUE);\n\n\t//OutTrace(\"Hider: desktop=(%d,%d)-(%d,%d)\\n\", wDesktop.left, wDesktop.top, wDesktop.right, wDesktop.bottom);\n\t//OutTrace(\"Hider: window =(%d,%d)-(%d,%d)\\n\", wRect.left, wRect.top, wRect.right, wRect.bottom);\n\n\t// this is tricky: if you create a window with zero style, the manager seems to apply a default\n\t// overlapped window style. The only way I got to be sure that the style is exactly nothing\n\t// at all is to repeat the command by a SetWindowLong(hwnd, GWL_STYLE, 0) that sets again zero\n\t// as the correct window style.\n\n\tHWND hParent = (*pGetDesktopWindow)();\n\tif(!wHider) {\n\t\twHider=(*pCreateWindowExA)(0, \"dxwnd:hider\", \"hider\", 0, 0, 0, 0, 0, hParent, NULL, hinst, NULL);\n\t\tif(!wHider) {\n\t\t\tOutTraceE(\"HideDesktop: CreateWindowEx ERROR hwnd=%x parent=%x err=%d\\n\", hwnd, hParent, GetLastError());\n\t\t\treturn;\n\t\t}\n\t\telse{\n\t\t\tOutTraceDW(\"HideDesktop: Created Window wHider=%x\\n\", wHider);\n\t\t}\n\t\t(*pSetWindowLongA)(wHider, GWL_STYLE, 0);\n\t}\n\n\t(*pMoveWindow)(wHider, wDesktop.left, wDesktop.top, wDesktop.right-wDesktop.left, wDesktop.bottom-wDesktop.top, TRUE);\n\t(*pSetWindowPos)(wHider, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOOWNERZORDER|SWP_NOSENDCHANGING);\n\t//(*pSetWindowPos)(wHider, hwnd, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);\n\t(*pShowWindow)(wHider, SW_SHOW);\n\t//(*pSetWindowPos)(wHider, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);\n\t// make the game window visible again ....\n\t(*pSetWindowPos)(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);\n\t(*pUpdateWindow)(hwnd);\n\t//(*pShowWindow)(hwnd, SW_SHOW);\n\n}\n\n#endif"
  },
  {
    "path": "dll/dxdds.h",
    "content": "#ifndef DDS_HEADER\nstruct DDS_PIXELFORMAT {\n  DWORD dwSize;\n  DWORD dwFlags;\n  DWORD dwFourCC;\n  DWORD dwRGBBitCount;\n  DWORD dwRBitMask;\n  DWORD dwGBitMask;\n  DWORD dwBBitMask;\n  DWORD dwABitMask;\n};\ntypedef struct {\n  DWORD           dwSize;\n  DWORD           dwFlags;\n  DWORD           dwHeight;\n  DWORD           dwWidth;\n  DWORD           dwPitchOrLinearSize;\n  DWORD           dwDepth;\n  DWORD           dwMipMapCount;\n  DWORD           dwReserved1[11];\n  DDS_PIXELFORMAT ddspf;\n  DWORD           dwCaps;\n  DWORD           dwCaps2;\n  DWORD           dwCaps3;\n  DWORD           dwCaps4;\n  DWORD           dwReserved2;\n} DDS_HEADER;\n#endif "
  },
  {
    "path": "dll/dxdiaghook.cpp",
    "content": "#include <windows.h>\n#include <dxdiag.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n\n// COM generic types\ntypedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *);\n\n// DxDiag IDxDiagProvider\ntypedef HRESULT (WINAPI *Initialize_Type)                   (void *, DXDIAG_INIT_PARAMS *);\ntypedef HRESULT (WINAPI *GetRootContainer_Type)             (void *, IDxDiagContainer **);\n// DxDiag IDxDiagContainer\ntypedef HRESULT (WINAPI *GetNumberOfChildContainers_Type)   (void *, DWORD *);\ntypedef HRESULT (WINAPI *EnumChildContainerNames_Type)      (void *, DWORD, LPWSTR, DWORD);\ntypedef HRESULT (WINAPI *GetChildContainer_Type)            (void *, LPCWSTR, IDxDiagContainer **);  \ntypedef HRESULT (WINAPI *GetNumberOfProps_Type)             (void *, DWORD *);\ntypedef HRESULT (WINAPI *EnumPropNames_Type)                (void *, DWORD, LPWSTR, DWORD);\ntypedef HRESULT (WINAPI *GetProp_Type)                      (void *, LPCWSTR, VARIANT *);\n\ntypedef HRESULT (WINAPI *Initialize_Type)(void *, DXDIAG_INIT_PARAMS *);\ntypedef HRESULT (WINAPI *GetRootContainer_Type)(void *, IDxDiagContainer **);\n\nHRESULT WINAPI extInitializeDD(void *, DXDIAG_INIT_PARAMS *);\nHRESULT WINAPI extGetRootContainer(void *, IDxDiagContainer **);\nHRESULT WINAPI extGetNumberOfChildContainers(void *, DWORD *);\nHRESULT WINAPI extQueryInterfaceDD(void *, REFIID, LPVOID *);\nHRESULT WINAPI extGetProp(void *, LPCWSTR, VARIANT *);\n\nInitialize_Type pInitializeDD;\nGetRootContainer_Type pGetRootContainer;\nGetNumberOfChildContainers_Type pGetNumberOfChildContainers;\nEnumChildContainerNames_Type pEnumChildContainerNames;\nGetChildContainer_Type pGetChildContainer;  \nGetNumberOfProps_Type pGetNumberOfProps;\nEnumPropNames_Type pEnumPropNames;\nGetProp_Type pGetProp;\nQueryInterface_Type pQueryInterfaceDD;\n\nHRESULT HookDxDiag(REFIID riid, LPVOID FAR* ppv)\n{\n\tHMODULE dxdlib;\n\n\tOutTraceDW(\"CoCreateInstance: CLSID_DxDiagProvider object\\n\");\n\tdxdlib=(*pLoadLibraryA)(\"dxdiagn.dll\");\n\tOutTraceDW(\"CoCreateInstance: dxdiagn lib handle=%x\\n\", dxdlib);\n\textern void HookModule(HMODULE, int);\n\tHookModule(dxdlib, 0);\n\n\tswitch (*(DWORD *)&riid){\n\tcase 0x9C6B4CB0:\n\t\tOutTraceDW(\"CoCreateInstance: IID_DxDiagProvider RIID\\n\");\n\t\t// IID_DxDiagProvider::QueryInterface\n\t\tSetHook((void *)(**(DWORD **)ppv), extQueryInterfaceDD, (void **)&pQueryInterfaceDD, \"QueryInterface(DxDiag)\");\n\t\t// IID_DxDiagProvider::Initialize\n\t\tSetHook((void *)(**(DWORD **)ppv + 12), extInitializeDD, (void **)&pInitializeDD, \"Initialize(DxDiag)\");\n\t\t// IID_DxDiagProvider::Initialize\n\t\tSetHook((void *)(**(DWORD **)ppv + 16), extGetRootContainer, (void **)&pGetRootContainer, \"GetRootContainer(DxDiag)\");\n\t\tbreak;\n\tcase 0x7D0F462F:\n\t\tOutTraceDW(\"CoCreateInstance: IID_IDxDiagContainer RIID\\n\");\n\t\tbreak;\n\t}\n\n\treturn DD_OK;\n}\n\n\nHRESULT WINAPI extInitializeDD(void *th, DXDIAG_INIT_PARAMS *pParams)\n{\n\tHRESULT res;\n\tOutTraceDW(\"DxDiag::Initialize Params=%x\\n\", pParams);\n\tres=(*pInitializeDD)(th, pParams);\n\tOutTraceDW(\"DxDiag::Initialize res=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extGetRootContainer(void *th, IDxDiagContainer **ppInstance)\n{\n\tHRESULT res;\n\tOutTraceDW(\"DxDiag::GetRootContainer pInstance=%x\\n\", *ppInstance);\n\tres=(*pGetRootContainer)(th, ppInstance);\n\t// IID_IDxDiagContainer::GetNumberOfChildContainers\n\tSetHook((void *)(**(DWORD **)ppInstance + 12), extGetNumberOfChildContainers, (void **)&pGetNumberOfChildContainers, \"GetNumberOfChildContainers(DxDiag)\");\n\t// IID_IDxDiagContainer::GetProp\n\tSetHook((void *)(**(DWORD **)ppInstance + 32), extGetProp, (void **)&pGetProp, \"GetProp(DxDiag)\");\n\tOutTraceDW(\"DxDiag::GetRootContainer res=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extGetNumberOfChildContainers(void *th, DWORD *pdwCount)\n{\n\tHRESULT res;\n\tOutTraceDW(\"DxDiag::GetNumberOfChildContainers\\n\");\n\tres=(*pGetNumberOfChildContainers)(th, pdwCount);\n\tOutTraceDW(\"DxDiag::GetNumberOfChildContainers res=%x Count=%d\\n\", res, *pdwCount);\n\treturn res;\n}\n\nHRESULT WINAPI extQueryInterfaceDD(void *th, REFIID riid, LPVOID *ppvObj)\n{\n\tHRESULT res;\n\tOutTraceDW(\"DxDiag::QueryInterface ref=%x\\n\");\n\tres=(*pQueryInterfaceDD)(th, riid, ppvObj);\n\tOutTraceDW(\"DxDiag::QueryInterface res=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extGetProp(void *th, LPCWSTR pwszPropName, VARIANT *pvarProp)\n{\n\tHRESULT res;\n\tOutTraceDW(\"DxDiag::GetProp PropName=%ls\\n\", pwszPropName);\n\tres=(*pGetProp)(th, pwszPropName, pvarProp);\n\tif(res)\n\t\tOutTraceE(\"DxDiag::GetProp ERROR res=%x\\n\", res);\n\n\tif (!wcsncmp(L\"dwDirectXVersionMajor\", pwszPropName, sizeof(L\"dwDirectXVersionMajor\"))){\n\t\tOutTraceDW(\"DxDiag::GetProp DirectXVersionMajor=%d\\n\", *pvarProp);\n\t\t//*(DWORD *)pvarProp=10;\n\t\t//OutTraceDW(\"DxDiag::GetProp fixed DirectXVersionMajor=%d\\n\", *pvarProp);\n\t}\n\tif (!wcsncmp(L\"dwDirectXVersionMinor\", pwszPropName, sizeof(L\"dwDirectXVersionMinor\"))){\n\t\tOutTraceDW(\"DxDiag::GetProp DirectXVersionMinor=%d\\n\", *pvarProp);\n\t\t//*(DWORD *)pvarProp=10;\n\t\t//OutTraceDW(\"DxDiag::GetProp fixed dwDirectXVersionMinor=%d\\n\", *pvarProp);\n\t}\n\tif (!wcsncmp(L\"szDirectXVersionLetter\", pwszPropName, sizeof(L\"szDirectXVersionLetter\"))){\n\t\tOutTraceDW(\"DxDiag::GetProp DirectXVersionLetter=%d\\n\", *pvarProp);\n\t\t//*(DWORD *)pvarProp=9;\n\t\t//OutTraceDW(\"DxDiag::GetProp fixed szDirectXVersionLetter=%d\\n\", *pvarProp);\n\t}\n\treturn res;\n}\n\n/*\n    STDMETHOD(GetNumberOfChildContainers)   (THIS_ DWORD *pdwCount) PURE;\n    STDMETHOD(EnumChildContainerNames)      (THIS_ DWORD dwIndex, LPWSTR pwszContainer, DWORD cchContainer) PURE;\n    STDMETHOD(GetChildContainer)            (THIS_ LPCWSTR pwszContainer, IDxDiagContainer **ppInstance) PURE;  \n    STDMETHOD(GetNumberOfProps)             (THIS_ DWORD *pdwCount) PURE;\n    STDMETHOD(EnumPropNames)                (THIS_ DWORD dwIndex, LPWSTR pwszPropName, DWORD cchPropName) PURE;\n    STDMETHOD(GetProp)                      (THIS_ LPCWSTR pwszPropName, VARIANT *pvarProp) PURE;\n*/"
  },
  {
    "path": "dll/dxemublt.cpp",
    "content": "#include <windows.h>\n#include <ddraw.h>\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"hddraw.h\"\n\n//#define USEOPENMP\n\ntypedef HRESULT (WINAPI *Lock_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE);\ntypedef HRESULT (WINAPI *Unlock4_Type)(LPDIRECTDRAWSURFACE, LPRECT);\ntypedef HRESULT (WINAPI *Unlock1_Type)(LPDIRECTDRAWSURFACE, LPVOID);\n\nextern Lock_Type pLockMethod(int);\nextern Unlock4_Type pUnlockMethod(int);\n\nextern DWORD PaletteEntries[256];\nextern DWORD *Palette16BPP;\nextern char *ExplainDDError(DWORD);\n\n// just in case ....\n#define SwitchdwSize(s) s.dwSize=(s.dwSize==sizeof(DDSURFACEDESC))?sizeof(DDSURFACEDESC2):sizeof(DDSURFACEDESC)\n\n#define MARKBLITCOLOR32 0x00FFFF00\n#define MARKBLITCOLOR16 0x0FF0\nEmuBlt_Type pEmuBlt;\nPrimaryBlt_Type pPrimaryBlt;\n\nextern Blt_Type pBlt;\n\n//--------------------------------------------------------------------------------------------//\n// Emulated blitting procedures: fills a 32BPP surface from the content of 8BPP or 16BPP ones.\n//--------------------------------------------------------------------------------------------//\n\nstatic void MarkRect32(DWORD *dest, int w, int h, int destpitch)\n{\n\tint x, y;\n\n\tfor(x = 0; x < w; x ++) *(dest ++) = MARKBLITCOLOR32;\n\tif (h<3) return;\n\tdest += destpitch;\n\tfor(y = 0; y < h-2; y ++){\n\t\t*dest = MARKBLITCOLOR32;\n\t\tdest += w-1;\n\t\t*dest = MARKBLITCOLOR32;\n\t\tdest += destpitch + 1;\n\t}\n\tfor(x = 0; x < w; x ++) *(dest ++) = MARKBLITCOLOR32;\t\n\treturn;\n}\n\nstatic void MarkRect16(SHORT *dest, int w, int h, int destpitch)\n{\n\tint x, y;\n\n\tfor(x = 0; x < w; x ++) *(dest ++) = MARKBLITCOLOR16;\t\n\tif (h<3) return;\n\tdest += destpitch;\n\tfor(y = 0; y < h-2; y ++){\n\t\t*dest = MARKBLITCOLOR16;\n\t\tdest += w-1;\n\t\t*dest = MARKBLITCOLOR16;\n\t\tdest += destpitch + 1;\n\t}\n\tfor(x = 0; x < w; x ++) *(dest ++) = MARKBLITCOLOR16;\t\n\treturn;\n}\n\nstatic DWORD Melt32(DWORD c1, DWORD c2)\n{\n\tDWORD ret;\n\tret = \n\t\t((((c1 & 0x0000FF) + (c2 & 0x0000FF)) >> 1) & 0x0000FF) |\n\t\t((((c1 & 0x00FF00) + (c2 & 0x00FF00)) >> 1) & 0x00FF00) |\n\t\t((((c1 & 0xFF0000) + (c2 & 0xFF0000)) >> 1) & 0xFF0000);\n\treturn ret;\n}\n\nstatic DWORD Melt16_555(DWORD c1, DWORD c2)\n{\n\tDWORD ret;\n\tret = \n\t\t((((c1 & 0x00001F) + (c2 & 0x00001F)) >> 1) & 0x00001F) |\n\t\t((((c1 & 0x0003E0) + (c2 & 0x0003E0)) >> 1) & 0x0003E0) |\n\t\t((((c1 & 0x007C00) + (c2 & 0x007C00)) >> 1) & 0x007C00);\n\treturn ret;\n}\n\nstatic DWORD Melt16_565(DWORD c1, DWORD c2)\n{\n\tDWORD ret;\n\tret = \n\t\t((((c1 & 0x00001F) + (c2 & 0x00001F)) >> 1) & 0x00001F) |\n\t\t((((c1 & 0x0007E0) + (c2 & 0x0007E0)) >> 1) & 0x0007E0) |\n\t\t((((c1 & 0x00F800) + (c2 & 0x00F800)) >> 1) & 0x00F800);\n\treturn ret;\n}\n\nvoid SetPalette16BPP()\n{\n// OutTraceDW(\"DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\\n\",h,w,src16,dest,srcpitch,destpitch);\n\tunsigned int pi;\n\tPalette16BPP = (DWORD *)malloc(0x10000 * sizeof(DWORD));\n\tif (dxw.dwFlags3 & BLACKWHITE){\n\t\t// actually, it should be like this: R/G/B = (red * 0.30) + (green * 0.59) + (blue * 0.11) \n\t\t// (http://www.codeproject.com/Articles/66253/Converting-Colors-to-Gray-Shades)\n\t\tDWORD grey;\n\t\tif (dxw.dwFlags1 & USERGB565){\n\t\t\tfor (pi=0; pi<0x10000; pi++) {\n\t\t\t\t//grey = ((((pi & 0x1F)<<3) + ((pi & 0x7E0)>>3) + ((pi & 0xF800)>>8)) / 3) & 0xFF;\n\t\t\t\tgrey = (((((pi & 0x1F)<<3) * 30) + (((pi & 0x7E0)>>3) * 59) + (((pi & 0xF800)>>8) * 11)) / 100) & 0xFF;\n\t\t\t\tPalette16BPP[pi] = (grey) + (grey<<8) + (grey<<16);\t\t\t\t\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor (pi=0; pi<0x10000; pi++) {\n\t\t\t\t//grey = ((((pi & 0x1F)<<3) + ((pi & 0x3E0)>>2) + ((pi & 0x7C00)>>7)) / 3) & 0xFF;\n\t\t\t\tgrey = (((((pi & 0x1F)<<3) * 30) + (((pi & 0x3E0)>>2) * 59) + (((pi & 0x7C00)>>7) * 11)) / 100) & 0xFF;\n\t\t\t\tPalette16BPP[pi] = grey + (grey<<8) + (grey<<16);\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\tif (dxw.dwFlags1 & USERGB565){\n\t\t\tfor (pi=0; pi<0x10000; pi++) {\n\t\t\t\tPalette16BPP[pi]=(pi & 0x1F)<<3 | (pi & 0x7E0)<<5 | (pi & 0xF800)<<8; // RGB565\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor (pi=0; pi<0x10000; pi++) {\n\t\t\t\tPalette16BPP[pi]=(pi & 0x1F)<<3 | (pi & 0x3E0)<<6 | (pi & 0x7C00)<<9; // RGB555\n\t\t\t}\n\t\t}\n\t}\n}\n\nstatic HRESULT WINAPI EmuBlt_8_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface)\n{\n\tHRESULT res;\n\tBYTE *src8;\n\tDWORD *dest, *dest0;\n\tDDSURFACEDESC2 ddsd_src, ddsd_dst;\n\tlong srcpitch, destpitch;\n\tint x, y, w, h;\n\n\tw = lpdestrect->right - lpdestrect->left; \n\th = lpdestrect->bottom - lpdestrect->top; \n\n\tmemset(&ddsd_dst,0,sizeof(DDSURFACEDESC2));\n\tddsd_dst.dwSize = Set_dwSize_From_Surface();\n\tddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"EmuBlt8_32: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tmemset(&ddsd_src,0,sizeof(DDSURFACEDESC2));\n\tddsd_src.dwSize = Set_dwSize_From_Surface();\n\tddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif (lpsurface) { // already locked, just get info ....\n\t\tif(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) {\n\t\t\tOutTraceE(\"EmuBlt8_32: GetSurfaceDesc ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\t\t\treturn 0;\n\t\t}\n\t}\n\telse {\n\t\tif(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) {\n\t\t\tOutTraceE(\"EmuBlt8_32: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst, 0);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, 0);\n\t\t\treturn 0;\n\t\t}\n\t\tlpsurface=ddsd_src.lpSurface;\n\t}\n\n\tddsd_dst.lPitch >>= 2;\n\tdest = (DWORD *)ddsd_dst.lpSurface;\n\tdest += lpdestrect->top*ddsd_dst.lPitch;\n\tdest += lpdestrect->left;\n\tdestpitch = ddsd_dst.lPitch - w;\n\tdest0 = dest;\n\n\tsrc8 = (BYTE *)lpsurface;\n\tsrc8 += lpsrcrect->top*ddsd_src.lPitch;\n\tsrc8 += lpsrcrect->left;\n\tsrcpitch = ddsd_src.lPitch - w;\n\n\t// OutTraceDW(\"DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\\n\",h,w,src8,dest,srcpitch,destpitch);\n\tfor(y = 0; y < h; y ++){\n\t\tfor(x = 0; x < w; x ++){\n\t\t\t*(dest ++) = PaletteEntries[*(src8 ++)];\n\t\t}\n\t\tdest += destpitch;\n\t\tsrc8 += srcpitch;\n\t}\n\n\tif(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch);\n\n\tres=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\tif (res) OutTraceE(\"EmuBlt8_32: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddsdst, res, ExplainDDError(res), __LINE__);\n\tres=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\tif (res) OutTraceE(\"EmuBlt8_32: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddssrc, res, ExplainDDError(res), __LINE__);\n\treturn res;\n}\n\nstatic HRESULT WINAPI BilinearBlt_8_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface)\n{\n\tHRESULT res;\n\tBYTE *src8, *src0;\n\tDWORD *dest, *dest0;\n\tDDSURFACEDESC2 ddsd_src, ddsd_dst;\n\tlong srcpitch, destpitch;\n\tint w, h;\n\n\tw = lpdestrect->right - lpdestrect->left; \n\th = lpdestrect->bottom - lpdestrect->top; \n\n\tlpdestrect->left <<= 1;\n\tlpdestrect->top <<= 1;\n\tlpdestrect->right <<= 1;\n\tlpdestrect->bottom <<= 1;\n\n\tmemset(&ddsd_dst,0,sizeof(DDSURFACEDESC2));\n\tddsd_dst.dwSize = Set_dwSize_From_Surface();\n\tddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"BilBlt8_32: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tmemset(&ddsd_src,0,sizeof(DDSURFACEDESC2));\n\tddsd_src.dwSize = Set_dwSize_From_Surface();\n\tddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif (lpsurface) { // already locked, just get info ....\n\t\tif(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) {\n\t\t\tOutTraceE(\"BilBlt8_32: GetSurfaceDesc ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\t\t\treturn 0;\n\t\t}\n\t}\n\telse {\n\t\tif(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) {\n\t\t\tOutTraceE(\"BilBlt8_32: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst,0);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, 0);\n\t\t\treturn 0;\n\t\t}\n\t\tlpsurface=ddsd_src.lpSurface;\n\t}\n\n\tddsd_dst.lPitch >>= 2;\n\tdest = (DWORD *)ddsd_dst.lpSurface;\n\tdest += lpdestrect->top*ddsd_dst.lPitch;\n\tdest += lpdestrect->left;\n\tdestpitch = ddsd_dst.lPitch - (2 * w);\n\tdest0 = dest;\n\n\tsrc8 = (BYTE *)lpsurface;\n\tsrc8 += (lpsrcrect->top >> 1)*ddsd_src.lPitch;\n\tsrc8 += (lpsrcrect->left >> 1);\n\tsrcpitch = ddsd_src.lPitch - w;\n\tsrc0 = src8;\n\n\t// OutTraceDW(\"DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\\n\",h,w,src8,dest,srcpitch,destpitch);\n#ifdef USEOPENMP\n#pragma omp parallel for schedule(static)\n#endif\n\tfor(int y = 0; y < h; y ++){ \n\t\tregister DWORD Q1, Q2, Q3, Q4, Q5;\n\t\tsrc8 = src0 + (y * ddsd_src.lPitch);\n\t\tdest = dest0 + ((y * ddsd_dst.lPitch) << 1);\n\t\tQ5 = Melt32(PaletteEntries[*(src8)], PaletteEntries[*(src8+ddsd_src.lPitch)]);\n        for(int x = 0; x < w; x ++){\n\t\t\tQ1 = PaletteEntries[*(src8)];\n\t\t\tQ2 = Melt32(Q1, PaletteEntries[*(src8+1)]);\n\t\t\tQ3 = Q5;\n\t\t\tif(y == h-1){\n\t\t\t\tQ3 = Q1;\n\t\t\t\tQ4 = Q2;\n\t\t\t}\n\t\t\telse{\n\t\t\t\tQ5 = Melt32(PaletteEntries[*(src8+1)], PaletteEntries[*(src8+ddsd_src.lPitch+1)]); // to be used in next for cycle\n\t\t\t\tQ4 = Melt32(Q3, Q5);\n\t\t\t}\n\n\t\t\t*(dest) = Q1;\n\t\t\t*(dest+1) = Q2;\n\t\t\t*(dest+ddsd_dst.lPitch) = Q3;\n\t\t\t*(dest+ddsd_dst.lPitch+1) = Q4;\n\t\t\tsrc8++;\n\t\t\tdest+=2;\n        }\n\t}\n\n\tif(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, 2*w, 2*h, destpitch);\n\n\tres=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\tif (res) OutTraceE(\"BilBlt8_32: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddsdst, res, ExplainDDError(res), __LINE__);\n\tres=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\tif (res) OutTraceE(\"BilBlt8_32: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddssrc, res, ExplainDDError(res), __LINE__);\n\treturn res;\n}\n\nstatic HRESULT WINAPI EmuBlt_16_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface)\n{\n\tHRESULT res;\n\tWORD *src16;\n\tDWORD *dest, *dest0;\n\tDDSURFACEDESC2 ddsd_src, ddsd_dst;\n\tlong srcpitch, destpitch;\n\tDWORD x, y, w, h;\n\n\tw = lpdestrect->right - lpdestrect->left; \n\th = lpdestrect->bottom - lpdestrect->top; \n\n\tmemset(&ddsd_dst,0,sizeof(DDSURFACEDESC2));\n\tddsd_dst.dwSize = Set_dwSize_From_Surface();\n\tddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; // useless ...?\n\tif(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"EmuBlt16_32: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tmemset(&ddsd_src,0,sizeof(DDSURFACEDESC2));\n\tddsd_src.dwSize = Set_dwSize_From_Surface();\n\tddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif (lpsurface) { // already locked, just get info ....\n\t\tif(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) {\n\t\t\tOutTraceE(\"EmuBlt16_32: GetSurfaceDesc ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\t\t\treturn 0;\n\t\t}\n\t}\n\telse {\n\t\tif(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) {\n\t\t\tOutTraceE(\"EmuBlt16_32: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst,0);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, 0);\n\t\t\treturn res;\n\t\t}\n\t\tlpsurface=ddsd_src.lpSurface;\n\t}\n\n\tddsd_dst.lPitch >>= 2;\n\tdest = (DWORD *)ddsd_dst.lpSurface;\n\tdest += lpdestrect->top*ddsd_dst.lPitch;\n\tdest += lpdestrect->left;\n\tdestpitch = ddsd_dst.lPitch - w;\n\tdest0 = dest;\n\n\tddsd_src.lPitch >>= 1;\n\tsrc16 = (WORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface);\n\tsrc16 += lpsrcrect->top*ddsd_src.lPitch;\n\tsrc16 += lpsrcrect->left;\n\tsrcpitch = ddsd_src.lPitch - w;\n\n\tif (!Palette16BPP) SetPalette16BPP();\n\n\tfor(y = 0; y < h; y ++){\n\t\tfor(x = 0; x < w; x ++){\n\t\t\t//if (!(*src16 & 0x8000)) // try implement alpha bit\n\t\t\t*(dest ++) = Palette16BPP[*(src16 ++)]; \n\t\t}\n\t\tdest += destpitch;\n\t\tsrc16 += srcpitch;\n\t}\n\n\tif(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch);\n\n\tres=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\tif (res) OutTraceE(\"EmuBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddsdst, res, ExplainDDError(res), __LINE__);\n\tres=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\tif (res) OutTraceE(\"EmuBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddssrc, res, ExplainDDError(res), __LINE__);\n\treturn res;\n}\n\nstatic HRESULT WINAPI Deinterlace_16_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface)\n{\n\tHRESULT res;\n\tWORD *src16;\n\tDWORD *dest, *dest0;\n\tDDSURFACEDESC2 ddsd_src, ddsd_dst;\n\tlong srcpitch, destpitch;\n\tDWORD x, y, w, h;\n\n\tw = lpdestrect->right - lpdestrect->left; \n\th = lpdestrect->bottom - lpdestrect->top; \n\n\tmemset(&ddsd_dst,0,sizeof(DDSURFACEDESC2));\n\tddsd_dst.dwSize = Set_dwSize_From_Surface();\n\tddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"EmuBlt16_32: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tmemset(&ddsd_src,0,sizeof(DDSURFACEDESC2));\n\tddsd_src.dwSize = Set_dwSize_From_Surface();\n\tddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif (lpsurface) { // already locked, just get info ....\n\t\tif(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) {\n\t\t\tOutTraceE(\"EmuBlt16_32: GetSurfaceDesc ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\t\t\treturn 0;\n\t\t}\n\t}\n\telse {\n\t\tif(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) {\n\t\t\tOutTraceE(\"EmuBlt16_32: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst,0);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, 0);\n\t\t\treturn res;\n\t\t}\n\t\tlpsurface=ddsd_src.lpSurface;\n\t}\n\n\tddsd_dst.lPitch >>= 2;\n\tdest = (DWORD *)ddsd_dst.lpSurface;\n\tdest += lpdestrect->top*ddsd_dst.lPitch;\n\tdest += lpdestrect->left;\n\tdestpitch = ddsd_dst.lPitch - w;\n\tdest0 = dest;\n\n\tddsd_src.lPitch >>= 1;\n\tsrc16 = (WORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface);\n\tsrc16 += lpsrcrect->top*ddsd_src.lPitch;\n\tsrc16 += lpsrcrect->left;\n\tsrcpitch = ddsd_src.lPitch - w;\n\n\tif (!Palette16BPP) SetPalette16BPP();\n\n\tBOOL allblack = TRUE;\n\tWORD *src016 = src16;\n\ty = ((h >> 2) << 1) + 1;\n\tfor(x = 0; x < w; x ++)\n\t\tif(Palette16BPP[*((src16 ++) + (y * ddsd_src.lPitch))]) allblack = FALSE; \n\tdest = dest0;\n\tsrc16 = src016;\n\tif(allblack){\n\t\tfor(y = 0; y < h; y += 2){\n\t\t\tfor(x = 0; x < w; x ++){\n\t\t\t\t*(dest ++) = Palette16BPP[*(src16 ++)]; \n\t\t\t}\n\t\t\tdest += destpitch+ddsd_dst.lPitch;\n\t\t\tsrc16 += srcpitch+ddsd_src.lPitch;\n\t\t}\n\t\tdest = dest0 + ddsd_dst.lPitch;\n\t\tsrc16 = src016 + ddsd_src.lPitch;\n\t\tfor(y = 1; y < h; y += 2){\n\t\t\tfor(x = 0; x < w; x ++){\n\t\t\t\t*(dest ++) = (*(dest + ddsd_dst.lPitch) >> 1) + (*(dest - ddsd_dst.lPitch) >> 1) ; \n\t\t\t}\n\t\t\tdest += destpitch+ddsd_dst.lPitch;\n\t\t\tsrc16 += srcpitch+ddsd_src.lPitch;\n\t\t}\n\t}\n\telse {\n\t\tfor(y = 0; y < h; y ++){\n\t\t\tfor(x = 0; x < w; x ++){\n\t\t\t\t//if (!(*src16 & 0x8000)) // try implement alpha bit\n\t\t\t\t*(dest ++) = Palette16BPP[*(src16 ++)]; \n\t\t\t}\n\t\t\tdest += destpitch;\n\t\t\tsrc16 += srcpitch;\n\t\t}\n\t}\n\n\tif(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch);\n\n\tres=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\tif (res) OutTraceE(\"EmuBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddsdst, res, ExplainDDError(res), __LINE__);\n\tres=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\tif (res) OutTraceE(\"EmuBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddssrc, res, ExplainDDError(res), __LINE__);\n\treturn res;\n}\n\nstatic HRESULT WINAPI BilinearBlt_16_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface)\n{\n\tHRESULT res;\n\tWORD *src16, *src0;\n\tDWORD *dest, *dest0;\n\tDDSURFACEDESC2 ddsd_src, ddsd_dst;\n\tlong srcpitch, destpitch;\n\tint w, h;\n\n\tw = lpdestrect->right - lpdestrect->left; \n\th = lpdestrect->bottom - lpdestrect->top; \n\n\tlpdestrect->left <<= 1;\n\tlpdestrect->top <<= 1;\n\tlpdestrect->right <<= 1;\n\tlpdestrect->bottom <<= 1;\n\n\tmemset(&ddsd_dst,0,sizeof(DDSURFACEDESC2));\n\tddsd_dst.dwSize = Set_dwSize_From_Surface();\n\tddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"BilBlt16_32: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tmemset(&ddsd_src,0,sizeof(DDSURFACEDESC2));\n\tddsd_src.dwSize = Set_dwSize_From_Surface();\n\tddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif (lpsurface) { // already locked, just get info ....\n\t\tif(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) {\n\t\t\tOutTraceE(\"BilBlt16_32: GetSurfaceDesc ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\t\t\treturn 0;\n\t\t}\n\t}\n\telse {\n\t\tif(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) {\n\t\t\tOutTraceE(\"BilBlt16_32: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst,0);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, 0);\n\t\t\treturn res;\n\t\t}\n\t\tlpsurface=ddsd_src.lpSurface;\n\t}\n\n\tddsd_dst.lPitch >>= 2;\n\tdest = (DWORD *)ddsd_dst.lpSurface;\n\tdest += lpdestrect->top*ddsd_dst.lPitch;\n\tdest += lpdestrect->left;\n\tdestpitch = ddsd_dst.lPitch - (2 * w);\n\tdest0 = dest;\n\n\tddsd_src.lPitch >>= 1;\n\tsrc16 = (WORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface);\n\tsrc16 += (lpsrcrect->top >> 1)*ddsd_src.lPitch;\n\tsrc16 += (lpsrcrect->left >> 1);\n\tsrcpitch = ddsd_src.lPitch - w;\n\tsrc0 = src16;\n\n\tif (!Palette16BPP) SetPalette16BPP();\n\n\t// OutTraceDW(\"DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\\n\",h,w,src8,dest,srcpitch,destpitch);\n#ifdef USEOPENMP\n#pragma omp parallel for schedule(static)\n#endif\n    for(int y = 0; y < h; y ++){ \n\t\tregister DWORD Q1, Q2, Q3, Q4, Q5;\n\t\tsrc16 = src0 + (y * ddsd_src.lPitch);\n\t\tdest = dest0 + ((y * ddsd_dst.lPitch) << 1);\n\t\tQ5 = Melt32(Palette16BPP[*(src16)], Palette16BPP[*(src16+ddsd_src.lPitch)]);\n        for(int x = 0; x < w; x ++){\n\t\t\tQ1 = Palette16BPP[*(src16)];\n\t\t\tQ2 = Melt32(Q1, Palette16BPP[*(src16+1)]);\n\t\t\tQ3 = Q5;\n\t\t\tif(y == h-1){\n\t\t\t\tQ3 = Q1;\n\t\t\t\tQ4 = Q2;\n\t\t\t}\n\t\t\telse{\n\t\t\t\tQ5 = Melt32(Palette16BPP[*(src16+1)], Palette16BPP[*(src16+ddsd_src.lPitch+1)]); // to be used in next for cycle\n\t\t\t\tQ4 = Melt32(Q3, Q5);\n\t\t\t}\n\t\t\t*(dest) = Q1;\n\t\t\t*(dest+1) = Q2;\n\t\t\t*(dest+ddsd_dst.lPitch) = Q3;\n\t\t\t*(dest+ddsd_dst.lPitch+1) = Q4;\n\t\t\tsrc16++;\n\t\t\tdest+=2;\n        }\n\t}\n\n\tif(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, 2*w, 2*h, destpitch);\n\n\tres=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\tif (res) OutTraceE(\"BilBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddsdst, res, ExplainDDError(res), __LINE__);\n\tres=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\tif (res) OutTraceE(\"BilBlt16_32: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddssrc, res, ExplainDDError(res), __LINE__);\n\treturn res;\n}\n\nstatic HRESULT WINAPI EmuBlt_24_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface)\n{\n\tHRESULT res;\n\tBYTE *src24;\n\tDWORD *dest, *dest0;\n\tDDSURFACEDESC2 ddsd_src, ddsd_dst;\n\tlong srcpitch, destpitch;\n\tDWORD x, y, w, h;\n\n\tw = lpdestrect->right - lpdestrect->left; \n\th = lpdestrect->bottom - lpdestrect->top; \n\n\tmemset(&ddsd_dst,0,sizeof(DDSURFACEDESC2));\n\tddsd_dst.dwSize = Set_dwSize_From_Surface();\n\tddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"EmuBlt24_32: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tmemset(&ddsd_src,0,sizeof(DDSURFACEDESC2));\n\tddsd_src.dwSize = Set_dwSize_From_Surface();\n\tddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif (lpsurface) { // already locked, just get info ....\n\t\tif(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) {\n\t\t\tOutTraceE(\"EmuBlt24_32: GetSurfaceDesc ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\t\t\treturn 0;\n\t\t}\n\t}\n\telse {\n\t\tif(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) {\n\t\t\tOutTraceE(\"EmuBlt24_32: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst,0);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, 0);\n\t\t\treturn res;\n\t\t}\n\t\tlpsurface=ddsd_src.lpSurface;\n\t}\n\n\tddsd_dst.lPitch >>= 2;\n\tdest = (DWORD *)ddsd_dst.lpSurface;\n\tdest += lpdestrect->top*ddsd_dst.lPitch;\n\tdest += lpdestrect->left;\n\tdestpitch = ddsd_dst.lPitch - w;\n\tdest0 = dest;\n\n\tsrc24 = (BYTE *)lpsurface;\n\tsrc24 += lpsrcrect->top*ddsd_src.lPitch;\n\tsrc24 += lpsrcrect->left;\n\tsrcpitch = ddsd_src.lPitch - 3*w;\n\n\tfor(y = 0; y < h; y ++){\n\t\tfor(x = 0; x < w; x ++){\n\t\t\tDWORD dwPixel;\n\t\t\tdwPixel=0;\n\t\t\tmemcpy((void *)&dwPixel, (void *)src24, 3);\n\t\t\t*(dest ++) = dwPixel;\n\t\t\tsrc24 += 3; // 3 bytes = 24 bits\n\t\t}\n\t\tdest += destpitch;\n\t\tsrc24 += srcpitch;\n\t}\n\n\tif(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch);\n\n\tres=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\tif (res) OutTraceE(\"EmuBlt24_32: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddsdst, res, ExplainDDError(res), __LINE__);\n\tres=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\tif (res) OutTraceE(\"EmuBlt24_32: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddssrc, res, ExplainDDError(res), __LINE__);\n\treturn res;\n}\n\n// note: better avoid direct blitting in case of identical color depth (e.g. EmuBlt_32_to_32, EmuBlt_16_to_16)\n// because it does not work between complex surfaces when DDSDCAPS_SYSTEMMEMORY is not omogeneous!\n\nstatic HRESULT WINAPI EmuBlt_32_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface)\n{\n\tDWORD x, y, w, h;\n\tlong srcpitch, destpitch;\n\tHRESULT res;\n\tDWORD *src32;\n\tDWORD *dest, *dest0;\n\tDDSURFACEDESC2 ddsd_src, ddsd_dst;\n\n\tw = lpdestrect->right - lpdestrect->left; \n\th = lpdestrect->bottom - lpdestrect->top; \n\n\tmemset(&ddsd_dst,0,sizeof(DDSURFACEDESC2));\n\tddsd_dst.dwSize = Set_dwSize_From_Surface();\n\tddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"EmuBlt32_32: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tmemset(&ddsd_src,0,sizeof(DDSURFACEDESC2));\n\tddsd_src.dwSize = Set_dwSize_From_Surface();\n\tddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif (lpsurface) { // already locked, just get info ....\n\t\tif(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) {\n\t\t\tOutTraceE(\"EmuBlt32_32: GetSurfaceDesc ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\t\t\treturn res;\n\t\t}\n\t}\n\telse {\n\t\tif(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) {\n\t\t\tOutTraceE(\"EmuBlt32_32: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst,0);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, 0);\n\t\t\treturn res;\n\t\t}\n\t\tlpsurface=ddsd_src.lpSurface;\n\t}\n\n\tddsd_dst.lPitch >>= 2;\n\tdest = (DWORD *)ddsd_dst.lpSurface;\n\tdest += lpdestrect->top*ddsd_dst.lPitch;\n\tdest += lpdestrect->left;\n\tdestpitch = ddsd_dst.lPitch - w;\n\tdest0 = dest;\n\n\tddsd_src.lPitch >>= 2;\n\tsrc32 = (DWORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface);\n\tsrc32 += lpsrcrect->top*ddsd_src.lPitch;\n\tsrc32 += lpsrcrect->left;\n\tsrcpitch = ddsd_src.lPitch - w;\n\n\t// OutTraceDW(\"DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\\n\",h,w,src32,dest,srcpitch,destpitch);\n\tfor(y = 0; y < h; y ++){\n\t\tfor(x = 0; x < w; x ++)\n\t\t\t*(dest ++) = *(src32 ++);\n\t\tdest += destpitch;\n\t\tsrc32 += srcpitch;\n\t}\n\n\tif(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, w, h, destpitch);\n\n\tres=(*pUnlockMethod(dxversion))(lpddsdst,lpdestrect);\n\tif (res) OutTraceE(\"EmuBlt32_32: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddsdst, res, ExplainDDError(res), __LINE__);\n\tres=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\tif (res) OutTraceE(\"EmuBlt32_32: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddssrc, res, ExplainDDError(res), __LINE__);\n\treturn res;\n}\n\nstatic HRESULT WINAPI EmuBlt_8_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface)\n{\n\tHRESULT res;\n\tBYTE *src8;\n\tSHORT *dest, *dest0;\n\tDDSURFACEDESC2 ddsd_src, ddsd_dst;\n\tlong srcpitch, destpitch;\n\tDWORD x, y, w, h;\n\n\tw = lpdestrect->right - lpdestrect->left; \n\th = lpdestrect->bottom - lpdestrect->top; \n\n\tmemset(&ddsd_dst,0,sizeof(DDSURFACEDESC2));\n\tddsd_dst.dwSize = Set_dwSize_From_Surface();\n\tddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"EmuBlt8_16: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tmemset(&ddsd_src,0,sizeof(DDSURFACEDESC2));\n\tddsd_src.dwSize = Set_dwSize_From_Surface();\n\tddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif (lpsurface) { // already locked, just get info ....\n\t\tif(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) {\n\t\t\tOutTraceE(\"EmuBlt8_16: GetSurfaceDesc ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\t\t\treturn 0;\n\t\t}\n\t}\n\telse {\n\t\tif(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) {\n\t\t\tOutTraceE(\"EmuBlt8_16: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst,0);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, 0);\n\t\t\treturn 0;\n\t\t}\n\t\tlpsurface=ddsd_src.lpSurface;\n\t}\n\n\tddsd_dst.lPitch >>= 1;\n\tdest = (SHORT *)ddsd_dst.lpSurface;\n\tdest += lpdestrect->top*ddsd_dst.lPitch;\n\tdest += lpdestrect->left;\n\tdestpitch = ddsd_dst.lPitch - w;\n\tdest0 = dest;\n\n\tsrc8 = (BYTE *)lpsurface;\n\tsrc8 += lpsrcrect->top*ddsd_src.lPitch;\n\tsrc8 += lpsrcrect->left;\n\tsrcpitch = ddsd_src.lPitch - w;\n\n\t// OutTraceDW(\"DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\\n\",h,w,src8,dest,srcpitch,destpitch);\n\tfor(y = 0; y < h; y ++){\n\t\tfor(x = 0; x < w; x ++){\n\t\t\t*(dest ++) = (SHORT)PaletteEntries[*(src8 ++)];\n\t\t}\n\t\tdest += destpitch;\n\t\tsrc8 += srcpitch;\n\t}\n\n\tif(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, w, h, destpitch);\n\n\tres=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\tif (res) OutTraceE(\"EmuBlt8_16: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddsdst, res, ExplainDDError(res), __LINE__);\n\tres=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\tif (res) OutTraceE(\"EmuBlt8_16: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddssrc, res, ExplainDDError(res), __LINE__);\n\treturn res;\n}\n\nstatic HRESULT WINAPI BilinearBlt_8_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface)\n{\n\tHRESULT res;\n\tBYTE *src8, *src0;\n\tSHORT *dest, *dest0;\n\tDDSURFACEDESC2 ddsd_src, ddsd_dst;\n\tlong srcpitch, destpitch;\n\tint w, h;\n\ttypedef DWORD (*Melt16_Type)(DWORD, DWORD);\n\tMelt16_Type Melt16;\n\n\tw = lpdestrect->right - lpdestrect->left; \n\th = lpdestrect->bottom - lpdestrect->top; \n\n\tlpdestrect->left <<= 1;\n\tlpdestrect->top <<= 1;\n\tlpdestrect->right <<= 1;\n\tlpdestrect->bottom <<= 1;\n\n\tmemset(&ddsd_dst,0,sizeof(DDSURFACEDESC2));\n\tddsd_dst.dwSize = Set_dwSize_From_Surface();\n\tddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"BilBlt8_16: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tMelt16 = (ddsd_dst.ddpfPixelFormat.dwGBitMask == 0x3E0) ? Melt16_555 : Melt16_565;\n\n\tmemset(&ddsd_src,0,sizeof(DDSURFACEDESC2));\n\tddsd_src.dwSize = Set_dwSize_From_Surface();\n\tddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif (lpsurface) { // already locked, just get info ....\n\t\tif(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) {\n\t\t\tOutTraceE(\"BilBlt8_16: GetSurfaceDesc ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\t\t\treturn 0;\n\t\t}\n\t}\n\telse {\n\t\tif(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) {\n\t\t\tOutTraceE(\"BilBlt8_16: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst,0);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, 0);\n\t\t\treturn 0;\n\t\t}\n\t\tlpsurface=ddsd_src.lpSurface;\n\t}\n\n\tddsd_dst.lPitch >>= 1;\n\tdest = (SHORT *)ddsd_dst.lpSurface;\n\tdest += lpdestrect->top*ddsd_dst.lPitch;\n\tdest += lpdestrect->left;\n\tdestpitch = ddsd_dst.lPitch - (2 * w);\n\tdest0 = dest;\n\n\tsrc8 = (BYTE *)lpsurface;\n\tsrc8 += (lpsrcrect->top >> 1)*ddsd_src.lPitch;\n\tsrc8 += (lpsrcrect->left >> 1);\n\tsrcpitch = ddsd_src.lPitch - w;\n\tsrc0 = src8;\n\n\t// OutTraceDW(\"DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\\n\",h,w,src8,dest,srcpitch,destpitch);\n#ifdef USEOPENMP\n#pragma omp parallel for schedule(static)\n#endif\n    for(int y = 0; y < h; y ++){ \n\t\tregister DWORD Q1, Q2, Q3, Q4, Q5;\n\t\tsrc8 = src0 + (y * ddsd_src.lPitch);\n\t\tdest = dest0 + ((y * ddsd_dst.lPitch) << 1);\t\n\t\tQ5 = Melt16(PaletteEntries[*(src8)], PaletteEntries[*(src8+ddsd_src.lPitch)]);\n        for(int x = 0; x < w; x ++){\n\t\t\tQ1 = PaletteEntries[*(src8)];\n\t\t\tQ2 = Melt16(Q1, PaletteEntries[*(src8+1)]);\n\t\t\tQ3 = Q5;\n\t\t\tif(y == h-1){\n\t\t\t\tQ3 = Q1;\n\t\t\t\tQ4 = Q2;\n\t\t\t}\n\t\t\telse{\n\t\t\t\tQ5 = Melt16(PaletteEntries[*(src8+1)], PaletteEntries[*(src8+ddsd_src.lPitch+1)]); // to be used in next for cycle\n\t\t\t\tQ4 = Melt16(Q3, Q5);\n\t\t\t}\n\t\t\t*(dest) = (SHORT)Q1;\n\t\t\t*(dest+1) = (SHORT)Q2;\n\t\t\t*(dest+ddsd_dst.lPitch) = (SHORT)Q3;\n\t\t\t*(dest+ddsd_dst.lPitch+1) = (SHORT)Q4;\n\t\t\tsrc8++;\n\t\t\tdest+=2;\n        }\n\t}\n\n\tif(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, 2*w, 2*h, destpitch);\n\n\tres=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\tif (res) OutTraceE(\"BilBlt8_16: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddsdst, res, ExplainDDError(res), __LINE__);\n\tres=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\tif (res) OutTraceE(\"BilBlt8_16: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddssrc, res, ExplainDDError(res), __LINE__);\n\treturn res;\n}\n\nstatic HRESULT WINAPI EmuBlt_16_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface)\n{\n#if 0\n\treturn (*pBlt)(lpddsdst, lpdestrect, lpddssrc, lpsrcrect, dwflags, NULL);\n#endif\n\tHRESULT res;\n\tSHORT *src16;\n\tSHORT *dest, *dest0;\n\tDDSURFACEDESC2 ddsd_src, ddsd_dst;\n\tlong srcpitch, destpitch;\n\tDWORD x, y, w, h;\n\tBOOL is555src, is555dst;\n\n\tw = lpdestrect->right - lpdestrect->left; \n\th = lpdestrect->bottom - lpdestrect->top; \n\n\tmemset(&ddsd_dst,0,sizeof(DDSURFACEDESC2));\n\tddsd_dst.dwSize = Set_dwSize_From_Surface();\n\tddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"EmuBlt16_16: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tmemset(&ddsd_src,0,sizeof(DDSURFACEDESC2));\n\tddsd_src.dwSize = Set_dwSize_From_Surface();\n\tddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif (lpsurface) { // already locked, just get info ....\n\t\tif(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) {\n\t\t\tOutTraceE(\"EmuBlt16_16: GetSurfaceDesc ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\t\t\treturn 0;\n\t\t}\n\t}\n\telse {\n\t\tif(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) {\n\t\t\tOutTraceE(\"EmuBlt16_16: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst,0);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, 0);\n\t\t\treturn 0;\n\t\t}\n\t\tlpsurface=ddsd_src.lpSurface;\n\t}\n\n\tddsd_dst.lPitch >>= 1;\n\tdest = (SHORT *)ddsd_dst.lpSurface;\n\tdest += lpdestrect->top*ddsd_dst.lPitch;\n\tdest += lpdestrect->left;\n\tdestpitch = ddsd_dst.lPitch - w;\n\tdest0 = dest;\n\tis555dst = (ddsd_dst.ddpfPixelFormat.dwGBitMask == 0x3E0);\n\n\tddsd_src.lPitch >>= 1;\n\tsrc16 = (SHORT *)lpsurface;\n\tsrc16 += lpsrcrect->top*ddsd_src.lPitch;\n\tsrc16 += lpsrcrect->left;\n\tsrcpitch = ddsd_src.lPitch - w;\n\tis555src = (ddsd_dst.ddpfPixelFormat.dwGBitMask == 0x3E0);\n\n\t// OutTraceDW(\"DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\\n\",h,w,src8,dest,srcpitch,destpitch);\n\tif (is555dst == is555src){\n\t\tfor(y = 0; y < h; y ++){\n\t\t\t// copy one whole pixel line at a time....\n\t\t\tmemcpy(dest, src16, w<<1);\n\t\t\tdest += (w + destpitch);\n\t\t\tsrc16 += (w + srcpitch);\n\t\t}\n\t}\n\telse {\n\tif(is555dst){\n\t\tfor(y = 0; y < h; y ++){\n\t\t\tfor(x = 0; x < w; x ++){\n\t\t\t\tSHORT pi;\n\t\t\t\tpi = *(src16 ++);\n\t\t\t\tpi = (pi & 0x1F) | (pi & 0x7C0)>>1 | (pi & 0xF800)>>1;\n\t\t\t\t*(dest ++) = pi;\n\t\t\t}\n\t\t\tdest += destpitch;\n\t\t\tsrc16 += srcpitch;\n\t\t}\n\t}\n\telse {\n\t\tfor(y = 0; y < h; y ++){\n\t\t\tfor(x = 0; x < w; x ++){\n\t\t\t\tSHORT pi;\n\t\t\t\tpi = *(src16 ++);\n\t\t\t\tpi = (pi & 0x1F) | (pi & 0x3E0)<<1 | (pi & 0x7C00)<<1;\n\t\t\t\t*(dest ++) = pi;\n\t\t\t}\n\t\t\tdest += destpitch;\n\t\t\tsrc16 += srcpitch;\n\t\t}\n\t}\n\t}\n\n\tif(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, w, h, destpitch);\n\n\tres=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\tif (res) OutTraceE(\"EmuBlt16_16: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddsdst, res, ExplainDDError(res), __LINE__);\n\tres=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\tif (res) OutTraceE(\"EmuBlt16_16: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddssrc, res, ExplainDDError(res), __LINE__);\n\treturn res;\n}\n\nstatic HRESULT WINAPI BilinearBlt_16_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface)\n{\n\tHRESULT res;\n\tWORD *src16, *src0;\n\tWORD *dest, *dest0;\n\tDDSURFACEDESC2 ddsd_src, ddsd_dst;\n\tlong srcpitch, destpitch;\n\tint w, h;\n\ttypedef DWORD (*Melt16_Type)(DWORD, DWORD);\n\tMelt16_Type Melt16;\n\n\tw = lpdestrect->right - lpdestrect->left; \n\th = lpdestrect->bottom - lpdestrect->top; \n\n\tlpdestrect->left <<= 1;\n\tlpdestrect->top <<= 1;\n\tlpdestrect->right <<= 1;\n\tlpdestrect->bottom <<= 1;\n\n\tmemset(&ddsd_dst,0,sizeof(DDSURFACEDESC2));\n\tddsd_dst.dwSize = Set_dwSize_From_Surface();\n\tddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"BilBlt16_16: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tMelt16 = (ddsd_dst.ddpfPixelFormat.dwGBitMask == 0x3E0) ? Melt16_555 : Melt16_565;\n\n\tmemset(&ddsd_src,0,sizeof(DDSURFACEDESC2));\n\tddsd_src.dwSize = Set_dwSize_From_Surface();\n\tddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif (lpsurface) { // already locked, just get info ....\n\t\tif(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) {\n\t\t\tOutTraceE(\"BilBlt16_16: GetSurfaceDesc ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\t\t\treturn 0;\n\t\t}\n\t}\n\telse {\n\t\tif(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) {\n\t\t\tOutTraceE(\"BilBlt16_16: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst,0);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, 0);\n\t\t\treturn res;\n\t\t}\n\t\tlpsurface=ddsd_src.lpSurface;\n\t}\n\n\tddsd_dst.lPitch >>= 1;\n\tdest = (WORD *)ddsd_dst.lpSurface;\n\tdest += lpdestrect->top*ddsd_dst.lPitch;\n\tdest += lpdestrect->left;\n\tdestpitch = ddsd_dst.lPitch - (2 * w);\n\tdest0 = dest;\n\n\tddsd_src.lPitch >>= 1;\n\tsrc16 = (WORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface);\n\tsrc16 += (lpsrcrect->top >> 1)*ddsd_src.lPitch;\n\tsrc16 += (lpsrcrect->left >> 1);\n\tsrcpitch = ddsd_src.lPitch - w;\n\tsrc0 = src16;\n\n\t// OutTraceDW(\"DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\\n\",h,w,src8,dest,srcpitch,destpitch);\n#ifdef USEOPENMP\n#pragma omp parallel for schedule(static)\n#endif\n    for(int y = 0; y < h; y ++){ \n\t\tregister DWORD Q1, Q2, Q3, Q4, Q5;\n\t\tsrc16 = src0 + (y * ddsd_src.lPitch);\n\t\tdest = dest0 + ((y * ddsd_dst.lPitch) << 1);\t\n\t\tQ5 = Melt16(*(src16), *(src16+ddsd_src.lPitch));\n        for(int x = 0; x < w; x ++){\n\t\t\tQ1 = *(src16);\n\t\t\tQ2 = Melt16(Q1, *(src16+1));\n\t\t\tQ3 = Q5;\n\t\t\tif(y == h-1){\n\t\t\t\tQ3 = Q1;\n\t\t\t\tQ4 = Q2;\n\t\t\t}\n\t\t\telse{\n\t\t\t\tQ5 = Melt16(*(src16+1), *(src16+ddsd_src.lPitch+1)); // to be used in next for cycle\n\t\t\t\tQ4 = Melt16(Q3, Q5);\n\t\t\t}\n\t\t\t*(dest) = (WORD)Q1;\n\t\t\t*(dest+1) = (WORD)Q2;\n\t\t\t*(dest+ddsd_dst.lPitch) = (WORD)Q3;\n\t\t\t*(dest+ddsd_dst.lPitch+1) = (WORD)Q4;\n\t\t\tsrc16++;\n\t\t\tdest+=2;\n        }\n\t}\n\n\tif(dxw.dwFlags3 & MARKBLIT) MarkRect16((SHORT *)dest0, 2*w, 2*h, destpitch);\n\n\tres=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\tif (res) OutTraceE(\"BilBlt16_16: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddsdst, res, ExplainDDError(res), __LINE__);\n\tres=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\tif (res) OutTraceE(\"BilBlt16_16: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddssrc, res, ExplainDDError(res), __LINE__);\n\treturn res;\n}\n\n\nstatic HRESULT WINAPI EmuBlt_24_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface)\n{\n\tHRESULT res;\n\tBYTE *src24;\n\tSHORT *dest, *dest0;\n\tDDSURFACEDESC2 ddsd_src, ddsd_dst;\n\tlong srcpitch, destpitch;\n\tDWORD x, y, w, h;\n\n\tw = lpdestrect->right - lpdestrect->left; \n\th = lpdestrect->bottom - lpdestrect->top; \n\n\tmemset(&ddsd_dst,0,sizeof(DDSURFACEDESC2));\n\tddsd_dst.dwSize = Set_dwSize_From_Surface();\n\tddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"EmuBlt24_16: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tmemset(&ddsd_src,0,sizeof(DDSURFACEDESC2));\n\tddsd_src.dwSize = Set_dwSize_From_Surface();\n\tddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif (lpsurface) { // already locked, just get info ....\n\t\tif(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) {\n\t\t\tOutTraceE(\"EmuBlt24_16: GetSurfaceDesc ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\t\t\treturn 0;\n\t\t}\n\t}\n\telse {\n\t\tif(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) {\n\t\t\tOutTraceE(\"EmuBlt24_16: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst,0);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, 0);\n\t\t\treturn 0;\n\t\t}\n\t\tlpsurface=ddsd_src.lpSurface;\n\t}\n\n\tddsd_dst.lPitch >>= 1;\n\tdest = (SHORT *)ddsd_dst.lpSurface;\n\tdest += lpdestrect->top*ddsd_dst.lPitch;\n\tdest += lpdestrect->left;\n\tdestpitch = ddsd_dst.lPitch - w;\n\tdest0 = dest;\n\n\tsrc24 = (BYTE *)lpsurface;\n\tsrc24 += lpsrcrect->top*ddsd_src.lPitch;\n\tsrc24 += lpsrcrect->left;\n\tsrcpitch = ddsd_src.lPitch - 3*w;\n\n\tfor(y = 0; y < h; y ++){\n\t\tfor(x = 0; x < w; x ++){\n\t\t\t*(dest ++) = (*(src24+2) & 0xF8)<<8 | (*(src24+1) & 0xFC)<<3 | (*(src24+0) & 0xF8)>>3;\n\t\t\tsrc24 += 3; // 3 bytes = 24 bits\n\t\t}\n\t\tdest += destpitch;\n\t\tsrc24 += srcpitch;\n\t}\n\n\tif(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, w, h, destpitch);\n\n\tres=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\tif (res) OutTraceE(\"EmuBlt24_16: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddsdst, res, ExplainDDError(res), __LINE__);\n\tres=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\tif (res) OutTraceE(\"EmuBlt24_16: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddssrc, res, ExplainDDError(res), __LINE__);\n\treturn res;\n}\n\nstatic HRESULT WINAPI EmuBlt_32_to_16(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface)\n{\n\tHRESULT res;\n\tBYTE *src32;\n\tSHORT *dest, *dest0;\n\tDDSURFACEDESC2 ddsd_src, ddsd_dst;\n\tlong srcpitch, destpitch;\n\tDWORD x, y, w, h;\n\n\tw = lpdestrect->right - lpdestrect->left; \n\th = lpdestrect->bottom - lpdestrect->top; \n\n\tmemset(&ddsd_dst,0,sizeof(DDSURFACEDESC2));\n\tddsd_dst.dwSize = Set_dwSize_From_Surface();\n\tddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"EmuBlt32_16: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tmemset(&ddsd_src,0,sizeof(DDSURFACEDESC2));\n\tddsd_src.dwSize = Set_dwSize_From_Surface();\n\tddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif (lpsurface) { // already locked, just get info ....\n\t\tif(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) {\n\t\t\tOutTraceE(\"EmuBlt32_16: GetSurfaceDesc ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\t\t\treturn 0;\n\t\t}\n\t}\n\telse {\n\t\tif(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY, 0)) {\n\t\t\tOutTraceE(\"EmuBlt32_16: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst,0);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, 0);\n\t\t\treturn 0;\n\t\t}\n\t\tlpsurface=ddsd_src.lpSurface;\n\t}\n\n\tddsd_dst.lPitch >>= 1;\n\tdest = (SHORT *)ddsd_dst.lpSurface;\n\tdest += lpdestrect->top*ddsd_dst.lPitch;\n\tdest += lpdestrect->left;\n\tdestpitch = ddsd_dst.lPitch - w;\n\tdest0 = dest;\n\n\tsrc32 = (BYTE *)lpsurface;\n\tsrc32 += lpsrcrect->top*ddsd_src.lPitch;\n\tsrc32 += lpsrcrect->left;\n\tsrcpitch = ddsd_src.lPitch - 4*w;\n\n\tfor(y = 0; y < h; y ++){\n\t\tfor(x = 0; x < w; x ++){\n\t\t\t*(dest ++) = (*(src32+2) & 0xF8)<<8 | (*(src32+1) & 0xFC)<<3 | (*(src32+0) & 0xF8)>>3;\n\t\t\tsrc32 += 4; // 4 bytes = 32 bits\n\t\t}\n\t\tdest += destpitch;\n\t\tsrc32 += srcpitch;\n\t}\n\n\tif(dxw.dwFlags3 & MARKBLIT) MarkRect16(dest0, w, h, destpitch);\n\n\tres=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\tif (res) OutTraceE(\"EmuBlt32_16: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddsdst, res, ExplainDDError(res), __LINE__);\n\tres=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\tif (res) OutTraceE(\"EmuBlt32_16: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddssrc, res, ExplainDDError(res), __LINE__);\n\treturn res;\n}\n\nstatic HRESULT WINAPI BilinearBlt_32_to_32(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface)\n{\n\tHRESULT res;\n\tDWORD *src32;\n\tDWORD *dest, *dest0;\n\tDDSURFACEDESC2 ddsd_src, ddsd_dst;\n\tlong srcpitch, destpitch;\n\tDWORD x, y, w, h;\n\n\tw = lpdestrect->right - lpdestrect->left; \n\th = lpdestrect->bottom - lpdestrect->top; \n\n\tlpdestrect->left <<= 1;\n\tlpdestrect->top <<= 1;\n\tlpdestrect->right <<= 1;\n\tlpdestrect->bottom <<= 1;\n\n\tmemset(&ddsd_dst,0,sizeof(DDSURFACEDESC2));\n\tddsd_dst.dwSize = Set_dwSize_From_Surface();\n\tddsd_dst.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif(res=(*pLockMethod(dxversion))(lpddsdst, 0, (LPDDSURFACEDESC)&ddsd_dst, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){\t\n\t\tOutTraceE(\"BilBlt32_32: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tmemset(&ddsd_src,0,sizeof(DDSURFACEDESC2));\n\tddsd_src.dwSize = Set_dwSize_From_Surface();\n\tddsd_src.dwFlags = DDSD_LPSURFACE | DDSD_PITCH;\n\tif (lpsurface) { // already locked, just get info ....\n\t\tif(res=lpddssrc->GetSurfaceDesc((LPDDSURFACEDESC)&ddsd_src)) {\n\t\t\tOutTraceE(\"BilBlt32_32: GetSurfaceDesc ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\t\t\treturn 0;\n\t\t}\n\t}\n\telse {\n\t\tif(res=(*pLockMethod(dxversion))(lpddssrc, 0, (LPDDSURFACEDESC)&ddsd_src, DDLOCK_SURFACEMEMORYPTR|DDLOCK_READONLY|DDLOCK_WAIT, 0)) {\n\t\t\tOutTraceE(\"BilBlt32_32: Lock ERROR res=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\t\t(*pUnlockMethod(dxversion))(lpddsdst,0);\n\t\t\t(*pUnlockMethod(dxversion))(lpddssrc, 0);\n\t\t\treturn res;\n\t\t}\n\t\tlpsurface=ddsd_src.lpSurface;\n\t}\n\n\tddsd_dst.lPitch >>= 2;\n\tdest = (DWORD *)ddsd_dst.lpSurface;\n\tdest += lpdestrect->top*ddsd_dst.lPitch;\n\tdest += lpdestrect->left;\n\tdestpitch = ddsd_dst.lPitch - (2 * w);\n\tdest0 = dest;\n\n\tddsd_src.lPitch >>= 2;\n\tsrc32 = (DWORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface);\n\tsrc32 += lpsrcrect->top*ddsd_src.lPitch;\n\tsrc32 += lpsrcrect->left;\n\tsrcpitch = ddsd_src.lPitch - w;\n\n\t//OutTraceDW(\"DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\\n\",h,w,src32,dest,srcpitch,destpitch);\n\tfor(y = 0; y < h-1; y ++){ \n\t\tregister DWORD Q1, Q2, Q3, Q4, Q5;\n\t\tQ5 = Melt32(*(src32), *(src32+ddsd_src.lPitch));\n        for(x = 0; x < w; x ++){\n\t\t\tQ1 = *(src32);\n\t\t\tQ2 = Melt32(Q1, *(src32+1));\n\t\t\tQ3 = Q5;\n\t\t\tQ5 = Melt32(*(src32+1), *(src32+ddsd_src.lPitch+1)); // to be used in next for cycle\n\t\t\tQ4 = Melt32(Q3, Q5);\n\n\t\t\t*(dest) = Q1;\n\t\t\t*(dest+1) = Q2;\n\t\t\t*(dest+ddsd_dst.lPitch) = Q3;\n\t\t\t*(dest+ddsd_dst.lPitch+1) = Q4;\n\t\t\tsrc32++;\n\t\t\tdest+=2;\n        }\n        src32 += srcpitch;\n        dest += (ddsd_dst.lPitch + destpitch);\n\t}\n\tfor(x = 0; x < w; x ++){ // last line (there's no next line to melt...)\n\t\tregister DWORD Q1, Q2;\n\t\tQ1 = *(src32);\n\t\tQ2 = Melt32(Q1, *(src32+1));\n\n\t\t*(dest) = Q1;\n\t\t*(dest+1) = Q2;\n\t\t*(dest+ddsd_dst.lPitch) = Q1;\n\t\t*(dest+ddsd_dst.lPitch+1) = Q2;\n\t\tsrc32++;\n\t\tdest+=2;\n    }\n\n\tif(dxw.dwFlags3 & MARKBLIT) MarkRect32(dest0, 2*w, 2*h, destpitch);\n\n\tres=(*pUnlockMethod(dxversion))(lpddsdst, lpdestrect);\n\tif (res) OutTraceE(\"BilBlt32_32: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddsdst, res, ExplainDDError(res), __LINE__);\n\tres=(*pUnlockMethod(dxversion))(lpddssrc, lpsrcrect);\n\tif (res) OutTraceE(\"BilBlt32_32: Unlock ERROR dds=%x res=%x(%s) at %d\\n\", lpddssrc, res, ExplainDDError(res), __LINE__);\n\treturn res;\n}\n\nstatic HRESULT WINAPI EmuBlt_Null(int dxversion, Blt_Type pBlt, LPDIRECTDRAWSURFACE lpddsdst, LPRECT lpdestrect,\n\tLPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPVOID lpsurface)\n{\n\tchar *sMsg=\"EmuBlt: undefined color depth\\n\";\n\tOutTraceE(sMsg);\n\tif(IsAssertEnabled) MessageBox(0, sMsg, \"EmuBlt\", MB_OK | MB_ICONEXCLAMATION);\n\treturn -1;\n}\n\n//--------------------------------------------------------------------------------------------//\n// exported methods\n//--------------------------------------------------------------------------------------------//\n\nvoid SetBltTransformations(int dxversion)\n{\n\tpPrimaryBlt = PrimaryBlt;\n\tif(dxw.dwFlags5 & AEROBOOST) pPrimaryBlt = PrimaryStretchBlt;\n\tif(dxw.dwFlags5 & BILINEARFILTER) pPrimaryBlt = PrimaryBilinearBlt; \n\tif(dxw.dwFlags5 & DOFASTBLT) pPrimaryBlt = PrimaryFastBlt; // debug opt\n\tif(dxw.dwFlags5 & CENTERTOWIN) pPrimaryBlt = PrimaryFastBlt; \n\tif(dxw.dwFlags5 & NOBLT) pPrimaryBlt = PrimaryNoBlt; // debug opt\n\n\textern HRESULT WINAPI ColorConversionDDRAW(int, LPDIRECTDRAWSURFACE, RECT, LPDIRECTDRAWSURFACE *);\n\textern HRESULT WINAPI ColorConversionGDI(int, LPDIRECTDRAWSURFACE, RECT, LPDIRECTDRAWSURFACE *);\n\textern HRESULT WINAPI ColorConversionEmulated(int, LPDIRECTDRAWSURFACE, RECT, LPDIRECTDRAWSURFACE *);\n\tpColorConversion = ColorConversionDDRAW; // default for no emulation mode\n\tif(dxw.dwFlags1 & EMULATESURFACE) {\n\t\tpColorConversion = ColorConversionEmulated; // default for emulation mode\n\t\tif(dxw.dwFlags5 & HYBRIDMODE) pColorConversion = ColorConversionDDRAW;\n\t\tif(dxw.dwFlags5 & GDICOLORCONV) pColorConversion = ColorConversionGDI;\n\t}\n\tchar *s = \"???\";\n\tif(pColorConversion == ColorConversionDDRAW) s=\"DDRAW\"; \n\tif(pColorConversion == ColorConversionGDI) s=\"GDI\";\n\tif(pColorConversion == ColorConversionEmulated) s=\"EMULATED\";\n\tOutTraceDW(\"SetBltTransformations: color conversion %s BPP %d->%d\\n\", \n\t\ts, dxw.VirtualPixelFormat.dwRGBBitCount, dxw.ActualPixelFormat.dwRGBBitCount);\n\n\tif(pColorConversion != ColorConversionEmulated) return;\n\n\t/* default (bad) setting */\n\tpEmuBlt=EmuBlt_Null;\n\n\tswitch (dxw.ActualPixelFormat.dwRGBBitCount){\n\tcase 32:\n\t\tswitch(dxw.VirtualPixelFormat.dwRGBBitCount){\n\t\tcase 8:\n\t\t\tpEmuBlt=EmuBlt_8_to_32;\n\t\t\tif(dxw.dwFlags4 & BILINEAR2XFILTER) pEmuBlt=BilinearBlt_8_to_32;\n\t\t\tOutTraceDW(\"set color transformation 8<->32\\n\");\n\t\t\tbreak;\n\t\tcase 16: \n\t\t\tpEmuBlt=EmuBlt_16_to_32;\n\t\t\tif(dxw.dwFlags4 & BILINEAR2XFILTER) pEmuBlt=BilinearBlt_16_to_32;\n\t\t\tif(dxw.dwFlags5 & DEINTERLACE) pEmuBlt=Deinterlace_16_to_32;\n\t\t\tOutTraceDW(\"set color transformation 16<->32\\n\");\n\t\t\tbreak;\n\t\tcase 24: \n\t\t\tpEmuBlt=EmuBlt_24_to_32;\n\t\t\tOutTraceDW(\"set color transformation 24->32\\n\");\n\t\t\tbreak;\n\t\tcase 32: \n\t\t\tpEmuBlt=EmuBlt_32_to_32;\n\t\t\tif(dxw.dwFlags4 & BILINEAR2XFILTER) pEmuBlt=BilinearBlt_32_to_32;\n\t\t\tOutTraceDW(\"set color transformation 32->32\\n\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tOutTraceDW(\"unsupported color transformation %d->32\\n\", dxw.VirtualPixelFormat.dwRGBBitCount);\n\t\t\tbreak;\n\t\t}\n\t\tbreak;\n\tcase 16:\n\t\tswitch(dxw.VirtualPixelFormat.dwRGBBitCount){\n\t\tcase 8:\n\t\t\tpEmuBlt=EmuBlt_8_to_16;\n\t\t\tif(dxw.dwFlags4 & BILINEAR2XFILTER) pEmuBlt=BilinearBlt_8_to_16;\n\t\t\tOutTraceDW(\"set color transformation 8<->16\\n\");\n\t\t\tbreak;\n\t\tcase 16:\n\t\t\tpEmuBlt=EmuBlt_16_to_16;\n\t\t\tif(dxw.dwFlags4 & BILINEAR2XFILTER) pEmuBlt=BilinearBlt_16_to_16;\n\t\t\tOutTraceDW(\"set color transformation 16<->16\\n\");\n\t\t\tbreak;\n\t\tcase 24: \n\t\t\tpEmuBlt=EmuBlt_24_to_16;\n\t\t\tOutTraceDW(\"set color transformation 24<->16\\n\");\n\t\t\tbreak;\n\t\tcase 32:\n\t\t\tpEmuBlt=EmuBlt_32_to_16;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tOutTraceDW(\"unsupported color transformation %d->16\\n\", dxw.VirtualPixelFormat.dwRGBBitCount);\n\t\t\tbreak;\n\t\t}\n\t\tbreak;\n\tdefault:\n\t\tOutTraceDW(\"unsupported color transformation %d->%d\\n\",\n\t\t\tdxw.VirtualPixelFormat.dwRGBBitCount,\n\t\t\tdxw.ActualPixelFormat.dwRGBBitCount);\n\t\tbreak;\n\t}\n}\n"
  },
  {
    "path": "dll/dxhelper.cpp",
    "content": "#define _CRT_SECURE_NO_DEPRECATE 1\n#define DIRECTINPUT_VERSION 0x0800\n\n#include <windows.h>\n#include <stdio.h>\n#include <ddraw.h>\n#include <d3d.h>\n#include <dinput.h>\n#include \"dxwnd.h\"\n\n\n// debug functions to make the log more readable\n\nvoid DumpRect(char *what, LPRECT r, int line)\n{\n\tOutTrace(\"DEBUG: RECT %s at %d:\", what, line);\n\tif (r)\n\t\tOutTrace(\"(%d,%d)-(%d,%d)\\n\",r->left,r->top,r->right,r->bottom);\n\telse\n\t\tOutTrace(\"(NULL)\\n\");\n}\n\nchar *ExplainFlags(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"DDSD_\");\n\tif (c & DDSD_CAPS) strcat(eb, \"CAPS+\");\n\tif (c & DDSD_HEIGHT) strcat(eb, \"HEIGHT+\");\n\tif (c & DDSD_WIDTH) strcat(eb, \"WIDTH+\");\n\tif (c & DDSD_PITCH) strcat(eb, \"PITCH+\");\n\tif (c & DDSD_BACKBUFFERCOUNT) strcat(eb, \"BACKBUFFERCOUNT+\");\n\tif (c & DDSD_ZBUFFERBITDEPTH) strcat(eb, \"ZBUFFERBITDEPTH+\");\n\tif (c & DDSD_ALPHABITDEPTH) strcat(eb, \"ALPHABITDEPTH+\");\n\tif (c & DDSD_LPSURFACE) strcat(eb, \"LPSURFACE+\");\n\tif (c & DDSD_PIXELFORMAT) strcat(eb, \"PIXELFORMAT+\");\n\tif (c & DDSD_CKDESTOVERLAY) strcat(eb, \"CKDESTOVERLAY+\");\n\tif (c & DDSD_CKDESTBLT) strcat(eb, \"CKDESTBLT+\");\n\tif (c & DDSD_CKSRCOVERLAY) strcat(eb, \"CKSRCOVERLAY+\");\n\tif (c & DDSD_CKSRCBLT) strcat(eb, \"CKSRCBLT+\");\n\tif (c & DDSD_MIPMAPCOUNT) strcat(eb, \"MIPMAPCOUNT+\");\n\tif (c & DDSD_REFRESHRATE) strcat(eb, \"REFRESHRATE+\");\n\tif (c & DDSD_LINEARSIZE) strcat(eb, \"LINEARSIZE+\");\n\tif (c & DDSD_TEXTURESTAGE) strcat(eb, \"TEXTURESTAGE+\");\n\tif (c & DDSD_SRCVBHANDLE) strcat(eb, \"SRCVBHANDLE+\");\n\tif (c & DDSD_DEPTH) strcat(eb, \"DEPTH+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDSD_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nchar *ExplainDDSCaps(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"DDSCAPS_\");\n\tif (c & DDSCAPS_RESERVED1) strcat(eb, \"RESERVED1+\");\n\tif (c & DDSCAPS_ALPHA) strcat(eb, \"ALPHA+\");\n\tif (c & DDSCAPS_BACKBUFFER) strcat(eb, \"BACKBUFFER+\");\n\tif (c & DDSCAPS_COMPLEX) strcat(eb, \"COMPLEX+\");\n\tif (c & DDSCAPS_FLIP) strcat(eb, \"FLIP+\");\n\tif (c & DDSCAPS_FRONTBUFFER) strcat(eb, \"FRONTBUFFER+\");\n\tif (c & DDSCAPS_OFFSCREENPLAIN) strcat(eb, \"OFFSCREENPLAIN+\");\n\tif (c & DDSCAPS_OVERLAY) strcat(eb, \"OVERLAY+\");\n\tif (c & DDSCAPS_PALETTE) strcat(eb, \"PALETTE+\");\n\tif (c & DDSCAPS_PRIMARYSURFACE) strcat(eb, \"PRIMARYSURFACE+\");\n\tif (c & DDSCAPS_SYSTEMMEMORY) strcat(eb, \"SYSTEMMEMORY+\");\n\tif (c & DDSCAPS_TEXTURE) strcat(eb, \"TEXTURE+\");\n\tif (c & DDSCAPS_3DDEVICE) strcat(eb, \"3DDEVICE+\");\n\tif (c & DDSCAPS_VIDEOMEMORY) strcat(eb, \"VIDEOMEMORY+\");\n\tif (c & DDSCAPS_VISIBLE) strcat(eb, \"VISIBLE+\");\n\tif (c & DDSCAPS_WRITEONLY) strcat(eb, \"WRITEONLY+\");\n\tif (c & DDSCAPS_ZBUFFER) strcat(eb, \"ZBUFFER+\");\n\tif (c & DDSCAPS_OWNDC) strcat(eb, \"OWNDC+\");\n\tif (c & DDSCAPS_LIVEVIDEO) strcat(eb, \"LIVEVIDEO+\");\n\tif (c & DDSCAPS_HWCODEC) strcat(eb, \"HWCODEC+\");\n\tif (c & DDSCAPS_MODEX) strcat(eb, \"MODEX+\");\n\tif (c & DDSCAPS_MIPMAP) strcat(eb, \"MIPMAP+\"); \n\tif (c & DDSCAPS_RESERVED2) strcat(eb, \"RESERVED2+\");\n\tif (c & DDSCAPS_ALLOCONLOAD) strcat(eb, \"ALLOCONLOAD+\");\n\tif (c & DDSCAPS_VIDEOPORT) strcat(eb, \"VIDEOPORT+\");\n\tif (c & DDSCAPS_LOCALVIDMEM) strcat(eb, \"LOCALVIDMEM+\");\n\tif (c & DDSCAPS_NONLOCALVIDMEM) strcat(eb, \"NONLOCALVIDMEM+\");\n\tif (c & DDSCAPS_STANDARDVGAMODE) strcat(eb, \"STANDARDVGAMODE+\");\n\tif (c & DDSCAPS_OPTIMIZED) strcat(eb, \"OPTIMIZED+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDSCAPS_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nchar *ExplainDDSCaps2(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"DDSCAPS2_\");\n\tif (c & DDSCAPS2_RESERVED4) strcat(eb, \"RESERVED4+\");\n\tif (c & DDSCAPS2_HINTDYNAMIC) strcat(eb, \"HINTDYNAMIC+\");\n\tif (c & DDSCAPS2_HINTSTATIC) strcat(eb, \"HINTSTATIC+\");\n\tif (c & DDSCAPS2_TEXTUREMANAGE) strcat(eb, \"TEXTUREMANAGE+\");\n\tif (c & DDSCAPS2_RESERVED1) strcat(eb, \"RESERVED1+\");\n\tif (c & DDSCAPS2_RESERVED2) strcat(eb, \"RESERVED2+\");\n\tif (c & DDSCAPS2_OPAQUE) strcat(eb, \"OPAQUE+\");\n\tif (c & DDSCAPS2_HINTANTIALIASING) strcat(eb, \"HINTANTIALIASING+\");\n\tif (c & DDSCAPS2_CUBEMAP) strcat(eb, \"CUBEMAP+\");\n\tif (c & DDSCAPS2_CUBEMAP_POSITIVEX) strcat(eb, \"CUBEMAP_POSITIVEX+\");\n\tif (c & DDSCAPS2_CUBEMAP_NEGATIVEX) strcat(eb, \"CUBEMAP_NEGATIVEX+\");\n\tif (c & DDSCAPS2_CUBEMAP_POSITIVEY) strcat(eb, \"CUBEMAP_POSITIVEY+\");\n\tif (c & DDSCAPS2_CUBEMAP_NEGATIVEY) strcat(eb, \"CUBEMAP_NEGATIVEY+\");\n\tif (c & DDSCAPS2_CUBEMAP_POSITIVEZ) strcat(eb, \"CUBEMAP_POSITIVEZ+\");\n\tif (c & DDSCAPS2_CUBEMAP_NEGATIVEZ) strcat(eb, \"CUBEMAP_NEGATIVEZ+\");\n\tif (c & DDSCAPS2_MIPMAPSUBLEVEL) strcat(eb, \"MIPMAPSUBLEVEL+\");\n\tif (c & DDSCAPS2_D3DTEXTUREMANAGE) strcat(eb, \"D3DTEXTUREMANAGE+\");\n\tif (c & DDSCAPS2_DONOTPERSIST) strcat(eb, \"DONOTPERSIST+\");\n\tif (c & DDSCAPS2_STEREOSURFACELEFT) strcat(eb, \"STEREOSURFACELEFT+\");\n\tif (c & DDSCAPS2_VOLUME) strcat(eb, \"VOLUME+\");\n\tif (c & DDSCAPS2_NOTUSERLOCKABLE) strcat(eb, \"NOTUSERLOCKABLE+\");\n\tif (c & DDSCAPS2_POINTS) strcat(eb, \"POINTS+\");\n\tif (c & DDSCAPS2_RTPATCHES) strcat(eb, \"RTPATCHES+\");\n\tif (c & DDSCAPS2_NPATCHES) strcat(eb, \"NPATCHES+\");\n\tif (c & DDSCAPS2_RESERVED3) strcat(eb, \"RESERVED3+\");\n\tif (c & DDSCAPS2_DISCARDBACKBUFFER) strcat(eb, \"DISCARDBACKBUFFER+\");\n\tif (c & DDSCAPS2_ENABLEALPHACHANNEL) strcat(eb, \"ENABLEALPHACHANNEL+\");\n\tif (c & DDSCAPS2_EXTENDEDFORMATPRIMARY) strcat(eb, \"EXTENDEDFORMATPRIMARY+\");\n\tif (c & DDSCAPS2_ADDITIONALPRIMARY) strcat(eb, \"ADDITIONALPRIMARY+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDSCAPS2_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nchar *ExplainDDSCaps3(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"DDSCAPS3_\");\n\tif (c & DDSCAPS3_MULTISAMPLE_MASK) strcat(eb, \"DDSCAPS3_MULTISAMPLE_MASK+\");\n\tif (c & DDSCAPS3_RESERVED1) strcat(eb, \"DDSCAPS3_RESERVED1+\");\n\tif (c & DDSCAPS3_RESERVED2) strcat(eb, \"DDSCAPS3_RESERVED2+\");\n\tif (c & DDSCAPS3_LIGHTWEIGHTMIPMAP) strcat(eb, \"DDSCAPS3_LIGHTWEIGHTMIPMAP+\");\n\tif (c & DDSCAPS3_AUTOGENMIPMAP) strcat(eb, \"DDSCAPS3_AUTOGENMIPMAP+\");\n\tif (c & DDSCAPS3_DMAP) strcat(eb, \"DDSCAPS3_DMAP+\");\n\tif (c & DDSCAPS3_MULTISAMPLE_QUALITY_MASK) {\n\t\tDWORD dwQuality;\n\t\tchar sQuality[32];\n\t\tdwQuality = (c & DDSCAPS3_MULTISAMPLE_QUALITY_MASK) >> DDSCAPS3_MULTISAMPLE_QUALITY_SHIFT;\n\t\tsprintf(sQuality, \"QUALITY(%d)+\", dwQuality);\n\t\tstrcat(eb, sQuality);\n\t}\n\tl=strlen(eb);\n\tif (l>strlen(\"DDSCAPS3_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nchar *ExplainDDSCaps4(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"DDSCAPS4_\");\n\t// insert here ....\n\t// if (c & DDSCAPS4_XXX) strcat(eb, \"XXX+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDSCAPS4_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nchar *ExplainDDDCaps(DWORD c)\n{\n\tstatic char eb[512];\n\tunsigned int l;\n\tstrcpy(eb,\"DDCAPS_\");\n\tif (c & DDCAPS_3D) strcat(eb, \"3D+\");\n\tif (c & DDCAPS_ALIGNBOUNDARYDEST) strcat(eb, \"ALIGNBOUNDARYDEST+\");\n\tif (c & DDCAPS_ALIGNSIZEDEST) strcat(eb, \"ALIGNSIZEDEST+\");\n\tif (c & DDCAPS_ALIGNBOUNDARYSRC) strcat(eb, \"ALIGNBOUNDARYSRC+\");\n\tif (c & DDCAPS_ALIGNSIZESRC) strcat(eb, \"ALIGNSIZESRC+\");\n\tif (c & DDCAPS_ALIGNSTRIDE) strcat(eb, \"ALIGNSTRIDE+\");\n\tif (c & DDCAPS_BLT) strcat(eb, \"BLT+\");\n\tif (c & DDCAPS_BLTQUEUE) strcat(eb, \"BLTQUEUE+\");\n\tif (c & DDCAPS_BLTFOURCC) strcat(eb, \"BLTFOURCC+\");\n\tif (c & DDCAPS_BLTSTRETCH) strcat(eb, \"BLTSTRETCH+\");\n\tif (c & DDCAPS_GDI) strcat(eb, \"GDI+\");\n\tif (c & DDCAPS_OVERLAY) strcat(eb, \"OVERLAY+\");\n\tif (c & DDCAPS_OVERLAYCANTCLIP) strcat(eb, \"OVERLAYCANTCLIP+\");\n\tif (c & DDCAPS_OVERLAYFOURCC) strcat(eb, \"OVERLAYFOURCC+\");\n\tif (c & DDCAPS_OVERLAYSTRETCH) strcat(eb, \"OVERLAYSTRETCH+\");\n\tif (c & DDCAPS_PALETTE) strcat(eb, \"PALETTE+\");\n\tif (c & DDCAPS_PALETTEVSYNC) strcat(eb, \"PALETTEVSYNC+\");\n\tif (c & DDCAPS_READSCANLINE) strcat(eb, \"READSCANLINE+\");\n\tif (c & DDCAPS_RESERVED1) strcat(eb, \"RESERVED1+\");\n\tif (c & DDCAPS_VBI) strcat(eb, \"VBI+\");\n\tif (c & DDCAPS_ZBLTS) strcat(eb, \"ZBLTS+\");\n\tif (c & DDCAPS_ZOVERLAYS) strcat(eb, \"ZOVERLAYS+\");\n\tif (c & DDCAPS_COLORKEY) strcat(eb, \"COLORKEY+\");\n\tif (c & DDCAPS_ALPHA) strcat(eb, \"ALPHA+\");\n\tif (c & DDCAPS_COLORKEYHWASSIST) strcat(eb, \"COLORKEYHWASSIST+\");\n\tif (c & DDCAPS_NOHARDWARE) strcat(eb, \"NOHARDWARE+\");\n\tif (c & DDCAPS_BLTCOLORFILL) strcat(eb, \"BLTCOLORFILL+\");\n\tif (c & DDCAPS_BANKSWITCHED) strcat(eb, \"BANKSWITCHED+\");\n\tif (c & DDCAPS_BLTDEPTHFILL) strcat(eb, \"BLTDEPTHFILL+\");\n\tif (c & DDCAPS_CANCLIP) strcat(eb, \"CANCLIP+\");\n\tif (c & DDCAPS_CANCLIPSTRETCHED) strcat(eb, \"CANCLIPSTRETCHED+\");\n\tif (c & DDCAPS_CANBLTSYSMEM) strcat(eb, \"CANBLTSYSMEM+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDCAPS_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nchar *ExplainDDDCaps2(DWORD c)\n{\n\tstatic char eb[512];\n\tunsigned int l;\n\tstrcpy(eb,\"DDCAPS2_\");\n\tif (c & DDCAPS2_CERTIFIED) strcat(eb, \"CERTIFIED+\");\n\tif (c & DDCAPS2_NO2DDURING3DSCENE) strcat(eb, \"NO2DDURING3DSCENE+\");\n\tif (c & DDCAPS2_VIDEOPORT) strcat(eb, \"VIDEOPORT+\");\n\tif (c & DDCAPS2_AUTOFLIPOVERLAY) strcat(eb, \"AUTOFLIPOVERLAY+\");\n\tif (c & DDCAPS2_CANBOBINTERLEAVED) strcat(eb, \"CANBOBINTERLEAVED+\");\n\tif (c & DDCAPS2_CANBOBNONINTERLEAVED) strcat(eb, \"CANBOBNONINTERLEAVED+\");\n\tif (c & DDCAPS2_COLORCONTROLOVERLAY) strcat(eb, \"COLORCONTROLOVERLAY+\");\n\tif (c & DDCAPS2_COLORCONTROLPRIMARY) strcat(eb, \"COLORCONTROLPRIMARY+\");\n\tif (c & DDCAPS2_CANDROPZ16BIT) strcat(eb, \"CANDROPZ16BIT+\");\n\tif (c & DDCAPS2_NONLOCALVIDMEM) strcat(eb, \"NONLOCALVIDMEM+\");\n\tif (c & DDCAPS2_NONLOCALVIDMEMCAPS) strcat(eb, \"NONLOCALVIDMEMCAPS+\");\n\tif (c & DDCAPS2_NOPAGELOCKREQUIRED) strcat(eb, \"NOPAGELOCKREQUIRED+\");\n\tif (c & DDCAPS2_WIDESURFACES) strcat(eb, \"WIDESURFACES+\");\n\tif (c & DDCAPS2_CANFLIPODDEVEN) strcat(eb, \"CANFLIPODDEVEN+\");\n\tif (c & DDCAPS2_CANBOBHARDWARE) strcat(eb, \"CANBOBHARDWARE+\");\n\tif (c & DDCAPS2_COPYFOURCC) strcat(eb, \"COPYFOURCC+\");\n\tif (c & DDCAPS2_PRIMARYGAMMA) strcat(eb, \"PRIMARYGAMMA+\");\n\tif (c & DDCAPS2_CANRENDERWINDOWED) strcat(eb, \"CANRENDERWINDOWED+\");\n\tif (c & DDCAPS2_CANCALIBRATEGAMMA) strcat(eb, \"CANCALIBRATEGAMMA+\");\n\tif (c & DDCAPS2_FLIPINTERVAL) strcat(eb, \"FLIPINTERVAL+\");\n\tif (c & DDCAPS2_FLIPNOVSYNC) strcat(eb, \"FLIPNOVSYNC+\");\n\tif (c & DDCAPS2_CANMANAGETEXTURE) strcat(eb, \"CANMANAGETEXTURE+\");\n\tif (c & DDCAPS2_TEXMANINNONLOCALVIDMEM) strcat(eb, \"TEXMANINNONLOCALVIDMEM+\");\n\tif (c & DDCAPS2_STEREO) strcat(eb, \"STEREO+\");\n\tif (c & DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL) strcat(eb, \"SYSTONONLOCAL_AS_SYSTOLOCAL+\");\n\tif (c & DDCAPS2_RESERVED1) strcat(eb, \"RESERVED1/PUREHAL+\");\n\tif (c & DDCAPS2_CANMANAGERESOURCE) strcat(eb, \"CANMANAGERESOURCE+\");\n\tif (c & DDCAPS2_DYNAMICTEXTURES) strcat(eb, \"DYNAMICTEXTURES+\");\n\tif (c & DDCAPS2_CANAUTOGENMIPMAP) strcat(eb, \"CANAUTOGENMIPMAP+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDCAPS2_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nchar *ExplainDDFXALPHACaps(DWORD c)\n{\n\tstatic char eb[512];\n\tunsigned int l;\n\tstrcpy(eb,\"DDFXALPHACAPS_\");\n\tif (c & DDFXALPHACAPS_BLTALPHAEDGEBLEND) strcat(eb, \"BLTALPHAEDGEBLEND+\");\n\tif (c & DDFXALPHACAPS_BLTALPHAPIXELS) strcat(eb, \"BLTALPHAPIXELS+\");\n\tif (c & DDFXALPHACAPS_BLTALPHAPIXELSNEG) strcat(eb, \"BLTALPHAPIXELSNEG+\");\n\tif (c & DDFXALPHACAPS_BLTALPHASURFACES) strcat(eb, \"BLTALPHASURFACES+\");\n\tif (c & DDFXALPHACAPS_BLTALPHASURFACESNEG) strcat(eb, \"BLTALPHASURFACESNEG+\");\n\tif (c & DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND) strcat(eb, \"OVERLAYALPHAEDGEBLEND+\");\n\tif (c & DDFXALPHACAPS_OVERLAYALPHAPIXELS) strcat(eb, \"OVERLAYALPHAPIXELS+\");\n\tif (c & DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG) strcat(eb, \"OVERLAYALPHAPIXELSNEG+\");\n\tif (c & DDFXALPHACAPS_OVERLAYALPHASURFACES) strcat(eb, \"OVERLAYALPHASURFACES+\");\n\tif (c & DDFXALPHACAPS_OVERLAYALPHASURFACESNEG) strcat(eb, \"OVERLAYALPHASURFACESNEG+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDFXALPHACAPS_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nchar *ExplainDDFXCaps(DWORD c)\n{\n\tstatic char eb[512];\n\tunsigned int l;\n\tstrcpy(eb,\"DDFXCAPS_\");\n\tif (c & DDFXCAPS_BLTARITHSTRETCHY) strcat(eb, \"BLTARITHSTRETCHY+\");\n\tif (c & DDFXCAPS_BLTARITHSTRETCHYN) strcat(eb, \"BLTARITHSTRETCHYN+\");\n\tif (c & DDFXCAPS_BLTMIRRORLEFTRIGHT) strcat(eb, \"BLTMIRRORLEFTRIGHT+\");\n\tif (c & DDFXCAPS_BLTMIRRORUPDOWN) strcat(eb, \"BLTMIRRORUPDOWN+\");\n\tif (c & DDFXCAPS_BLTROTATION) strcat(eb, \"BLTROTATION+\");\n\tif (c & DDFXCAPS_BLTROTATION90) strcat(eb, \"BLTROTATION90+\");\n\tif (c & DDFXCAPS_BLTSHRINKX) strcat(eb, \"BLTSHRINKX+\");\n\tif (c & DDFXCAPS_BLTSHRINKXN) strcat(eb, \"BLTSHRINKXN+\");\n\tif (c & DDFXCAPS_BLTSHRINKY) strcat(eb, \"BLTSHRINKY+\");\n\tif (c & DDFXCAPS_BLTSHRINKYN) strcat(eb, \"BLTSHRINKYN+\");\n\tif (c & DDFXCAPS_BLTSTRETCHX) strcat(eb, \"BLTSTRETCHX+\");\n\tif (c & DDFXCAPS_BLTSTRETCHXN) strcat(eb, \"BLTSTRETCHXN+\");\n\tif (c & DDFXCAPS_BLTSTRETCHY) strcat(eb, \"BLTSTRETCHY+\");\n\tif (c & DDFXCAPS_BLTSTRETCHYN) strcat(eb, \"BLTSTRETCHYN+\");\n\tif (c & DDFXCAPS_OVERLAYARITHSTRETCHY) strcat(eb, \"OVERLAYARITHSTRETCHY+\");\n\tif (c & DDFXCAPS_OVERLAYARITHSTRETCHYN) strcat(eb, \"OVERLAYARITHSTRETCHYN+\");\n\tif (c & DDFXCAPS_OVERLAYSHRINKX) strcat(eb, \"OVERLAYSHRINKX+\");\n\tif (c & DDFXCAPS_OVERLAYSHRINKXN) strcat(eb, \"OVERLAYSHRINKXN+\");\n\tif (c & DDFXCAPS_OVERLAYSHRINKY) strcat(eb, \"OVERLAYSHRINKY+\");\n\tif (c & DDFXCAPS_OVERLAYSHRINKYN) strcat(eb, \"OVERLAYSHRINKYN+\");\n\tif (c & DDFXCAPS_OVERLAYSTRETCHX) strcat(eb, \"OVERLAYSTRETCHX+\");\n\tif (c & DDFXCAPS_OVERLAYSTRETCHXN) strcat(eb, \"OVERLAYSTRETCHXN+\");\n\tif (c & DDFXCAPS_OVERLAYSTRETCHY) strcat(eb, \"OVERLAYSTRETCHY+\");\n\tif (c & DDFXCAPS_OVERLAYSTRETCHYN) strcat(eb, \"OVERLAYSTRETCHYN+\");\n\tif (c & DDFXCAPS_OVERLAYMIRRORLEFTRIGHT) strcat(eb, \"OVERLAYMIRRORLEFTRIGHT+\");\n\tif (c & DDFXCAPS_OVERLAYMIRRORUPDOWN) strcat(eb, \"OVERLAYMIRRORUPDOWN+\");\n\tif (c & DDFXCAPS_OVERLAYDEINTERLACE) strcat(eb, \"OVERLAYDEINTERLACE+\");\n\tif (c & DDFXCAPS_BLTALPHA) strcat(eb, \"BLTALPHA+\");\n\tif (c & DDFXCAPS_BLTFILTER) strcat(eb, \"BLTFILTER+\");\n\tif (c & DDFXCAPS_OVERLAYALPHA) strcat(eb, \"OVERLAYALPHA+\");\n\tif (c & DDFXCAPS_BLTARITHSTRETCHY) strcat(eb, \"BLTARITHSTRETCHY+\");\n\tif (c & DDFXCAPS_OVERLAYFILTER) strcat(eb, \"OVERLAYFILTER+\");\n\tif (c & DDFXCAPS_OVERLAYARITHSTRETCHY) strcat(eb, \"OVERLAYARITHSTRETCHY+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDFXCAPS_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nchar *ExplainDDPalCaps(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"DDPCAPS_\");\n\tif (c & DDPCAPS_ALPHA) strcat(eb, \"ALPHA+\");\n\tif (c & DDPCAPS_PRIMARYSURFACE) strcat(eb, \"PRIMARYSURFACE+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDPCAPS_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nchar *ExplainDDCKeyCaps(DWORD c)\n{\n\tstatic char eb[512];\n\tunsigned int l;\n\tstrcpy(eb,\"DDCKEYCAPS_\");\n\tif (c & DDCKEYCAPS_DESTBLT) strcat(eb, \"DESTBLT+\");\n\tif (c & DDCKEYCAPS_DESTBLTCLRSPACE) strcat(eb, \"DESTBLTCLRSPACE+\");\n\tif (c & DDCKEYCAPS_DESTBLTCLRSPACEYUV) strcat(eb, \"DESTBLTCLRSPACEYUV+\");\n\tif (c & DDCKEYCAPS_DESTBLTYUV) strcat(eb, \"DESTBLTYUV+\");\n\tif (c & DDCKEYCAPS_DESTOVERLAY) strcat(eb, \"DESTOVERLAY+\");\n\tif (c & DDCKEYCAPS_DESTOVERLAYCLRSPACE) strcat(eb, \"DESTOVERLAYCLRSPACE+\");\n\tif (c & DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV) strcat(eb, \"DESTOVERLAYCLRSPACEYUV+\");\n\tif (c & DDCKEYCAPS_DESTOVERLAYONEACTIVE) strcat(eb, \"DESTOVERLAYONEACTIVE+\");\n\tif (c & DDCKEYCAPS_DESTOVERLAYYUV) strcat(eb, \"DESTOVERLAYYUV+\");\n\tif (c & DDCKEYCAPS_SRCBLT) strcat(eb, \"SRCBLT+\");\n\tif (c & DDCKEYCAPS_SRCBLTCLRSPACE) strcat(eb, \"SRCBLTCLRSPACE+\");\n\tif (c & DDCKEYCAPS_SRCBLTCLRSPACEYUV) strcat(eb, \"SRCBLTCLRSPACEYUV+\");\n\tif (c & DDCKEYCAPS_SRCBLTYUV) strcat(eb, \"SRCBLTYUV+\");\n\tif (c & DDCKEYCAPS_SRCOVERLAY) strcat(eb, \"SRCOVERLAY+\");\n\tif (c & DDCKEYCAPS_SRCOVERLAYCLRSPACE) strcat(eb, \"SRCOVERLAYCLRSPACE+\");\n\tif (c & DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV) strcat(eb, \"SRCOVERLAYCLRSPACEYUV+\");\n\tif (c & DDCKEYCAPS_SRCOVERLAYONEACTIVE) strcat(eb, \"SRCOVERLAYONEACTIVE+\");\n\tif (c & DDCKEYCAPS_SRCOVERLAYYUV) strcat(eb, \"SRCOVERLAYYUV+\");\n\tif (c & DDCKEYCAPS_NOCOSTOVERLAY) strcat(eb, \"NOCOSTOVERLAY+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDCKEYCAPS_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nchar *ExplainCoopFlags(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"DDSCL_\");\n\tif (c & DDSCL_FULLSCREEN) strcat(eb, \"FULLSCREEN+\");\n\tif (c & DDSCL_ALLOWREBOOT) strcat(eb, \"ALLOWREBOOT+\");\n\tif (c & DDSCL_NOWINDOWCHANGES) strcat(eb, \"NOWINDOWCHANGES+\");\n\tif (c & DDSCL_NORMAL) strcat(eb, \"NORMAL+\");\n\tif (c & DDSCL_EXCLUSIVE) strcat(eb, \"EXCLUSIVE+\");\n\tif (c & DDSCL_ALLOWMODEX) strcat(eb, \"ALLOWMODEX+\");\n\tif (c & DDSCL_SETFOCUSWINDOW) strcat(eb, \"SETFOCUSWINDOW+\");\n\tif (c & DDSCL_SETDEVICEWINDOW) strcat(eb, \"SETDEVICEWINDOW+\");\n\tif (c & DDSCL_CREATEDEVICEWINDOW) strcat(eb, \"CREATEDEVICEWINDOW+\");\n\tif (c & DDSCL_MULTITHREADED) strcat(eb, \"MULTITHREADED+\");\n\tif (c & DDSCL_FPUSETUP) strcat(eb, \"FPUSETUP+\");\n\tif (c & DDSCL_FPUPRESERVE) strcat(eb, \"FPUPRESERVE+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDSCL_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nchar *ExplainPixelFormatFlags(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"DDPF_\");\n\tif (c & DDPF_ALPHAPIXELS) strcat(eb, \"ALPHAPIXELS+\");\n\tif (c & DDPF_ALPHA) strcat(eb, \"ALPHA+\");\n\tif (c & DDPF_FOURCC) strcat(eb, \"FOURCC+\");\n\tif (c & DDPF_PALETTEINDEXED4) strcat(eb, \"PALETTEINDEXED4+\");\n\tif (c & DDPF_PALETTEINDEXEDTO8) strcat(eb, \"PALETTEINDEXEDTO8+\");\n\tif (c & DDPF_PALETTEINDEXED8) strcat(eb, \"PALETTEINDEXED8+\");\n\tif (c & DDPF_RGB) strcat(eb, \"RGB+\");\n\tif (c & DDPF_COMPRESSED) strcat(eb, \"COMPRESSED+\");\n\tif (c & DDPF_RGBTOYUV) strcat(eb, \"RGBTOYUV+\");\n\tif (c & DDPF_YUV) strcat(eb, \"YUV+\");\n\tif (c & DDPF_ZBUFFER) strcat(eb, \"ZBUFFER+\");\n\tif (c & DDPF_PALETTEINDEXED1) strcat(eb, \"PALETTEINDEXED1+\");\n\tif (c & DDPF_PALETTEINDEXED2) strcat(eb, \"PALETTEINDEXED2+\");\n\tif (c & DDPF_ZPIXELS) strcat(eb, \"ZPIXELS+\");\n\tif (c & DDPF_STENCILBUFFER) strcat(eb, \"STENCILBUFFER+\");\n\tif (c & DDPF_ALPHAPREMULT) strcat(eb, \"ALPHAPREMULT+\");\n\tif (c & DDPF_LUMINANCE) strcat(eb, \"LUMINANCE+\");\n\tif (c & DDPF_BUMPLUMINANCE) strcat(eb, \"BUMPLUMINANCE+\");\n\tif (c & DDPF_BUMPDUDV) strcat(eb, \"BUMPDUDV+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDPF_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nchar *ExplainFlipFlags(DWORD c)\n{\n\tstatic char eb[512];\n\tunsigned int l;\n\tstrcpy(eb,\"DDFLIP_\");\n\tif (c & DDFLIP_WAIT) strcat(eb, \"WAIT+\");\n\tif (c & DDFLIP_EVEN) strcat(eb, \"EVEN+\");\n\tif (c & DDFLIP_ODD) strcat(eb, \"ODD+\");\n\tif (c & DDFLIP_NOVSYNC) strcat(eb, \"NOVSYNC+\");\n\tif (c & DDFLIP_INTERVAL3) strcat(eb, \"INTERVAL3+\");\n\telse if (c & DDFLIP_INTERVAL2) strcat(eb, \"INTERVAL2+\");\n\tif (c & DDFLIP_INTERVAL4) strcat(eb, \"INTERVAL4+\");\n\tif (c & DDFLIP_STEREO) strcat(eb, \"STEREO+\");\n\tif (c & DDFLIP_DONOTWAIT) strcat(eb, \"DONOTWAIT+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDFLIP_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nchar *ExplainBltFlags(DWORD c)\n{\n\tstatic char eb[512];\n\tunsigned int l;\n\tstrcpy(eb,\"DDBLT_\");\n\tif (c & DDBLT_ALPHADEST) strcat(eb, \"ALPHADEST+\");\n\tif (c & DDBLT_ALPHADESTCONSTOVERRIDE) strcat(eb, \"ALPHADESTCONSTOVERRIDE+\");\n\tif (c & DDBLT_ALPHADESTNEG) strcat(eb, \"ALPHADESTNEG+\");\n\tif (c & DDBLT_ALPHADESTSURFACEOVERRIDE) strcat(eb, \"ALPHADESTSURFACEOVERRIDE+\");\n\tif (c & DDBLT_ALPHAEDGEBLEND) strcat(eb, \"ALPHAEDGEBLEND+\");\n\tif (c & DDBLT_ALPHASRC) strcat(eb, \"ALPHASRC+\");\n\tif (c & DDBLT_ALPHASRCCONSTOVERRIDE) strcat(eb, \"ALPHASRCCONSTOVERRIDE+\");\n\tif (c & DDBLT_ALPHASRCNEG) strcat(eb, \"ALPHASRCNEG+\");\n\tif (c & DDBLT_ALPHASRCSURFACEOVERRIDE) strcat(eb, \"ALPHASRCSURFACEOVERRIDE+\");\n\tif (c & DDBLT_ASYNC) strcat(eb, \"ASYNC+\");\n\tif (c & DDBLT_COLORFILL) strcat(eb, \"COLORFILL+\");\n\tif (c & DDBLT_DDFX) strcat(eb, \"DDFX+\");\n\tif (c & DDBLT_DDROPS) strcat(eb, \"DDROPS+\");\n\tif (c & DDBLT_KEYDEST) strcat(eb, \"KEYDEST+\");\n\tif (c & DDBLT_KEYDESTOVERRIDE) strcat(eb, \"KEYDESTOVERRIDE+\");\n\tif (c & DDBLT_KEYSRC) strcat(eb, \"KEYSRC+\");\n\tif (c & DDBLT_KEYSRCOVERRIDE) strcat(eb, \"KEYSRCOVERRIDE+\");\n\tif (c & DDBLT_ROP) strcat(eb, \"ROP+\");\n\tif (c & DDBLT_ROTATIONANGLE) strcat(eb, \"ROTATIONANGLE+\");\n\tif (c & DDBLT_ZBUFFER) strcat(eb, \"ZBUFFER+\");\n\tif (c & DDBLT_ZBUFFERDESTCONSTOVERRIDE) strcat(eb, \"ZBUFFERDESTCONSTOVERRIDE+\");\n\tif (c & DDBLT_ZBUFFERDESTOVERRIDE) strcat(eb, \"ZBUFFERDESTOVERRIDE+\");\n\tif (c & DDBLT_ZBUFFERSRCCONSTOVERRIDE) strcat(eb, \"ZBUFFERSRCCONSTOVERRIDE+\");\n\tif (c & DDBLT_ZBUFFERSRCOVERRIDE) strcat(eb, \"ZBUFFERSRCOVERRIDE+\");\n\tif (c & DDBLT_WAIT) strcat(eb, \"WAIT+\");\n\tif (c & DDBLT_DEPTHFILL) strcat(eb, \"DEPTHFILL+\");\n\tif (c & DDBLT_DONOTWAIT) strcat(eb, \"DONOTWAIT+\");\n\tif (c & DDBLT_ROTATIONANGLE) strcat(eb, \"ROTATIONANGLE+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDBLT_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nchar *ExplainBltFastFlags(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"DDBLTFAST_\");\n\tif (!(c & (DDBLTFAST_SRCCOLORKEY|DDBLTFAST_DESTCOLORKEY))) strcat(eb, \"NOCOLORKEY+\");\n\tif (c & DDBLTFAST_SRCCOLORKEY) strcat(eb, \"SRCCOLORKEY+\");\n\tif (c & DDBLTFAST_DESTCOLORKEY) strcat(eb, \"DESTCOLORKEY+\");\n\tif (c & DDBLTFAST_WAIT) strcat(eb, \"WAIT+\");\n\tif (c & DDBLTFAST_DONOTWAIT) strcat(eb, \"DONOTWAIT+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDBLTFAST_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\n#define DDPCAPS_INITIALIZE_LEGACY 0x00000008l\n\nchar *ExplainCreatePaletteFlags(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"DDPCAPS_\");\n\tif (c & DDPCAPS_4BIT) strcat(eb, \"4BIT+\");\n\tif (c & DDPCAPS_8BITENTRIES) strcat(eb, \"8BITENTRIES+\");\n\tif (c & DDPCAPS_8BIT) strcat(eb, \"8BIT+\");\n\t//if (c & DDPCAPS_INITIALIZE) strcat(eb, \"INITIALIZE+\");\n\t// DDPCAPS_INITIALIZE is obsolete and redefined to 0x0, but that is not the legacy value embedded in assembly!\n\tif (c & DDPCAPS_INITIALIZE_LEGACY) strcat(eb, \"INITIALIZE+\");\n\tif (c & DDPCAPS_PRIMARYSURFACE) strcat(eb, \"PRIMARYSURFACE+\");\n\tif (c & DDPCAPS_PRIMARYSURFACELEFT) strcat(eb, \"PRIMARYSURFACELEFT+\");\n\tif (c & DDPCAPS_ALLOW256) strcat(eb, \"ALLOW256+\");\n\tif (c & DDPCAPS_VSYNC) strcat(eb, \"VSYNC+\");\n\tif (c & DDPCAPS_1BIT) strcat(eb, \"1BIT+\");\n\tif (c & DDPCAPS_2BIT) strcat(eb, \"2BIT+\");\n\tif (c & DDPCAPS_ALPHA) strcat(eb, \"ALPHA+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDPCAPS_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nchar *ExplainROP(DWORD c)\n{\n\tstatic char *eb;\n\tswitch(c){\n\t\tcase SRCCOPY: eb=\"SRCCOPY\"; break; \n\t\tcase SRCPAINT: eb=\"SRCPAINT\"; break; \n\t\tcase SRCAND: eb=\"SRCAND\"; break; \n\t\tcase SRCINVERT: eb=\"SRCINVERT\"; break; \n\t\tcase SRCERASE: eb=\"SRCERASE\"; break; \n\t\tcase NOTSRCCOPY: eb=\"NOTSRCCOPY\"; break; \n\t\tcase NOTSRCERASE: eb=\"NOTSRCERASE\"; break; \n\t\tcase MERGECOPY: eb=\"MERGECOPY\"; break; \n\t\tcase MERGEPAINT: eb=\"MERGEPAINT\"; break; \n\t\tcase PATCOPY: eb=\"PATCOPY\"; break; \n\t\tcase PATPAINT: eb=\"PATPAINT\"; break; \n\t\tcase PATINVERT: eb=\"PATINVERT\"; break; \n\t\tcase DSTINVERT: eb=\"DSTINVERT\"; break; \n\t\tcase BLACKNESS: eb=\"BLACKNESS\"; break; \n\t\tcase WHITENESS: eb=\"WHITENESS\"; break; \n\t\tcase NOMIRRORBITMAP: eb=\"NOMIRRORBITMAP\"; break; \n\t\tcase CAPTUREBLT: eb=\"CAPTUREBLT\"; break; \n\t\tdefault: eb=\"unknown\"; break; \n\t}\n\treturn(eb);\n}\n\nchar *ExplainLockFlags(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"DDLOCK_\");\n\tif (c & DDLOCK_WAIT) strcat(eb, \"WAIT+\");\n\tif (c & DDLOCK_EVENT) strcat(eb, \"EVENT+\");\n\tif (c & DDLOCK_READONLY) strcat(eb, \"READONLY+\");\n\tif (c & DDLOCK_WRITEONLY) strcat(eb, \"WRITEONLY+\");\n\tif (c & DDLOCK_NOSYSLOCK) strcat(eb, \"NOSYSLOCK+\");\n\tif (c & DDLOCK_NOOVERWRITE) strcat(eb, \"NOOVERWRITE+\");\n\tif (c & DDLOCK_DISCARDCONTENTS) strcat(eb, \"DISCARDCONTENTS+\");\n\tif (c & DDLOCK_DONOTWAIT) strcat(eb, \"DONOTWAIT+\");\n\tif (c & DDLOCK_HASVOLUMETEXTUREBOXRECT) strcat(eb, \"HASVOLUMETEXTUREBOXRECT+\");\n\tif (c & DDLOCK_NODIRTYUPDATE) strcat(eb, \"NODIRTYUPDATE+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDLOCK_\")) eb[l-1]=0; // delete last '+' if any\n\telse strcpy(eb,\"DDLOCK_SURFACEMEMORYPTR\"); // when zero...\n\treturn(eb);\n}\n\nchar *ExplainStyle(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"WS_\");\n\tif (c & WS_BORDER) strcat(eb, \"BORDER+\");\n\tif (c & WS_CAPTION) strcat(eb, \"CAPTION+\");\n\tif (c & WS_CHILD) strcat(eb, \"CHILD+\");\n\tif (c & WS_CLIPCHILDREN) strcat(eb, \"CLIPCHILDREN+\");\n\tif (c & WS_CLIPSIBLINGS) strcat(eb, \"CLIPSIBLINGS+\");\n\tif (c & WS_DISABLED) strcat(eb, \"DISABLED+\");\n\tif (c & WS_DLGFRAME) strcat(eb, \"DLGFRAME+\");\n\tif (c & WS_GROUP) strcat(eb, \"GROUP+\");\n\tif (c & WS_HSCROLL) strcat(eb, \"HSCROLL+\");\n\tif (c & WS_MAXIMIZE) strcat(eb, \"MAXIMIZE+\");\n\tif (c & WS_MAXIMIZEBOX) strcat(eb, \"MAXIMIZEBOX+\");\n\tif (c & WS_MINIMIZE) strcat(eb, \"MINIMIZE+\");\n\tif (c & WS_MINIMIZEBOX) strcat(eb, \"MINIMIZEBOX+\");\n\tif (c & WS_POPUP) strcat(eb, \"POPUP+\");\n\tif (c & WS_SIZEBOX) strcat(eb, \"SIZEBOX+\");\n\tif (c & WS_SYSMENU) strcat(eb, \"SYSMENU+\");\n\tif (c & WS_TABSTOP) strcat(eb, \"TABSTOP+\");\n\tif (c & WS_THICKFRAME) strcat(eb, \"THICKFRAME+\");\n\tif (c & WS_TILED) strcat(eb, \"TILED+\");\n\tif (c & WS_VISIBLE) strcat(eb, \"VISIBLE+\");\n\tif (c & WS_VSCROLL) strcat(eb, \"VSCROLL+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"WS_\")) eb[l-1]=0; // delete last '+' if any\n\telse strcpy(eb,\"WS_OVERLAPPED\"); // when zero ...\n\treturn(eb);\n}\n\nchar *ExplainExStyle(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"WS_EX_\");\n\tif (c & WS_EX_ACCEPTFILES) strcat(eb, \"ACCEPTFILES+\");\n\tif (c & WS_EX_APPWINDOW) strcat(eb, \"APPWINDOW+\");\n\tif (c & WS_EX_CLIENTEDGE) strcat(eb, \"CLIENTEDGE+\");\n\t//if (c & WS_EX_COMPOSITED) strcat(eb, \"COMPOSITED+\");\n\tif (c & WS_EX_CONTEXTHELP) strcat(eb, \"CONTEXTHELP+\");\n\tif (c & WS_EX_CONTROLPARENT) strcat(eb, \"CONTROLPARENT+\");\n\tif (c & WS_EX_DLGMODALFRAME) strcat(eb, \"DLGMODALFRAME+\");\n\t//if (c & WS_EX_LAYERED) strcat(eb, \"LAYERED+\");\n\tif (c & WS_EX_LAYOUTRTL) strcat(eb, \"LAYOUTRTL+\");\n\tif (c & WS_EX_LEFT) strcat(eb, \"LEFT+\");\n\tif (c & WS_EX_LEFTSCROLLBAR) strcat(eb, \"LEFTSCROLLBAR+\");\n\tif (c & WS_EX_LTRREADING) strcat(eb, \"LTRREADING+\");\n\tif (c & WS_EX_MDICHILD) strcat(eb, \"MDICHILD+\");\n\t//if (c & WS_EX_NOACTIVATE) strcat(eb, \"NOACTIVATE+\");\n\tif (c & WS_EX_NOINHERITLAYOUT) strcat(eb, \"NOINHERITLAYOUT+\");\n\tif (c & WS_EX_NOPARENTNOTIFY) strcat(eb, \"NOPARENTNOTIFY+\");\n\tif (c & WS_EX_RIGHT) strcat(eb, \"RIGHT+\");\n\tif (c & WS_EX_RTLREADING) strcat(eb, \"RTLREADING+\");\n\tif (c & WS_EX_STATICEDGE) strcat(eb, \"STATICEDGE+\");\n\tif (c & WS_EX_TOOLWINDOW) strcat(eb, \"TOOLWINDOW+\");\n\tif (c & WS_EX_TOPMOST) strcat(eb, \"TOPMOST+\");\n\tif (c & WS_EX_TRANSPARENT) strcat(eb, \"TRANSPARENT+\");\n\tif (c & WS_EX_WINDOWEDGE) strcat(eb, \"WINDOWEDGE+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"WS_EX_\")) eb[l-1]=0; // delete last '+' if any\n\telse strcpy(eb,\"WS_EX_RIGHTSCROLLBAR\"); // when zero ...\n\treturn(eb);\n}\n\nchar *ExplainShowCmd(int c)\n{\n\tstatic char *eb;\n\tswitch(c)\n\t{\n\tcase SW_HIDE: eb=\"SW_HIDE\"; break; // 0\n\tcase SW_SHOWNORMAL: eb=\"SW_SHOWNORMAL\"; break; // 1\n\tcase SW_SHOWMINIMIZED: eb=\"SW_SHOWMINIMIZED\"; break; // 2\n\tcase SW_MAXIMIZE: eb=\"SW_MAXIMIZE\"; break; // 3\n\t//case SW_SHOWMAXIMIZED: eb=\"SW_SHOWMAXIMIZED\"; break; // 3 = SW_MAXIMIZE\n\tcase SW_SHOWNOACTIVATE: eb=\"SW_SHOWNOACTIVATE\"; break; // 4\n\tcase SW_SHOW: eb=\"SW_SHOW\"; break; // 5\n\tcase SW_MINIMIZE: eb=\"SW_MINIMIZE\"; break; // 6\n\tcase SW_SHOWMINNOACTIVE: eb=\"SW_SHOWMINNOACTIVE\"; break; // 7\n\tcase SW_SHOWNA: eb=\"SW_SHOWNA\"; break; // 8\n\tcase SW_RESTORE: eb=\"SW_RESTORE\"; break; // 9\n\tcase SW_SHOWDEFAULT: eb=\"SW_SHOWDEFAULT\"; break; // 10\n\tcase SW_FORCEMINIMIZE: eb=\"SW_FORCEMINIMIZE\"; break; // 11\n\tdefault: eb=\"unknown\"; break;\n\t}\n\treturn(eb);\n}\n\nchar *ExplainBltStatus(DWORD c)\n{\n\tstatic char *eb;\n\tswitch(c)\n\t{\n\tcase DDGBS_CANBLT:\t\teb=\"DDGBS_CANBLT\"; break;\n\tcase DDGBS_ISBLTDONE:\teb=\"DDGBS_ISBLTDONE\"; break;\n\tdefault:\t\t\t\teb=\"invalid\"; break;\n\t}\n\treturn(eb);\n}\n\nchar *ExplainFlipStatus(DWORD c)\n{\n\tstatic char *eb;\n\tswitch(c)\n\t{\n\tcase DDGFS_CANFLIP:\t\teb=\"DDGFS_CANFLIP\"; break;\n\tcase DDGFS_ISFLIPDONE:\teb=\"DDGFS_ISFLIPDONE\"; break;\n\tdefault:\t\t\t\teb=\"invalid\"; break;\n\t}\n\treturn(eb);\n}\n\nchar *ExplainWinMessage(DWORD c)\n{\n\tstatic char *eb;\n\tswitch(c)\n\t{\n\t\tcase WM_NULL: \t\t \t\t\teb=\"WM_NULL\"; break;\n\t\tcase WM_CREATE: \t\t \t\teb=\"WM_CREATE\"; break;\n\t\tcase WM_DESTROY: \t\t \t\teb=\"WM_DESTROY\"; break;\n\t\tcase WM_MOVE: \t\t \t\t\teb=\"WM_MOVE\"; break;\n\t\tcase WM_SIZE: \t\t \t\t\teb=\"WM_SIZE\"; break;\n\t\tcase WM_ACTIVATE: \t\t \t\teb=\"WM_ACTIVATE\"; break;\n\t\tcase WM_SETFOCUS: \t\t \t\teb=\"WM_SETFOCUS\"; break;\n\t\tcase WM_KILLFOCUS: \t\t \t\teb=\"WM_KILLFOCUS\"; break;\n\t\tcase WM_ENABLE: \t\t \t\teb=\"WM_ENABLE\"; break;\n\t\tcase WM_SETREDRAW: \t\t \t\teb=\"WM_SETREDRAW\"; break;\n\t\tcase WM_SETTEXT: \t\t \t\teb=\"WM_SETTEXT\"; break;\n\t\tcase WM_GETTEXT: \t\t \t\teb=\"WM_GETTEXT\"; break;\n\t\tcase WM_GETTEXTLENGTH: \t\t \teb=\"WM_GETTEXTLENGTH\"; break;\n\t\tcase WM_PAINT: \t\t \t\t\teb=\"WM_PAINT\"; break;\n\t\tcase WM_CLOSE: \t\t \t\t\teb=\"WM_CLOSE\"; break;\n\t\tcase WM_QUERYENDSESSION: \t\t eb=\"WM_QUERYENDSESSION\"; break;\n\t\tcase WM_QUERYOPEN: \t\t \t\teb=\"WM_QUERYOPEN\"; break;\n\t\tcase WM_ENDSESSION: \t\t \teb=\"WM_ENDSESSION\"; break;\n\t\tcase WM_QUIT: \t\t \t\t\teb=\"WM_QUIT\"; break;\n\t\tcase WM_ERASEBKGND: \t\t \teb=\"WM_ERASEBKGND\"; break;\n\t\tcase WM_SYSCOLORCHANGE: \t\teb=\"WM_SYSCOLORCHANGE\"; break;\n\t\tcase WM_SHOWWINDOW: \t\t \teb=\"WM_SHOWWINDOW\"; break;\n\t\tcase WM_WININICHANGE: \t\t \teb=\"WM_WININICHANGE\"; break;\n\t\tcase WM_DEVMODECHANGE: \t\t \teb=\"WM_DEVMODECHANGE\"; break;\n\t\tcase WM_ACTIVATEAPP: \t\t \teb=\"WM_ACTIVATEAPP\"; break;\n\t\tcase WM_FONTCHANGE: \t\t \teb=\"WM_FONTCHANGE\"; break;\n\t\tcase WM_CANCELMODE: \t\t \teb=\"WM_CANCELMODE\"; break;\n\t\tcase WM_SETCURSOR: \t\t \t\teb=\"WM_SETCURSOR\"; break;\n\t\tcase WM_MOUSEACTIVATE: \t\t \teb=\"WM_MOUSEACTIVATE\"; break;\n\t\tcase WM_CHILDACTIVATE: \t\t \teb=\"WM_CHILDACTIVATE\"; break;\n\t\tcase WM_QUEUESYNC: \t\t \t\teb=\"WM_QUEUESYNC\"; break;\n\t\tcase WM_GETMINMAXINFO: \t\t \teb=\"WM_GETMINMAXINFO\"; break;\n\t\tcase WM_PAINTICON: \t\t \t\teb=\"WM_PAINTICON\"; break;\n\t\tcase WM_ICONERASEBKGND: \t\teb=\"WM_ICONERASEBKGND\"; break;\n\t\tcase WM_NEXTDLGCTL: \t\t \teb=\"WM_NEXTDLGCTL\"; break;\n\t\tcase WM_SPOOLERSTATUS: \t\t \teb=\"WM_SPOOLERSTATUS\"; break;\n\t\tcase WM_DRAWITEM: \t\t \t\teb=\"WM_DRAWITEM\"; break;\n\t\tcase WM_MEASUREITEM: \t\t \teb=\"WM_MEASUREITEM\"; break;\n\t\tcase WM_DELETEITEM: \t\t \teb=\"WM_DELETEITEM\"; break;\n\t\tcase WM_VKEYTOITEM: \t\t \teb=\"WM_VKEYTOITEM\"; break;\n\t\tcase WM_CHARTOITEM: \t\t \teb=\"WM_CHARTOITEM\"; break;\n\t\tcase WM_SETFONT: \t\t \t\teb=\"WM_SETFONT\"; break;\n\t\tcase WM_GETFONT: \t\t \t\teb=\"WM_GETFONT\"; break;\n\t\tcase WM_SETHOTKEY: \t\t \t\teb=\"WM_SETHOTKEY\"; break;\n\t\tcase WM_GETHOTKEY: \t\t \t\teb=\"WM_GETHOTKEY\"; break;\n\t\tcase WM_QUERYDRAGICON: \t\t \teb=\"WM_QUERYDRAGICON\"; break;\n\t\tcase WM_COMPAREITEM: \t\t \teb=\"WM_COMPAREITEM\"; break;\n\t\tcase WM_GETOBJECT: \t\t \t\teb=\"WM_GETOBJECT\"; break;\n\t\tcase WM_COMPACTING: \t\t \teb=\"WM_COMPACTING\"; break;\n\t\tcase WM_COMMNOTIFY: \t\t \teb=\"WM_COMMNOTIFY\"; break;\n\t\tcase WM_WINDOWPOSCHANGING: \t\teb=\"WM_WINDOWPOSCHANGING\"; break;\n\t\tcase WM_WINDOWPOSCHANGED: \t\teb=\"WM_WINDOWPOSCHANGED\"; break;\n\t\tcase WM_POWER: \t\t \t\t\teb=\"WM_POWER\"; break;\n\t\tcase WM_COPYDATA: \t\t \t\teb=\"WM_COPYDATA\"; break;\n\t\tcase WM_CANCELJOURNAL: \t\t \teb=\"WM_CANCELJOURNAL\"; break;\n\t\tcase WM_NOTIFY: \t\t \t\teb=\"WM_NOTIFY\"; break;\n\t\tcase WM_INPUTLANGCHANGEREQUEST: eb=\"WM_INPUTLANGCHANGEREQUEST\"; break;\n\t\tcase WM_INPUTLANGCHANGE: \t\teb=\"WM_INPUTLANGCHANGE\"; break;\n\t\tcase WM_TCARD: \t\t \t\t\teb=\"WM_TCARD\"; break;\n\t\tcase WM_HELP: \t\t \t\t\teb=\"WM_HELP\"; break;\n\t\tcase WM_USERCHANGED: \t\t \teb=\"WM_USERCHANGED\"; break;\n\t\tcase WM_NOTIFYFORMAT: \t\t \teb=\"WM_NOTIFYFORMAT\"; break;\n\t\tcase WM_CONTEXTMENU: \t\t \teb=\"WM_CONTEXTMENU\"; break;\n\t\tcase WM_STYLECHANGING: \t\t \teb=\"WM_STYLECHANGING\"; break;\n\t\tcase WM_STYLECHANGED: \t\t \teb=\"WM_STYLECHANGED\"; break;\n\t\tcase WM_DISPLAYCHANGE: \t\t \teb=\"WM_DISPLAYCHANGE\"; break;\n\t\tcase WM_GETICON: \t\t \t\teb=\"WM_GETICON\"; break;\n\t\tcase WM_SETICON: \t\t \t\teb=\"WM_SETICON\"; break;\n\t\tcase WM_NCCREATE: \t\t \t\teb=\"WM_NCCREATE\"; break;\n\t\tcase WM_NCDESTROY: \t\t \t\teb=\"WM_NCDESTROY\"; break;\n\t\tcase WM_NCCALCSIZE: \t\t \teb=\"WM_NCCALCSIZE\"; break;\n\t\tcase WM_NCHITTEST: \t\t \t\teb=\"WM_NCHITTEST\"; break;\n\t\tcase WM_NCPAINT: \t\t \t\teb=\"WM_NCPAINT\"; break;\n\t\tcase WM_NCACTIVATE: \t\t \teb=\"WM_NCACTIVATE\"; break;\n\t\tcase WM_GETDLGCODE: \t\t \teb=\"WM_GETDLGCODE\"; break;\n#ifndef _WIN32_WCE\n\t\tcase WM_SYNCPAINT: \t\t \t\teb=\"WM_SYNCPAINT\"; break;\n#endif\n\t\tcase WM_NCMOUSEMOVE: \t\t \teb=\"WM_NCMOUSEMOVE\"; break;\n\t\tcase WM_NCLBUTTONDOWN: \t\t \teb=\"WM_NCLBUTTONDOWN\"; break;\n\t\tcase WM_NCLBUTTONUP: \t\t \teb=\"WM_NCLBUTTONUP\"; break;\n\t\tcase WM_NCLBUTTONDBLCLK: \t\teb=\"WM_NCLBUTTONDBLCLK\"; break;\n\t\tcase WM_NCRBUTTONDOWN: \t\t \teb=\"WM_NCRBUTTONDOWN\"; break;\n\t\tcase WM_NCRBUTTONUP: \t\t \teb=\"WM_NCRBUTTONUP\"; break;\n\t\tcase WM_NCRBUTTONDBLCLK: \t\teb=\"WM_NCRBUTTONDBLCLK\"; break;\n\t\tcase WM_NCMBUTTONDOWN: \t\t \teb=\"WM_NCMBUTTONDOWN\"; break;\n\t\tcase WM_NCMBUTTONUP: \t\t \teb=\"WM_NCMBUTTONUP\"; break;\n\t\tcase WM_NCMBUTTONDBLCLK: \t\teb=\"WM_NCMBUTTONDBLCLK\"; break;\n#if(_WIN32_WINNT >= 0x0500)\n\t\tcase WM_NCXBUTTONDOWN: \t\t \teb=\"WM_NCXBUTTONDOWN\"; break;\n\t\tcase WM_NCXBUTTONUP: \t\t \teb=\"WM_NCXBUTTONUP\"; break;\n\t\tcase WM_NCXBUTTONDBLCLK: \t\teb=\"WM_NCXBUTTONDBLCLK\"; break;\n#endif /* _WIN32_WINNT >= 0x0500 */\n#if(_WIN32_WINNT >= 0x0501)\n\t\tcase WM_INPUT: \t\t \t\t\teb=\"WM_INPUT\"; break;\n#endif /* _WIN32_WINNT >= 0x0501 */\n\t\tcase WM_KEYDOWN: \t\t \t\teb=\"WM_KEYDOWN/FIRST\"; break;\n\t\tcase WM_KEYUP: \t\t \t\t\teb=\"WM_KEYUP\"; break;\n\t\tcase WM_CHAR: \t\t \t\t\teb=\"WM_CHAR\"; break;\n\t\tcase WM_DEADCHAR: \t\t \t\teb=\"WM_DEADCHAR\"; break;\n\t\tcase WM_SYSKEYDOWN: \t\t \teb=\"WM_SYSKEYDOWN\"; break;\n\t\tcase WM_SYSKEYUP: \t\t \t\teb=\"WM_SYSKEYUP\"; break;\n\t\tcase WM_SYSCHAR: \t\t \t\teb=\"WM_SYSCHAR\"; break;\n\t\tcase WM_SYSDEADCHAR: \t\t \teb=\"WM_SYSDEADCHAR\"; break;\n#if(WINVER >= 0x0400)\n\t\tcase WM_IME_STARTCOMPOSITION: \teb=\"WM_IME_STARTCOMPOSITION\"; break;\n\t\tcase WM_IME_ENDCOMPOSITION: \teb=\"WM_IME_ENDCOMPOSITION\"; break;\n\t\tcase WM_IME_COMPOSITION: \t\teb=\"WM_IME_COMPOSITION/KEYLAST\"; break;\n#endif /* WINVER >= 0x0400 */\n\t\tcase WM_INITDIALOG: \t\t \teb=\"WM_INITDIALOG\"; break;\n\t\tcase WM_COMMAND: \t\t \t\teb=\"WM_COMMAND\"; break;\n\t\tcase WM_SYSCOMMAND: \t\t \teb=\"WM_SYSCOMMAND\"; break;\n\t\tcase WM_TIMER: \t\t \t\t\teb=\"WM_TIMER\"; break;\n\t\tcase WM_HSCROLL: \t\t \t\teb=\"WM_HSCROLL\"; break;\n\t\tcase WM_VSCROLL: \t\t \t\teb=\"WM_VSCROLL\"; break;\n\t\tcase WM_INITMENU: \t\t \t\teb=\"WM_INITMENU\"; break;\n\t\tcase WM_INITMENUPOPUP: \t\t \teb=\"WM_INITMENUPOPUP\"; break;\n\t\tcase WM_MENUSELECT: \t\t \teb=\"WM_MENUSELECT\"; break;\n\t\tcase WM_MENUCHAR: \t\t \t\teb=\"WM_MENUCHAR\"; break;\n\t\tcase WM_ENTERIDLE: \t\t \t\teb=\"WM_ENTERIDLE\"; break;\n\t\tcase WM_CTLCOLORMSGBOX: \t\teb=\"WM_CTLCOLORMSGBOX\"; break;\n\t\tcase WM_CTLCOLOREDIT: \t\t \teb=\"WM_CTLCOLOREDIT\"; break;\n\t\tcase WM_CTLCOLORLISTBOX: \t\teb=\"WM_CTLCOLORLISTBOX\"; break;\n\t\tcase WM_CTLCOLORBTN: \t\t\teb=\"WM_CTLCOLORBTN\"; break;\n\t\tcase WM_CTLCOLORDLG: \t\t \teb=\"WM_CTLCOLORDLG\"; break;\n\t\tcase WM_CTLCOLORSCROLLBAR: \t\teb=\"WM_CTLCOLORSCROLLBAR\"; break;\n\t\tcase WM_CTLCOLORSTATIC: \t\teb=\"WM_CTLCOLORSTATIC\"; break;\n\t\tcase MN_GETHMENU: \t\t \t\teb=\"MN_GETHMENU\"; break;\n\t\tcase WM_MOUSEFIRST: \t\t \teb=\"WM_MOUSEFIRST/MOUSEMOVE\"; break;\n\t\tcase WM_LBUTTONDOWN: \t\t \teb=\"WM_LBUTTONDOWN\"; break;\n\t\tcase WM_LBUTTONUP: \t\t \t\teb=\"WM_LBUTTONUP\"; break;\n\t\tcase WM_LBUTTONDBLCLK: \t\t \teb=\"WM_LBUTTONDBLCLK\"; break;\n\t\tcase WM_RBUTTONDOWN: \t\t \teb=\"WM_RBUTTONDOWN\"; break;\n\t\tcase WM_RBUTTONUP: \t\t \t\teb=\"WM_RBUTTONUP\"; break;\n\t\tcase WM_RBUTTONDBLCLK: \t\t \teb=\"WM_RBUTTONDBLCLK\"; break;\n\t\tcase WM_MBUTTONDOWN: \t\t \teb=\"WM_MBUTTONDOWN\"; break;\n\t\tcase WM_MBUTTONUP: \t\t \t\teb=\"WM_MBUTTONUP\"; break;\n\t\tcase WM_MBUTTONDBLCLK: \t\t \teb=\"WM_MBUTTONDBLCLK\"; break;\n\t\tcase WM_MOUSEWHEEL: \t\t \teb=\"WM_MOUSEWHEEL\"; break;\n\t\tcase WM_MOUSEHWHEEL: \t\t \teb=\"WM_MOUSEHWHEEL\"; break;\n\t\tcase WM_PARENTNOTIFY: \t\t \teb=\"WM_PARENTNOTIFY\"; break;\n\t\tcase WM_ENTERMENULOOP: \t\t \teb=\"WM_ENTERMENULOOP\"; break;\n\t\tcase WM_EXITMENULOOP: \t\t \teb=\"WM_EXITMENULOOP\"; break;\n#if(WINVER >= 0x0400)\n\t\tcase WM_NEXTMENU: \t\t \t\teb=\"WM_NEXTMENU\"; break;\n\t\tcase WM_SIZING: \t\t \t\teb=\"WM_SIZING\"; break;\n\t\tcase WM_CAPTURECHANGED: \t\teb=\"WM_CAPTURECHANGED\"; break;\n\t\tcase WM_MOVING: \t\t \t\teb=\"WM_MOVING\"; break;\n\t\tcase WM_POWERBROADCAST: \t\teb=\"WM_POWERBROADCAST\"; break;\n\t\tcase WM_DEVICECHANGE: \t\t \teb=\"WM_DEVICECHANGE\"; break;\n#endif /* WINVER >= 0x0400 */\n\t\tcase WM_MDICREATE: \t\t \t\teb=\"WM_MDICREATE\"; break;\n\t\tcase WM_MDIDESTROY: \t\t \teb=\"WM_MDIDESTROY\"; break;\n\t\tcase WM_MDIACTIVATE: \t\t \teb=\"WM_MDIACTIVATE\"; break;\n\t\tcase WM_MDIRESTORE: \t\t \teb=\"WM_MDIRESTORE\"; break;\n\t\tcase WM_MDINEXT: \t\t \t\teb=\"WM_MDINEXT\"; break;\n\t\tcase WM_MDIMAXIMIZE: \t\t \teb=\"WM_MDIMAXIMIZE\"; break;\n\t\tcase WM_MDITILE: \t\t \t\teb=\"WM_MDITILE\"; break;\n\t\tcase WM_MDICASCADE: \t\t \teb=\"WM_MDICASCADE\"; break;\n\t\tcase WM_MDIICONARRANGE: \t\teb=\"WM_MDIICONARRANGE\"; break;\n\t\tcase WM_MDIGETACTIVE: \t\t \teb=\"WM_MDIGETACTIVE\"; break;\n\t\tcase WM_MDISETMENU: \t\t \teb=\"WM_MDISETMENU\"; break;\n\t\tcase WM_ENTERSIZEMOVE: \t\t \teb=\"WM_ENTERSIZEMOVE\"; break;\n\t\tcase WM_EXITSIZEMOVE: \t\t \teb=\"WM_EXITSIZEMOVE\"; break;\n\t\tcase WM_DROPFILES: \t\t \t\teb=\"WM_DROPFILES\"; break;\n\t\tcase WM_MDIREFRESHMENU: \t\teb=\"WM_MDIREFRESHMENU\"; break;\n#if(WINVER >= 0x0400)\n\t\tcase WM_IME_SETCONTEXT: \t\teb=\"WM_IME_SETCONTEXT\"; break;\n\t\tcase WM_IME_NOTIFY: \t\t \teb=\"WM_IME_NOTIFY\"; break;\n\t\tcase WM_IME_CONTROL: \t\t \teb=\"WM_IME_CONTROL\"; break;\n\t\tcase WM_IME_COMPOSITIONFULL: \teb=\"WM_IME_COMPOSITIONFULL\"; break;\n\t\tcase WM_IME_SELECT: \t\t \teb=\"WM_IME_SELECT\"; break;\n\t\tcase WM_IME_CHAR: \t\t \t\teb=\"WM_IME_CHAR\"; break;\n\t\tcase WM_IME_REQUEST: \t\t\teb=\"WM_IME_REQUEST\"; break;\n\t\tcase WM_IME_KEYDOWN: \t\t \teb=\"WM_IME_KEYDOWN\"; break;\n\t\tcase WM_IME_KEYUP: \t\t \t\teb=\"WM_IME_KEYUP\"; break;\n#endif /* WINVER >= 0x0400 */\n\t\tcase WM_MOUSEHOVER:\t\t\t\teb=\"WM_MOUSEHOVER\"; break;\n\t\tcase WM_MOUSELEAVE:\t\t\t\teb=\"WM_MOUSELEAVE\"; break;\n\t\tcase WM_NCMOUSEHOVER:\t\t\teb=\"WM_NCMOUSEHOVER\"; break;\n\t\tcase WM_NCMOUSELEAVE:\t\t\teb=\"WM_NCMOUSELEAVE\"; break;\n\t\tcase WM_DWMCOMPOSITIONCHANGED:\teb=\"WM_DWMCOMPOSITIONCHANGED\"; break;\n\t\tcase WM_DWMNCRENDERINGCHANGED:\teb=\"WM_DWMNCRENDERINGCHANGED\"; break;\n\t\tcase WM_DWMCOLORIZATIONCOLORCHANGED: eb=\"WM_DWMCOLORIZATIONCOLORCHANGED\"; break;\n\t\tcase WM_DWMWINDOWMAXIMIZEDCHANGE: eb=\"WM_DWMWINDOWMAXIMIZEDCHANGE\"; break;\n\t\tcase WM_GETTITLEBARINFOEX:\t\teb=\"WM_GETTITLEBARINFOEX\"; break;\n\t\tcase WM_HANDHELDFIRST:\t\t\teb=\"WM_HANDHELDFIRST\"; break;\n\t\tcase WM_HANDHELDLAST:\t\t\teb=\"WM_HANDHELDLAST\"; break;\n\t\tcase WM_PENWINFIRST:\t\t\teb=\"WM_PENWINFIRST\"; break;\n\t\tdefault:\t\t\t\t\t\teb=\"???\"; break;\n\t}\n\treturn eb;\n}\n\nchar *ExplainResizing(DWORD c)\n{\n\tstatic char *eb;\n\tswitch(c)\n\t{\n\t\tcase SIZE_MAXHIDE: \t\t \t\teb=\"SIZE_MAXHIDE\"; break;\n\t\tcase SIZE_MAXIMIZED: \t\t \teb=\"SIZE_MAXIMIZED\"; break;\n\t\tcase SIZE_MAXSHOW: \t\t \t\teb=\"SIZE_MAXSHOW\"; break;\n\t\tcase SIZE_MINIMIZED: \t\t \teb=\"SIZE_MINIMIZED\"; break;\n\t\tcase SIZE_RESTORED: \t\t \teb=\"SIZE_RESTORED\"; break;\n\t\tdefault:\t\t\t\t\t\teb=\"???\"; break;\n\t}\n\treturn eb;\n}\n\nchar *ExplainDeviceCaps(DWORD c)\n{\n\tstatic char *eb;\n\tswitch(c)\n\t{\n\t\tcase DRIVERVERSION: \t\t \teb=\"DRIVERVERSION\"; break;\n\t\tcase TECHNOLOGY: \t\t \t\teb=\"TECHNOLOGY\"; break;\n\t\tcase HORZSIZE: \t\t \t\t\teb=\"HORZSIZE\"; break;\n\t\tcase VERTSIZE: \t\t \t\t\teb=\"VERTSIZE\"; break;\n\t\tcase HORZRES: \t\t \t\t\teb=\"HORZRES\"; break;\n\t\tcase VERTRES: \t\t \t\t\teb=\"VERTRES\"; break;\n\t\tcase LOGPIXELSX: \t\t \t\teb=\"LOGPIXELSX\"; break;\n\t\tcase LOGPIXELSY: \t\t \t\teb=\"LOGPIXELSY\"; break;\n\t\tcase BITSPIXEL: \t\t \t\teb=\"BITSPIXEL\"; break;\n\t\tcase PLANES: \t\t \t\t\teb=\"PLANES\"; break;\n\t\tcase NUMBRUSHES: \t\t \t\teb=\"NUMBRUSHES\"; break;\n\t\tcase NUMPENS: \t\t \t\t\teb=\"NUMPENS\"; break;\n\t\tcase NUMFONTS: \t\t \t\t\teb=\"NUMFONTS\"; break;\n\t\tcase NUMCOLORS: \t\t \t\teb=\"NUMCOLORS\"; break;\n\t\tcase ASPECTX: \t\t \t\t\teb=\"ASPECTX\"; break;\n\t\tcase ASPECTY: \t\t \t\t\teb=\"ASPECTY\"; break;\n\t\tcase ASPECTXY: \t\t \t\t\teb=\"ASPECTXY\"; break;\n\t\tcase PDEVICESIZE: \t\t \t\teb=\"PDEVICESIZE\"; break;\n\t\tcase CLIPCAPS: \t\t \t\t\teb=\"CLIPCAPS\"; break;\n\t\tcase SIZEPALETTE: \t\t \t\teb=\"SIZEPALETTE\"; break;\n\t\tcase NUMRESERVED: \t\t \t\teb=\"NUMRESERVED\"; break;\n\t\tcase COLORRES: \t\t \t\t\teb=\"COLORRES\"; break;\n\t\tcase PHYSICALWIDTH: \t\t \teb=\"PHYSICALWIDTH\"; break;\n\t\tcase PHYSICALHEIGHT: \t\t \teb=\"PHYSICALHEIGHT\"; break;\n\t\tcase PHYSICALOFFSETX: \t\t \teb=\"PHYSICALOFFSETX\"; break;\n\t\tcase PHYSICALOFFSETY: \t\t \teb=\"PHYSICALOFFSETY\"; break;\n\t\tcase VREFRESH: \t\t \t\t\teb=\"VREFRESH\"; break;\n\t\tcase SCALINGFACTORX: \t\t \teb=\"SCALINGFACTORX\"; break;\n\t\tcase SCALINGFACTORY: \t\t \teb=\"SCALINGFACTORY\"; break;\n\t\tcase BLTALIGNMENT: \t\t \t\teb=\"BLTALIGNMENT\"; break;\n\t\tcase SHADEBLENDCAPS: \t\t \teb=\"SHADEBLENDCAPS\"; break;\n\t\tcase RASTERCAPS: \t\t \t\teb=\"RASTERCAPS\"; break;\n\t\tcase CURVECAPS: \t\t \t\teb=\"CURVECAPS\"; break;\n\t\tcase LINECAPS: \t\t \t\t\teb=\"LINECAPS\"; break;\n\t\tcase POLYGONALCAPS: \t\t \teb=\"POLYGONALCAPS\"; break;\n\t\tcase TEXTCAPS: \t\t \t\t\teb=\"TEXTCAPS\"; break;\n\t\tcase COLORMGMTCAPS: \t\t \teb=\"COLORMGMTCAPS\"; break;\n\t\tdefault:\t\t\t\t\t\teb=\"???\"; break;\n\t}\n\treturn eb;\n}\n\nchar *ExplainDisplaySettingsRetcode(DWORD c)\n{\n\tstatic char *eb;\n\tswitch(c)\n\t{\n\t\tcase DISP_CHANGE_SUCCESSFUL:\teb=\"DISP_CHANGE_SUCCESSFUL\"; break;\n\t\t//case DISP_CHANGE_BADDUALVIEW:\teb=\"DISP_CHANGE_BADDUALVIEW\"; break;\n\t\tcase DISP_CHANGE_BADFLAGS:\t\teb=\"DISP_CHANGE_BADFLAGS\"; break;\n\t\tcase DISP_CHANGE_BADMODE:\t\teb=\"DISP_CHANGE_BADMODE\"; break;\n\t\tcase DISP_CHANGE_BADPARAM:\t\teb=\"DISP_CHANGE_BADPARAM\"; break;\n\t\tcase DISP_CHANGE_FAILED:\t\teb=\"DISP_CHANGE_FAILED\"; break;\n\t\tcase DISP_CHANGE_NOTUPDATED:\teb=\"DISP_CHANGE_NOTUPDATED\"; break;\n\t\tcase DISP_CHANGE_RESTART:\t\teb=\"DISP_CHANGE_RESTART\"; break;\n\t}\n\treturn eb;\n}\n\nchar *ExplainSetWindowIndex(DWORD c)\n{\n\tstatic char *eb;\n\tswitch(c)\n\t{\n\t\tcase GWL_EXSTYLE:\t\teb=\"GWL_EXSTYLE\"; break;\n\t\tcase GWL_HINSTANCE:\t\teb=\"GWL_HINSTANCE\"; break;\n\t\tcase GWL_ID:\t\t\teb=\"GWL_ID\"; break;\n\t\tcase GWL_STYLE:\t\t\teb=\"GWL_STYLE\"; break;\n\t\tcase GWL_USERDATA:\t\teb=\"GWL_USERDATA\"; break;\n\t\tcase GWL_WNDPROC:\t\teb=\"GWL_WNDPROC\"; break;\n\t\tcase GWL_HWNDPARENT:\teb=\"GWL_HWNDPARENT\"; break;\n\t\tcase DWL_DLGPROC:\t\teb=\"DWL_DLGPROC\"; break;\n\t\tcase DWL_MSGRESULT:\t\teb=\"DWL_MSGRESULT\"; break;\n\t\tcase DWL_USER:\t\t\teb=\"DWL_USER\"; break;\n\t\tdefault:\t\t\t\teb=\"\"; break;\n\t}\n\treturn eb;\n}\n\nchar *ExplainColorKeyFlag(DWORD c)\n{\n\tstatic char *eb;\n\tswitch(c)\n\t{\n\t\tcase DDCKEY_COLORSPACE:\t\teb=\"DDCKEY_COLORSPACE\"; break;\n\t\tcase DDCKEY_DESTBLT:\t\teb=\"DDCKEY_DESTBLT\"; break;\n\t\tcase DDCKEY_DESTOVERLAY:\teb=\"DDCKEY_DESTOVERLAY\"; break;\n\t\tcase DDCKEY_SRCBLT:\t\t\teb=\"DDCKEY_SRCBLT\"; break;\n\t\tcase DDCKEY_SRCOVERLAY:\t\teb=\"DDCKEY_SRCOVERLAY\"; break;\n\t\tdefault:\t\t\t\t\teb=\"\"; break;\n\t}\n\treturn eb;\n}\n\nchar *ExplainGUID(GUID FAR *lpguid)\n{\n\tstatic char *sguid;\n\tswitch ((DWORD)lpguid){\n\t\tcase NULL:\t\t\t\t\t\treturn \"NULL\"; break;\n\t\tcase DDCREATE_HARDWAREONLY:\t\treturn \"DDCREATE_HARDWAREONLY\"; break;\n\t\tcase DDCREATE_EMULATIONONLY:\treturn \"DDCREATE_EMULATIONONLY\"; break;\n\t}\n\tswitch (lpguid->Data1){\n\t\tcase 0x00000000: sguid=\"IID_IUnknown\"; break;\n\t\tcase 0x6C14DB80: sguid=\"IID_IDirectDraw\"; break;\n\t\tcase 0xB3A6F3E0: sguid=\"IID_IDirectDraw2\"; break;\n\t\tcase 0x618f8ad4: sguid=\"IID_IDirectDraw3\"; break;\n\t\tcase 0x9c59509a: sguid=\"IID_IDirectDraw4\"; break;\n\t\tcase 0x15e65ec0: sguid=\"IID_IDirectDraw7\"; break;\n\t\tcase 0x6C14DB81: sguid=\"IID_IDirectDrawSurface\"; break;\n\t\tcase 0x57805885: sguid=\"IID_IDirectDrawSurface2\"; break;\n\t\tcase 0xDA044E00: sguid=\"IID_IDirectDrawSurface3\"; break;\n\t\tcase 0x0B2B8630: sguid=\"IID_IDirectDrawSurface4\"; break;\n\t\tcase 0x06675a80: sguid=\"IID_IDirectDrawSurface7\"; break;\n\t\tcase 0x6C14DB84: sguid=\"IID_IDirectDrawPalette\"; break;\n\t\tcase 0x6C14DB85: sguid=\"IID_IDirectDrawClipper\"; break;\n\t\tcase 0x4B9F0EE0: sguid=\"IID_IDirectDrawColorControl\"; break;\n\t\tcase 0x69C11C3E: sguid=\"IID_IDirectDrawGammaControl\"; break;\n\t\tcase 0xA4665C60: sguid=\"IID_IDirect3DRGBDevice\"; break;\n\t\tcase 0x84E63dE0: sguid=\"IID_IDirect3DHALDevice\"; break;\n\t\tcase 0x3BBA0080: sguid=\"IID_IDirect3D\"; break;\n\t\tcase 0x6aae1ec1: sguid=\"IID_IDirect3D2\"; break;\n\t\tcase 0xbb223240: sguid=\"IID_IDirect3D3\"; break;\n\t\tcase 0xf5049e77: sguid=\"IID_IDirect3D7\"; break;\n\t\tcase 0x64108800: sguid=\"IID_IDirect3DDevice\"; break;\n\t\tcase 0x93281501: sguid=\"IID_IDirect3DDevice2\"; break;\n\t\tcase 0xb0ab3b60: sguid=\"IID_IDirect3DDevice3\"; break;\n\t\tcase 0xf5049e79: sguid=\"IID_IDirect3DDevice7\"; break;\n\t\tcase 0x2CDCD9E0: sguid=\"IID_IDirect3DTexture\"; break;\n\t\tcase 0x93281502: sguid=\"IID_IDirect3DTexture2\"; break;\n\t\tcase 0x4417C142: sguid=\"IID_IDirect3DLight\"; break;\n\t\tcase 0x4417C144: sguid=\"IID_IDirect3DMaterial\"; break;\n\t\tcase 0x93281503: sguid=\"IID_IDirect3DMaterial2\"; break;\n\t\tcase 0xca9c46f4: sguid=\"IID_IDirect3DMaterial3\"; break;\n\t\tcase 0x4417C145: sguid=\"IID_IDirect3DExecuteBuffer\"; break;\n\t\tcase 0x4417C146: sguid=\"IID_IDirect3DViewport\"; break;\n\t\tcase 0x93281500: sguid=\"IID_IDirect3DViewport2\"; break;\n\t\tcase 0xb0ab3b61: sguid=\"IID_IDirect3DViewport3\"; break;\n\t\tcase 0x7a503555: sguid=\"IID_IDirect3DVertexBuffer\"; break;\n\t\tcase 0xf5049e7d: sguid=\"IID_IDirect3DVertexBuffer7\"; break;\n\t\tcase 0xF2086B20: sguid=\"IID_IDirect3DRampDevice\"; break;\n\t\tcase 0x881949a1: sguid=\"IID_IDirect3DMMXDevice\"; break;\n\t\tcase 0x50936643: sguid=\"IID_IDirect3DRefDevice\"; break;\n\t\tcase 0x8767df22: sguid=\"IID_IDirect3DNullDevice\"; break;\n\t\tcase 0xf5049e78: sguid=\"IID_IDirect3DTnLHalDevice\"; break;\n\t\tcase 0xD7B70EE0: sguid=\"CLSID_DirectDraw\"; break;\n\t\tcase 0x3c305196: sguid=\"CLSID_DirectDraw7\"; break;\n\t\tcase 0x593817A0: sguid=\"CLSID_DirectDrawClipper\"; break;\n\t\tcase 0x89521360: sguid=\"IID_IDirectInputA\"; break;\n\t\tcase 0x89521361: sguid=\"IID_IDirectInputW\"; break;\n\t\tcase 0x5944E662: sguid=\"IID_IDirectInput2A\"; break;\n\t\tcase 0x5944E663: sguid=\"IID_IDirectInput2W\"; break;\n\t\tcase 0x9A4CB684: sguid=\"IID_IDirectInput7A\"; break;\n\t\tcase 0x9A4CB685: sguid=\"IID_IDirectInput7W\"; break;\n\t\tcase 0xBF798030: sguid=\"IID_IDirectInput8A\"; break;\n\t\tcase 0xBF798031: sguid=\"IID_IDirectInput8W\"; break;\n\t\tcase 0x5944E680: sguid=\"IID_IDirectInputDeviceA\"; break;\n\t\tcase 0x5944E681: sguid=\"IID_IDirectInputDeviceW\"; break;\n\t\tcase 0x5944E682: sguid=\"IID_IDirectInputDevice2A\"; break;\n\t\tcase 0x5944E683: sguid=\"IID_IDirectInputDevice2W\"; break;\n\t\tcase 0x57D7C6BC: sguid=\"IID_IDirectInputDevice7A\"; break;\n\t\tcase 0x57D7C6BD: sguid=\"IID_IDirectInputDevice7W\"; break;\n\t\tcase 0x54D41080: sguid=\"IID_IDirectInputDevice8A\"; break;\n\t\tcase 0x54D41081: sguid=\"IID_IDirectInputDevice8W\"; break;\n\t\tcase 0xE7E1F7C0: sguid=\"IID_IDirectInputEffect\"; break;\n\t\tcase 0x1dd9e8da: sguid=\"IID_IDirect3D8\"; break;\n\t\tcase 0x81bdcbca: sguid=\"IID_IDirect3D9\"; break;\n\t\tcase 0x02177241: sguid=\"IID_IDirect3D9Ex\"; break;\n\t\tcase 0x7385e5df: sguid=\"IID_IDirect3DDevice8\"; break;\n\t\tcase 0xd0223b96: sguid=\"IID_IDirect3DDevice9\"; break;\n\t\tcase 0xb18b10ce: sguid=\"IID_IDirect3DDevice9Ex\"; break;\n\t\tcase 0xb4211cfa: sguid=\"IID_IDirect3DBaseTexture8\"; break;\n\t\tcase 0xe4cdd575: sguid=\"IID_IDirect3DTexture8\"; break;\n\t\tcase 0x580ca87e: sguid=\"IID_IDirect3DBaseTexture9\"; break;\n\t\tcase 0x85c31227: sguid=\"IID_IDirect3DTexture9\"; break;\n\t\tcase 0xb96eebca: sguid=\"IID_IDirect3DSurface8\"; break;\n\t\tcase 0x0cfbaf3a: sguid=\"IID_IDirect3DSurface9\"; break;\n\t\tdefault: sguid=\"UNKNOWN\"; break;\n\t}\n\treturn sguid;\n}\n\nchar *ExplainNChitTest(DWORD c)\n{\n\tstatic char *eb;\n\tswitch(c)\n\t{\n\t\tcase HTERROR:\t\t\teb=\"HTERROR\"; break;\n\t\tcase HTTRANSPARENT:\t\teb=\"HTTRANSPARENT\"; break;\n\t\tcase HTNOWHERE:\t\t\teb=\"HTNOWHERE\"; break;\n\t\tcase HTCLIENT:\t\t\teb=\"HTCLIENT\"; break;\n\t\tcase HTCAPTION:\t\t\teb=\"HTCAPTION\"; break;\n\t\tcase HTSYSMENU:\t\t\teb=\"HTSYSMENU\"; break;\n\t\tcase HTGROWBOX:\t\t\teb=\"HTGROWBOX\"; break;\n\t\tcase HTMENU:\t\t\teb=\"HTMENU\"; break;\n\t\tcase HTHSCROLL:\t\t\teb=\"HTHSCROLL\"; break;\n\t\tcase HTVSCROLL:\t\t\teb=\"HTVSCROLL\"; break;\n\t\tcase HTMINBUTTON:\t\teb=\"HTMINBUTTON\"; break;\n\t\tcase HTMAXBUTTON:\t\teb=\"HTMAXBUTTON\"; break;\n\t\tcase HTLEFT:\t\t\teb=\"HTLEFT\"; break;\n\t\tcase HTRIGHT:\t\t\teb=\"HTRIGHT\"; break;\n\t\tcase HTTOP:\t\t\t\teb=\"HTTOP\"; break;\n\t\tcase HTTOPLEFT:\t\t\teb=\"HTTOPLEFT\"; break;\n\t\tcase HTTOPRIGHT:\t\teb=\"HTTOPRIGHT\"; break;\n\t\tcase HTBOTTOM:\t\t\teb=\"HTBOTTOM\"; break;\n\t\tcase HTBOTTOMLEFT:\t\teb=\"HTBOTTOMLEFT\"; break;\n\t\tcase HTBOTTOMRIGHT:\t\teb=\"HTBOTTOMRIGHT\"; break;\n\t\tcase HTBORDER:\t\t\teb=\"HTBORDER\"; break;\n\t\tcase HTOBJECT:\t\t\teb=\"HTOBJECT\"; break;\n\t\tcase HTCLOSE:\t\t\teb=\"HTCLOSE\"; break;\n\t\tcase HTHELP:\t\t\teb=\"HTHELP\"; break;\n\t\tdefault:\t\t\t\teb=\"Unknown\"; break;\n\t}\n\treturn eb;\n}\n\nchar *ExplainDDEnumerateFlags(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"DDENUM_\");\n\tif (c & DDENUM_ATTACHEDSECONDARYDEVICES) strcat(eb, \"ATTACHEDSECONDARYDEVICES+\");\n\tif (c & DDENUM_DETACHEDSECONDARYDEVICES) strcat(eb, \"DETACHEDSECONDARYDEVICES+\");\n\tif (c & DDENUM_NONDISPLAYDEVICES) strcat(eb, \"NONDISPLAYDEVICES+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDENUM_\")) eb[l-1]=0; // delete last '+' if any\n\telse strcpy(eb,\"NULL\");\n\treturn(eb);\n}\n\n char *ExplainsSystemMetrics(DWORD c)\n{\n\tchar *Captions[94]={\n\t\t\"SM_CXSCREEN\", \"SM_CYSCREEN\", \"SM_CXVSCROLL\", \"SM_CYHSCROLL\", \"SM_CYCAPTION\",\n\t\t\"SM_CXBORDER\", \"SM_CYBORDER\", \"SM_CXDLGFRAME\", \"SM_CYDLGFRAME\", \"SM_CYVTHUMB\",\n\t\t\"SM_CXHTHUMB\", \"SM_CXICON\", \"SM_CYICON\", \"SM_CXCURSOR\", \"SM_CYCURSOR\",\n\t\t\"SM_CYMENU\", \"SM_CXFULLSCREEN\", \"SM_CYFULLSCREEN\", \"SM_CYKANJIWINDOW\", \"SM_MOUSEPRESENT\",\n\t\t\"SM_CYVSCROLL\", \"SM_CXHSCROLL\", \"SM_DEBUG\", \"SM_SWAPBUTTON\", \"SM_RESERVED1\",\n\t\t\"SM_RESERVED2\", \"SM_RESERVED3\", \"SM_RESERVED4\", \"SM_CXMIN\", \"SM_CYMIN\",\n\t\t\"SM_CXSIZE\", \"SM_CYSIZE\", \"SM_CXFRAME\", \"SM_CYFRAME\", \"SM_CXMINTRACK\",\n\t\t\"SM_CYMINTRACK\", \"SM_CXDOUBLECLK\", \"SM_CYDOUBLECLK\", \"SM_CXICONSPACING\", \"SM_CYICONSPACING\",\n\t\t\"SM_MENUDROPALIGNMENT\", \"SM_PENWINDOWS\", \"SM_DBCSENABLED\", \"SM_CMOUSEBUTTONS\", \"SM_SECURE\",\n\t\t\"SM_CXEDGE\", \"SM_CYEDGE\", \"SM_CXMINSPACING\", \"SM_CYMINSPACING\", \"SM_CXSMICON\",\n\t\t\"SM_CYSMICON\", \"SM_CYSMCAPTION\", \"SM_CXSMSIZE\", \"SM_CYSMSIZE\", \"SM_CXMENUSIZE\",\n\t\t\"SM_CYMENUSIZE\", \"SM_ARRANGE\", \"SM_CXMINIMIZED\", \"SM_CYMINIMIZED\", \"SM_CXMAXTRACK\",\n\t\t\"SM_CYMAXTRACK\", \"SM_CXMAXIMIZED\", \"SM_CYMAXIMIZED\", \"SM_NETWORK\", \"64???\",\n\t\t\"65???\", \"66???\", \"SM_CLEANBOOT\", \"SM_CXDRAG\", \"SM_CYDRAG\",\n\t\t\"SM_SHOWSOUNDS\", \"SM_CXMENUCHECK\", \"SM_CYMENUCHECK\", \"SM_SLOWMACHINE\", \"SM_MIDEASTENABLED\",\n\t\t\"SM_MOUSEWHEELPRESENT\", \"SM_XVIRTUALSCREEN\", \"SM_YVIRTUALSCREEN\", \"SM_CXVIRTUALSCREEN\", \"SM_CYVIRTUALSCREEN\",\n\t\t\"SM_CMONITORS\", \"SM_SAMEDISPLAYFORMAT\", \"SM_IMMENABLED\", \"SM_CXFOCUSBORDER\", \"SM_CYFOCUSBORDER\",\n\t\t\"85???\", \"SM_TABLETPC\", \"SM_MEDIACENTER\", \"SM_STARTER\", \"SM_SERVERR2\",\n\t\t\"SM_CMETRICS(Win 0x501)\", \"SM_MOUSEHORIZONTALWHEELPRESENT\", \"SM_CXPADDEDBORDER\", \"SM_CMETRICS\"};\n\n\tif (c>=0 && c<94) return Captions[c];\n\tswitch(c){\n\t\tcase SM_REMOTESESSION: return \"SM_REMOTESESSION\";\n\t\tcase SM_SHUTTINGDOWN: return \"SM_SHUTTINGDOWN\";\n\t\tcase SM_REMOTECONTROL: return \"SM_REMOTECONTROL\";\n\t\tcase SM_CARETBLINKINGENABLED: return \"SM_CARETBLINKINGENABLED\";\n\t}\n\treturn \"???\";\n }\n\nchar *ExplainWPFlags(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"SWP_\");\n\tif (c & SWP_NOSIZE) strcat(eb, \"NOSIZE+\");\n\tif (c & SWP_NOMOVE) strcat(eb, \"NOMOVE+\");\n\tif (c & SWP_NOZORDER) strcat(eb, \"NOZORDER+\");\n\tif (c & SWP_NOREDRAW) strcat(eb, \"NOREDRAW+\");\n\tif (c & SWP_NOACTIVATE) strcat(eb, \"NOACTIVATE+\");\n\tif (c & SWP_FRAMECHANGED) strcat(eb, \"FRAMECHANGED+\");\n\tif (c & SWP_SHOWWINDOW) strcat(eb, \"SHOWWINDOW+\");\n\tif (c & SWP_HIDEWINDOW) strcat(eb, \"HIDEWINDOW+\");\n\tif (c & SWP_NOCOPYBITS) strcat(eb, \"NOCOPYBITS+\");\n\tif (c & SWP_NOOWNERZORDER) strcat(eb, \"NOOWNERZORDER+\");\n\tif (c & SWP_NOSENDCHANGING) strcat(eb, \"NOSENDCHANGING+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"SWP_\")) eb[l-1]=0; // delete last '+' if any\n\telse strcpy(eb,\"NULL\");\n\treturn(eb);\n}\n\nchar *ExplainLoadLibFlags(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"\");\n\tif (c & DONT_RESOLVE_DLL_REFERENCES) strcat(eb, \"DONT_RESOLVE_DLL_REFERENCES+\");\n\tif (c & LOAD_LIBRARY_AS_DATAFILE) strcat(eb, \"LOAD_LIBRARY_AS_DATAFILE+\");\n\tif (c & LOAD_WITH_ALTERED_SEARCH_PATH) strcat(eb, \"LOAD_WITH_ALTERED_SEARCH_PATH+\");\n\tif (c & LOAD_IGNORE_CODE_AUTHZ_LEVEL) strcat(eb, \"LOAD_IGNORE_CODE_AUTHZ_LEVEL+\");\n\tif (c & LOAD_LIBRARY_AS_IMAGE_RESOURCE) strcat(eb, \"LOAD_LIBRARY_AS_IMAGE_RESOURCE+\");\n\tif (c & LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE) strcat(eb, \"LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE+\");\n\tl=strlen(eb);\n\tif (l>0) eb[l-1]=0; // delete last '+' if any\n\telse strcpy(eb,\"NULL\");\n\treturn(eb);\n}\n\nchar *ExplainDevModeFields(DWORD c)\n{\n\tstatic char eb[512];\n\tunsigned int l;\n\tstrcpy(eb,\"DM_\");\n\tif (c & DM_ORIENTATION) strcat(eb, \"ORIENTATION+\");\n\tif (c & DM_PAPERSIZE) strcat(eb, \"PAPERSIZE+\");\n\tif (c & DM_PAPERLENGTH) strcat(eb, \"PAPERLENGTH+\");\n\tif (c & DM_PAPERWIDTH) strcat(eb, \"PAPERWIDTH+\");\n\tif (c & DM_SCALE) strcat(eb, \"SCALE+\");\n\tif (c & DM_COPIES) strcat(eb, \"COPIES+\");\n\tif (c & DM_DEFAULTSOURCE) strcat(eb, \"DEFAULTSOURCE+\");\n\tif (c & DM_PRINTQUALITY) strcat(eb, \"PRINTQUALITY+\");\n\tif (c & DM_POSITION) strcat(eb, \"POSITION+\");\n\tif (c & DM_DISPLAYORIENTATION) strcat(eb, \"DISPLAYORIENTATION+\");\n\tif (c & DM_DISPLAYFIXEDOUTPUT) strcat(eb, \"DISPLAYFIXEDOUTPUT+\");\n\tif (c & DM_COLOR) strcat(eb, \"COLOR+\");\n\tif (c & DM_DUPLEX) strcat(eb, \"DUPLEX+\");\n\tif (c & DM_YRESOLUTION) strcat(eb, \"YRESOLUTION+\");\n\tif (c & DM_TTOPTION) strcat(eb, \"TTOPTION+\");\n\tif (c & DM_COLLATE) strcat(eb, \"COLLATE+\");\n\tif (c & DM_FORMNAME) strcat(eb, \"FORMNAME+\");\n\tif (c & DM_LOGPIXELS) strcat(eb, \"LOGPIXELS+\");\n\tif (c & DM_BITSPERPEL) strcat(eb, \"BITSPERPEL+\");\n\tif (c & DM_PELSWIDTH) strcat(eb, \"PELSWIDTH+\");\n\tif (c & DM_PELSHEIGHT) strcat(eb, \"PELSHEIGHT+\");\n\tif (c & DM_DISPLAYFLAGS) strcat(eb, \"DISPLAYFLAGS+\");\n\tif (c & DM_NUP) strcat(eb, \"NUP+\");\n\tif (c & DM_DISPLAYFREQUENCY) strcat(eb, \"DISPLAYFREQUENCY+\");\n\tif (c & DM_ICMMETHOD) strcat(eb, \"ICMMETHOD+\");\n\tif (c & DM_ICMINTENT) strcat(eb, \"ICMINTENT+\");\n\tif (c & DM_MEDIATYPE) strcat(eb, \"MEDIATYPE+\");\n\tif (c & DM_DITHERTYPE) strcat(eb, \"DITHERTYPE+\");\n\tif (c & DM_PANNINGWIDTH) strcat(eb, \"PANNINGWIDTH+\");\n\tif (c & DM_PANNINGHEIGHT) strcat(eb, \"PANNINGHEIGHT+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DM_\")) eb[l-1]=0; // delete last '+' if any\n\telse strcpy(eb,\"NULL\");\n\treturn(eb);\n}\n\nchar *ExplainMCICommands(DWORD c)\n{\n\tswitch(c){\n\t\tcase MCI_OPEN: return \"MCI_OPEN\";\n\t\tcase MCI_CLOSE: return \"MCI_CLOSE\";\n\t\tcase MCI_ESCAPE: return \"MCI_ESCAPE\";\n\t\tcase MCI_PLAY: return \"MCI_PLAY\";\n\t\tcase MCI_SEEK: return \"MCI_SEEK\";\n\t\tcase MCI_STOP: return \"MCI_STOP\";\n\t\tcase MCI_PAUSE: return \"MCI_PAUSE\";\n\t\tcase MCI_INFO: return \"MCI_INFO\";\n\t\tcase MCI_GETDEVCAPS: return \"MCI_GETDEVCAPS\";\n\t\tcase MCI_SPIN: return \"MCI_SPIN\";\n\t\tcase MCI_SET: return \"MCI_SET\";\n\t\tcase MCI_STEP: return \"MCI_STEP\";\n\t\tcase MCI_RECORD: return \"MCI_RECORD\";\n\t\tcase MCI_SYSINFO: return \"MCI_SYSINFO\";\n\t\tcase MCI_BREAK: return \"MCI_BREAK\";\n\t\tcase MCI_SAVE: return \"MCI_SAVE\";\n\t\tcase MCI_STATUS: return \"MCI_STATUS\";\n\t\tcase MCI_CUE: return \"MCI_CUE\";\n\t\tcase MCI_REALIZE: return \"MCI_REALIZE\";\n\t\tcase MCI_WINDOW: return \"MCI_WINDOW\";\n\t\tcase MCI_PUT: return \"MCI_PUT\";\n\t\tcase MCI_WHERE: return \"MCI_WHERE\";\n\t\tcase MCI_FREEZE: return \"MCI_FREEZE\";\n\t\tcase MCI_UNFREEZE: return \"MCI_UNFREEZE\";\n\t\tcase MCI_LOAD: return \"MCI_LOAD\";\n\t\tcase MCI_CUT: return \"MCI_CUT\";\n\t\tcase MCI_COPY: return \"MCI_COPY\";\n\t\tcase MCI_PASTE: return \"MCI_PASTE\";\n\t\tcase MCI_UPDATE: return \"MCI_UPDATE\";\n\t\tcase MCI_RESUME: return \"MCI_RESUME\";\n\t\tcase MCI_DELETE: return \"MCI_DELETE\";\n\t\t}\n\treturn \"???\";\n}\n\nchar *ExplainMCIFlags(DWORD cmd, DWORD c)\n{\n\tstatic char eb[512];\n\tunsigned int l;\n\tstrcpy(eb,\"MCI_\");\n\t// common flags\n\tif (c & MCI_NOTIFY) strcat(eb, \"NOTIFY+\");\n\tif (c & MCI_WAIT) strcat(eb, \"WAIT+\");\n\tif (c & MCI_FROM) strcat(eb, \"FROM+\");\n\tif (c & MCI_TO) strcat(eb, \"TO+\");\n\tif (c & MCI_TRACK) strcat(eb, \"TRACK+\");\n\tswitch(cmd){\n\tcase MCI_OPEN:\n\t\tif (c & MCI_OPEN_SHAREABLE) strcat(eb, \"OPEN_SHAREABLE+\");\n\t\tif (c & MCI_OPEN_ELEMENT) strcat(eb, \"OPEN_ELEMENT+\");\n\t\tif (c & MCI_OPEN_ALIAS) strcat(eb, \"OPEN_ALIAS+\");\n\t\tif (c & MCI_OPEN_ELEMENT_ID) strcat(eb, \"OPEN_ELEMENT_ID+\");\n\t\tif (c & MCI_OPEN_TYPE_ID) strcat(eb, \"OPEN_TYPE_ID+\");\n\t\tif (c & MCI_OPEN_TYPE) strcat(eb, \"OPEN_TYPE+\");\n\t\tif (c & MCI_WAVE_OPEN_BUFFER) strcat(eb, \"WAVE_OPEN_BUFFER+\");\n\t\tbreak;\n\tcase MCI_SEEK:\n\t\tif (c & MCI_SEEK_TO_START) strcat(eb, \"SEEK_TO_START+\");\n\t\tif (c & MCI_STATUS_START) strcat(eb, \"STATUS_START+\");\n\t\tif (c & MCI_VD_SEEK_REVERSE) strcat(eb, \"VD_SEEK_REVERSE+\");\n\t\tbreak;\n\tcase MCI_STATUS:\n\t\tif (c & MCI_STATUS_ITEM) strcat(eb, \"STATUS_ITEM+\");\n\t\tif (c & MCI_STATUS_START) strcat(eb, \"STATUS_START+\");\n\t\tbreak;\n\tcase MCI_INFO:\n\t\tif (c & MCI_INFO_PRODUCT) strcat(eb, \"INFO_PRODUCT+\");\n\t\tif (c & MCI_INFO_FILE) strcat(eb, \"INFO_FILE+\");\n\t\tif (c & MCI_INFO_MEDIA_UPC) strcat(eb, \"INFO_MEDIA_UPC+\");\n\t\tif (c & MCI_INFO_MEDIA_IDENTITY) strcat(eb, \"INFO_MEDIA_IDENTITY+\");\n\t\tif (c & MCI_INFO_NAME) strcat(eb, \"INFO_NAME+\");\n\t\tif (c & MCI_INFO_COPYRIGHT) strcat(eb, \"INFO_COPYRIGHT+\");\n\t\tbreak;\n\tcase MCI_GETDEVCAPS:\n\t\tif (c & MCI_VD_GETDEVCAPS_CLV) strcat(eb, \"VD_GETDEVCAPS_CLV+\");\n\t\tif (c & MCI_VD_GETDEVCAPS_CAV) strcat(eb, \"VD_GETDEVCAPS_CAV+\");\n\t\tif (c & MCI_GETDEVCAPS_ITEM) strcat(eb, \"GETDEVCAPS_ITEM+\");\n\t\tbreak;\n\tcase MCI_SYSINFO:\n\t\tif (c & MCI_SYSINFO_QUANTITY) strcat(eb, \"SYSINFO_QUANTITY+\");\n\t\tif (c & MCI_SYSINFO_OPEN) strcat(eb, \"SYSINFO_OPEN+\");\n\t\tif (c & MCI_SYSINFO_NAME) strcat(eb, \"SYSINFO_NAME+\");\n\t\tif (c & MCI_SYSINFO_INSTALLNAME) strcat(eb, \"SYSINFO_INSTALLNAME+\");\n\t\tbreak;\n\tcase MCI_SET:\n\t\tif (c & MCI_SET_DOOR_OPEN) strcat(eb, \"SET_DOOR_OPEN+\");\n\t\tif (c & MCI_SET_DOOR_CLOSED) strcat(eb, \"SET_DOOR_CLOSED+\");\n\t\tif (c & MCI_SET_TIME_FORMAT) strcat(eb, \"SET_TIME_FORMAT+\");\n\t\tif (c & MCI_SET_AUDIO) strcat(eb, \"SET_AUDIO+\");\n\t\tif (c & MCI_SET_VIDEO) strcat(eb, \"SET_VIDEO+\");\n\t\tif (c & MCI_SET_ON) strcat(eb, \"SET_ON+\");\n\t\tif (c & MCI_SET_OFF) strcat(eb, \"SET_OFF+\");\n\t\tif (c & MCI_SEQ_SET_TEMPO) strcat(eb, \"SEQ_SET_TEMPO+\");\n\t\tif (c & MCI_SEQ_SET_PORT) strcat(eb, \"SEQ_SET_PORT+\");\n\t\tif (c & MCI_SEQ_SET_SLAVE) strcat(eb, \"SEQ_SET_SLAVE+\");\n\t\tif (c & MCI_SEQ_SET_MASTER) strcat(eb, \"SEQ_SET_MASTER+\");\n\t\tif (c & MCI_SEQ_SET_OFFSET) strcat(eb, \"SEQ_SET_OFFSET+\");\n\t\tbreak;\n\tcase MCI_BREAK:\n\t\tif (c & MCI_BREAK_KEY) strcat(eb, \"BREAK_KEY+\");\n\t\tif (c & MCI_BREAK_HWND) strcat(eb, \"BREAK_HWND+\");\n\t\tif (c & MCI_BREAK_OFF) strcat(eb, \"BREAK_OFF+\");\n\t\tbreak;\n\tcase MCI_RECORD:\n\t\tif (c & MCI_RECORD_INSERT) strcat(eb, \"RECORD_INSERT+\");\n\t\tif (c & MCI_RECORD_OVERWRITE) strcat(eb, \"RECORD_OVERWRITE+\");\n\t\tbreak;\n\tcase MCI_SAVE:\n\t\tif (c & MCI_SAVE_FILE) strcat(eb, \"SAVE_FILE+\");\n\t\tbreak;\n\tcase MCI_LOAD:\n\t\tif (c & MCI_LOAD_FILE) strcat(eb, \"SAVE_FILE+\");\n\t\tbreak;\n\tcase MCI_PLAY:\n\t\tif (c & MCI_VD_PLAY_REVERSE) strcat(eb, \"VD_PLAY_REVERSE+\");\n\t\tif (c & MCI_VD_PLAY_FAST) strcat(eb, \"VD_PLAY_FAST+\");\n\t\tif (c & MCI_VD_PLAY_SPEED) strcat(eb, \"VD_PLAY_SPEED+\");\n\t\tif (c & MCI_VD_PLAY_SCAN) strcat(eb, \"VD_PLAY_SCAN+\");\n\t\tif (c & MCI_VD_PLAY_SLOW) strcat(eb, \"VD_PLAY_SLOW+\");\n\t\tbreak;\n\tcase MCI_STEP:\n\t\tif (c & MCI_VD_STEP_FRAMES) strcat(eb, \"VD_STEP_FRAMES+\");\n\t\tif (c & MCI_VD_STEP_REVERSE) strcat(eb, \"VD_STEP_REVERSE+\");\n\t\tbreak;\n\tcase MCI_WINDOW:\n\t\tif (c & MCI_ANIM_WINDOW_HWND) strcat(eb, \"ANIM_WINDOW_HWND+\");\n\t\tif (c & MCI_ANIM_WINDOW_STATE) strcat(eb, \"ANIM_WINDOW_STATE+\");\n\t\tif (c & MCI_ANIM_WINDOW_TEXT) strcat(eb, \"ANIM_WINDOW_TEXT+\");\n\t\tif (c & MCI_ANIM_WINDOW_ENABLE_STRETCH) strcat(eb, \"ANIM_WINDOW_ENABLE_STRETCH+\");\n\t\tif (c & MCI_ANIM_WINDOW_DISABLE_STRETCH) strcat(eb, \"ANIM_WINDOW_DISABLE_STRETCH+\");\n\t\tbreak;\n\tcase MCI_PUT:\n\t\tif (c & MCI_ANIM_RECT) strcat(eb, \"ANIM_RECT+\");\n\t\tif (c & MCI_ANIM_PUT_SOURCE) strcat(eb, \"ANIM_PUT_SOURCE+\");\n\t\tif (c & MCI_ANIM_PUT_DESTINATION) strcat(eb, \"ANIM_PUT_DESTINATION+\");\n\t\tbreak;\n\tcase MCI_WHERE:\n\t\tif (c & MCI_ANIM_WHERE_SOURCE) strcat(eb, \"ANIM_WHERE_SOURCE+\");\n\t\tif (c & MCI_ANIM_WHERE_DESTINATION) strcat(eb, \"ANIM_WHERE_DESTINATION+\");\n\t\tbreak;\n\tcase MCI_UPDATE:\n\t\tif (c & MCI_ANIM_UPDATE_HDC) strcat(eb, \"ANIM_UPDATE_HDC+\");\n\t\tbreak;\n\t}\n\t/*\n\tif (c & MCI_OVLY_OPEN_WS) strcat(eb, \"OVLY_OPEN_WS+\");\n\tif (c & MCI_OVLY_OPEN_PARENT) strcat(eb, \"OVLY_OPEN_PARENT+\");\n\tif (c & MCI_OVLY_STATUS_HWND) strcat(eb, \"OVLY_STATUS_HWND+\");\n\tif (c & MCI_OVLY_STATUS_STRETCH) strcat(eb, \"OVLY_STATUS_STRETCH+\");\n\tif (c & MCI_OVLY_INFO_TEXT) strcat(eb, \"OVLY_INFO_TEXT+\");\n\tif (c & MCI_OVLY_WINDOW_HWND) strcat(eb, \"OVLY_WINDOW_HWND+\");\n\tif (c & MCI_OVLY_WINDOW_STATE) strcat(eb, \"OVLY_WINDOW_STATE+\");\n\tif (c & MCI_OVLY_WINDOW_TEXT) strcat(eb, \"OVLY_WINDOW_TEXT+\");\n\tif (c & MCI_OVLY_WINDOW_ENABLE_STRETCH) strcat(eb, \"OVLY_WINDOW_ENABLE_STRETCH+\");\n\tif (c & MCI_OVLY_WINDOW_DISABLE_STRETCH) strcat(eb, \"OVLY_WINDOW_DISABLE_STRETCH+\");\n\tif (c & MCI_OVLY_WINDOW_DEFAULT) strcat(eb, \"OVLY_WINDOW_DEFAULT+\");\n\tif (c & MCI_OVLY_RECT) strcat(eb, \"OVLY_RECT+\");\n\tif (c & MCI_OVLY_PUT_SOURCE) strcat(eb, \"OVLY_PUT_SOURCE+\");\n\tif (c & MCI_OVLY_PUT_DESTINATION) strcat(eb, \"OVLY_PUT_DESTINATION+\");\n\tif (c & MCI_OVLY_PUT_FRAME) strcat(eb, \"OVLY_PUT_FRAME+\");\n\tif (c & MCI_OVLY_PUT_VIDEO) strcat(eb, \"OVLY_PUT_VIDEO+\");\n\tif (c & MCI_OVLY_WHERE_SOURCE) strcat(eb, \"OVLY_WHERE_SOURCE+\");\n\tif (c & MCI_OVLY_WHERE_DESTINATION) strcat(eb, \"OVLY_WHERE_DESTINATION+\");\n\tif (c & MCI_OVLY_WHERE_FRAME) strcat(eb, \"OVLY_WHERE_FRAME+\");\n\tif (c & MCI_OVLY_WHERE_VIDEO) strcat(eb, \"OVLY_WHERE_VIDEO+\");\n\t*/\n\tl=strlen(eb);\n\tif (l>strlen(\"MCI_\")) eb[l-1]=0; // delete last '+' if any\n\telse strcpy(eb,\"NULL\");\n\treturn(eb);\n}\n\nchar *ExplainRegType(DWORD c)\n{\n\tchar *Captions[12]={\n\t\t\"REG_NONE\", \"REG_SZ\", \"REG_EXPAND_SZ\", \"REG_BINARY\", \n\t\t\"REG_DWORD\", \"REG_DWORD_BIG_ENDIAN\", \"REG_LINK\", \"REG_MULTI_SZ\", \n\t\t\"REG_RESOURCE_LIST\", \"REG_FULL_RESOURCE_DESCRIPTOR\",\n\t\t\"REG_RESOURCE_REQUIREMENTS_LIST\", \"REG_QWORD\"};\n\n\tif (c>=0 && c<12) return Captions[c];\n\treturn \"???\";\n}\n\nchar *ExplainDCType(DWORD c)\n{\n\tchar *Captions[GDI_OBJ_LAST+1]={\n\t\t\"NULL\", \"OBJ_PEN\", \"OBJ_BRUSH\", \"OBJ_DC\", \n\t\t\"OBJ_METADC\", \"OBJ_PAL\", \"OBJ_FONT\", \"OBJ_BITMAP\", \n\t\t\"OBJ_REGION\", \"OBJ_METAFILE\", \"OBJ_MEMDC\", \"OBJ_EXTPEN\",\n\t\t\"OBJ_ENHMETADC\", \"OBJ_ENHMETAFILE\", \"OBJ_COLORSPACE\"};\n\n\tif (c>=0 && c<=GDI_OBJ_LAST) return Captions[c];\n\treturn \"???\";\n}\n\nchar *ExplainPeekRemoveMsg(DWORD c)\n{\n\tstatic char eb[128];\n\tstrcpy(eb, (c & PM_REMOVE) ? \"PM_REMOVE\" : \"PM_NOREMOVE\");\n\tif(c & PM_NOYIELD) strcat(eb, \"+NOYIELD\");\n\tc >>= 16;\n\tif(c & QS_MOUSEMOVE) strcat(eb, \"+MOUSEMOVE\");\n\tif(c & QS_MOUSEBUTTON) strcat(eb, \"+MOUSEBUTTON\");\n\tif(c & QS_KEY) strcat(eb, \"+KEY\");\n\tif(c & QS_RAWINPUT) strcat(eb, \"+RAWINPUT\");\n\tif(c & QS_PAINT) strcat(eb, \"+PAINT\");\n\tif(c & QS_POSTMESSAGE) strcat(eb, \"+POSTMESSAGE\");\n\tif(c & QS_HOTKEY) strcat(eb, \"+HOTKEY\");\n\tif(c & QS_TIMER) strcat(eb, \"+TIMER\");\n\tif(c & QS_SENDMESSAGE) strcat(eb, \"+SENDMESSAGE\");\n\tif(c & QS_ALLPOSTMESSAGE) strcat(eb, \"+ALLPOSTMESSAGE\");\n\treturn(eb);\n}\n\nchar *ExplainGetDCExFlags(DWORD c)\n{\n\tstatic char eb[128];\n\tunsigned int l;\n\tstrcpy(eb,\"DCX_\");\n\tif(c & DCX_WINDOW) strcat(eb, \"WINDOW+\");\n\tif(c & DCX_CACHE) strcat(eb, \"CACHE+\");\n\tif(c & DCX_PARENTCLIP) strcat(eb, \"PARENTCLIP+\");\n\tif(c & DCX_CLIPSIBLINGS) strcat(eb, \"CLIPSIBLINGS+\");\n\tif(c & DCX_CLIPCHILDREN) strcat(eb, \"CLIPCHILDREN+\");\n\tif(c & DCX_NORESETATTRS) strcat(eb, \"NORESETATTRS+\");\n\tif(c & DCX_EXCLUDERGN) strcat(eb, \"EXCLUDERGN+\");\n\tif(c & DCX_EXCLUDEUPDATE) strcat(eb, \"EXCLUDEUPDATE+\");\n\tif(c & DCX_INTERSECTRGN) strcat(eb, \"INTERSECTRGN+\");\n\tif(c & DCX_INTERSECTUPDATE) strcat(eb, \"INTERSECTUPDATE+\");\n\tif(c & DCX_VALIDATE) strcat(eb, \"VALIDATE+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DCX_\")) eb[l-1]=0; // delete last '+' if any\n\telse strcpy(eb,\"NULL\");\n\treturn(eb);\n}\n\nchar *ExplainPaletteUse(UINT uUsage)\n{\n\tchar *eb = \"SYSPAL_ERROR\";\n\tswitch(uUsage){\n\t\tcase SYSPAL_STATIC: eb=\"SYSPAL_STATIC\"; break;\n\t\tcase SYSPAL_NOSTATIC: eb=\"SYSPAL_NOSTATIC\"; break;\n\t\tcase SYSPAL_NOSTATIC256: eb=\"SYSPAL_NOSTATIC256\"; break;\n\t}\n\treturn eb;\n}\n\nchar *ExplainRasterCaps(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"RC_\");\n\tif(c & RC_BITBLT) strcat(eb, \"BITBLT+\");\n\tif(c & RC_BANDING) strcat(eb, \"BANDING+\");\n\tif(c & RC_SCALING) strcat(eb, \"SCALING+\");\n\tif(c & RC_BITMAP64) strcat(eb, \"BITMAP64+\");\n\tif(c & RC_GDI20_OUTPUT) strcat(eb, \"GDI20_OUTPUT+\");\n\tif(c & RC_GDI20_STATE) strcat(eb, \"GDI20_STATE+\");\n\tif(c & RC_SAVEBITMAP) strcat(eb, \"SAVEBITMAP+\");\n\tif(c & RC_DI_BITMAP) strcat(eb, \"DI_BITMAP+\");\n\tif(c & RC_PALETTE) strcat(eb, \"PALETTE+\");\n\tif(c & RC_DIBTODEV) strcat(eb, \"DIBTODEV+\");\n\tif(c & RC_BIGFONT) strcat(eb, \"BIGFONT+\");\n\tif(c & RC_STRETCHBLT) strcat(eb, \"STRETCHBLT+\");\n\tif(c & RC_FLOODFILL) strcat(eb, \"FLOODFILL+\");\n\tif(c & RC_STRETCHDIB) strcat(eb, \"STRETCHDIB+\");\n\tif(c & RC_OP_DX_OUTPUT) strcat(eb, \"OP_DX_OUTPUT+\");\n\tif(c & RC_DEVBITS) strcat(eb, \"DEVBITS+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"RC_\")) eb[l-1]=0; // delete last '+' if any\n\telse strcpy(eb,\"NULL\");\n\treturn(eb);\n}\n\nchar *ExplainD3DRenderState(DWORD c)\n{\n\tchar *p;\n\tif((c>=D3DRENDERSTATE_STIPPLEPATTERN00) && (c<=D3DRENDERSTATE_STIPPLEPATTERN31)) p=\"STIPPLEPATTERNnn\";\n\telse\n\tif((c>=D3DRENDERSTATE_WRAP0) && (c<=D3DRENDERSTATE_WRAP7)) p=\"WRAPn\";\n\telse\n\tswitch(c){\n\t\tcase D3DRENDERSTATE_ANTIALIAS: p=\"ANTIALIAS\"; break;\n\t\tcase D3DRENDERSTATE_TEXTUREPERSPECTIVE: p=\"TEXTUREPERSPECTIVE\"; break;\n\t\tcase D3DRENDERSTATE_ZENABLE: p=\"ZENABLE\"; break;\n\t\tcase D3DRENDERSTATE_FILLMODE: p=\"FILLMODE\"; break;\n\t\tcase D3DRENDERSTATE_SHADEMODE: p=\"SHADEMODE\"; break;\n\t\tcase D3DRENDERSTATE_LINEPATTERN: p=\"LINEPATTERN\"; break;\n\t\tcase D3DRENDERSTATE_ZWRITEENABLE: p=\"ZWRITEENABLE\"; break;\n\t\tcase D3DRENDERSTATE_ALPHATESTENABLE: p=\"ALPHATESTENABLE\"; break;\n\t\tcase D3DRENDERSTATE_LASTPIXEL: p=\"LASTPIXEL\"; break;\n\t\tcase D3DRENDERSTATE_SRCBLEND: p=\"SRCBLEND\"; break;\n\t\tcase D3DRENDERSTATE_DESTBLEND: p=\"DESTBLEND\"; break;\n\t\tcase D3DRENDERSTATE_CULLMODE: p=\"CULLMODE\"; break;\n\t\tcase D3DRENDERSTATE_ZFUNC: p=\"ZFUNC\"; break;\n\t\tcase D3DRENDERSTATE_ALPHAREF: p=\"ALPHAREF\"; break;\n\t\tcase D3DRENDERSTATE_ALPHAFUNC: p=\"ALPHAFUNC\"; break;\n\t\tcase D3DRENDERSTATE_DITHERENABLE: p=\"DITHERENABLE\"; break;\n\t\tcase D3DRENDERSTATE_ALPHABLENDENABLE: p=\"ALPHABLENDENABLE\"; break;\n\t\tcase D3DRENDERSTATE_FOGENABLE: p=\"FOGENABLE\"; break;\n\t\tcase D3DRENDERSTATE_SPECULARENABLE: p=\"SPECULARENABLE\"; break;\n\t\tcase D3DRENDERSTATE_ZVISIBLE: p=\"ZVISIBLE\"; break;\n\t\tcase D3DRENDERSTATE_STIPPLEDALPHA: p=\"STIPPLEDALPHA\"; break;\n\t\tcase D3DRENDERSTATE_FOGCOLOR: p=\"FOGCOLOR\"; break;\n\t\tcase D3DRENDERSTATE_FOGTABLEMODE: p=\"FOGTABLEMODE\"; break;\n\t\tcase D3DRENDERSTATE_FOGSTART: p=\"FOGSTART\"; break;\n\t\tcase D3DRENDERSTATE_FOGEND: p=\"FOGEND\"; break;\n\t\tcase D3DRENDERSTATE_FOGDENSITY: p=\"FOGDENSITY\"; break;\n\t\tcase D3DRENDERSTATE_EDGEANTIALIAS: p=\"EDGEANTIALIAS\"; break;\n\t\tcase D3DRENDERSTATE_COLORKEYENABLE: p=\"COLORKEYENABLE\"; break;\n\t\tcase D3DRENDERSTATE_STENCILENABLE: p=\"STENCILENABLE\"; break;\n\t\tcase D3DRENDERSTATE_ZBIAS: p=\"ZBIAS\"; break;\n\t\tcase D3DRENDERSTATE_RANGEFOGENABLE: p=\"RANGEFOGENABLE\"; break;\n\t\tcase D3DRENDERSTATE_STENCILFAIL: p=\"STENCILFAIL\"; break;\n\t\tcase D3DRENDERSTATE_STENCILZFAIL: p=\"STENCILZFAIL\"; break;\n\t\tcase D3DRENDERSTATE_STENCILPASS: p=\"STENCILPASS\"; break;\n\t\tcase D3DRENDERSTATE_STENCILFUNC: p=\"STENCILFUNC\"; break;\n\t\tcase D3DRENDERSTATE_STENCILREF: p=\"STENCILREF\"; break;\n\t\tcase D3DRENDERSTATE_STENCILMASK: p=\"STENCILMASK\"; break;\n\t\tcase D3DRENDERSTATE_STENCILWRITEMASK: p=\"STENCILWRITEMASK\"; break;\n\t\tcase D3DRENDERSTATE_TEXTUREFACTOR: p=\"TEXTUREFACTOR\"; break;\n\t\tcase D3DRENDERSTATE_CLIPPING: p=\"CLIPPING\"; break;\n\t\tcase D3DRENDERSTATE_LIGHTING: p=\"LIGHTING\"; break;\n\t\tcase D3DRENDERSTATE_EXTENTS: p=\"EXTENTS\"; break;\n\t\tcase D3DRENDERSTATE_AMBIENT: p=\"AMBIENT\"; break;\n\t\tcase D3DRENDERSTATE_FOGVERTEXMODE: p=\"FOGVERTEXMODE\"; break;\n\t\tcase D3DRENDERSTATE_COLORVERTEX: p=\"COLORVERTEX\"; break;\n\t\tcase D3DRENDERSTATE_LOCALVIEWER: p=\"LOCALVIEWER\"; break;\n\t\tcase D3DRENDERSTATE_NORMALIZENORMALS: p=\"NORMALIZENORMALS\"; break;\n\t\tcase D3DRENDERSTATE_COLORKEYBLENDENABLE: p=\"COLORKEYBLENDENABLE\"; break;\n\t\tcase D3DRENDERSTATE_DIFFUSEMATERIALSOURCE: p=\"DIFFUSEMATERIALSOURCE\"; break;\n\t\tcase D3DRENDERSTATE_SPECULARMATERIALSOURCE: p=\"SPECULARMATERIALSOURCE\"; break;\n\t\tcase D3DRENDERSTATE_AMBIENTMATERIALSOURCE: p=\"AMBIENTMATERIALSOURCE\"; break;\n\t\tcase D3DRENDERSTATE_EMISSIVEMATERIALSOURCE: p=\"EMISSIVEMATERIALSOURCE\"; break;\n\t\tcase D3DRENDERSTATE_VERTEXBLEND: p=\"VERTEXBLEND\"; break;\n\t\tcase D3DRENDERSTATE_CLIPPLANEENABLE: p=\"CLIPPLANEENABLE\"; break;\n\n\t\t// unsupported legacy\n\n\t\tcase D3DRENDERSTATE_TEXTUREHANDLE: p=\"TEXTUREHANDLE\"; break;\n\t\tcase D3DRENDERSTATE_TEXTUREADDRESS: p=\"TEXTUREADDRESS\"; break;\n\t\tcase D3DRENDERSTATE_WRAPU: p=\"WRAPU\"; break;\n\t\tcase D3DRENDERSTATE_WRAPV: p=\"WRAPV\"; break;\n\t\tcase D3DRENDERSTATE_MONOENABLE: p=\"MONOENABLE\"; break;\n\t\tcase D3DRENDERSTATE_ROP2: p=\"ROP2\"; break;\n\t\tcase D3DRENDERSTATE_PLANEMASK: p=\"PLANEMASK\"; break;\n\t\tcase D3DRENDERSTATE_TEXTUREMAG: p=\"TEXTUREMAG\"; break;\n\t\tcase D3DRENDERSTATE_TEXTUREMIN: p=\"TEXTUREMIN\"; break;\n\t\tcase D3DRENDERSTATE_TEXTUREMAPBLEND: p=\"TEXTUREMAPBLEND\"; break;\n\t\tcase D3DRENDERSTATE_SUBPIXEL: p=\"SUBPIXEL\"; break;\n\t\tcase D3DRENDERSTATE_SUBPIXELX: p=\"SUBPIXELX\"; break;\n\t\tcase D3DRENDERSTATE_STIPPLEENABLE: p=\"STIPPLEENABLE\"; break;\n\t\tcase D3DRENDERSTATE_BORDERCOLOR: p=\"BORDERCOLOR\"; break;\n\t\tcase D3DRENDERSTATE_TEXTUREADDRESSU: p=\"TEXTUREADDRESSU\"; break;\n\t\tcase D3DRENDERSTATE_TEXTUREADDRESSV: p=\"TEXTUREADDRESSV\"; break;\n\t\tcase D3DRENDERSTATE_MIPMAPLODBIAS: p=\"MIPMAPLODBIAS\"; break;\n\t\tcase D3DRENDERSTATE_ANISOTROPY: p=\"ANISOTROPY\"; break;\n\t\tcase D3DRENDERSTATE_FLUSHBATCH: p=\"FLUSHBATCH\"; break;\n\t\tcase D3DRENDERSTATE_FORCE_DWORD: p=\"FORCE_DWORD\"; break;\n\t\tdefault: p=\"???\"; break;\n\t}\n\treturn p;\n}\n\nchar *ExplainRenderstateValue(DWORD Value)\n{\n\tchar *p;\n\tswitch(Value){\n\tcase D3DCMP_NEVER               : p=\"D3DCMP_NEVER\"; break;\n\tcase D3DCMP_LESS                : p=\"D3DCMP_LESS\"; break;\n\tcase D3DCMP_EQUAL               : p=\"D3DCMP_EQUAL\"; break;\n\tcase D3DCMP_LESSEQUAL           : p=\"D3DCMP_LESSEQUAL\"; break;\n\tcase D3DCMP_GREATER             : p=\"D3DCMP_GREATER\"; break;\n\tcase D3DCMP_NOTEQUAL            : p=\"D3DCMP_NOTEQUAL\"; break;\n\tcase D3DCMP_GREATEREQUAL        : p=\"D3DCMP_GREATEREQUAL\"; break;\n\tcase D3DCMP_ALWAYS              : p=\"D3DCMP_ALWAYS\"; break;\n\tdefault\t\t\t\t\t\t\t: p=\"???\"; break;\n\t}\n\treturn p;\n}\n\nchar *ExplainWfPFlags(DWORD c)\n{\n\tstatic char eb[128];\n\tunsigned int l;\n\tstrcpy(eb,\"CWP_\");\n\tif(c & CWP_SKIPDISABLED) strcat(eb, \"SKIPDISABLED+\");\n\tif(c & CWP_SKIPINVISIBLE) strcat(eb, \"SKIPINVISIBLE+\");\n\tif(c & CWP_SKIPTRANSPARENT) strcat(eb, \"SKIPTRANSPARENT+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"CWP_\")) eb[l-1]=0; // delete last '+' if any\n\telse strcpy(eb,\"CWP_ALL\");\n\treturn(eb);\n}\n\nchar *ExplainChangeDisplaySettingsFlags(DWORD c)\n{\n\tstatic char eb[128];\n\tunsigned int l;\n\tstrcpy(eb,\"CDS_\");\n\tif(c & CDS_UPDATEREGISTRY) strcat(eb, \"UPDATEREGISTRY+\");\n\tif(c & CDS_TEST) strcat(eb, \"TEST+\");\n\tif(c & CDS_FULLSCREEN) strcat(eb, \"FULLSCREEN+\");\n\tif(c & CDS_GLOBAL) strcat(eb, \"GLOBAL+\");\n\tif(c & CDS_SET_PRIMARY) strcat(eb, \"SET_PRIMARY+\");\n\tif(c & CDS_VIDEOPARAMETERS) strcat(eb, \"VIDEOPARAMETERS+\");\n\tif(c & CDS_ENABLE_UNSAFE_MODES) strcat(eb, \"ENABLE_UNSAFE_MODES+\");\n\tif(c & CDS_DISABLE_UNSAFE_MODES) strcat(eb, \"DISABLE_UNSAFE_MODES+\");\n\tif(c & CDS_RESET) strcat(eb, \"RESET+\");\n\tif(c & CDS_NORESET) strcat(eb, \"NORESET+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"CDS_\")) eb[l-1]=0; // delete last '+' if any\n\telse strcpy(eb,\"NULL\");\n\treturn(eb);\n}\n\nchar *ExplainDICooperativeFlags(DWORD c)\n{\n\tstatic char eb[128];\n\tunsigned int l;\n\tstrcpy(eb,\"DISCL_\");\n\tif(c & DISCL_EXCLUSIVE) strcat(eb, \"EXCLUSIVE+\");\n\tif(c & DISCL_NONEXCLUSIVE) strcat(eb, \"NONEXCLUSIVE+\");\n\tif(c & DISCL_FOREGROUND) strcat(eb, \"FOREGROUND+\");\n\tif(c & DISCL_BACKGROUND) strcat(eb, \"BACKGROUND+\");\n\tif(c & DISCL_NOWINKEY) strcat(eb, \"NOWINKEY+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DISCL_\")) eb[l-1]=0; // delete last '+' if any\n\telse strcpy(eb,\"NULL\");\n\treturn(eb);\n}\n\nchar *ExplainRegionType(DWORD c)\n{\n\tstatic char *sRetCodes[4]={\"ERROR\", \"NULLREGION\", \"SIMPLEREGION\", \"COMPLEXREGION\"};\n\tif(c<4) return sRetCodes[c];\n\treturn \"unknown\";\n}\n\nchar *ExplainZBufferBitDepths(DWORD c)\n{\n\tstatic char eb[128];\n\tunsigned int l;\n\tstrcpy(eb,\"DDBD_\");\n\tif(c & DDBD_8) strcat(eb, \"8+\");\n\tif(c & DDBD_16) strcat(eb, \"16+\");\n\tif(c & DDBD_24) strcat(eb, \"24+\");\n\tif(c & DDBD_32) strcat(eb, \"32+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"DDBD_\")) eb[l-1]=0; // delete last '+' if any\n\telse strcpy(eb,\"NULL\");\n\treturn(eb);\n}\n\n\n#define _FACD3D  0x876\n#define MAKE_D3DHRESULT( code )  MAKE_HRESULT( 1, _FACD3D, code )\n#define MAKE_D3DSTATUS( code )  MAKE_HRESULT( 0, _FACD3D, code )\n\n#define D3DERR_DRIVERINTERNALERROR              MAKE_D3DHRESULT(2087)\n#define D3DERR_NOTFOUND                         MAKE_D3DHRESULT(2150)\n#define D3DERR_MOREDATA                         MAKE_D3DHRESULT(2151)\n#define D3DERR_DEVICELOST                       MAKE_D3DHRESULT(2152)\n#define D3DERR_DEVICENOTRESET                   MAKE_D3DHRESULT(2153)\n#define D3DERR_NOTAVAILABLE                     MAKE_D3DHRESULT(2154)\n#define D3DERR_OUTOFVIDEOMEMORY                 MAKE_D3DHRESULT(380)\n#define D3DERR_INVALIDDEVICE                    MAKE_D3DHRESULT(2155)\n#define D3DERR_INVALIDCALL                      MAKE_D3DHRESULT(2156)\n#define D3DERR_DRIVERINVALIDCALL                MAKE_D3DHRESULT(2157)\n#define D3DERR_WASSTILLDRAWING                  MAKE_D3DHRESULT(540)\n#define D3DOK_NOAUTOGEN                         MAKE_D3DSTATUS(2159)\n\n#define D3DERR_DEVICEREMOVED                    MAKE_D3DHRESULT(2160)\n#define S_NOT_RESIDENT                          MAKE_D3DSTATUS(2165)\n#define S_RESIDENT_IN_SHARED_MEMORY             MAKE_D3DSTATUS(2166)\n#define S_PRESENT_MODE_CHANGED                  MAKE_D3DSTATUS(2167)\n#define S_PRESENT_OCCLUDED                      MAKE_D3DSTATUS(2168)\n#define D3DERR_DEVICEHUNG                       MAKE_D3DHRESULT(2164)\n#define D3DERR_UNSUPPORTEDOVERLAY               MAKE_D3DHRESULT(2171)\n#define D3DERR_UNSUPPORTEDOVERLAYFORMAT         MAKE_D3DHRESULT(2172)\n#define D3DERR_CANNOTPROTECTCONTENT             MAKE_D3DHRESULT(2173)\n#define D3DERR_UNSUPPORTEDCRYPTO                MAKE_D3DHRESULT(2174)\n#define D3DERR_PRESENT_STATISTICS_DISJOINT      MAKE_D3DHRESULT(2180)\n\nchar *ExplainDDError(DWORD c)\n{\n\tstatic char *eb;\n\tswitch(c)\n\t{\n\t\tcase DD_OK: \t\t\t\t\t\t\teb=\"DD_OK\"; break;\n\t\tcase DDERR_ALREADYINITIALIZED:\t\t\teb=\"DDERR_ALREADYINITIALIZED\"; break;\n\t\tcase DDERR_BLTFASTCANTCLIP:\t\t\t\teb=\"DDERR_BLTFASTCANTCLIP\"; break;\n\t\tcase DDERR_CANNOTATTACHSURFACE: \t\teb=\"DDERR_CANNOTATTACHSURFACE\"; break;\n\t\tcase DDERR_CANNOTDETACHSURFACE: \t\teb=\"DDERR_CANNOTDETACHSURFACE\"; break;\n\t\tcase DDERR_CANTCREATEDC: \t\t\t\teb=\"DDERR_CANTCREATEDC\"; break;\n\t\tcase DDERR_CANTDUPLICATE: \t\t\t\teb=\"DDERR_CANTDUPLICATE\"; break;\n\t\tcase DDERR_CANTLOCKSURFACE: \t\t\teb=\"DDERR_CANTLOCKSURFACE\"; break;\n\t\tcase DDERR_CANTPAGELOCK: \t\t\t\teb=\"DDERR_CANTPAGELOCK\"; break;\n\t\tcase DDERR_CANTPAGEUNLOCK: \t\t\t\teb=\"DDERR_CANTPAGEUNLOCK\"; break;\n\t\tcase DDERR_CLIPPERISUSINGHWND: \t\t\teb=\"DDERR_CLIPPERISUSINGHWND\"; break;\n\t\tcase DDERR_COLORKEYNOTSET: \t\t\t\teb=\"DDERR_COLORKEYNOTSET\"; break;\n\t\tcase DDERR_CURRENTLYNOTAVAIL: \t\t\teb=\"DDERR_CURRENTLYNOTAVAIL\"; break;\n\t\tcase DDERR_DCALREADYCREATED: \t\t\teb=\"DDERR_DCALREADYCREATED\"; break;\n\t\tcase DDERR_DEVICEDOESNTOWNSURFACE: \t\teb=\"DDERR_DEVICEDOESNTOWNSURFACE\"; break;\n\t\tcase DDERR_DIRECTDRAWALREADYCREATED: \teb=\"DDERR_DIRECTDRAWALREADYCREATED\"; break;\n\t\tcase DDERR_EXCEPTION: \t\t\t\t\teb=\"DDERR_EXCEPTION\"; break;\n\t\tcase DDERR_EXCLUSIVEMODEALREADYSET: \teb=\"DDERR_EXCLUSIVEMODEALREADYSET\"; break;\n\t\tcase DDERR_EXPIRED: \t\t\t\t\teb=\"DDERR_EXPIRED\"; break;\n\t\tcase DDERR_GENERIC: \t\t\t\t\teb=\"DDERR_GENERIC\"; break;\n\t\tcase DDERR_HEIGHTALIGN: \t\t\t\teb=\"DDERR_HEIGHTALIGN\"; break; \t\n\t\tcase DDERR_HWNDALREADYSET: \t \t\t\teb=\"DDERR_HWNDALREADYSET\"; break;\n\t\tcase DDERR_HWNDSUBCLASSED: \t \t\t\teb=\"DDERR_HWNDSUBCLASSED\"; break;\n\t\tcase DDERR_IMPLICITLYCREATED: \t\t\teb=\"DDERR_IMPLICITLYCREATED\"; break;\n\t\tcase DDERR_INCOMPATIBLEPRIMARY: \t \teb=\"DDERR_INCOMPATIBLEPRIMARY\"; break;\n\t\tcase DDERR_INVALIDCAPS: \t\t \t\teb=\"DDERR_INVALIDCAPS\"; break;\n\t\tcase DDERR_INVALIDCLIPLIST:\t \t\t\teb=\"DDERR_INVALIDCLIPLIST\"; break;\n\t\tcase DDERR_INVALIDDIRECTDRAWGUID:\t \teb=\"DDERR_INVALIDDIRECTDRAWGUID\"; break;\n\t\tcase DDERR_INVALIDMODE: \t \t\t\teb=\"DDERR_INVALIDMODE\"; break;\n\t\tcase DDERR_INVALIDOBJECT: \t \t\t\teb=\"DDERR_INVALIDOBJECT\"; break;\n\t\tcase DDERR_INVALIDPARAMS: \t \t\t\teb=\"DDERR_INVALIDPARAMS\"; break;\n\t\tcase DDERR_INVALIDPIXELFORMAT:\t \t\teb=\"DDERR_INVALIDPIXELFORMAT\"; break;\n\t\tcase DDERR_INVALIDPOSITION: \t\t \teb=\"DDERR_INVALIDPOSITION\"; break;\n\t\tcase DDERR_INVALIDRECT: \t\t \t\teb=\"DDERR_INVALIDRECT\"; break;\n\t\tcase DDERR_INVALIDSTREAM:\t \t\t\teb=\"DDERR_INVALIDSTREAM\"; break;\n\t\tcase DDERR_INVALIDSURFACETYPE:\t \t\teb=\"DDERR_INVALIDSURFACETYPE\"; break;\n\t\tcase DDERR_LOCKEDSURFACES: \t\t \t\teb=\"DDERR_LOCKEDSURFACES\"; break;\n\t\tcase DDERR_MOREDATA: \t\t \t\t\teb=\"DDERR_MOREDATA\"; break;\n\t\tcase DDERR_NO3D: \t\t \t\t\t\teb=\"DDERR_NO3D\"; break;\n\t\tcase DDERR_NOALPHAHW:\t \t\t\t\teb=\"DDERR_NOALPHAHW\"; break;\n\t\tcase DDERR_NOBLTHW: \t \t\t\t\teb=\"DDERR_NOBLTHW\"; break;\n\t\tcase DDERR_NOCLIPLIST: \t \t\t\t\teb=\"DDERR_NOCLIPLIST\"; break;\n\t\tcase DDERR_NOCLIPPERATTACHED: \t \t\teb=\"DDERR_NOCLIPPERATTACHED\"; break;\n\t\tcase DDERR_NOCOLORCONVHW: \t\t \t\teb=\"DDERR_NOCOLORCONVHW\"; break;\n\t\tcase DDERR_NOCOLORKEY: \t\t \t\t\teb=\"DDERR_NOCOLORKEY\"; break;\n\t\tcase DDERR_NOCOLORKEYHW: \t \t\t\teb=\"DDERR_NOCOLORKEYHW\"; break;\n\t\tcase DDERR_NOCOOPERATIVELEVELSET: \t \teb=\"DDERR_NOCOOPERATIVELEVELSET\"; break;\n\t\tcase DDERR_NODC: \t\t \t\t\t\teb=\"DDERR_NODC\"; break;\n\t\tcase DDERR_NODDROPSHW:\t \t\t\t\teb=\"DDERR_NODDROPSHW\"; break;\n\t\tcase DDERR_NODIRECTDRAWHW:\t \t\t\teb=\"DDERR_NODIRECTDRAWHW\"; break;\n\t\tcase DDERR_NODIRECTDRAWSUPPORT: \t \teb=\"DDERR_NODIRECTDRAWSUPPORT\"; break;\n\t\tcase DDERR_NOEMULATION: \t\t \t\teb=\"DDERR_NOEMULATION\"; break;\n\t\tcase DDERR_NOEXCLUSIVEMODE: \t \t\teb=\"DDERR_NOEXCLUSIVEMODE\"; break;\n\t\tcase DDERR_NOFLIPHW: \t\t \t\t\teb=\"DDERR_NOFLIPHW\"; break;\n\t\tcase DDERR_NOFOCUSWINDOW: \t\t \t\teb=\"DDERR_NOFOCUSWINDOW\"; break;\n\t\tcase DDERR_NOGDI: \t\t \t\t\t\teb=\"DDERR_NOGDI\"; break;\n\t\tcase DDERR_NOHWND: \t\t \t\t\t\teb=\"DDERR_NOHWND\"; break;\n\t\tcase DDERR_NOMIPMAPHW: \t \t\t\t\teb=\"DDERR_NOMIPMAPHW\"; break;\n\t\tcase DDERR_NOMIRRORHW: \t \t\t\t\teb=\"DDERR_NOMIRRORHW\"; break;\n\t\tcase DDERR_NONONLOCALVIDMEM: \t \t\teb=\"DDERR_NONONLOCALVIDMEM\"; break;\n\t\tcase DDERR_NOOPTIMIZEHW: \t\t \t\teb=\"DDERR_NOOPTIMIZEHW\"; break;\n\t\tcase DDERR_NOOVERLAYDEST: \t\t \t\teb=\"DDERR_NOOVERLAYDEST\"; break;\n\t\tcase DDERR_NOOVERLAYHW: \t\t \t\teb=\"DDERR_NOOVERLAYHW\"; break;\n\t\tcase DDERR_NOPALETTEATTACHED:\t \t\teb=\"DDERR_NOPALETTEATTACHED\"; break;\n\t\tcase DDERR_NOPALETTEHW: \t\t \t\teb=\"DDERR_NOPALETTEHW\"; break;\n\t\tcase DDERR_NORASTEROPHW: \t \t\t\teb=\"DDERR_NORASTEROPHW\"; break;\n\t\tcase DDERR_NOROTATIONHW: \t \t\t\teb=\"DDERR_NOROTATIONHW\"; break;\n\t\tcase DDERR_NOSTRETCHHW: \t\t \t\teb=\"DDERR_NOSTRETCHHW\"; break;\n\t\tcase DDERR_NOT4BITCOLOR: \t \t\t\teb=\"DDERR_NOT4BITCOLOR\"; break;\n\t\tcase DDERR_NOT4BITCOLORINDEX: \t \t\teb=\"DDERR_NOT4BITCOLORINDEX\"; break;\n\t\tcase DDERR_NOT8BITCOLOR: \t\t \t\teb=\"DDERR_NOT8BITCOLOR\"; break;\n\t\tcase DDERR_NOTAOVERLAYSURFACE: \t \t\teb=\"DDERR_NOTAOVERLAYSURFACE\"; break;\n\t\tcase DDERR_NOTEXTUREHW: \t \t\t\teb=\"DDERR_NOTEXTUREHW\"; break;\n\t\tcase DDERR_NOTFLIPPABLE: \t \t\t\teb=\"DDERR_NOTFLIPPABLE\"; break;\n\t\tcase DDERR_NOTFOUND: \t \t\t\t\teb=\"DDERR_NOTFOUND\"; break;\n\t\tcase DDERR_NOTINITIALIZED:\t \t\t\teb=\"DDERR_NOTINITIALIZED\"; break;\n\t\tcase DDERR_NOTLOADED: \t\t \t\t\teb=\"DDERR_NOTLOADED\"; break;\n\t\tcase DDERR_NOTLOCKED: \t\t \t\t\teb=\"DDERR_NOTLOCKED\"; break;\n\t\tcase DDERR_NOTPAGELOCKED: \t\t \t\teb=\"DDERR_NOTPAGELOCKED\"; break;\n\t\tcase DDERR_NOTPALETTIZED: \t\t \t\teb=\"DDERR_NOTPALETTIZED\"; break;\n\t\tcase DDERR_NOVSYNCHW: \t\t \t\t\teb=\"DDERR_NOVSYNCHW\"; break;\n\t\tcase DDERR_NOZBUFFERHW: \t\t \t\teb=\"DDERR_NOZBUFFERHW\"; break;\n\t\tcase DDERR_NOZOVERLAYHW: \t \t\t\teb=\"DDERR_NOZOVERLAYHW\"; break;\n\t\tcase DDERR_OUTOFCAPS: \t\t \t\t\teb=\"DDERR_OUTOFCAPS\"; break;\n\t\tcase DDERR_OUTOFMEMORY: \t\t \t\teb=\"DDERR_OUTOFMEMORY\"; break;\n\t\tcase DDERR_OUTOFVIDEOMEMORY: \t \t\teb=\"DDERR_OUTOFVIDEOMEMORY\"; break;\n\t\tcase DDERR_OVERLAPPINGRECTS: \t \t\teb=\"DDERR_OVERLAPPINGRECTS\"; break;\n\t\tcase DDERR_OVERLAYCANTCLIP: \t\t \teb=\"DDERR_OVERLAYCANTCLIP\"; break;\n\t\tcase DDERR_OVERLAYCOLORKEYONLYONEACTIVE:eb=\"DDERR_OVERLAYCOLORKEYONLYONEACTIVE\"; break;\n\t\tcase DDERR_OVERLAYNOTVISIBLE: \t\t \teb=\"DDERR_OVERLAYNOTVISIBLE\"; break;\n\t\tcase DDERR_PALETTEBUSY: \t\t \t\teb=\"DDERR_PALETTEBUSY\"; break;\n\t\tcase DDERR_PRIMARYSURFACEALREADYEXISTS: eb=\"DDERR_PRIMARYSURFACEALREADYEXISTS\"; break;\n\t\tcase DDERR_REGIONTOOSMALL: \t \t\t\teb=\"DDERR_REGIONTOOSMALL\"; break;\n\t\tcase DDERR_SURFACEALREADYATTACHED: \t \teb=\"DDERR_SURFACEALREADYATTACHED\"; break;\n\t\tcase DDERR_SURFACEALREADYDEPENDENT: \teb=\"DDERR_SURFACEALREADYDEPENDENT\"; break;\n\t\tcase DDERR_SURFACEBUSY: \t\t \t\teb=\"DDERR_SURFACEBUSY\"; break;\n\t\tcase DDERR_SURFACEISOBSCURED: \t \t\teb=\"DDERR_SURFACEISOBSCURED\"; break;\n\t\tcase DDERR_SURFACELOST: \t\t \t\teb=\"DDERR_SURFACELOST\"; break;\n\t\tcase DDERR_SURFACENOTATTACHED: \t\t \teb=\"DDERR_SURFACENOTATTACHED\"; break;\n\t\tcase DDERR_TOOBIGHEIGHT: \t\t \t\teb=\"DDERR_TOOBIGHEIGHT\"; break;\n\t\tcase DDERR_TOOBIGSIZE: \t\t \t\t\teb=\"DDERR_TOOBIGSIZE\"; break;\n\t\tcase DDERR_TOOBIGWIDTH: \t\t \t\teb=\"DDERR_TOOBIGWIDTH\"; break;\n\t\tcase DDERR_UNSUPPORTED: \t\t \t\teb=\"DDERR_UNSUPPORTED\"; break;\n\t\tcase DDERR_UNSUPPORTEDFORMAT: \t \t\teb=\"DDERR_UNSUPPORTEDFORMAT\"; break;\n\t\tcase DDERR_UNSUPPORTEDMASK: \t\t \teb=\"DDERR_UNSUPPORTEDMASK\"; break;\n\t\tcase DDERR_UNSUPPORTEDMODE: \t\t \teb=\"DDERR_UNSUPPORTEDMODE\"; break;\n\t\tcase DDERR_VERTICALBLANKINPROGRESS: \teb=\"DDERR_VERTICALBLANKINPROGRESS\"; break;\n\t\tcase DDERR_VIDEONOTACTIVE: \t\t \t\teb=\"DDERR_VIDEONOTACTIVE\"; break;\n\t\tcase DDERR_WASSTILLDRAWING: \t\t \teb=\"DDERR_WASSTILLDRAWING\"; break;\n\t\tcase DDERR_WRONGMODE: \t\t \t\t\teb=\"DDERR_WRONGMODE\"; break;\n\t\tcase DDERR_XALIGN: \t\t \t\t\t\teb=\"DDERR_XALIGN\"; break;\n\t\tcase DDERR_NOTONMIPMAPSUBLEVEL:\t\t\teb=\"DDERR_NOTONMIPMAPSUBLEVEL\"; break;\n\t\t// D3D errors\n\t\tcase D3DERR_WRONGTEXTUREFORMAT: \t\teb=\"D3DERR_WRONGTEXTUREFORMAT\"; break;\n\t\tcase D3DERR_UNSUPPORTEDCOLOROPERATION: \teb=\"D3DERR_UNSUPPORTEDCOLOROPERATION\"; break;\n\t\tcase D3DERR_UNSUPPORTEDCOLORARG: \t\teb=\"D3DERR_UNSUPPORTEDCOLORARG\"; break;\n\t\tcase D3DERR_UNSUPPORTEDALPHAOPERATION: \teb=\"D3DERR_UNSUPPORTEDALPHAOPERATION\"; break;\n\t\tcase D3DERR_UNSUPPORTEDALPHAARG: \t\teb=\"D3DERR_UNSUPPORTEDALPHAARG\"; break;\n\t\tcase D3DERR_TOOMANYOPERATIONS: \t\t \teb=\"D3DERR_TOOMANYOPERATIONS\"; break;\n\t\tcase D3DERR_CONFLICTINGTEXTUREFILTER: \teb=\"D3DERR_CONFLICTINGTEXTUREFILTER\"; break;\n\t\tcase D3DERR_UNSUPPORTEDFACTORVALUE: \teb=\"D3DERR_UNSUPPORTEDFACTORVALUE\"; break;\n\t\tcase D3DERR_CONFLICTINGRENDERSTATE: \teb=\"D3DERR_CONFLICTINGRENDERSTATE\"; break;\n\t\tcase D3DERR_UNSUPPORTEDTEXTUREFILTER: \teb=\"D3DERR_UNSUPPORTEDTEXTUREFILTER\"; break;\n\t\tcase D3DERR_CONFLICTINGTEXTUREPALETTE: \teb=\"D3DERR_CONFLICTINGTEXTUREPALETTE\"; break;\n\t\tcase D3DERR_DRIVERINTERNALERROR: \t\teb=\"D3DERR_DRIVERINTERNALERROR\"; break;\n\t\tcase D3DERR_NOTFOUND: \t\t \t\t\teb=\"D3DERR_NOTFOUND\"; break;\n\t\tcase D3DERR_MOREDATA: \t\t \t\t\teb=\"D3DERR_MOREDATA\"; break;\n\t\tcase D3DERR_DEVICELOST: \t\t \t\teb=\"D3DERR_DEVICELOST\"; break;\n\t\tcase D3DERR_DEVICENOTRESET: \t\t \teb=\"D3DERR_DEVICENOTRESET\"; break;\n\t\tcase D3DERR_NOTAVAILABLE: \t\t \t\teb=\"D3DERR_NOTAVAILABLE\"; break;\n\t\t//case D3DERR_OUTOFVIDEOMEMORY: \t\t \teb=\"D3DERR_OUTOFVIDEOMEMORY\"; break;\n\t\tcase D3DERR_INVALIDDEVICE: \t\t \t\teb=\"D3DERR_INVALIDDEVICE\"; break;\n\t\tcase D3DERR_INVALIDCALL: \t\t \t\teb=\"D3DERR_INVALIDCALL\"; break;\n\t\tcase D3DERR_DRIVERINVALIDCALL: \t\t \teb=\"D3DERR_DRIVERINVALIDCALL\"; break;\n\t\t//case D3DERR_WASSTILLDRAWING: \t\t \teb=\"D3DERR_WASSTILLDRAWING\"; break;\n\t\tcase D3DOK_NOAUTOGEN: \t\t \t\t\teb=\"D3DOK_NOAUTOGEN\"; break;\n\t\tcase D3DERR_DEVICEREMOVED: \t\t \t\teb=\"D3DERR_DEVICEREMOVED\"; break;\n\t\tcase D3DERR_DEVICEHUNG: \t\t \t\teb=\"D3DERR_DEVICEHUNG\"; break;\n\t\tcase D3DERR_UNSUPPORTEDOVERLAY: \t\teb=\"D3DERR_UNSUPPORTEDOVERLAY\"; break;\n\t\tcase D3DERR_UNSUPPORTEDOVERLAYFORMAT: \teb=\"D3DERR_UNSUPPORTEDOVERLAYFORMAT\"; break;\n\t\tcase D3DERR_CANNOTPROTECTCONTENT: \t\teb=\"D3DERR_CANNOTPROTECTCONTENT\"; break;\n\t\tcase D3DERR_UNSUPPORTEDCRYPTO: \t\t \teb=\"D3DERR_UNSUPPORTEDCRYPTO\"; break;\n\t\tcase D3DERR_PRESENT_STATISTICS_DISJOINT:eb=\"D3DERR_PRESENT_STATISTICS_DISJOINT\"; break;\n\t\tcase D3DERR_INBEGIN:\t\t\t\t\teb=\"D3DERR_INBEGIN\"; break;\n\t\tcase D3DERR_NOTINBEGIN:\t\t\t\t\teb=\"D3DERR_NOTINBEGIN\"; break;\n\t\tcase D3DERR_NOVIEWPORTS:\t\t\t\teb=\"D3DERR_NOVIEWPORTS\"; break;\n\t\tcase D3DERR_VIEWPORTDATANOTSET:\t\t\teb=\"D3DERR_VIEWPORTDATANOTSET\"; break;\n\t\tcase D3DERR_VIEWPORTHASNODEVICE:\t\teb=\"D3DERR_VIEWPORTHASNODEVICE\"; break;\n\t\tcase D3DERR_NOCURRENTVIEWPORT:\t\t\teb=\"D3DERR_NOCURRENTVIEWPORT\"; break;\n\n\t\t// DINPUT errors\n\t\tcase DIERR_INPUTLOST:\t\t\t\t\teb=\"DIERR_INPUTLOST\"; break;\n\t\t//case DIERR_INVALIDPARAM:\t\t\t\teb=\"DIERR_INVALIDPARAM\"; break;\n\t\tcase DIERR_NOTACQUIRED:\t\t\t\t\teb=\"DIERR_NOTACQUIRED\"; break;\n\t\tcase DIERR_NOTINITIALIZED:\t\t\t\teb=\"DIERR_NOTINITIALIZED\"; break;\n\t\tcase E_PENDING:\t\t\t\t\t\t\teb=\"E_PENDING\"; break;\n\n\t\tdefault:\t\t\t\t\t\t\t\teb=\"unknown\"; break;\n\t}\n\treturn eb;\n}\n\nstatic char *sFourCC(DWORD fcc)\n{\n\tstatic char sRet[5];\n\tchar c;\n\tint i;\n\tchar *t=&sRet[0];\n\tfor(i=0; i<4; i++){\n\t\tc = fcc & (0xFF);\n\t\t*(t++) = isprint(c) ? c : '.';\n\t\tfcc = fcc >> 8;\n\t}\n\t*t = 0;\n\treturn sRet;\n}\n\nchar *ExplainPixelFormat(LPDDPIXELFORMAT ddpfPixelFormat)\n{\n\tstatic char sBuf[512];\n\tchar sItem[256];\n\tDWORD flags=ddpfPixelFormat->dwFlags;\n\tsprintf(sBuf, \" PixelFormat flags=%x(%s) BPP=%d\", \n\t\tflags, ExplainPixelFormatFlags(flags), ddpfPixelFormat->dwRGBBitCount);\n\tif (flags & DDPF_RGB) {\n\t\tif (flags & DDPF_ALPHAPIXELS) {\n\t\t\tsprintf(sItem, \" RGBA=(%x,%x,%x,%x)\", \n\t\t\t\tddpfPixelFormat->dwRBitMask,\n\t\t\t\tddpfPixelFormat->dwGBitMask,\n\t\t\t\tddpfPixelFormat->dwBBitMask,\n\t\t\t\tddpfPixelFormat->dwRGBAlphaBitMask);\n\t\t}\n\t\telse {\n\t\t\tsprintf(sItem, \" RGB=(%x,%x,%x)\", \n\t\t\t\tddpfPixelFormat->dwRBitMask,\n\t\t\t\tddpfPixelFormat->dwGBitMask,\n\t\t\t\tddpfPixelFormat->dwBBitMask);\n\t\t}\n\t\tstrcat(sBuf, sItem);\n\t}\n\tif (flags & DDPF_YUV) {\n\t\tsprintf(sItem, \" YUVA=(%x,%x,%x,%x)\", \n\t\t\tddpfPixelFormat->dwYBitMask,\n\t\t\tddpfPixelFormat->dwUBitMask,\n\t\t\tddpfPixelFormat->dwVBitMask,\n\t\t\tddpfPixelFormat->dwYUVAlphaBitMask);\n\t\tstrcat(sBuf, sItem);\n\t}\n\tif (flags & DDPF_ZBUFFER) {\n\t\tsprintf(sItem, \" SdZSbL=(%x,%x,%x,%x)\", \n\t\t\tddpfPixelFormat->dwStencilBitDepth,\n\t\t\tddpfPixelFormat->dwZBitMask,\n\t\t\tddpfPixelFormat->dwStencilBitMask,\n\t\t\tddpfPixelFormat->dwLuminanceAlphaBitMask);\n\t\tstrcat(sBuf, sItem);\n\t}\n\tif (flags & DDPF_ALPHA) {\n\t\tsprintf(sItem, \" LBdBlZ=(%x,%x,%x,%x)\", \n\t\t\tddpfPixelFormat->dwLuminanceBitMask,\n\t\t\tddpfPixelFormat->dwBumpDvBitMask,\n\t\t\tddpfPixelFormat->dwBumpLuminanceBitMask,\n\t\t\tddpfPixelFormat->dwRGBZBitMask);\n\t\tstrcat(sBuf, sItem);\n\t}\n\tif (flags & DDPF_LUMINANCE) {\n\t\tsprintf(sItem, \" BMbMF=(%x,%x,%x,%x)\", \n\t\t\tddpfPixelFormat->dwBumpDuBitMask,\n\t\t\tddpfPixelFormat->MultiSampleCaps.wBltMSTypes,\n\t\t\tddpfPixelFormat->MultiSampleCaps.wFlipMSTypes,\n\t\t\tddpfPixelFormat->dwYUVZBitMask);\n\t\tstrcat(sBuf, sItem);\n\t}\n\tif (flags & DDPF_BUMPDUDV) {\n\t\tsprintf(sItem, \" O=(%x)\", \n\t\t\tddpfPixelFormat->dwOperations);\n\t\tstrcat(sBuf, sItem);\n\t}\n\tif (flags & DDPF_FOURCC) {\n\t\tsprintf(sItem, \" FourCC=%x(%s)\", \n\t\t\tddpfPixelFormat->dwFourCC, sFourCC(ddpfPixelFormat->dwFourCC));\n\t\tstrcat(sBuf, sItem);\n\t}\n\treturn sBuf;\n}\n\nchar *GetObjectTypeStr(HDC hdc)\n{\n\tchar *s;\n\tswitch (GetObjectType(hdc)){\n\t\tcase OBJ_PEN:\t\t\ts=\"PEN\"; break;\n\t\tcase OBJ_BRUSH:\t\t\ts=\"BRUSH\"; break;\n\t\tcase OBJ_DC:\t\t\ts=\"DC\"; break;\n\t\tcase OBJ_METADC:\t\ts=\"METADC\"; break;\n\t\tcase OBJ_PAL:\t\t\ts=\"PAL\"; break;\n\t\tcase OBJ_FONT:\t\t\ts=\"FONT\"; break;\n\t\tcase OBJ_BITMAP:\t\ts=\"BITMAP\"; break;\n\t\tcase OBJ_REGION:\t\ts=\"REGION\"; break;\n\t\tcase OBJ_METAFILE:\t\ts=\"METAFILE\"; break;\n\t\tcase OBJ_MEMDC:\t\t\ts=\"MEMDC\"; break;\n\t\tcase OBJ_EXTPEN:\t\ts=\"EXTPEN\"; break;\n\t\tcase OBJ_ENHMETADC:\t\ts=\"ENHMETADC\"; break;\n\t\tcase OBJ_ENHMETAFILE:\ts=\"ENHMETAFILE\"; break;\n\t\tcase OBJ_COLORSPACE:\ts=\"COLORSPACE\"; break;\n\t\tdefault:\t\t\t\ts=\"unknown\"; break;\n\t}\n\treturn s;\n}\n\n"
  },
  {
    "path": "dll/dxhelper.h",
    "content": "// debug functions to make the log more readable\n\nextern void DumpRect(char *, LPRECT, int);\nextern char *ExplainFlags(DWORD);\nextern char *ExplainDDSCaps(DWORD);\nextern char *ExplainDDSCaps2(DWORD);\nextern char *ExplainDDSCaps3(DWORD);\nextern char *ExplainDDSCaps4(DWORD);\nextern char *ExplainDDDCaps(DWORD);\nextern char *ExplainDDDCaps2(DWORD);\nextern char *ExplainDDPalCaps(DWORD);\nextern char *ExplainDDFXALPHACaps(DWORD);\nextern char *ExplainDDFXCaps(DWORD);\nextern char *ExplainDDCKeyCaps(DWORD);\nextern char *ExplainCoopFlags(DWORD);\nextern char *ExplainPixelFormatFlags(DWORD);\nextern char *ExplainFlipFlags(DWORD);\nextern char *ExplainBltFlags(DWORD);\nextern char *ExplainBltFastFlags(DWORD);\nextern char *ExplainCreatePaletteFlags(DWORD);\nextern char *ExplainLockFlags(DWORD);\nextern char *ExplainStyle(DWORD);\nextern char *ExplainExStyle(DWORD);\nextern char *ExplainShowCmd(int);\nextern char *ExplainBltStatus(DWORD);\nextern char *ExplainFlipStatus(DWORD);\nextern char *ExplainDDError(DWORD);\nextern char *ExplainWinMessage(DWORD);\nextern char *ExplainResizing(DWORD);\nextern char *ExplainDeviceCaps(DWORD);\nextern char *ExplainDisplaySettingsRetcode(DWORD);\nextern char *ExplainSetWindowIndex(DWORD);\nextern char *ExplainColorKeyFlag(DWORD);\nextern char *ExplainGUID(GUID FAR *);\nextern char *ExplainROP(DWORD);\nextern char *ExplainNChitTest(DWORD);\nextern char *ExplainDDEnumerateFlags(DWORD);\nextern char *ExplainsSystemMetrics(DWORD);\nextern char *ExplainWPFlags(DWORD);\nextern char *ExplainLoadLibFlags(DWORD);\nextern char *ExplainDevModeFields(DWORD);\nextern char *ExplainMCICommands(DWORD);\nextern char *ExplainMCIFlags(DWORD, DWORD);\nextern char *ExplainRegType(DWORD);\nextern char *ExplainDCType(DWORD);\nextern char *ExplainPeekRemoveMsg(DWORD);\nextern char *ExplainGetDCExFlags(DWORD);\nextern char *ExplainPaletteUse(UINT);\nextern char *ExplainRasterCaps(DWORD);\nextern char *ExplainD3DRenderState(DWORD);\nextern char *ExplainRenderstateValue(DWORD);\nextern char *ExplainWfPFlags(DWORD);\nextern char *ExplainChangeDisplaySettingsFlags(DWORD);\nextern char *ExplainDICooperativeFlags(DWORD);\nextern char *ExplainRegionType(DWORD);\nextern char *ExplainPixelFormat(LPDDPIXELFORMAT);\nextern char *ExplainZBufferBitDepths(DWORD);\nextern char *GetObjectTypeStr(HDC);\nextern char *ExplainD3DSurfaceFormat(DWORD);"
  },
  {
    "path": "dll/dxhook.cpp",
    "content": "#define _WIN32_WINNT 0x0600\n#define WIN32_LEAN_AND_MEAN\n#define _CRT_SECURE_NO_DEPRECATE 1\n\n#include <windows.h>\n#include <stdio.h>\n#include <stdarg.h>\n#include <psapi.h>\n#include <dbghelp.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"shareddc.hpp\"\n#include \"dxhook.h\"\n#include \"glhook.h\"\n#include \"glidehook.h\"\n#include \"msvfwhook.h\"\n#define DXWDECLARATIONS 1\n#include \"syslibs.h\"\n#undef DXWDECLARATIONS\n#include \"dxhelper.h\"\n#include \"Ime.h\"\n#include \"Winnls32.h\"\n#include \"Mmsystem.h\"\n#include \"disasm.h\"\n#include \"MinHook.h\" \n\n#define SKIPIMEWINDOW TRUE\n\ndxwCore dxw;\ndxwSStack dxwss;\ndxwWStack dxwws;\ndxwSDC sdc;\ndxwFStack fontdb;\nGetWindowLong_Type pGetWindowLong;\nSetWindowLong_Type pSetWindowLong;\nHWND hTrayWnd;\n\nextern LRESULT CALLBACK MessageHook(int, WPARAM, LPARAM);\nextern DWORD WINAPI CpuLimit(LPVOID); \nextern DWORD WINAPI CpuSlow(LPVOID); \n\nextern HMODULE SysLibs[];\n\ntypedef char *(*Geterrwarnmessage_Type)(unsigned long, unsigned long);\ntypedef int (*Preparedisasm_Type)(void);\ntypedef void (*Finishdisasm_Type)(void);\ntypedef unsigned long (*Disasm_Type)(const unsigned char *, unsigned long, unsigned long, t_disasm *, int, t_config *, int (*)(tchar *, unsigned long));\n\nGeterrwarnmessage_Type pGeterrwarnmessage;\nPreparedisasm_Type pPreparedisasm;\nFinishdisasm_Type pFinishdisasm;\nDisasm_Type pDisasm;\n\nextern void InitScreenParameters(int);\nextern void *HotPatch(void *, const char *, void *);\nextern void *IATPatchDefault(HMODULE, DWORD, char *, void *, const char *, void *);\nextern void *IATPatchSequential(HMODULE, DWORD, char *, void *, const char *, void *);\ntypedef void * (*IATPatch_Type)(HMODULE, DWORD, char *, void *, const char *, void *);\nextern void DumpImportTableDefault(HMODULE);\nextern void DumpImportTableSequential(HMODULE);\ntypedef void (*DumpImportTable_Type)(HMODULE);\nIATPatch_Type IATPatch;\nDumpImportTable_Type DumpImportTable;\nextern BOOL IsIATSequential(HMODULE);\n\nvoid HookModule(HMODULE, int);\nvoid RecoverScreenMode();\nstatic void LockScreenMode(DWORD, DWORD, DWORD);\n\nextern HANDLE hTraceMutex;\n\nCRITICAL_SECTION TraceCS; \n\nchar *GetDxWndPath()\n{\n\tstatic BOOL DoOnce = TRUE;\n\tstatic char sFolderPath[MAX_PATH];\n\n\tif(DoOnce){\n\t\tDWORD dwAttrib;\t\t\n\t\tdwAttrib = GetFileAttributes(\"dxwnd.dll\");\n\t\t//if (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) {\n\t\t//\tMessageBox(0, \"DXWND: ERROR can't locate itself\", \"ERROR\", MB_OK | MB_ICONEXCLAMATION);\n\t\t//\texit(0);\n\t\t//}\n\t\tGetModuleFileName(GetModuleHandle(\"dxwnd\"), sFolderPath, MAX_PATH);\n\t\tsFolderPath[strlen(sFolderPath)-strlen(\"dxwnd.dll\")] = 0; // terminate the string just before \"dxwnd.dll\"\n\t\tDoOnce = FALSE;\n\t}\n\n\treturn sFolderPath;\n}\n\nstatic void OutTraceHeader(FILE *fp, DWORD tflags)\n{\n\tSYSTEMTIME Time;\n\tchar Version[20+1];\n\tint i;\n\tDWORD dword;\n\tGetLocalTime(&Time);\n\tGetDllVersion(Version);\n\tfprintf(fp, \"*** DxWnd %s log BEGIN: %02d-%02d-%04d %02d:%02d:%02d ***\\n\",\n\t\tVersion, Time.wDay, Time.wMonth, Time.wYear, Time.wHour, Time.wMinute, Time.wSecond);\n\tfprintf(fp, \"*** Flags= \");\n\tfor(i=0, dword=dxw.dwFlags1; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, \"%s \", GetFlagCaption(0,i));\n\tfor(i=0, dword=dxw.dwFlags2; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, \"%s \", GetFlagCaption(1,i));\n\tfor(i=0, dword=dxw.dwFlags3; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, \"%s \", GetFlagCaption(2,i));\n\tfor(i=0, dword=dxw.dwFlags4; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, \"%s \", GetFlagCaption(3,i));\n\tfor(i=0, dword=dxw.dwFlags5; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, \"%s \", GetFlagCaption(4,i));\n\tfor(i=0, dword=dxw.dwFlags6; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, \"%s \", GetFlagCaption(5,i));\n\tfor(i=0, dword=dxw.dwFlags7; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, \"%s \", GetFlagCaption(6,i));\n\tfor(i=0, dword=dxw.dwFlags8; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, \"%s \", GetFlagCaption(7,i));\n\tfor(i=0, dword=dxw.dwFlags9; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, \"%s \", GetFlagCaption(8,i));\n\tfor(i=0, dword=dxw.dwFlags10;i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, \"%s \", GetFlagCaption(9,i));\n\tfor(i=0, dword=tflags      ; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, \"%s \", GetFlagCaption(10,i));\n\tfprintf(fp, \"***\\n\");\n}\n\n#define DXWMAXLOGSIZE 4096\n\nvoid OutTrace(const char *format, ...)\n{\n\tva_list al;\n\tstatic char path[MAX_PATH];\n\tstatic FILE *fp=NULL; // GHO: thread safe???\n\tchar sBuf[DXWMAXLOGSIZE+1];\n\tDWORD tFlags;\n\tstatic GetTickCount_Type pGetTick;\n\n\t// check global log flag\n\tif(!(dxw.dwTFlags & (OUTTRACE|OUTDEBUGSTRING))) return;\n\ttFlags = dxw.dwTFlags;\n\tdxw.dwTFlags = 0x0; // to avoid possible log recursion while loading C runtime libraries!!!\n\n\tWaitForSingleObject(hTraceMutex, INFINITE);\n\tif (fp == NULL){\n\t\tchar *OpenMode = (tFlags & ERASELOGFILE) ? \"w+\" : \"a+\";\n\t\tpGetTick = GetTickCount; // save function pointer\n\t\tGetCurrentDirectory(MAX_PATH, path);\n\t\tif(tFlags & OUTSEPARATED){\n\t\t\tchar *p = path + strlen(path); \n\t\t\tstrcat(path, \"\\\\dxwnd.log\");\n\t\t\tif(fp = fopen(path, \"r\")){\n\t\t\t\tfclose(fp);\n\t\t\t\tfor (int i=1; ; i++){\n\t\t\t\t\tsprintf(p, \"\\\\dxwnd(%d).log\", i);\n\t\t\t\t\tif(fp = fopen(path, \"r\")) fclose(fp);\n\t\t\t\t\telse break;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tstrcat(path, \"\\\\dxwnd.log\");\n\t\t}\n\t\tfp = fopen(path, OpenMode);\n\t\tif (fp==NULL){ // in case of error (e.g. current dir on unwritable CD unit)... \n\t\t\tstrcpy(path, GetDxWndPath());\n\t\t\tstrcat(path, \"\\\\dxwnd.log\");\n\t\t\tfp = fopen(path, OpenMode);\n\t\t}\n\t\tif (fp==NULL)\n\t\t\treturn; // last chance: do not log... \n\t\telse \n\t\t\tOutTraceHeader(fp, tFlags);\n\t}\n\tva_start(al, format);\n\t//vfprintf(fp, format, al);\n\tvsprintf_s(sBuf, DXWMAXLOGSIZE, format, al);\n\tsBuf[DXWMAXLOGSIZE]=0; // just in case of log truncation\n\tva_end(al);\n\tif(tFlags & OUTTRACE) {\n\t\tif(tFlags & ADDTIMESTAMP) {\n\t\t\tDWORD tCount = (*pGetTick)();\n\t\t\tif (tFlags & ADDRELATIVETIME){\n\t\t\t\tstatic DWORD tLastCount = 0;\n\t\t\t\tDWORD tNow;\n\t\t\t\ttNow = tCount;\n\t\t\t\ttCount = tLastCount ? (tCount - tLastCount) : 0;\n\t\t\t\ttLastCount = tNow;\n\t\t\t}\n\t\t\tfprintf(fp, \"%08.8d: \", tCount);\n\t\t}\n\t\tfputs(sBuf, fp);\n\t\tfflush(fp); \n\t}\n\tif(tFlags & OUTDEBUGSTRING) OutputDebugString(sBuf);\n\tReleaseMutex(hTraceMutex);\n\n\tdxw.dwTFlags = tFlags; // restore settings\n}\n\nvoid HexTrace(unsigned char *buf, int len)\n{\n\tchar line[3*32 + 40];\n\tchar hex[6];\n\tint count=0;\n\twhile(len){\n\t\tsprintf(line,\"%04X: \", count);\n\t\tfor(int i=32; i && len; i--, len--, buf++){\n\t\t\tsprintf(hex, \"%02X.\", *buf);\n\t\t\tstrcat(line, hex);\n\t\t}\n\t\tstrcat(line, \"\\n\");\n\t\tOutTrace(line);\n\t\tcount += 32;\n\t}\n}\n\n// from MSDN:\n// GetVersionEx may be altered or unavailable for releases after Windows 8.1. Instead, use the Version Helper functions\n//\n// With the release of Windows 8.1, the behavior of the GetVersionEx API has changed in the value it will return for the \n// operating system version. The value returned by the GetVersionEx function now depends on how the application is manifested.\n//\n// Applications not manifested for Windows 8.1 or Windows 10 will return the Windows 8 OS version value (6.2). \n// Once an application is manifested for a given operating system version, GetVersionEx will always return the version \n// that the application is manifested for in future releases. \n// To manifest your applications for Windows 8.1 or Windows 10, refer to Targeting your application for Windows.\n\nstatic BOOL CheckCompatibilityFlags()\n{\n\ttypedef DWORD (WINAPI *GetFileVersionInfoSizeA_Type)(LPCSTR, LPDWORD);\n\ttypedef BOOL (WINAPI *GetFileVersionInfoA_Type)(LPCSTR, DWORD, DWORD, LPVOID);\n\ttypedef BOOL (WINAPI *VerQueryValueA_Type)(LPCVOID, LPCSTR, LPVOID, PUINT);\n\tVerQueryValueA_Type pVerQueryValueA;\n\tGetFileVersionInfoA_Type pGetFileVersionInfoA;\n\tGetFileVersionInfoSizeA_Type pGetFileVersionInfoSizeA;\n\n\tHMODULE VersionLib;\n\tDWORD dwMajorVersion, dwMinorVersion;\n\tDWORD dwHandle = 0;\n\tint size;\n\tUINT len = 0;\n    VS_FIXEDFILEINFO*   vsfi = NULL;\n\tOSVERSIONINFO vi;\n\n\tif(!(VersionLib=LoadLibrary(\"Version.dll\"))) return FALSE;\n\tpGetFileVersionInfoA=(GetFileVersionInfoA_Type)GetProcAddress(VersionLib, \"GetFileVersionInfoA\");\n\tif(!pGetFileVersionInfoA) return FALSE;\n\tpGetFileVersionInfoSizeA=(GetFileVersionInfoSizeA_Type)GetProcAddress(VersionLib, \"GetFileVersionInfoSizeA\");\n\tif(!pGetFileVersionInfoSizeA) return FALSE;\n\tpVerQueryValueA=(VerQueryValueA_Type)GetProcAddress(VersionLib, \"VerQueryValueA\");\n\tif(!pVerQueryValueA) return FALSE;\n\n\tsize = (*pGetFileVersionInfoSizeA)(\"kernel32.dll\", &dwHandle);\t\n\tBYTE* VersionInfo = new BYTE[size];\n\t(*pGetFileVersionInfoA)(\"kernel32.dll\", dwHandle, size, VersionInfo);\n    (*pVerQueryValueA)(VersionInfo, \"\\\\\", (void**)&vsfi, &len);\n\tdwMajorVersion=HIWORD(vsfi->dwProductVersionMS);\n\tdwMinorVersion=LOWORD(vsfi->dwProductVersionMS);\n    delete[] VersionInfo;\t\n\tvi.dwOSVersionInfoSize=sizeof(vi);\n\tGetVersionExA(&vi);\n\tif((vi.dwMajorVersion!=dwMajorVersion) || (vi.dwMinorVersion!=dwMinorVersion)) {\n\t\tShowHint(HINT_FAKEOS);\n\t\treturn TRUE;\n\t}\n\treturn FALSE;\n}\n\nvoid OutTraceHex(BYTE *bBuf, int iLen)\n{\n\tfor(int i=0; i<iLen; i++) OutTrace(\"%02X \", *(bBuf++));\n\tOutTrace(\"\\n\");\n}\n\nvoid SuppressIMEWindow()\n{\n\tOutTraceDW(\"WindowProc: SUPPRESS IME\\n\");\n\ttypedef BOOL (WINAPI *ImmDisableIME_Type)(DWORD);\n\tImmDisableIME_Type pImmDisableIME;\n\tHMODULE ImmLib;\n\tImmLib=(*pLoadLibraryA)(\"Imm32\");\n\tif(ImmLib){\n\t\tpImmDisableIME=(ImmDisableIME_Type)(*pGetProcAddress)(ImmLib,\"ImmDisableIME\");\n\t\tif(pImmDisableIME)(*pImmDisableIME)(-1);\n\t\tFreeLibrary(ImmLib);\n\t}\n}\n\nvoid HookDlls(HMODULE module)\n{\n\tPIMAGE_NT_HEADERS pnth;\n\tPIMAGE_IMPORT_DESCRIPTOR pidesc;\n\tDWORD base, rva;\n\tPSTR impmodule;\n\tPIMAGE_THUNK_DATA ptname;\n\textern char *SysNames[];\n\n\tbase=(DWORD)module;\n\tOutTraceB(\"HookDlls: base=%x\\n\", base);\n\t__try{\n\t\tpnth = PIMAGE_NT_HEADERS(PBYTE(base) + PIMAGE_DOS_HEADER(base)->e_lfanew);\n\t\tif(!pnth) {\n\t\t\tOutTraceH(\"HookDlls: ERROR no pnth at %d\\n\", __LINE__);\n\t\t\treturn;\n\t\t}\n\t\trva = pnth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;\n\t\tif(!rva) {\n\t\t\tOutTraceH(\"HookDlls: ERROR no rva at %d\\n\", __LINE__);\n\t\t\treturn;\n\t\t}\n\n\t\tfor(pidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva); pidesc->FirstThunk; pidesc++){\n\t\t\tHMODULE DllBase;\n\t\t\tint idx;\n\t\t\textern HMODULE SysLibs[];\n\n\t\t\timpmodule = (PSTR)(base + pidesc->Name);\n\n\t\t\t// skip dxwnd and system dll\n\t\t\tif(!lstrcmpi(impmodule, \"DxWnd\")) continue; \n\t\t\tidx=dxw.GetDLLIndex(impmodule);\n\t\t\tif(!lstrcmpi(impmodule,dxw.CustomOpenGLLib))idx=SYSLIBIDX_OPENGL;\n\t\t\tif(idx != -1) {\n\t\t\t\tDllBase=GetModuleHandle(impmodule);\n\t\t\t\tSysLibs[idx]=DllBase;\n\t\t\t\tOutTraceH(\"HookDlls: system module %s at %x\\n\", impmodule, DllBase);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tOutTraceH(\"HookDlls: ENTRY timestamp=%x module=%s forwarderchain=%x\\n\", \n\t\t\t\tpidesc->TimeDateStamp, impmodule, pidesc->ForwarderChain);\n\t\t\tif(pidesc->OriginalFirstThunk) {\n\t\t\t\tptname = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tptname = 0;\n\t\t\t\tOutTraceH(\"HookDlls: no PE OFTs - stripped module=%s\\n\", impmodule);\n\t\t\t}\n\n\t\t\tDllBase=GetModuleHandle(impmodule);\n\t\t\tif(DllBase) HookModule(DllBase, 0);\n\t\t}\n\t}\n\t__except(EXCEPTION_EXECUTE_HANDLER)\n\t{       \n\t\tOutTraceDW(\"HookDlls: EXCEPTION\\n\");\n\t}\n\treturn;\n}\n\n// CheckImportTable: a good enough criteria to detect obfuscated executables is to count the entries in the most common\n// and somehow mandatory system dlls such as kernel32.dll, user32.dll and gdi32.dll\n// the routine counsts the kernel32.dll overall entries (they could be split in different sections!) and if lesser than 3\n// a warning message is shown.\n\nvoid CheckImportTable(HMODULE module)\n{\n\tPIMAGE_NT_HEADERS pnth;\n\tPIMAGE_IMPORT_DESCRIPTOR pidesc;\n\tDWORD base, rva;\n\tPSTR impmodule;\n\tPIMAGE_THUNK_DATA ptaddr;\n\tint Kernel32Count = 0;\n\n\tbase=(DWORD)module;\n\t__try{\n\t\tpnth = PIMAGE_NT_HEADERS(PBYTE(base) + PIMAGE_DOS_HEADER(base)->e_lfanew);\n\t\tif(!pnth) {\n\t\t\treturn;\n\t\t}\n\t\trva = pnth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;\n\t\tif(!rva) {\n\t\t\treturn;\n\t\t}\n\t\tpidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva);\n\n\t\twhile(pidesc->FirstThunk){\n\t\t\timpmodule = (PSTR)(base + pidesc->Name);\n\t\t\tif(!_stricmp (impmodule, \"kernel32.dll\")){\n\t\t\t\tptaddr = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->FirstThunk);\n\t\t\t\twhile(ptaddr->u1.Function){\n\t\t\t\t\tptaddr ++;\n\t\t\t\t\tKernel32Count++;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// warning: do not confuse \"dplayerx.dll\" (SafeDisk) with \"dplayx.dll\" (DirectPlay)!\n\t\t\tif(!_stricmp (impmodule, \"dplayerx.dll\")) ShowHint(HINT_SAFEDISC);\n\t\t\tif(!_stricmp (impmodule, \"cms_95.dll\")) ShowHint(HINT_SECUROM);\n\t\t\tif(!_stricmp (impmodule, \"cms_NT.dll\")) ShowHint(HINT_SECUROM);\n\t\t\tif(!_stricmp (impmodule, \"cms16.dll\"))  ShowHint(HINT_SECUROM);\n\t\t\tpidesc ++;\n\t\t}\n\t}\n\t__except(EXCEPTION_EXECUTE_HANDLER)\n\t{       \n\t\tOutTraceDW(\"CheckImportTable: EXCEPTION\\n\");\n\t}\n\n\tOutTraceDW(\"CheckImportTable: found %d entries for kernel32.dll\\n\", Kernel32Count);\n\tif(Kernel32Count <= 3) ShowHint(HINT_OBFUSCATED);\n\treturn;\n}\n\nvoid SetHook(void *target, void *hookproc, void **hookedproc, char *hookname)\n{\n\tvoid *tmp;\n\tchar msg[201];\n\tDWORD dwTmp, oldprot;\n\t\n\tOutTraceH(\"SetHook: DEBUG target=%x, proc=%x name=%s\\n\", target, hookproc, hookname);\n\t// keep track of hooked call range to avoid re-hooking of hooked addresses !!!\n\tdwTmp = *(DWORD *)target;\n\tif(dwTmp == (DWORD)hookproc) {\n\t\tOutTraceH(\"target already hooked\\n\");\n\t\treturn; // already hooked\n\t}\n\tif(*(DWORD *)hookedproc == (DWORD)hookproc) {\n\t\tOutTraceH(\"hook already hooked\\n\");\n\t\treturn; // already hooked\n\t}\n\tif(dwTmp == 0){\n\t\tsprintf(msg,\"SetHook ERROR: NULL target for %s\\n\", hookname);\n\t\tOutTraceDW(msg);\n\t\tif (IsAssertEnabled) MessageBox(0, msg, \"SetHook\", MB_OK | MB_ICONEXCLAMATION);\n\t\treturn; // error condition\n\t}\n\tif(!VirtualProtect(target, 4, PAGE_READWRITE, &oldprot)) {\n\t\tsprintf(msg,\"SetHook ERROR: target=%x err=%d\\n\", target, GetLastError());\n\t\tOutTraceDW(msg);\n\t\tif (IsAssertEnabled) MessageBox(0, msg, \"SetHook\", MB_OK | MB_ICONEXCLAMATION);\n\t\treturn; // error condition\n\t}\n\t*(DWORD *)target = (DWORD)hookproc;\n\tif(!VirtualProtect(target, 4, oldprot, &oldprot)){\n\t\tOutTrace(\"SetHook: VirtualProtect ERROR target=%x, err=%x\\n\", target, GetLastError());\n\t\treturn; // error condition\n\t}\n\tif(!FlushInstructionCache(GetCurrentProcess(), target, 4)){\n\t\tOutTrace(\"SetHook: FlushInstructionCache ERROR target=%x, err=%x\\n\", target, GetLastError());\n\t\treturn; // error condition\n\t}\n\ttmp=(void *)dwTmp;\n\n\t__try {\n\t\tif (*hookedproc && (*hookedproc)!=tmp) {\n\t\t\tsprintf(msg,\"SetHook: proc=%s oldhook=%x->%x newhook=%x\\n\", hookname, hookedproc, *(DWORD *)hookedproc, tmp);\n\t\t\tOutTraceDW(msg);\n\t\t\tif (IsAssertEnabled) MessageBox(0, msg, \"SetHook\", MB_OK | MB_ICONEXCLAMATION);\n\t\t\tif (dxw.bHintActive) ShowHint(HINT_HOOKUPDATE);\n\t\t\t// v2.03.83: updating the pointer sometimes is good, sometimes is bad!\n\t\t\tif(!(dxw.dwFlags7 & HOOKNOUPDATE)) tmp = *hookedproc; \n\t\t}\n\t}\n\t__except(EXCEPTION_EXECUTE_HANDLER){\n\t\t\tOutTrace(\"SetHook: %s exception\\n\", hookname);\n\t};\n\t*hookedproc = tmp;\n\tOutTraceH(\"SetHook: *hookedproc=%x, name=%s\\n\", tmp, hookname);\n}\n\n// v2.02.53: thorough scan - the IAT is scanned considering the possibility to have each dll module \n// replicated also many times. It may depend upon the compiling environment? \n// So far, it makes the difference for Dungeon Odissey\n\nvoid *HookAPI(HMODULE module, char *dll, void *apiproc, const char *apiname, void *hookproc)\n{\n\tif(dxw.dwTFlags & OUTIMPORTTABLE) OutTrace(\"HookAPI: module=%x dll=%s apiproc=%x apiname=%s hookproc=%x\\n\", \n\t\tmodule, dll, apiproc, apiname, hookproc);\n\n\tif(!*apiname) { // check\n\t\tchar *sMsg=\"HookAPI: NULL api name\\n\";\n\t\tOutTraceE(sMsg);\n\t\tif (IsAssertEnabled) MessageBox(0, sMsg, \"HookAPI\", MB_OK | MB_ICONEXCLAMATION);\n\t\treturn 0;\n\t}\n\n\tif(dxw.dwFlags4 & HOTPATCHALWAYS) {\n\t\tvoid *orig;\n\t\torig=HotPatch(apiproc, apiname, hookproc);\n\t\tif(orig) return orig;\n\t}\n\n\treturn IATPatch(module, 0, dll, apiproc, apiname, hookproc);\n}\n\nvoid AdjustWindowPos(HWND hwnd, DWORD width, DWORD height)\n{\n\tWINDOWPOS wp;\n\tOutTraceDW(\"AdjustWindowPos: hwnd=%x, size=(%d,%d)\\n\", hwnd, width, height);\n\tdxw.CalculateWindowPos(hwnd, width, height, &wp);\n\tOutTraceDW(\"AdjustWindowPos: fixed pos=(%d,%d) size=(%d,%d)\\n\", wp.x, wp.y, wp.cx, wp.cy);\n\t//if(!pSetWindowPos) pSetWindowPos=SetWindowPos;\n\t//OutTraceDW(\"pSetWindowPos=%x\\n\", pSetWindowPos);\n\tOutTraceDW(\"hwnd=%x pos=(%d,%d) size=(%d,%d)\\n\", pSetWindowPos, wp.x, wp.y, wp.cx, wp.cy);\n\tif(!(*pSetWindowPos)(hwnd, 0, wp.x, wp.y, wp.cx, wp.cy, 0)){\n\t\tOutTraceE(\"AdjustWindowPos: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t}\n\n\tdxw.UpdateDesktopCoordinates();\n\tif(dxw.dwFlags2 & SUPPRESSIME) SuppressIMEWindow();\n\tif(dxw.dwFlags4 & HIDEDESKTOP) dxw.HideDesktop(hwnd);\n\tdxw.ShowBanner(hwnd);\n\n\treturn;\n}\n\nvoid HookWindowProc(HWND hwnd)\n{\n\tWNDPROC pWindowProc;\n\n\tif(dxw.dwFlags6 & NOWINDOWHOOKS) return;\n\n\tpWindowProc = (WNDPROC)(*pGetWindowLong)(hwnd, GWL_WNDPROC);\n\t// don't hook twice ....\t\n\tif ((pWindowProc == extWindowProc) ||\n\t\t(pWindowProc == extChildWindowProc) ||\n\t\t(pWindowProc == extDialogWindowProc) ||\n\t\t(pWindowProc == dw_Hider_Message_Handler)){\n\t\t// hooked already !!!\n\t\tOutTraceDW(\"GetWindowLong: hwnd=%x WindowProc HOOK already in place\\n\", hwnd);\n\t\treturn;\n\t}\n\n\t// v2.03.22: don't remap WindowProc in case of special address 0xFFFFnnnn. \n\t// This makes \"The Hulk demo\" work avoiding WindowProc recursion and stack overflow\n\t// v2.03.99.rc1: commented out, issue fixed by addition below!\n\t//if (((DWORD)pWindowProc & 0xFFFF0000) == 0xFFFF0000){\n\t//\tOutTraceDW(\"GetWindowLong: hwnd=%x WindowProc HOOK %x not updated\\n\", hwnd, pWindowProc);\n\t//\treturn;\n\t//}\n\n\t// v2.03.99.rc1: always remap  WindowProc, but push to call stack the previous value \n\t// depending on whether the window was hooked already or not!\n\tlong lres;\n\tif(lres=(long)dxwws.GetProc(hwnd))\n\t\tdxwws.PutProc(hwnd, (WNDPROC)lres);\n\telse \n\t\tdxwws.PutProc(hwnd, pWindowProc);\n\n\tlres=(*pSetWindowLongA)(hwnd, GWL_WNDPROC, (LONG)extWindowProc);\n\tOutTraceDW(\"SetWindowLong: HOOK hwnd=%x WindowProc=%x->%x\\n\", hwnd, lres, (LONG)extWindowProc);\n}\n\nvoid AdjustWindowFrame(HWND hwnd, DWORD width, DWORD height)\n{\n\tHRESULT res=0;\n\tLONG style, exstyle;\n\n\tOutTraceDW(\"AdjustWindowFrame hwnd=%x, size=(%d,%d) coord=%d\\n\", hwnd, width, height, dxw.Coordinates); \n\n\tdxw.SetScreenSize(width, height);\n\tif (hwnd==NULL) return;\n\n\tstyle = dxw.FixWinStyle(WS_OVERLAPPEDWINDOW);\n\texstyle = dxw.FixWinExStyle(0);\n\n\t(*pSetWindowLongA)(hwnd, GWL_STYLE, style);\n\t(*pSetWindowLongA)(hwnd, GWL_EXSTYLE, exstyle); \n\t(*pShowWindow)(hwnd, SW_SHOWNORMAL);\n\tOutTraceDW(\"AdjustWindowFrame hwnd=%x, set style=%s extstyle=0\\n\", hwnd, (style == 0) ? \"0\" : \"WS_OVERLAPPEDWINDOW\"); \n\tif (dxw.Windowize) AdjustWindowPos(hwnd, width, height);\n\n\t// fixing windows message handling procedure\n\tHookWindowProc(hwnd);\n\n\t// fixing cursor view and clipping region\n\n\tif ((dxw.dwFlags1 & HIDEHWCURSOR) && dxw.IsFullScreen()) while ((*pShowCursor)(0) >= 0);\n\tif (dxw.dwFlags2 & SHOWHWCURSOR) while((*pShowCursor)(1) < 0);\n\tif (dxw.dwFlags1 & CLIPCURSOR) {\n\t\tOutTraceDW(\"AdjustWindowFrame: setting clip region\\n\");\n\t\tdxw.SetClipCursor();\n\t}\n\n\t(*pInvalidateRect)(hwnd, NULL, TRUE);\n}\n\nvoid HookSysLibsInit()\n{\n\tstatic BOOL DoOnce = FALSE;\n\tif(DoOnce) return;\n\tDoOnce=TRUE;\n\n\tHookKernel32Init();\n\tHookUser32Init();\n\tHookGDI32Init();\n\tHookWinG32Init();\n\tHookImagehlpInit();\n}\n\nDEVMODE InitDevMode;\n\nstatic void SaveScreenMode()\n{\n\tstatic BOOL DoOnce=FALSE;\n\tif(DoOnce) return;\n\tDoOnce=TRUE;\n\t(*pEnumDisplaySettings)(NULL, ENUM_CURRENT_SETTINGS, &InitDevMode);\n\tOutTraceDW(\"DXWND: Initial display mode WxH=(%dx%d) BitsPerPel=%d\\n\", \n\t\tInitDevMode.dmPelsWidth, InitDevMode.dmPelsHeight, InitDevMode.dmBitsPerPel);\n}\n\nvoid RecoverScreenMode()\n{\n\tDEVMODE CurrentDevMode;\n\tBOOL res;\n\t(*pEnumDisplaySettings)(NULL, ENUM_CURRENT_SETTINGS, &CurrentDevMode);\n\tOutTraceDW(\"ChangeDisplaySettings: recover CURRENT WxH=(%dx%d) BitsPerPel=%d TARGET WxH=(%dx%d) BitsPerPel=%d\\n\", \n\t\tCurrentDevMode.dmPelsWidth, CurrentDevMode.dmPelsHeight, CurrentDevMode.dmBitsPerPel,\n\t\tInitDevMode.dmPelsWidth, InitDevMode.dmPelsHeight, InitDevMode.dmBitsPerPel);\n\tInitDevMode.dmFields = (DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT);\n\tres=(*pChangeDisplaySettingsExA)(NULL, &InitDevMode, NULL, 0, NULL);\n\tif(res) OutTraceE(\"ChangeDisplaySettings: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n}\n\nvoid SwitchTo16BPP()\n{\n\tDEVMODE CurrentDevMode;\n\tBOOL res;\n\t(*pEnumDisplaySettings)(NULL, ENUM_CURRENT_SETTINGS, &CurrentDevMode);\n\tOutTraceDW(\"ChangeDisplaySettings: CURRENT wxh=(%dx%d) BitsPerPel=%d -> 16\\n\", \n\t\tCurrentDevMode.dmPelsWidth, CurrentDevMode.dmPelsHeight, CurrentDevMode.dmBitsPerPel);\n\tCurrentDevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;\n\tCurrentDevMode.dmBitsPerPel = 16;\n\tres=(*pChangeDisplaySettingsExA)(NULL, &CurrentDevMode, NULL, CDS_UPDATEREGISTRY, NULL);\n\tif(res) OutTraceE(\"ChangeDisplaySettings: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n}\n\nstatic void LockScreenMode(DWORD dmPelsWidth, DWORD dmPelsHeight, DWORD dmBitsPerPel)\n{\n\tDEVMODE InitDevMode;\n\tBOOL res;\n\tOutTraceDW(\"ChangeDisplaySettings: LOCK wxh=(%dx%d) BitsPerPel=%d -> wxh=(%dx%d) BitsPerPel=%d\\n\", \n\t\tInitDevMode.dmPelsWidth, InitDevMode.dmPelsHeight, InitDevMode.dmBitsPerPel,\n\t\tdmPelsWidth, dmPelsHeight, dmBitsPerPel);\n\tif( (dmPelsWidth != InitDevMode.dmPelsWidth) ||\n\t\t(dmPelsHeight !=InitDevMode.dmPelsHeight) ||\n\t\t(dmBitsPerPel != InitDevMode.dmBitsPerPel)){\n\t\tres=(*pChangeDisplaySettingsExA)(NULL, &InitDevMode, NULL, 0, NULL);\n\t\tif(res) OutTraceE(\"ChangeDisplaySettings: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t}\n}\n\nstatic HMODULE LoadDisasm()\n{\n\tHMODULE disasmlib;\n\t\n\tdisasmlib=(*pLoadLibraryA)(\"disasm.dll\");\n\tif(!disasmlib) {\n\t\tOutTraceDW(\"DXWND: Load lib=\\\"%s\\\" failed err=%d\\n\", \"disasm.dll\", GetLastError());\n\t\treturn NULL;\n\t}\n\tpGeterrwarnmessage=(Geterrwarnmessage_Type)(*pGetProcAddress)(disasmlib, \"Geterrwarnmessage\");\n\tpPreparedisasm=(Preparedisasm_Type)(*pGetProcAddress)(disasmlib, \"Preparedisasm\");\n\tpFinishdisasm=(Finishdisasm_Type)(*pGetProcAddress)(disasmlib, \"Finishdisasm\");\n\tpDisasm=(Disasm_Type)(*pGetProcAddress)(disasmlib, \"Disasm\");\n\t//OutTraceDW(\"DXWND: Load disasm.dll ptrs=%x,%x,%x,%x\\n\", pGeterrwarnmessage, pPreparedisasm, pFinishdisasm, pDisasm);\n\n\treturn disasmlib;\n}\n\nLONG WINAPI myUnhandledExceptionFilter(LPEXCEPTION_POINTERS ExceptionInfo)\n{\n\tOutTrace(\"UnhandledExceptionFilter: exception code=%x flags=%x addr=%x\\n\",\n\t\tExceptionInfo->ExceptionRecord->ExceptionCode,\n\t\tExceptionInfo->ExceptionRecord->ExceptionFlags,\n\t\tExceptionInfo->ExceptionRecord->ExceptionAddress);\n\tDWORD oldprot;\n\tstatic HMODULE disasmlib = NULL;\n\tPVOID target = ExceptionInfo->ExceptionRecord->ExceptionAddress;\n\tswitch(ExceptionInfo->ExceptionRecord->ExceptionCode){\n\tcase 0xc0000094: // IDIV reg (Ultim@te Race Pro)\n\tcase 0xc0000095: // DIV by 0 (divide overflow) exception (SonicR)\n\tcase 0xc0000096: // CLI Priviliged instruction exception (Resident Evil), FB (Asterix & Obelix)\n\tcase 0xc000001d: // FEMMS (eXpendable)\n\tcase 0xc0000005: // Memory exception (Tie Fighter)\n\t\tint cmdlen;\n\t\tt_disasm da;\n\t\tif(!disasmlib){\n\t\t\tif (!(disasmlib=LoadDisasm())) return EXCEPTION_CONTINUE_SEARCH;\n\t\t\t(*pPreparedisasm)();\n\t\t}\n\t\tif(!VirtualProtect(target, 10, PAGE_READWRITE, &oldprot)) return EXCEPTION_CONTINUE_SEARCH; // error condition\n\t\tcmdlen=(*pDisasm)((BYTE *)target, 10, 0, &da, 0, NULL, NULL);\n\t\tOutTrace(\"UnhandledExceptionFilter: NOP opcode=%x len=%d\\n\", *(BYTE *)target, cmdlen);\n\t\tmemset((BYTE *)target, 0x90, cmdlen); \n\t\tVirtualProtect(target, 10, oldprot, &oldprot);\n\t\tif(!FlushInstructionCache(GetCurrentProcess(), target, cmdlen))\n\t\t\tOutTrace(\"UnhandledExceptionFilter: FlushInstructionCache ERROR target=%x, err=%x\\n\", target, GetLastError());\n\t\t// v2.03.10 skip replaced opcode\n\t\tExceptionInfo->ContextRecord->Eip += cmdlen; // skip ahead op-code length\n\t\treturn EXCEPTION_CONTINUE_EXECUTION;\n\t\tbreak;\n\tdefault:\n\t\treturn EXCEPTION_CONTINUE_SEARCH;\n\t}\n}\n\nLPTOP_LEVEL_EXCEPTION_FILTER WINAPI extSetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter)\n{\n\tOutTraceDW(\"SetUnhandledExceptionFilter: lpExceptionFilter=%x\\n\", lpTopLevelExceptionFilter);\n\textern LONG WINAPI myUnhandledExceptionFilter(LPEXCEPTION_POINTERS);\n\treturn (*pSetUnhandledExceptionFilter)(myUnhandledExceptionFilter);\n}\n\n//#define USEPERFCOUNTERS\n\nunsigned __int64 inline GetRDTSC() {\n   __asm {\n      ; Flush the pipeline\n      XOR eax, eax\n      CPUID\n      ; Get RDTSC counter in edx:eax\n      RDTSC\n   }\n}\n\nLONG CALLBACK Int3Handler(PEXCEPTION_POINTERS ExceptionInfo)\n{\n\t// Vectored Handler routine to intercept INT3 opcodes replacing RDTSC\n \tif (ExceptionInfo->ExceptionRecord->ExceptionCode == 0x80000003){\n\t\tLARGE_INTEGER myPerfCount;\n#ifdef USEPERFCOUNTERS\n\t\tif(!pQueryPerformanceCounter) pQueryPerformanceCounter=QueryPerformanceCounter;\n\t\t(*pQueryPerformanceCounter)(&myPerfCount);\n#else\n\t   __asm {\n\t\t  ; Flush the pipeline\n\t\t  XOR eax, eax\n\t\t  CPUID\n\t\t  ; Get RDTSC counter in edx:eax\n\t\t  RDTSC \n\t\t  mov myPerfCount.LowPart, eax\n\t\t  mov myPerfCount.HighPart, edx\n\t   }\n#endif\n\t\t//myPerfCount = dxw.StretchCounter(myPerfCount);\n\t\tmyPerfCount = dxw.StretchLargeCounter(myPerfCount);\n\t\tOutTraceDW(\"Int3Handler: INT3 at=%x tick=%x RDTSC=%x:%x\\n\", \n\t\t\tExceptionInfo->ExceptionRecord->ExceptionAddress, (*pGetTickCount)(), myPerfCount.HighPart, myPerfCount.LowPart);\n\n\t\tExceptionInfo->ContextRecord->Edx = myPerfCount.HighPart;\n\t\tExceptionInfo->ContextRecord->Eax = myPerfCount.LowPart;\n\t\tExceptionInfo->ContextRecord->Eip++; // skip ahead one-byte ( jump over 0xCC op-code )\n\t\tExceptionInfo->ContextRecord->Eip++; // skip ahead one-byte ( jump over 0x90 op-code )\n\t\treturn EXCEPTION_CONTINUE_EXECUTION;\n\t}\n\treturn EXCEPTION_CONTINUE_SEARCH;\n}\n\nvoid HookExceptionHandler(void)\n{\n\tvoid *tmp;\n\tHMODULE base;\n\n\tOutTraceDW(\"Set exception handlers\\n\");\n\tbase=GetModuleHandle(NULL);\n\tpSetUnhandledExceptionFilter = SetUnhandledExceptionFilter;\n\t//v2.1.75 override default exception handler, if any....\n\tLONG WINAPI myUnhandledExceptionFilter(LPEXCEPTION_POINTERS);\n\ttmp = HookAPI(base, \"KERNEL32.dll\", UnhandledExceptionFilter, \"UnhandledExceptionFilter\", myUnhandledExceptionFilter);\n\t// so far, no need to save the previous handler, but anyway...\n\ttmp = HookAPI(base, \"KERNEL32.dll\", SetUnhandledExceptionFilter, \"SetUnhandledExceptionFilter\", extSetUnhandledExceptionFilter);\n\tif(tmp) pSetUnhandledExceptionFilter = (SetUnhandledExceptionFilter_Type)tmp;\n\n\tSetErrorMode(SEM_NOGPFAULTERRORBOX|SEM_NOOPENFILEERRORBOX|SEM_FAILCRITICALERRORS);\n\t(*pSetUnhandledExceptionFilter)((LPTOP_LEVEL_EXCEPTION_FILTER)myUnhandledExceptionFilter);\n}\n\nstatic void InitModuleHooks()\n{\n\tfor (int i=0; i<SYSLIBIDX_MAX; i++) SysLibs[i]=NULL;\n}\n\nvoid SetModuleHooks()\n{\n\tint i;\n\tHMODULE hModule;\n\n\tfor (i=0; i<SYSLIBIDX_MAX; i++){\n\t\tif(SysLibs[i]==NULL){\n\t\t\thModule = GetModuleHandle(SysNames[i]);\n\t\t\tif(hModule) {\n\t\t\t\tSysLibs[i]=hModule;\n\t\t\t\tOutTraceDW(\"InitModuleHooks: lib=%s hmodule=%x\\n\", SysNames[i], hModule);\n\t\t\t\tif(dxw.bHintActive) switch(i){\n\t\t\t\t\tcase SYSLIBIDX_DIRECTDRAW:\tShowHint(HINT_DDRAW);\tbreak;\n\t\t\t\t\tcase SYSLIBIDX_DIRECT3D8:\tShowHint(HINT_D3D8);\tbreak;\n\t\t\t\t\tcase SYSLIBIDX_DIRECT3D9:\tShowHint(HINT_D3D9);\tbreak;\n\t\t\t\t\t// DirectX10 & 11 are loaded by some system module, so better not to tell\n\t\t\t\t\t//case SYSLIBIDX_DIRECT3D10:\t\n\t\t\t\t\t//case SYSLIBIDX_DIRECT3D10_1:ShowHint(HINT_D3D10);\tbreak;\n\t\t\t\t\t//case SYSLIBIDX_DIRECT3D11:\tShowHint(HINT_D3D11);\tbreak;\n\t\t\t\t\tcase SYSLIBIDX_OPENGL:\t\tShowHint(HINT_OPENGL);\tbreak;\n\t\t\t\t\tcase SYSLIBIDX_DSOUND:\t\tShowHint(HINT_DSOUND);\tbreak;\n\t\t\t\t\tcase SYSLIBIDX_DINPUT:\t\tShowHint(HINT_DINPUT);\tbreak;\n\t\t\t\t\tcase SYSLIBIDX_DINPUT8:\t\tShowHint(HINT_DINPUT8);\tbreak;\n\t\t\t\t\tcase SYSLIBIDX_MSVFW:\t\t\n\t\t\t\t\tcase SYSLIBIDX_WINMM:\t\t\n\t\t\t\t\tcase SYSLIBIDX_AVIFIL32:\tShowHint(HINT_MOVIES);\tbreak;\n\t\t\t\t\tcase SYSLIBIDX_DIRECT3D:\n\t\t\t\t\tcase SYSLIBIDX_DIRECT3D700:\tShowHint(HINT_D3D);\t\tbreak;\n\t\t\t\t\tcase SYSLIBIDX_IMAGEHLP:\tShowHint(HINT_IHLP);\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nvoid HookModule(HMODULE base, int dxversion)\n{\n\tSetModuleHooks();\n\n\tHookKernel32(base);\t\t\t\t\t\t//SYSLIBIDX_KERNEL32\n\tHookUser32(base); \t\t\t\t\t\t// SYSLIBIDX_USER32\n\tHookGDI32(base);\t\t\t\t\t\t// SYSLIBIDX_GDI32\n\tHookImeLib(base);\t\t\t\t\t\t// SYSLIBIDX_IMELIB\n\tHookAdvApi32(base);\t\t\t\t\t\t// SYSLIBIDX_ADVAPI32\n\tHookOle32(base);\t\t\t\t\t\t// SYSLIBIDX_OLE32\n\tHookDirectDraw(base, dxversion);\t\t// SYSLIBIDX_DIRECTDRAW, SYSLIBIDX_DIRECT3D8, SYSLIBIDX_DIRECT3D9, SYSLIBIDX_DIRECT3D10, SYSLIBIDX_DIRECT3D10_1, SYSLIBIDX_DIRECT3D11,\n\tHookOpenGL(base, dxw.CustomOpenGLLib);\t// SYSLIBIDX_OPENGL,\n\tHookMSV4WLibs(base);\t\t\t\t\t// SYSLIBIDX_MSVFW -- used by Aliens & Amazons demo: what for?\n\tHookDirectSound(base);\t\t\t\t\t// SYSLIBIDX_DSOUND\n\tHookWinMM(base, \"winmm.dll\");\t\t\t// SYSLIBIDX_WINMM\n\tHookDirectInput(base);\t\t\t\t\t// SYSLIBIDX_DINPUT,\n\tHookDirectInput8(base);\t\t\t\t\t// SYSLIBIDX_DINPUT8,\n\tHookTrust(base);\t\t\t\t\t\t// SYSLIBIDX_WINTRUST\n\tHookDirect3D(base, dxversion);\t\t\t// SYSLIBIDX_DIRECT3D,\n\tHookDirect3D7(base, dxversion);\t\t\t// SYSLIBIDX_DIRECT3D700,\n\tHookImagehlp(base);\t\t\t\t\t\t// SYSLIBIDX_IMAGEHLP\n\tHookComDlg32(base);\t\t\t\t\t\t// SYSLIBIDX_COMDLG32\n\tHookComCtl32(base);\t\t\t\t\t\t// SYSLIBIDX_COMCTL32\n\tHookAVIFil32(base);\t\t\t\t\t\t// SYSLIBIDX_AVIFIL32\n\t// optional hooks\n\tif(dxw.dwFlags6 & HOOKGOGLIBS) HookWinMM(base, \"win32.dll\"); // SYSLIBIDX_WINMM\n\tif(dxw.dwFlags4 & HOOKGLIDE) HookGlideLibs(base);\t// OpenGl32.dll\n\tif(dxw.dwFlags7 & HOOKSMACKW32) HookSmackW32(base);\t// SMACKW32.DLL\t\n\tif(dxw.dwFlags8 & HOOKWING32) HookWinG32(base);\t\t// WinG32.dll\n}\n\n#define USEWINNLSENABLE\n\nvoid DisableIME()\n{\n\tBOOL res;\n\tHMODULE hm;\n\thm=GetModuleHandle(\"User32\");\n\tif(hm==NULL){\n\t\tOutTrace(\"DisableIME: GetModuleHandle(User32) ERROR err=%d\\n\", GetLastError());\n\t\treturn;\n\t}\n\t// here, GetProcAddress may be not hooked yet!\n\tif(!pGetProcAddress) pGetProcAddress=GetProcAddress;\n#ifdef USEWINNLSENABLE\n\ttypedef BOOL (WINAPI *WINNLSEnableIME_Type)(HWND, BOOL);\n\tWINNLSEnableIME_Type pWINNLSEnableIME;\n\tpWINNLSEnableIME=(WINNLSEnableIME_Type)(*pGetProcAddress)(hm, \"WINNLSEnableIME\");\n\tOutTrace(\"DisableIME: GetProcAddress(WINNLSEnableIME)=%x\\n\", pWINNLSEnableIME);\n\tif(!pWINNLSEnableIME) return;\n\tSetLastError(0);\n\tres=(*pWINNLSEnableIME)(NULL, FALSE);\n\tOutTrace(\"IME previous state=%x error=%d\\n\", res, GetLastError());\n#else\n\ttypedef LRESULT (WINAPI *SendIMEMessage_Type)(HWND, LPARAM);\n\tSendIMEMessage_Type pSendIMEMessage;\n\t//pSendIMEMessage=(SendIMEMessage_Type)(*pGetProcAddress)(hm, \"SendIMEMessage\");\n\tpSendIMEMessage=(SendIMEMessage_Type)(*pGetProcAddress)(hm, \"SendIMEMessageExA\");\n\tOutTrace(\"DisableIME: GetProcAddress(SendIMEMessage)=%x\\n\", pSendIMEMessage);\n\tif(!pSendIMEMessage) return;\n\tHGLOBAL imeh;\n\tIMESTRUCT *imes;\n\timeh=GlobalAlloc(GMEM_MOVEABLE|GMEM_SHARE, sizeof(IMESTRUCT));\n\times=(IMESTRUCT *)imeh;\n\t//imes->fnc=IME_SETLEVEL;\n\times->fnc=7;\n\times->wParam=1;\n\tSetLastError(0);\n\tres=(*pSendIMEMessage)(dxw.GethWnd(), (LPARAM)imeh);\n\tOutTrace(\"res=%x error=%d\\n\", res, GetLastError());\n#endif\n}\n\nvoid SetSingleProcessAffinity(BOOL first)\n{\n\tint i;\n\tDWORD ProcessAffinityMask, SystemAffinityMask;\n\tif(!GetProcessAffinityMask(GetCurrentProcess(), &ProcessAffinityMask, &SystemAffinityMask))\n\t\tOutTraceE(\"GetProcessAffinityMask: ERROR err=%d\\n\", GetLastError());\n\tOutTraceDW(\"Process affinity=%x\\n\", ProcessAffinityMask);\n\tif(first){\n\t\tfor (i=0; i<(8 * sizeof(DWORD)); i++){\n\t\t\tif (ProcessAffinityMask & 0x1) break;\n\t\t\tProcessAffinityMask >>= 1;\n\t\t}\n\t\tOutTraceDW(\"First process affinity bit=%d\\n\", i);\n\t\tProcessAffinityMask = 0x1;\n\t\tfor (; i; i--) ProcessAffinityMask <<= 1;\n\t\tOutTraceDW(\"Process affinity=%x\\n\", ProcessAffinityMask);\n\t}\n\telse {\n\t\tfor (i=0; i<(8 * sizeof(DWORD)); i++){\n\t\t\tif (ProcessAffinityMask & 0x80000000) break;\n\t\t\tProcessAffinityMask <<= 1;\n\t\t}\n\t\ti = 31 - i;\n\t\tOutTraceDW(\"Last process affinity bit=%d\\n\", i);\n\t\tProcessAffinityMask = 0x1;\n\t\tfor (; i; i--) ProcessAffinityMask <<= 1;\n\t\tOutTraceDW(\"Process affinity=%x\\n\", ProcessAffinityMask);\n\t}\n\tif (!SetProcessAffinityMask(GetCurrentProcess(), ProcessAffinityMask))\n\t\tOutTraceE(\"SetProcessAffinityMask: ERROR err=%d\\n\", GetLastError());\n}\n\nstatic BOOL GetTextSegment(char *module, unsigned char **start, DWORD *len)\n{\n\ttypedef BOOL (WINAPI *GetModuleInformation_Type)(HANDLE, HMODULE, LPMODULEINFO, DWORD);\n\tMODULEINFO mi;\n\tHMODULE psapilib;\t\n\tGetModuleInformation_Type pGetModuleInformation;\n\t// getting segment size\n\tpsapilib=(*pLoadLibraryA)(\"psapi.dll\");\n\tif(!psapilib) {\n\t\tOutTraceDW(\"DXWND: Load lib=\\\"%s\\\" failed err=%d\\n\", \"psapi.dll\", GetLastError());\n\t\treturn FALSE;\n\t}\n\n\tpGetModuleInformation=(GetModuleInformation_Type)(*pGetProcAddress)(psapilib, \"GetModuleInformation\");\n\t(*pGetModuleInformation)(GetCurrentProcess(), GetModuleHandle(NULL), &mi, sizeof(mi));\n\tFreeLibrary(psapilib);\n\n\ttypedef IMAGE_NT_HEADERS *(WINAPI *ImageNtHeader_Type)(PVOID);\n\tImageNtHeader_Type pImageNtHeader = NULL;\n\tHMODULE hDbgLib = LoadLibrary(\"dbghelp.dll\");\n\tif(!hDbgLib) {\n\t\tOutTraceDW(\"DXWND: Load lib=\\\"%s\\\" failed err=%d\\n\", \"dbghelp.dll\", GetLastError());\n\t\treturn FALSE;\n\t}\n\tpImageNtHeader = (ImageNtHeader_Type)GetProcAddress(hDbgLib, \"ImageNtHeader\");\n\tif (!pImageNtHeader) return FALSE;\n\n\t*start = NULL;\n\t*len = 0;\n\tIMAGE_NT_HEADERS *pNtHdr = (*pImageNtHeader)(GetModuleHandle(module));\n\tIMAGE_SECTION_HEADER *pSectionHdr = (IMAGE_SECTION_HEADER *)(pNtHdr+1);\n\tOutTrace(\"sections=%d\\n\", pNtHdr->FileHeader.NumberOfSections);\n\tfor(int i=0; i<pNtHdr->FileHeader.NumberOfSections; i++){\n\t\tchar *name = (char *)pSectionHdr->Name;\n\t\tif ((memcmp(name, \".text\", 5) == 0) || (memcmp(name, \"CODE\", 4) == 0)){\n\t\t\t*start = (unsigned char *)mi.lpBaseOfDll + pSectionHdr->VirtualAddress;\n\t\t\t*len = pSectionHdr->SizeOfRawData;\n\t\t\tbreak;\n\t\t}\n\t} \n\tFreeLibrary(hDbgLib);\n\treturn (*start != NULL);\n}\n\nstatic void ReplaceRDTSC()\n{\n\ttypedef BOOL (WINAPI *GetModuleInformation_Type)(HANDLE, HMODULE, LPMODULEINFO, DWORD);\n\tHMODULE disasmlib;\n\tunsigned char *opcodes;\n\tt_disasm da;\n\tDWORD dwSegSize;\n\tDWORD oldprot;\n\n\tif (!(disasmlib=LoadDisasm())) return;\n\t(*pPreparedisasm)();\n\n\tif(!GetTextSegment(NULL, &opcodes, &dwSegSize)) return;\n\n\tunsigned int offset = 0;\n\tBOOL cont = TRUE;\n\tOutTraceDW(\"DXWND: ReplaceRDTSC starting at addr=%x size=%x\\n\", opcodes, dwSegSize);\n\twhile (cont) {\n\t\tint cmdlen = 0;\n\t\t__try{\n\t\t\tcmdlen=(*pDisasm)(opcodes+offset,20,offset,&da,0,NULL,NULL);\n\t\t\t//OutTrace(\"offset=%x opcode=%x\\n\", offset, *(opcodes+offset));\n\t\t}\n\t\t__except (EXCEPTION_EXECUTE_HANDLER){\n\t\t\tOutTrace(\"exception at offset=%x\\n\", offset);\n\t\t\tcont=FALSE;\n\t\t}\t\t\n\t\tif (cmdlen==0) break;\n\t\t// search for RDTSC opcode 0x0F31\n\t\tif((*(opcodes+offset) == 0x0F) && (*(opcodes+offset+1) == 0x31)){\n\t\t\tOutTraceDW(\"DXWND: RDTSC opcode found at addr=%x\\n\", (opcodes+offset));\n\t\t\tif(!VirtualProtect((LPVOID)(opcodes+offset), 4, PAGE_READWRITE, &oldprot)) {\n\t\t\t\tOutTrace(\"VirtualProtect ERROR: target=%x err=%d at %d\\n\", opcodes+offset, GetLastError(), __LINE__);\n\t\t\t\treturn; // error condition\n\t\t\t}\n\t\t\t*(opcodes+offset) = 0xCC;\t// __asm INT3\n\t\t\t*(opcodes+offset+1) = 0x90; // __asm NOP\n\t\t\tif(!VirtualProtect((LPVOID)(opcodes+offset), 4, oldprot, &oldprot)){\n\t\t\t\tOutTrace(\"VirtualProtect ERROR; target=%x, err=%d at %d\\n\", opcodes+offset, GetLastError(), __LINE__);\n\t\t\t\treturn; // error condition\n\t\t\t}\n\t\t}\n\t\t// search for RDTSCP opcode 0x0F01F9\n\t\tif((*(opcodes+offset) == 0x0F) && (*(opcodes+offset+1) == 0x01) && (*(opcodes+offset+2) == 0xF9)){\n\t\t\tOutTraceDW(\"DXWND: RDTSC opcode found at addr=%x\\n\", (opcodes+offset));\n\t\t\tif(!VirtualProtect((LPVOID)(opcodes+offset), 4, PAGE_READWRITE, &oldprot)) {\n\t\t\t\tOutTrace(\"VirtualProtect ERROR: target=%x err=%d at %d\\n\", opcodes+offset, GetLastError(), __LINE__);\n\t\t\t\treturn; // error condition\n\t\t\t}\n\t\t\t*(opcodes+offset) = 0xCC;\t// __asm INT3\n\t\t\t*(opcodes+offset+1) = 0x90; // __asm NOP\n\t\t\t*(opcodes+offset+2) = 0x90; // __asm NOP\n\t\t\tif(!VirtualProtect((LPVOID)(opcodes+offset), 4, oldprot, &oldprot)){\n\t\t\t\tOutTrace(\"VirtualProtect ERROR; target=%x, err=%d at %d\\n\", opcodes+offset, GetLastError(), __LINE__);\n\t\t\t\treturn; // error condition\n\t\t\t}\n\t\t}\n\t\toffset+=cmdlen; \n\t\tif((offset+0x10) > dwSegSize) break; // skip last 16 bytes, just in case....\n\t}\n\n\treturn;\n\t(*pFinishdisasm)();\n\tFreeLibrary(disasmlib);\n}\n\nstatic void ReplacePrivilegedOps()\n{\n\tHMODULE disasmlib;\n\tunsigned char *opcodes;\n\tt_disasm da;\n\tDWORD dwSegSize;\n\tDWORD oldprot;\n\tstatic BOOL bDoOnce=FALSE;\n\n\tif(bDoOnce) return;\n\tbDoOnce = TRUE;\n\n\tif (!(disasmlib=LoadDisasm())) return;\n\t(*pPreparedisasm)();\n\n\tif(!GetTextSegment(NULL, &opcodes, &dwSegSize)) return;\n\n\tunsigned int offset = 0;\n\tBOOL cont = TRUE;\n\tOutTraceDW(\"DXWND: ReplacePrivilegedOps starting at addr=%x size=%x\\n\", opcodes, dwSegSize);\n\twhile (cont) {\n\t\tint cmdlen = 0;\n\t\tchar *sOpcode;\n\t\tBOOL bPriv;\n\t\t__try{\n\t\t\tcmdlen=(*pDisasm)(opcodes+offset,20,offset,&da,0,NULL,NULL);\n\t\t\t//OutTrace(\"offset=%x opcode=%x\\n\", offset, *(opcodes+offset));\n\t\t}\n\t\t__except (EXCEPTION_EXECUTE_HANDLER){\n\t\t\tOutTrace(\"exception at offset=%x\\n\", offset);\n\t\t\tcont=FALSE;\n\t\t}\t\t\n\t\tif (cmdlen==0) break;\n\t\t// search for following opcodes:\n\t\t// 0xEC (IN AL, DX)\n\t\t// 0x6D (INS DWORD PTR ES:[EDI],DX)\n\t\t// 0x6E (OUTS DX,BYTE PTR DS:[ESI])  \n\t\tbPriv = FALSE;\n\t\tswitch(*(opcodes+offset)){\n\t\t\tcase 0x6D: sOpcode = \"INS\";  bPriv=TRUE; break; \n\t\t\tcase 0x6E: sOpcode = \"OUTS\"; bPriv=TRUE; break; \n\t\t\tcase 0xEC: sOpcode = \"IN\";   bPriv=TRUE; break; \n\t\t}\n\t\tif(bPriv){\n\t\t\tOutTraceDW(\"DXWND: %s opcode found at addr=%x\\n\", sOpcode, (opcodes+offset));\n\t\t\tif(!VirtualProtect((LPVOID)(opcodes+offset), 8, PAGE_READWRITE, &oldprot)) {\n\t\t\t\tOutTrace(\"VirtualProtect ERROR: target=%x err=%d at %d\\n\", opcodes+offset, GetLastError(), __LINE__);\n\t\t\t\treturn; // error condition\n\t\t\t}\n\t\t\t*(opcodes+offset) = 0x90;\t// __asm NOP\n\t\t\tif((*(opcodes+offset+1) == 0xA8) && \n\t\t\t\t((*(opcodes+offset+3) == 0x75) || (*(opcodes+offset+3) == 0x74))) { // both JNZ and JZ\n\t\t\t\tOutTraceDW(\"DXWND: IN loop found at addr=%x\\n\", (opcodes+offset));\n\t\t\t\tmemset((opcodes+offset+1), 0x90, 4); // Ubik I/O loop\n\t\t\t\toffset+=4;\n\t\t\t}\n\t\t\tif(!VirtualProtect((LPVOID)(opcodes+offset), 8, oldprot, &oldprot)){\n\t\t\t\tOutTrace(\"VirtualProtect ERROR; target=%x, err=%d at %d\\n\", opcodes+offset, GetLastError(), __LINE__);\n\t\t\t\treturn; // error condition\n\t\t\t}\n\t\t}\n\t\toffset+=cmdlen; \n\t\tif((offset+0x10) > dwSegSize) break; // skip last 16 bytes, just in case....\n\t}\n\n\treturn;\n\t(*pFinishdisasm)();\n\tFreeLibrary(disasmlib);\n}\n\n#if 0\n// from https://www.winehq.org/pipermail/wine-users/2002-April/007910.html \n//\n// There is no publicaly available version numbering for SafeDisc. However, it \n// seems that the version number is stored in the executable as 3 unsigned 32-bit \n// integers. Using an hexadecimal editor, locate the following byte pattern in \n// the wrapper (game.exe)\n//\n// > 426f475f 202a3930 2e302621 21202059   BoG_ *90.0&!!  Y\n// > 793e0000                              y>..\n//\n// There should be 3 unsigned integers right after that, which are respectively \n// the version, subversion an revision number.\n//\n// On some versions of SafeDisc there are 3 null integers following the pattern, \n// before the version number. You'll then have to look at the 3 unsigned 32-bit \n// integers right after\n//\n// > 426f475f 202a3930 2e302621 21202059   BoG_ *90.0&!!  Y\n// > 793e0000 00000000 00000000 00000000   y>..............\n\nstatic void CheckSafeDiscVersion()\n{\n\tunsigned char *opcode;\n\tDWORD dwSegSize;\n\tstatic BOOL bDoOnce=FALSE;\n\tDWORD dwVersion, dwSubversion, dwRevision;\n\n\tif(bDoOnce) return;\n\tbDoOnce = TRUE;\n\n\tif(!GetTextSegment(NULL, &opcode, &dwSegSize)) return;\n\n\tunsigned int offset = 0;\n\tBOOL cont = TRUE;\n\tOutTraceDW(\"DXWND: CheckSafeDiscVersion starting at addr=%x size=%x\\n\", opcode, dwSegSize);\n\tfor(; dwSegSize > 40;) {\n\t\t// fast way to make 20 char comparisons .....\n\t\tif(*(DWORD *)opcode     ==0x5F476F42)\n\t\tif(*(DWORD *)(opcode+4) ==0x30392A20)\n\t\tif(*(DWORD *)(opcode+8) ==0x2126302E)\n\t\tif(*(DWORD *)(opcode+12)==0x59202021)\n\t\tif(*(DWORD *)(opcode+16)==0x00003E79){\n\t\t\tdwVersion = *(DWORD *)(opcode+20);\n\t\t\tdwSubversion = *(DWORD *)(opcode+24);\n\t\t\tdwRevision = *(DWORD *)(opcode+28);\n\t\t\tif(dwVersion == 0){\n\t\t\t\tdwVersion = *(DWORD *)(opcode+32);\n\t\t\t\tdwSubversion = *(DWORD *)(opcode+36);\n\t\t\t\tdwRevision = *(DWORD *)(opcode+40);\t\n\t\t\t}\n\t\t\tOutTrace(\"Safedisk %d.%d.%d detected\\n\");\n\t\t\tShowHint(HINT_SAFEDISC);\n\t\t\tbreak;\n\t\t}\n\t\tdwSegSize -= 4;\n\t\topcode += 4;\n\t}\n}\n#endif\n\nHWND hDesktopWindow = NULL;\n\n// Message poller: its only purpose is to keep sending messages to the main window\n// so that the message loop is kept running. It is a trick necessary to play \n// smack videos with smackw32.dll and AUTOREFRESH mode set\nDWORD WINAPI MessagePoller(LPVOID lpParameter)\n{\n\t#define DXWREFRESHINTERVAL 20\n\twhile(TRUE){\n\t\tSleep(DXWREFRESHINTERVAL);\n\t\tif(dxw.dwFlags2 & INDEPENDENTREFRESH)\n\t\t\tdxw.ScreenRefresh();\n\t\telse\n\t\t\tSendMessage(dxw.GethWnd(), WM_NCHITTEST, 0, 0);\n\t}\n    return 0;\n}\n\nDWORD WINAPI TimeFreezePoller(LPVOID lpParameter)\n{\n\t#define DXWREFRESHINTERVAL 20\n\textern UINT VKeyConfig[];\n\tUINT FreezeToggleKey;\n\tFreezeToggleKey = VKeyConfig[DXVK_FREEZETIME];\n\twhile(TRUE){\n\t\tSleep(DXWREFRESHINTERVAL);\n\t\tif(GetAsyncKeyState(FreezeToggleKey) & 0xF000) dxw.ToggleFreezedTime();\n\t}\n    return 0;\n}\n\nstatic void MemoryReserve()\n{\n\tVirtualAlloc((LPVOID)0x4000000, 0x04000000, MEM_RESERVE, PAGE_READWRITE);\n\tVirtualAlloc((LPVOID)0x5000000, 0x00F00000, MEM_RESERVE, PAGE_READWRITE);\n\tVirtualAlloc((LPVOID)0x6000000, 0x00F00000, MEM_RESERVE, PAGE_READWRITE);\n\tVirtualAlloc((LPVOID)0x7000000, 0x00F00000, MEM_RESERVE, PAGE_READWRITE);\n\tVirtualAlloc((LPVOID)0x8000000, 0x00F00000, MEM_RESERVE, PAGE_READWRITE);\n}\n\nextern HHOOK hMouseHook;\n\nvoid HookInit(TARGETMAP *target, HWND hwnd)\n{\n\tstatic BOOL DoOnce = TRUE;\n\tHMODULE base;\n\tchar *sModule;\n\tchar sModuleBuf[60+1];\n\tchar sSourcePath[MAX_PATH+1];\n\tstatic char *dxversions[14]={\n\t\t\"Automatic\", \"DirectX1~6\", \"\", \"\", \"\", \"\", \"\", \n\t\t\"DirectX7\", \"DirectX8\", \"DirectX9\", \"DirectX10\", \"DirectX11\", \"None\", \"\"\n\t};\n\tstatic char *Resolutions[]={\n\t\t\"unlimited\", \"320x200\", \"400x300\", \"640x480\", \"800x600\", \"1024x768\", \"1280x960\", \"1280x1024\", \"\" // terminator\n\t};\n\n\tdxw.InitTarget(target);\n\n\t// reserve legacy memory segments\n\tif(dxw.dwFlags6 & LEGACYALLOC) MemoryReserve();\n\n\t// add the DxWnd install dir to the search path, to make all included dll linkable\n\tDWORD dwAttrib;\t\t\n\tdwAttrib = GetFileAttributes(\"dxwnd.dll\");\n\t//if (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) {\n\t//\tMessageBox(0, \"DXWND: ERROR can't locate itself\", \"ERROR\", MB_OK | MB_ICONEXCLAMATION);\n\t//\texit(0);\n\t//}\n\tGetModuleFileName(GetModuleHandle(\"dxwnd\"), sSourcePath, MAX_PATH);\n\tsSourcePath[strlen(sSourcePath)-strlen(\"dxwnd.dll\")] = 0; // terminate the string just before \"dxwnd.dll\"\n\tSetDllDirectory(sSourcePath);\n\n\tif(dxw.bHintActive) ShowHint(HINT_HINT);\n\n\tif(DoOnce){\n\t\tDoOnce = FALSE;\n\t\tInitModuleHooks();\n\t\tdxw.VirtualDesktop.left\t\t= GetSystemMetrics(SM_XVIRTUALSCREEN);\n\t\tdxw.VirtualDesktop.top\t\t= GetSystemMetrics(SM_YVIRTUALSCREEN);\n\t\tdxw.VirtualDesktop.right\t= dxw.VirtualDesktop.left + GetSystemMetrics(SM_CXVIRTUALSCREEN);\n\t\tdxw.VirtualDesktop.bottom\t= dxw.VirtualDesktop.top + GetSystemMetrics(SM_CYVIRTUALSCREEN);\n\t\tOutTraceDW(\"Virtual Desktop: monitors=%d area=(%d,%d)-(%d,%d)\\n\", \n\t\t\tGetSystemMetrics(SM_CMONITORS),\n\t\t\tdxw.VirtualDesktop.left, dxw.VirtualDesktop.top, dxw.VirtualDesktop.right, dxw.VirtualDesktop.bottom);\n\n\t\tif(dxw.bHintActive) {\n\t\t\tCheckCompatibilityFlags();\t// v2.02.83: Check for change of OS release\n\t\t\t// CheckSafeDiscVersion();\t\t// v2.03.78: Detects SafeDisk references and version - moved to DxWnd.exe \n\t\t}\n\t\thTrayWnd = FindWindow(\"Shell_TrayWnd\", NULL);\n\t}\n\n\tif(hwnd){ // v2.02.32: skip this when in code injection mode.\n\t\t// v2.1.75: is it correct to set hWnd here?\n\t\t//dxw.SethWnd(hwnd);\n\t\tdxw.hParentWnd=GetParent(hwnd);\n\t\tdxw.hChildWnd=hwnd;\n\t\t// v2.02.31: set main win either this one or the parent!\n\t\tdxw.SethWnd((dxw.dwFlags1 & FIXPARENTWIN) ? GetParent(hwnd) : hwnd);\n\t\tif(dxw.dwFlags4 & ENABLEHOTKEYS) dxw.MapKeysInit();\n\t}\n\n\tif(IsTraceDW){\n\t\tchar sInfo[1024];\n\t\tOSVERSIONINFO osinfo;\n\t\tstrcpy(sInfo, \"\");\n\t\tif(hwnd) sprintf(sInfo, \" hWnd=%x ParentWnd=%x desktop=%x\", hwnd, dxw.hParentWnd, GetDesktopWindow());\n\t\tOutTrace(\"HookInit: path=\\\"%s\\\" module=\\\"%s\\\" dxversion=%s pos=(%d,%d) size=(%d,%d) init-max=(%d,%d) monitor=%d%s\\n\", \n\t\t\ttarget->path, target->module, dxversions[dxw.dwTargetDDVersion], \n\t\t\ttarget->posx, target->posy, target->sizx, target->sizy, target->resw, target->resh, target->monitorid, sInfo);\n\t\tosinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);\n\t\tif(GetVersionEx(&osinfo)){\n\t\t\tOutTrace(\"OS=(%d.%d) build=%d platform=%d service pack=%s\\n\", \n\t\t\t\tosinfo.dwMajorVersion, osinfo.dwMinorVersion, osinfo.dwPlatformId, osinfo.dwPlatformId, osinfo.szCSDVersion);\n\t\t}\n\t\tif (dxw.dwFlags4 & LIMITSCREENRES) OutTrace(\"HookInit: max resolution=%s\\n\", (dxw.MaxScreenRes<6)?Resolutions[dxw.MaxScreenRes]:\"unknown\");\n\t\tif (dxw.dwFlags7 & MAXIMUMRES) OutTrace(\"HookInit: max resolution=(%dx%d)\\n\", dxw.iMaxW, dxw.iMaxH);\n\t\tif (dxw.dwFlags7 & LIMITDDRAW) OutTrace(\"HookInit: max supported IDidrectDrawInterface=%d\\n\", dxw.MaxDdrawInterface);\n\t\tif (dxw.dwFlags7 & CPUSLOWDOWN) OutTrace(\"HookInit: CPU slowdown ratio 1:%d\\n\", dxw.SlowRatio);\n\t\tif (dxw.dwFlags7 & CPUMAXUSAGE) OutTrace(\"HookInit: CPU maxusage ratio 1:%d\\n\", dxw.SlowRatio);\n\t\tif (dxw.dwFlags8 & VSYNCSCANLINE) OutTrace(\"HookInit: VSync Scanline=%d\\n\", dxw.ScanLine);\n\t}\n\n\tif (hwnd && IsDebug){\n\t\tDWORD dwStyle, dwExStyle;\n\t\tchar ClassName[81];\n\t\tchar WinText[81];\n\t\tdwStyle=GetWindowLong(dxw.GethWnd(), GWL_STYLE);\n\t\tdwExStyle=GetWindowLong(dxw.GethWnd(), GWL_EXSTYLE);\n\t\tGetClassName(dxw.GethWnd(), ClassName, sizeof(ClassName));\n\t\tGetWindowText(dxw.GethWnd(), WinText, sizeof(WinText));\n\t\tOutTrace(\"HookInit: dxw.hChildWnd=%x class=\\\"%s\\\" text=\\\"%s\\\" style=%x(%s) exstyle=%x(%s)\\n\", \n\t\t\tdxw.hChildWnd, ClassName, WinText, dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));\n\t\tdwStyle=GetWindowLong(dxw.hParentWnd, GWL_STYLE);\n\t\tdwExStyle=GetWindowLong(dxw.hParentWnd, GWL_EXSTYLE);\n\t\tGetClassName(dxw.hParentWnd, ClassName, sizeof(ClassName));\n\t\tGetWindowText(dxw.hParentWnd, WinText, sizeof(WinText));\n\t\tOutTrace(\"HookInit: dxw.hParentWnd=%x class=\\\"%s\\\" text=\\\"%s\\\" style=%x(%s) exstyle=%x(%s)\\n\", \n\t\t\tdxw.hParentWnd, ClassName, WinText, dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));\n\t\tOutTrace(\"HookInit: target window pos=(%d,%d) size=(%d,%d)\\n\", dxw.iPosX, dxw.iPosY, dxw.iSizX, dxw.iSizY);\n\t\tdxw.DumpDesktopStatus();\n\t\ttypedef HRESULT (WINAPI *DwmIsCompositionEnabled_Type)(BOOL *);\n\t\tDwmIsCompositionEnabled_Type pDwmIsCompositionEnabled = NULL;\n\t\tHMODULE DwnApiHdl;\n\t\tDwnApiHdl = LoadLibrary(\"Dwmapi.dll\");\n\t\tif (DwnApiHdl) pDwmIsCompositionEnabled = (DwmIsCompositionEnabled_Type)GetProcAddress(DwnApiHdl, \"DwmIsCompositionEnabled\");\n\t\tchar *sRes;\n\t\tif(pDwmIsCompositionEnabled){\n\t\t\tHRESULT res;\n\t\t\tBOOL val;\n\t\t\tres = (*pDwmIsCompositionEnabled)(&val);\n\t\t\tif(res==S_OK) sRes = val ? \"ENABLED\" : \"DISABLED\";\n\t\t\telse sRes = \"ERROR\";\n\t\t}\n\t\telse sRes = \"Unknown\";\n\t\tOutTrace(\"HookInit: DWMComposition %s\\n\", sRes);\n\t}\n\n\tif (hwnd) {\n\t\tchar ClassName[8+1];\n\t\tGetClassName(hwnd, ClassName, sizeof(ClassName));\n\t\tif(!strcmp(ClassName, \"IME\")){\n\t\t\tdxw.hChildWnd=GetParent(hwnd);\n\t\t\tdxw.hParentWnd=GetParent(dxw.hChildWnd);\n\t\t\tif (dxw.dwFlags2 & SUPPRESSIME) DestroyWindow(hwnd);\n\t\t\t// v2.02.31: set main win either this one or the parent!\n\t\t\tdxw.SethWnd((dxw.dwFlags1 & FIXPARENTWIN) ? dxw.hParentWnd : dxw.hChildWnd);\n\t\t\thwnd = dxw.GethWnd();\n\t\t\tif(hwnd) OutTraceDW(\"HookInit: skipped IME window. current hWnd=%x(hdc=%x) dxw.hParentWnd=%x(hdc=%x)\\n\", \n\t\t\t\thwnd, GetDC(hwnd), dxw.hParentWnd, GetDC(dxw.hParentWnd));\t\t\n\t\t}\n\t}\n\n\tHookSysLibsInit(); // this just once...\n\n\tif(dxw.dwFlags4 & HOOKGLIDE) {\n\t\tdxw.PushDLL(\"glide\",\tSYSLIBIDX_GLIDE);\n\t\tdxw.PushDLL(\"glide2x\",\tSYSLIBIDX_GLIDE2);\n\t\tdxw.PushDLL(\"glide3x\",\tSYSLIBIDX_GLIDE3);\n\t}\n\tif(dxw.dwFlags7 & HOOKSMACKW32) {\n\t\tdxw.PushDLL(\"smackw32\",\tSYSLIBIDX_SMACKW32);\t// SMACKW32.DLL\t\n\t}\n\tif(dxw.dwFlags8 & HOOKWING32) {\n\t\tdxw.PushDLL(\"wing32\",\tSYSLIBIDX_WING32);\t// WING32.DLL\t\n\t}\n\n\tbase=GetModuleHandle(NULL);\n\t// set IAT navigators\n\tIATPatch = IATPatchDefault;\n\tDumpImportTable = DumpImportTableDefault;\n\t//if(dxw.dwFlags8 & SEQUENCEDIAT) {\n\tif(IsIATSequential(base)){\n\t\tOutTraceDW(\"HookInit: setting sequential IAT navigation\\n\"); \n\t\tDumpImportTable = DumpImportTableSequential;\n\t\tIATPatch = IATPatchSequential;\n\t}\n\tif (dxw.dwFlags3 & SINGLEPROCAFFINITY) SetSingleProcessAffinity(TRUE);\n\tif (dxw.dwFlags5 & USELASTCORE) SetSingleProcessAffinity(FALSE);\n\tif (dxw.dwFlags4 & INTERCEPTRDTSC) AddVectoredExceptionHandler(1, Int3Handler); // 1 = first call, 0 = call last\n\tif (dxw.dwFlags1 & HANDLEEXCEPTIONS) HookExceptionHandler();\n\tif (dxw.dwTFlags & OUTIMPORTTABLE) DumpImportTable(base);\n\tif (dxw.dwFlags2 & SUPPRESSIME) DisableIME();\n\n\tif (dxw.dwFlags4 & INTERCEPTRDTSC) ReplaceRDTSC();\n\tif (dxw.dwFlags5 & REPLACEPRIVOPS) ReplacePrivilegedOps();\n\n\tif(dxw.bHintActive) CheckImportTable(base);\n\n\t// make InitPosition used for both DInput and DDraw\n\tif(dxw.Windowize) dxw.InitWindowPos(target->posx, target->posy, target->sizx, target->sizy);\n\t\n\tOutTraceB(\"HookInit: base hmodule=%x\\n\", base);\n\tHookModule(base, dxw.dwTargetDDVersion);\n\tif (dxw.dwFlags3 & HOOKDLLS) HookDlls(base);\n\n\tstrncpy(sModuleBuf, dxw.gsModules, 60);\n\tsModule=strtok(sModuleBuf,\" ;\");\n\twhile (sModule) {\n\t\tbase=(*pLoadLibraryA)(sModule);\n\t\tif(!base){\n\t\t\tOutTraceE(\"HookInit: LoadLibrary ERROR module=%s err=%d\\n\", sModule, GetLastError());\n\t\t}\n\t\telse {\n\t\t\tOutTraceDW(\"HookInit: hooking additional module=%s base=%x\\n\", sModule, base);\n\t\t\tif (dxw.dwTFlags & OUTIMPORTTABLE) DumpImportTable(base);\n\t\t\tHookModule(base, dxw.dwTargetDDVersion);\n\t\t}\n\t\tsModule=strtok(NULL,\" ;\");\n\t}\n\n\tSaveScreenMode();\n\tif(dxw.dwFlags2 & RECOVERSCREENMODE) RecoverScreenMode();\n\tif(dxw.dwFlags3 & FORCE16BPP) SwitchTo16BPP();\n\n\tif (dxw.dwFlags1 & MESSAGEPROC){\n\t\textern HINSTANCE hInst;\n\t\ttypedef HHOOK (WINAPI *SetWindowsHookEx_Type)(int, HOOKPROC, HINSTANCE, DWORD);\n\t\textern SetWindowsHookEx_Type pSetWindowsHookExA;\n\t\thMouseHook =(*pSetWindowsHookExA)(WH_GETMESSAGE, MessageHook, hInst, GetCurrentThreadId());\n\t\tif(hMouseHook==NULL) OutTraceE(\"SetWindowsHookEx WH_GETMESSAGE failed: error=%d\\n\", GetLastError());\n\t}\n\n\tInitScreenParameters(0); // still unknown\n\tif(hwnd) HookWindowProc(hwnd);\n\t// in fullscreen mode, messages seem to reach and get processed by the parent window\n\tif((!dxw.Windowize) && hwnd) HookWindowProc(dxw.hParentWnd);\n\n\t// initialize window: if\n\t// 1) not in injection mode (hwnd != 0) and\n\t// 2) in Windowed mode and\n\t// 3) supposedly in fullscreen mode (dxw.IsFullScreen()) and\n\t// 4) configuration ask for a overlapped bordered window (dxw.dwFlags1 & FIXWINFRAME) then\n\t// update window styles: just this window or, when FIXPARENTWIN is set, the father one as well. \n\n\tif (hwnd && dxw.Windowize && dxw.IsFullScreen()) {\n\t\tif((dxw.dwFlags1 & FIXWINFRAME) || (dxw.dwFlags9 & FIXTHINFRAME)) dxw.FixWindowFrame(dxw.hChildWnd);\n\t\tAdjustWindowPos(dxw.hChildWnd, target->sizx, target->sizy);\n\t\tif(dxw.dwFlags1 & FIXPARENTWIN) {\n\t\t\tif((dxw.dwFlags1 & FIXWINFRAME) || (dxw.dwFlags9 & FIXTHINFRAME)) dxw.FixWindowFrame(dxw.hParentWnd);\n\t\t\tAdjustWindowPos(dxw.hParentWnd, target->sizx, target->sizy);\n\t\t}\n\t}\n\n\tif (dxw.dwFlags1 & AUTOREFRESH) \n\t\tCreateThread(NULL, 0, MessagePoller, NULL, 0, NULL);\n\n\tif (dxw.dwFlags4 & ENABLETIMEFREEZE)\n\t\tCreateThread(NULL, 0, TimeFreezePoller, NULL, 0, NULL);\n\n\tif(dxw.dwFlags7 & CPUSLOWDOWN)\n\t\tCreateThread(NULL, 0, CpuSlow, NULL, 0, NULL);\n\telse\n\tif(dxw.dwFlags7 & CPUMAXUSAGE)\n\t\tCreateThread(NULL, 0, CpuLimit, NULL, 0, NULL);\n}\n\nLPCSTR ProcToString(LPCSTR proc)\n{\n\tstatic char sBuf[24+1];\n\tif(((DWORD)proc & 0xFFFF0000) == 0){\n\t\tsprintf_s(sBuf, 24, \"#0x%x\", proc);\n\t\treturn sBuf;\n\t}\n\telse\n\t\treturn proc;\n}\n\nFARPROC RemapLibraryEx(LPCSTR proc, HMODULE hModule, HookEntryEx_Type *Hooks)\n{\n\tvoid *remapped_addr;\n\tfor(; Hooks->APIName; Hooks++){\n\t\tif (!strcmp(proc,Hooks->APIName)){\n\t\t\tif  ((Hooks->HookStatus == HOOK_HOT_REQUIRED) ||\n\t\t\t\t((dxw.dwFlags4 & HOTPATCH) && (Hooks->HookStatus == HOOK_HOT_CANDIDATE)) ||  // hot patch candidate still to process - or\n\t\t\t\t((dxw.dwFlags4 & HOTPATCHALWAYS) && (Hooks->HookStatus != HOOK_HOT_LINKED))){ // force hot patch and not already hooked\n\t\t\t\t\t\t\t\t\t\t\t \n\t\t\tif(!Hooks->OriginalAddress) {\n\t\t\t\t\tHooks->OriginalAddress=(*pGetProcAddress)(hModule, Hooks->APIName);\n\t\t\t\t\tif(!Hooks->OriginalAddress) continue;\n\t\t\t\t}\n\n\t\t\t\tremapped_addr = HotPatch(Hooks->OriginalAddress, Hooks->APIName, Hooks->HookerAddress);\n\t\t\t\tif(remapped_addr == (void *)1) { // should never go here ...\n\t\t\t\t\tHooks->HookStatus = HOOK_HOT_LINKED;\n\t\t\t\t\tcontinue; // already hooked\n\t\t\t\t}\n\t\t\t\tif(remapped_addr) {\n\t\t\t\t\tHooks->HookStatus = HOOK_HOT_LINKED;\n\t\t\t\t\tif(Hooks->StoreAddress) *(Hooks->StoreAddress) = (FARPROC)remapped_addr;\n\t\t\t\t}\t\t\t\n\t\t\t}\n\t\t\tif(Hooks->HookStatus == HOOK_HOT_LINKED) {\n\t\t\t\tOutTraceDW(\"GetProcAddress: hot patched proc=%s addr=%x\\n\", ProcToString(proc), Hooks->HookerAddress);\n\t\t\t\treturn Hooks->HookerAddress;\n\t\t\t}\n\t\t\tif (Hooks->StoreAddress) *(Hooks->StoreAddress)=(*pGetProcAddress)(hModule, proc);\n\t\t\tOutTraceDW(\"GetProcAddress: hooking proc=%s addr=%x->%x\\n\", \n\t\t\t\tProcToString(proc), (Hooks->StoreAddress) ? *(Hooks->StoreAddress) : 0, Hooks->HookerAddress);\n\t\t\treturn Hooks->HookerAddress;\n\t\t}\n\t}\n\treturn NULL;\n}\n\nvoid HookLibraryEx(HMODULE hModule, HookEntryEx_Type *Hooks, char *DLLName)\n{\n\tHMODULE hDLL = NULL;\n\n\t//OutTrace(\"HookLibrary: hModule=%x dll=%s\\n\", hModule, DLLName);\n\tfor(; Hooks->APIName; Hooks++){\n\t\tvoid *remapped_addr;\n\t\tif(Hooks->HookStatus == HOOK_HOT_LINKED) continue; // skip any hot-linked entry\n\t\tif(((Hooks->HookStatus == HOOK_HOT_REQUIRED) ||\n\t\t\t((dxw.dwFlags4 & HOTPATCH) && (Hooks->HookStatus == HOOK_HOT_CANDIDATE)) ||  // hot patch candidate still to process - or\n\t\t\t((dxw.dwFlags4 & HOTPATCHALWAYS) && (Hooks->HookStatus != HOOK_HOT_LINKED))) // force hot patch and not already hooked\n\t\t\t&&\n\t\t\tHooks->StoreAddress){\t\t\t\t\t\t\t // and save ptr available\n\t\t\t// Hot Patch - beware! This way you're likely to hook unneeded libraries.\n\t\t\tif(!Hooks->OriginalAddress) {\n\t\t\t\tif(!hDLL) {\n\t\t\t\t\thDLL = (*pLoadLibraryA)(DLLName);\n\t\t\t\t\tif(!hDLL) {\n\t\t\t\t\t\tOutTrace(\"HookLibrary: LoadLibrary failed on DLL=%s err=%x\\n\", DLLName, GetLastError());\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tHooks->OriginalAddress=(*pGetProcAddress)(hDLL, Hooks->APIName);\n\t\t\t\tif(!Hooks->OriginalAddress) {\n\t\t\t\t\tOutTraceB(\"HookLibrary: GetProcAddress failed on API=%s err=%x\\n\", Hooks->APIName, GetLastError());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tremapped_addr = HotPatch(Hooks->OriginalAddress, Hooks->APIName, Hooks->HookerAddress);\n\t\t\tif(remapped_addr == (void *)1) { // should never go here ...\n\t\t\t\tHooks->HookStatus = HOOK_HOT_LINKED;\n\t\t\t\tcontinue; // already hooked\n\t\t\t}\n\t\t\tif(remapped_addr) {\n\t\t\t\tHooks->HookStatus = HOOK_HOT_LINKED;\n\t\t\t\t*(Hooks->StoreAddress) = (FARPROC)remapped_addr;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tremapped_addr = IATPatch(hModule, Hooks->ordinal, DLLName, Hooks->OriginalAddress, Hooks->APIName, Hooks->HookerAddress);\n\t\tif(remapped_addr)  {\n\t\t\tHooks->HookStatus = HOOK_IAT_LINKED;\n\t\t\tif (Hooks->StoreAddress) *(Hooks->StoreAddress) = (FARPROC)remapped_addr;\n\t\t}\n\t}\n}\n\nvoid PinLibraryEx(HookEntryEx_Type *Hooks, char *DLLName)\n{\n\tHMODULE hModule = NULL;\n\thModule = (*pLoadLibraryA)(DLLName);\n\tif(!hModule) {\n\t\tOutTrace(\"PinLibrary: LoadLibrary failed on DLL=%s err=%x\\n\", DLLName, GetLastError());\n\t\treturn;\n\t}\n\tfor(; Hooks->APIName; Hooks++){\n\t\tif (Hooks->StoreAddress) *(Hooks->StoreAddress) = (*pGetProcAddress)(hModule, Hooks->APIName);\n\t}\n}\n\nBOOL IsHotPatchedEx(HookEntryEx_Type *Hooks, char *ApiName)\n{\n\tfor(; Hooks->APIName; Hooks++){\n\t\tif(!strcmp(Hooks->APIName, ApiName)) return (Hooks->HookStatus == HOOK_HOT_LINKED);\n\t}\n\treturn FALSE;\n}\n\nvoid HookLibInitEx(HookEntryEx_Type *Hooks)\n{\n\tfor(; Hooks->APIName; Hooks++)\n\t\tif (Hooks->StoreAddress) *(Hooks->StoreAddress) = Hooks->OriginalAddress;\n}\n\n"
  },
  {
    "path": "dll/dxhook.h",
    "content": "extern int HookDirectDraw(HMODULE, int);\nextern int HookDirect3D(HMODULE, int);\nextern int HookDirect3D7(HMODULE, int);\nextern void HookOle32(HMODULE);\nextern void HookGDI32(HMODULE);\nextern void HookDirectInput(HMODULE);\nextern void HookDirectInput8(HMODULE);\nextern void HookDirectSound(HMODULE);\nextern void HookImeLib(HMODULE);\nextern void HookKernel32(HMODULE);\nextern void HookUser32(HMODULE);\nextern void HookTrust(HMODULE);\nextern void HookWinMM(HMODULE, char *libname);\nextern void HookAdvApi32(HMODULE);\nextern void HookImagehlp(HMODULE);\nextern void HookSmackW32(HMODULE);\nextern void HookAVIFil32(HMODULE);\nextern void HookComDlg32(HMODULE);\nextern void HookComCtl32(HMODULE);\nextern void HookWinG32(HMODULE);\n\nextern void InitPosition(int, int, int, int, int, int);\n//void InitWindowPos(int, int, int, int);\nextern LPCSTR ProcToString(LPCSTR proc);\nextern HRESULT HookDxDiag(REFIID, LPVOID FAR*);\n\nextern FARPROC Remap_AVIFil32_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_ddraw_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_d3d7_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_d3d8_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_d3d9_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_d3d10_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_d3d10_1_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_d3d11_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_gl_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_smack_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_user32_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_GDI32_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_kernel32_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_ole32_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_trust_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_WinMM_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_ImeLib_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_vfw_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_AdvApi32_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_Glide_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_Imagehlp_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_DInput_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_DInput8_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_ComCtl32_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_ComDlg32_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_DSound_ProcAddress(LPCSTR, HMODULE);\nextern FARPROC Remap_WinG32_ProcAddress(LPCSTR, HMODULE);\n\ntypedef enum {\n\tHOOK_IAT_CANDIDATE = 0,\n\tHOOK_HOT_CANDIDATE,\n\tHOOK_HOT_REQUIRED,\n\tHOOK_IAT_LINKED,\n\tHOOK_HOT_LINKED\n} HookEntry_Status;\n\ntypedef struct {\n\tHookEntry_Status HookStatus;\n\tDWORD ordinal;\n\tchar *APIName;\n\tFARPROC OriginalAddress;\n\tFARPROC *StoreAddress;\n\tFARPROC HookerAddress;\n} HookEntryEx_Type;\n\nextern FARPROC RemapLibraryEx(LPCSTR, HMODULE, HookEntryEx_Type *);\nextern void HookLibraryEx(HMODULE, HookEntryEx_Type *, char *);\nextern void PinLibraryEx(HookEntryEx_Type *, char *);\nextern void HookLibInitEx(HookEntryEx_Type *);\nextern BOOL IsHotPatchedEx(HookEntryEx_Type *, char *);\n\n#define MISSING ((FARPROC)-1)"
  },
  {
    "path": "dll/dxmapping.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhelper.h\"\n\n// IsValidMainWindow: returns TRUE if the main window can be queried for coordinates, \n// FALSE otherwise (e.g. when minimized)\n\nBOOL dxwCore::IsValidMainWindow()\n{\n\tRECT Client;\n\tPOINT UpLeft = {0, 0};\n\tif(!(*pGetClientRect)(hWnd, &Client)) return FALSE;\n\tif((Client.right == 0) || (Client.bottom == 0)) return FALSE;\n\tif(!(*pClientToScreen)(hWnd, &UpLeft)) return FALSE;\n\treturn TRUE;\n}\n\n// if the main window coordinates are still valid updates the window placement values\n\nvoid dxwCore::UpdateDesktopCoordinates()\n{\n\tRECT Client;\n\tPOINT UpLeft = {0, 0};\n\n\t//OutTraceB(\"dxwCore::UpdateDesktopCoordinates: OLD pos=(%d,%d) size=(%dx%d)\\n\", iPosX, iPosY, iSizX, iSizY);\n\tif(!(*pGetClientRect)(hWnd, &Client)) return;\n\tif((Client.right == 0) || (Client.bottom == 0)) return;\n\tif(!(*pClientToScreen)(hWnd, &UpLeft)) return;\n\t// update coordinates ....\n\tiPosX = UpLeft.x;\n\tiPosY = UpLeft.y;\n\tiSizX = Client.right - Client.left;\n\tiSizY = Client.bottom - Client.top;\n\t//OutTraceB(\"dxwCore::UpdateDesktopCoordinates: NEW pos=(%d,%d) size=(%dx%d)\\n\", iPosX, iPosY, iSizX, iSizY);\n}\n\n// GetScreenRect: returns a RECT sized as the virtual desktop\n\nRECT dxwCore::GetScreenRect()\n{\n\tstatic RECT Screen;\n\tScreen.left=0;\n\tScreen.top=0;\n\tScreen.right=dwScreenWidth;\n\tScreen.bottom=dwScreenHeight;\n\treturn Screen;\n}\n\n// GetUnmappedScreenRect: returns the RECT of the real coordinates of the virtual desktop, \n// that is the client area of the main window \n\nRECT dxwCore::GetUnmappedScreenRect()\n{\n\tRECT Screen;\n\tScreen.top = iPosY;\n\tScreen.bottom = iPosY + iSizX;\n\tScreen.left = iPosX;\n\tScreen.right = iPosX + iSizX;\n\treturn Screen;\n}\n\n// GetFrameOffset: return the POINT coordinates of the upper-left corner of the main window frame\n// taking in account of the window frame and title bar, then it needs to query hWnd\n\nPOINT dxwCore::GetFrameOffset()\n{\n\tRECT wrect;\n\tPOINT FrameOffset={0, 0};\n\t(*pGetWindowRect)(hWnd, &wrect);\n\t(*pClientToScreen)(hWnd, &FrameOffset);\n\tFrameOffset.x -= wrect.left;\n\tFrameOffset.y -= wrect.top;\n\tOutTraceB(\"GetFrameOffset: offset=(%d,%d)\\n\", FrameOffset.x, FrameOffset.y);\n\treturn FrameOffset;\n}\n\n// ClientOffset: returns the virtual offset of a window within the virtual desktop\n\nPOINT dxwCore::ClientOffset(HWND hwnd)\n{\n\tPOINT upleft, ret = {0, 0};\n\n\tif(iSizX && iSizY) {\n\t\tupleft.x = upleft.y = 0;\n\t\t(*pClientToScreen)(hwnd, &upleft);\n\t\tret.x = (((upleft.x - iPosX) * dwScreenWidth) + (iSizX >> 1)) / iSizX;\n\t\tret.y = (((upleft.y - iPosY) * dwScreenHeight) + (iSizY >> 1)) / iSizY;\n\t\tif(ret.x < 0) ret.x = 0;\n\t\tif(ret.y < 0) ret.y = 0;\n\t\tOutTraceB(\"ClientOffset: hwnd=%x offset=(%d,%d)\\n\", hwnd, ret.x, ret.y);\n\t}\n\treturn ret;\n}\n\n// GetWindowRect: returns the virtual coordinates of a window within the virtual desktop\n\nRECT dxwCore::GetWindowRect(RECT win)\n{\n\tif(iSizX && iSizY) {\n\t\twin.left = (((win.left - iPosX) * (LONG)dwScreenWidth) + (iSizX >> 1)) / iSizX;\n\t\twin.top = (((win.top - iPosY) * (LONG)dwScreenHeight) + (iSizY >> 1)) / iSizY;\n\t\twin.right = (((win.right - iPosX) * (LONG)dwScreenWidth) + (iSizX >> 1)) / iSizX;\n\t\twin.bottom = (((win.bottom - iPosY) * (LONG)dwScreenHeight) + (iSizY >> 1)) / iSizY;\n\t}\n\n\treturn win;\n}\n\n// GetClientRect: returns the virtual client coordinates of a window\n\nRECT dxwCore::GetClientRect(RECT win)\n{\n\tif(iSizX && iSizY) {\n\t\twin.left = ((win.left * dwScreenWidth) + (iSizX >> 1)) / iSizX;\n\t\twin.top = ((win.top * dwScreenHeight) + (iSizY >> 1)) / iSizY;\n\t\twin.right = ((win.right * dwScreenWidth) + (iSizX >> 1)) / iSizX;\n\t\twin.bottom = ((win.bottom * dwScreenHeight) + (iSizY >> 1)) / iSizY;\n\t}\n\n\treturn win;\n}\n\n// AddCoordinates, SubCoordinates: adds or subtracts a POINT displacement\n\nPOINT dxwCore::AddCoordinates(POINT p1, POINT p2)\n{\n\tPOINT ps;\n\tps.x = p1.x + p2.x;\n\tps.y = p1.y + p2.y;\n\treturn ps;\n}\n\nRECT dxwCore::AddCoordinates(RECT r1, POINT p2)\n{\n\tRECT rs;\n\trs.left = r1.left + p2.x;\n\trs.right = r1.right + p2.x;\n\trs.top = r1.top + p2.y;\n\trs.bottom = r1.bottom + p2.y;\n\treturn rs;\n}\n\nPOINT dxwCore::SubCoordinates(POINT p1, POINT p2)\n{\n\tPOINT ps;\n\tps.x = p1.x - p2.x;\n\tps.y = p1.y - p2.y;\n\treturn ps;\n}\n\n// MapWindow, MapWindowRect: transforms the virtual window coordinates of the virtual desktop into real ones\n\nRECT dxwCore::MapWindowRect(LPRECT lpRect)\n{\n\tRECT RetRect;\n\n\tif(!Windowize){\n\t\tif(lpRect) \n\t\t\tRetRect=*lpRect;\n\t\telse{\n\t\t\tRetRect.left = RetRect.top = 0;\n\t\t\tRetRect.right = dwScreenWidth;\n\t\t\tRetRect.bottom = dwScreenHeight;\n\t\t}\n\t\treturn RetRect;\n\t}\n\t\n\tif(lpRect){ \n\t\tRetRect.left = iPosX + (lpRect->left * iSizX / dwScreenWidth);\n\t\tRetRect.right = iPosX + (lpRect->right * iSizX / dwScreenWidth);\n\t\tRetRect.top = iPosY + (lpRect->top * iSizY / dwScreenHeight);\n\t\tRetRect.bottom = iPosY + (lpRect->bottom * iSizY / dwScreenHeight);\n\t}\n\telse{\n\t\tRetRect.left = iPosX;\n\t\tRetRect.right = iPosX + iSizX;\n\t\tRetRect.top = iPosY;\n\t\tRetRect.bottom = iPosY + iSizY;\n\t}\n\treturn RetRect;\n}\n\nvoid dxwCore::MapWindow(LPRECT rect)\n{\n\trect->left= iPosX + (((rect->left * iSizX) + (dwScreenWidth >> 1)) / (int)dwScreenWidth);\n\trect->top= iPosY + (((rect->top * iSizY) + (dwScreenHeight >> 1)) / (int)dwScreenHeight);\n\trect->right= iPosX + (((rect->right * iSizX) + (dwScreenWidth >> 1)) / (int)dwScreenWidth);\n\trect->bottom= iPosY + (((rect->bottom * iSizY) + (dwScreenHeight >> 1)) / (int)dwScreenHeight);\n}\n\nvoid dxwCore::MapWindow(int *nXDest, int *nYDest, int *nWDest, int *nHDest)\n{\n\t*nXDest= iPosX + (((*nXDest * iSizX) + (dwScreenWidth >> 1)) / (int)dwScreenWidth);\n\t*nYDest= iPosY + (((*nYDest * iSizY) + (dwScreenHeight >> 1)) / (int)dwScreenHeight);\n\t*nWDest= ((*nWDest * iSizX) + (dwScreenWidth >> 1)) / (int)dwScreenWidth;\n\t*nHDest= ((*nHDest * iSizY) + (dwScreenHeight >> 1)) / (int)dwScreenHeight;\n}\n\nvoid dxwCore::MapWindow(LPPOINT lppoint) \n{\n\tlppoint->x = iPosX + (((lppoint->x * iSizX) + (dwScreenWidth >> 1)) / dwScreenWidth);\n\tlppoint->y = iPosY + (((lppoint->y * iSizY) + (dwScreenHeight >> 1)) / dwScreenHeight);\n}\n\n// MapClient, MapClientRect: transforms the client virtual coordinates of the virtual desktop into real ones\n\nRECT dxwCore::MapClientRect(LPRECT lpRect)\n{\n\tRECT RetRect;\n\tif(lpRect){ \n\t\tRetRect.left = (lpRect->left * iSizX / dwScreenWidth);\n\t\tRetRect.right = (lpRect->right * iSizX / dwScreenWidth);\n\t\tRetRect.top = (lpRect->top * iSizY / dwScreenHeight);\n\t\tRetRect.bottom = (lpRect->bottom * iSizY / dwScreenHeight);\n\t}\n\telse{\n\t\tRetRect.left = 0;\n\t\tRetRect.right = iSizX;\n\t\tRetRect.top = 0;\n\t\tRetRect.bottom = iSizY;\n\t}\n\treturn RetRect;\n}\n\nvoid dxwCore::MapClient(LPRECT rect)\n{\n\trect->left= ((rect->left * iSizX)+(dwScreenWidth >> 1)) / (int)dwScreenWidth;\n\trect->top= ((rect->top * iSizY)+(dwScreenHeight >> 1)) / (int)dwScreenHeight;\n\trect->right= ((rect->right * iSizX)+(dwScreenWidth >> 1)) / (int)dwScreenWidth;\n\trect->bottom= ((rect->bottom * iSizY)+(dwScreenHeight >> 1)) / (int)dwScreenHeight;\n}\n\nvoid dxwCore::MapClient(int *nXDest, int *nYDest, int *nWDest, int *nHDest)\n{\n\t*nXDest= ((*nXDest * iSizX)+(dwScreenWidth >> 1)) / (int)dwScreenWidth;\n\t*nYDest= ((*nYDest * iSizY)+(dwScreenHeight >> 1)) / (int)dwScreenHeight;\n\t*nWDest= ((*nWDest * iSizX)+(dwScreenWidth >> 1)) / (int)dwScreenWidth;\n\t*nHDest= ((*nHDest * iSizY)+(dwScreenHeight >> 1)) / (int)dwScreenHeight;\n}\n\nvoid dxwCore::MapClient(LPPOINT lppoint)\n{\n\tlppoint->x= ((lppoint->x * iSizX)+(dwScreenWidth >> 1)) / (int)dwScreenWidth;\n\tlppoint->y= ((lppoint->y * iSizY)+(dwScreenHeight >> 1)) / (int)dwScreenHeight;\n}\n\nvoid dxwCore::MapClient(int *nXDest, int *nYDest)\n{\n\t*nXDest= ((*nXDest * iSizX)+(dwScreenWidth >> 1)) / (int)dwScreenWidth;\n\t*nYDest= ((*nYDest * iSizY)+(dwScreenHeight >> 1)) / (int)dwScreenHeight;\n}\n\n// UnmapWindow: transforms the window real coordinates of the real desktop into virtual ones\n\nvoid dxwCore::UnmapWindow(LPRECT rect)\n{\n\tif(iSizX && iSizY) {\n\t\trect->left= ((rect->left  - iPosX) * (int)dwScreenWidth) / iSizX;\n\t\trect->top= ((rect->top  - iPosY) * (int)dwScreenHeight) / iSizY;\n\t\trect->right= ((rect->right  - iPosX) * (int)dwScreenWidth) / iSizX;\n\t\trect->bottom= ((rect->bottom  - iPosY) * (int)dwScreenHeight) / iSizY;\n\t}\n}\n\nvoid dxwCore::UnmapWindow(LPPOINT point)\n{\n\tif(iSizX && iSizY) {\n\t\tpoint->x= ((point->x  - iPosX) * (int)dwScreenWidth) / iSizX;\n\t\tpoint->y= ((point->y  - iPosY) * (int)dwScreenHeight) / iSizY;\n\t}\n}\n\n// UnmapClient: transforms the client real coordinates of the real desktop into virtual ones\n\nvoid dxwCore::UnmapClient(LPPOINT lppoint)\n{\n\tif(iSizX && iSizY) {\n\t\tlppoint->x = ((lppoint->x * (int)dwScreenWidth) + (iSizX >> 1)) / iSizX;\n\t\tlppoint->y = ((lppoint->y * (int)dwScreenHeight) + (iSizY >> 1)) / iSizY;\n\t}\n}\n\nvoid dxwCore::UnmapClient(int *nXDest, int *nYDest)\n{\n\tif(iSizX && iSizY) {\n\t\t*nXDest = ((*nXDest * (int)dwScreenWidth) + (iSizX >> 1)) / iSizX;\n\t\t*nYDest = ((*nYDest * (int)dwScreenHeight) + (iSizY >> 1)) / iSizY;\n\t}\n}\n\nvoid dxwCore::UnmapClient(int *nXDest, int *nYDest, int *nWidth, int *nHeight)\n{\n\tif(iSizX && iSizY) {\n\t\t*nXDest = ((*nXDest * (int)dwScreenWidth) + (iSizX >> 1)) / iSizX;\n\t\t*nYDest = ((*nYDest * (int)dwScreenHeight) + (iSizY >> 1)) / iSizY;\n\t\t*nWidth = ((*nWidth * (int)dwScreenWidth) + (iSizX >> 1)) / iSizX;\n\t\t*nHeight = ((*nHeight * (int)dwScreenHeight) + (iSizY >> 1)) / iSizY;\n\t}\n}\n\nvoid dxwCore::UnmapClient(LPRECT lpRect)\n{\n\tif(iSizX && iSizY) {\n\t\tlpRect->left = ((lpRect->left * (int)dwScreenWidth) + (iSizX >> 1)) / iSizX;\n\t\tlpRect->right = ((lpRect->right * (int)dwScreenWidth) + (iSizX >> 1)) / iSizX;\n\t\tlpRect->top = ((lpRect->top * (int)dwScreenHeight) + (iSizY >> 1)) / iSizY;\n\t\tlpRect->bottom = ((lpRect->bottom * (int)dwScreenHeight) + (iSizY >> 1)) / iSizY;\n\t}\n}\n\n// GetMonitorWorkarea: retrieves the desktop coordinates of the whole desktop (id == -1) or of a given monitor (id >= 0)\n// returning either the whole desktop area (WorkArea == FALSE) or the workarea (WorkArea == TRUE)\n\n// callback function called by EnumDisplayMonitors for each enabled monitor \n\nstruct ENUM_DISP_ARG { \n\tint TargetId; \n\tint MonId; \n\tRECT rect;\n\tHMONITOR hMon;\n};\n\nBOOL CALLBACK EnumDispProc(HMONITOR hMon, HDC dcMon, RECT* pRcMon, LPARAM lParam) \n{ \n\tENUM_DISP_ARG* pArg = reinterpret_cast<ENUM_DISP_ARG*>(lParam); \n\tif (pArg->MonId >= pArg->TargetId){\n\t\tpArg->rect = *pRcMon; \n\t\tpArg->hMon = hMon;\n\t\treturn FALSE;\n\t}\n\telse {\n\t\tpArg->MonId++; \n\t\treturn TRUE; \n\t}\n}\n\nvoid dxwCore::GetMonitorWorkarea(LPRECT lpRect, BOOL WorkArea)\n{\n\tif(MonitorId == -1) { // whole desktop from all monitors\n\t\tif(WorkArea) {\n\t\t\t(*pSystemParametersInfoA)(SPI_GETWORKAREA, NULL, lpRect, 0);\n\t\t}\n\t\telse {\n\t\t\t(*pGetClientRect)((*pGetDesktopWindow)(), lpRect);\n\t\t}\n\t\treturn;\n\t}\n\n\tMONITORINFO mi;\n\tmemset((void *)&mi, 0, sizeof(MONITORINFO));\n\tmi.cbSize = sizeof(MONITORINFO);\n\tENUM_DISP_ARG arg = { 0 };\n\targ.TargetId = MonitorId; // monitor to look for\n\tEnumDisplayMonitors(0, 0, EnumDispProc, reinterpret_cast<LPARAM>(&arg));\n\n\tif(GetMonitorInfo(arg.hMon, &mi)){\n\t\t*lpRect = WorkArea ? mi.rcWork : mi.rcMonitor; \n\t}\n\telse{\n\t\t// recurse with undefined id\n\t\tMonitorId = -1;\n\t\tGetMonitorWorkarea(lpRect, WorkArea);\n\t}\n\tOutTraceB(\"dxwCore::GetMonitorWorkarea: id=%d workarea=%x rect=(%d,%d)-(%d,%d)\\n\",\n\t\tMonitorId, WorkArea, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n}\n\n// v.2.1.80: unified positioning logic into CalculateWindowPos routine\n// now taking in account for window menus (see \"Alien Cabal\")\n// sets the correct values in wp LPWINDOWPOS structure, but doesn't do any window update\n\nvoid dxwCore::CalculateWindowPos(HWND hwnd, DWORD width, DWORD height, LPWINDOWPOS wp)\n{\n\tRECT rect, desktop;\n\tDWORD dwStyle, dwExStyle;\n\tint MaxX, MaxY;\n\tHMENU hMenu;\n\n\tswitch(Coordinates){\n\tcase DXW_DESKTOP_CENTER:\n\t\tif(bAutoScale){\n\t\t\tMaxX = GetScreenWidth();\n\t\t\tMaxY = GetScreenHeight();\n\t\t\tif(dxw.dwFlags4 & BILINEAR2XFILTER) MaxX <<= 1; // double\n\t\t\tif(dxw.dwFlags4 & BILINEAR2XFILTER) MaxY <<= 1; // double\n\t\t}\n\t\telse{\n\t\t\tMaxX = iSizX;\n\t\t\tMaxY = iSizY;\n\t\t}\n\t\tif (!MaxX) {\n\t\t\tMaxX = width;\n\t\t\tif(dxw.dwFlags4 & BILINEAR2XFILTER) MaxX <<= 1; // double\n\t\t}\n\t\tif (!MaxY) {\n\t\t\tMaxY = height;\n\t\t\tif(dxw.dwFlags4 & BILINEAR2XFILTER) MaxY <<= 1; // double\n\t\t}\n\t\tdxw.GetMonitorWorkarea(&desktop, TRUE);\n\t\trect.left =  (desktop.right + desktop.left - MaxX) / 2; // v2.03.89 - fixed\n\t\trect.top = (desktop.bottom + desktop.top - MaxY) / 2;\t// v2.03.89 - fixed\n\t\trect.right = rect.left + MaxX;\n\t\trect.bottom = rect.top + MaxY; //v2.02.09\n\t\t// fixed ....\n\t\tif(rect.left < desktop.left)\t\trect.left = desktop.left;\n\t\tif(rect.top < desktop.top)\t\t\trect.top = desktop.top;\n\t\tif(rect.bottom > desktop.bottom)\trect.bottom = desktop.bottom;\n\t\tif(rect.right > desktop.right)\t\trect.right = desktop.right;\n\t\tbreak;\n\tcase DXW_DESKTOP_WORKAREA:\n\t\tdxw.GetMonitorWorkarea(&rect, TRUE);\n\t\tif(dxw.dwFlags2 & KEEPASPECTRATIO) dxw.FixWorkarea(&rect);\n\t\tbreak;\n\tcase DXW_DESKTOP_FULL:\n\t\tdxw.GetMonitorWorkarea(&rect, FALSE);\n\t\tif(dxw.dwFlags2 & KEEPASPECTRATIO) dxw.FixWorkarea(&rect);\n\t\tbreak;\n\tcase DXW_SET_COORDINATES:\n\tdefault:\n\t\t// set size\n\t\tif(bAutoScale){\n\t\t\tMaxX = GetScreenWidth();\n\t\t\tMaxY = GetScreenHeight();\n\t\t\tif(dxw.dwFlags4 & BILINEAR2XFILTER) MaxX <<= 1; // double\n\t\t\tif(dxw.dwFlags4 & BILINEAR2XFILTER) MaxY <<= 1; // double\n\t\t}\n\t\telse{\n\t\t\tif((dxw.dwFlags2 & LOCKEDSIZE) || (dxw.dwFlags7 & ANCHORED)){\n\t\t\t\tiSizX = iSiz0X;\n\t\t\t\tiSizY = iSiz0Y;\n\t\t\t}\n\t\t\tMaxX = iSizX;\n\t\t\tMaxY = iSizY;\n\t\t}\n\t\tif (!MaxX) {\n\t\t\tMaxX = width;\n\t\t\tif(dxw.dwFlags4 & BILINEAR2XFILTER) MaxX <<= 1; // double\n\t\t}\n\t\tif (!MaxY) {\n\t\t\tMaxY = height;\n\t\t\tif(dxw.dwFlags4 & BILINEAR2XFILTER) MaxY <<= 1; // double\n\t\t}\n\t\t// set pos\n\t\tif(dxw.dwFlags7 & ANCHORED){\n\t\t\tiPosX = iPos0X;\n\t\t\tiPosY = iPos0Y;\n\t\t}\n\t\trect.left = iPosX;\n\t\trect.top = iPosY; //v2.02.09\n\t\trect.right = iPosX + MaxX;\n\t\trect.bottom = iPosY + MaxY; //v2.02.09\n\t\tbreak;\n\t}\n\tOutTraceB(\"dxwCore::CalculateWindowPos: coord=%d client rect=(%d,%d)-(%d,%d)\\n\",\n\t\tCoordinates, rect.left, rect.top, rect.right, rect.bottom);\n\n\tif(hwnd){\n\t\tRECT UnmappedRect;\n\t\tUnmappedRect=rect;\n\t\tdwStyle=(*pGetWindowLong)(hwnd, GWL_STYLE);\n\t\tdwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE);\n\t\t// BEWARE: from MSDN -  If the window is a child window, the return value is undefined. \n\t\thMenu = (dwStyle & WS_CHILD) ? NULL : GetMenu(hwnd);\t\n\t\t(*pAdjustWindowRectEx)(&rect, dwStyle, (hMenu!=NULL), dwExStyle);\n\t\t// if (hMenu) __try {CloseHandle(hMenu);} __except(EXCEPTION_EXECUTE_HANDLER){};\n\t\tswitch(dxw.Coordinates){\n\t\tcase DXW_DESKTOP_WORKAREA:\n\t\tcase DXW_DESKTOP_FULL:\n\t\t\t// if there's a menu, reduce height to fit area\n\t\t\tif(rect.top != UnmappedRect.top){\n\t\t\t\trect.bottom = rect.bottom - UnmappedRect.top + rect.top;\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\n\t\t// shift down-right so that the border is visible\n\t\tif(rect.left < dxw.VirtualDesktop.left){\n\t\t\trect.right = dxw.VirtualDesktop.left - rect.left + rect.right;\n\t\t\trect.left = dxw.VirtualDesktop.left;\n\t\t}\n\t\tif(rect.top < dxw.VirtualDesktop.top){\n\t\t\trect.bottom = dxw.VirtualDesktop.top - rect.top + rect.bottom;\n\t\t\trect.top = dxw.VirtualDesktop.top;\n\t\t}\n\n\t\t// shift up-left so that the windows doesn't exceed on the other side\n\t\tif(rect.right > dxw.VirtualDesktop.right){\n\t\t\trect.left = dxw.VirtualDesktop.right - rect.right + rect.left;\n\t\t\trect.right = dxw.VirtualDesktop.right;\n\t\t}\n\t\tif(rect.bottom > dxw.VirtualDesktop.bottom){\n\t\t\trect.top = dxw.VirtualDesktop.bottom - rect.bottom + rect.top;\n\t\t\trect.bottom = dxw.VirtualDesktop.bottom;\n\t\t}\n\t}\n\n\tOutTraceB(\"dxwCore::CalculateWindowPos: coord=%d window rect=(%d,%d)-(%d,%d)\\n\",\n\tCoordinates, rect.left, rect.top, rect.right, rect.bottom);\n\n\t// update the arguments for the window creation\n\twp->x=rect.left;\n\twp->y=rect.top;\n\twp->cx=rect.right-rect.left;\n\twp->cy=rect.bottom-rect.top;\n}\n\nvoid dxwCore::AutoScale()\n{\n\tWINDOWPOS wp;\n\tif(!dxw.Windowize) return;\n\tCalculateWindowPos(hWnd, dwScreenWidth, dwScreenHeight, &wp);\n\tOutTrace(\"AutoScale: new pos=(%d,%d) size=(%dx%d)\\n\", wp.x, wp.y, wp.cx, wp.cy);\n\tif(!(*pSetWindowPos)(hWnd, 0, wp.x, wp.y, wp.cx, wp.cy, 0)){\n\t\tOutTraceE(\"AutoScale: SetWindowPos ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t}\n\t// need to ShowWindow(SW_SHOW) to make new coordinates active\n\t(*pShowWindow)(hWnd, SW_SHOW);\n\tUpdateDesktopCoordinates();\n}"
  },
  {
    "path": "dll/dxwcapsdb.cpp",
    "content": "/* ------------------------------------------------------------------ */\n// DirectDraw Objects capability DB\n/* ------------------------------------------------------------------ */\n\n#define _CRT_SECURE_NO_WARNINGS\n\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n\n#if 0\n// uncomment (#if 1) to activate caps db tracing\n#define DXW_SURFACE_STACK_TRACING\n#define OutTraceSDB OutTrace\n#include \"dxhelper.h\"\n#endif\n\ndxwCapsDB::dxwCapsDB()\n{\n\tmemset(CapsDB, 0, sizeof(CapsDB));\n}\n\ndxwCapsDB::~dxwCapsDB()\n{\n}\n\nvoid dxwCapsDB::PushCaps(LPDIRECTDRAWSURFACE ps, DWORD dwCaps)\n{\n\tint i;\n\tCapsDB_Type *e;\n#ifdef DXW_SURFACE_STACK_TRACING\n\tOutTraceSDB(\">>> CAPSDB MARK: lpdds=%x caps=%x(%s)\\n\", ps, dwCaps, ExplainDDSCaps(dwCaps));\n#endif\n\tfor (i=0;i<DDSQLEN;i++) {\n\t\te=&CapsDB[i];\n\t\tif ((e->lpdds==ps) || (e->lpdds==(DWORD)0)) break; // got matching entry or end of the list\n\t}\n\tif(i == DDSQLEN) {\n\t\t//MessageBox(0, \"Caps stack is full\", \"DxWnd SurfaceList\", MB_OK | MB_ICONEXCLAMATION);\n\t\t//return;\n\t\tfor(int j=0;j<DDSQLEN-1;j++) CapsDB[j]=CapsDB[j+1]; // scale down the whole stack one entry\n\t\te=&CapsDB[DDSQLEN-1];\n\t}\n\te->lpdds=ps;\n\te->dwCaps = dwCaps;\n}\n\t\nDWORD dxwCapsDB::GetCaps(LPDIRECTDRAWSURFACE ps)\n{\n\tint i;\n\t// look for entry\n\tfor (i=0;i<DDSQLEN;i++) {\n\t\tif (CapsDB[i].lpdds==0) return 0;\n\t\tif (CapsDB[i].lpdds==ps) break; \n\t}\n\t// if found, return the caps\n\tif (CapsDB[i].lpdds==ps){\n#ifdef DXW_SURFACE_STACK_TRACING\n\t\tOutTraceSDB(\">>> CAPSDB GETCAPS: i=%d lpdds=%x caps=%x(%s)\\n\", \n\t\t\ti, ps, CapsDB[i].dwCaps, ExplainDDSCaps(CapsDB[i].dwCaps));\n#endif\n\t\treturn CapsDB[i].dwCaps;\n\t}\n\treturn 0;\n}\n\n"
  },
  {
    "path": "dll/dxwcore.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n#define SYSLIBNAMES_DEFINES\n\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhelper.h\"\n#include \"resource.h\"\n#include \"hddraw.h\"\n#include \"d3d9.h\"\nextern GetDC_Type pGetDCMethod();\nextern ReleaseDC_Type pReleaseDC1;\nextern HandleDDThreadLock_Type pReleaseDDThreadLock;\n\n/* ------------------------------------------------------------------ */\n// Internal function pointers\n/* ------------------------------------------------------------------ */\n\ntypedef DWORD (*TimeShifter_Type)(DWORD, int);\ntypedef LARGE_INTEGER (*TimeShifter64_Type)(LARGE_INTEGER, int);\n\nTimeShifter_Type pTimeShifter;\nTimeShifter64_Type pTimeShifter64;\n\nstatic DWORD TimeShifterFine(DWORD, int);\nstatic LARGE_INTEGER TimeShifter64Fine(LARGE_INTEGER, int);\nstatic DWORD TimeShifterCoarse(DWORD, int);\nstatic LARGE_INTEGER TimeShifter64Coarse(LARGE_INTEGER, int);\n\n/* ------------------------------------------------------------------ */\n// Constructor, destructor, initialization....\n/* ------------------------------------------------------------------ */\n\ndxwCore::dxwCore()\n{\n\t// initialization stuff ....\n\tFullScreen=FALSE;\n\tSethWnd(NULL);\n\tSetScreenSize();\n\tdwMaxDDVersion=7;\n\thParentWnd = 0;\n\thChildWnd = 0;\n\tbActive = TRUE;\n\tbDInputAbs = 0;\n\tTimeShift = 0;\n\tResetEmulatedDC();\n\tMustShowOverlay=FALSE;\n\tTimerEvent.dwTimerType = TIMER_TYPE_NONE;\n\t// initialization of default vsync emulation array\n\tiRefreshDelays[0]=16;\n\tiRefreshDelays[1]=17;\n\tiRefreshDelayCount=2;\n\tTimeFreeze = FALSE;\n\tdwScreenWidth = 0;\n\tdwScreenHeight = 0;\n}\n\ndxwCore::~dxwCore()\n{\n}\n\nvoid dxwCore::SetFullScreen(BOOL fs, int line) \n{\n\tOutTraceDW(\"SetFullScreen: %s at %d\\n\", fs?\"FULLSCREEN\":\"WINDOWED\", line);\n\tFullScreen=fs;\n}\n\nvoid dxwCore::SetFullScreen(BOOL fs) \n{\n\tif(dxw.dwFlags3 & FULLSCREENONLY) fs=TRUE;\n\tOutTraceDW(\"SetFullScreen: %s\\n\", fs?\"FULLSCREEN\":\"WINDOWED\");\n\tFullScreen=fs;\n}\n\nBOOL dxwCore::IsFullScreen()\n{\n\treturn (Windowize && FullScreen);\n}\n\nBOOL dxwCore::IsToRemap(HDC hdc)\n{\n\tif(!hdc) return TRUE;\n\treturn (Windowize && FullScreen && (OBJ_DC == (*pGetObjectType)(hdc)));\n}\n\nvoid dxwCore::InitTarget(TARGETMAP *target)\n{\n\tdwFlags1 = target->flags;\n\tdwFlags2 = target->flags2;\n\tdwFlags3 = target->flags3;\n\tdwFlags4 = target->flags4;\n\tdwFlags5 = target->flags5;\n\tdwFlags6 = target->flags6;\n\tdwFlags7 = target->flags7;\n\tdwFlags8 = target->flags8;\n\tdwFlags9 = target->flags9;\n\tdwFlags10= target->flags10;\n\tdwTFlags = target->tflags;\n\tWindowize = (dwFlags2 & WINDOWIZE) ? TRUE : FALSE;\n\tIsVisible = TRUE;\n\tif(dwFlags3 & FULLSCREENONLY) FullScreen=TRUE;\n\tgsModules = target->module;\n\tMaxFPS = target->MaxFPS;\n\tCustomOpenGLLib = target->OpenGLLib;\n\tif(!strlen(CustomOpenGLLib)) CustomOpenGLLib=NULL;\n\t// bounds control\n\tdwTargetDDVersion = target->dxversion;\n\tMaxDdrawInterface = target->MaxDdrawInterface;\n\tif(dwTargetDDVersion<0) dwTargetDDVersion=0;\n\tif(dwTargetDDVersion>12) dwTargetDDVersion=12;\n\tTimeShift = target->InitTS;\n\tif(TimeShift < -8) TimeShift = -8;\n\tif(TimeShift >  8) TimeShift =  8;\n\tFakeVersionId = target->FakeVersionId;\n\tMaxScreenRes = target->MaxScreenRes;\n\tCoordinates = target->coordinates;\n\tswitch(target->SwapEffect){\n\t\tcase 0: SwapEffect = D3DSWAPEFFECT_DISCARD; break;\n\t\tcase 1: SwapEffect = D3DSWAPEFFECT_FLIP; break;\n\t\tcase 2: SwapEffect = D3DSWAPEFFECT_COPY; break;\n\t\tcase 3: SwapEffect = D3DSWAPEFFECT_OVERLAY; break;\n\t\tcase 4: SwapEffect = D3DSWAPEFFECT_FLIPEX; break;\n\t}\n\tMustShowOverlay=((dwFlags2 & SHOWFPSOVERLAY) || (dwFlags4 & SHOWTIMESTRETCH));\n\tif(dwFlags4 & FINETIMING){\n\t\tpTimeShifter = TimeShifterFine;\n\t\tpTimeShifter64 = TimeShifter64Fine;\n\t}\n\telse{\n\t\tpTimeShifter = TimeShifterCoarse;\n\t\tpTimeShifter64 = TimeShifter64Coarse;\n\t}\n\tiSiz0X = iSizX = target->sizx;\n\tiSiz0Y = iSizY = target->sizy;\n\tiPos0X = iPosX = target->posx;\n\tiPos0Y = iPosY = target->posy;\n\tiMaxW = target->resw;\n\tiMaxH = target->resh;\n\t// Aspect Ratio from window size, or traditional 4:3 by default\n\tiRatioX = iSizX ? iSizX : 800;\n\tiRatioY = iSizY ? iSizY : 600;\n\t// AutoScale: when iSizX == iSizY == 0, size is set to current screen resolution\n\tbAutoScale = !(iSizX && iSizY);\n\t// guessed initial screen resolution\n\t// v2.04.01.fx4: set default value ONLY when zero, because some program may initialize\n\t// them before creating a window that triggers second initialization, like \"Spearhead\"\n\t// through the Smack32 SmackSetSystemRes call\n\tif(!dwScreenWidth) dwScreenWidth = 800;\n\tif(!dwScreenHeight) dwScreenHeight = 600;\n\n\tSlowRatio = target->SlowRatio;\n\tScanLine = target->ScanLine;\n\n\tGDIEmulationMode = GDIMODE_NONE; // default\n\tif (dwFlags2 & GDISTRETCHED)\tGDIEmulationMode = GDIMODE_STRETCHED;  \n\tif (dwFlags3 & GDIEMULATEDC)\tGDIEmulationMode = GDIMODE_EMULATED; \n\tif (dwFlags6 & SHAREDDC)\t\tGDIEmulationMode = GDIMODE_SHAREDDC; \n\n\tif(dwFlags5 & HYBRIDMODE) {\n\t\t// special mode settings ....\n\t\tdwFlags1 |= EMULATESURFACE;\n\t\tdwFlags2 |= SETCOMPATIBILITY;\n\t\tdwFlags5 &= ~(BILINEARFILTER | AEROBOOST); \n\t}\n\tif(dwFlags5 & GDIMODE) dwFlags1 |= EMULATESURFACE;\n\tif(dwFlags5 & STRESSRESOURCES) dwFlags5 |= LIMITRESOURCES;\n\tIsEmulated = (dwFlags1 & (EMULATESURFACE|EMULATEBUFFER)) ? TRUE : FALSE; // includes also the HYBRIDMODE and GDIMODE cases ....\n\n\textern GetWindowLong_Type pGetWindowLong;\n\textern SetWindowLong_Type pSetWindowLong;\n\t// made before hooking !!!\n\tpGetWindowLong = (dwFlags5 & ANSIWIDE) ? GetWindowLongW : GetWindowLongA;\n\tpSetWindowLong = (dwFlags5 & ANSIWIDE) ? SetWindowLongW : SetWindowLongA;\n\n\t// hint system\n\tbHintActive = (dwFlags7 & SHOWHINTS) ? TRUE : FALSE;\n\n\tMonitorId = target->monitorid;\n\n\t// if specified, set the custom initial resolution\n\tif(dxw.dwFlags7 & INITIALRES) SetScreenSize(target->resw, target->resh);\n}\n\nvoid dxwCore::SetScreenSize(void) \n{\n\t// if specified, use values registered in InitTarget\n\tif(dxw.dwFlags7 & INITIALRES) return;\n\n\tif(dxw.Windowize){\n\t\tSetScreenSize(800, 600); // set to default screen resolution\n\t}\n\telse{\n\t\tint sizx, sizy;\n\t\tsizx = GetSystemMetrics(SM_CXSCREEN);\n\t\tsizy = GetSystemMetrics(SM_CYSCREEN);\n\t\tSetScreenSize(sizx, sizy);\n\t}\n}\n\nvoid dxwCore::SetScreenSize(int x, int y) \n{\n\tDXWNDSTATUS *p;\n\tOutTraceDW(\"DXWND: set screen size=(%d,%d)\\n\", x, y);\n\tif(x) dwScreenWidth=x; \n\tif(y) dwScreenHeight=y;\n\tp = GetHookInfo();\n\tif(p) {\n\t\tp->Width = (short)dwScreenWidth;\n\t\tp->Height = (short)dwScreenHeight;\n\t}\n\tif(dwFlags4 & LIMITSCREENRES){\n\t\t#define HUGE 100000\n\t\tDWORD maxw, maxh;\n\t\tmaxw=HUGE; maxh=HUGE;\n\t\tswitch(dxw.MaxScreenRes){\n\t\t\tcase DXW_LIMIT_320x200: maxw=320; maxh=200; break;\n\t\t\tcase DXW_LIMIT_400x300: maxw=400; maxh=300; break;\n\t\t\tcase DXW_LIMIT_640x480: maxw=640; maxh=480; break;\n\t\t\tcase DXW_LIMIT_800x600: maxw=800; maxh=600; break;\n\t\t\tcase DXW_LIMIT_1024x768: maxw=1024; maxh=768; break;\n\t\t\tcase DXW_LIMIT_1280x960: maxw=1280; maxh=960; break;\n\t\t}\n\t\tif(((DWORD)p->Width > maxw) || ((DWORD)p->Height > maxh)){\n\t\t\tOutTraceDW(\"DXWND: limit device size=(%d,%d)\\n\", maxw, maxh);\n\t\t\t// v2.02.95 setting new virtual desktop size \n\t\t\tdwScreenWidth = p->Width = (short)maxw;\n\t\t\tdwScreenHeight= p->Height = (short)maxh;\n\t\t}\n\t}\n\tif(dxw.dwFlags7 & MAXIMUMRES){\n\t\tif(((long)p->Width > dxw.iMaxW) || ((long)p->Height > dxw.iMaxH)){\n\t\t\tOutTraceDW(\"DXWND: limit device size=(%d,%d)\\n\", dxw.iMaxW, dxw.iMaxH);\n\t\t\t// v2.03.90 setting new virtual desktop size \n\t\t\tdwScreenWidth = p->Width = (short)dxw.iMaxW;\n\t\t\tdwScreenHeight= p->Height = (short)dxw.iMaxH;\n\t\t}\n\t}\n}\n\nvoid dxwCore::DumpDesktopStatus()\n{\n\tHDC hDC;\n\tHWND hDesktop;\n\tRECT desktop;\n\tPIXELFORMATDESCRIPTOR pfd;\n\tint  iPixelFormat, iBPP;\n\tchar ColorMask[32+1]; \n\n\t// get the current pixel format index\n\thDesktop = GetDesktopWindow();\n\thDC = GetDC(hDesktop);\n\t::GetWindowRect(hDesktop, &desktop);\n\tiBPP = GetDeviceCaps(hDC, BITSPIXEL);\n\tiPixelFormat = GetPixelFormat(hDC); \n\tif(!iPixelFormat) iPixelFormat=1; // why returns 0???\n\t// obtain a detailed description of that pixel format  \n\tif(!DescribePixelFormat(hDC, iPixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd)){\n\t\tOutTrace(\"DescribePixelFormat ERROR: err=%d\\n\", GetLastError());\n\t\treturn;\n\t}\n\n\tmemset(ColorMask, ' ', 32); // blank fill\n\tColorMask[32] = 0; // terminate\n\tif ((pfd.cRedShift+pfd.cRedBits <= 32) &&\n\t\t(pfd.cGreenShift+pfd.cGreenBits <= 32) &&\n\t\t(pfd.cBlueShift+pfd.cBlueBits <= 32) &&\n\t\t(pfd.cAlphaShift+pfd.cAlphaBits <= 32)){ // everything within the 32 bits ...\n\t\tfor (int i=pfd.cRedShift; i<pfd.cRedShift+pfd.cRedBits; i++) ColorMask[i]='R';\n\t\tfor (int i=pfd.cGreenShift; i<pfd.cGreenShift+pfd.cGreenBits; i++) ColorMask[i]='G';\n\t\tfor (int i=pfd.cBlueShift; i<pfd.cBlueShift+pfd.cBlueBits; i++) ColorMask[i]='B';\n\t\tfor (int i=pfd.cAlphaShift; i<pfd.cAlphaShift+pfd.cAlphaBits; i++) ColorMask[i]='A';\n\t}\n\telse\n\t\tstrcpy(ColorMask, \"???\");\n\tOutTrace( \n\t\t\"Desktop\"\n\t\t\"\\tSize (W x H)=(%d x %d)\\n\" \n\t\t\"\\tColor depth = %d (color bits = %d)\\n\"\n\t\t\"\\tPixel format = %d\\n\"\n\t\t\"\\tColor mask  (RGBA)= (%d,%d,%d,%d)\\n\" \n\t\t\"\\tColor shift (RGBA)= (%d,%d,%d,%d)\\n\"\n\t\t\"\\tColor mask = \\\"%s\\\"\\n\"\n\t\t, \n\t\tdesktop.right, desktop.bottom, \n\t\tiBPP, pfd.cColorBits,\n\t\tiPixelFormat,\n\t\tpfd.cRedBits, pfd.cGreenBits, pfd.cBlueBits, pfd.cAlphaBits,\n\t\tpfd.cRedShift, pfd.cGreenShift, pfd.cBlueShift, pfd.cAlphaShift,\n\t\tColorMask\n\t);\n}\n\nvoid dxwCore::InitWindowPos(int x, int y, int w, int h)\n{\n\tiPosX = x;\n\tiPosY = y; //v2.02.09\n\tiSizX = w;\n\tiSizY = h;\n}\n\nBOOL dxwCore::IsDesktop(HWND hwnd)\n{\n\treturn (\n\t\t(hwnd == 0)\n\t\t||\n\t\t(hwnd == (*pGetDesktopWindow)())\n\t\t||\n\t\t(hwnd == hWnd)\n\t\t);\n}\n\nBOOL dxwCore::IsRealDesktop(HWND hwnd)\n{\n\treturn (\n\t\t(hwnd == 0)\n\t\t||\n\t\t(hwnd == (*pGetDesktopWindow)())\n\t\t);\n}\n\n// v2.1.93: FixCursorPos completely revised to introduce a clipping tolerance in\n// clipping regions as well as in normal operations\n\n#define CLIP_TOLERANCE 4\n\nPOINT dxwCore::FixCursorPos(POINT prev)\n{\n\tPOINT curr;\n\tRECT rect;\n\textern LPRECT lpClipRegion;\n\tstatic BOOL IsWithin = TRUE;\n\tstatic POINT LastPos;\n\n\tcurr=prev;\n\n\t// scale mouse coordinates\n\t// remember: rect from GetClientRect always start at 0,0!\n\tif(dxw.dwFlags1 & MODIFYMOUSE){\n\t\tint w, h; // width, height and border\n\n\t\tif (!(*pGetClientRect)(hWnd, &rect)) { // v2.02.30: always use desktop win\n\t\t\tOutTraceDW(\"GetClientRect ERROR %d at %d\\n\", GetLastError(),__LINE__);\n\t\t\tcurr.x = curr.y = 0;\n\t\t}\n\t\tw = rect.right - rect.left;\n\t\th = rect.bottom - rect.top;\n\n\t\tif(dxw.dwFlags4 & RELEASEMOUSE){\n\t\t\tif ((curr.x < 0) || (curr.y < 0) || (curr.x > w) || (curr.y > h)){\n\t\t\t\tif(IsWithin){\n\t\t\t\t\tint RestX, RestY;\n\t\t\t\t\tRestX = w ? ((CLIP_TOLERANCE * w) / dxw.GetScreenWidth()) + 2 : CLIP_TOLERANCE + 2;\n\t\t\t\t\tRestY = h ? ((CLIP_TOLERANCE * h) / dxw.GetScreenHeight()) + 2 : CLIP_TOLERANCE + 2;\n\t\t\t\t\tif (curr.x < 0) curr.x = RestX;\n\t\t\t\t\tif (curr.y < 0) curr.y = RestY;\n\t\t\t\t\tif (curr.x > w) curr.x = w - RestX;\n\t\t\t\t\tif (curr.y > h) curr.y = h - RestY;\n\t\t\t\t\tLastPos = curr;\n\t\t\t\t\tIsWithin = FALSE;\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tcurr = LastPos;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse{\n\t\t\t\tIsWithin = TRUE;\n\t\t\t\tLastPos = curr;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (curr.x < 0) curr.x = 0;\n\t\t\tif (curr.y < 0) curr.y = 0;\n\t\t\tif (curr.x > w) curr.x = w;\n\t\t\tif (curr.y > h) curr.y = h;\n\t\t}\n\n\t\tif (w) curr.x = (curr.x * dxw.GetScreenWidth()) / w;\n\t\tif (h) curr.y = (curr.y * dxw.GetScreenHeight()) / h;\n\t}\n\n\tif((dxw.dwFlags1 & DISABLECLIPPING) && lpClipRegion){\n\t\t// v2.1.93:\n\t\t// in clipping mode, avoid the cursor position to lay outside the valid rect\n\t\t// note 1: the rect follow the convention and valid coord lay between left to righ-1,\n\t\t// top to bottom-1\n\t\t// note 2: CLIP_TOLERANCE is meant to handle possible integer divide tolerance errors\n\t\t// that may prevent reaching the clip rect borders. The smaller you shrink the window, \n\t\t// the bigger tolerance is required\n\t\tif (curr.x < lpClipRegion->left+CLIP_TOLERANCE) curr.x=lpClipRegion->left;\n\t\tif (curr.y < lpClipRegion->top+CLIP_TOLERANCE) curr.y=lpClipRegion->top;\n\t\tif (curr.x >= lpClipRegion->right-CLIP_TOLERANCE) curr.x=lpClipRegion->right-1;\n\t\tif (curr.y >= lpClipRegion->bottom-CLIP_TOLERANCE) curr.y=lpClipRegion->bottom-1;\n\t}\n\telse{\n\t\tif (curr.x < CLIP_TOLERANCE) curr.x=0;\n\t\tif (curr.y < CLIP_TOLERANCE) curr.y=0;\n\t\tif (curr.x >= (LONG)dxw.GetScreenWidth()-CLIP_TOLERANCE) curr.x=dxw.GetScreenWidth()-1;\n\t\tif (curr.y >= (LONG)dxw.GetScreenHeight()-CLIP_TOLERANCE) curr.y=dxw.GetScreenHeight()-1;\n\t}\n\n\treturn curr;\n}\n\nPOINT dxwCore::ScreenToClient(POINT point)\n{\n\t// convert absolute screen coordinates to frame relative\n\tif (!(*pScreenToClient)(hWnd, &point)) {\n\t\tOutTraceE(\"ScreenToClient(%x) ERROR %d at %d\\n\", hWnd, GetLastError(), __LINE__);\n\t\tpoint.x =0; point.y=0;\n\t}\n\n\treturn point;\n}\n\nvoid dxwCore::FixNCHITCursorPos(LPPOINT lppoint)\n{\n\tRECT rect;\n\tPOINT point;\n\n\tpoint=*lppoint;\n\t(*pGetClientRect)(dxw.GethWnd(), &rect);\n\t(*pScreenToClient)(dxw.GethWnd(), &point);\n\n\tif (point.x < 0) return;\n\tif (point.y < 0) return;\n\tif (point.x > rect.right) return;\n\tif (point.y > rect.bottom) return;\n\n\t*lppoint=point;\n\tlppoint->x = (lppoint->x * dxw.GetScreenWidth()) / rect.right;\n\tlppoint->y = (lppoint->y * dxw.GetScreenHeight()) / rect.bottom;\n\tif(lppoint->x < CLIP_TOLERANCE) lppoint->x=0;\n\tif(lppoint->y < CLIP_TOLERANCE) lppoint->y=0;\n\tif(lppoint->x > (LONG)dxw.GetScreenWidth()-CLIP_TOLERANCE) lppoint->x=dxw.GetScreenWidth()-1;\n\tif(lppoint->y > (LONG)dxw.GetScreenHeight()-CLIP_TOLERANCE) lppoint->y=dxw.GetScreenHeight()-1;\n}\n\nvoid dxwCore::InitializeClipCursorState(void)\n{\n\tRECT cliprect;\n\tBOOL clipret;\n\tclipret = (*pGetClipCursor)(&cliprect);\n\t// v2.04.06: you always get a clipper area. To tell that the clipper is NOT active for your window \n\t// you can compare the clipper area with the whole desktop. If they are equivalent, you have no \n\t// clipper (or you are in fullscreen mode, but that is equivalent).\n\tClipCursorToggleState = TRUE;\n\tif (((cliprect.right - cliprect.left) == (*pGetSystemMetrics)(SM_CXVIRTUALSCREEN)) && \n\t\t((cliprect.bottom - cliprect.top) == (*pGetSystemMetrics)(SM_CYVIRTUALSCREEN))) \n\t\tClipCursorToggleState = FALSE;\n\tOutTraceDW(\"Initial clipper status=%x\\n\", ClipCursorToggleState);\n}\n\nBOOL dxwCore::IsClipCursorActive(void)\n{\n\tstatic BOOL bDoOnce = TRUE;\n\tif (bDoOnce) InitializeClipCursorState();\n\treturn ClipCursorToggleState;\n}\n\nvoid dxwCore::SetClipCursor()\n{\n\tRECT Rect;\n\tPOINT UpLeftCorner={0,0};\n\n\tOutTraceDW(\"SetClipCursor:\\n\");\n\tif (hWnd==NULL) {\n\t\tOutTraceDW(\"SetClipCursor: ASSERT hWnd==NULL\\n\");\n\t\treturn;\n\t}\n\n\t// check for errors to avoid setting random clip regions\n\t//if((*pIsWindowVisible)(hWnd)){\n\t//\tOutTraceE(\"SetClipCursor: not visible\\n\");\n\t//\treturn;\n\t//}\n\tif(!(*pGetClientRect)(hWnd, &Rect)){\n\t\tOutTraceE(\"SetClipCursor: GetClientRect ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t\treturn;\n\t}\n\tif((Rect.right == 0) && (Rect.bottom == 0)){ \n\t\tOutTraceE(\"SetClipCursor: GetClientRect returns zero sized rect at %d\\n\", __LINE__);\n\t\treturn;\n\t}\n\tif(!(*pClientToScreen)(hWnd, &UpLeftCorner)){\n\t\tOutTraceE(\"SetClipCursor: ClientToScreen ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t\treturn ;\n\t}\n\tRect.left+=UpLeftCorner.x;\n\tRect.right+=UpLeftCorner.x;\n\tRect.top+=UpLeftCorner.y;\n\tRect.bottom+=UpLeftCorner.y;\n\n\tif(dwFlags8 & CLIPMENU) {\n\t\t// v2.04.11:\n\t\t// if flag set and the window has a menu, extend the mouse clipper area to allow reaching the manu\n\t\t// implementation is partial: doesn't take in account multi-lines menues or menus positioned\n\t\t// not on the top of the window client area, but it seems good for the most cases.\n\t\tif(GetMenu(hWnd)) Rect.top -= (*pGetSystemMetrics)(SM_CYMENU);\n\t}\n\n\t(*pClipCursor)(NULL);\n\tif((*pClipCursor)(&Rect)){\n\t\tClipCursorToggleState = TRUE;\n\t}\n\telse{\n\t\tOutTraceE(\"SetClipCursor: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t}\n\n\tOutTraceDW(\"SetClipCursor: rect=(%d,%d)-(%d,%d)\\n\",\n\t\tRect.left, Rect.top, Rect.right, Rect.bottom);\n}\n\nvoid dxwCore::EraseClipCursor()\n{\n\tOutTraceDW(\"EraseClipCursor:\\n\");\n\t(*pClipCursor)(NULL);\n\tClipCursorToggleState = FALSE;\n}\n\nvoid dxwCore::SethWnd(HWND hwnd) \n{\n\tRECT WinRect;\n\tif(!pGetWindowRect) pGetWindowRect=::GetWindowRect;\n\tif(!pGDIGetDC)\t\tpGDIGetDC=::GetDC;\n\n\thWnd=hwnd; \n\thWndFPS=hwnd;\t\n\n\tif(hwnd){\n\t\t(*pGetWindowRect)(hwnd, &WinRect);\n\t\tOutTraceDW(\"SethWnd: setting main win=%x pos=(%d,%d)-(%d,%d)\\n\", \n\t\t\thwnd, WinRect.left, WinRect.top, WinRect.right, WinRect.bottom);\n\t}\n\telse{\n\t\tOutTraceDW(\"SethWnd: clearing main win\\n\");\n\t}\n}\n\nBOOL dxwCore::ishWndFPS(HWND hwnd) \n{\n\treturn (hwnd == hWndFPS);\n}\n\nvoid dxwCore::FixWorkarea(LPRECT workarea)\n{\n\tint w, h, b; // width, height and border\n\n\tw = workarea->right - workarea->left;\n\th = workarea->bottom - workarea->top;\n\tif ((w * iRatioY) > (h * iRatioX)){\n\t\tb = (w - (h * iRatioX / iRatioY))/2;\n\t\tworkarea->left += b;\n\t\tworkarea->right -= b;\n\t}\n\telse {\n\t\tb = (h - (w * iRatioY / iRatioX))/2;\n\t\tworkarea->top += b;\n\t\tworkarea->bottom -= b;\n\t}\n}\n\n//#define DUMPALLPALETTECHANGES TRUE\n\nvoid dxwCore::DumpPalette(DWORD dwcount, LPPALETTEENTRY lpentries)\n{\n\tchar sInfo[(14*256)+1];\n\tsInfo[0]=0;\n\t// \"Spearhead\" has a bug that sets 897 palette entries!\n\tif(dwcount > 256) dwcount=256;\n\tfor(DWORD idx=0; idx<dwcount; idx++) \n\t\tsprintf(sInfo, \"%s(%02x.%02x.%02x:%02x)\", sInfo, \n\t\tlpentries[idx].peRed, lpentries[idx].peGreen, lpentries[idx].peBlue, lpentries[idx].peFlags);\n\tstrcat(sInfo,\"\\n\");\n\tOutTrace(sInfo);\n\n#ifdef DUMPALLPALETTECHANGES\n\tif(DUMPALLPALETTECHANGES){\n\t\textern DXWNDSTATUS *pStatus;\n\t\tfor(DWORD idx=0; idx<dwcount; idx++)  \n\t\t\tpStatus->Palette[idx]= lpentries[idx];\n\t\tSleep(2000);\n\t}\n#endif\n}\n\nvoid dxwCore::ScreenRefresh(void)\n{\n\t// optimization: don't blit too often!\n\t// 20mSec seems a good compromise.\n\t#define DXWREFRESHINTERVAL 20\n\n\tLPDIRECTDRAWSURFACE lpDDSPrim;\n\textern HRESULT WINAPI extBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX);\n\n\tstatic int t = -1;\n\tif (t == -1)\n\t\tt = (*pGetTickCount)()-(DXWREFRESHINTERVAL+1); // V.2.1.69: trick - subtract \n\tint tn = (*pGetTickCount)();\n\n\tif (tn-t < DXWREFRESHINTERVAL) return;\n\tt = tn;\n\n\t// if not too early, refresh primary surface ....\n\tlpDDSPrim=dxwss.GetPrimarySurface();\n\textern Blt_Type pBltMethod();\n\textern int lpddsHookedVersion();\n\tif (lpDDSPrim) extBlt(lpddsHookedVersion(), pBltMethod(), lpDDSPrim, NULL, lpDDSPrim, NULL, 0, NULL); \n\n\t// v2.02.44 - used for what? Commenting out seems to fix the palette update glitches  \n\t// and make the \"Palette updates don't blit\" option useless....\n\t//(*pInvalidateRect)(hWnd, NULL, FALSE); \n}\n\nvoid dxwCore::DoSlow(int delay)\n{\n\tMSG uMsg;\n\tint t, tn;\n\tt = (*pGetTickCount)();\n\n\tuMsg.message=0; // initialize somehow...\n\twhile((tn = (*pGetTickCount)())-t < delay){\n\t\twhile (PeekMessage (&uMsg, NULL, 0, 0, PM_REMOVE) > 0){\n\t\t\tif(WM_QUIT == uMsg.message) break;\n\t\t\tTranslateMessage (&uMsg);\n\t\t\tDispatchMessage (&uMsg);\n\t\t}\t\n\t\t(*pSleep)(1);\n\t}\n}\n\n// Remarks:\n// If the target window is owned by the current process, GetWindowText causes a WM_GETTEXT message \n// to be sent to the specified window or control. If the target window is owned by another process \n// and has a caption, GetWindowText retrieves the window caption text. If the window does not have \n// a caption, the return value is a null string. This behavior is by design. It allows applications \n// to call GetWindowText without becoming unresponsive if the process that owns the target window \n// is not responding. However, if the target window is not responding and it belongs to the calling \n// application, GetWindowText will cause the calling application to become unresponsive. \n\nstatic void CountFPS(HWND hwnd)\n{\n\tstatic DWORD time = 0xFFFFFFFF;\n\tstatic DWORD FPSCount = 0;\n\tstatic HWND LasthWnd = 0;\n\textern void SetFPS(int);\n\tstatic char sBuf[80+15+1]; // title + fps string + terminator\n\t//DXWNDSTATUS Status;\n\tDWORD tmp;\n\ttmp = (*pGetTickCount)();\n\tif((tmp - time) > 1000) {\n\t\tchar *fpss;\n\t\t// log fps count\n\t\t// OutTrace(\"FPS: Delta=%x FPSCount=%d\\n\", (tmp-time), FPSCount);\n\t\t// show fps count on status win\n\t\tGetHookInfo()->FPSCount = FPSCount; // for overlay display\n\t\t// show fps on win title bar\n\t\tif (dxw.dwFlags2 & SHOWFPS){\n\t\t\tif(hwnd != LasthWnd){\n\t\t\t\tGetWindowText(hwnd, sBuf, 80);\n\t\t\t\tLasthWnd = hwnd;\n\t\t\t}\n\t\t\tfpss=strstr(sBuf,\" ~ (\");\n\t\t\tif(fpss==NULL) fpss=&sBuf[strlen(sBuf)];\n\t\t\tsprintf_s(fpss, 15, \" ~ (%d FPS)\", FPSCount);\n\t\t\tSetWindowText(hwnd, sBuf);\n\t\t}\n\t\t// reset\n\t\tFPSCount=0;\n\t\ttime = tmp;\n\t}\n\telse {\n\t\tFPSCount++;\n\t\tOutTraceB(\"FPS: Delta=%x FPSCount++=%d\\n\", (tmp-time), FPSCount);\n\t}\n}\n\nstatic void LimitFrameCount(DWORD delay)\n{\n\tstatic DWORD oldtime = (*pGetTickCount)();\n\tDWORD newtime;\n\tnewtime = (*pGetTickCount)();\n\tif(IsDebug) OutTrace(\"FPS limit: old=%x new=%x delay=%d sleep=%d\\n\", \n\t\toldtime, newtime, delay, (oldtime+delay-newtime));\n\t// use '<' and not '<=' to avoid the risk of sleeping forever....\n\tif((newtime < oldtime+delay) && (newtime >= oldtime)) {\n\t\t//if(IsDebug) OutTrace(\"FPS limit: old=%x new=%x delay=%d sleep=%d\\n\", \n\t\t//\toldtime, newtime, delay, (oldtime+delay-newtime));\n\t\tdo{\n\t\t\tif(IsDebug) OutTrace(\"FPS limit: sleep=%d\\n\", oldtime+delay-newtime);\n\t\t\t(*pSleep)(oldtime+delay-newtime);\n\t\t\tnewtime = (*pGetTickCount)();\n\t\t\tif(IsDebug) OutTrace(\"FPS limit: newtime=%d\\n\", newtime);\n\t\t} while(newtime < oldtime+delay);\n\t}\n\toldtime += delay;\n\tif(oldtime < newtime-delay) oldtime = newtime-delay;\n}\n\nstatic BOOL SkipFrameCount(DWORD delay)\n{\n\tstatic DWORD oldtime=(*pGetTickCount)();\n\tDWORD newtime;\n\tnewtime = (*pGetTickCount)();\n\tif(newtime < oldtime+delay) return TRUE; // TRUE => skip the screen refresh\n\toldtime = newtime;\n\treturn FALSE; // don't skip, do the update\n\n}\n\nBOOL dxwCore::HandleFPS()\n{\n\tif(dwFlags2 & (SHOWFPS|SHOWFPSOVERLAY)) CountFPS(hWndFPS);\n\tif(dwFlags2 & LIMITFPS) LimitFrameCount(dxw.MaxFPS);\n\tif(dwFlags2 & SKIPFPS) if(SkipFrameCount(dxw.MaxFPS)) return TRUE;\n\treturn FALSE;\n}\n\n// auxiliary functions ...\n\nvoid dxwCore::SetVSyncDelays(UINT RefreshRate)\n{\n\tint Reminder;\n\tchar sInfo[256];\n\n\tif(!(dxw.dwFlags1 & SAVELOAD)) return;\n\tif((RefreshRate < 10) || (RefreshRate > 100)) return; \n\n\tgdwRefreshRate = RefreshRate;\n\tif(!gdwRefreshRate) return;\n\tiRefreshDelayCount=0;\n\tReminder=0;\n\tdo{\n\t\tiRefreshDelays[iRefreshDelayCount]=(1000+Reminder)/gdwRefreshRate;\n\t\tReminder=(1000+Reminder)-(iRefreshDelays[iRefreshDelayCount]*gdwRefreshRate);\n\t\tiRefreshDelayCount++;\n\t} while(Reminder && (iRefreshDelayCount<MAXREFRESHDELAYCOUNT));\n\tif(IsTraceDW){\n\t\tstrcpy(sInfo, \"\");\n\t\tfor(int i=0; i<iRefreshDelayCount; i++) sprintf(sInfo, \"%s%d \", sInfo, iRefreshDelays[i]);\n\t\tOutTraceDW(\"Refresh rate=%d: delay=%s\\n\", gdwRefreshRate, sInfo);\n\t}\n}\n\nvoid dxwCore::VSyncWait()\n{\n\tstatic DWORD time = 0;\n\tstatic BOOL step = 0;\n\tDWORD tmp;\n\ttmp = (*pGetTickCount)();\n\tif((time - tmp) > 32) time = tmp;\n\t(*pSleep)(time - tmp);\n\ttime += iRefreshDelays[step++];\n\tif(step >= iRefreshDelayCount) step=0;\n}\n\nvoid dxwCore::VSyncWaitLine(DWORD ScanLine)\n{\n\textern LPDIRECTDRAW lpPrimaryDD;\n\tstatic DWORD iLastScanLine = 0;\n\tDWORD iCurrentScanLine;\n\tif (!lpPrimaryDD) return;\n\twhile(1){\n\t\tHRESULT res;\n\t\tif(res=lpPrimaryDD->GetScanLine(&iCurrentScanLine)) {\n\t\t\tOutTraceE(\"VSyncWaitLine: GetScanLine ERROR res=%x\\n\", res);\n\t\t\tiLastScanLine = 0;\n\t\t\tbreak; // error\n\t\t}\n\t\tif((iLastScanLine <= ScanLine) && (iCurrentScanLine > ScanLine)) {\n\t\t\tOutTraceB(\"VSyncWaitLine: line=%d last=%d\\n\", iCurrentScanLine, iLastScanLine);\n\t\t\tbreak;\n\t\t}\n\t\tiLastScanLine = iCurrentScanLine;\n\t\t(*pSleep)(1);\n\t}\n}\n\nstatic float fMul[17]={2.14F, 1.95F, 1.77F, 1.61F, 1.46F, 1.33F, 1.21F, 1.10F, 1.00F, 0.91F, 0.83F, 0.75F, 0.68F, 0.62F, 0.56F, 0.51F, 0.46F};\n\nstatic DWORD TimeShifterFine(DWORD val, int shift)\n{\n\tfloat fVal;\n\tfVal = (float)val * fMul[shift+8];\n\treturn (DWORD)fVal;\n}\n\nstatic DWORD TimeShifterCoarse(DWORD val, int shift)\n{\n\tint exp, reminder;\n\tif (shift > 0) {\n\t\texp = shift >> 1;\n\t\treminder = shift & 0x1;\n\t\tif (reminder) val -= (val >> 2); // val * (1-1/4) = val * 3/4\n\t\tval >>= exp; // val * 2^exp\n\t}\n\tif (shift < 0) {\n\t\texp = (-shift) >> 1;\n\t\treminder = (-shift) & 0x1;\n\t\tval <<= exp; // val / 2^exp\n\t\tif (reminder) val += (val >> 1); // val * (1+1/2) = val * 3/2\n\t}\n\treturn val;\n}\n\nstatic LARGE_INTEGER TimeShifter64Fine(LARGE_INTEGER val, int shift)\n{\n\tfloat fVal;\n\tfVal = (float)val.LowPart * fMul[shift+8];\n\tval.HighPart = 0;\n\tval.LowPart = (DWORD)fVal;\n\treturn val;\t\n}\n\nstatic LARGE_INTEGER TimeShifter64Coarse(LARGE_INTEGER val, int shift)\n{\n\tint exp, reminder;\n\tif (shift > 0) {\n\t\texp = shift >> 1;\n\t\treminder = shift & 0x1;\n\t\tif (reminder) val.QuadPart -= (val.QuadPart >> 2); // val * (1-1/4) = val * 3/4\n\t\tval.QuadPart >>= exp; // val * 2^exp\n\t}\n\tif (shift < 0) {\n\t\texp = (-shift) >> 1;\n\t\treminder = (-shift) & 0x1;\n\t\tval.QuadPart <<= exp; // val / 2^exp\n\t\tif (reminder) val.QuadPart += (val.QuadPart >> 1); // val * (1+1/2) = val * 3/2\n\t}\n\treturn val;\n}\n\nDWORD dxwCore::GetTickCount(void)\n{\n\tDWORD dwTick;\n\tstatic DWORD dwLastRealTick=0;\n\tstatic DWORD dwLastFakeTick=0;\n\tDWORD dwNextRealTick;\n\tstatic BOOL FirstTime = TRUE;\n\n\tif(FirstTime){\n\t\tdwLastRealTick=(*pGetTickCount)();\n\t\tdwLastFakeTick=dwLastRealTick;\n\t\tFirstTime=FALSE;\n\t}\n\tdwNextRealTick=(*pGetTickCount)();\n\tdwTick=(dwNextRealTick-dwLastRealTick);\n\tTimeShift=GetHookInfo()->TimeShift;\n\tdwTick = (*pTimeShifter)(dwTick, TimeShift);\n\tif(TimeFreeze) dwTick=0;\n\tdwLastFakeTick += dwTick;\n\tdwLastRealTick = dwNextRealTick;\n\treturn dwLastFakeTick;\n}\n\nDWORD dxwCore::StretchTime(DWORD dwTimer)\n{\n\tTimeShift=GetHookInfo()->TimeShift;\n\tdwTimer = (*pTimeShifter)(dwTimer, -TimeShift);\n\treturn dwTimer;\n}\n\nDWORD dxwCore::StretchCounter(DWORD dwTimer)\n{\n\tTimeShift=GetHookInfo()->TimeShift;\n\tdwTimer = (*pTimeShifter)(dwTimer, TimeShift);\n\treturn (dxw.TimeFreeze) ? 0 : dwTimer;\n}\n\nLARGE_INTEGER dxwCore::StretchCounter(LARGE_INTEGER dwTimer)\n{\n\tstatic int Reminder = 0;\n\tLARGE_INTEGER ret;\n\tLARGE_INTEGER zero = {0,0};\n\tTimeShift=GetHookInfo()->TimeShift;\n\tdwTimer.QuadPart += Reminder;\n\tret = (*pTimeShifter64)(dwTimer, TimeShift);\n\tReminder = (ret.QuadPart==0) ? dwTimer.LowPart : 0;\n\treturn (dxw.TimeFreeze) ? zero : ret;\n}\n\nvoid dxwCore::GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime)\n{\n\tDWORD dwTick;\n\tDWORD dwCurrentTick;\n\tFILETIME CurrFileTime;\n\tstatic DWORD dwStartTick=0;\n\tstatic FILETIME StartFileTime;\n\n\tif(dwStartTick==0) {\n\t\tSYSTEMTIME StartingTime;\n\t\t// first time through, initialize & return true time\n\t\tdwStartTick = (*pGetTickCount)();\n\t\t(*pGetSystemTime)(&StartingTime);\n\t\tSystemTimeToFileTime(&StartingTime, &StartFileTime);\n\t\t*lpSystemTimeAsFileTime = StartFileTime;\n\t}\n\telse {\n\t\tdwCurrentTick=(*pGetTickCount)();\n\t\tdwTick=(dwCurrentTick-dwStartTick);\n\t\tTimeShift=GetHookInfo()->TimeShift;\n\t\tdwTick = (*pTimeShifter)(dwTick, TimeShift);\n\t\tif(dxw.TimeFreeze) dwTick=0;\n\t\t// From MSDN: Contains a 64-bit value representing the number of \n\t\t// 100-nanosecond intervals since January 1, 1601 (UTC).\n\t\t// So, since 1mSec = 10.000 * 100nSec, you still have to multiply by 10.000.\n\t\tCurrFileTime.dwHighDateTime = StartFileTime.dwHighDateTime; // wrong !!!!\n\t\tCurrFileTime.dwLowDateTime = StartFileTime.dwLowDateTime + (10000 * dwTick); // wrong !!!!\n\t\t*lpSystemTimeAsFileTime=CurrFileTime;\n\t\t// reset to avoid time jumps on TimeShift changes...\n\t\tStartFileTime = CurrFileTime;\n\t\tdwStartTick = dwCurrentTick;\n\t}\n}\n\nvoid dxwCore::GetSystemTime(LPSYSTEMTIME lpSystemTime)\n{\n\tDWORD dwTick;\n\tDWORD dwCurrentTick;\n\tFILETIME CurrFileTime;\n\tstatic DWORD dwStartTick=0;\n\tstatic FILETIME StartFileTime;\n\n\tif(dwStartTick==0) {\n\t\tSYSTEMTIME StartingTime;\n\t\t// first time through, initialize & return true time\n\t\tdwStartTick = (*pGetTickCount)();\n\t\t(*pGetSystemTime)(&StartingTime);\n\t\tSystemTimeToFileTime(&StartingTime, &StartFileTime);\n\t\t*lpSystemTime = StartingTime;\n\t}\n\telse {\n\t\tdwCurrentTick=(*pGetTickCount)();\n\t\tdwTick=(dwCurrentTick-dwStartTick);\n\t\tTimeShift=GetHookInfo()->TimeShift;\n\t\tdwTick = (*pTimeShifter)(dwTick, TimeShift);\n\t\tif(TimeFreeze) dwTick=0;\n\t\t// From MSDN: Contains a 64-bit value representing the number of \n\t\t// 100-nanosecond intervals since January 1, 1601 (UTC).\n\t\t// So, since 1mSec = 10.000 * 100nSec, you still have to multiply by 10.000.\n\t\tCurrFileTime.dwHighDateTime = StartFileTime.dwHighDateTime; // wrong !!!!\n\t\tCurrFileTime.dwLowDateTime = StartFileTime.dwLowDateTime + (10000 * dwTick); // wrong !!!!\n\t\tFileTimeToSystemTime(&CurrFileTime, lpSystemTime);\n\t\t// reset to avoid time jumps on TimeShift changes...\n\t\tStartFileTime = CurrFileTime;\n\t\tdwStartTick = dwCurrentTick;\n\t}\n}\n\nvoid dxwCore::ShowOverlay()\n{\n\tif (MustShowOverlay) {\n\t\tRECT rect;\n\t\t(*pGetClientRect)(hWnd, &rect);\n\t\tthis->ShowOverlay(GetDC(hWnd), rect.right, rect.bottom);\n\t}\n}\n\nvoid dxwCore::ShowOverlay(LPDIRECTDRAWSURFACE lpdds)\n{\n\ttypedef HRESULT (WINAPI *GetDC_Type) (LPDIRECTDRAWSURFACE, HDC FAR *);\n\ttypedef HRESULT (WINAPI *ReleaseDC_Type)(LPDIRECTDRAWSURFACE, HDC);\n\textern GetDC_Type pGetDCMethod();\n\textern ReleaseDC_Type pReleaseDCMethod();\n\tif (MustShowOverlay) {\n\t\tHDC hdc; // the working dc\n\t\tint h, w;\n\t\tif(!lpdds) return;\n\t\tif (FAILED((*pGetDCMethod())(lpdds, &hdc))) return; \n\t\tw = this->GetScreenWidth();\n\t\th = this->GetScreenHeight();\n\t\tif(this->dwFlags4 & BILINEAR2XFILTER) {\n\t\t\tw <<=1;\n\t\t\th <<=1;\n\t\t}\n\t\tthis->ShowOverlay(hdc, w, h);\n\t\t(*pReleaseDCMethod())(lpdds, hdc);\n\t}\n}\n\nvoid dxwCore::ShowOverlay(HDC hdc)\n{\n\tif(!hdc) return;\n\tRECT rect;\n\t(*pGetClientRect)(hWnd, &rect);\n\tthis->ShowOverlay(hdc, rect.right, rect.bottom);\n}\n\nvoid dxwCore::ShowOverlay(HDC hdc, int w, int h)\n{\n\tif(!hdc) return;\n\tif (dwFlags2 & SHOWFPSOVERLAY) ShowFPS(hdc, w, h);\n\tif (dwFlags4 & SHOWTIMESTRETCH) ShowTimeStretching(hdc, w, h);\n}\n\n// nasty global to ensure that the corner is picked semi-random, but never overlapped\n// between FPS and TimeStretch (and, as a side effect, never twice the same!)\nstatic int LastCorner;\n\nvoid dxwCore::ShowFPS(HDC xdc, int w, int h)\n{\n\tchar sBuf[81];\n\tstatic DWORD dwTimer = 0;\n\tstatic int corner = 0;\n\tstatic int x, y;\n\tstatic DWORD color;\n\n\tif((*pGetTickCount)()-dwTimer > 6000){\n\t\tdwTimer = (*pGetTickCount)();\n\t\tcorner = dwTimer % 4;\n\t\tif(corner==LastCorner) corner = (corner+1) % 4;\n\t\tLastCorner = corner;\n\t\tcolor=0xFF0000; // blue\n\t\tswitch (corner) {\n\t\tcase 0: x=10; y=10; break;\n\t\tcase 1: x=w-60; y=10; break;\n\t\tcase 2: x=w-60; y=h-20; break;\n\t\tcase 3: x=10; y=h-20; break;\n\t\t}\n\t} \n\n\tSetTextColor(xdc,color);\n\tSetBkMode(xdc, OPAQUE);\n\tsprintf_s(sBuf, 80, \"FPS: %d\", GetHookInfo()->FPSCount);\n\tTextOut(xdc, x, y, sBuf, strlen(sBuf));\n}\n\nvoid dxwCore::ShowTimeStretching(HDC xdc, int w, int h)\n{\n\tchar sBuf[81];\n\tstatic DWORD dwTimer = 0;\n\tstatic int corner = 0;\n\tstatic int x, y;\n\tstatic DWORD color;\n\tstatic int LastTimeShift = 1000; // any initial number different from -8 .. +8\n\tstatic int LastTimeFreeze = 1000; // any initial number different from TRUE, FALSE\n\n\tif((*pGetTickCount)()-dwTimer > 4000){\n\t\tif((LastTimeShift==TimeShift) && (LastTimeFreeze==TimeFreeze)) return; // after a while, stop the show\n\t\tdwTimer = (*pGetTickCount)();\n\t\tLastTimeShift=TimeShift;\n\t\tcorner = dwTimer % 4;\n\t\tif(corner==LastCorner) corner = (corner+1) % 4;\n\t\tLastCorner = corner;\n\t\tcolor=0x0000FF; // red\n\t\tswitch (corner) {\n\t\tcase 0: x=10; y=10; break;\n\t\tcase 1: x=w-60; y=10; break;\n\t\tcase 2: x=w-60; y=h-20; break;\n\t\tcase 3: x=10; y=h-20; break;\n\t\t}\n\t} \n\n\tSetTextColor(xdc,color);\n\tSetBkMode(xdc, OPAQUE);\n\tsprintf_s(sBuf, 80, \"t%s\", dxw.GetTSCaption());\n\tTextOut(xdc, x, y, sBuf, strlen(sBuf));\n}\n\nchar *dxwCore::GetTSCaption(int shift)\n{\n\tstatic char *sTSCaptionCoarse[17]={\n\t\t\"x16\",\"x12\",\"x8\",\"x6\",\n\t\t\"x4\",\"x3\",\"x2\",\"x1.5\",\n\t\t\"x1\",\n\t\t\":1.5\",\":2\",\":3\",\":4\",\n\t\t\":6\",\":8\",\":12\",\":16\"};\n\tstatic char *sTSCaptionFine[17]={\n\t\t\"x2.14\",\"x1.95\",\"x1.77\",\"x1.61\",\n\t\t\"x1.46\",\"x1.33\",\"x1.21\",\"x1.10\",\n\t\t\"x1.00\",\n\t\t\":1.10\",\":1.21\",\":1.33\",\":1.46\",\n\t\t\":1.61\",\":1.77\",\":1.95\",\":2.14\"};\n\tif(TimeFreeze) return \"x0\";\n\tif (shift<(-8) || shift>(+8)) return \"???\";\n\tshift += 8;\n\treturn (dxw.dwFlags4 & FINETIMING) ? sTSCaptionFine[shift] : sTSCaptionCoarse[shift];\n}\n\nchar *dxwCore::GetTSCaption(void)\n{\n\treturn GetTSCaption(TimeShift);\n}\n\nvoid dxwCore::ShowBanner(HWND hwnd)\n{\n\tstatic BOOL JustOnce=FALSE;\n\textern HMODULE hInst;\n\tBITMAP bm;\n\tHDC hClientDC;\n\tHBITMAP g_hbmBall;\n\tRECT client;\n\tRECT win;\n\tPOINT PrevViewPort;\n\tint StretchMode;\n\n\thClientDC=(*pGDIGetDC)(hwnd); \n\t(*pGetClientRect)(hwnd, &client);\n\t//(*pInvalidateRect)((*pGetDesktopWindow)(), NULL, FALSE); // invalidate full desktop, no erase.\n\t(*pInvalidateRect)(0, NULL, FALSE); // invalidate full desktop, no erase.\n\t(*pGDIBitBlt)(hClientDC, 0, 0,  client.right, client.bottom, NULL, 0, 0, BLACKNESS);\n\n\tif(JustOnce || (dwFlags2 & NOBANNER)) return;\n\tJustOnce=TRUE;\n\n    g_hbmBall = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BANNER));\n    HDC hdcMem = CreateCompatibleDC(hClientDC);\n    HBITMAP hbmOld = (HBITMAP)(*pSelectObject)(hdcMem, g_hbmBall);\n    GetObject(g_hbmBall, sizeof(bm), &bm);\n\n\t(*pGetWindowRect)(hwnd, &win);\n\tOutTraceDW(\"ShowBanner: hwnd=%x win=(%d,%d)-(%d,%d) banner size=(%dx%d)\\n\", \n\t\thwnd, win.left, win.top, win.right, win.bottom, bm.bmWidth, bm.bmHeight);\n\n\t//if(!pSetViewportOrgEx) pSetViewportOrgEx=SetViewportOrgEx;\n\t(*pSetViewportOrgEx)(hClientDC, 0, 0, &PrevViewPort);\n\tStretchMode=GetStretchBltMode(hClientDC);\n\tSetStretchBltMode(hClientDC, HALFTONE);\n\tfor (int i=1; i<=16; i++){\n\t\tint w, h;\n\t\tw=(bm.bmWidth*i)/8;\n\t\th=(bm.bmHeight*i)/8;\n\t\t(*pGDIStretchBlt)(hClientDC, (client.right-w)/2, (client.bottom-h)/2, w, h, hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);\n\t\tSleep(40);\n\t}\n\tfor (int i=16; i>=8; i--){\n\t\tint w, h;\n\t\tw=(bm.bmWidth*i)/8;\n\t\th=(bm.bmHeight*i)/8;\n\t\t(*pGDIBitBlt)(hClientDC, 0, 0,  client.right, client.bottom, NULL, 0, 0, BLACKNESS);\n\t\t(*pGDIStretchBlt)(hClientDC, (client.right-w)/2, (client.bottom-h)/2, w, h, hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);\n\t\tSleep(40);\n\t}\n\tSetStretchBltMode(hClientDC, StretchMode);\n\t(*pSetViewportOrgEx)(hClientDC, PrevViewPort.x, PrevViewPort.y, NULL);\n    (*pSelectObject)(hdcMem, hbmOld);\n    DeleteDC(hdcMem);\n\t(*pGDIReleaseDC)(hwnd, hClientDC); \n\tSleep(200);\n}\n\nvoid dxwCore::PushDLL(char *lpName, int idx)\n{\n\tSysNames[idx] = lpName; // add entry\n}\n\nint dxwCore::GetDLLIndex(char *lpFileName)\n{\n\tint idx;\n\tchar *lpName, *lpNext;\n\n\tlpName=lpFileName;\n\twhile (lpNext=strchr(lpName,'\\\\')) lpName=lpNext+1;\n\tfor(idx=0; SysNames[idx]; idx++){\n\t\tchar SysNameExt[81];\n\t\tstrcpy(SysNameExt, SysNames[idx]);\n\t\tstrcat(SysNameExt, \".dll\");\n\t\tif(\n\t\t\t(!lstrcmpi(lpName,SysNames[idx])) ||\n\t\t\t(!lstrcmpi(lpName,SysNameExt))\n\t\t){\n\t\t\tOutTraceDW(\"Registered DLL FileName=%s\\n\", lpFileName);\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (!SysNames[idx]) return -1;\n\treturn idx;\n}\n\nDWORD dxwCore::FixWinStyle(DWORD dwStyle)\n{\n\tswitch(dxw.Coordinates){\n\t\tcase DXW_SET_COORDINATES:\n\t\tcase DXW_DESKTOP_CENTER:\n\t\t\tif(dxw.dwFlags2 & MODALSTYLE){\n\t\t\t\tdwStyle &= ~(WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_SYSMENU | WS_THICKFRAME);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdwStyle = WS_OVERLAPPEDWINDOW;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase DXW_DESKTOP_WORKAREA:\n\t\tcase DXW_DESKTOP_FULL:\n\t\t\tdwStyle = 0;\n\t\t\tbreak;\n\t}\n\treturn dwStyle;\n}\n\nDWORD dxwCore::FixWinExStyle(DWORD dwExStyle)\n{\n\tswitch(dxw.Coordinates){\n\t\tcase DXW_SET_COORDINATES:\n\t\tcase DXW_DESKTOP_CENTER:\n\t\t\tif(dxw.dwFlags2 & MODALSTYLE){\n\t\t\t\tdwExStyle &= ~(WS_EX_CLIENTEDGE | WS_EX_DLGMODALFRAME | WS_EX_STATICEDGE | WS_EX_WINDOWEDGE);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdwExStyle &= ~(WS_EX_CLIENTEDGE | WS_EX_DLGMODALFRAME | WS_EX_STATICEDGE | WS_EX_WINDOWEDGE);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase DXW_DESKTOP_WORKAREA:\n\t\tcase DXW_DESKTOP_FULL:\n\t\t\tdwExStyle = 0;\n\t\t\tbreak;\n\t}\n\n\treturn dwExStyle;\n}\n\nvoid dxwCore::FixWindowFrame(HWND hwnd)\n{\n\tLONG nStyle, nExStyle;\n\n\tOutTraceDW(\"FixWindowFrame: hwnd=%x foreground=%x\\n\", hwnd, GetForegroundWindow());\n\n\tnStyle=(*pGetWindowLong)(hwnd, GWL_STYLE);\n\t// beware: 0 is a valid return code!\n\t//if (!nStyle){\n\t//\tOutTraceE(\"FixWindowFrame: GetWindowLong ERROR %d at %d\\n\",GetLastError(),__LINE__);\n\t//\treturn;\n\t//}\n\n\tnExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE);\n\t// beware: 0 is a valid return code!\n\t//if (!nExStyle){\n\t//\tOutTraceE(\"FixWindowFrame: GetWindowLong ERROR %d at %d\\n\",GetLastError(),__LINE__);\n\t//\treturn;\n\t//}\n\n\tOutTraceDW(\"FixWindowFrame: style=%x(%s) exstyle=%x(%s)\\n\",\n\t\tnStyle, ExplainStyle(nStyle),\n\t\tnExStyle, ExplainExStyle(nExStyle));\n\n\t// fix style\n\tif (!(*pSetWindowLongA)(hwnd, GWL_STYLE, FixWinStyle(nStyle))){\n\t\tOutTraceE(\"FixWindowFrame: SetWindowLong ERROR %d at %d\\n\",GetLastError(),__LINE__);\n\t\treturn;\n\t}\n\t// fix exstyle\n\tif (!(*pSetWindowLongA)(hwnd, GWL_EXSTYLE, FixWinExStyle(nExStyle))){\n\t\tOutTraceE(\"FixWindowFrame: SetWindowLong ERROR %d at %d\\n\",GetLastError(),__LINE__);\n\t\treturn;\n\t}\n\n\t// ShowWindow retcode means in no way an error code! Better ignore it.\n\t(*pShowWindow)(hwnd, SW_RESTORE);\n\treturn;\n}\n\nvoid dxwCore::FixStyle(char *ApiName, HWND hwnd, WPARAM wParam, LPARAM lParam)\n{\n\tLPSTYLESTRUCT lpSS;\n\tlpSS = (LPSTYLESTRUCT) lParam;\n\n\tswitch (wParam) {\n\tcase GWL_STYLE:\n\t\tOutTraceDW(\"%s: new Style=%x(%s)\\n\", \n\t\t\tApiName, lpSS->styleNew, ExplainStyle(lpSS->styleNew));\n\t\tif (dxw.dwFlags1 & FIXWINFRAME){ // set canonical style\n\t\t\tlpSS->styleNew=  WS_OVERLAPPEDWINDOW;\n\t\t}\n\t\tif (dxw.dwFlags9 & FIXTHINFRAME){ // set canonical style with thin border\n\t\t\tlpSS->styleNew=  WS_OVERLAPPEDTHIN;\n\t\t}\n\t\tif (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value\n\t\t\tlpSS->styleNew= (*pGetWindowLong)(hwnd, GWL_STYLE);\n\t\t}\n\t\tif (dxw.dwFlags1 & PREVENTMAXIMIZE){ // disable maximize settings\n\t\t\tif (lpSS->styleNew & WS_MAXIMIZE){\n\t\t\t\tOutTraceDW(\"%s: prevent maximize style\\n\", ApiName);\n\t\t\t\tlpSS->styleNew &= ~WS_MAXIMIZE;\n\t\t\t}\n\t\t}\n\t\tbreak;\n\tcase GWL_EXSTYLE:\n\t\tOutTraceDW(\"%s: new ExStyle=%x(%s)\\n\", \n\t\t\tApiName, lpSS->styleNew, ExplainExStyle(lpSS->styleNew));\n\t\tif (dxw.dwFlags1 & FIXWINFRAME){ // set canonical style\n\t\t\tlpSS->styleNew= 0;\n\t\t}\n\t\tif (dxw.dwFlags1 & LOCKWINSTYLE){ // set to current value\n\t\t\t\tlpSS->styleNew= (*pGetWindowLong)(hwnd, GWL_EXSTYLE);\n\t\t}\n\t\tif ((dxw.dwFlags5 & UNLOCKZORDER) && (hwnd==hWnd)){ // disable maximize settings\n\t\t\tif (lpSS->styleNew & WS_EX_TOPMOST){\n\t\t\t\tOutTraceDW(\"%s: prevent EXSTYLE topmost style\\n\", ApiName);\n\t\t\t\tlpSS->styleNew &= ~WS_EX_TOPMOST;\n\t\t\t}\n\t\t} \n\t\tbreak;\n\tdefault:\n\t\tbreak;\n\t}\n}\n\nvoid dxwCore::PushTimer(UINT uTimerId, UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, DWORD_PTR dwUser, UINT fuEvent)\n{\n\t\t// save current timer\n\t\tTimerEvent.dwTimerType = TIMER_TYPE_WINMM;\n\t\tTimerEvent.t.uTimerId = uTimerId;\n\t\tTimerEvent.t.uDelay = uDelay;\n\t\tTimerEvent.t.uResolution = uResolution;\n\t\tTimerEvent.t.lpTimeProc = lpTimeProc;\n\t\tTimerEvent.t.dwUser = dwUser;\n\t\tTimerEvent.t.fuEvent = fuEvent;\n}\n\nvoid dxwCore::PushTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc)\n{\n\t\t// save current timer\n\t\tTimerEvent.dwTimerType = TIMER_TYPE_USER32;\n\t\tTimerEvent.t.hWnd = hWnd;\n\t\tTimerEvent.t.nIDEvent = nIDEvent;\n\t\tTimerEvent.t.uElapse = uElapse;\n\t\tTimerEvent.t.lpTimerFunc = lpTimerFunc;\n}\n\nvoid dxwCore::PopTimer(UINT uTimerId)\n{\n\t// clear current timer\n\tif(TimerEvent.dwTimerType != TIMER_TYPE_WINMM) {\n\t\t// this should never happen, unless there are more than 1 timer!\n\t\tchar msg[256];\n\t\tsprintf(msg,\"PopTimer: TimerType=%x last=%x\\n\", TIMER_TYPE_WINMM, TimerEvent.dwTimerType);\n\t\t//MessageBox(0, msg, \"PopTimer\", MB_OK | MB_ICONEXCLAMATION);\n\t\tOutTraceE(msg);\n\t\treturn;\n\t}\n\tif(uTimerId != TimerEvent.t.uTimerId){\n\t\t// this should never happen, unless there are more than 1 timer!\n\t\tchar msg[256];\n\t\tsprintf(msg,\"PopTimer: TimerId=%x last=%x\\n\", uTimerId, TimerEvent.t.uTimerId);\n\t\t//MessageBox(0, msg, \"PopTimer\", MB_OK | MB_ICONEXCLAMATION);\n\t\tOutTraceE(msg);\n\t\treturn;\n\t}\n\tTimerEvent.dwTimerType = TIMER_TYPE_NONE;\n}\n\nvoid dxwCore::PopTimer(HWND hWnd, UINT_PTR nIDEvent)\n{\n\t// clear current timer\n\tif(TimerEvent.dwTimerType != TIMER_TYPE_USER32) {\n\t\t// this should never happen, unless there are more than 1 timer!\n\t\tchar msg[256];\n\t\tsprintf(msg,\"PopTimer: TimerType=%x last=%x\\n\", TIMER_TYPE_WINMM, TimerEvent.dwTimerType);\n\t\t//MessageBox(0, msg, \"PopTimer\", MB_OK | MB_ICONEXCLAMATION);\n\t\tOutTraceE(msg);\n\t\treturn;\n\t}\n\tif(nIDEvent != TimerEvent.t.nIDEvent){\n\t\t// this should never happen, unless there are more than 1 timer!\n\t\tchar msg[256];\n\t\tsprintf(msg,\"PopTimer: TimerId=%x last=%x\\n\", nIDEvent, TimerEvent.t.nIDEvent);\n\t\t//MessageBox(0, msg, \"PopTimer\", MB_OK | MB_ICONEXCLAMATION);\n\t\tOutTraceE(msg);\n\t\treturn;\n\t}\n\tTimerEvent.dwTimerType = TIMER_TYPE_NONE;\n}\n\nvoid dxwCore::RenewTimers()\n{\n\tOutTraceE(\"DXWND: RenewTimers type=%x\\n\", TimerEvent.dwTimerType);\n\tswitch(TimerEvent.dwTimerType){\n\tcase TIMER_TYPE_NONE:\n\t\tOutTraceDW(\"DXWND: RenewTimers type=NONE\\n\");\n\t\tbreak;\n\tcase TIMER_TYPE_USER32:\n\t\tif(pSetTimer && pKillTimer){\n\t\t\tUINT uElapse;\n\t\t\tUINT_PTR res;\n\t\t\tres=(*pKillTimer)(TimerEvent.t.hWnd, TimerEvent.t.nIDEvent);\n\t\t\tif(!res) OutTraceE(\"DXWND: KillTimer ERROR hWnd=%x IDEvent=%x err=%d\\n\", TimerEvent.t.hWnd, TimerEvent.t.nIDEvent, GetLastError());\n\t\t\tuElapse = dxw.StretchTime(TimerEvent.t.uElapse);\n\t\t\tres=(*pSetTimer)(TimerEvent.t.hWnd, TimerEvent.t.nIDEvent, uElapse, TimerEvent.t.lpTimerFunc);\n\t\t\tTimerEvent.t.nIDEvent = res;\n\t\t\tif(res)\n\t\t\tOutTraceDW(\"DXWND: RenewTimers type=USER32 Elsapse=%d IDEvent=%x\\n\", uElapse, res);\n\t\t\telse\n\t\t\t\tOutTraceE(\"DXWND: SetTimer ERROR hWnd=%x Elapse=%d TimerFunc=%x err=%d\\n\", TimerEvent.t.hWnd, uElapse, TimerEvent.t.lpTimerFunc, GetLastError());\n\t\t}\n\t\tbreak;\n\tcase TIMER_TYPE_WINMM:\n\t\tif(ptimeKillEvent && ptimeSetEvent){\n\t\t\tUINT NewDelay;\n\t\t\tMMRESULT res;\n\t\t\t(*ptimeKillEvent)(TimerEvent.t.uTimerId);\n\t\t\tNewDelay = dxw.StretchTime(TimerEvent.t.uDelay);\n\t\t\tres=(*ptimeSetEvent)(NewDelay, TimerEvent.t.uResolution, TimerEvent.t.lpTimeProc, TimerEvent.t.dwUser, TimerEvent.t.fuEvent);\n\t\t\tTimerEvent.t.uTimerId = res;\n\t\t\tOutTraceDW(\"DXWND: RenewTimers type=WINMM Delay=%d TimerId=%x\\n\", NewDelay, res);\n\t\t}\n\t\tbreak;\n\tdefault:\n\t\tOutTraceE(\"DXWND: RenewTimers type=%x(UNKNOWN)\\n\", TimerEvent.dwTimerType);\n\t\tbreak;\n\t}\n}\n\nLARGE_INTEGER dxwCore::StretchLargeCounter(LARGE_INTEGER CurrentInCount)\n{\n\tLARGE_INTEGER CurrentOutPerfCount;\n\tstatic LARGE_INTEGER LastInPerfCount;\n\tstatic LARGE_INTEGER LastOutPerfCount;\n\tstatic BOOL FirstTime = TRUE;\n\tLARGE_INTEGER ElapsedCount;\n\n\tif(FirstTime){\n\t\t// first time through, initialize both inner and output per counters with real values\n\t\tLastInPerfCount.QuadPart = CurrentInCount.QuadPart;\n\t\tLastOutPerfCount.QuadPart = CurrentInCount.QuadPart;\n\t\tFirstTime=FALSE;\n\t}\n\n\tElapsedCount.QuadPart = CurrentInCount.QuadPart - LastInPerfCount.QuadPart;\n\tElapsedCount = dxw.StretchCounter(ElapsedCount);\n\tCurrentOutPerfCount.QuadPart = LastOutPerfCount.QuadPart + ElapsedCount.QuadPart;\n\tLastInPerfCount = CurrentInCount;\n\tLastOutPerfCount = CurrentOutPerfCount;\n\n\tOutTraceB(\"dxw::StretchCounter: Count=[%x-%x]\\n\", CurrentOutPerfCount.HighPart, CurrentOutPerfCount.LowPart);\n\treturn CurrentOutPerfCount;\n}\n\nBOOL dxwCore::CheckScreenResolution(unsigned int w, unsigned int h)\n{\n\t#define HUGE 100000\n\tif(dxw.dwFlags4 & LIMITSCREENRES){\n\t\tDWORD maxw, maxh;\n\t\tmaxw=HUGE; maxh=HUGE; // v2.02.96\n\t\tswitch(MaxScreenRes){\n\t\t\tcase DXW_NO_LIMIT: maxw=HUGE; maxh=HUGE; break;\n\t\t\tcase DXW_LIMIT_320x200: maxw=320; maxh=200; break;\n\t\t\tcase DXW_LIMIT_640x480: maxw=640; maxh=480; break;\n\t\t\tcase DXW_LIMIT_800x600: maxw=800; maxh=600; break;\n\t\t\tcase DXW_LIMIT_1024x768: maxw=1024; maxh=768; break;\n\t\t\tcase DXW_LIMIT_1280x960: maxw=1280; maxh=960; break;\n\t\t\tcase DXW_LIMIT_1280x1024: maxw=1280; maxh=1024; break;\n\t\t}\n\t\tif((w > maxw) || (h > maxh)) return FALSE;\n\t}\n\n\tif(dxw.dwFlags7 & MAXIMUMRES){\n\t\tif(((long)w > dxw.iMaxW) || ((long)h > dxw.iMaxH)) return FALSE;\n\t}\n\n\treturn TRUE;\n}\n\nUINT VKeyConfig[DXVK_SIZE];\n\nstatic char *VKeyLabels[DXVK_SIZE]={\n\t\"none\",\n\t\"cliptoggle\", \n\t\"refresh\", \n\t\"logtoggle\", \n\t\"plocktoggle\",\n\t\"fpstoggle\", \n\t\"timefast\", \n\t\"timeslow\", \n\t\"timetoggle\", \n\t\"altf4\",\n\t\"printscreen\",\n\t\"corner\",\n\t\"freezetime\",\n\t\"fullscreen\",\n\t\"workarea\",\n\t\"desktop\",\n};\n\nvoid dxwCore::MapKeysInit()\n{\n\tchar InitPath[MAX_PATH];\n\tchar *p;\n\tDWORD dwAttrib;\t\n\tint KeyIdx;\n\tdwAttrib = GetFileAttributes(\"dxwnd.dll\");\n\tif (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) return;\n\tGetModuleFileName(GetModuleHandle(\"dxwnd\"), InitPath, MAX_PATH);\n\tp=&InitPath[strlen(InitPath)-strlen(\"dxwnd.dll\")];\n\tstrcpy(p, \"dxwnd.ini\");\n\tVKeyConfig[DXVK_NONE]=DXVK_NONE;\n\tfor(KeyIdx=1; KeyIdx<DXVK_SIZE; KeyIdx++){\n\t\tVKeyConfig[KeyIdx]=GetPrivateProfileInt(\"keymapping\", VKeyLabels[KeyIdx], KeyIdx==DXVK_ALTF4 ? 0x73 : 0x00, InitPath);\n\t\tif(VKeyConfig[KeyIdx]) OutTrace(\"keymapping[%d](%s)=%x\\n\", KeyIdx, VKeyLabels[KeyIdx], VKeyConfig[KeyIdx]);\n\t}\n}\n\nUINT dxwCore::MapKeysConfig(UINT message, LPARAM lparam, WPARAM wparam)\n{\n\tif(message!=WM_SYSKEYDOWN) return DXVK_NONE;\n\tfor(int idx=1; idx<DXVK_SIZE; idx++)\n\t\tif(VKeyConfig[idx]==wparam) {\n\t\t\tOutTrace(\"keymapping GOT=0x%02X\\n\", idx);\n\t\t\treturn idx;\n\t\t}\n\treturn DXVK_NONE;\n}\n\nvoid dxwCore::ToggleFreezedTime()\n{\n\tstatic DWORD dwLastTime = 0;\n\tif(((*pGetTickCount)() - dwLastTime) < 1000) return;\n\tTimeFreeze = !TimeFreeze;\n\tdwLastTime = (*pGetTickCount)();\n\tOutTraceDW(\"DxWnd: time is %s\\n\", dxw.TimeFreeze ? \"freezed\" : \"unfreezed\");\n}\n\nvoid dxwCore::MessagePump()\n{\n\tMSG msg;\n\twhile(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)){\n\t\tOutTraceW(\"MESSAGEPUMP: msg=%x l-wParam=(%x,%x)\\n\", msg.message, msg.lParam, msg.wParam);\n\t\tif((msg.message >= WM_KEYFIRST) && (msg.message <= WM_KEYLAST)) break; // do not consume keyboard inputs\n\t\tif((msg.message >= WM_MOUSEFIRST) && (msg.message <= WM_MOUSELAST)) break; // do not consume mouse inputs\n\t\tPeekMessage(&msg, NULL, 0, 0, PM_REMOVE);\n\t\tTranslateMessage(&msg);\n\t\tDispatchMessage(&msg);\n\t}\n}\n\nvoid dxwCore::Mark(HDC hdc, BOOL scale, COLORREF color, int x, int y, int cx, int cy)\n{\n\tRECT frame;\n\tHBRUSH brush = CreateSolidBrush(color);\n\tframe.left = x; frame.top = y;\n\tframe.right = x+cx; frame.bottom = y+cy;\n\tif(scale) dxw.MapClient(&frame);\n\t(*pFrameRect)(hdc, &frame, brush);\n\tDeleteObject(brush);\n}\n\nvoid dxwCore::Mark(HDC hdc, BOOL scale, COLORREF color, RECT frame)\n{\n\tHBRUSH brush = CreateSolidBrush(color);\n\tif(scale) dxw.MapClient(&frame);\n\t(*pFrameRect)(hdc, &frame, brush);\n\tDeleteObject(brush);\n}"
  },
  {
    "path": "dll/dxwcore.hpp",
    "content": "#include <windows.h>\n#include \"syslibs.h\"\n\n#define DDSQLEN 0x20\n#define MAXFONTS 0x40\n\n#define WS_OVERLAPPEDTHIN   (WS_OVERLAPPED     | \\\n                             WS_CAPTION        | \\\n                             WS_SYSMENU        | \\\n                             WS_THICKFRAME     | \\\n                             WS_MINIMIZEBOX    | \\\n                             WS_MAXIMIZEBOX)\n\ntypedef struct {\n\tDWORD dwTimerType;\n\tunion{\n\t\tstruct {\n\t\t\tUINT uTimerId;\n\t\t\tUINT uDelay;\n\t\t\tUINT uResolution;\n\t\t\tLPTIMECALLBACK lpTimeProc;\n\t\t\tDWORD_PTR dwUser; \n\t\t\tUINT fuEvent;\n\t\t};\n\t\tstruct {\n\t\t\tHWND hWnd;\n\t\t\tUINT_PTR nIDEvent;\n\t\t\tUINT uElapse;\n\t\t\tTIMERPROC lpTimerFunc;\n\t\t};\n\t} t;\n} TimerEvent_Type;\n\ntypedef struct {\n\tLPDIRECTDRAWSURFACE lpdds;\n\tUSHORT\tuRef;\n\tUSHORT\tuRole;\n\tUSHORT\tuVersion;\n\tDWORD\tdwCaps;\n} SurfaceDB_Type;\n\ntypedef struct {\n\tLPDIRECTDRAWSURFACE lpdds;\n\tDWORD\tdwCaps;\n} CapsDB_Type;\n\ntypedef enum {\n\tSURFACE_ROLE_PRIMARY = 0,\n\tSURFACE_ROLE_BACKBUFFER,\n\tSURFACE_ROLE_ZBUFFER,\n\tSURFACE_ROLE_3DREF,\n\tSURFACE_ROLE_UNKNOWN\n} Enum_Surface_Role_Type;\n\ntypedef struct {\n\tHFONT font;\n\tHFONT scaled;\n} FontDB_Type;\n\nclass dxwCore\n{\n// Construction/destruction\npublic:\n    dxwCore();\n    virtual ~dxwCore();\n\n// Operations\npublic: // methods\n\tvoid InitTarget(TARGETMAP *);\n\tvoid SethWnd(HWND hwnd);\n\tvoid SethWnd(HWND hwnd, HWND hwndfps) {hWnd=hwnd; hWndFPS=hwndfps;}\n\tvoid InitWindowPos(int, int, int, int);\n\tHWND GethWnd(void) {return hWnd;}\n\tvoid SetScreenSize(void);\n\tvoid SetScreenSize(int x, int y);\n\tDWORD GetScreenWidth(void) {return dwScreenWidth;}\n\tDWORD GetScreenHeight(void) {return dwScreenHeight;}\n\tvoid SetFullScreen(BOOL);\n\tvoid SetFullScreen(BOOL, int);\n\tBOOL IsFullScreen();\n\tBOOL IsToRemap(HDC);\n\tBOOL IsDesktop(HWND);\n\tBOOL IsRealDesktop(HWND);\n\tPOINT FixCursorPos(POINT);\n\tvoid FixNCHITCursorPos(LPPOINT);\n\tvoid SetClipCursor(void);\n\tvoid EraseClipCursor(void);\n\tvoid InitializeClipCursorState(void);\n\tBOOL IsClipCursorActive(void);\n\tBOOL IsValidMainWindow();\n\tRECT MapWindowRect(LPRECT);\n\tRECT MapWindowRect(void);\n\tRECT MapClientRect(LPRECT);\n\tvoid MapClient(LPPOINT);\n\tvoid MapClient(LPRECT);\n\tvoid MapClient(int *, int *, int *, int *);\n\tvoid MapClient(int *, int *);\n\t//void MapClient(float *, float *);\n\tvoid UnmapClient(LPPOINT);\n\tvoid UnmapClient(int *, int *);\n\tvoid UnmapClient(int *, int *, int *, int *);\n\tvoid UnmapClient(LPRECT);\n\tvoid MapWindow(LPPOINT);\n\tvoid MapWindow(LPRECT);\n\tvoid MapWindow(int *, int *, int *, int *);\n\tvoid UnmapWindow(LPRECT);\n\tvoid UnmapWindow(LPPOINT);\n\tvoid FixWorkarea(LPRECT);\n\tvoid UpdateDesktopCoordinates();\n\tRECT GetScreenRect(void);\n\tRECT GetUnmappedScreenRect();\n\tRECT GetWindowRect(RECT);\n\tRECT GetClientRect(RECT);\n\tPOINT GetFrameOffset();\n\tPOINT AddCoordinates(POINT, POINT);\n\tRECT AddCoordinates(RECT, POINT);\n\tPOINT SubCoordinates(POINT, POINT);\n\tPOINT ClientOffset(HWND);\n\tvoid AutoScale();\n\tvoid ScreenRefresh(void);\n\tBOOL HandleFPS(void);\n\tBOOL ishWndFPS(HWND);\n\tDWORD GetTickCount(void);\n\tvoid GetSystemTime(LPSYSTEMTIME);\n\tvoid GetSystemTimeAsFileTime(LPFILETIME);\n\tDWORD StretchTime(DWORD);\n\tDWORD StretchCounter(DWORD);\n\tLARGE_INTEGER StretchCounter(LARGE_INTEGER);\n\tvoid ShowOverlay();\n\tvoid ShowOverlay(HDC);\n\tvoid ShowOverlay(HDC, int, int);\n\tvoid ShowOverlay(LPDIRECTDRAWSURFACE);\n\tchar *GetTSCaption(void);\n\tchar *GetTSCaption(int);\n\tvoid DoSlow(int);\n\tvoid ShowBanner(HWND);\n\tvoid HideDesktop(HWND);\n\tPOINT ScreenToClient(POINT);\n\tint GetDLLIndex(char *);\n\tvoid PushDLL(char *, int);\n\tvoid FixStyle(char *, HWND, WPARAM, LPARAM);\n\tvoid FixWindowFrame(HWND);\n\tDWORD FixWinStyle(DWORD);\n\tDWORD FixWinExStyle(DWORD);\n\tHDC AcquireEmulatedDC(HWND);\n\tBOOL ReleaseEmulatedDC(HWND);\n\tBOOL IsVirtual(HDC);\n\tvoid ResetEmulatedDC();\n\tint VirtualOffsetX, VirtualOffsetY, VirtualExtentX, VirtualExtentY;\n\tvoid DumpPalette(DWORD, LPPALETTEENTRY);\n\tvoid PushTimer(UINT, UINT, UINT, LPTIMECALLBACK, DWORD_PTR, UINT);\n\tvoid PushTimer(HWND, UINT_PTR, UINT, TIMERPROC);\n\tvoid PopTimer(UINT);\n\tvoid PopTimer(HWND, UINT_PTR);\n\tvoid RenewTimers();\n\tBOOL CheckScreenResolution(unsigned int, unsigned int);\n\tLARGE_INTEGER StretchLargeCounter(LARGE_INTEGER);\n\tUINT MapKeysConfig(UINT, LPARAM, WPARAM);\n\tvoid MapKeysInit();\n\tvoid SetVSyncDelays(UINT);\n\tvoid VSyncWait();\n\tvoid VSyncWaitLine(DWORD);\n\tvoid DumpDesktopStatus();\n\tvoid ToggleFreezedTime();\n\tvoid GetMonitorWorkarea(LPRECT, BOOL);\n\tvoid CalculateWindowPos(HWND, DWORD, DWORD, LPWINDOWPOS);\n\tvoid MessagePump(void);\n\tvoid Mark(HDC, BOOL, COLORREF, int, int, int, int);\n\tvoid Mark(HDC, BOOL, COLORREF, RECT);\n\npublic: // simple data variables\n\tint MonitorId;\n\tBOOL Windowize;\n\tBOOL IsVisible;\n\tBOOL IsEmulated;\n\tDDPIXELFORMAT ActualPixelFormat;\n\tDDPIXELFORMAT VirtualPixelFormat;\n\tDWORD dwDDVersion;\n\tDWORD dwTargetDDVersion;\n\tDWORD dwMaxDDVersion;\n\tDWORD MaxDdrawInterface;\n\tDWORD dwFlags1;\n\tDWORD dwFlags2;\n\tDWORD dwFlags3;\n\tDWORD dwFlags4;\n\tDWORD dwFlags5;\n\tDWORD dwFlags6;\n\tDWORD dwFlags7;\n\tDWORD dwFlags8;\n\tDWORD dwFlags9;\n\tDWORD dwFlags10;\n\tDWORD dwTFlags;\n\tHWND hParentWnd;\n\tHWND hChildWnd;\n\tBOOL bActive;\n\tBOOL bDInputAbs;\n\tDWORD MaxFPS;\n\tDWORD SwapEffect;\n\tchar *gsModules;\n\tint TimeShift;\n\tlong iPosX;\n\tlong iPosY;\n\tlong iSizX;\n\tlong iSizY;\n\tlong iPos0X;\n\tlong iPos0Y;\n\tlong iSiz0X;\n\tlong iSiz0Y;\n\tlong iMaxW;\n\tlong iMaxH;\n\tint iRatioX;\n\tint iRatioY;\n\tchar *CustomOpenGLLib;\n    WORD palVersion;\n    WORD palNumEntries;\n    PALETTEENTRY palPalEntry[256];\n\tshort FakeVersionId;\n\tshort Coordinates;\n\tshort MaxScreenRes;\n\tshort SlowRatio;\n\tshort ScanLine;\n\tHDC RealHDC;\n\tHDC VirtualHDC;\n\tint GDIEmulationMode;\n\tBOOL TimeFreeze;\n\tRECT VirtualDesktop;\n\tBOOL bHintActive;\n\tBOOL bAutoScale;\n\tDWORD dwRealScreenWidth;\n\tDWORD dwRealScreenHeight;\n\n// Implementation\nprotected:\n\tLONG dwScreenWidth;\n\tLONG dwScreenHeight;\n\tBOOL FullScreen;\n\tHWND hWnd, hWndFPS;\n\tHBITMAP VirtualPic;\n\tRECT VirtualPicRect;\n\nprivate:\n\tBOOL MustShowOverlay;\n\tvoid ShowFPS(HDC, int, int);\n\tvoid ShowTimeStretching(HDC, int, int);\n\tTimerEvent_Type TimerEvent;\n\tDWORD gdwRefreshRate;\n\t#define MAXREFRESHDELAYCOUNT 20\n\tint iRefreshDelays[MAXREFRESHDELAYCOUNT];\n\tint iRefreshDelayCount;\n\tBOOL ClipCursorToggleState;\n};\n\nclass dxwSStack\n{\npublic:\n    dxwSStack();\n    virtual ~dxwSStack();\n\npublic:\n\tchar *ExplainSurfaceRole(LPDIRECTDRAWSURFACE);\n\tvoid ClearSurfaceList();\n\tvoid PushPrimarySurface(LPDIRECTDRAWSURFACE, int, DWORD);\n\tBOOL IsAPrimarySurface(LPDIRECTDRAWSURFACE);\n\tvoid UnrefSurface(LPDIRECTDRAWSURFACE);\n\tLPDIRECTDRAWSURFACE GetPrimarySurface(void);\n\tvoid PushBackBufferSurface(LPDIRECTDRAWSURFACE, int, DWORD);\n\tBOOL IsABackBufferSurface(LPDIRECTDRAWSURFACE);\n\tLPDIRECTDRAWSURFACE GetZBufferSurface(void);\n\tvoid PushZBufferSurface(LPDIRECTDRAWSURFACE, int, DWORD);\n\tBOOL IsAZBufferSurface(LPDIRECTDRAWSURFACE);\n\tLPDIRECTDRAWSURFACE GetBackBufferSurface(void);\t\n\tvoid Push3DRefSurface(LPDIRECTDRAWSURFACE, int, DWORD);\n\tBOOL IsA3DRefSurface(LPDIRECTDRAWSURFACE);\n\tLPDIRECTDRAWSURFACE Get3DRefBufferSurface(void);\t\n\tvoid PopSurface(LPDIRECTDRAWSURFACE);\n\tDWORD DuplicateSurface(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, int);\n\tDWORD GetCaps(LPDIRECTDRAWSURFACE);\n\tSurfaceDB_Type *GetSurface(LPDIRECTDRAWSURFACE);\n\nprotected:\n\tSurfaceDB_Type SurfaceDB[DDSQLEN+1];\n\tLPDIRECTDRAWSURFACE lpDDSPrimary;\n\tLPDIRECTDRAWSURFACE lpDDSBackBuffer;\n\tLPDIRECTDRAWSURFACE lpDDSZBuffer;\n\tLPDIRECTDRAWSURFACE lpDDS3DRef;\n\nprivate:\n\tvoid PushSurface(LPDIRECTDRAWSURFACE, USHORT, USHORT, DWORD);\n\tLPDIRECTDRAWSURFACE GetSurfaceByRole(USHORT);\n\tvoid SetSurfaceEntry(LPDIRECTDRAWSURFACE, USHORT, USHORT);\n};\n\ntypedef struct {\n\tHWND hwnd;\n\tWNDPROC wndproc;\n\tint w;\n\tint h;\n} wndstack_entry;\n\nclass dxwWStack\n{\npublic:\n    dxwWStack();\n    virtual ~dxwWStack();\n\npublic:\n\tvoid Put(HWND, WNDPROC, int, int);\n\tvoid PutProc(HWND, WNDPROC);\n\tvoid PutSize(HWND, int, int);\n\tBOOL GetSize(HWND, int *, int *);\n\tWNDPROC GetProc(HWND);\n\nprivate:\n\twndstack_entry *WhndStack;\n\tint WhndTOS;\n\tint WhndSize;\n};\n\nclass dxwFStack\n{\npublic:\n    dxwFStack();\n    virtual ~dxwFStack();\n\npublic:\n\tvoid Push(HFONT, HFONT);\n\tHFONT GetScaledFont(HFONT);\n\tHFONT DeleteFont(HFONT);\n\nprotected:\n\tFontDB_Type *FontDB;\n};\n\nextern dxwCore dxw;\nextern dxwSStack dxwss;\nextern dxwWStack dxwws;\nextern dxwFStack fontdb;\n\ntypedef enum {\n\tSYSLIBIDX_KERNEL32 = 0,\n\tSYSLIBIDX_USER32,\n\tSYSLIBIDX_GDI32,\n\tSYSLIBIDX_IMELIB,\n\tSYSLIBIDX_ADVAPI32,\n\tSYSLIBIDX_OLE32,\n\tSYSLIBIDX_DIRECTDRAW,\n\tSYSLIBIDX_DIRECT3D8,\n\tSYSLIBIDX_DIRECT3D9,\n\tSYSLIBIDX_DIRECT3D10,\n\tSYSLIBIDX_DIRECT3D10_1,\n\tSYSLIBIDX_DIRECT3D11,\n\tSYSLIBIDX_OPENGL,\n\tSYSLIBIDX_MSVFW,\n\tSYSLIBIDX_DSOUND,\n\tSYSLIBIDX_WINMM,\n\tSYSLIBIDX_IMM32,\n\tSYSLIBIDX_DINPUT,\n\tSYSLIBIDX_DINPUT8,\n\tSYSLIBIDX_WINTRUST,\n\tSYSLIBIDX_DIRECT3D,\n\tSYSLIBIDX_DIRECT3D700,\n\tSYSLIBIDX_IMAGEHLP,\n\tSYSLIBIDX_COMDLG32,\n\tSYSLIBIDX_COMCTL32,\n\tSYSLIBIDX_AVIFIL32,\n\tSYSLIBIDX_GLIDE,\n\tSYSLIBIDX_GLIDE2,\n\tSYSLIBIDX_GLIDE3,\n\tSYSLIBIDX_SMACKW32,\n\tSYSLIBIDX_WING32,\n\tFREE6,\n\tSYSLIBIDX_MAX \n} \nenum_syslibraries;\n\n#ifdef SYSLIBNAMES_DEFINES\nchar *SysNames[]={\n\t\"kernel32\",\n\t\"USER32\",\n\t\"GDI32\",\n\t\"imelib\",\n\t\"ADVAPI32\",\n\t\"ole32\",\n\t\"ddraw\",\n\t\"d3d8\",\n\t\"d3d9\",\n\t\"d3d10\",\n\t\"d3d10_1\",\n\t\"d3d11\",\n\t\"opengl32\",\n\t\"msvfw32\",\n\t\"dsound\",\n\t\"winmm\",\n\t\"imm32\",\n\t\"dinput\",\n\t\"dinput8\",\n\t\"wintrust\",\n\t\"d3dim\",\n\t\"d3dim700\",\n\t\"imagehlp\",\n\t\"comdlg32\",\n\t\"comctl32\",\n\t\"AVIFIL32\",\n\t\"_\", \"_\", \"_\", \"_\", \"_\", \"_\", // 6 free slots \n\tNULL\n};\t\n#else\nextern char *SysNames[];\n#endif \n\nenum {\n\tHINT_HINT = 0,\n\tHINT_DDRAW,\t\tHINT_D3D8,\t\tHINT_D3D9,\t\tHINT_D3D10,\n\tHINT_D3D11,\t\tHINT_OPENGL,\tHINT_DSOUND,\tHINT_DINPUT,\n\tHINT_DINPUT8,\tHINT_MOVIES,\tHINT_D3D,\t\tHINT_IHLP,\n\tHINT_FAKEOS,\tHINT_OBFUSCATED,HINT_SAFEDISC,\tHINT_SECUROM,\n\tHINT_LIMITMEM,\tHINT_HOOKUPDATE,\n\tHINT_LAST\n};\n\nenum {\n\tDXVK_NONE=0,\n\tDXVK_CLIPTOGGLE,\n\tDXVK_REFRESH,\n\tDXVK_LOGTOGGLE,\n\tDXVK_PLOCKTOGGLE,\n\tDXVK_FPSTOGGLE,\n\tDXVK_TIMEFAST,\n\tDXVK_TIMESLOW,\n\tDXVK_TIMETOGGLE,\n\tDXVK_ALTF4,\n\tDXVK_PRINTSCREEN,\n\tDXVK_CORNERIZE,\n\tDXVK_FREEZETIME,\n\tDXVK_FULLSCREEN,\n\tDXVK_FAKEWORKAREA,\n\tDXVK_FAKEDESKTOP,\n\tDXVK_SIZE\n};\n\nenum {\n\tGDIMODE_NONE = 0,\n\tGDIMODE_STRETCHED,\n\tGDIMODE_EMULATED,\n\tGDIMODE_SHAREDDC\n};\n\ntypedef HRESULT (WINAPI *ColorConversion_Type)(int, LPDIRECTDRAWSURFACE, RECT, LPDIRECTDRAWSURFACE *);\nextern ColorConversion_Type pColorConversion;\nextern void ToggleAcquiredDevices(BOOL);\nextern GetWindowLong_Type pGetWindowLong;\nextern SetWindowLong_Type pSetWindowLong;"
  },
  {
    "path": "dll/dxwnd.cpp",
    "content": "/*\nDXWnd/dxwnd.cpp\nDirectX Hook Module\nCopyright(C) 2004-2016 SFB7/GHO\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n#define _CRT_SECURE_NO_WARNINGS\n\n#include <windows.h> \n#include <stdlib.h>\n#include <ctype.h>\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n\n#include \"TlHelp32.h\"\n\n#define VERSION \"2.04.21\"\n\n#define DDTHREADLOCK 1\n\nLRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam);\n\nHINSTANCE hInst;\nHHOOK hHook;\nHHOOK hMouseHook;\nHANDLE hMapping;\nTARGETMAP *pMapping;\nDXWNDSTATUS *pStatus;\nHANDLE hMutex;\nHANDLE hTraceMutex;\nHANDLE hLockMutex;\nHANDLE hDDLockMutex;\nHANDLE hKillMutex;\nint HookStatus=DXW_IDLE;\nstatic int TaskIndex=-1;\nDXWNDSTATUS DxWndStatus;\n\nvoid InjectHook(); \n\nBOOL APIENTRY DllMain( HANDLE hmodule, \n                       DWORD  dwreason, \n                       LPVOID preserved\n\t\t\t\t\t )\n{\n\tHANDLE hCurrentThread;\n\n\tif(dwreason == DLL_PROCESS_DETACH){\n\t\t//if(pInvalidateRect && pGetDesktopWindow) (*pInvalidateRect)((*pGetDesktopWindow)(), NULL, FALSE); // invalidate full desktop, no erase.\n\t\tif(pInvalidateRect) (*pInvalidateRect)(0, NULL, FALSE); // invalidate full desktop, no erase.\n\t\tUnmapViewOfFile(pMapping);\n\t\tCloseHandle(hMapping);\n\t}\n\n    if(dwreason != DLL_PROCESS_ATTACH) return TRUE;\n\n\thCurrentThread = GetCurrentThread();\n\tSetThreadPriority(hCurrentThread, THREAD_PRIORITY_HIGHEST); // trick to reduce concurrency problems at program startup\n\n\thInst = (HINSTANCE)hmodule;\n\t// optimization: disables DLL_THREAD_ATTACH and DLL_THREAD_DETACH notifications for the specified DLL\n\tDisableThreadLibraryCalls((HMODULE)hmodule);\n\thMapping = CreateFileMapping((HANDLE)0xffffffff, NULL, PAGE_READWRITE,\n\t\t0, sizeof(DxWndStatus)+sizeof(TARGETMAP)*MAXTARGETS, \"UniWind_TargetList\");\n\tif(!hMapping) {\n\t\tSetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL);\n\t\treturn false;\n\t}\n\t// v2.0.2.75: beware: some tasks (namely, Flash player) get dxwnd.dll loaded, but can't create the file mapping\n\t// this situation has to be intercepted, or it can cause the dll to cause faults that may crash the program.\n\tpStatus = (DXWNDSTATUS *)MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(DXWNDSTATUS)+sizeof(TARGETMAP)*MAXTARGETS);\n\tif(!pStatus) return false;\n\tpMapping = (TARGETMAP *)((char *)pStatus + sizeof(DXWNDSTATUS));\n\thMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, \"UniWind_Mutex\");\n\tif(!hMutex) hMutex = CreateMutex(0, FALSE, \"UniWind_Mutex\");\n\thTraceMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, \"Trace_Mutex\");\n\tif(!hTraceMutex) hTraceMutex = CreateMutex(0, FALSE, \"Trace_Mutex\");\n\thLockMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, \"Lock_Mutex\");\n\tif(!hLockMutex) hLockMutex = CreateMutex(0, FALSE, \"Lock_Mutex\");\n\tif(DDTHREADLOCK){\n\t\thDDLockMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, \"DDLock_Mutex\");\n\t\tif(!hDDLockMutex) hDDLockMutex = CreateMutex(0, FALSE, \"DDLock_Mutex\");\n\t}\n\tInjectHook();\n\n\tSetThreadPriority(hCurrentThread, THREAD_PRIORITY_NORMAL);\n\tCloseHandle(hCurrentThread);\n\treturn true;\n}\n\nstatic BOOL GetMultiTaskEnabling(){\n\tchar inipath[MAX_PATH];\n\tGetModuleFileName(GetModuleHandle(\"dxwnd\"), inipath, MAX_PATH);\n\tinipath[strlen(inipath)-strlen(\"dxwnd.dll\")] = 0; // terminate the string just before \"dxwnd.dll\"\n\tstrcat(inipath, \"dxwnd.ini\");\n\treturn GetPrivateProfileInt(\"window\", \"multiprocesshook\", 0, inipath);\n}\n\nint SetTarget(DXWNDSTATUS *statusmap, TARGETMAP *targets){\n\tint i;\n\tchar path[MAX_PATH+1];\n\n\tWaitForSingleObject(hMutex, INFINITE);\n\tpStatus->Status=DXW_IDLE;\n\tpStatus->IsFullScreen=FALSE;\n\tpStatus->TaskIdx=0;\n\tpStatus->hWnd=NULL;\n\tpStatus->ColorDepth=0;\n\tmemset((void *)&(pStatus->pfd), 0, sizeof(DDPIXELFORMAT));\n\tpStatus->Height = pStatus->Width = 0;\n\tpStatus->DXVersion = 0;\n\tpStatus->AllowMultiTask=GetMultiTaskEnabling();\n\t//pStatus->VJoyStatus=VJOYENABLED|CROSSENABLED|INVERTYAXIS;\n\tif(statusmap) {\n\t\tpStatus->VJoyStatus=statusmap->VJoyStatus;\n\t\tpStatus->VJoySensivity=statusmap->VJoySensivity;\n\t}\n\tfor(i = 0; targets[i].path[0]; i ++){\n\t\tchar *c;\n\t\tpMapping[i] = targets[i];\n\t\tc = targets[i].path;\n\t\tif(*c == '*')\n\t\t\tstrcpy(path, targets[i].path);\n\t\telse\n\t\t\tGetFullPathName(targets[i].path, MAX_PATH, path, NULL);\n\t\tfor(c = path; *c; c++) *c = tolower(*c);\n\t\tstrcpy(pMapping[i].path, path);\n\t}\n\tpMapping[i].path[0] = 0;\n\tReleaseMutex(hMutex);\n\treturn i;\n}\n\nint StartHook(void)\n{\n\thHook = SetWindowsHookEx(WH_CALLWNDPROC, HookProc, hInst, 0);\n\tHookStatus=DXW_ACTIVE;\n\treturn 0;\n}\n\nint EndHook(void)\n{\n\tUnhookWindowsHookEx(hHook);\n\tUnhookWindowsHookEx(hMouseHook);\n\tHookStatus=DXW_IDLE;\n\treturn 0;\n}\n\nvoid GetDllVersion(char *dest)\n{\n\tstrcpy_s(dest, strlen(VERSION)+1, VERSION);\n}\n\nint GetHookStatus(DXWNDSTATUS *s)\n{\n\tDWORD ret;\n\tret=WaitForSingleObject(hLockMutex, 0);\n\tReleaseMutex(hLockMutex);\n\tif(ret==WAIT_TIMEOUT) {\n\t\tif (s) *s = *pStatus;\n\t\treturn DXW_RUNNING;\n\t}\n\treturn HookStatus;\n}\n\nDXWNDSTATUS *GetHookInfo()\n{\n\treturn pStatus;\n}\n\nvoid SetFPS(int fps)\n{\n\tpStatus->FPSCount=fps;\n}\n\nLRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam)\n{\n\tchar name[MAX_PATH+1];\n\tHWND hwnd;\n\tint i;\n\tstatic int DoOnce = FALSE;\n\n\t// don't do more than once per process\n\tif(DoOnce) return CallNextHookEx(hHook, ncode, wparam, lparam);\n\n\t// take care here: if anything stops or delays the execution logic, the whole\n\t// operating system hangs, since it can't activate new windows!\n\n\t// could use WM_NCCREATE instead of WM_CREATE. Are there differences?\n\thwnd = ((CWPSTRUCT *)lparam)->hwnd;\n\tif(((CWPSTRUCT *)lparam)->message == WM_CREATE){\n\t\tint iNameLength;\n\t\tname[MAX_PATH]=0; // string terminator\n\t\tGetModuleFileName(0, name, MAX_PATH);\n\t\tfor(i = 0; name[i]; i ++) name[i] = tolower(name[i]);\n\t\tiNameLength = strlen(name);\n\t\tWaitForSingleObject(hMutex, INFINITE);\n\t\tfor(i = 0; pMapping[i].path[0] && (i<MAXTARGETS); i++){\n\t\t\tregister BOOL bMatched;\n\t\t\tif (!(pMapping[i].flags3 & HOOKENABLED)) continue;\n\t\t\tif(pMapping[i].path[0]=='*')\n\t\t\t\tbMatched=!strncmp(&name[iNameLength-strlen(pMapping[i].path)+1], &pMapping[i].path[1], iNameLength);\n\t\t\telse\n\t\t\t\tbMatched=!strncmp(name, pMapping[i].path, iNameLength);\n\t\t\tif(bMatched)\n\t\t\t{\n\t\t\t\t// V.68 late fix:\n\t\t\t\t// check for locking thread (and hook) just once per process.\n\t\t\t\t// This callback is invoked per each process' thread.\n\n\t\t\t\tDoOnce = TRUE;\n\t\t\t\textern HHOOK hHook;\n\t\t\t\tUnhookWindowsHookEx(hHook);\n\n\t\t\t\t// V.68: concurrency check. One game at a time, or exiting.\n\t\t\t\t// no good trying to insert fancy dialog boxes: the window\n\t\t\t\t// isn't ready yet, and the operation fails.\n\n\t\t\t\t// V2.03.07: allow multiple process hooking depending on config\n\t\t\t\tif(!(pStatus->AllowMultiTask)){\n\t\t\t\t\tif(WaitForSingleObject(hLockMutex, 0)==WAIT_TIMEOUT){\n\t\t\t\t\t\tReleaseMutex(hMutex);\n\t\t\t\t\t\texit(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tWaitForSingleObject(hLockMutex, 0);\n\n\t\t\t\tpStatus->Status=DXW_RUNNING;\n\t\t\t\tpStatus->TaskIdx=i;\n\t\t\t\tpStatus->OrigIdx=pMapping[i].index;\n\t\t\t\tpStatus->IsFullScreen=FALSE;\n\t\t\t\tpStatus->hWnd=hwnd;\n\t\t\t\tpStatus->dwPid=GetProcessId(GetCurrentProcess());\n\t\t\t\tpStatus->TimeShift=pMapping[i].InitTS;\n\t\t\t\tpStatus->CursorX = pStatus->CursorY = 0;\n\t\t\t\tmemset((void *)&(pStatus->pfd), 0, sizeof(DDPIXELFORMAT));\n\t\t\t\tDxWndStatus = *pStatus;\n\t\t\t\tHookInit(&pMapping[i], hwnd);\n\t\t\t}\n\t\t}\n\t\tReleaseMutex(hMutex);\n\t}\n\treturn CallNextHookEx(hHook, ncode, wparam, lparam);\n}\n\nvoid UnhookProc()\n{\n\t// used to unhook DxWnd from the current process and allow another one (a son) to be managed\n\t//ReleaseMutex(hMutex);\n\tReleaseMutex(hLockMutex);\n\tUnmapViewOfFile(pMapping);\n\tCloseHandle(hMapping);\n}\n\nvoid InjectHook()\n{\n\tchar name[MAX_PATH+1];\n\tint i;\n\tGetModuleFileName(0, name, MAX_PATH);\n\tname[MAX_PATH]=0; // terminator\n\tfor(char *c = name; *c; c++) *c = tolower(*c);\n\tfor(i = 0; pMapping[i].path[0]; i ++){\n\t\t\tif(pMapping[i].flags3 & HOOKENABLED){\n\t\t\t\tif(!strncmp(name, pMapping[i].path, strlen(name))){\n\t\t\t\tif ((pMapping[i].flags2 & STARTDEBUG) || (pMapping[i].flags7 & INJECTSUSPENDED)) {\n\t\t\t\t\tHookInit(&pMapping[i],NULL);\n\t\t\t\t\t// beware: logging is possible only AFTER HookInit execution\n\t\t\t\t\tOutTrace(\"InjectHook: task[%d]=\\\"%s\\\" hooked\\n\", i, pMapping[i].path);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\nstatic char *FlagNames[11][32] ={{\n\t// Flags1\n\t\"UNNOTIFY\", \"EMULATESURFACE\", \"CLIPCURSOR\", \"NEEDADMINCAPS\",\n\t\"HOOKDI\", \"MODIFYMOUSE\", \"HANDLEEXCEPTIONS\", \"SAVELOAD\",\n\t\"EMULATEBUFFER\", \"HOOKDI8\", \"BLITFROMBACKBUFFER\", \"SUPPRESSCLIPPING\",\n\t\"AUTOREFRESH\", \"FIXWINFRAME\", \"HIDEHWCURSOR\", \"SLOWDOWN\",\n\t\"DISABLECLIPPING\", \"LOCKWINSTYLE\", \"MAPGDITOPRIMARY\", \"FIXTEXTOUT\",\n\t\"KEEPCURSORWITHIN\", \"USERGB565\", \"SUPPRESSDXERRORS\", \"PREVENTMAXIMIZE\",\n\t\"LOCKEDSURFACE\", \"FIXPARENTWIN\", \"SWITCHVIDEOMEMORY\", \"CLIENTREMAPPING\",\n\t\"HANDLEALTF4\", \"LOCKWINPOS\", \"HOOKCHILDWIN\", \"MESSAGEPROC\"\n\t},{\n\t// Flags2\n\t\"RECOVERSCREENMODE\", \"REFRESHONRESIZE\", \"BACKBUFATTACH\", \"MODALSTYLE\",\n\t\"KEEPASPECTRATIO\", \"INIT8BPP\", \"FORCEWINRESIZE\", \"INIT16BPP\",\n\t\"KEEPCURSORFIXED\", \"DISABLEGAMMARAMP\", \"INDEPENDENTREFRESH\", \"FIXNCHITTEST\",\n\t\"LIMITFPS\", \"SKIPFPS\", \"SHOWFPS\", \"HIDEMULTIMONITOR\",\n\t\"TIMESTRETCH\", \"HOOKOPENGL\", \"LOCKEDSIZE\", \"SHOWHWCURSOR\",\n\t\"GDISTRETCHED\", \"SHOWFPSOVERLAY\", \"FAKEVERSION\", \"FULLRECTBLT\",\n\t\"NOPALETTEUPDATE\", \"SUPPRESSIME\", \"NOBANNER\", \"WINDOWIZE\",\n\t\"LIMITRESOURCES\", \"STARTDEBUG\", \"SETCOMPATIBILITY\", \"WIREFRAME\",\n\t},{\n\t// Flags3\n\t\"FORCEHOOKOPENGL\", \"MARKBLIT\", \"HOOKDLLS\", \"SUPPRESSD3DEXT\",\n\t\"HOOKENABLED\", \"FIXD3DFRAME\", \"FORCE16BPP\", \"BLACKWHITE\",\n\t\"MARKLOCK\", \"SINGLEPROCAFFINITY\", \"EMULATEREGISTRY\", \"CDROMDRIVETYPE\",\n\t\"NOWINDOWMOVE\", \"FORCECLIPPER\", \"LOCKSYSCOLORS\", \"GDIEMULATEDC\",\n\t\"FULLSCREENONLY\", \"FONTBYPASS\", \"MINIMALCAPS\", \"DEFAULTMESSAGES\",\n\t\"BUFFEREDIOFIX\", \"FILTERMESSAGES\", \"PEEKALLMESSAGES\", \"SURFACEWARN\",\n\t\"ANALYTICMODE\", \"FORCESHEL\", \"CAPMASK\", \"COLORFIX\",\n\t\"NODDRAWBLT\", \"NODDRAWFLIP\", \"NOGDIBLT\", \"NOPIXELFORMAT\",\n\t},{\n\t// Flags4\n\t\"NOALPHACHANNEL\", \"SUPPRESSCHILD\", \"FIXREFCOUNTER\", \"SHOWTIMESTRETCH\",\n\t\"ZBUFFERCLEAN\", \"ZBUFFER0CLEAN\", \"ZBUFFERALWAYS\", \"DISABLEFOGGING\",\n\t\"NOPOWER2FIX\", \"NOPERFCOUNTER\", \"BILINEAR2XFILTER\", \"INTERCEPTRDTSC\",\n\t\"LIMITSCREENRES\", \"NOFILLRECT\", \"HOOKGLIDE\", \"HIDEDESKTOP\",\n\t\"STRETCHTIMERS\", \"NOFLIPEMULATION\", \"NOTEXTURES\", \"RETURNNULLREF\",\n\t\"FINETIMING\", \"NATIVERES\", \"SUPPORTSVGA\", \"SUPPORTHDTV\",\n\t\"RELEASEMOUSE\", \"ENABLETIMEFREEZE\", \"HOTPATCH\", \"ENABLEHOTKEYS\",\n\t\"HOTPATCHALWAYS\", \"NOD3DRESET\", \"OVERRIDEREGISTRY\", \"HIDECDROMEMPTY\",\n\t},{\n\t// Flags5\n\t\"DIABLOTWEAK\", \"CLEARTARGET\", \"NOWINPOSCHANGES\", \"ANSIWIDE\",\n\t\"NOBLT\", \"USELASTCORE\", \"DOFASTBLT\", \"AEROBOOST\",\n\t\"QUARTERBLT\", \"NOIMAGEHLP\", \"BILINEARFILTER\", \"REPLACEPRIVOPS\",\n\t\"REMAPMCI\", \"TEXTUREHIGHLIGHT\", \"TEXTUREDUMP\", \"TEXTUREHACK\",\n\t\"TEXTURETRANSP\", \"NORMALIZEPERFCOUNT\", \"HYBRIDMODE\", \"GDICOLORCONV\",\n\t\"INJECTSON\", \"ENABLESONHOOK\", \"FREEZEINJECTEDSON\", \"GDIMODE\",\n\t\"CENTERTOWIN\", \"STRESSRESOURCES\", \"MESSAGEPUMP\", \"TEXTUREFORMAT\", \n\t\"DEINTERLACE\", \"LOCKRESERVEDPALETTE\", \"UNLOCKZORDER\", \"EASPORTSHACK\",\n\t},{\n\t// Flags6\n\t\"FORCESWAPEFFECT\", \"LEGACYALLOC\", \"NODESTROYWINDOW\", \"NOMOVIES\",\n\t\"SUPPRESSRELEASE\", \"FIXMOVIESCOLOR\", \"WOW64REGISTRY\", \"DISABLEMAXWINMODE\",\n\t\"FIXPITCH\", \"POWER2WIDTH\", \"HIDETASKBAR\", \"ACTIVATEAPP\",\n\t\"NOSYSMEMPRIMARY\", \"NOSYSMEMBACKBUF\", \"CONFIRMONCLOSE\", \"TERMINATEONCLOSE\",\n\t\"FLIPEMULATION\", \"SETZBUFFERBITDEPTHS\", \"SHAREDDC\", \"WOW32REGISTRY\",\n\t\"STRETCHMOVIES\", \"BYPASSMCI\", \"FIXPIXELZOOM\", \"---REUSEEMULATEDDC---\",\n\t\"CREATEDESKTOP\", \"NOWINDOWHOOKS\", \"SYNCPALETTE\", \"VIRTUALJOYSTICK\",\n\t\"UNACQUIRE\", \"HOOKGOGLIBS\", \"BYPASSGOGLIBS\", \"EMULATERELMOUSE\",\n\t},{\n\t// Flags7\n\t\"LIMITDDRAW\", \"DISABLEDISABLEALTTAB\", \"FIXCLIPPERAREA\", \"HOOKDIRECTSOUND\",\n\t\"HOOKSMACKW32\", \"BLOCKPRIORITYCLASS\", \"CPUSLOWDOWN\", \"CPUMAXUSAGE\",\n\t\"NOWINERRORS\", \"SUPPRESSOVERLAY\", \"INIT24BPP\", \"INIT32BPP\",\n\t\"FIXGLOBALUNLOCK\", \"SHOWHINTS\", \"SKIPDEVTYPEHID\", \"INJECTSUSPENDED\",\n\t\"SSUPPRESSDIERRORS\", \"HOOKNORUN\", \"FIXBINDTEXTURE\", \"ENUM16BITMODES\",\n\t\"SHAREDKEYBOARD\", \"HOOKNOUPDATE\", \"HOOKGLUT32\", \"INITIALRES\",\n\t\"MAXIMUMRES\", \"LOCKCOLORDEPTH\", \"FIXSMACKLOOP\", \"FIXFREELIBRARY\",\n\t\"ANCHORED\", \"CLEARTEXTUREFOURCC\", \"NODDEXCLUSIVEMODE\", \"COPYNOSHIMS\",\n\t},{\n\t// Flags8\n\t\"FORCEWAIT\", \"FORCENOWAIT\", \"FORCEVSYNC\", \"FORCENOVSYNC\",\n\t\"VSYNCSCANLINES\", \"TRIMTEXTUREFORMATS\", \"NOHALDEVICE\", \"CLIPLOCK\",\n\t\"PRETENDVISIBLE\", \"RAWFORMAT\", \"WININSULATION\", \"FIXMOUSEHOOK\",\n\t\"DDSFORMAT\", \"HOOKWING32\", \"SEQUENCEDIAT\", \"D3D8BACK16\",\n\t\"MARKWING32\", \"DYNAMICZCLEAN\", \"MARKGDI32\", \"DUMPDIBSECTION\",\n\t\"DUMPDEVCONTEXT\", \"QUALITYFONTS\", \"ALLOWSYSMEMON3DDEV\", \"CLIPMENU\",\n\t\"BACKGROUNDPRIORITY\", \"OFFSCREENZBUFFER\", \"VIRTUALHEAP\", \"ZBUFFERHARDCLEAN\",\n\t\"LOADLIBRARYERR\", \"SHAREDDCHYBRID\", \"FIXADJUSTWINRECT\", \"HOOKDLGWIN\",\n\t},{\n\t// Flags9\n\t\"FIXTHINFRAME\", \"\", \"\", \"\",\n\t\"\", \"\", \"\", \"\",\n\t\"\", \"\", \"\", \"\",\n\t\"\", \"\", \"\", \"\",\n\t\"\", \"\", \"\", \"\",\n\t\"\", \"\", \"\", \"\",\n\t\"\", \"\", \"\", \"\",\n\t\"\", \"\", \"\", \"\",\t},{\n\t// Flags10\n\t\"\", \"\", \"\", \"\",\n\t\"\", \"\", \"\", \"\",\n\t\"\", \"\", \"\", \"\",\n\t\"\", \"\", \"\", \"\",\n\t\"\", \"\", \"\", \"\",\n\t\"\", \"\", \"\", \"\",\n\t\"\", \"\", \"\", \"\",\n\t\"\", \"\", \"\", \"\",\t},{\n\t// TFlags\n\t\"OUTTRACE\", \"OUTDDRAWTRACE\", \"OUTWINMESSAGES\", \"OUTCURSORTRACE\",\n\t\"OUTSEPARATED\", \"**\", \"ASSERTDIALOG\", \"OUTIMPORTTABLE\",\n\t\"OUTDEBUG\", \"OUTREGISTRY\", \"TRACEHOOKS\", \"OUTD3DTRACE\",\n\t\"OUTDXWINTRACE\", \"OUTWINGTRACE\", \"OUTOGLTRACE\", \"\",\n\t\"\", \"\", \"\", \"\",\n\t\"\", \"\", \"\", \"\",\n\t\"\", \"\", \"\", \"ADDRELATIVETIME\",\n\t\"**\", \"ADDTIMESTAMP\", \"OUTDEBUGSTRING\", \"ERASELOGFILE\",\n\t}};\n\nLPCSTR GetFlagCaption(int flag, int bit)\n{\n\t//if((flag<0) || (flag>(9*32))) return \"\";\n\t//return FlagNames[flag >> 5][flag & 0x1F];\n\tif((flag<0) || (flag>10)) return \"\";\n\tif((bit<0) || (bit>31)) return \"\";\n\treturn FlagNames[flag][bit];\n}"
  },
  {
    "path": "dll/dxwnd.def",
    "content": "LIBRARY dxwnd\nEXPORTS\n\t\tSetTarget\t\t\t\t@1\n\t\tStartHook\t\t\t\t@2\n\t\tEndHook\t\t\t\t\t@3\n\t\tGetDllVersion\t\t\t@4\n\t\tGetHookStatus\t\t\t@5\n\t\tGetHookInfo\t\t\t\t@6\n\t\tInject\t\t\t\t\t@7\n\t\tGetThreadStartAddress\t@8\n\t\tGetFlagCaption\t\t\t@9\n"
  },
  {
    "path": "dll/dxwnd.dll.manifest",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\" xmlns:asmv3=\"urn:schemas-microsoft-com:asm.v3\">\n    <assemblyIdentity version=\"1.0.0.0\" processorArchitecture=\"X86\" name=\"dxwnd\" type=\"win32\"/>\n    <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <security>\n            <requestedPrivileges>\n                <requestedExecutionLevel\n                    level=\"asInvoker\"\n                    uiAccess=\"false\"\n                />\t\n            </requestedPrivileges>\n        </security>\n    </trustInfo>\n    <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\"> \n        <application> \n            <!-- Windows 10 --> \n            <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\"/>\n            <!-- Windows 8.1 -->\n            <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\"/>\n            <!-- Windows Vista -->\n            <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\"/> \n            <!-- Windows 7 -->\n            <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\"/>\n            <!-- Windows 8 -->\n            <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\"/>\n        </application> \n    </compatibility>\n</assembly>\n"
  },
  {
    "path": "dll/dxwnd.rc",
    "content": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 2 resource.\n//\n#include \"afxres.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n#undef APSTUDIO_READONLY_SYMBOLS\n\n/////////////////////////////////////////////////////////////////////////////\n// English (U.S.) resources\n\n#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\n#ifdef _WIN32\nLANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\n#pragma code_page(1252)\n#endif //_WIN32\n\n#ifdef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// TEXTINCLUDE\n//\n\n1 TEXTINCLUDE \nBEGIN\n    \"resource.h\\0\"\nEND\n\n2 TEXTINCLUDE \nBEGIN\n    \"#include \"\"afxres.h\"\"\\r\\n\"\n    \"\\0\"\nEND\n\n3 TEXTINCLUDE \nBEGIN\n    \"\\r\\n\"\n    \"\\0\"\nEND\n\n#endif    // APSTUDIO_INVOKED\n\n\n/////////////////////////////////////////////////////////////////////////////\n//\n// Bitmap\n//\n\nIDB_BANNER              BITMAP                  \"dxwbanner.bmp\"\nIDB_CROSS               BITMAP                  \"cross.bmp\"\nIDB_FIRE1               BITMAP                  \"fire1.bmp\"\nIDB_FIRE2               BITMAP                  \"fire2.bmp\"\nIDB_FIRE3               BITMAP                  \"fire3.bmp\"\nIDB_JOYCENTER           BITMAP                  \"center.bmp\"\n\n#endif    // English (U.S.) resources\n/////////////////////////////////////////////////////////////////////////////\n\n\n\n#ifndef APSTUDIO_INVOKED\n/////////////////////////////////////////////////////////////////////////////\n//\n// Generated from the TEXTINCLUDE 3 resource.\n//\n\n\n/////////////////////////////////////////////////////////////////////////////\n#endif    // not APSTUDIO_INVOKED\n\n"
  },
  {
    "path": "dll/dxwnd.vs2008.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"dxwnd\", \"dxwnd.vs2008.vcproj\", \"{579E7FE7-2745-4100-A802-23511711FCDE}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "dll/dxwnd.vs2008.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"dxwnd\"\n\tProjectGUID=\"{579E7FE7-2745-4100-A802-23511711FCDE}\"\n\tRootNamespace=\"dxwnd\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t\tDescription=\"embed manifest\"\n\t\t\t\tCommandLine=\"mt.exe -nologo -manifest dxwnd.dll.manifest -outputresource:&quot;../Debug/dxwnd.dll;#1&#x0D;&#x0A;\"\n\t\t\t\tOutputs=\"manifest.out.txt\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/dxwnd.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tAdditionalOptions=\"/IInclude\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\".;../Include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS;_USRDLL;DXWND_EXPORTS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tExceptionHandling=\"2\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/dxwnd.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"shlwapi.lib odbc32.lib odbccp32.lib libMinHook.x86.lib OpenGl32.lib\"\n\t\t\t\tOutputFile=\"../Debug/dxwnd.dll\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tAdditionalLibraryDirectories=\"\"\n\t\t\t\tIgnoreAllDefaultLibraries=\"false\"\n\t\t\t\tIgnoreDefaultLibraryNames=\"\"\n\t\t\t\tModuleDefinitionFile=\".\\dxwnd.def\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/dxwnd.pdb\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\".\\Debug/dxwnd.lib\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/dxwnd.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t\tDescription=\"embed manifest\"\n\t\t\t\tCommandLine=\"mt.exe -nologo -manifest dxwnd.dll.manifest -outputresource:&quot;../Release/dxwnd.dll;#1&#x0D;&#x0A;\"\n\t\t\t\tOutputs=\"manifest.out.txt\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/dxwnd.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"../Include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS;_USRDLL;DXWND_EXPORTS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"2\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tOpenMP=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/dxwnd.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\" libMinHook.x86.lib OpenGl32.lib\"\n\t\t\t\tOutputFile=\"../Release/dxwnd.dll\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tGenerateManifest=\"false\"\n\t\t\t\tManifestFile=\"\"\n\t\t\t\tModuleDefinitionFile=\".\\dxwnd.def\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/dxwnd.pdb\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\".\\Release/dxwnd.lib\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/dxwnd.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\advapi.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\avifile.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\comctl32.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\comdlg32.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\cpulimit.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\d3dtexture.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ddblit.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ddcreates.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ddraw.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ddrawex.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ddshot.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ddtexture.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dibdump.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dinput.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dsound.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dwhide.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dxdiaghook.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dxemublt.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dxhelper.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"dxhook.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dxmapping.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dxwcore.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"dxwnd.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"dxwnd.def\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dxwnd.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dxwsstack.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dxwwstack.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\emulateddc.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\fontstack.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\gdi32.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\gdiblt.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\glide.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"hd3d.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\hd3d7.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\hd3d8.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\hd3d9.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\hexdump.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\hint.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\hotpatch.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\iatpatch.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\imagehlp.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\imelib.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Inject.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\kernel32.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\mincaps.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\msghook.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\msims32.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\msvfw.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ole32.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\opengl.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\queryint.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\shareddc.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\smack.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\supmodes.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\toggle_fs.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\user32.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\wing32.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\winmm.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\winproc.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\wintrust.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dxdds.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dxhelper.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"dxhook.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dxwcore.hpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Include\\dxwnd.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\glhook.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\glidehook.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\hd3d.doc.hpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\hddraw.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\logall.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\msvfwhook.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\rad.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\shareddc.hpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\smack.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\stb_dxt.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\syslibs.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\bitmap1.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\bitmap2.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\bmp00001.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\bmp00002.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\cross.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dxwbanner.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\fire1.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\fire2.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "dll/dxwsstack.cpp",
    "content": "/* ------------------------------------------------------------------ */\n// DirectDraw Surface Stack implementation\n/* ------------------------------------------------------------------ */\n\n#define _CRT_SECURE_NO_WARNINGS\n\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n\n// uncomment line below to activate surface stack tracing\n//#define DXW_SURFACE_STACK_TRACING\n\n#define OutTraceSDB OutTrace\n\ndxwSStack::dxwSStack()\n{\n\t// three variables used as cache ...\n\tlpDDSPrimary = NULL;\n\tlpDDSBackBuffer = NULL;\n\tlpDDSZBuffer = NULL;\n\tlpDDS3DRef = NULL;\n\tmemset(SurfaceDB, 0, sizeof(SurfaceDB));\n}\n\ndxwSStack::~dxwSStack()\n{\n}\n\nstatic char *sRole(USHORT role)\n{\n\tchar *s;\n\tswitch (role){\n\t\tcase SURFACE_ROLE_PRIMARY: s=\"(PRIM)\"; break;\n\t\tcase SURFACE_ROLE_BACKBUFFER: s=\"(BACK)\"; break;\n\t\tcase SURFACE_ROLE_ZBUFFER: s=\"(ZBUF)\"; break;\n\t\tcase SURFACE_ROLE_3DREF: s=\"(3DREF)\"; break;\n\t\tdefault: s=\"??\"; break; // should never happen ...\n\t}\n\treturn s;\n}\n\n#ifdef DXW_SURFACE_STACK_TRACING\nextern char*ExplainDDSCaps(DWORD);\nstatic void CheckSurfaceList(SurfaceDB_Type *SurfaceDB)\n{\n\tchar sMsg[81];\n\tint iPCount = 0;\n\tint iBCount = 0;\n\tint iZCount = 0;\n\tfor (int i=0;i<DDSQLEN;i++) {\n\t\tif (SurfaceDB[i].lpdds == NULL) break;\n\t\tif ((SurfaceDB[i].uRole == SURFACE_ROLE_PRIMARY)\t&& SurfaceDB[i].uRef) iPCount++;\n\t\tif ((SurfaceDB[i].uRole == SURFACE_ROLE_BACKBUFFER) && SurfaceDB[i].uRef) iBCount++;\n\t\tif ((SurfaceDB[i].uRole == SURFACE_ROLE_ZBUFFER)    && SurfaceDB[i].uRef) iZCount++;\n\t}\n\tif(iPCount > 1) {\n\t\tsprintf(sMsg, \"Primary count = %d\", iPCount);\n\t\tMessageBox(0, sMsg, \"DxWnd SurfaceList\", MB_OK | MB_ICONEXCLAMATION);\n\t}\n\tif(iBCount > 1) {\n\t\tsprintf(sMsg, \"Backbuffer count = %d\", iPCount);\n\t\tMessageBox(0, sMsg, \"DxWnd SurfaceList\", MB_OK | MB_ICONEXCLAMATION);\n\t}\n\tif(iZCount > 1) {\n\t\tsprintf(sMsg, \"Zbuffer count = %d\", iZCount);\n\t\tMessageBox(0, sMsg, \"DxWnd SurfaceList\", MB_OK | MB_ICONEXCLAMATION);\n\t}\n}\n\nstatic void DumpSurfaceList(SurfaceDB_Type *SurfaceDB)\n{\n\tfor (int i=0;i<DDSQLEN;i++) {\n\t\tif (SurfaceDB[i].lpdds == NULL) break;\n\t\tOutTrace(\"--- SURFACELIST DUMP: i=%d lpssd=%x%s ref=%d vers=%d caps=%x(%s)\\n\", i, \n\t\t\tSurfaceDB[i].lpdds, sRole(SurfaceDB[i].uRole), SurfaceDB[i].uRef, SurfaceDB[i].uVersion,\n\t\t\tSurfaceDB[i].dwCaps, ExplainDDSCaps(SurfaceDB[i].dwCaps));\n\t}\n}\n#endif\n\nchar *dxwSStack::ExplainSurfaceRole(LPDIRECTDRAWSURFACE ps)\n{\n\tint i;\n\tfor (i=0;i<DDSQLEN;i++) {\n\t\tif (SurfaceDB[i].lpdds==ps) return sRole(SurfaceDB[i].uRole);\n\t\tif (SurfaceDB[i].lpdds==0) break;\n\t}\n\t// this should NEVER happen, but ...\n\textern LPDIRECTDRAWSURFACE lpDDSEmu_Back, lpDDSEmu_Prim;\n\tif(lpDDSEmu_Back && (ps==lpDDSEmu_Back)) return \"(emu.BACK)\";\n\tif(lpDDSEmu_Prim && (ps==lpDDSEmu_Prim)) return \"(emu.PRIM)\";\n\t// ... just in case!\n\treturn \"\";\n}\n\nvoid dxwSStack::ClearSurfaceList()\n{\n#ifdef DXW_SURFACE_STACK_TRACING\n\tOutTrace(\">>> SURFACELIST CLEAR UNREF\\n\");\n#endif\n\t// v2.03.91.fx5: emptying the list entirely is no good for \"Warhammer 40K Rites of War\"\n\t// better leave the last used primary and backbuffer surfaces.\n\tint i, j;\n\tSurfaceDB_Type NewEntries[DDSQLEN];\n\tlpDDSPrimary = NULL;\n\tlpDDSBackBuffer = NULL;\n\tlpDDSZBuffer = NULL;\n\tlpDDS3DRef = NULL;\n\t// search for valid entries and copy to safe place\n\tfor (i=0, j=0; i<DDSQLEN; i++) {\n\t\tif(SurfaceDB[i].lpdds == NULL) break;\n\t\tif(SurfaceDB[i].uRef) NewEntries[j++]=SurfaceDB[i];\n\t}\n\tNewEntries[j].lpdds = NULL; // terminator\n\t// move back to original list\n\tfor (i=0; i<DDSQLEN; i++) {\n\t\tif(NewEntries[i].lpdds == NULL) break;\n\t\tSurfaceDB[i]=NewEntries[i];\n\t\tswitch(SurfaceDB[i].uRole){\n\t\t\tcase SURFACE_ROLE_PRIMARY: lpDDSPrimary = SurfaceDB[i].lpdds; break;\n\t\t\tcase SURFACE_ROLE_BACKBUFFER: lpDDSBackBuffer = SurfaceDB[i].lpdds; break;\n\t\t\tcase SURFACE_ROLE_ZBUFFER: lpDDSZBuffer = SurfaceDB[i].lpdds; break;\n\t\t}\n\t}\n\tSurfaceDB[i].lpdds = 0; // terminator\n#ifdef DXW_SURFACE_STACK_TRACING\n\tDumpSurfaceList(SurfaceDB);\n#endif\n}\n\nvoid dxwSStack::UnrefSurface(LPDIRECTDRAWSURFACE ps)\n{\n\tint i;\n\t// look for entry\n\tfor (i=0;i<DDSQLEN;i++) \n\t\tif ((SurfaceDB[i].lpdds==ps) || SurfaceDB[i].lpdds==0) break; \n\t// if found, delete it by left-copying each entry until end of array\n\tif (SurfaceDB[i].lpdds == ps) {\n\t\tSurfaceDB[i].uRef = FALSE;\n#ifdef DXW_SURFACE_STACK_TRACING\n\t\tOutTraceSDB(\">>> SURFACELIST UNREF: lpdds=%x%s ref=%x vers=%d\\n\", ps, sRole(SurfaceDB[i].uRole), SurfaceDB[i].uRef, SurfaceDB[i].uVersion);\n#endif\n\t}\n#ifdef DXW_SURFACE_STACK_TRACING\n\tDumpSurfaceList(SurfaceDB);\n#endif\n}\n\nvoid dxwSStack::PushSurface(LPDIRECTDRAWSURFACE ps, USHORT role, USHORT version, DWORD dwCaps)\n{\n\tint i;\n\tSurfaceDB_Type *e;\n#ifdef DXW_SURFACE_STACK_TRACING\n\tOutTraceSDB(\">>> SURFACELIST MARK: lpdds=%x%s vers=%d\\n\", ps, sRole(role), version);\n#endif\n\tfor (i=0;i<DDSQLEN;i++) {\n\t\te=&SurfaceDB[i];\n\t\tif ((e->lpdds==ps) || (e->lpdds==(DWORD)0)) break; // got matching entry or end of the list\n\t}\n\tif(i == DDSQLEN) {\n\t\t//MessageBox(0, \"Surface stack is full\", \"DxWnd SurfaceList\", MB_OK | MB_ICONEXCLAMATION);\n\t\t//return;\n\t\tfor(int j=0;j<DDSQLEN-1;j++) SurfaceDB[j]=SurfaceDB[j+1]; // scale down the whole stack one entry\n\t\te=&SurfaceDB[DDSQLEN-1];\n\t}\n\te->lpdds=ps;\n\te->uRole = role;\n\te->uRef = TRUE;\n\te->uVersion = version;\n\te->dwCaps = dwCaps;\n\tswitch(e->uRole){\n\t\tcase SURFACE_ROLE_PRIMARY: lpDDSPrimary = e->lpdds; break;\n\t\tcase SURFACE_ROLE_BACKBUFFER: lpDDSBackBuffer = e->lpdds; break;\n\t\tcase SURFACE_ROLE_ZBUFFER: lpDDSZBuffer = e->lpdds; break;\n\t}\n#ifdef DXW_SURFACE_STACK_TRACING\n\tDumpSurfaceList(SurfaceDB);\n#endif\n}\n\t\nvoid dxwSStack::PushPrimarySurface(LPDIRECTDRAWSURFACE ps, int version, DWORD dwCaps)\n{\n\tPushSurface(ps, SURFACE_ROLE_PRIMARY, (USHORT)version, dwCaps);\n}\n\nvoid dxwSStack::PushBackBufferSurface(LPDIRECTDRAWSURFACE ps, int version, DWORD dwCaps)\n{\n\tPushSurface(ps, SURFACE_ROLE_BACKBUFFER, (USHORT)version, dwCaps);\n}\n\nvoid dxwSStack::PushZBufferSurface(LPDIRECTDRAWSURFACE ps, int version, DWORD dwCaps)\n{\n\tPushSurface(ps, SURFACE_ROLE_ZBUFFER, (USHORT)version, dwCaps);\n}\n\nvoid dxwSStack::Push3DRefSurface(LPDIRECTDRAWSURFACE ps, int version, DWORD dwCaps)\n{\n\tPushSurface(ps, SURFACE_ROLE_3DREF, (USHORT)version, dwCaps);\n}\n\nDWORD dxwSStack::DuplicateSurface(LPDIRECTDRAWSURFACE psfrom, LPDIRECTDRAWSURFACE psto, int version)\n{\n\tint i;\n\tSurfaceDB_Type *e;\n\tSurfaceDB_Type sentry;\n#ifdef DXW_SURFACE_STACK_TRACING\n\tOutTraceSDB(\">>> SURFACELIST DUPL: from=%x to=%x vers=%d\\n\", psfrom, psto, version);\n#endif\n\t// search for source or empty slot\n\tfor (i=0;i<DDSQLEN;i++) {\n\t\te=&SurfaceDB[i];\n\t\tif ((e->lpdds==psfrom) || (e->lpdds==(DWORD)0)) break; // got matching entry or end of the list\n\t}\n\t// if not found, return\n\tif (!e->lpdds) {\n#ifdef DXW_SURFACE_STACK_TRACING\n\t\tOutTraceSDB(\"--- NO ENTRY: from=%x\\n\", psfrom);\n#endif\n\t\treturn 0;\n\t}\n\t// save surface entry\n\tsentry = *e;\n\t// search for destination or empty slot\n\tfor (i=0;i<DDSQLEN;i++) {\n\t\te=&SurfaceDB[i];\n\t\tif ((e->lpdds==psto) || (e->lpdds==(DWORD)0)) break; // got matching entry or end of the list\n\t}\n\tif(i == DDSQLEN) {\n\t\t//MessageBox(0, \"Surface stack is full\", \"DxWnd SurfaceList\", MB_OK | MB_ICONEXCLAMATION);\n\t\t//return;\n\t\tfor(int j=0;j<DDSQLEN-1;j++) SurfaceDB[j]=SurfaceDB[j+1]; // scale down the whole stack one entry\n\t\te=&SurfaceDB[DDSQLEN-1];\n\t}\n\t// duplicate the entry with the new lpdds and version but old role / capabilities\n\t// either overriding the old entry or writing a new one\n\t*e = sentry;\n\te->lpdds = psto;\n\te->uVersion = version;\n\te->uRef = TRUE;\n#ifdef DXW_SURFACE_STACK_TRACING\n\tDumpSurfaceList(SurfaceDB);\n#endif\n\treturn e->dwCaps;\n}\n\nvoid dxwSStack::PopSurface(LPDIRECTDRAWSURFACE ps)\n{\n\tint i;\n\t// look for entry\n\tfor (i=0;i<DDSQLEN;i++) {\n\t\tif (SurfaceDB[i].lpdds==0) return;\n\t\tif (SurfaceDB[i].lpdds==ps) break; \n\t}\n\t// if found, delete it by left-copying each entry until end of array\n\tif (SurfaceDB[i].lpdds==ps){\n#ifdef DXW_SURFACE_STACK_TRACING\n\t\tOutTraceSDB(\">>> SURFACELIST CLEAR: i=%d lpdds=%x%s ref=%x vers=%d\\n\", \n\t\t\ti, ps, sRole(SurfaceDB[i].uRole), SurfaceDB[i].uRef, SurfaceDB[i].uVersion);\n#endif\n\t\tfor (; i<DDSQLEN; i++){\n\t\t\tSurfaceDB[i]=SurfaceDB[i+1];\n\t\t\tif (SurfaceDB[i].lpdds==0) break;\n\t\t}\n\t\tSurfaceDB[DDSQLEN].lpdds=0;\n\t\tSurfaceDB[DDSQLEN].uRole=0;\n\t\tSurfaceDB[DDSQLEN].uRef=0;\n\t\tSurfaceDB[DDSQLEN].uVersion=0;\n\t\tSurfaceDB[DDSQLEN].dwCaps=0;\n\t}\n#ifdef DXW_SURFACE_STACK_TRACING\n\tDumpSurfaceList(&SurfaceDB[0]);\n#endif\n}\n\n// Note: since MS itself declares that the object refcount is not reliable and should\n// be used for debugging only, it's not safe to rely on refcount==0 when releasing a\n// surface to terminate its classification as primary. As an alternate and more reliable\n// way, we use UnmarkPrimarySurface each time you create a new not primary surface, \n// eliminating the risk that a surface previously classified as primary and then closed\n// had the same surface handle than this new one that is not primary at all.\n\nBOOL dxwSStack::IsAPrimarySurface(LPDIRECTDRAWSURFACE ps)\n{\n\tint i;\n\t// treat NULL surface ptr as a non primary\n\tif(!ps) return FALSE;\n\tfor (i=0;i<DDSQLEN;i++) {\n\t\tif (SurfaceDB[i].lpdds==0) return FALSE;\n\t\tif (SurfaceDB[i].lpdds==ps) return (SurfaceDB[i].uRole == SURFACE_ROLE_PRIMARY);\n\t}\n\treturn FALSE;\n}\n\nBOOL dxwSStack::IsABackBufferSurface(LPDIRECTDRAWSURFACE ps)\n{\n\tint i;\n\t// treat NULL surface ptr as a non primary\n\tif(!ps) return FALSE;\n\tfor (i=0;i<DDSQLEN;i++) {\n\t\tif (SurfaceDB[i].lpdds==0) return FALSE;\n\t\tif (SurfaceDB[i].lpdds==ps) return (SurfaceDB[i].uRole == SURFACE_ROLE_BACKBUFFER);\n\t}\n\treturn FALSE;\n}\n\nBOOL dxwSStack::IsAZBufferSurface(LPDIRECTDRAWSURFACE ps)\n{\n\tint i;\n\t// treat NULL surface ptr as a non primary\n\tif(!ps) return FALSE;\n\tfor (i=0;i<DDSQLEN;i++) {\n\t\tif (SurfaceDB[i].lpdds==0) return FALSE;\n\t\tif (SurfaceDB[i].lpdds==ps) return (SurfaceDB[i].uRole == SURFACE_ROLE_ZBUFFER);\n\t}\n\treturn FALSE;\n}\n\nBOOL dxwSStack::IsA3DRefSurface(LPDIRECTDRAWSURFACE ps)\n{\n\tint i;\n\t// treat NULL surface ptr as a non primary\n\tif(!ps) return FALSE;\n\tfor (i=0;i<DDSQLEN;i++) {\n\t\tif (SurfaceDB[i].lpdds==0) return FALSE;\n\t\tif (SurfaceDB[i].lpdds==ps) return (SurfaceDB[i].uRole == SURFACE_ROLE_3DREF);\n\t}\n\treturn FALSE;\n}\n\nLPDIRECTDRAWSURFACE dxwSStack::GetSurfaceByRole(USHORT role)\n{\n\t// Get a surface marked for the desired role (either PRIMARY or BACKBUFFER) and\n\t// whith a not null reference counter. In case of multiple choices, it has to\n\t// return the most recent reference!!!\n\t// tested with \"101 the Airborne Invasion of Normandy\" and \"Armored Fist 3\"\n\tint i;\n\tLPDIRECTDRAWSURFACE ret = NULL;\n#ifdef DXW_SURFACE_STACK_TRACING\n\tif (IsAssertEnabled) CheckSurfaceList(SurfaceDB);\n#endif\n\tfor (i=0;i<DDSQLEN;i++) {\n\t\tif ((SurfaceDB[i].uRole == role) && (SurfaceDB[i].uRef)) ret = SurfaceDB[i].lpdds;\n\t\tif (SurfaceDB[i].lpdds==NULL) break;\n\t}\n\treturn ret;\n}\n\nLPDIRECTDRAWSURFACE dxwSStack::GetPrimarySurface(void)\n{\n\t//return GetSurfaceByRole(SURFACE_ROLE_PRIMARY);\n\treturn lpDDSPrimary;\n}\n\nLPDIRECTDRAWSURFACE dxwSStack::GetBackBufferSurface(void)\n{\n\t//return GetSurfaceByRole(SURFACE_ROLE_BACKBUFFER);\n\treturn lpDDSBackBuffer;\n}\n\nLPDIRECTDRAWSURFACE dxwSStack::GetZBufferSurface(void)\n{\n\t//return GetSurfaceByRole(SURFACE_ROLE_BACKBUFFER);\n\treturn lpDDSZBuffer;\n}\n\nDWORD dxwSStack::GetCaps(LPDIRECTDRAWSURFACE ps)\n{\n\tfor (int i=0;i<DDSQLEN;i++) {\n\t\tif (SurfaceDB[i].lpdds==0) return 0;\n\t\tif (SurfaceDB[i].lpdds==ps) {\n#ifdef DXW_SURFACE_STACK_TRACING\n\t\t\tOutTraceSDB(\">>> GETCAPS: lpdds=%x caps=%x(%s)\\n\", ps, SurfaceDB[i].dwCaps, ExplainDDSCaps(SurfaceDB[i].dwCaps));\n#endif\t\t\n\t\t\treturn SurfaceDB[i].dwCaps;\n\t\t}\n\t}\n\treturn 0;\n}\n\nSurfaceDB_Type *dxwSStack::GetSurface(LPDIRECTDRAWSURFACE ps)\n{\n\tfor (int i=0;i<DDSQLEN;i++) {\n\t\tif (SurfaceDB[i].lpdds==0) return NULL;\n\t\tif (SurfaceDB[i].lpdds==ps) {\n#ifdef DXW_SURFACE_STACK_TRACING\n\t\t\tOutTraceSDB(\">>> GETCAPS: lpdds=%x caps=%x(%s)\\n\", ps, SurfaceDB[i].dwCaps, ExplainDDSCaps(SurfaceDB[i].dwCaps));\n#endif\t\t\n\t\t\treturn &SurfaceDB[i];\n\t\t}\n\t}\n\treturn NULL;\n}\n"
  },
  {
    "path": "dll/dxwwstack.cpp",
    "content": "/* ------------------------------------------------------------------ */\n// DirectDraw Surface Stack implementation\n/* ------------------------------------------------------------------ */\n\n#define _CRT_SECURE_NO_WARNINGS\n\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n\n//#define DXW_WINPROC_STACK_TRACING\n#define MAXWNDHSTACK 256\n\ndxwWStack::dxwWStack()\n{\n\tWhndTOS = 0;\n\tWhndSize = MAXWNDHSTACK;\n\tWhndStack = (wndstack_entry *)malloc(WhndSize * sizeof(wndstack_entry));\n}\n\ndxwWStack::~dxwWStack()\n{\n}\n\nvoid dxwWStack::Put(HWND hwnd, WNDPROC wndproc, int w, int h)\n{\n\tint StackIdx;\n\n\t// add extra space when necessary, in chunks of MAXWNDHSTACK entries\n\tif(WhndTOS == WhndSize){\n\t\tWhndSize += MAXWNDHSTACK;\n\t\tWhndStack = (wndstack_entry *)realloc(WhndStack, WhndSize * sizeof(wndstack_entry));\n\t}\n\t// wndproc values of 0xFFFFxxxx type seems to be error codes rather than valid callback addresses ....\n\t// v2.02.36 using CallWindowProc you can pass WinProc handles, so you don't need to eliminate them!\n\t//if (((DWORD)wndproc & 0xFFFF0000) == 0xFFFF0000) return;\n\t//OutTraceDW(\"DEBUG: WNDPROC STACK push hwnd=%x, wndproc=%x\\n\", hwnd, wndproc);\n\t// try update first...\n\tfor(StackIdx=0; StackIdx<WhndTOS; StackIdx++) \n\t\tif (WhndStack[StackIdx].hwnd==hwnd) {\n\t\t\t// update only valid fields\n\t\t\tif(wndproc) WhndStack[StackIdx].wndproc=wndproc;\n\t\t\tif(w) WhndStack[StackIdx].w=w;\n\t\t\tif(h) WhndStack[StackIdx].h=h;\n\t\t\treturn;\n\t\t}\n\tWhndStack[WhndTOS].hwnd=hwnd;\n\t// initialize ...\n\tWhndStack[WhndTOS].wndproc=NULL; \n\tWhndStack[WhndTOS].w=0;\n\tWhndStack[WhndTOS].h=0;\n\t// update only valid fields\n\tif(wndproc) WhndStack[WhndTOS].wndproc=wndproc;\n\tif(w) WhndStack[WhndTOS].w=w;\n\tif(h) WhndStack[WhndTOS].h=h;\n\t// increment TOS.\n\tWhndTOS++;\n}\n\nvoid dxwWStack::PutProc(HWND hwnd, WNDPROC wndproc)\n{\n\tint StackIdx;\n\n\t// add extra space when necessary, in chunks of MAXWNDHSTACK entries\n\tif(WhndTOS == WhndSize){\n\t\tWhndSize += MAXWNDHSTACK;\n\t\tWhndStack = (wndstack_entry *)realloc(WhndStack, WhndSize * sizeof(wndstack_entry));\n\t}\n\t// wndproc values of 0xFFFFxxxx type seems to be error codes rather than valid callback addresses ....\n\t// v2.02.36 using CallWindowProc you can pass WinProc handles, so you don't need to eliminate them!\n\t//if (((DWORD)wndproc & 0xFFFF0000) == 0xFFFF0000) return;\n\t//OutTraceDW(\"DEBUG: WNDPROC STACK push hwnd=%x, wndproc=%x\\n\", hwnd, wndproc);\n\t// try update first...\n\tfor(StackIdx=0; StackIdx<WhndTOS; StackIdx++) \n\t\tif (WhndStack[StackIdx].hwnd==hwnd) {\n\t\t\t// update only valid fields\n\t\t\tWhndStack[StackIdx].wndproc=wndproc;\n\t\t\treturn;\n\t\t}\n\tWhndStack[WhndTOS].hwnd=hwnd;\n\tWhndStack[WhndTOS].wndproc=wndproc;\n\tWhndStack[WhndTOS].w=0; // unknown\n\tWhndStack[WhndTOS].h=0; // unknown\n\t// increment TOS.\n\tWhndTOS++;\n}\n\nvoid dxwWStack::PutSize(HWND hwnd, int w, int h)\n{\n\tint StackIdx;\n\n\t// add extra space when necessary, in chunks of MAXWNDHSTACK entries\n\tif(WhndTOS == WhndSize){\n\t\tWhndSize += MAXWNDHSTACK;\n\t\tWhndStack = (wndstack_entry *)realloc(WhndStack, WhndSize * sizeof(wndstack_entry));\n\t}\n\t// try update first...\n\tfor(StackIdx=0; StackIdx<WhndTOS; StackIdx++) \n\t\tif (WhndStack[StackIdx].hwnd==hwnd) {\n\t\t\t// update only valid fields\n\t\t\tWhndStack[StackIdx].w=w;\n\t\t\tWhndStack[StackIdx].h=h;\n\t\t\treturn;\n\t\t}\n\tWhndStack[WhndTOS].hwnd=hwnd;\n\tWhndStack[WhndTOS].wndproc=NULL; // unknown\n\tWhndStack[WhndTOS].w=w;\n\tWhndStack[WhndTOS].h=h;\n\t// increment TOS.\n\tWhndTOS++;\n}\n\nBOOL dxwWStack::GetSize(HWND hwnd, int *w, int *h)\n{\n\tint StackIdx;\n\tfor(StackIdx=0; StackIdx<WhndTOS; StackIdx++) if (WhndStack[StackIdx].hwnd==hwnd) {\n\t\t//OutTraceDW(\"DEBUG: WNDPROC STACK pop hwnd=%x, wndproc=%x\\n\", hwnd, WhndStack[StackIdx].wndproc);\n\t\tif((WhndStack[StackIdx].w==0) || (WhndStack[StackIdx].h==0)) return FALSE;\n\t\tif(w) *w=WhndStack[StackIdx].w;\n\t\tif(h) *h=WhndStack[StackIdx].h;\n\t\treturn TRUE;\n\t}\n\t//OutTraceDW(\"DEBUG: WNDPROC STACK pop hwnd=%x, wndproc=NULL\\n\", hwnd);\n\treturn FALSE;\n}\n\nWNDPROC dxwWStack::GetProc(HWND hwnd)\n{\n\tint StackIdx;\n\t//if(dxw.dwFlags6 & USEDEFWINDOWPROC) return pDefWindowProcA;\n\t//OutTraceDW(\"DEBUG: WNDPROC STACK pop hwnd=%x TOS=%d\\n\", hwnd, WhndTOS);\n\tfor(StackIdx=0; StackIdx<WhndTOS; StackIdx++) {\n\t\tif (WhndStack[StackIdx].hwnd==hwnd) {\n\t\t\t//OutTraceDW(\"DEBUG: WNDPROC STACK pop hwnd=%x, wndproc=%x\\n\", hwnd, WhndStack[StackIdx].wndproc);\n\t\t\treturn WhndStack[StackIdx].wndproc; // either a good value, or NULL\n\t\t}\n\t}\n\t//OutTraceDW(\"DEBUG: WNDPROC STACK pop hwnd=%x, wndproc=NULL\\n\", hwnd);\n\treturn NULL;\n}\n"
  },
  {
    "path": "dll/emulateddc.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhelper.h\"\n#include \"resource.h\"\n\n// SAVELASTDC: optimized mode, if the last window handle and size didn't change, \n// it is not necessary to create a new VirtualHDC and attached bitmap, you can reuse \n// the last one, with the further advantage of avoiding multiple scaling to and from \n// the virtual image with quality loss (see \"BattleZone 1998\").\n// Unfortunately something is wrong with Imperialism II, so better not activate ....\n#ifdef DXWND_SAVELASTDC\nstatic HWND gLasthWnd = NULL;\nstatic RECT gLastRect = {0,0,0,0};\n#endif\n\nHDC dxwCore::AcquireEmulatedDC(HWND hwnd)\n{\n\tHDC wdc;\n\tRECT WinRect;\n\tHGDIOBJ PrevSelection;\n\t//OutTrace(\"ACQUIRE hwnd=%x vhdc=%x pic=%x\\n\", hwnd, VirtualHDC, VirtualPic);\n\n\tif(!(wdc=(*pGDIGetDC)(hwnd))){ // potential DC leakage\n\t\tOutTraceE(\"AcquireEmulatedDC: GetDC ERROR hwnd=%x err=%d at=%d\\n\", hwnd, GetLastError(), __LINE__);\n\t\treturn NULL;\n\t}\n\n\t(*pGetClientRect)(hwnd, &WinRect);\n\tVirtualPicRect = WinRect;\n\tdxw.UnmapClient(&VirtualPicRect);\n\n#ifdef DXWND_SAVELASTDC\n\tif((hwnd == gLasthWnd) && (WinRect.right == gLastRect.right) && (WinRect.bottom == gLastRect.bottom)) {\n\t\tif(!(*pGDIStretchBlt)(VirtualHDC, VirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom, wdc, 0, 0, WinRect.right, WinRect.bottom, SRCCOPY))\n\t\t\tOutTraceE(\"AcquireEmulatedDC: StretchBlt ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\tif(!(pGDIReleaseDC)(hwnd, wdc))\n\t\t\tOutTraceE(\"AcquireEmulatedDC: ReleaseDC ERROR hdc=%x err=%d at=%d\\n\", wdc, GetLastError(), __LINE__);\n\t\treturn VirtualHDC;\n\t}\n\tgLasthWnd = hwnd;\n\tgLastRect = WinRect;\n#endif\n\n\t//OutTrace(\"WINDOW picrect=(%d,%d)-(%d,%d)\\n\", \n\t//\tVirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom);\n\n\tOutTraceB(\"AcquireEmulatedDC: hwnd=%x Desktop=%x WinRect=(%d,%d)(%d,%d) VirtRect=(%d,%d)(%d,%d)\\n\",\n\t\t\thwnd, dxw.IsDesktop(hwnd), \n\t\t\tWinRect.left, WinRect.top, WinRect.right, WinRect.bottom,\n\t\t\tVirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom);\n\n\t// v2.03.91.fx3: loop required to eliminate resource leakage (\"Yu No\")\n\tif(VirtualHDC) {\n\t\twhile(TRUE){\n\t\t\tif(!DeleteObject(VirtualHDC))\n\t\t\t\tOutTraceE(\"AcquireEmulatedDC: DeleteObject ERROR hdc=%x err=%d at=%d\\n\", VirtualHDC, GetLastError(), __LINE__);\n\t\t\telse break;\n\t\t\t(*pSleep)(1);\n\t\t}\n\t}\n\tif(VirtualPic) {\n\t\twhile(TRUE){\n\t\t\tif(!DeleteObject(VirtualPic))\n\t\t\t\tOutTraceE(\"AcquireEmulatedDC: DeleteObject ERROR pic=%x err=%d at=%d\\n\", VirtualPic, GetLastError(), __LINE__);\n\t\t\telse break;\n\t\t\t(*pSleep)(1);\n\t\t}\n\t}\n\n\tif(!(VirtualHDC=CreateCompatibleDC(wdc)))\n\t\tOutTraceE(\"AcquireEmulatedDC: CreateCompatibleDC ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\n\tif(!(VirtualPic=CreateCompatibleBitmap(wdc, dxw.GetScreenWidth(), dxw.GetScreenHeight())))\n\t\tOutTraceE(\"AcquireEmulatedDC: CreateCompatibleBitmap ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\n\tif(!(PrevSelection=(*pSelectObject)(VirtualHDC, VirtualPic)))\n\t\tOutTraceE(\"AcquireEmulatedDC: SelectObject ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\telse {\n\t\tif(!DeleteObject(PrevSelection))\n\t\t\tOutTraceE(\"AcquireEmulatedDC: DeleteObject ERROR pic=%x err=%d at=%d\\n\", PrevSelection, GetLastError(), __LINE__);;\n\t}\n\n\t//OutTrace(\"RENEW_IMAGE hdc=%x pic=%x\\n\", VirtualHDC, VirtualPic);\n\n\tif(!(*pGDIStretchBlt)(VirtualHDC, VirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom, wdc, 0, 0, WinRect.right, WinRect.bottom, SRCCOPY))\n\t\tOutTraceE(\"AcquireEmulatedDC: StretchBlt ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\n\tif(!(pGDIReleaseDC)(hwnd, wdc))\n\t\tOutTraceE(\"AcquireEmulatedDC: ReleaseDC ERROR hdc=%x err=%d at=%d\\n\", wdc, GetLastError(), __LINE__);\n\n\treturn VirtualHDC;\n}\n\nBOOL dxwCore::ReleaseEmulatedDC(HWND hwnd)\n{\n\tHDC wdc;\n\tRECT WinRect;\n\t//OutTrace(\"RELEASE hwnd=%x\\n\", hwnd);\n\n\t(*pGetClientRect)(hwnd, &WinRect);\n\n\tOutTraceB(\"ReleaseEmulatedDC: hwnd=%x Desktop=%x WinRect=(%d,%d)(%d,%d) VirtRect=(%d,%d)(%d,%d)\\n\",\n\t\thwnd, dxw.IsDesktop(hwnd), \n\t\tWinRect.left, WinRect.top, WinRect.right, WinRect.bottom,\n\t\tVirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom);\n\n\tif(!(wdc=(*pGDIGetDC)(hwnd))) { // potential DC leakage\n\t\tOutTraceE(\"ReleaseEmulatedDC: GetDC ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\treturn FALSE;\n\t}\n\tSetStretchBltMode(VirtualHDC, HALFTONE);\n\tif(!(*pGDIStretchBlt)(wdc, 0, 0, WinRect.right, WinRect.bottom, VirtualHDC, 0, 0, VirtualPicRect.right, VirtualPicRect.bottom, SRCCOPY))\n\t\tOutTraceE(\"ReleaseEmulatedDC: StretchBlt ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\n\tif(!(*pGDIReleaseDC)(hwnd, wdc))// fixed DC leakage\n\t\tOutTraceE(\"ReleaseEmulatedDC: ReleaseDC ERROR hwnd=%x hdc=%x err=%d at=%d\\n\", hwnd, wdc, GetLastError(), __LINE__);\n\t\n\treturn TRUE;\n}\n\nvoid dxwCore::ResetEmulatedDC()\n{\n\t//OutTrace(\"RESET\\n\");\n\tVirtualHDC=NULL;\n\tVirtualPic=NULL;\n\tVirtualOffsetX=0;\n\tVirtualOffsetY=0;\n}\n\nBOOL dxwCore::IsVirtual(HDC hdc)\n{\n\treturn (hdc==VirtualHDC) && (GDIEmulationMode == GDIMODE_EMULATED);\n}\n"
  },
  {
    "path": "dll/fontstack.cpp",
    "content": "/* ------------------------------------------------------------------ */\n// Font Stack implementation\n/* ------------------------------------------------------------------ */\n\n#define _CRT_SECURE_NO_WARNINGS\n\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n\ndxwFStack::dxwFStack()\n{\n\tFontDB = (FontDB_Type *)malloc(sizeof(FontDB_Type)*(MAXFONTS+1));\n\tmemset(FontDB, 0, sizeof(FontDB));\n}\n\ndxwFStack::~dxwFStack()\n{\n\tfree(FontDB);\n}\n\nvoid dxwFStack::Push(HFONT font, HFONT scaled)\n{\n\tint i;\n\tFontDB_Type *e;\n\tfor (i=0;i<MAXFONTS;i++) {\n\t\te=&FontDB[i];\n\t\tif (e->font == 0) break; // got matching entry or end of the list\n\t}\n\tif(i == DDSQLEN) {\n\t\tMessageBox(0, \"Font stack is full\", \"DxWnd\", MB_OK | MB_ICONEXCLAMATION);\n\t\treturn;\n\t}\n\te->font=font;\n\te->scaled=scaled;\n}\n\t\nHFONT dxwFStack::GetScaledFont(HFONT font)\n{\n\tint i;\n\tFontDB_Type *e;\n\tfor (i=0;i<MAXFONTS;i++) {\n\t\te=&FontDB[i];\n\t\tif (e->font == font) return e->scaled; // got matching entry \n\t\tif (e->font == 0) return 0; // got end of the list\n\t}\n\treturn 0; // got max entries\n}\n\nHFONT dxwFStack::DeleteFont(HFONT font)\n{\n\tint i;\n\tHFONT scaled;\n\tFontDB_Type *e;\n\tfor (i=0;i<MAXFONTS;i++) {\n\t\te=&FontDB[i];\n\t\tif (e->font == font) {\n\t\t\tscaled = e->scaled;\n\t\t\tbreak; // got matching entry \n\t\t}\n\t}\n\tif(i==MAXFONTS) return NULL;\n\tfor (; i<MAXFONTS-1; i++) {\n\t\tFontDB[i]=FontDB[i+1];\n\t}\n\tFontDB[i].font = 0;\n\tFontDB[i].scaled = 0;\n\treturn scaled;\n}"
  },
  {
    "path": "dll/gdi32.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n//#define BEST_QUALITY ANTIALIASED_QUALITY\n#define BEST_QUALITY CLEARTYPE_NATURAL_QUALITY\n\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"hddraw.h\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n#include \"shareddc.hpp\"\n\n#include \"stdio.h\"\n\nextern void DumpDibSection(const BITMAPINFO *, UINT, VOID *);\nextern void DumpHDC(HDC, int, int, int, int);\nstatic BOOL bGDIRecursionFlag = FALSE;\n\nstatic void Stopper(char *s, int line)\n{\n\tchar sMsg[81];\n\tsprintf_s(sMsg, 80, \"break: \\\"%s\\\"\", s);\n\tMessageBox(0, sMsg, \"break\", MB_OK | MB_ICONEXCLAMATION);\n}\n\n//#define STOPPER_TEST // comment out to eliminate\n#ifdef STOPPER_TEST\n#define STOPPER(s) Stopper(s, __LINE__)\n#else\n#define STOPPER(s)\n#endif\n\n#ifdef TRACEPALETTE\ntypedef BOOL (WINAPI *ResizePalette_Type)(HPALETTE, UINT);\nResizePalette_Type pResizePalette = NULL;\nBOOL WINAPI extResizePalette(HPALETTE, UINT);\n#endif\n\n#define _Warn(s) MessageBox(0, s, \"to do\", MB_ICONEXCLAMATION)\n\n/*\ntypedef COLORREF (WINAPI *SetBkColor_Type)(HDC, COLORREF);\ntypedef COLORREF (WINAPI *SetTextColor_Type)(HDC hdc, COLORREF crColor);\ntypedef int (WINAPI *SetBkMode_Type)(HDC, int);\n\nSetBkColor_Type pSetBkColor = NULL;\nSetTextColor_Type pSetTextColor = NULL;\nSetBkMode_Type pSetBkMode = NULL;\n\nCOLORREF WINAPI extSetBkColor(HDC, COLORREF);\nCOLORREF WINAPI extSetTextColor(HDC hdc, COLORREF crColor);\nint WINAPI extSetBkMode(HDC, int);\n*/\n\nstatic HookEntryEx_Type Hooks[]={\n\t//{HOOK_IAT_CANDIDATE, 0, \"DPtoLP\", (FARPROC)DPtoLP, (FARPROC *)&pDPtoLP, (FARPROC)extDPtoLP},\n\n\t{HOOK_IAT_CANDIDATE, 0, \"GetDeviceCaps\", (FARPROC)GetDeviceCaps, (FARPROC *)&pGDIGetDeviceCaps, (FARPROC)extGetDeviceCaps},\n\t{HOOK_IAT_CANDIDATE, 0, \"ScaleWindowExtEx\", (FARPROC)ScaleWindowExtEx, (FARPROC *)&pGDIScaleWindowExtEx, (FARPROC)extScaleWindowExtEx},\n\t{HOOK_IAT_CANDIDATE, 0, \"SaveDC\", (FARPROC)SaveDC, (FARPROC *)&pGDISaveDC, (FARPROC)extGDISaveDC},\n\t{HOOK_IAT_CANDIDATE, 0, \"RestoreDC\", (FARPROC)RestoreDC, (FARPROC *)&pGDIRestoreDC, (FARPROC)extGDIRestoreDC},\n\t{HOOK_HOT_CANDIDATE, 0, \"AnimatePalette\", (FARPROC)AnimatePalette, (FARPROC *)&pAnimatePalette, (FARPROC)extAnimatePalette},\n\t{HOOK_HOT_CANDIDATE, 0, \"CreatePalette\", (FARPROC)CreatePalette, (FARPROC *)&pGDICreatePalette, (FARPROC)extGDICreatePalette},\n\t{HOOK_HOT_CANDIDATE, 0, \"SelectPalette\", (FARPROC)SelectPalette, (FARPROC *)&pGDISelectPalette, (FARPROC)extSelectPalette},\n\t{HOOK_HOT_CANDIDATE, 0, \"RealizePalette\", (FARPROC)RealizePalette, (FARPROC *)&pGDIRealizePalette, (FARPROC)extRealizePalette},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetSystemPaletteEntries\", (FARPROC)GetSystemPaletteEntries, (FARPROC *)&pGDIGetSystemPaletteEntries, (FARPROC)extGetSystemPaletteEntries},\n\t{HOOK_HOT_CANDIDATE, 0, \"SetSystemPaletteUse\", (FARPROC)SetSystemPaletteUse, (FARPROC *)&pSetSystemPaletteUse, (FARPROC)extSetSystemPaletteUse},\n\t{HOOK_HOT_CANDIDATE, 0, \"SetPixelFormat\", (FARPROC)NULL, (FARPROC *)&pGDISetPixelFormat, (FARPROC)extGDISetPixelFormat},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetPixelFormat\", (FARPROC)NULL, (FARPROC *)&pGDIGetPixelFormat, (FARPROC)extGDIGetPixelFormat},\n\t{HOOK_IAT_CANDIDATE, 0, \"ChoosePixelFormat\", (FARPROC)NULL, (FARPROC *)&pChoosePixelFormat, (FARPROC)extChoosePixelFormat},\n\t{HOOK_IAT_CANDIDATE, 0, \"DescribePixelFormat\", (FARPROC)NULL, (FARPROC *)&pDescribePixelFormat, (FARPROC)extDescribePixelFormat},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetPaletteEntries\", (FARPROC)GetPaletteEntries, (FARPROC *)&pGetPaletteEntries, (FARPROC)extGetPaletteEntries},\n\t{HOOK_HOT_CANDIDATE, 0, \"SetPaletteEntries\", (FARPROC)SetPaletteEntries, (FARPROC *)&pSetPaletteEntries, (FARPROC)extSetPaletteEntries},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetSystemPaletteUse\", (FARPROC)GetSystemPaletteUse, (FARPROC *)&pGetSystemPaletteUse, (FARPROC)extGetSystemPaletteUse},\n\t{HOOK_HOT_CANDIDATE, 0, \"CreateICA\", (FARPROC)CreateICA, (FARPROC *)&pCreateICA, (FARPROC)extCreateICA}, // Riven\n\t{HOOK_HOT_CANDIDATE, 0, \"SetROP2\", (FARPROC)SetROP2, (FARPROC *)&pSetROP2, (FARPROC)extSetROP2}, // Titanic\n#ifdef TRACEPALETTE\n\t{HOOK_IAT_CANDIDATE, 0, \"ResizePalette\", (FARPROC)ResizePalette, (FARPROC *)&pResizePalette, (FARPROC)extResizePalette},\n#endif\t\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n}; \n \nstatic HookEntryEx_Type RemapHooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"SetViewportOrgEx\", (FARPROC)SetViewportOrgEx, (FARPROC *)&pSetViewportOrgEx, (FARPROC)extSetViewportOrgEx}, // needed in ShowBanner\n\t{HOOK_IAT_CANDIDATE, 0, \"SetViewportExtEx\", (FARPROC)SetViewportExtEx, (FARPROC *)&pSetViewportExtEx, (FARPROC)extSetViewportExtEx},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetViewportOrgEx\", (FARPROC)GetViewportOrgEx, (FARPROC *)&pGetViewportOrgEx, (FARPROC)extGetViewportOrgEx},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetViewportExtEx\", (FARPROC)GetViewportExtEx, (FARPROC *)&pGetViewportExtEx, (FARPROC)extGetViewportExtEx},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetWindowOrgEx\", (FARPROC)GetWindowOrgEx, (FARPROC *)&pGetWindowOrgEx, (FARPROC)extGetWindowOrgEx},\n\t{HOOK_IAT_CANDIDATE, 0, \"SetWindowOrgEx\", (FARPROC)SetWindowOrgEx, (FARPROC *)&pSetWindowOrgEx, (FARPROC)extSetWindowOrgEx},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetCurrentPositionEx\", (FARPROC)GetCurrentPositionEx, (FARPROC *)&pGetCurrentPositionEx, (FARPROC)extGetCurrentPositionEx},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetRgnBox\", (FARPROC)GetRgnBox, (FARPROC *)&pGetRgnBox, (FARPROC)extGetRgnBox},\n\t//{HOOK_IAT_CANDIDATE, 0, \"GetRegionData\", (FARPROC)NULL, (FARPROC *)&pGetRegionData, (FARPROC)extGetRegionData},\n\t{HOOK_IAT_CANDIDATE, 0, \"CreateCompatibleDC\", (FARPROC)CreateCompatibleDC, (FARPROC *)&pGDICreateCompatibleDC, (FARPROC)extGDICreateCompatibleDC}, /* to check */\n\t//TODO {HOOK_IAT_CANDIDATE, 0, \"DrawEscape\", (FARPROC)DrawEscape, (FARPROC *)&pDrawEscape, (FARPROC)extDrawEscape}, /* to check */\n\t{HOOK_IAT_CANDIDATE, 0, \"GetDCOrgEx\", (FARPROC)GetDCOrgEx, (FARPROC *)&pGetDCOrgEx, (FARPROC)extGetDCOrgEx}, \n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator \n};\n\nstatic HookEntryEx_Type SyscallHooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"StretchDIBits\", (FARPROC)StretchDIBits, (FARPROC *)&pStretchDIBits, (FARPROC)extStretchDIBits},\n\t{HOOK_HOT_CANDIDATE, 0, \"SetDIBits\", (FARPROC)SetDIBits, (FARPROC *)&pSetDIBits, (FARPROC)extSetDIBits},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetDIBits\", (FARPROC)GetDIBits, (FARPROC *)&pGetDIBits, (FARPROC)extGetDIBits},\n\t{HOOK_IAT_CANDIDATE, 0, \"CreateCompatibleBitmap\", (FARPROC)CreateCompatibleBitmap, (FARPROC *)&pCreateCompatibleBitmap, (FARPROC)extCreateCompatibleBitmap}, \n\t{HOOK_IAT_CANDIDATE, 0, \"CreateDIBitmap\", (FARPROC)NULL, (FARPROC *)&pCreateDIBitmap, (FARPROC)extCreateDIBitmap}, \n\t{HOOK_HOT_CANDIDATE, 0, \"CreateDIBSection\", (FARPROC)CreateDIBSection, (FARPROC *)&pCreateDIBSection, (FARPROC)extCreateDIBSection}, \n\t{HOOK_IAT_CANDIDATE, 0, \"CreateDiscardableBitmap\", (FARPROC)NULL, (FARPROC *)&pCreateDiscardableBitmap, (FARPROC)extCreateDiscardableBitmap}, \n\t{HOOK_IAT_CANDIDATE, 0, \"ExtFloodFill\", (FARPROC)NULL, (FARPROC *)&pExtFloodFill, (FARPROC)extExtFloodFill}, \n\t{HOOK_IAT_CANDIDATE, 0, \"GdiAlphaBlend\", (FARPROC)NULL, (FARPROC *)&pGdiAlphaBlend, (FARPROC)extGdiAlphaBlend}, \n\t{HOOK_IAT_CANDIDATE, 0, \"GdiGradientFill\", (FARPROC)NULL, (FARPROC *)&pGdiGradientFill, (FARPROC)extGdiGradientFill},\n\t{HOOK_IAT_CANDIDATE, 0, \"GdiTransparentBlt\", (FARPROC)NULL, (FARPROC *)&pGdiTransparentBlt, (FARPROC)extGdiTransparentBlt}, \n\t{HOOK_IAT_CANDIDATE, 0, \"Pie\", (FARPROC)NULL, (FARPROC *)&pPie, (FARPROC)extPie},\n\t{HOOK_IAT_CANDIDATE, 0, \"AngleArc\", (FARPROC)NULL, (FARPROC *)&pAngleArc, (FARPROC)extAngleArc}, \n\t{HOOK_IAT_CANDIDATE, 0, \"PolyPolyline\", (FARPROC)NULL, (FARPROC *)&pPolyPolyline, (FARPROC)extPolyPolyline},\n\t{HOOK_IAT_CANDIDATE, 0, \"FillRgn\", (FARPROC)NULL, (FARPROC *)&pFillRgn, (FARPROC)extFillRgn},\n\t{HOOK_IAT_CANDIDATE, 0, \"FrameRgn\", (FARPROC)NULL, (FARPROC *)&pFrameRgn, (FARPROC)extFrameRgn}, \n\t{HOOK_IAT_CANDIDATE, 0, \"InvertRgn\", (FARPROC)NULL, (FARPROC *)&pInvertRgn, (FARPROC)extInvertRgn}, \n\t{HOOK_IAT_CANDIDATE, 0, \"PaintRgn\", (FARPROC)NULL, (FARPROC *)&pPaintRgn, (FARPROC)extPaintRgn}, \n\t////{HOOK_IAT_CANDIDATE, 0, \"SetMapMode\", (FARPROC)NULL, (FARPROC *)NULL, (FARPROC)extSetMapMode}, // crashes ???\n\t{HOOK_IAT_CANDIDATE, 0, \"SetDIBitsToDevice\", (FARPROC)SetDIBitsToDevice, (FARPROC *)&pSetDIBitsToDevice, (FARPROC)extSetDIBitsToDevice}, // does the stretching\n\t{HOOK_IAT_CANDIDATE, 0, \"Polyline\", (FARPROC)Polyline, (FARPROC *)&pPolyline, (FARPROC)extPolyline},\n\t{HOOK_IAT_CANDIDATE, 0, \"BitBlt\", (FARPROC)BitBlt, (FARPROC *)&pGDIBitBlt, (FARPROC)extGDIBitBlt},\n\t{HOOK_IAT_CANDIDATE, 0, \"StretchBlt\", (FARPROC)StretchBlt, (FARPROC *)&pGDIStretchBlt, (FARPROC)extGDIStretchBlt},\n\t{HOOK_IAT_CANDIDATE, 0, \"PatBlt\", (FARPROC)PatBlt, (FARPROC *)&pGDIPatBlt, (FARPROC)extGDIPatBlt},\n\t{HOOK_IAT_CANDIDATE, 0, \"MaskBlt\", (FARPROC)MaskBlt, (FARPROC *)&pMaskBlt, (FARPROC)extMaskBlt},\n\t{HOOK_IAT_CANDIDATE, 0, \"TextOutA\", (FARPROC)TextOutA, (FARPROC *)&pGDITextOutA, (FARPROC)extTextOutA},\n\t{HOOK_IAT_CANDIDATE, 0, \"TextOutW\", (FARPROC)TextOutW, (FARPROC *)&pGDITextOutW, (FARPROC)extTextOutW},\n\t{HOOK_IAT_CANDIDATE, 0, \"Rectangle\", (FARPROC)Rectangle, (FARPROC *)&pGDIRectangle, (FARPROC)extRectangle},\n\t{HOOK_IAT_CANDIDATE, 0, \"RoundRect\", (FARPROC)RoundRect, (FARPROC *)&pRoundRect, (FARPROC)extRoundRect},\n\t{HOOK_IAT_CANDIDATE, 0, \"Polygon\", (FARPROC)Polygon, (FARPROC *)&pPolygon, (FARPROC)extPolygon},\n\t{HOOK_IAT_CANDIDATE, 0, \"PolyPolygon\", (FARPROC)PolyPolygon, (FARPROC *)&pPolyPolygon, (FARPROC)extPolyPolygon},\n\t{HOOK_IAT_CANDIDATE, 0, \"PolyBezier\", (FARPROC)PolyBezier, (FARPROC *)&pPolyBezier, (FARPROC)extPolyBezier},\n\t{HOOK_IAT_CANDIDATE, 0, \"PolyBezierTo\", (FARPROC)PolyBezierTo, (FARPROC *)&pPolyBezierTo, (FARPROC)extPolyBezierTo},\n\t{HOOK_IAT_CANDIDATE, 0, \"PolylineTo\", (FARPROC)PolylineTo, (FARPROC *)&pPolylineTo, (FARPROC)extPolylineTo},\n\t{HOOK_IAT_CANDIDATE, 0, \"PolyDraw\", (FARPROC)PolyDraw, (FARPROC *)&pPolyDraw, (FARPROC)extPolyDraw},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetPixel\", (FARPROC)GetPixel, (FARPROC *)&pGetPixel, (FARPROC)extGetPixel},\n\t{HOOK_IAT_CANDIDATE, 0, \"PlgBlt\", (FARPROC)PlgBlt, (FARPROC *)&pPlgBlt, (FARPROC)extPlgBlt},\n\t{HOOK_IAT_CANDIDATE, 0, \"SetPixel\", (FARPROC)SetPixel, (FARPROC *)&pSetPixel, (FARPROC)extSetPixel},\n\t{HOOK_IAT_CANDIDATE, 0, \"SetPixelV\", (FARPROC)SetPixelV, (FARPROC *)&pSetPixelV, (FARPROC)extSetPixelV},\n\t{HOOK_IAT_CANDIDATE, 0, \"Chord\", (FARPROC)Chord, (FARPROC *)&pChord, (FARPROC)extChord},\n\t{HOOK_IAT_CANDIDATE, 0, \"Ellipse\", (FARPROC)Ellipse, (FARPROC *)&pEllipse, (FARPROC)extEllipse},\n\t{HOOK_IAT_CANDIDATE, 0, \"ExtTextOutA\", (FARPROC)ExtTextOutA, (FARPROC *)&pExtTextOutA, (FARPROC)extExtTextOutA},\n\t{HOOK_IAT_CANDIDATE, 0, \"ExtTextOutW\", (FARPROC)ExtTextOutW, (FARPROC *)&pExtTextOutW, (FARPROC)extExtTextOutW},\n\t{HOOK_IAT_CANDIDATE, 0, \"PolyTextOutA\", (FARPROC)PolyTextOutA, (FARPROC *)&pPolyTextOutA, (FARPROC)extPolyTextOutA},\n\t{HOOK_IAT_CANDIDATE, 0, \"PolyTextOutW\", (FARPROC)PolyTextOutA, (FARPROC *)&pPolyTextOutA, (FARPROC)extPolyTextOutA},\n\t{HOOK_IAT_CANDIDATE, 0, \"ArcTo\", (FARPROC)ArcTo, (FARPROC *)&pArcTo, (FARPROC)extArcTo},\n\t{HOOK_IAT_CANDIDATE, 0, \"LineTo\", (FARPROC)LineTo, (FARPROC *)&pLineTo, (FARPROC)extLineTo},\n\t{HOOK_IAT_CANDIDATE, 0, \"Arc\", (FARPROC)Arc, (FARPROC *)&pArc, (FARPROC)extArc},\n\t{HOOK_IAT_CANDIDATE, 0, \"MoveToEx\", (FARPROC)MoveToEx, (FARPROC *)&pMoveToEx, (FARPROC)extMoveToEx},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetClipBox\", (FARPROC)GetClipBox, (FARPROC *)&pGDIGetClipBox, (FARPROC)extGetClipBox},\n\t{HOOK_IAT_CANDIDATE, 0, \"IntersectClipRect\", (FARPROC)IntersectClipRect, (FARPROC *)&pIntersectClipRect, (FARPROC)extIntersectClipRect}, // Riven !!\n\t//{HOOK_IAT_CANDIDATE, 0, \"DeleteDC\", (FARPROC)DeleteDC, (FARPROC *)&pGDIDeleteDC, (FARPROC)extGDIDeleteDC}, // for tracing only! (commented: crashes Dylan Dog HLP!!)\n\t{HOOK_IAT_CANDIDATE, 0, \"CreateDCA\", (FARPROC)CreateDCA, (FARPROC *)&pGDICreateDCA, (FARPROC)extGDICreateDCA}, \n\t{HOOK_IAT_CANDIDATE, 0, \"CreateDCW\", (FARPROC)CreateDCW, (FARPROC *)&pGDICreateDCW, (FARPROC)extGDICreateDCW}, \n\n\t{HOOK_IAT_CANDIDATE, 0, \"PlayEnhMetaFile\", (FARPROC)PlayEnhMetaFile, (FARPROC *)&pPlayEnhMetaFile, (FARPROC)extPlayEnhMetaFile}, \n\n\t// CreateDCW .....\t\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator \n};\n\nstatic HookEntryEx_Type ScaledHooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"SelectClipRgn\", (FARPROC)SelectClipRgn, (FARPROC *)&pSelectClipRgn, (FARPROC)extSelectClipRgn}, // Sid Meier's Alpha Centaury\n\t// commented out since they alter text on screen...... (see Imperialism II difficulty level menu)\n\t// v2.03.47 - restored: needed for \"688(I) Hunter Killer\" periscope ....\n\t{HOOK_IAT_CANDIDATE, 0, \"CreateEllipticRgn\", (FARPROC)CreateEllipticRgn, (FARPROC *)&pCreateEllipticRgn, (FARPROC)extCreateEllipticRgn},\n\t{HOOK_IAT_CANDIDATE, 0, \"CreateEllipticRgnIndirect\", (FARPROC)CreateEllipticRgnIndirect, (FARPROC *)&pCreateEllipticRgnIndirect, (FARPROC)extCreateEllipticRgnIndirect},\n\t// CreateRectRgn must be hooked in scaled mode to let Avernum work correctly!\n\t{HOOK_IAT_CANDIDATE, 0, \"CreateRectRgn\", (FARPROC)CreateRectRgn, (FARPROC *)&pCreateRectRgn, (FARPROC)extCreateRectRgn},\n\t{HOOK_IAT_CANDIDATE, 0, \"CreateRectRgnIndirect\", (FARPROC)CreateRectRgnIndirect, (FARPROC *)&pCreateRectRgnIndirect, (FARPROC)extCreateRectRgnIndirect},\n\t{HOOK_IAT_CANDIDATE, 0, \"CreatePolygonRgn\", (FARPROC)CreatePolygonRgn, (FARPROC *)&pCreatePolygonRgn, (FARPROC)extCreatePolygonRgn},\n\t// same as emulated GDI ...\n\n\t{HOOK_IAT_CANDIDATE, 0, \"SetRectRgn\", (FARPROC)SetRectRgn, (FARPROC *)&pSetRectRgn, (FARPROC)extSetRectRgn}, \n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type EmulateHooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"GetObjectType\", (FARPROC)GetObjectType, (FARPROC *)&pGetObjectType, (FARPROC)extGetObjectType},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type TextHooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"CreateFontA\", (FARPROC)CreateFont, (FARPROC *)&pGDICreateFont, (FARPROC)extCreateFont},\n\t{HOOK_HOT_CANDIDATE, 0, \"CreateFontIndirectA\", (FARPROC)CreateFontIndirectA, (FARPROC *)&pGDICreateFontIndirect, (FARPROC)extCreateFontIndirect},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetTextExtentPointA\", (FARPROC)NULL, (FARPROC *)&pGetTextExtentPointA, (FARPROC)extGetTextExtentPointA}, \n\t{HOOK_IAT_CANDIDATE, 0, \"GetTextExtentPoint32A\", (FARPROC)NULL, (FARPROC *)&pGetTextExtentPoint32A, (FARPROC)extGetTextExtentPoint32A}, \n\t{HOOK_HOT_CANDIDATE, 0, \"EnumFontsA\", (FARPROC)EnumFontsA, (FARPROC *)&pEnumFontsA, (FARPROC)extEnumFontsA}, // Titanic\n\t{HOOK_HOT_CANDIDATE, 0, \"SelectObject\", (FARPROC)SelectObject, (FARPROC *)&pSelectObject, (FARPROC)extSelectObject}, // font scaling ....\n\t{HOOK_HOT_CANDIDATE, 0, \"DeleteObject\", (FARPROC)DeleteObject, (FARPROC *)&pDeleteObject, (FARPROC)extDeleteObject}, // font scaling ....\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type GammaHooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"SetDeviceGammaRamp\", (FARPROC)SetDeviceGammaRamp, (FARPROC *)&pGDISetDeviceGammaRamp, (FARPROC)extSetDeviceGammaRamp},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetDeviceGammaRamp\", (FARPROC)GetDeviceGammaRamp, (FARPROC *)&pGDIGetDeviceGammaRamp, (FARPROC)extGetDeviceGammaRamp},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type FontHooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"CreateScalableFontResourceA\", (FARPROC)CreateScalableFontResourceA, (FARPROC *)&pCreateScalableFontResourceA, (FARPROC)extCreateScalableFontResourceA},\n\t{HOOK_IAT_CANDIDATE, 0, \"CreateScalableFontResourceW\", (FARPROC)CreateScalableFontResourceW, (FARPROC *)&pCreateScalableFontResourceW, (FARPROC)extCreateScalableFontResourceW},\n\t{HOOK_IAT_CANDIDATE, 0, \"AddFontResourceA\", (FARPROC)AddFontResourceA, (FARPROC *)&pAddFontResourceA, (FARPROC)extAddFontResourceA},\n\t{HOOK_IAT_CANDIDATE, 0, \"AddFontResourceW\", (FARPROC)AddFontResourceW, (FARPROC *)&pAddFontResourceW, (FARPROC)extAddFontResourceW},\n\t// v2.04.05: Used by \"Warhammer: Shadow of the Horned Rat\"\n\t{HOOK_IAT_CANDIDATE, 0, \"RemoveFontResourceA\", (FARPROC)RemoveFontResourceA, (FARPROC *)&pRemoveFontResourceA, (FARPROC)extRemoveFontResourceA},\n\t{HOOK_IAT_CANDIDATE, 0, \"RemoveFontResourceW\", (FARPROC)RemoveFontResourceW, (FARPROC *)&pRemoveFontResourceW, (FARPROC)extRemoveFontResourceW},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\n/*\nstatic HookEntryEx_Type LockWHooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"SetBkColor\", (FARPROC)SetBkColor, (FARPROC *)&pSetBkColor, (FARPROC)extSetBkColor},\n\t{HOOK_HOT_CANDIDATE, 0, \"SetBkMode\", (FARPROC)SetBkMode, (FARPROC *)&pSetBkMode, (FARPROC)extSetBkMode},\n\t{HOOK_HOT_CANDIDATE, 0, \"SetTextColor\", (FARPROC)SetTextColor, (FARPROC *)&pSetTextColor, (FARPROC)extSetTextColor},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n*/\n\nextern HRESULT WINAPI extDirectDrawCreate(GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *);\nextern HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *, LPDIRECTDRAW FAR *, REFIID, IUnknown FAR *);\n\nstatic char *libname = \"gdi32.dll\";\n\nvoid HookGDI32Init()\n{\n\tHookLibInitEx(Hooks);\n\tHookLibInitEx(RemapHooks);\n\tHookLibInitEx(ScaledHooks);\n\tHookLibInitEx(SyscallHooks);\n\tHookLibInitEx(EmulateHooks);\n\tHookLibInitEx(TextHooks);\n\tHookLibInitEx(GammaHooks);\n\t//HookLibInitEx(LockWHooks);\n}\n\nvoid HookGDI32(HMODULE module)\n{\n\tHookLibraryEx(module, Hooks, libname);\n\n\tif (dxw.GDIEmulationMode != GDIMODE_NONE) HookLibraryEx(module, SyscallHooks, libname);\n\tif (dxw.dwFlags1 & CLIENTREMAPPING)\t\tHookLibraryEx(module, RemapHooks, libname);\n\tif (dxw.dwFlags2 & GDISTRETCHED)\t\tHookLibraryEx(module, ScaledHooks, libname);\n\tif (dxw.dwFlags3 & GDIEMULATEDC)\t\tHookLibraryEx(module, EmulateHooks, libname);\t\n\tif (dxw.dwFlags1 & FIXTEXTOUT)\t\t\tHookLibraryEx(module, TextHooks, libname);\n\tif (dxw.dwFlags2 & DISABLEGAMMARAMP)\tHookLibraryEx(module, GammaHooks, libname);\n\t// v2.02.33 - for \"Stratego\" compatibility option\n\tif(dxw.dwFlags3 & FONTBYPASS)\t\t\tHookLibraryEx(module, FontHooks, libname);\n\t//if(1)\t\t\t\t\t\t\t\t\tHookLibraryEx(module, LockWHooks, libname);\n}\n\nFARPROC Remap_GDI32_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\n\tif(addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\n\tif (dxw.GDIEmulationMode != GDIMODE_NONE) if(addr=RemapLibraryEx(proc, hModule, SyscallHooks)) return addr;\n\tif (dxw.dwFlags1 & CLIENTREMAPPING)\t\tif(addr=RemapLibraryEx(proc, hModule, RemapHooks)) return addr;\n\tif (dxw.dwFlags2 & GDISTRETCHED)\t\tif (addr=RemapLibraryEx(proc, hModule, ScaledHooks)) return addr;\n\tif (dxw.dwFlags3 & GDIEMULATEDC)\t\tif (addr=RemapLibraryEx(proc, hModule, EmulateHooks)) return addr;\n\tif (dxw.dwFlags1 & FIXTEXTOUT)\t\t\tif(addr=RemapLibraryEx(proc, hModule, TextHooks)) return addr;\n\tif (dxw.dwFlags2 & DISABLEGAMMARAMP)\tif(addr=RemapLibraryEx(proc, hModule, GammaHooks)) return addr;\n\t// v2.02.33 - for \"Stratego\" compatibility option\n\tif (dxw.dwFlags3 & FONTBYPASS)\t\t\tif(addr=RemapLibraryEx(proc, hModule, FontHooks)) return addr;\n\t//if (1)\t\t\t\t\t\t\t\t\tif(addr=RemapLibraryEx(proc, hModule, LockWHooks)) return addr;\n\n\treturn NULL;\n}\n\n//--------------------------------------------------------------------------------------------\n//\n// extern and common functions\n//\n//--------------------------------------------------------------------------------------------\n\nextern DWORD PaletteEntries[256];\nextern Unlock4_Type pUnlockMethod(int);\nextern HRESULT WINAPI sBlt(int, Blt_Type, char *, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX, BOOL);\n\nextern GetDC_Type pGetDC;\nextern ReleaseDC_Type pReleaseDC1;\n\nstatic char *ExplainDIBUsage(UINT u)\n{\n\tchar *p;\n\tswitch(u){\n\t\tcase DIB_PAL_COLORS: p=\"DIB_PAL_COLORS\"; break;\n\t\tcase DIB_RGB_COLORS: p=\"DIB_RGB_COLORS\"; break;\n\t\tdefault: p=\"invalid\"; break;\n\t}\n\treturn p;\n}\n\nstatic char *sBMIDump(BITMAPINFO *pbmi)\n{\n\tstatic char s[256];\n\tsprintf(s, \"colors RGBX=(%x,%x,%x,%x) header bitc=%d size=(%dx%d) compr=%x\", \n\t\tpbmi->bmiColors->rgbRed, pbmi->bmiColors->rgbGreen, pbmi->bmiColors->rgbBlue, pbmi->bmiColors->rgbReserved,\n\t\tpbmi->bmiHeader.biBitCount, pbmi->bmiHeader.biWidth, pbmi->bmiHeader.biHeight, pbmi->bmiHeader.biCompression);\n\treturn s;\n}\n\nstatic void TraceBITMAPINFOHEADER(char *fName, BITMAPINFOHEADER *bmi)\n{\n\tOutTrace(\"%s: BitmapInfo {Size=%d dim=(%dx%d) Planes=%d bitcount=%d Compression=%x SizeImage=%d PelsPerMeter=%dx%d colors=U%d:I%d}\\n\",\n\t\tfName, bmi->biSize, bmi->biWidth, bmi->biHeight, bmi->biPlanes, bmi->biBitCount, bmi->biCompression, \n\t\tbmi->biSizeImage, bmi->biXPelsPerMeter, bmi->biYPelsPerMeter, bmi->biClrUsed, bmi->biClrImportant);\n\tif(bmi->biSize > sizeof(BITMAPINFOHEADER)){\n\t\tBITMAPV4HEADER *bm4 = (BITMAPV4HEADER *)bmi;\n\t\tOutTrace(\"%s: BitmapInfoV4 {RGBA mask=%x:%x:%x:%x cstype=%x gamma RGB=%x:%x:%x}\\n\",\n\t\t\tfName, bm4->bV4RedMask, bm4->bV4GreenMask, bm4->bV4BlueMask, bm4->bV4AlphaMask,\n\t\t\tbm4->bV4CSType, bm4->bV4GammaRed, bm4->bV4GammaGreen, bm4->bV4GammaBlue);\n\t}\n\tif(bmi->biSize > sizeof(BITMAPV4HEADER)){\n\t\tBITMAPV5HEADER *bm5 = (BITMAPV5HEADER *)bmi;\n\t\tOutTrace(\"%s: BitmapInfoV5 {intent=%x profiledata=%x profilesize=%x resvd=%x}\\n\",\n\t\t\tfName, bm5->bV5Intent, bm5->bV5ProfileData, bm5->bV5ProfileSize, bm5->bV5Reserved);\n\t}\n}\n\n//--------------------------------------------------------------------------------------------\n//\n// API hookers\n//\n//--------------------------------------------------------------------------------------------\n\nint WINAPI extGetDeviceCaps(HDC hdc, int nindex)\n{\n\tDWORD res;\n\t\n\tres = (*pGDIGetDeviceCaps)(hdc, nindex);\n\tif(IsTraceDDRAW){\n\t\tchar sInfo[1024];\n\t\tsprintf(sInfo, \"GetDeviceCaps: hdc=%x index=%x(%s)\", hdc, nindex, ExplainDeviceCaps(nindex));\n\t\tswitch(nindex){\n\t\t\tcase RASTERCAPS:\n\t\t\t\tsprintf(sInfo, \"%s res=0x%04x(%s)\\n\", sInfo, res, ExplainRasterCaps(res)); break;\n\t\t\tcase BITSPIXEL:\n\t\t\tcase COLORRES:\n\t\t\tcase VERTRES:\n\t\t\tcase HORZRES:\n\t\t\tcase SIZEPALETTE:\n\t\t\tcase NUMRESERVED:\n\t\t\t\tsprintf(sInfo, \"%s res=%d\\n\", sInfo, res); break;\n\t\t\tdefault:\n\t\t\t\tsprintf(sInfo, \"%s res=0x%04x\\n\", sInfo, res); break;\n\t\t}\n\t\tOutTrace(sInfo);\n\t}\n\n\tswitch(nindex){\n\tcase VERTRES:\n\t\tif(dxw.Windowize){\n\t\t\tif(dxw.IsDesktop(WindowFromDC(hdc))) \n\t\t\t\tres= dxw.GetScreenHeight();\n\t\t\telse {\n\t\t\t\tif(OBJ_DC == (*pGetObjectType)(hdc)){\n\t\t\t\t\tswitch(dxw.GDIEmulationMode){\n\t\t\t\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase GDIMODE_STRETCHED:\n\t\t\t\t\t\t\tint dummy = 0;\n\t\t\t\t\t\t\tdxw.UnmapClient(&dummy, (int *)&res);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tOutTraceDW(\"GetDeviceCaps: fix(2) VERTRES cap=%d\\n\", res);\n\t\t}\n\t\tbreak;\n\tcase HORZRES:\n\t\tif(dxw.Windowize){\n\t\t\tif(dxw.IsDesktop(WindowFromDC(hdc))) \n\t\t\t\tres= dxw.GetScreenWidth();\n\t\t\telse {\n\t\t\t\tif(OBJ_DC == (*pGetObjectType)(hdc)){\n\t\t\t\t\tswitch(dxw.GDIEmulationMode){\n\t\t\t\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase GDIMODE_STRETCHED:\n\t\t\t\t\t\t\tint dummy = 0;\n\t\t\t\t\t\t\tdxw.UnmapClient((int *)&res, &dummy);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tOutTraceDW(\"GetDeviceCaps: fix(2) HORZRES cap=%d\\n\", res);\n\t\t}\n\t\tbreak;\n\n\t\tif(dxw.Windowize){\n\t\t\tres= dxw.GetScreenWidth();\n\t\t}\n\t\tbreak;\n\t// WARNING: in no-emu mode, the INIT8BPP and INIT16BPP flags expose capabilities that\n\t// are NOT implemented and may cause later troubles!\n\tcase RASTERCAPS:\n\t\tif(dxw.dwFlags2 & INIT8BPP) {\n\t\t\tres |= RC_PALETTE; // v2.02.12\n\t\t\tOutTraceDW(\"GetDeviceCaps: fix(2) RASTERCAPS setting RC_PALETTE cap=%x\\n\", res);\n\t\t}\n\t\tbreak;\n\tcase BITSPIXEL:\n\tcase COLORRES:\n\t\tif((dxw.dwFlags2 & (INIT8BPP|INIT16BPP)) || (dxw.dwFlags7 & (INIT24BPP|INIT32BPP))){ // v2.02.32 fix\n\t\t\tif(dxw.dwFlags2 & INIT8BPP) res = 8;\n\t\t\tif(dxw.dwFlags2 & INIT16BPP) res = 16;\n\t\t\tif(dxw.dwFlags7 & INIT24BPP) res = 24;\n\t\t\tif(dxw.dwFlags7 & INIT32BPP) res = 32;\n\t\t\tOutTraceDW(\"GetDeviceCaps: fix(2) BITSPIXEL/COLORRES cap=%d\\n\", res);\n\t\t}\n\t\tbreak;\n\t//case NUMCOLORS: // numcolors windows bug fix....\n\t//\tif(res == -1) res=1;\n\t//\treturn res;\n\t}\n\n\tif(dxw.dwFlags1 & EMULATESURFACE){\n\t\tswitch(nindex){\n\t\tcase RASTERCAPS:\n\t\t\tif((dxw.VirtualPixelFormat.dwRGBBitCount==8) || (dxw.dwFlags2 & INIT8BPP)){\n\t\t\t\tres |= RC_PALETTE;\n\t\t\t\tOutTraceDW(\"GetDeviceCaps: fix(3) RASTERCAPS setting RC_PALETTE cap=%x(%s)\\n\", res, ExplainRasterCaps(res));\n\t\t\t}\n\t\t\tbreak;\n\t\tcase BITSPIXEL:\n\t\tcase COLORRES:\n\t\t\tint PrevRes;\n\t\t\tPrevRes=res;\n\t\t\tif(dxw.VirtualPixelFormat.dwRGBBitCount!=0) res = dxw.VirtualPixelFormat.dwRGBBitCount;\n\t\t\tif(dxw.dwFlags2 & INIT8BPP) res = 8;\n\t\t\tif(dxw.dwFlags2 & INIT16BPP) res = 16;\n\t\t\tif(dxw.dwFlags7 & INIT24BPP) res = 24;\n\t\t\tif(dxw.dwFlags7 & INIT32BPP) res = 32;\n\t\t\tif(PrevRes != res) OutTraceDW(\"GetDeviceCaps: fix(3) BITSPIXEL/COLORRES cap=%d\\n\", res);\n\t\t\tbreak;\n\t\tcase SIZEPALETTE:\n\t\t\tres = 256;\n\t\t\tOutTraceDW(\"GetDeviceCaps: fix(3) SIZEPALETTE cap=%x\\n\", res);\n\t\t\tbreak;\n\t\tcase NUMRESERVED:\n\t\t\tres = 0;\n\t\t\tOutTraceDW(\"GetDeviceCaps: fix(3) NUMRESERVED cap=%x\\n\", res);\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn res;\n}\n\nBOOL WINAPI extTextOutA(HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cchString)\n{\n\tBOOL ret;\n\textern BOOL gFixed;\n\tOutTraceDW(\"TextOutA: hdc=%x xy=(%d,%d) str=(%d)\\\"%.*s\\\"\\n\", hdc, nXStart, nYStart, cchString, cchString, lpString);\n\n\tif (!gFixed && dxw.IsToRemap(hdc)){\n\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pGDITextOutA)(sdc.GetHdc(), nXStart, nYStart, lpString, cchString);\n\t\t\t\t// update whole screen to avoid make calculations about text position & size\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&nXStart, &nYStart);\n\t\t\t\tOutTraceDW(\"TextOut: fixed dest=(%d,%d)\\n\", nXStart, nYStart);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tret=(*pGDITextOutA)(hdc, nXStart, nYStart, lpString, cchString);\n\tif(!ret) OutTraceE(\"TextOutA: ERROR ret=%x\\n\", ret); \n\treturn ret;\n}\n\nBOOL WINAPI extTextOutW(HDC hdc, int nXStart, int nYStart, LPCWSTR lpString, int cchString)\n{\n\tBOOL ret;\n\textern BOOL gFixed;\n\tOutTraceDW(\"TextOutW: hdc=%x xy=(%d,%d) str=(%d)\\\"%.*ls\\\"\\n\", hdc, nXStart, nYStart, cchString, cchString, lpString);\n\n\tif (!gFixed && dxw.IsToRemap(hdc)){\n\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pGDITextOutW)(sdc.GetHdc(), nXStart, nYStart, lpString, cchString);\n\t\t\t\t// update whole screen to avoid make calculations about text position & size\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&nXStart, &nYStart);\n\t\t\t\tOutTraceDW(\"TextOutW: fixed dest=(%d,%d)\\n\", nXStart, nYStart);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tret=(*pGDITextOutW)(hdc, nXStart, nYStart, lpString, cchString);\n\tif(!ret) OutTraceE(\"TextOutW: ERROR ret=%x\\n\", ret); \n\treturn ret;\n}\n\nBOOL WINAPI extScaleWindowExtEx(HDC hdc, int Xnum, int Xdenom, int Ynum, int Ydenom, LPSIZE lpSize)\n{\n\tOutTraceDW(\"ScaleWindowExtEx: hdc=%x num=(%d,%d) denom=(%d,%d) lpSize=%d\\n\",\n\t\thdc, Xnum, Ynum, Xdenom, Ydenom, lpSize);\n\n\tMessageBox(0, \"ScaleWindowExtEx\", \"to fix\", MB_OK | MB_ICONEXCLAMATION);\n\n\treturn (*pGDIScaleWindowExtEx)(hdc, Xnum, Xdenom, Ynum, Ydenom, lpSize);\n}\n\nBOOL WINAPI extRectangle(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)\n{\n\tint ret;\n\n\tOutTraceDW(\"Rectangle: hdc=%x xy=(%d,%d)-(%d,%d)\\n\", hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);\n\n\tif (dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pGDIRectangle)(sdc.GetHdc(), nLeftRect, nTopRect, nRightRect, nBottomRect);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, nLeftRect, nTopRect, nRightRect-nLeftRect, nBottomRect-nTopRect);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect);\n\t\t\t\tOutTraceDW(\"Rectangle: fixed dest=(%d,%d)-(%d,%d)\\n\", nLeftRect, nTopRect, nRightRect, nBottomRect);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tret=(*pGDIRectangle)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);\n\tif(!ret) OutTraceE(\"Rectangle: ERROR ret=%x\\n\", ret); \n\treturn ret;\n}\n\nint WINAPI extGDISaveDC(HDC hdc)\n{\n\tint ret;\n\tret=(*pGDISaveDC)(hdc);\n\tOutTraceDW(\"GDI.SaveDC: hdc=%x ret=%x\\n\", hdc, ret);\n\treturn ret;\n}\n\nBOOL WINAPI extGDIRestoreDC(HDC hdc, int nSavedDC)\n{\n\tBOOL ret;\n\tret=(*pGDIRestoreDC)(hdc, nSavedDC);\n\tOutTraceDW(\"GDI.RestoreDC: hdc=%x nSavedDC=%x ret=%x\\n\", hdc, nSavedDC, ret);\n\treturn ret;\n}\n\n/* --------------------------------------------------------------------------- */\n/*     Palette handling                                                        */\n/* --------------------------------------------------------------------------- */\n\nextern HDC hFlippedDC;\nextern BOOL bFlippedDC;\nextern void mySetPalette(int, int, LPPALETTEENTRY);\n\n// v2.1.75: Hooking for GDI32 CreatePalette, SelectPalette, RealizePalette: \n// maps the GDI palette to the buffered DirectDraw one. This fixes the screen \n// output for \"Dementia\" (a.k.a. \"Armed & Delirious\").\n\n// In emulated mode (when color depyth is 8BPP ?) it may happen that the game\n// expects to get the requested system palette entries, while the 32BPP screen\n// returns 0. \"Mission Force Cyberstorm\" is one of these. Returning the same\n// value as nEntries, even though lppe is untouched, fixes the problem.\n\nPALETTEENTRY DefaultSystemPalette[256]={ // default palette, captured on my PC with video mode set to 8BPP\n\t{0x00,0x00,0x00,0x00},{0x80,0x00,0x00,0x00},{0x00,0x80,0x00,0x00},{0x80,0x80,0x00,0x00},\n\t{0x00,0x00,0x80,0x00},{0x80,0x00,0x80,0x00},{0x00,0x80,0x80,0x00},{0xc0,0xc0,0xc0,0x00},\n\t{0xa0,0xa0,0xa0,0x00},{0xf0,0xf0,0xf0,0x00},{0xc0,0xdc,0xc0,0x00},{0xa6,0xca,0xf0,0x00},\n\t{0x04,0x04,0x04,0x00},{0x08,0x08,0x08,0x00},{0x0c,0x0c,0x0c,0x00},{0x11,0x11,0x11,0x00},\n\t{0x16,0x16,0x16,0x00},{0x1c,0x1c,0x1c,0x00},{0x22,0x22,0x22,0x00},{0x29,0x29,0x29,0x00},\n\t{0x55,0x55,0x55,0x00},{0x4d,0x4d,0x4d,0x00},{0x42,0x42,0x42,0x00},{0x39,0x39,0x39,0x00},\n\t{0xff,0x7c,0x80,0x00},{0xff,0x50,0x50,0x00},{0xd6,0x00,0x93,0x00},{0xcc,0xec,0xff,0x00},\n\t{0xef,0xd6,0xc6,0x00},{0xe7,0xe7,0xd6,0x00},{0xad,0xa9,0x90,0x00},{0x33,0x00,0x00,0x00},\n\t{0x66,0x00,0x00,0x00},{0x99,0x00,0x00,0x00},{0xcc,0x00,0x00,0x00},{0x00,0x33,0x00,0x00},\n\t{0x33,0x33,0x00,0x00},{0x66,0x33,0x00,0x00},{0x99,0x33,0x00,0x00},{0xcc,0x33,0x00,0x00},\n\t{0xff,0x33,0x00,0x00},{0x00,0x66,0x00,0x00},{0x33,0x66,0x00,0x00},{0x66,0x66,0x00,0x00},\n\t{0x99,0x66,0x00,0x00},{0xcc,0x66,0x00,0x00},{0xff,0x66,0x00,0x00},{0x00,0x99,0x00,0x00},\n\t{0x33,0x99,0x00,0x00},{0x66,0x99,0x00,0x00},{0x99,0x99,0x00,0x00},{0xcc,0x99,0x00,0x00},\n\t{0xff,0x99,0x00,0x00},{0x00,0xcc,0x00,0x00},{0x33,0xcc,0x00,0x00},{0x66,0xcc,0x00,0x00},\n\t{0x99,0xcc,0x00,0x00},{0xcc,0xcc,0x00,0x00},{0xff,0xcc,0x00,0x00},{0x66,0xff,0x00,0x00},\n\t{0x99,0xff,0x00,0x00},{0xcc,0xff,0x00,0x00},{0x00,0x00,0x33,0x00},{0x33,0x00,0x33,0x00},\n\t{0x66,0x00,0x33,0x00},{0x99,0x00,0x33,0x00},{0xcc,0x00,0x33,0x00},{0xff,0x00,0x33,0x00},\n\t{0x00,0x33,0x33,0x00},{0x33,0x33,0x33,0x00},{0x66,0x33,0x33,0x00},{0x99,0x33,0x33,0x00},\n\t{0xcc,0x33,0x33,0x00},{0xff,0x33,0x33,0x00},{0x00,0x66,0x33,0x00},{0x33,0x66,0x33,0x00},\n\t{0x66,0x66,0x33,0x00},{0x99,0x66,0x33,0x00},{0xcc,0x66,0x33,0x00},{0xff,0x66,0x33,0x00},\n\t{0x00,0x99,0x33,0x00},{0x33,0x99,0x33,0x00},{0x66,0x99,0x33,0x00},{0x99,0x99,0x33,0x00},\n\t{0xcc,0x99,0x33,0x00},{0xff,0x99,0x33,0x00},{0x00,0xcc,0x33,0x00},{0x33,0xcc,0x33,0x00},\n\t{0x66,0xcc,0x33,0x00},{0x99,0xcc,0x33,0x00},{0xcc,0xcc,0x33,0x00},{0xff,0xcc,0x33,0x00},\n\t{0x33,0xff,0x33,0x00},{0x66,0xff,0x33,0x00},{0x99,0xff,0x33,0x00},{0xcc,0xff,0x33,0x00},\n\t{0xff,0xff,0x33,0x00},{0x00,0x00,0x66,0x00},{0x33,0x00,0x66,0x00},{0x66,0x00,0x66,0x00},\n\t{0x99,0x00,0x66,0x00},{0xcc,0x00,0x66,0x00},{0xff,0x00,0x66,0x00},{0x00,0x33,0x66,0x00},\n\t{0x33,0x33,0x66,0x00},{0x66,0x33,0x66,0x00},{0x99,0x33,0x66,0x00},{0xcc,0x33,0x66,0x00},\n\t{0xff,0x33,0x66,0x00},{0x00,0x66,0x66,0x00},{0x33,0x66,0x66,0x00},{0x66,0x66,0x66,0x00},\n\t{0x99,0x66,0x66,0x00},{0xcc,0x66,0x66,0x00},{0x00,0x99,0x66,0x00},{0x33,0x99,0x66,0x00},\n\t{0x66,0x99,0x66,0x00},{0x99,0x99,0x66,0x00},{0xcc,0x99,0x66,0x00},{0xff,0x99,0x66,0x00},\n\t{0x00,0xcc,0x66,0x00},{0x33,0xcc,0x66,0x00},{0x99,0xcc,0x66,0x00},{0xcc,0xcc,0x66,0x00},\n\t{0xff,0xcc,0x66,0x00},{0x00,0xff,0x66,0x00},{0x33,0xff,0x66,0x00},{0x99,0xff,0x66,0x00},\n\t{0xcc,0xff,0x66,0x00},{0xff,0x00,0xcc,0x00},{0xcc,0x00,0xff,0x00},{0x00,0x99,0x99,0x00},\n\t{0x99,0x33,0x99,0x00},{0x99,0x00,0x99,0x00},{0xcc,0x00,0x99,0x00},{0x00,0x00,0x99,0x00},\n\t{0x33,0x33,0x99,0x00},{0x66,0x00,0x99,0x00},{0xcc,0x33,0x99,0x00},{0xff,0x00,0x99,0x00},\n\t{0x00,0x66,0x99,0x00},{0x33,0x66,0x99,0x00},{0x66,0x33,0x99,0x00},{0x99,0x66,0x99,0x00},\n\t{0xcc,0x66,0x99,0x00},{0xff,0x33,0x99,0x00},{0x33,0x99,0x99,0x00},{0x66,0x99,0x99,0x00},\n\t{0x99,0x99,0x99,0x00},{0xcc,0x99,0x99,0x00},{0xff,0x99,0x99,0x00},{0x00,0xcc,0x99,0x00},\n\t{0x33,0xcc,0x99,0x00},{0x66,0xcc,0x66,0x00},{0x99,0xcc,0x99,0x00},{0xcc,0xcc,0x99,0x00},\n\t{0xff,0xcc,0x99,0x00},{0x00,0xff,0x99,0x00},{0x33,0xff,0x99,0x00},{0x66,0xcc,0x99,0x00},\n\t{0x99,0xff,0x99,0x00},{0xcc,0xff,0x99,0x00},{0xff,0xff,0x99,0x00},{0x00,0x00,0xcc,0x00},\n\t{0x33,0x00,0x99,0x00},{0x66,0x00,0xcc,0x00},{0x99,0x00,0xcc,0x00},{0xcc,0x00,0xcc,0x00},\n\t{0x00,0x33,0x99,0x00},{0x33,0x33,0xcc,0x00},{0x66,0x33,0xcc,0x00},{0x99,0x33,0xcc,0x00},\n\t{0xcc,0x33,0xcc,0x00},{0xff,0x33,0xcc,0x00},{0x00,0x66,0xcc,0x00},{0x33,0x66,0xcc,0x00},\n\t{0x66,0x66,0x99,0x00},{0x99,0x66,0xcc,0x00},{0xcc,0x66,0xcc,0x00},{0xff,0x66,0x99,0x00},\n\t{0x00,0x99,0xcc,0x00},{0x33,0x99,0xcc,0x00},{0x66,0x99,0xcc,0x00},{0x99,0x99,0xcc,0x00},\n\t{0xcc,0x99,0xcc,0x00},{0xff,0x99,0xcc,0x00},{0x00,0xcc,0xcc,0x00},{0x33,0xcc,0xcc,0x00},\n\t{0x66,0xcc,0xcc,0x00},{0x99,0xcc,0xcc,0x00},{0xcc,0xcc,0xcc,0x00},{0xff,0xcc,0xcc,0x00},\n\t{0x00,0xff,0xcc,0x00},{0x33,0xff,0xcc,0x00},{0x66,0xff,0x99,0x00},{0x99,0xff,0xcc,0x00},\n\t{0xcc,0xff,0xcc,0x00},{0xff,0xff,0xcc,0x00},{0x33,0x00,0xcc,0x00},{0x66,0x00,0xff,0x00},\n\t{0x99,0x00,0xff,0x00},{0x00,0x33,0xcc,0x00},{0x33,0x33,0xff,0x00},{0x66,0x33,0xff,0x00},\n\t{0x99,0x33,0xff,0x00},{0xcc,0x33,0xff,0x00},{0xff,0x33,0xff,0x00},{0x00,0x66,0xff,0x00},\n\t{0x33,0x66,0xff,0x00},{0x66,0x66,0xcc,0x00},{0x99,0x66,0xff,0x00},{0xcc,0x66,0xff,0x00},\n\t{0xff,0x66,0xcc,0x00},{0x00,0x99,0xff,0x00},{0x33,0x99,0xff,0x00},{0x66,0x99,0xff,0x00},\n\t{0x99,0x99,0xff,0x00},{0xcc,0x99,0xff,0x00},{0xff,0x99,0xff,0x00},{0x00,0xcc,0xff,0x00},\n\t{0x33,0xcc,0xff,0x00},{0x66,0xcc,0xff,0x00},{0x99,0xcc,0xff,0x00},{0xcc,0xcc,0xff,0x00},\n\t{0xff,0xcc,0xff,0x00},{0x33,0xff,0xff,0x00},{0x66,0xff,0xcc,0x00},{0x99,0xff,0xff,0x00},\n\t{0xcc,0xff,0xff,0x00},{0xff,0x66,0x66,0x00},{0x66,0xff,0x66,0x00},{0xff,0xff,0x66,0x00},\n\t{0x66,0x66,0xff,0x00},{0xff,0x66,0xff,0x00},{0x66,0xff,0xff,0x00},{0xa5,0x00,0x21,0x00},\n\t{0x5f,0x5f,0x5f,0x00},{0x77,0x77,0x77,0x00},{0x86,0x86,0x86,0x00},{0x96,0x96,0x96,0x00},\n\t{0xcb,0xcb,0xcb,0x00},{0xb2,0xb2,0xb2,0x00},{0xd7,0xd7,0xd7,0x00},{0xdd,0xdd,0xdd,0x00},\n\t{0xe3,0xe3,0xe3,0x00},{0xea,0xea,0xea,0x00},{0xff,0xfb,0xf0,0x00},{0xa0,0xa0,0xa4,0x00},\n\t{0x80,0x80,0x80,0x00},{0xff,0x00,0x00,0x00},{0x00,0xff,0x00,0x00},{0xff,0xff,0x00,0x00},\n\t{0x00,0x00,0xff,0x00},{0xff,0x00,0xff,0x00},{0x00,0xff,0xff,0x00},{0xff,0xff,0xff,0x00}\n};\n\nHPALETTE WINAPI extGDICreatePalette(CONST LOGPALETTE *plpal)\n{\n\tHPALETTE ret;\n\n\tOutTraceDW(\"GDI.CreatePalette: plpal=%x version=%x NumEntries=%d\\n\", plpal, plpal->palVersion, plpal->palNumEntries);\n\tif(IsDebug) dxw.DumpPalette(plpal->palNumEntries, (LPPALETTEENTRY)plpal->palPalEntry);\n\tret=(*pGDICreatePalette)(plpal);\n\tOutTraceDW(\"GDI.CreatePalette: hPalette=%x\\n\", ret);\n\treturn ret;\n}\n\nHPALETTE hDesktopPalette=NULL;\n\nHPALETTE WINAPI extSelectPalette(HDC hdc, HPALETTE hpal, BOOL bForceBackground)\n{\n\tHPALETTE ret;\n\n\tOutTraceDW(\"GDI.SelectPalette: hdc=%x hpal=%x ForceBackground=%x\\n\", hdc, hpal, bForceBackground);\n\tif(hdc==dxw.RealHDC) hdc= dxw.VirtualHDC;\n\n\t//if((dxw.dwFlags1 & EMULATESURFACE)  && (dxw.dwFlags6 & SYNCPALETTE) && bFlippedDC){\n\tif((dxw.dwFlags1 & EMULATESURFACE)  && (dxw.dwFlags6 & SYNCPALETTE)){\n\t\thDesktopPalette=hpal;\n\t\tif(hFlippedDC){\n\t\t\thdc = hFlippedDC;\n\t\t\tret=(*pGDISelectPalette)(hdc, hpal, bForceBackground);\n\t\t}\n\t\telse{\n\t\t\textern GetDC_Type pGetDCMethod();\n\t\t\textern ReleaseDC_Type pReleaseDCMethod();\n\t\t\tLPDIRECTDRAWSURFACE lpDDSPrim;\n\t\t\tlpDDSPrim = dxwss.GetPrimarySurface();\n\t\t\t(*pGetDCMethod())(lpDDSPrim, &hdc);\n\t\t\tret=(*pGDISelectPalette)(hdc, hpal, bForceBackground);\n\t\t\t(*pReleaseDCMethod())(lpDDSPrim, hdc);\n\t\t}\n\t}\n\telse{\n\t\tret=(*pGDISelectPalette)(hdc, hpal, bForceBackground);\n\t\tOutTraceDW(\"GDI.SelectPalette: ret=%x\\n\", ret);\n\t}\n\n\treturn ret;\n}\n\nBOOL WINAPI extAnimatePalette(HPALETTE hpal, UINT iStartIndex, UINT cEntries, const PALETTEENTRY *ppe)\n{\n\t// Invoked by \"Pharaoh's Ascent 1.4\"\n\t// Used by \"Yu No\"\n\tBOOL ret;\n\n#if 0\n\tif((dxw.dwFlags1 & EMULATESURFACE)  && (dxw.dwFlags6 & SYNCPALETTE) && bFlippedDC){\n\t\thDesktopPalette=hpal;\n\t\tif(hFlippedDC){\n\t\t\tret = (*pAnimatePalette)(hpal, iStartIndex, cEntries, ppe);\n\t\t}\n\t\telse{\n\t\t\tHDC hdc;\n\t\t\textern GetDC_Type pGetDCMethod();\n\t\t\textern ReleaseDC_Type pReleaseDCMethod();\n\t\t\tLPDIRECTDRAWSURFACE lpDDSPrim;\n\t\t\tlpDDSPrim = dxwss.GetPrimarySurface();\n\t\t\t(*pGetDCMethod())(lpDDSPrim, &hdc);\n\t\t\tret = (*pAnimatePalette)(hpal, iStartIndex, cEntries, ppe);\n\t\t\t(*pReleaseDCMethod())(lpDDSPrim, hdc);\n\t\t}\n\t}\n\telse{\n\t\tret = (*pAnimatePalette)(hpal, iStartIndex, cEntries, ppe);\n\t}\n#else\n\tret = (*pAnimatePalette)(hpal, iStartIndex, cEntries, ppe);\n#endif\n\tif(!ret) {\n\t\tOutTraceE(\"AnimatePalette ERROR: err=%d\\n\", GetLastError());\n\t\tret = TRUE;\n\t}\n\t// if(dxw.IsFullScreen()) (*pInvalidateRect)(dxw.GethWnd(), NULL, FALSE);\n\treturn ret;\n}\n\nUINT WINAPI extRealizePalette(HDC hdc) \n{\n\tUINT ret;\n\n\tOutTraceDW(\"GDI.RealizePalette: hdc=%x\\n\", hdc);\n\n\tif((dxw.dwFlags1 & EMULATESURFACE) && (dxw.dwFlags6 & SYNCPALETTE)){\n\t\tPALETTEENTRY PalEntries[256];\n\t\tUINT nEntries;\n\t\tif(bFlippedDC) hdc = hFlippedDC;\n\t\tret=(*pGDIRealizePalette)(hdc);\n\t\tOutTraceDW(\"GDI.RealizePalette: RealizePalette on hdc=%x ret=%d\\n\", hdc, ret);\n\t\tnEntries=(*pGetPaletteEntries)(hDesktopPalette, 0, 256, PalEntries);\n\t\tOutTraceDW(\"GDI.RealizePalette: GetPaletteEntries on hdc=%x ret=%d\\n\", hdc, nEntries);\n\t\tmySetPalette(0, nEntries, PalEntries); \n\t\tif(IsDebug && nEntries) dxw.DumpPalette(nEntries, PalEntries);  \n\t\tret=nEntries;\n\n\t\tHRESULT res;\n\t\textern LPDIRECTDRAWPALETTE lpDDP;\n\t\textern SetEntries_Type pSetEntries;\n\t\tif(lpDDP && pSetEntries) res=(*pSetEntries)(lpDDP, 0, 0, 256, PalEntries);\n\t}\n\telse\n\t\tret=(*pGDIRealizePalette)(hdc);\n\n\tOutTraceDW(\"GDI.RealizePalette: hdc=%x nEntries=%d\\n\", hdc, ret);\n\t// if(dxw.IsFullScreen()) (*pInvalidateRect)(dxw.GethWnd(), NULL, FALSE);\n\treturn ret;\n}\n\nUINT WINAPI extGetSystemPaletteEntries(HDC hdc, UINT iStartIndex, UINT nEntries, LPPALETTEENTRY lppe)\n{\n\tint ret;\n\n\tOutTraceDW(\"GetSystemPaletteEntries: hdc=%x start=%d num=%d\\n\", hdc, iStartIndex, nEntries);\n\tret=(*pGDIGetSystemPaletteEntries)(hdc, iStartIndex, nEntries, lppe);\n\tOutTraceDW(\"GetSystemPaletteEntries: ret=%d\\n\", ret);\n\tif((ret == 0) && (dxw.dwFlags1 & EMULATESURFACE) && (dxw.dwFlags6 & SYNCPALETTE)) {\n\t\t// use static default data...\n\t\tfor(UINT idx=0; idx<nEntries; idx++) lppe[idx]=DefaultSystemPalette[iStartIndex+idx]; \n\t\tret = nEntries;\n\t\tOutTraceDW(\"GetSystemPaletteEntries: FIXED ret=%d\\n\", ret);\n\t}\n\tif(IsDebug) dxw.DumpPalette(nEntries, lppe);\n\treturn ret;\n}\n\nUINT WINAPI extSetSystemPaletteUse(HDC hdc, UINT uUsage)\n{\n\t//BOOL res;\n\tOutTraceDW(\"GDI.SetSystemPaletteUse: hdc=%x Usage=%x(%s)\\n\", hdc, uUsage, ExplainPaletteUse(uUsage));\n\treturn SYSPAL_NOSTATIC256;\n}\n\nUINT WINAPI extGetPaletteEntries(HPALETTE hpal, UINT iStartIndex, UINT nEntries, LPPALETTEENTRY lppe)\n{\n\tUINT res;\n\tOutTraceDW(\"GDI.GetPaletteEntries: hpal=%x iStartIndex=%d nEntries=%d\\n\", hpal, iStartIndex, nEntries);\n\tres=(*pGetPaletteEntries)(hpal, iStartIndex, nEntries, lppe);\n\tOutTraceDW(\"GDI.GetPaletteEntries: res-nEntries=%d\\n\", res);\n\tif((res < nEntries) && (dxw.dwFlags6 & SYNCPALETTE)) { \n\t\tres = nEntries;\n\t\tOutTraceDW(\"GDI.GetPaletteEntries: faking missing entries=%d\\n\", res);\n\t}\n\t// GDI Palette applied to ddraw: needed to color the gameplay 3D screen of \"Hyperblade\".\n\tif ((dxw.dwFlags1 & EMULATESURFACE) && (dxw.dwFlags6 & SYNCPALETTE)) mySetPalette(0, nEntries, lppe); \n\tif(IsDebug && res) dxw.DumpPalette(res, lppe);\n\treturn res;\n}\n\nUINT WINAPI extGetSystemPaletteUse(HDC hdc)\n{\n\tUINT res;\n\tOutTraceDW(\"GDI.GetSystemPaletteUse: hdc=%x\\n\", hdc);\n\tres=(*pGetSystemPaletteUse)(hdc);\n\n\tif((res == SYSPAL_ERROR) && (dxw.dwFlags6 & SYNCPALETTE)) res = SYSPAL_NOSTATIC;\n\n\tOutTraceDW(\"GetSystemPaletteUse: res=%x(%s)\\n\", res, ExplainPaletteUse(res));\n\treturn res;\n}\n\nHDC WINAPI extGDICreateDCA(LPSTR lpszDriver, LPSTR lpszDevice, LPSTR lpszOutput, CONST DEVMODE *lpdvmInit)\n{\n\tHDC WinHDC, RetHDC;\n\tOutTraceDW(\"GDI.CreateDCA: Driver=%s Device=%s Output=%s InitData=%x\\n\", \n\t\tlpszDriver?lpszDriver:\"(NULL)\", lpszDevice?lpszDevice:\"(NULL)\", lpszOutput?lpszOutput:\"(NULL)\", lpdvmInit);\n\n\tif (!lpszDriver || !strncmp(lpszDriver,\"DISPLAY\",7)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_NONE:\n\t\t\tcase GDIMODE_STRETCHED:\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\tdefault:\n\t\t\t\tOutTraceDW(\"GDI.CreateDCA: returning window surface DC\\n\");\n\t\t\t\tWinHDC=(*pGDIGetDC)(dxw.GethWnd());\n\t\t\t\tRetHDC=(*pGDICreateCompatibleDC)(WinHDC);\n\t\t\t\t(*pGDIReleaseDC)(dxw.GethWnd(), WinHDC);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse{\n\t\tRetHDC=(*pGDICreateDCA)(lpszDriver, lpszDevice, lpszOutput, lpdvmInit);\n\t}\n\tif(RetHDC)\n\t\tOutTraceDW(\"GDI.CreateDCA: returning HDC=%x\\n\", RetHDC);\n\telse\n\t\tOutTraceE(\"GDI.CreateDCA ERROR: err=%d at %d\\n\", GetLastError(), __LINE__);\n\treturn RetHDC;\n}\n\nHDC WINAPI extGDICreateDCW(LPWSTR lpszDriver, LPWSTR lpszDevice, LPWSTR lpszOutput, CONST DEVMODE *lpdvmInit)\n{\n\tHDC WinHDC, RetHDC;\n\tOutTraceDW(\"GDI.CreateDCW: Driver=%ls Device=%ls Output=%ls InitData=%x\\n\", \n\t\tlpszDriver?lpszDriver:L\"(NULL)\", lpszDevice?lpszDevice:L\"(NULL)\", lpszOutput?lpszOutput:L\"(NULL)\", lpdvmInit);\n\n\tif (!lpszDriver || !wcsncmp(lpszDriver,L\"DISPLAY\",7)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_NONE:\n\t\t\tcase GDIMODE_STRETCHED:\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\tdefault:\n\t\t\t\tOutTraceDW(\"GDI.CreateDCA: returning window surface DC\\n\");\n\t\t\t\tWinHDC=(*pGDIGetDC)(dxw.GethWnd());\n\t\t\t\tRetHDC=(*pGDICreateCompatibleDC)(WinHDC);\n\t\t\t\t(*pGDIReleaseDC)(dxw.GethWnd(), WinHDC);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse{\n\t\tRetHDC=(*pGDICreateDCW)(lpszDriver, lpszDevice, lpszOutput, lpdvmInit);\n\t}\n\tif(RetHDC)\n\t\tOutTraceDW(\"GDI.CreateDCW: returning HDC=%x\\n\", RetHDC);\n\telse\n\t\tOutTraceE(\"GDI.CreateDCW ERROR: err=%d at %d\\n\", GetLastError(), __LINE__);\n\treturn RetHDC;\n}\n\nHDC WINAPI extCreateICA(LPCTSTR lpszDriver, LPCTSTR lpszDevice, LPCTSTR lpszOutput, const DEVMODE *lpdvmInit)\n{\n\tHDC WinHDC, RetHDC;\n\tOutTraceDW(\"GDI.CreateIC: Driver=%s Device=%s Output=%s InitData=%x\\n\", \n\t\tlpszDriver?lpszDriver:\"(NULL)\", lpszDevice?lpszDevice:\"(NULL)\", lpszOutput?lpszOutput:\"(NULL)\", lpdvmInit);\n\n\t// EverQuest Tutorial.exe calls CreateICA passing \"Tutorial\"\n\tif(!lpszDriver || !_stricmp(\"DISPLAY\", lpszDriver)){\n\t\tif(dxw.GDIEmulationMode == GDIMODE_EMULATED){\n\t\t\tRetHDC=dxw.AcquireEmulatedDC(dxw.GethWnd());\n\t\t}\n\t\telse {\n\t\t\tOutTraceDW(\"CreateIC: returning window surface DC\\n\");\n\t\t\tWinHDC = (*pGDIGetDC)(dxw.GethWnd());\n\t\t\tRetHDC = (*pGDICreateCompatibleDC)(WinHDC);\n\t\t\t(*pGDIReleaseDC)(dxw.GethWnd(), WinHDC);\n\t\t}\n\t}\n\telse{\n\t\t// proxy\n\t\tRetHDC = (*pCreateICA)(lpszDriver, lpszDevice, lpszOutput, lpdvmInit);\n\t}\n\n\tOutTraceDW(\"CreateIC: ret=%x\\n\", RetHDC);\n\treturn RetHDC;\n}\n\nHDC WINAPI extGDICreateCompatibleDC(HDC hdc)\n{\n\t// v2.03.75: fixed dc leakage that crashed \"Mechwarrior 3\"\n\tHDC RetHdc;\n\tDWORD LastError;\n\tBOOL bSwitchedToMainWin = FALSE;\n\n\tOutTraceDW(\"GDI.CreateCompatibleDC: hdc=%x\\n\", hdc);\n\t// n.b. useful? hdc == 0 doesn't imply the desktop but rather the current window\n\t// from MSDN:\n\t// hdc[in] A handle to an existing DC. If this handle is NULL the function creates\n\t// a memory DC compatible with the application's current screen.\n\tif(hdc==0 || (WindowFromDC(hdc)==0)) { // v2.03.99: Star Trek Armada\n\t\thdc=(*pGDIGetDC)(dxw.GethWnd()); // potential DC leakage\n\t\tbSwitchedToMainWin = TRUE;\n\t\tOutTraceDW(\"GDI.CreateCompatibleDC: duplicating win HDC hWnd=%x\\n\", dxw.GethWnd()); \n\t}\n\n\t// eliminated error message for errorcode 0.\n\tSetLastError(0);\n\tRetHdc=(*pGDICreateCompatibleDC)(hdc);\n\tif(bSwitchedToMainWin) (*pGDIReleaseDC)(dxw.GethWnd(),hdc); // fixed DC leakage\n\tLastError=GetLastError();\n\tif(LastError == 0){\n\t\tOutTraceDW(\"GDI.CreateCompatibleDC: returning HDC=%x\\n\", RetHdc);\n\t}\n\telse{\n\t\tOutTraceE(\"GDI.CreateCompatibleDC ERROR: err=%d at %d\\n\", LastError, __LINE__);\n\t}\n\treturn RetHdc;\n}\n\n/*-------------------------------------------*/\n\nBOOL WINAPI extGDIBitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop)\n{\n\tBOOL res;\n\tBOOL IsToScreen;\n\tBOOL IsFromScreen;\n\tBOOL IsDCLeakageSrc = FALSE;\n\tBOOL IsDCLeakageDest = FALSE;\n\tint Flux;\n\n\tOutTraceDW(\"GDI.BitBlt: HDC=%x(type=%s) nXDest=%d nYDest=%d nWidth=%d nHeight=%d hdcSrc=%x(type=%s) nXSrc=%d nYSrc=%d dwRop=%x(%s)\\n\", \n\t\thdcDest, GetObjectTypeStr(hdcDest), nXDest, nYDest, nWidth, nHeight, \n\t\thdcSrc, GetObjectTypeStr(hdcSrc), nXSrc, nYSrc, dwRop, ExplainROP(dwRop));\n\n\tOutTraceB(\"GDI.BitBlt: DEBUG FullScreen=%x target hdctype=%x(%s) hwnd=%x\\n\", \n\t\tdxw.IsFullScreen(), (*pGetObjectType)(hdcDest), ExplainDCType((*pGetObjectType)(hdcDest)), WindowFromDC(hdcDest));\n\n\t// beware: HDC could refer to screen DC that are written directly on screen, or memory DC that will be scaled to\n\t// the screen surface later on, on ReleaseDC or ddraw Blit / Flip operation. Scaling of rect coordinates is \n\t// needed only in the first case, and must be avoided on the second, otherwise the image would be scaled twice!\n\n\tif(hdcDest == NULL){\n\t\t// happens in Reah, hdc is NULL despite the fact that BeginPaint returns a valid DC. Too bad, we recover here ...\n\t\thdcDest = (*pGDIGetDC)(dxw.GethWnd());\n\t\tOutTraceB(\"GDI.BitBlt: DEBUG hdc dest=NULL->%x\\n\", hdcDest);\n\t\tIsDCLeakageDest = TRUE;\n\t}\n\tif(hdcSrc == NULL){\n\t\thdcSrc = (*pGDIGetDC)(dxw.GethWnd());\n\t\tOutTraceB(\"GDI.BitBlt: DEBUG hdc src=NULL->%x\\n\", hdcSrc);\n\t\tIsDCLeakageSrc = TRUE;\n\t}\n\n\tIsToScreen=(OBJ_DC == (*pGetObjectType)(hdcDest));\n\tIsFromScreen=(OBJ_DC == (*pGetObjectType)(hdcSrc));\n\tFlux = (IsToScreen ? 1 : 0) + (IsFromScreen ? 2 : 0); \n\tif (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE;\n\n\tif(IsToScreen && (dxw.dwFlags8 & DUMPDEVCONTEXT)) DumpHDC(hdcSrc, nXSrc, nYSrc, nWidth, nHeight);\n\n\tif(dxw.IsFullScreen()){\n\t\t//int nWSrc, nHSrc, \n\t\tint nWDest, nHDest;\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tswitch(Flux){\n\t\t\t\t\tcase 0: // memory to memory\n\t\t\t\t\t\tres=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1: // memory to screen\n\t\t\t\t\tcase 3: // screen to screen\n\t\t\t\t\t\tdxw.HandleFPS(); // handle refresh delays\n\t\t\t\t\t\tsdc.SetOrigin(nXSrc, nYSrc);\n\t\t\t\t\t\tsdc.GetPrimaryDC(hdcDest, hdcSrc);\n\t\t\t\t\t\tres=(*pGDIBitBlt)(sdc.GetHdc(), nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);\n\t\t\t\t\t\tsdc.PutPrimaryDC(hdcDest, TRUE, nXDest, nYDest, nWidth, nHeight);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2: // screen to memory\n\t\t\t\t\t\tsdc.GetPrimaryDC(hdcSrc);\n\t\t\t\t\t\tres=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, sdc.GetHdc(), nXSrc, nYSrc, dwRop);\n\t\t\t\t\t\tsdc.PutPrimaryDC(hdcSrc, TRUE, nXDest, nYDest, nWidth, nHeight);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tnWDest= nWidth;\n\t\t\t\tnHDest= nHeight;\n\t\t\t\tswitch(Flux){\n\t\t\t\t\tcase 1: // memory to screen\n\t\t\t\t\t\t// v1.03.58: BitBlt can blitfrom negative coordinates, StretchBlt can't!\n\t\t\t\t\t\tdxw.HandleFPS(); // handle refresh delays\n\t\t\t\t\t\tif(nXDest < 0){\n\t\t\t\t\t\t\tint nXshift = -nXDest;\n\t\t\t\t\t\t\tnXDest = 0;\n\t\t\t\t\t\t\tnXSrc += nXshift;\n\t\t\t\t\t\t\tnWidth -= nXshift;\n\t\t\t\t\t\t\tnWDest -= nXshift;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(nYDest < 0){\n\t\t\t\t\t\t\tint nYshift = -nYDest;\n\t\t\t\t\t\t\tnYDest = 0;\n\t\t\t\t\t\t\tnYSrc += nYshift;\n\t\t\t\t\t\t\tnHeight -= nYshift;\n\t\t\t\t\t\t\tnHDest -= nYshift;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2: // screen to memory\n\t\t\t\t\t\tdxw.MapClient(&nXSrc, &nYSrc, &nWidth, &nHeight);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tres=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop);\n\t\t\t\tOutTraceB(\"GDI.BitBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\\n\", nXDest, nYDest, nWDest, nHDest);\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\tif (hdcDest==dxw.RealHDC) { \n\t\t\t\t\thdcDest=dxw.VirtualHDC;\n\t\t\t\t\tdxw.HandleFPS(); // handle refresh delays\n\t\t\t\t}\n\t\t\t    res=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);\n\t\t\t\tOutTraceB(\"GDI.BitBlt: DEBUG emulated hdc dest=%x->%x\\n\", dxw.RealHDC, hdcDest);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tres=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse {\n\t\tres=(*pGDIBitBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, dwRop);\n\t}\n\n\tif(IsDCLeakageSrc) (*pGDIReleaseDC)(dxw.GethWnd(), hdcSrc);\n\tif(IsDCLeakageDest) (*pGDIReleaseDC)(dxw.GethWnd(), hdcDest);\n\tif(res && IsToScreen) {\n\t\tdxw.ShowOverlay(hdcDest);\n\t\tif(dxw.dwFlags8 & MARKGDI32) dxw.Mark(hdcDest, FALSE, RGB(0, 0, 255), nXDest, nYDest, nWidth, nHeight);\n\t}\n\tif(!res) OutTraceE(\"GDI.BitBlt: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\treturn res;\n}\n\nBOOL WINAPI extGDIStretchBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, \n\t\t\t\t\t\t\t HDC hdcSrc, int nXSrc, int nYSrc, int nWSrc, int nHSrc, DWORD dwRop)\n{\n\tBOOL res;\n\tBOOL IsToScreen;\n\tBOOL IsFromScreen;\n\tBOOL IsDCLeakageSrc = FALSE;\n\tBOOL IsDCLeakageDest = FALSE;\n\tint Flux;\n\n\tOutTraceDW(\"GDI.StretchBlt: HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d hdcSrc=%x nXSrc=%d nYSrc=%d nWSrc=%d nHSrc=%d dwRop=%x(%s)\\n\", \n\t\thdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop, ExplainROP(dwRop));\n\n\tOutTraceB(\"GDI.StretchBlt: DEBUG FullScreen=%x target hdctype=%x(%s) hwnd=%x\\n\", \n\t\tdxw.IsFullScreen(), (*pGetObjectType)(hdcDest), ExplainDCType((*pGetObjectType)(hdcDest)), WindowFromDC(hdcDest));\n\n\tif(dxw.GDIEmulationMode == GDIMODE_EMULATED){\n\t\tif (hdcDest==dxw.RealHDC) hdcDest=dxw.VirtualHDC;\n\t\tOutTraceB(\"GDI.StretchBlt: DEBUG emulated hdc dest=%x->%x\\n\", dxw.RealHDC, hdcDest);\n\t}\n\n\tif(hdcDest == NULL){\n\t\t// happens in Reah, hdc is NULL despite the fact that BeginPaint returns a valid DC. Too bad, we recover here ...\n\t\thdcDest = (*pGDIGetDC)(dxw.GethWnd());\n\t\tOutTraceB(\"GDI.StretchBlt: DEBUG hdc dest=NULL->%x\\n\", hdcDest);\n\t\tIsDCLeakageDest = TRUE;\n\t}\n\tif(hdcSrc == NULL){\n\t\thdcSrc = (*pGDIGetDC)(dxw.GethWnd());\n\t\tOutTraceB(\"GDI.StretchBlt: DEBUG hdc src=NULL->%x\\n\", hdcSrc);\n\t\tIsDCLeakageSrc = TRUE;\n\t}\n\n\tIsToScreen=(OBJ_DC == (*pGetObjectType)(hdcDest));\n\tIsFromScreen=(OBJ_DC == (*pGetObjectType)(hdcSrc));\n\tFlux = (IsToScreen ? 1 : 0) + (IsFromScreen ? 2 : 0); \n\tif (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE;\n\n\tif(dxw.IsToRemap(hdcDest) && (hdcDest != hdcSrc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tswitch(Flux){\n\t\t\t\t\tcase 0: // memory to memory\n\t\t\t\t\t\tres=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1: // memory to screen\n\t\t\t\t\tcase 3: // screen to screen\n\t\t\t\t\t\tsdc.GetPrimaryDC(hdcDest, hdcSrc);\n\t\t\t\t\t\tsdc.SetOrigin(nXSrc, nYSrc);\n\t\t\t\t\t\tres=(*pGDIStretchBlt)(sdc.GetHdc(), nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop);\n\t\t\t\t\t\tsdc.PutPrimaryDC(hdcDest, TRUE, nXDest, nYDest, nWidth, nHeight);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2: // screen to memory using virtual screen\n\t\t\t\t\t\tsdc.GetPrimaryDC(hdcSrc);\n\t\t\t\t\t\tres=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, sdc.GetHdc(), nXSrc, nYSrc, nWSrc, nHSrc, dwRop);\n\t\t\t\t\t\tsdc.PutPrimaryDC(hdcSrc, TRUE, nXSrc, nYSrc, nWSrc, nHSrc);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: {\n\t\t\t\tint nWDest, nHDest;\n\t\t\t\tnWDest= nWidth;\n\t\t\t\tnHDest= nHeight;\n\t\t\t\tswitch(Flux){\n\t\t\t\t\tcase 1: // memory to screen\n\t\t\t\t\t\tdxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2: // screen to memory\n\t\t\t\t\t\tdxw.MapClient(&nXSrc, &nYSrc, &nWidth, &nHeight);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tres=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop);\n\t\t\t\tOutTraceB(\"GDI.StretchBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\\n\", nXDest, nYDest, nWDest, nHDest);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\tdefault:\n\t\t\t\tres=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse {\n\t\tres=(*pGDIStretchBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, dwRop);\n\t}\n\n\tif(IsDCLeakageSrc) (*pGDIReleaseDC)(dxw.GethWnd(), hdcSrc);\n\tif(IsDCLeakageDest) (*pGDIReleaseDC)(dxw.GethWnd(), hdcDest);\n\tif(res && IsToScreen) {\n\t\tdxw.ShowOverlay(hdcDest);\n\t\tif(dxw.dwFlags8 & MARKGDI32) dxw.Mark(hdcDest, FALSE, RGB(0, 250, 250), nXDest, nYDest, nWidth, nHeight);\n\t}\n\tif(!res) OutTraceE(\"GDI.StretchBlt: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\treturn res;\n}\n\nBOOL WINAPI extGDIPatBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, DWORD dwRop)\n{\n\tBOOL res;\n\tBOOL IsToScreen;\n\tBOOL IsDCLeakageDest = FALSE;\n\n\tOutTraceDW(\"GDI.PatBlt: HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d dwRop=%x(%s)\\n\", \n\t\thdcDest, nXDest, nYDest, nWidth, nHeight, dwRop, ExplainROP(dwRop));\n\n\tOutTraceB(\"GDI.PatBlt: DEBUG FullScreen=%x target hdctype=%x(%s) hwnd=%x\\n\", \n\t\tdxw.IsFullScreen(), (*pGetObjectType)(hdcDest), ExplainDCType((*pGetObjectType)(hdcDest)), WindowFromDC(hdcDest));\n\n\tif(dxw.GDIEmulationMode == GDIMODE_EMULATED){\n\t\tif (hdcDest==dxw.RealHDC) hdcDest=dxw.VirtualHDC;\n\t\tOutTraceB(\"GDI.PatBlt: DEBUG emulated hdc dest=%x->%x\\n\", dxw.RealHDC, hdcDest);\n\t}\n\n\tif(hdcDest == NULL){\n\t\t// happens in Reah, hdc is NULL despite the fact that BeginPaint returns a valid DC. Too bad, we recover here ...\n\t\thdcDest = (*pGDIGetDC)(dxw.GethWnd());\n\t\tOutTraceB(\"GDI.PatBlt: DEBUG hdc dest=NULL->%x\\n\", hdcDest);\n\t\tIsDCLeakageDest = TRUE;\n\t}\n\n\tIsToScreen=(OBJ_DC == (*pGetObjectType)(hdcDest));\n\n\tif (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE;\n\n\tif(dxw.IsToRemap(hdcDest)) {\n\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdcDest);\n\t\t\t\tres=(*pGDIPatBlt)(sdc.GetHdc(),  nXDest, nYDest, nWidth, nHeight, dwRop);\n\t\t\t\tsdc.PutPrimaryDC(hdcDest, TRUE, nXDest, nYDest, nWidth, nHeight);\n\t\t\t\treturn res;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: {\n\t\t\t\tint nWDest, nHDest;\n\t\t\t\tnWDest= nWidth;\n\t\t\t\tnHDest= nHeight;\n\t\t\t\tdxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);\n\t\t\t\tres=(*pGDIPatBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, dwRop);\n\t\t\t\tOutTraceB(\"GDI.PatBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\\n\", nXDest, nYDest, nWDest, nHDest);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\tdefault:\n\t\t\t\tres=(*pGDIPatBlt)(hdcDest,  nXDest, nYDest, nWidth, nHeight, dwRop);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse {\n\t\tres=(*pGDIPatBlt)(hdcDest,  nXDest, nYDest, nWidth, nHeight, dwRop);\n\t}\n\n\tif(IsDCLeakageDest) (*pGDIReleaseDC)(dxw.GethWnd(), hdcDest);\n\tif(res && IsToScreen) {\n\t\tdxw.ShowOverlay(hdcDest);\n\t\tif(dxw.dwFlags8 & MARKGDI32) dxw.Mark(hdcDest, FALSE, RGB(255, 255, 0), nXDest, nYDest, nWidth, nHeight);\n\t}\n\tif(!res) OutTraceE(\"GDI.PatBlt: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\treturn res;\n}\n\nHFONT WINAPI extCreateFont(int nHeight, int nWidth, int nEscapement, int nOrientation, int fnWeight,\n\t\t\t\t DWORD fdwItalic, DWORD fdwUnderline, DWORD fdwStrikeOut, DWORD fdwCharSet,\n\t\t\t\t DWORD fdwOutputPrecision, DWORD fdwClipPrecision, DWORD fdwQuality,\n\t\t\t\t DWORD fdwPitchAndFamily, LPCTSTR lpszFace)\n{\n\tHFONT HFont, HScaled;\n\n\tOutTraceDW(\"CreateFont: h=%d w=%d face=\\\"%s\\\"\\n\", nHeight, nWidth, lpszFace);\n\n\tif(dxw.dwFlags8 & QUALITYFONTS) fdwQuality = BEST_QUALITY;\n\n\tHFont = (*pGDICreateFont)(nHeight, nWidth, nEscapement, nOrientation, fnWeight,\n\t\t\t\t fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet,\n\t\t\t\t fdwOutputPrecision, fdwClipPrecision, fdwQuality, \n\t\t\t\t fdwPitchAndFamily, lpszFace);\n\n\tif((dxw.dwFlags1 & FIXTEXTOUT) && HFont) {\n\t\tif(nHeight > 0) dxw.MapClient(&nWidth, &nHeight);\n\t\telse {\n\t\t\tnHeight= -nHeight;\n\t\t\tdxw.MapClient(&nWidth, &nHeight);\n\t\t\tnHeight= -nHeight;\n\t\t}\n\t\tHScaled = (*pGDICreateFont)(nHeight, nWidth, nEscapement, nOrientation, fnWeight,\n\t\t\t\t\t fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet,\n\t\t\t\t\t fdwOutputPrecision, fdwClipPrecision, fdwQuality, \n\t\t\t\t\t fdwPitchAndFamily, lpszFace);\n\n\t\tif(HScaled){\n\t\t\tOutTraceDW(\"CreateFontIndirect: associate font=%x scaled=%x\\n\", HFont, HScaled);\n\t\t\tfontdb.Push(HFont, HScaled);\n\t\t}\n\t\telse{\n\t\t\tOutTraceE(\"CreateFontIndirect ERROR: scaled font err=%d\\n\", GetLastError());\n\t\t}\n\t}\n\n\tif(HFont)\n\t\tOutTraceDW(\"CreateFont: hfont=%x\\n\", HFont);\n\telse\n\t\tOutTraceDW(\"CreateFont ERROR: err=%d\\n\", GetLastError());\n\treturn HFont;\n}\n\n// CreateFontIndirect hook routine to avoid font aliasing that prevents reverse blitting working on palettized surfaces\n// NONANTIALIASED_QUALITY no longer necessary, since reverse blitting is no longer used\n\nHFONT WINAPI extCreateFontIndirect(const LOGFONT* lplf)\n{\n\tHFONT HFont, HScaled;\n\tLOGFONT lf;\n\tOutTraceDW(\"CreateFontIndirect: h=%d w=%d face=\\\"%s\\\"\\n\", lplf->lfHeight, lplf->lfWidth, lplf->lfFaceName);\n\n\tmemcpy((char *)&lf, (char *)lplf, sizeof(LOGFONT));\n\tif(dxw.dwFlags8 & QUALITYFONTS) lf.lfQuality = BEST_QUALITY; \n\tHFont=(*pGDICreateFontIndirect)(&lf);\n\n\tif(dxw.dwFlags1 & FIXTEXTOUT) {\n\t\tmemcpy((char *)&lf, (char *)lplf, sizeof(LOGFONT));\n\t\tif(dxw.dwFlags8 & QUALITYFONTS) lf.lfQuality = BEST_QUALITY; \n\t\tif(lf.lfHeight > 0) dxw.MapClient((int *)&lf.lfWidth, (int *)&lf.lfHeight);\n\t\telse {\n\t\t\tlf.lfHeight= -lf.lfHeight;\n\t\t\tdxw.MapClient((int *)&lf.lfWidth, (int *)&lf.lfHeight);\n\t\t\tlf.lfHeight= -lf.lfHeight;\n\t\t}\n\t\tHScaled=((*pGDICreateFontIndirect)(&lf));\n\n\t\tif(HScaled){\n\t\t\tOutTraceDW(\"CreateFontIndirect: associate font=%x scaled=%x\\n\", HFont, HScaled);\n\t\t\tfontdb.Push(HFont, HScaled);\n\t\t}\n\t\telse{\n\t\t\tOutTraceE(\"CreateFontIndirect ERROR: scaled font err=%d\\n\", GetLastError());\n\t\t}\n\t}\n\n\tif(HFont)\n\t\tOutTraceDW(\"CreateFontIndirect: hfont=%x\\n\", HFont);\n\telse\n\t\tOutTraceE(\"CreateFontIndirect ERROR: err=%d\\n\", GetLastError());\n\treturn HFont;\n}\n\nBOOL WINAPI extSetDeviceGammaRamp(HDC hDC, LPVOID lpRamp)\n{\n\tBOOL ret;\n\tOutTraceDW(\"SetDeviceGammaRamp: hdc=%x\\n\", hDC);\n\tif(dxw.dwFlags2 & DISABLEGAMMARAMP) {\n\t\tOutTraceDW(\"SetDeviceGammaRamp: SUPPRESS\\n\");\n\t\treturn TRUE;\n\t}\n\tret=(*pGDISetDeviceGammaRamp)(hDC, lpRamp);\n\tif(!ret) OutTraceE(\"SetDeviceGammaRamp: ERROR err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extGetDeviceGammaRamp(HDC hDC, LPVOID lpRamp)\n{\n\tBOOL ret;\n\tOutTraceDW(\"GetDeviceGammaRamp: hdc=%x\\n\", hDC);\n\tret=(*pGDIGetDeviceGammaRamp)(hDC, lpRamp);\n\tif(!ret) OutTraceE(\"GetDeviceGammaRamp: ERROR err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nint WINAPI extGetClipBox(HDC hdc, LPRECT lprc)\n{\n\t// v2.02.31: needed in \"Imperialism II\" to avoid blit clipping\n\tint ret;\n\tOutTraceDW(\"GetClipBox: hdc=%x\\n\", hdc);\n\n\tif (dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pGDIGetClipBox)(sdc.GetHdc(), lprc);\n\t\t\t\tsdc.PutPrimaryDC(hdc, FALSE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tret=(*pGDIGetClipBox)(hdc, lprc);\n\t\t\t\tOutTraceDW(\"GetClipBox: scaling main win coordinates (%d,%d)-(%d,%d)\\n\",\n\t\t\t\t\tlprc->left, lprc->top, lprc->right, lprc->bottom);\n\t\t\t\tdxw.UnmapClient(lprc);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tret=(*pGDIGetClipBox)(hdc, lprc);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse \n\t\tret=(*pGDIGetClipBox)(hdc, lprc);\n\n\tOutTraceDW(\"GetClipBox: ret=%x(%s) rect=(%d,%d)-(%d,%d)\\n\", \n\t\tret, ExplainRegionType(ret), lprc->left, lprc->top, lprc->right, lprc->bottom);\n\treturn ret;\n}\n\nint WINAPI extIntersectClipRect(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)\n{\n\tint ret;\n\tOutTraceDW(\"IntersectClipRect: hdc=%x rect=(%d,%d)-(%d,%d)\\n\", hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);\n\n\tif (dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pIntersectClipRect)(sdc.GetHdc(), nLeftRect, nTopRect, nRightRect, nBottomRect);\n\t\t\t\tsdc.PutPrimaryDC(hdc, FALSE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED:\n\t\t\t\tdxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect);\n\t\t\t\tOutTraceDW(\"IntersectClipRect: fixed rect=(%d,%d)-(%d,%d)\\n\", nLeftRect, nTopRect, nRightRect, nBottomRect);\n\t\t\t\tbreak;\n\t\t}\t\t\t\t\t\t\t\n\t}\n\n\tret=(*pIntersectClipRect)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);\n\tOutTraceDW(\"IntersectClipRect: ret=%x(%s)\\n\", ret, ExplainRegionType(ret)); \n\treturn ret;\n}\n\nint WINAPI extGetRgnBox(HRGN hrgn, LPRECT lprc)\n{\n\tint ret;\n\tOutTraceDW(\"GetRgnBox: hrgn=%x\\n\", hrgn);\n\tret=(*pGetRgnBox)(hrgn, lprc);\n\tif (dxw.IsFullScreen() && (ret!=ERROR)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_STRETCHED:\n\t\t\tOutTraceDW(\"GetRgnBox: scaling main win coordinates (%d,%d)-(%d,%d)\\n\",\n\t\t\t\tlprc->left, lprc->top, lprc->right, lprc->bottom);\n\t\t\tdxw.UnmapClient(lprc);\n\t\t\tbreak;\n\t\t}\n\t}\n\tOutTraceDW(\"GetRgnBox: ret=%x(%s) rect=(%d,%d)-(%d,%d)\\n\", \n\t\tret, ExplainRegionType(ret), lprc->left, lprc->top, lprc->right, lprc->bottom);\n\treturn ret;\n}\n\nBOOL WINAPI extPolyline(HDC hdc, const POINT *lppt, int cPoints)\n{\n\t// LOGTOBEFIXED\n\tBOOL ret;\n\tif(IsTraceDDRAW){\n\t\tint i;\n\t\tOutTrace(\"Polyline: hdc=%x cPoints=%d pt=\", hdc, cPoints); \n\t\tfor(i=0; i<cPoints; i++) OutTrace(\"(%d,%d) \", lppt[i].x, lppt[i].y);\n\t\tOutTrace(\"\\n\");\n\t}\n\n\tif (dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pPolyline)(sdc.GetHdc(), lppt, cPoints);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED:\n\t\t\t\tfor(int i=0; i<cPoints; i++) dxw.MapClient((LPPOINT)&lppt[i]);\n\t\t\t\tif(IsTraceDW){\n\t\t\t\t\tOutTrace(\"Polyline: fixed cPoints=%d pt=\", cPoints); \n\t\t\t\t\tfor(int i=0; i<cPoints; i++) OutTrace(\"(%d,%d) \", lppt[i].x, lppt[i].y);\n\t\t\t\t\tOutTrace(\"\\n\");\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tret=(*pPolyline)(hdc, lppt, cPoints);\n\tif(!ret)OutTraceE(\"Polyline: ERROR ret=%x\\n\", ret); \n\treturn ret;\n}\n\nBOOL WINAPI extLineTo(HDC hdc, int nXEnd, int nYEnd)\n{\n\tBOOL ret;\n\tOutTraceDW(\"LineTo: hdc=%x pt=(%d,%d)\\n\", hdc, nXEnd, nYEnd);\n\tif (dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pLineTo)(sdc.GetHdc(), nXEnd, nYEnd);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&nXEnd, &nYEnd);\n\t\t\t\tOutTraceDW(\"LineTo: fixed pt=(%d,%d)\\n\", nXEnd, nYEnd);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tret=(*pLineTo)(hdc, nXEnd, nYEnd);\n\tif(!ret)OutTraceE(\"LineTo: ERROR ret=%x\\n\", ret); \n\treturn ret;\n}\n\nBOOL WINAPI extArcTo(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nXRadial1, int nYRadial1, int nXRadial2, int nYRadial2)\n{\n\tBOOL ret;\n\tOutTraceDW(\"ArcTo: hdc=%x rect=(%d,%d)(%d,%d) radial=(%d,%d)(%d,%d)\\n\", \n\t\thdc, nLeftRect, nTopRect, nRightRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2);\n\tif (dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pArcTo)(sdc.GetHdc(), nLeftRect, nTopRect, nRightRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\t\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect);\n\t\t\t\tdxw.MapClient(&nXRadial1, &nYRadial1, &nXRadial2, &nYRadial2);\n\t\t\t\tOutTraceDW(\"ArcTo: fixed rect=(%d,%d)(%d,%d) radial=(%d,%d)(%d,%d)\\n\", \n\t\t\t\t\tnLeftRect, nTopRect, nRightRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tret=(*pArcTo)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2);\n\tif(!ret)OutTraceE(\"ArcTo: ERROR ret=%x\\n\", ret); \n\treturn ret;\n}\n\nBOOL WINAPI extMoveToEx(HDC hdc, int X, int Y, LPPOINT lpPoint)\n{\n\tBOOL ret;\n\tOutTraceDW(\"MoveToEx: hdc=%x pt=(%d,%d)\\n\", hdc, X, Y);\n\tif (dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pMoveToEx)(sdc.GetHdc(), X, Y, lpPoint);\t\n\t\t\t\tsdc.PutPrimaryDC(hdc, FALSE);\n\t\t\t\treturn ret; // no need to update the screen!\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&X, &Y);\n\t\t\t\tOutTraceDW(\"MoveToEx: fixed pt=(%d,%d)\\n\", X, Y);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tret=(*pMoveToEx)(hdc, X, Y, lpPoint);\n\tif(!ret)OutTraceE(\"MoveToEx: ERROR ret=%x\\n\", ret); \n\treturn ret;\n}\n\nBOOL WINAPI extPolyDraw(HDC hdc, const POINT *lpPoints, const BYTE *lpbTypes, int cCount)\n{\n\t// LOGTOBEFIXED\n\tBOOL ret;\n\tif(IsTraceDDRAW){\n\t\tint i;\n\t\tOutTrace(\"PolyDraw: hdc=%x cCount=%d pt=\", hdc, cCount); \n\t\tfor(i=0; i<cCount; i++) OutTrace(\"(%x:%d,%d) \", lpbTypes[i], lpPoints[i].x, lpPoints[i].y);\n\t\tOutTrace(\"\\n\");\n\t}\n\n\tif (dxw.IsToRemap(hdc)){\n\t\tint i, size;\n\t\tPOINT *lpRemPoints;\n\t\t\n\t\tsize = cCount * sizeof(POINT);\n\t\tlpRemPoints = (LPPOINT)malloc(size);\n\t\tmemcpy(lpRemPoints, lpPoints, size);\n\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tfree(lpRemPoints);\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pPolyDraw)(sdc.GetHdc(), lpPoints, lpbTypes, cCount);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tOutTrace(\"PolyDraw: fixed cCount=%d pt=\", cCount); \n\t\t\t\tfor(i=0; i<cCount; i++) {\n\t\t\t\t\tdxw.MapClient(&lpRemPoints[i]);\n\t\t\t\t\tOutTrace(\"(%d,%d) \", &lpRemPoints[i].x, &lpRemPoints[i].y);\n\t\t\t\t}\n\t\t\t\tOutTrace(\"\\n\");\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\tif (dxw.IsVirtual(hdc)){\n\t\t\t\t\tOutTrace(\"PolyDraw: fixed cCount=%d pt=\", cCount); \n\t\t\t\t\tfor(i=0; i<cCount; i++) {\n\t\t\t\t\t\tlpRemPoints[i].x += dxw.VirtualOffsetX;\n\t\t\t\t\t\tlpRemPoints[i].y += dxw.VirtualOffsetY;\n\t\t\t\t\t\tOutTrace(\"(%d,%d) \", &lpPoints[i].x, &lpPoints[i].y);\n\t\t\t\t\t}\n\t\t\t\t\tOutTrace(\"\\n\");\n\t\t\t\t}\n\t\t\t\tbreak;\t\n\t\t}\n\t\tret=(*pPolyDraw)(hdc, lpRemPoints, lpbTypes, cCount);\n\t\tfree(lpRemPoints);\n\t}\n\telse {\n\t\tret=(*pPolyDraw)(hdc, lpPoints, lpbTypes, cCount);\n\t}\n\tif(!ret)OutTraceE(\"pPolyDraw: ERROR ret=%x\\n\", ret); \n\treturn ret;\n}\n\nBOOL WINAPI extPolylineTo(HDC hdc, const POINT *lpPoints, DWORD cCount)\n{\n\t// LOGTOBEFIXED\n\tBOOL ret;\n\tif(IsTraceDDRAW){\n\t\tDWORD i;\n\t\tOutTrace(\"PolylineTo: hdc=%x cCount=%d pt=\", hdc, cCount); \n\t\tfor(i=0; i<cCount; i++) OutTrace(\"(%d,%d) \", lpPoints[i].x, lpPoints[i].y);\n\t\tOutTrace(\"\\n\");\n\t}\n\n\tif (dxw.IsToRemap(hdc)){\n\n\t\tDWORD i, size;\n\t\tPOINT *lpRemPoints;\n\t\t\n\t\tsize = cCount * sizeof(POINT);\n\t\tlpRemPoints = (LPPOINT)malloc(size);\n\t\tmemcpy(lpRemPoints, lpPoints, size);\n\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tfree(lpRemPoints);\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pPolylineTo)(sdc.GetHdc(), lpPoints, cCount);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tOutTrace(\"PolylineTo: fixed cCount=%d pt=\", cCount); \n\t\t\t\tfor(i=0; i<cCount; i++) {\n\t\t\t\t\tdxw.MapClient(&lpRemPoints[i]);\n\t\t\t\t\tOutTrace(\"(%d,%d) \", &lpRemPoints[i].x, &lpRemPoints[i].y);\n\t\t\t\t}\n\t\t\t\tOutTrace(\"\\n\");\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\tif (dxw.IsVirtual(hdc)){\n\t\t\t\t\tOutTrace(\"PolylineTo: fixed cCount=%d pt=\", cCount); \n\t\t\t\t\tfor(i=0; i<cCount; i++) {\n\t\t\t\t\t\tlpRemPoints[i].x += dxw.VirtualOffsetX;\n\t\t\t\t\t\tlpRemPoints[i].y += dxw.VirtualOffsetY;\n\t\t\t\t\t\tOutTrace(\"(%d,%d) \", &lpPoints[i].x, &lpPoints[i].y);\n\t\t\t\t\t}\n\t\t\t\t\tOutTrace(\"\\n\");\n\t\t\t\t}\n\t\t\t\tbreak;\t\n\t\t}\n\t\tret=(*pPolylineTo)(hdc, lpRemPoints, cCount);\n\t\tfree(lpRemPoints);\n\t}\n\telse {\n\t\tret=(*pPolylineTo)(hdc, lpPoints, cCount);\n\t}\n\tif(!ret)OutTraceE(\"PolylineTo: ERROR ret=%x\\n\", ret); \n\treturn ret;\n}\n\nBOOL WINAPI extPolyBezierTo(HDC hdc, const POINT *lpPoints, DWORD cCount)\n{\n\t// LOGTOBEFIXED\n\tBOOL ret;\n\tif(IsTraceDDRAW){\n\t\tDWORD i;\n\t\tOutTrace(\"PolyBezierTo: hdc=%x cCount=%d pt=\", hdc, cCount); \n\t\tfor(i=0; i<cCount; i++) OutTrace(\"(%d,%d) \", lpPoints[i].x, lpPoints[i].y);\n\t\tOutTrace(\"\\n\");\n\t}\n\n\tif (dxw.IsToRemap(hdc)){\n\t\tDWORD i, size;\n\t\tPOINT *lpRemPoints;\n\t\t\n\t\tsize = cCount * sizeof(POINT);\n\t\tlpRemPoints = (LPPOINT)malloc(size);\n\t\tmemcpy(lpRemPoints, lpPoints, size);\n\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tfree(lpRemPoints);\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pPolyBezierTo)(sdc.GetHdc(), lpPoints, cCount);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tOutTrace(\"PolyBezierTo: fixed cCount=%d pt=\", cCount); \n\t\t\t\tfor(i=0; i<cCount; i++) {\n\t\t\t\t\tdxw.MapClient(&lpRemPoints[i]);\n\t\t\t\t\tOutTrace(\"(%d,%d) \", &lpRemPoints[i].x, &lpRemPoints[i].y);\n\t\t\t\t}\n\t\t\t\tOutTrace(\"\\n\");\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\tif (dxw.IsVirtual(hdc)){\n\t\t\t\t\tOutTrace(\"PolyBezierTo: fixed cCount=%d pt=\", cCount); \n\t\t\t\t\tfor(i=0; i<cCount; i++) {\n\t\t\t\t\t\tlpRemPoints[i].x += dxw.VirtualOffsetX;\n\t\t\t\t\t\tlpRemPoints[i].y += dxw.VirtualOffsetY;\n\t\t\t\t\t\tOutTrace(\"(%d,%d) \", &lpPoints[i].x, &lpPoints[i].y);\n\t\t\t\t\t}\n\t\t\t\t\tOutTrace(\"\\n\");\n\t\t\t\t}\n\t\t\t\tbreak;\t\n\t\t}\n\t\tret=(*pPolyBezierTo)(hdc, lpRemPoints, cCount);\n\t\tfree(lpRemPoints);\n\t}\n\telse {\n\t\tret=(*pPolyBezierTo)(hdc, lpPoints, cCount);\n\t}\n\tif(!ret)OutTraceE(\"PolyBezierTo: ERROR ret=%x\\n\", ret); \n\treturn ret;\n}\n\nBOOL WINAPI extPolyBezier(HDC hdc, const POINT *lpPoints, DWORD cCount)\n{\n\t// LOGTOBEFIXED\n\tBOOL ret;\n\tif(IsTraceDDRAW){\n\t\tDWORD i;\n\t\tOutTrace(\"PolyBezier: hdc=%x cCount=%d pt=\", hdc, cCount); \n\t\tfor(i=0; i<cCount; i++) OutTrace(\"(%d,%d) \", lpPoints[i].x, lpPoints[i].y);\n\t\tOutTrace(\"\\n\");\n\t}\n\n\tif (dxw.IsToRemap(hdc)){\n\t\tDWORD i, size;\n\t\tPOINT *lpRemPoints;\n\t\t\n\t\tsize = cCount * sizeof(POINT);\n\t\tlpRemPoints = (LPPOINT)malloc(size);\n\t\tmemcpy(lpRemPoints, lpPoints, size);\n\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tfree(lpRemPoints);\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pPolyBezier)(sdc.GetHdc(), lpPoints, cCount);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tOutTrace(\"PolyBezier: fixed cCount=%d pt=\", cCount); \n\t\t\t\tfor(i=0; i<cCount; i++) {\n\t\t\t\t\tdxw.MapClient(&lpRemPoints[i]);\n\t\t\t\t\tOutTrace(\"(%d,%d) \", &lpRemPoints[i].x, &lpRemPoints[i].y);\n\t\t\t\t}\n\t\t\t\tOutTrace(\"\\n\");\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\tif (dxw.IsVirtual(hdc)){\n\t\t\t\t\tOutTrace(\"PolyBezier: fixed cCount=%d pt=\", cCount); \n\t\t\t\t\tfor(i=0; i<cCount; i++) {\n\t\t\t\t\t\tlpRemPoints[i].x += dxw.VirtualOffsetX;\n\t\t\t\t\t\tlpRemPoints[i].y += dxw.VirtualOffsetY;\n\t\t\t\t\t\tOutTrace(\"(%d,%d) \", &lpPoints[i].x, &lpPoints[i].y);\n\t\t\t\t\t}\n\t\t\t\t\tOutTrace(\"\\n\");\n\t\t\t\t}\n\t\t\t\tbreak;\t\n\t\t}\n\t\tret=(*pPolyBezier)(hdc, lpRemPoints, cCount);\n\t\tfree(lpRemPoints);\n\t}\n\telse {\n\t\tret=(*pPolyBezier)(hdc, lpPoints, cCount);\n\t}\n\tif(!ret)OutTraceE(\"PolyBezier: ERROR ret=%x\\n\", ret); \n\treturn ret;\n}\n\nint WINAPI extStretchDIBits(HDC hdc, int XDest, int YDest, int nDestWidth, int nDestHeight, int XSrc, int YSrc, int nSrcWidth, int nSrcHeight, \n\t\t\t\t  const VOID *lpBits, const BITMAPINFO *lpBitsInfo, UINT iUsage, DWORD dwRop)\n{\n\tint ret;\n\tif(IsTraceDW){\n\t\tOutTraceDW(\"StretchDIBits: hdc=%x dest=(%d,%d)-(%d,%d) src=(%d,%d)-(%d,%d) rop=%x(%s)\\n\", \n\t\t\thdc, XDest, YDest, nDestWidth, nDestHeight, XSrc, YSrc, nSrcWidth, nSrcHeight, dwRop, ExplainROP(dwRop));\n\t\tTraceBITMAPINFOHEADER(\"StretchDIBits\", (BITMAPINFOHEADER *)&(lpBitsInfo->bmiHeader));\n\t}\n\n\tif(dxw.IsToRemap(hdc)){\n\t\tdxw.HandleFPS(); // handle refresh delays\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pStretchDIBits)(sdc.GetHdc(), XDest, YDest, nDestWidth, nDestHeight, XSrc, YSrc, nSrcWidth, nSrcHeight, lpBits, lpBitsInfo, iUsage, dwRop);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, XDest, YDest, nDestWidth, nDestHeight);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&XDest, &YDest, &nDestWidth, &nDestHeight);\n\t\t\t\tOutTraceDW(\"StretchDIBits: fixed STRETCHED dest=(%d,%d)-(%d,%d)\\n\", XDest, YDest, nDestWidth, nDestHeight);\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\tif(dxw.IsVirtual(hdc)){\n\t\t\t\t\tXDest+=dxw.VirtualOffsetX;\n\t\t\t\t\tYDest+=dxw.VirtualOffsetY;\n\t\t\t\t\tOutTraceDW(\"StretchDIBits: fixed EMULATED dest=(%d,%d)-(%d,%d)\\n\", XDest, YDest, nDestWidth, nDestHeight);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tret=(*pStretchDIBits)(hdc, XDest, YDest, nDestWidth, nDestHeight, XSrc, YSrc, nSrcWidth, nSrcHeight, lpBits, lpBitsInfo, iUsage, dwRop);\n\tif(dxw.dwFlags8 & MARKGDI32) dxw.Mark(hdc, FALSE, RGB(255, 0, 255), XDest, YDest, nDestWidth, nDestHeight);\n\tif(!ret || (ret==GDI_ERROR)) OutTraceE(\"StretchDIBits: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nint WINAPI extSetDIBits(HDC hdc, HBITMAP hbmp, UINT uStartScan, UINT cScanLines, const VOID *lpvBits, const BITMAPINFO *lpbmi, UINT fuColorUse)\n{\n\tint ret;\n\tif(IsTraceDW){\n\t\tOutTrace(\"SetDIBits: hdc=%x%s hbmp=%x lines=(%d,%d) ColorUse=%x(%s)\\n\", \n\t\t\thdc, dxw.IsToRemap(hdc)?\"(R)\":\"\", hbmp, uStartScan, cScanLines, fuColorUse, ExplainDIBUsage(fuColorUse));\n\t\tTraceBITMAPINFOHEADER(\"SetDIBits\", (BITMAPINFOHEADER *)&(lpbmi->bmiHeader));\n\t}\n\n\tif(dxw.IsToRemap(hdc) && !bGDIRecursionFlag){\n\t\t//HDC hTempDc;\n\t\t//HBITMAP hbmPic;\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: // this will flicker !!!!\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pSetDIBits)(sdc.GetHdc(), hbmp, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse);\n\t\t\t\tif(!ret || (ret==GDI_ERROR)) OutTraceE(\"SetDIBits: ERROR err=%d\\n\", GetLastError()); \n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, 0, 0, lpbmi->bmiHeader.biWidth, lpbmi->bmiHeader.biHeight);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n#if 0\n\t\t\t\t// blitting to primary surface !!!\n\t\t\t\tint OrigXDest, OrigYDest;\n\t\t\t\tOrigWidth=dwWidth;\n\t\t\t\tOrigHeight=dwHeight;\n\t\t\t\tOrigXDest=XDest;\n\t\t\t\tOrigYDest=YDest;\n\t\t\t\tdxw.MapClient(&XDest, &YDest, (int *)&dwWidth, (int *)&dwHeight);\n\t\t\t\tOutTraceDW(\"SetDIBits: fixed dest=(%d,%d)-(%dx%d)\\n\", XDest, YDest, dwWidth, dwHeight);\n\t\t\t\tif(!(hTempDc=CreateCompatibleDC(hdc)))\n\t\t\t\t\tOutTraceE(\"CreateCompatibleDC: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t\t// tricky part: CreateCompatibleBitmap is needed to set the dc size, but it has to be performed\n\t\t\t\t// against hdc to set for color depth, then selected (through SelectObject) against the temporary\n\t\t\t\t// dc to assign the needed size and color space to the temporary dc.\n\t\t\t\tif(!(hbmPic=CreateCompatibleBitmap(hdc, OrigWidth, OrigHeight)))\n\t\t\t\t\tOutTraceE(\"CreateCompatibleBitmap: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t\tif(!SelectObject(hTempDc, hbmPic))\n\t\t\t\t\tOutTraceE(\"SelectObject: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t\tif(!(*pSetDIBits)(hTempDc, hbmp, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse))\n\t\t\t\t\tOutTraceE(\"SetDIBits: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t\t// v2.02.94: set HALFTONE stretching. Fixes \"Celtic Kings Rage of War\"\n\t\t\t\tSetStretchBltMode(hdc,HALFTONE);\n\t\t\t\tif(!(ret=(*pGDIStretchBlt)(hdc, XDest, YDest, dwWidth, dwHeight, hTempDc, 0, 0, OrigWidth, OrigHeight, SRCCOPY)))\n\t\t\t\t\tOutTraceE(\"StretchBlt: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t\tif(!(DeleteObject(hbmPic))) // v2.02.32 - avoid resource leakage\n\t\t\t\t\tOutTraceE(\"DeleteObject: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t\tif(!(DeleteDC(hTempDc)))\n\t\t\t\t\tOutTraceE(\"DeleteDC: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t\treturn TRUE;\n#endif\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n#if 0\n\t\t\t\tif (dxw.IsVirtual(hdc)){\n\t\t\t\t\tint X, Y;\n\t\t\t\t\tX=XDest+dxw.VirtualOffsetX;\n\t\t\t\t\tY=YDest+dxw.VirtualOffsetY;\n\t\t\t\t\tOutTraceDW(\"SetDIBits: virtual pos=(%d,%d)+(%d+%d)=(%d,%d)\\n\",\n\t\t\t\t\t\tXDest, YDest, dxw.VirtualOffsetX, dxw.VirtualOffsetY, X, Y);\n\t\t\t\t\tret=(*pSetDIBits)(sdc.GetHdc(), hbmp, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse);\n\t\t\t\t\tif(!ret || (ret==GDI_ERROR)) OutTraceE(\"SetDIBits: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\t\t\t\t\treturn ret;\n\t\t\t\t}\n#endif\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tret = (*pSetDIBits)(hdc, hbmp, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse);\n\tif(!ret || (ret==GDI_ERROR)) OutTraceE(\"SetDIBits: ERROR err=%d\\n\", GetLastError()); \n\treturn ret;\n}\n\nint WINAPI extGetDIBits(HDC hdc, HBITMAP hbmp, UINT uStartScan, UINT cScanLines, LPVOID lpvBits, LPBITMAPINFO lpbmi, UINT uUsage)\n{\n\tint ret;\n\tif(IsTraceDW){\n\t\tOutTrace(\"GetDIBits: hdc=%x hbmp=%x lines=(%d,%d) ColorUse=%x(%s)\\n\", hdc, hbmp, uStartScan, cScanLines, uUsage, ExplainDIBUsage(uUsage));\n\t\tTraceBITMAPINFOHEADER(\"GetDIBits\", (BITMAPINFOHEADER *)&(lpbmi->bmiHeader));\n\t}\n\n\tif(dxw.IsToRemap(hdc) && !bGDIRecursionFlag){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: // this will flicker !!!!\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pGetDIBits)(sdc.GetHdc(), hbmp, uStartScan, cScanLines, lpvBits, lpbmi, uUsage);\n\t\t\t\tsdc.PutPrimaryDC(hdc, FALSE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tret = (*pGetDIBits)(hdc, hbmp, uStartScan, cScanLines, lpvBits, lpbmi, uUsage);\n\tif(!ret || (ret==GDI_ERROR)) OutTraceE(\"GetDIBits: ERROR err=%d\\n\", GetLastError()); \n\treturn ret;\n}\n\nint WINAPI extSetDIBitsToDevice(HDC hdc, int XDest, int YDest, DWORD dwWidth, DWORD dwHeight, int XSrc, int YSrc, UINT uStartScan, UINT cScanLines, \n\t\t\t\t\tconst VOID *lpvBits, const BITMAPINFO *lpbmi, UINT fuColorUse)\n{\n\tint ret;\n\tif(IsTraceDW){\n\t\tOutTrace(\"SetDIBitsToDevice: hdc=%x dest=(%d,%d)-(%dx%d) src=(%d,%d) lines=(%d,%d) bits=%x ColorUse=%x(%s)\\n\", \n\t\t\thdc, XDest, YDest, dwWidth, dwHeight, XSrc, YSrc, uStartScan, cScanLines, lpvBits, fuColorUse, ExplainDIBUsage(fuColorUse));\n\t\tTraceBITMAPINFOHEADER(\"SetDIBitsToDevice\", (BITMAPINFOHEADER *)&(lpbmi->bmiHeader));\n\t}\n\n\tbGDIRecursionFlag = TRUE; // beware: it seems that SetDIBitsToDevice calls SetDIBits internally\n\tif(dxw.IsToRemap(hdc)){\n\t\tHDC hTempDc;\n\t\tHBITMAP hbmPic;\n\t\tDWORD OrigWidth, OrigHeight;\n\t\tint OrigXDest, OrigYDest;\n\t\tOrigWidth=dwWidth;\n\t\tOrigHeight=dwHeight;\n\t\tOrigXDest=XDest;\n\t\tOrigYDest=YDest;\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pSetDIBitsToDevice)(sdc.GetHdc(), XDest, YDest, dwWidth, dwHeight, XSrc, YSrc, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse);\n\t\t\t\tif(dxw.dwFlags8 & DUMPDEVCONTEXT) DumpHDC(sdc.GetHdc(), XDest, YDest, dwWidth, dwHeight);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, XDest, YDest, dwWidth, dwHeight);\n\t\t\t\tbGDIRecursionFlag = FALSE;\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\t// blitting to primary surface !!!\n\t\t\t\tdxw.MapClient(&XDest, &YDest, (int *)&dwWidth, (int *)&dwHeight);\n\t\t\t\tOutTraceDW(\"SetDIBitsToDevice: fixed dest=(%d,%d)-(%dx%d)\\n\", XDest, YDest, dwWidth, dwHeight);\n\t\t\t\tif(!(hTempDc=CreateCompatibleDC(hdc)))\n\t\t\t\t\tOutTraceE(\"CreateCompatibleDC: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t\t// tricky part: CreateCompatibleBitmap is needed to set the dc size, but it has to be performed\n\t\t\t\t// against hdc to set for color depth, then selected (through SelectObject) against the temporary\n\t\t\t\t// dc to assign the needed size and color space to the temporary dc.\n\t\t\t\tif(!(hbmPic=CreateCompatibleBitmap(hdc, OrigWidth, OrigHeight)))\n\t\t\t\t\tOutTraceE(\"CreateCompatibleBitmap: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t\tif(!(*pSelectObject)(hTempDc, hbmPic))\n\t\t\t\t\tOutTraceE(\"SelectObject: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t\tif(!(ret=(*pSetDIBitsToDevice)(hTempDc, 0, 0, OrigWidth, OrigHeight, XSrc, YSrc, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse)))\n\t\t\t\t\tOutTraceE(\"SetDIBitsToDevice: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t\tbGDIRecursionFlag = FALSE;\n\t\t\t\tif(dxw.dwFlags8 & DUMPDEVCONTEXT) DumpHDC(hTempDc, 0, 0, OrigWidth, OrigHeight);\n\t\t\t\t// v2.02.94: set HALFTONE stretching. Fixes \"Celtic Kings Rage of War\"\n\t\t\t\tSetStretchBltMode(hdc,HALFTONE);\n\t\t\t\tif(!(ret=(*pGDIStretchBlt)(hdc, XDest, YDest, dwWidth, dwHeight, hTempDc, 0, 0, OrigWidth, OrigHeight, SRCCOPY)))\n\t\t\t\t\tOutTraceE(\"StretchBlt: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t\tif(!(DeleteObject(hbmPic))) // v2.02.32 - avoid resource leakage\n\t\t\t\t\tOutTraceE(\"DeleteObject: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t\tif(!(DeleteDC(hTempDc)))\n\t\t\t\t\tOutTraceE(\"DeleteDC: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t\tif(dxw.dwFlags8 & MARKGDI32) dxw.Mark(hdc, FALSE, RGB(255, 255, 255),  XDest, YDest, dwWidth, dwHeight);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\tint X, Y;\n\t\t\t\tX=XDest+dxw.VirtualOffsetX;\n\t\t\t\tY=YDest+dxw.VirtualOffsetY;\n\t\t\t\tOutTraceDW(\"SetDIBitsToDevice: virtual pos=(%d,%d)+(%d+%d)=(%d,%d)\\n\",\n\t\t\t\t\tXDest, YDest, dxw.VirtualOffsetX, dxw.VirtualOffsetY, X, Y);\n\t\t\t\tret=(*pSetDIBitsToDevice)(hdc, X, Y, dwWidth, dwHeight, XSrc, YSrc, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse);\n\t\t\t\tbGDIRecursionFlag = FALSE;\n\t\t\t\tif(dxw.dwFlags8 & DUMPDEVCONTEXT) DumpHDC(hdc, X, Y, dwWidth, dwHeight);\n\t\t\t\tif(!ret || (ret==GDI_ERROR)) OutTraceE(\"SetDIBitsToDevice: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\t\t\t\tif(dxw.dwFlags8 & MARKGDI32) dxw.Mark(hdc, FALSE, RGB(255, 255, 255),  XDest, YDest, dwWidth, dwHeight);\n\t\t\t\treturn ret;\n\t\t\tdefault:\n\t\t\t\tif(dxw.dwFlags8 & DUMPDEVCONTEXT) DumpHDC(hdc, XDest, YDest, dwWidth, dwHeight);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tret=(*pSetDIBitsToDevice)(hdc, XDest, YDest, dwWidth, dwHeight, XSrc, YSrc, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse);\n\tbGDIRecursionFlag = FALSE;\n\tif(!ret || (ret==GDI_ERROR)) OutTraceE(\"SetDIBitsToDevice: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\tif(dxw.dwFlags8 & MARKGDI32) dxw.Mark(hdc, FALSE, RGB(255, 255, 255),  XDest, YDest, dwWidth, dwHeight);\n\treturn ret;\n}\n\nHBITMAP WINAPI extCreateCompatibleBitmap(HDC hdc, int nWidth, int nHeight)\n{\n\tHBITMAP ret;\n\tOutTraceDW(\"CreateCompatibleBitmap: hdc=%x size=(%d,%d)\\n\", \n\t\thdc, nWidth, nHeight);\n\n\tif (dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pCreateCompatibleBitmap)(sdc.GetHdc(), nWidth, nHeight);\n\t\t\t\tsdc.PutPrimaryDC(hdc, FALSE);\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED:\n\t\t\t\tdxw.MapClient(&nWidth, &nHeight);\n\t\t\t\tOutTraceDW(\"CreateCompatibleBitmap: fixed size=(%d,%d)\\n\", nWidth, nHeight);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tret=(*pCreateCompatibleBitmap)(hdc, nWidth, nHeight);\n\tif(!ret) OutTraceE(\"CreateCompatibleBitmap: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nCOLORREF WINAPI extSetPixel(HDC hdc, int X, int Y, COLORREF crColor)\n{\n\tCOLORREF ret;\n\tOutTraceDW(\"SetPixel: hdc=%x color=%x point=(%d,%d)\\n\", hdc, crColor, X, Y);\n\n\tif(dxw.IsToRemap(hdc)){\n\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pSetPixel)(sdc.GetHdc(), X, Y, crColor);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, X, Y, 1, 1); // ????\n\t\t\t\treturn ret; // this returns a COLORREF type\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&X, &Y);\n\t\t\t\tOutTraceDW(\"SetPixel: fixed pos=(%d,%d)\\n\", X, Y);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tret=(*pSetPixel)(hdc, X, Y, crColor);\n\t// both 0x00000000 and 0xFFFFFFFF are legitimate colors and therefore valid return codes...\n\t//if(ret==GDI_ERROR) OutTraceE(\"SetPixel: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nBOOL WINAPI extSetPixelV(HDC hdc, int X, int Y, COLORREF crColor)\n{\n\tBOOL ret;\n\tOutTraceDW(\"SetPixelV: hdc=%x color=%x point=(%d,%d)\\n\", hdc, crColor, X, Y);\n\n\tif(dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pSetPixelV)(sdc.GetHdc(), X, Y, crColor);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, X, Y, 1, 1); // ????\n\t\t\t\treturn ret; \n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&X, &Y);\n\t\t\t\tOutTraceDW(\"SetPixelV: fixed pos=(%d,%d)\\n\", X, Y);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tret=(*pSetPixelV)(hdc, X, Y, crColor);\n\treturn ret;\n}\n\nBOOL WINAPI extEllipse(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)\n{\n\tint ret;\n\tOutTraceDW(\"Ellipse: hdc=%x rect=(%d,%d)-(%d,%d)\\n\", hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);\n\n\tif (dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pEllipse)(sdc.GetHdc(),nLeftRect, nTopRect, nRightRect, nBottomRect);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, nLeftRect, nTopRect, nRightRect-nLeftRect, nBottomRect-nTopRect);\n\t\t\t\treturn ret; \n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\tdxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect);\n\t\t\tOutTraceDW(\"Ellipse: fixed dest=(%d,%d)-(%d,%d)\\n\", nLeftRect, nTopRect, nRightRect, nBottomRect);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tret=(*pEllipse)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);\n\tif(!ret) OutTraceE(\"Ellipse: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nBOOL WINAPI extPolygon(HDC hdc, const POINT *lpPoints, int cCount)\n{\n\t// LOGTOBEFIXED\n\tBOOL ret;\n\tif(IsTraceDDRAW){\n\t\tint i;\n\t\tOutTrace(\"Polygon: hdc=%x cCount=%d pt=\", hdc, cCount); \n\t\tfor(i=0; i<cCount; i++) OutTrace(\"(%d,%d) \", lpPoints[i].x, lpPoints[i].y);\n\t\tOutTrace(\"\\n\");\n\t}\n\tif (dxw.IsToRemap(hdc)){\n\t\tint i, size;\n\t\tPOINT *lpRemPoints;\n\t\t\n\t\tsize = cCount * sizeof(POINT);\n\t\tlpRemPoints = (LPPOINT)malloc(size);\n\t\tmemcpy(lpRemPoints, lpPoints, size);\n\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tfree(lpRemPoints);\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pPolygon)(sdc.GetHdc(), lpPoints, cCount);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret; \n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tOutTrace(\"Polygon: fixed cCount=%d pt=\", cCount); \n\t\t\t\tfor(i=0; i<cCount; i++) {\n\t\t\t\t\tdxw.MapClient(&lpRemPoints[i]);\n\t\t\t\t\tOutTrace(\"(%d,%d) \", &lpRemPoints[i].x, &lpRemPoints[i].y);\n\t\t\t\t}\n\t\t\t\tOutTrace(\"\\n\");\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\tif (dxw.IsVirtual(hdc)){\n\t\t\t\t\tOutTrace(\"Polygon: fixed cCount=%d pt=\", cCount); \n\t\t\t\t\tfor(i=0; i<cCount; i++) {\n\t\t\t\t\t\tlpRemPoints[i].x += dxw.VirtualOffsetX;\n\t\t\t\t\t\tlpRemPoints[i].y += dxw.VirtualOffsetY;\n\t\t\t\t\t\tOutTrace(\"(%d,%d) \", &lpPoints[i].x, &lpPoints[i].y);\n\t\t\t\t\t}\n\t\t\t\t\tOutTrace(\"\\n\");\n\t\t\t\t}\n\t\t\t\tbreak;\t\n\t\t}\n\t\tret=(*pPolygon)(hdc, lpRemPoints, cCount);\n\t\tfree(lpRemPoints);\n\t}\n\telse {\n\t\tret=(*pPolygon)(hdc, lpPoints, cCount);\n\t}\n\tif(!ret)OutTraceE(\"Polygon: ERROR ret=%x\\n\", ret); \n\treturn ret;\n}\n\nBOOL WINAPI extArc(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nXStartArc, int nYStartArc, int nXEndArc, int nYEndArc)\n{\n\tint ret;\n\tOutTraceDW(\"Arc: hdc=%x rect=(%d,%d)-(%d,%d) start=(%d,%d) end=(%d,%d)\\n\", \n\t\thdc, nLeftRect, nTopRect, nRightRect, nBottomRect, nXStartArc, nYStartArc, nXEndArc, nYEndArc);\n\n\tif (dxw.IsToRemap(hdc)){\n\t\tdxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect);\n\t\tdxw.MapClient(&nXStartArc, &nYStartArc, &nXEndArc, &nYEndArc);\n\t\tOutTraceDW(\"Arc: fixed rect=(%d,%d)-(%d,%d) start=(%d,%d) end=(%d,%d)\\n\", \n\t\t\tnLeftRect, nTopRect, nRightRect, nBottomRect, nXStartArc, nYStartArc, nXEndArc, nYEndArc);\n\t}\n\n\tret=(*pArc)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect, nXStartArc, nYStartArc, nXEndArc, nYEndArc);\n\tif(!ret) OutTraceE(\"Arc: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nHRGN WINAPI extCreateEllipticRgn(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)\n{\n\tHRGN ret;\n\tOutTraceDW(\"CreateEllipticRgn: rect=(%d,%d)-(%d,%d)\\n\", nLeftRect, nTopRect, nRightRect, nBottomRect);\n\n\tif (dxw.IsFullScreen()){\n\t\tdxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect);\n\t\tOutTraceDW(\"CreateEllipticRgn: fixed rect=(%d,%d)-(%d,%d)\\n\", nLeftRect, nTopRect, nRightRect, nBottomRect);\n\t}\n\n\tret=(*pCreateEllipticRgn)(nLeftRect, nTopRect, nRightRect, nBottomRect);\n\tif(!ret) OutTraceE(\"CreateEllipticRgn: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nHRGN WINAPI extCreateEllipticRgnIndirect(const RECT *lprc)\n{\n\tHRGN ret;\n\tOutTraceDW(\"CreateEllipticRgnIndirect: rect=(%d,%d)-(%d,%d)\\n\", lprc->left, lprc->top, lprc->right, lprc->bottom);\n\n\tif (dxw.IsFullScreen()){\n\t\tdxw.MapClient((RECT *)lprc);\n\t\tOutTraceDW(\"CreateEllipticRgnIndirect: fixed rect=(%d,%d)-(%d,%d)\\n\", lprc->left, lprc->top, lprc->right, lprc->bottom);\n\t}\n\n\tret=(*pCreateEllipticRgnIndirect)(lprc);\n\tif(!ret) OutTraceE(\"CreateEllipticRgnIndirect: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nHRGN WINAPI extCreateRectRgn(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)\n{\n\tHRGN ret;\n\tOutTraceDW(\"CreateRectRgn: rect=(%d,%d)-(%d,%d)\\n\", nLeftRect, nTopRect, nRightRect, nBottomRect);\n\n\tif (dxw.IsFullScreen()){\n\t\tdxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect);\n\t\tOutTraceDW(\"CreateRectRgn: fixed rect=(%d,%d)-(%d,%d)\\n\", nLeftRect, nTopRect, nRightRect, nBottomRect);\n\t}\n\n\tret=(*pCreateRectRgn)(nLeftRect, nTopRect, nRightRect, nBottomRect);\n\tif(!ret) OutTraceE(\"CreateRectRgn: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nHRGN WINAPI extCreateRectRgnIndirect(const RECT *lprc)\n{\n\tHRGN ret;\n\tRECT rc;\n\tOutTraceDW(\"CreateRectRgnIndirect: rect=(%d,%d)-(%d,%d)\\n\", lprc->left, lprc->top, lprc->right, lprc->bottom);\n\n\t// v2.04.05: copy the RECT, do not alter the values!\n\trc = *lprc;\n\tif (dxw.IsFullScreen()){\n\t\tdxw.MapClient(&rc);\n\t\tOutTraceDW(\"CreateRectRgnIndirect: fixed rect=(%d,%d)-(%d,%d)\\n\", rc.left, rc.top, rc.right, rc.bottom);\n\t}\n\n\tret=(*pCreateRectRgnIndirect)(&rc);\n\tif(!ret) OutTraceE(\"CreateRectRgnIndirect: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nBOOL WINAPI extSetRectRgn(HRGN hrgn, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect)\n{\n\tBOOL ret;\n\tOutTraceDW(\"SetRectRgn: hrgn=%x rect=(%d,%d)-(%d,%d)\\n\", hrgn, nLeftRect, nTopRect, nRightRect, nBottomRect);\n\n\tif (dxw.IsFullScreen()){\n\t\tdxw.MapClient(&nLeftRect, &nTopRect, &nRightRect, &nBottomRect);\n\t\tOutTraceDW(\"SetRectRgn: fixed rect=(%d,%d)-(%d,%d)\\n\", nLeftRect, nTopRect, nRightRect, nBottomRect);\n\t}\n\n\tret=(*pSetRectRgn)(hrgn, nLeftRect, nTopRect, nRightRect, nBottomRect);\n\tif(!ret) OutTraceE(\"SetRectRgn: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nHRGN WINAPI extCreatePolygonRgn(const POINT *lpPoints, int cPoints, int fnPolyFillMode)\n{\n\t// LOGTOBEFIXED\n\tHRGN ret;\n\tif(IsTraceDDRAW){\n\t\tint i;\n\t\tOutTrace(\"CreatePolygonRgn: PolyFillMode=%x cCount=%d pt=\", fnPolyFillMode, cPoints); \n\t\tfor(i=0; i<cPoints; i++) OutTrace(\"(%d,%d) \", lpPoints[i].x, lpPoints[i].y);\n\t\tOutTrace(\"\\n\");\n\t}\n\tif (dxw.IsFullScreen()){\n\t\tint i;\n\t\tOutTrace(\"CreatePolygonRgn: fixed cCount=%d pt=\", cPoints); \n\t\tfor(i=0; i<cPoints; i++) {\n\t\t\tdxw.MapClient((LPPOINT)&lpPoints[i]);\n\t\t\tOutTrace(\"(%d,%d) \", lpPoints[i].x, lpPoints[i].y);\n\t\t}\n\t\tOutTrace(\"\\n\");\n\t}\n\tret=(*pCreatePolygonRgn)(lpPoints, cPoints, fnPolyFillMode);\n\tif(!ret)OutTraceE(\"CreatePolygonRgn: ERROR ret=%x\\n\", ret); \n\treturn ret;\n}\n\nBOOL WINAPI extMaskBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc,\n\t\t\t\t\t int nXSrc, int nYSrc, HBITMAP hbmMask, int xMask, int yMask, DWORD dwRop)\n{\n\tBOOL ret;\n\tOutTraceDW(\"MaskBlt: hdcDest=%x pos=(%d,%d) size=(%dx%d) hdcSrc=%x pos=(%d,%d) hbmMask=%x Mask=(%d,%d) dwRop=%x\\n\",\n\t\thdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, hbmMask, xMask, yMask, dwRop);\n\n\tif (dxw.IsToRemap(hdcDest)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdcDest);\n\t\t\t\tret=(*pMaskBlt)(sdc.GetHdc(), nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, hbmMask, xMask, yMask, dwRop);\n\t\t\t\tsdc.PutPrimaryDC(hdcDest, TRUE, nXDest, nYDest, nWidth, nHeight);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&nXDest, &nYDest, &nWidth, &nHeight);\n\t\t\t\tOutTraceDW(\"MaskBlt: fixed pos=(%d,%d) size=(%dx%d)\\n\", nXDest, nYDest, nWidth, nHeight);\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\t// to be implemented\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tret=(*pMaskBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, hbmMask, xMask, yMask, dwRop);\n\tif(!ret) OutTraceE(\"MaskBlt: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nBOOL WINAPI extSetViewportOrgEx(HDC hdc, int X, int Y, LPPOINT lpPoint)\n{\n\tBOOL ret;\n\tOutTraceDW(\"SetViewportOrgEx: hdc=%x pos=(%d,%d)\\n\", hdc, X, Y);\n\n\tif(dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\tdxw.VirtualOffsetX = X;\n\t\t\t\tdxw.VirtualOffsetY = Y;\n\t\t\t\tif(dxw.IsVirtual(hdc)) {\n\t\t\t\t\tOutTraceDW(\"SetViewportOrgEx: virtual hdc\\n\");\n\t\t\t\t\tif(lpPoint){\n\t\t\t\t\t\tlpPoint->x = dxw.VirtualOffsetX;\n\t\t\t\t\t\tlpPoint->y = dxw.VirtualOffsetY;\n\t\t\t\t\t}\n\t\t\t\t\tret = TRUE;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tret=(*pSetViewportOrgEx)(hdc, X, Y, lpPoint);\n\t\t\t\t\tif(ret && lpPoint) {\n\t\t\t\t\t\tOutTraceDW(\"SetViewportOrgEx: previous ViewPort=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t\t\t\t\t\tdxw.UnmapClient(lpPoint);\n\t\t\t\t\t\tOutTraceDW(\"SetViewportOrgEx: fixed previous ViewPort=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED:\n\t\t\t\tdxw.MapClient(&X, &Y);\n\t\t\t\tOutTraceDW(\"SetViewportOrgEx: fixed pos=(%d,%d)\\n\", X, Y);\n\t\t\t\tret=(*pSetViewportOrgEx)(hdc, X, Y, lpPoint);\n\t\t\t\tif(ret && lpPoint) {\n\t\t\t\t\tOutTraceDW(\"SetViewportOrgEx: previous ViewPort=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t\t\t\t\tdxw.UnmapClient(lpPoint);\n\t\t\t\t\tOutTraceDW(\"SetViewportOrgEx: fixed previous ViewPort=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pSetViewportOrgEx)(sdc.GetHdc(), X, Y, lpPoint);\n\t\t\t\tsdc.PutPrimaryDC(hdc, FALSE);\t\t\t\t\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tret=(*pSetViewportOrgEx)(hdc, X, Y, lpPoint);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse{\n\t\tret=(*pSetViewportOrgEx)(hdc, X, Y, lpPoint);\n\t}\n\n\tif(ret && lpPoint) OutTraceDW(\"SetViewportOrgEx: previous ViewPort=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\tif(!ret) OutTraceE(\"SetViewportOrgEx: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nBOOL WINAPI extSetViewportExtEx(HDC hdc, int X, int Y, LPSIZE lpSize)\n{\n\tBOOL ret;\n\tOutTraceDW(\"SetViewportExtEx: hdc=%x pos=(%d,%d)\\n\", hdc, X, Y);\n\n\tif(dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\tif(dxw.IsVirtual(hdc)) {\n\t\t\t\t\tOutTraceDW(\"SetViewportExtEx: virtual hdc\\n\");\n\t\t\t\t\tif(lpSize){\n\t\t\t\t\t\tlpSize->cx = dxw.VirtualExtentX;\n\t\t\t\t\t\tlpSize->cy = dxw.VirtualExtentY;\n\t\t\t\t\t}\n\t\t\t\t\tdxw.VirtualExtentX = X;\n\t\t\t\t\tdxw.VirtualExtentY = Y;\n\t\t\t\t\tret = TRUE;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tret=(*pSetViewportExtEx)(hdc, X, Y, lpSize);\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pSetViewportExtEx)(sdc.GetHdc(), X, Y, lpSize);\n\t\t\t\tsdc.PutPrimaryDC(hdc, FALSE);\t\t\t\t\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED:\n\t\t\t\tdxw.MapClient(&X, &Y);\n\t\t\t\tOutTraceDW(\"SetViewportExtEx: fixed pos=(%d,%d)\\n\", X, Y);\n\t\t\t\tret=(*pSetViewportExtEx)(hdc, X, Y, lpSize);\n\t\t\t\tif(ret && lpSize) {\n\t\t\t\t\tOutTraceDW(\"SetViewportExtEx: previous ViewPort=(%d,%d)\\n\", lpSize->cx, lpSize->cy);\n\t\t\t\t\tdxw.UnmapClient((LPPOINT)lpSize);\n\t\t\t\t\tOutTraceDW(\"SetViewportExtEx: fixed previous ViewPort=(%d,%d)\\n\", lpSize->cx, lpSize->cy);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tret=(*pSetViewportExtEx)(hdc, X, Y, lpSize);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse{\n\t\tret=(*pSetViewportExtEx)(hdc, X, Y, lpSize);\n\t}\n\n\tif(ret && lpSize) OutTraceDW(\"SetViewportOrgEx: previous ViewPort=(%d,%d)\\n\", lpSize->cx, lpSize->cy);\n\tif(!ret) OutTraceE(\"SetViewportOrgEx: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nBOOL WINAPI extGetViewportOrgEx(HDC hdc, LPPOINT lpPoint)\n{\n\tBOOL ret;\n\tOutTraceDW(\"GetViewportOrgEx: hdc=%x\\n\", hdc);\n\n\tif(dxw.IsVirtual(hdc)) {\n\t\tlpPoint->x = dxw.VirtualOffsetX;\n\t\tlpPoint->y = dxw.VirtualOffsetY;\n\t\treturn TRUE;\n\t}\n\n\tret=(*pGetViewportOrgEx)(hdc, lpPoint);\n\tif(ret) {\n\t\tOutTraceDW(\"GetViewportOrgEx: ViewPort=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t\tif (dxw.IsToRemap(hdc)){\n\t\t\tdxw.UnmapClient(lpPoint);\n\t\t\tOutTraceDW(\"GetViewportOrgEx: fixed ViewPort=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t\t}\n\t}\n\n\tif(!ret) OutTraceE(\"GetViewportOrgEx: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nBOOL WINAPI extGetViewportExtEx(HDC hdc, LPPOINT lpPoint)\n{\n\tBOOL ret;\n\tOutTraceDW(\"GetViewportExtEx: hdc=%x\\n\", hdc);\n\n\tif(dxw.IsVirtual(hdc)) {\n\t\tlpPoint->x = dxw.VirtualOffsetX;\n\t\tlpPoint->y = dxw.VirtualOffsetY;\n\t\treturn TRUE;\n\t}\n\n\tret=(*pGetViewportExtEx)(hdc, lpPoint);\n\tif(ret) {\n\t\tOutTraceDW(\"GetViewportExtEx: ViewPort=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t\tif (dxw.IsToRemap(hdc)){\n\t\t\tdxw.UnmapClient(lpPoint);\n\t\t\tOutTraceDW(\"GetViewportOrgEx: fixed ViewPort=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t\t}\n\t}\n\n\tif(!ret) OutTraceE(\"GetViewportExtEx: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nBOOL WINAPI extGetWindowOrgEx(HDC hdc, LPPOINT lpPoint)\n{\n\tBOOL ret;\n\tOutTraceDW(\"GetWindowOrgEx: hdc=%x\\n\", hdc);\n\n\tret=(*pGetWindowOrgEx)(hdc, lpPoint);\n\tif(ret) {\n\t\tOutTraceDW(\"GetWindowOrgEx: ViewPort=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t\tif (dxw.IsToRemap(hdc)){\n\t\t\tdxw.UnmapClient(lpPoint);\n\t\t\tOutTraceDW(\"GetWindowOrgEx: fixed ViewPort=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t\t}\n\t}\n\n\tif(!ret) OutTraceE(\"GetWindowOrgEx: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nBOOL WINAPI extSetWindowOrgEx(HDC hdc, int X, int Y, LPPOINT lpPoint)\n{\n\tBOOL ret;\n\tOutTraceDW(\"SetWindowOrgEx: hdc=%x pos=(%d,%d)\\n\", hdc, X, Y);\n\n\tif (dxw.IsToRemap(hdc)){\n\t\tdxw.MapClient(&X, &Y);\n\t\tOutTraceDW(\"SetWindowOrgEx: fixed pos=(%d,%d)\\n\", X, Y);\n\t}\n\n\tret=(*pSetWindowOrgEx)(hdc, X, Y, lpPoint);\n\tif(ret && lpPoint) {\n\t\tOutTraceDW(\"SetWindowOrgEx: previous ViewPort=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t\tif (dxw.IsToRemap(hdc)){\n\t\t\tdxw.UnmapClient(lpPoint);\n\t\t\tOutTraceDW(\"SetWindowOrgEx: fixed previous ViewPort=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t\t}\n\t}\n\tif(!ret) OutTraceE(\"SetWindowOrgEx: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nBOOL WINAPI extSetWindowExtEx(HDC hdc, int X, int Y, LPPOINT lpPoint)\n{\n\tBOOL ret;\n\tOutTraceDW(\"SetWindowExtEx: hdc=%x pos=(%d,%d)\\n\", hdc, X, Y);\n\n\tif (dxw.IsToRemap(hdc)){\n\t\tdxw.MapClient(&X, &Y);\n\t\tOutTraceDW(\"SetWindowExtEx: fixed pos=(%d,%d)\\n\", X, Y);\n\t}\n\n\tret=(*pSetWindowExtEx)(hdc, X, Y, lpPoint);\n\tif(ret && lpPoint) {\n\t\tOutTraceDW(\"SetWindowExtEx: previous ViewPort=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t\tif (dxw.IsToRemap(hdc)){\n\t\t\tdxw.UnmapClient(lpPoint);\n\t\t\tOutTraceDW(\"SetWindowExtEx: fixed previous ViewPort=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t\t}\n\t}\n\tif(!ret) OutTraceE(\"SetWindowExtEx: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nBOOL WINAPI extGetCurrentPositionEx(HDC hdc, LPPOINT lpPoint)\n{\n\tBOOL ret;\n\tOutTraceDW(\"GetCurrentPositionEx: hdc=%x\\n\", hdc);\n\n\tret=(*pGetCurrentPositionEx)(hdc, lpPoint);\n\tif(ret) {\n\t\tOutTraceDW(\"GetCurrentPositionEx: pos=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t\tif (dxw.IsToRemap(hdc)){\n\t\t\tswitch(dxw.GDIEmulationMode){\n\t\t\t\tcase GDIMODE_STRETCHED:\n\t\t\t\t\tdxw.UnmapClient(lpPoint);\n\t\t\t\t\tbreak;\n\t\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\t\tret=(*pGetCurrentPositionEx)(sdc.GetHdc(), lpPoint);\n\t\t\t\t\tsdc.PutPrimaryDC(hdc, FALSE);\n\t\t\t\t\treturn ret;\n\t\t\t\t\tbreak;\n\t\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tOutTraceDW(\"GetCurrentPositionEx: fixed pos=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t\t}\n\t}\n\tif(!ret) OutTraceE(\"GetCurrentPositionEx: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nBOOL WINAPI extCreateScalableFontResourceA(DWORD fdwHidden, LPCTSTR lpszFontRes, LPCTSTR lpszFontFile, LPCTSTR lpszCurrentPath)\n{\n\tBOOL res;\n\tOutTraceDW(\"CreateScalableFontResource: hidden=%d FontRes=\\\"%s\\\" FontFile=\\\"%s\\\" CurrentPath=\\\"%s\\\"\\n\",\n\t\tfdwHidden, lpszFontRes, lpszFontFile, lpszCurrentPath);\n\tif(dxw.dwFlags3 & FONTBYPASS) return TRUE;\n\tres=(*pCreateScalableFontResourceA)(fdwHidden, lpszFontRes, lpszFontFile, lpszCurrentPath);\n\tif(!res) OutTraceE(\"CreateScalableFontResource: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\treturn res;\n}\n\nBOOL WINAPI extCreateScalableFontResourceW(DWORD fdwHidden, LPCWSTR lpszFontRes, LPCWSTR lpszFontFile, LPCWSTR lpszCurrentPath)\n{\n\tBOOL res;\n\tOutTraceDW(\"CreateScalableFontResource: hidden=%d FontRes=\\\"%ls\\\" FontFile=\\\"%ls\\\" CurrentPath=\\\"%ls\\\"\\n\",\n\t\tfdwHidden, lpszFontRes, lpszFontFile, lpszCurrentPath);\n\tif(dxw.dwFlags3 & FONTBYPASS) return TRUE;\n\tres=(*pCreateScalableFontResourceW)(fdwHidden, lpszFontRes, lpszFontFile, lpszCurrentPath);\n\tif(!res) OutTraceE(\"CreateScalableFontResource: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\treturn res;\n}\n\nint WINAPI extAddFontResourceA(LPCTSTR lpszFontFile)\n{\n\tBOOL res;\n\tOutTraceDW(\"AddFontResource: FontFile=\\\"%s\\\"\\n\", lpszFontFile);\n\tif(dxw.dwFlags3 & FONTBYPASS) {\n\t\tOutTraceDW(\"AddFontResource: SUPPRESS FontFile=\\\"%s\\\"\\n\", lpszFontFile);\n\t\treturn TRUE;\n\t}\n\tres=(*pAddFontResourceA)(lpszFontFile);\n\tif(!res) OutTraceE(\"AddFontResource: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\treturn res;\n}\n\nint WINAPI extRemoveFontResourceA(LPCTSTR lpszFontFile)\n{\n\tBOOL res;\n\tOutTraceDW(\"RemoveFontResource: FontFile=\\\"%s\\\"\\n\", lpszFontFile);\n\tif(dxw.dwFlags3 & FONTBYPASS) {\n\t\tOutTraceDW(\"RemoveFontResource: SUPPRESS FontFile=\\\"%s\\\"\\n\", lpszFontFile);\n\t\treturn TRUE;\n\t}\n\tres=(*pRemoveFontResourceA)(lpszFontFile);\n\tif(!res) OutTraceE(\"RemoveFontResource: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\treturn res;\n}\n\nint WINAPI extAddFontResourceW(LPCWSTR lpszFontFile)\n{\n\tBOOL res;\n\tOutTraceDW(\"AddFontResource: FontFile=\\\"%ls\\\"\\n\", lpszFontFile);\n\tif(dxw.dwFlags3 & FONTBYPASS) {\n\t\tOutTraceDW(\"AddFontResource: SUPPRESS FontFile=\\\"%ls\\\"\\n\", lpszFontFile);\n\t\treturn TRUE;\n\t}\n\tres=(*pAddFontResourceW)(lpszFontFile);\n\tif(!res) OutTraceE(\"AddFontResource: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\treturn res;\n}\n\nint WINAPI extRemoveFontResourceW(LPCWSTR lpszFontFile)\n{\n\tBOOL res;\n\tOutTraceDW(\"RemoveFontResource: FontFile=\\\"%ls\\\"\\n\", lpszFontFile);\n\tif(dxw.dwFlags3 & FONTBYPASS) {\n\t\tOutTraceDW(\"RemoveFontResource: SUPPRESS FontFile=\\\"%ls\\\"\\n\", lpszFontFile);\n\t\treturn TRUE;\n\t}\n\tres=(*pRemoveFontResourceW)(lpszFontFile);\n\tif(!res) OutTraceE(\"RemoveFontResource: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\treturn res;\n}\n\nint WINAPI extEnumFontsA(HDC hdc, LPCSTR lpFaceName, FONTENUMPROC lpFontFunc, LPARAM lParam)\n{\n\tint res;\n\tOutTraceDW(\"EnumFonts: hdc=%x facename=\\\"%s\\\" fontfunc=%x lparam=%x\\n\", hdc, lpFaceName, lpFontFunc, lParam);\n\tres = (*pEnumFontsA)(hdc, lpFaceName, lpFontFunc, lParam);\n\tOutTraceDW(\"EnumFonts: res=0x%x\\n\", res);\n\treturn res;\n}\n\n//BEWARE: SetPixelFormat must be issued on the same hdc used by OpenGL wglCreateContext, otherwise \n// a failure err=2000 ERROR INVALID PIXEL FORMAT occurs!!\n//\n//Remarks: https://msdn.microsoft.com/en-us/library/ms537559(VS.85).aspx\n//\n// If hdc references a window, calling the SetPixelFormat function also changes the pixel format of the window. \n// Setting the pixel format of a window more than once can lead to significant complications for the Window \n// Manager and for multithread applications, so it is not allowed. An application can only set the pixel format\n// of a window one time. Once a window's pixel format is set, it cannot be changed.\n\nBOOL WINAPI extGDISetPixelFormat(HDC hdc, int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd)\n{\n\tBOOL res;\n\tBOOL bRemappedDC = FALSE;\n\tstatic int iCounter = 0;\n\tstatic HDC hLastDC = 0;\n\n\tOutTraceDW(\"SetPixelFormat: hdc=%x PixelFormat=%d Flags=%x PixelType=%x(%s) ColorBits=%d RGBdepth=(%d,%d,%d) RGBshift=(%d,%d,%d)\\n\", \n\t\thdc, iPixelFormat, \n\t\tppfd->dwFlags, ppfd->iPixelType, ppfd->iPixelType?\"PFD_TYPE_COLORINDEX\":\"PFD_TYPE_RGBA\", ppfd->cColorBits,\n\t\tppfd->cRedBits, ppfd->cGreenBits, ppfd->cBlueBits,\n\t\tppfd->cRedShift, ppfd->cGreenShift, ppfd->cBlueShift);\n\t//if(dxw.dwFlags1 & EMULATESURFACE) {\n\tif(dxw.IsRealDesktop(WindowFromDC(hdc))){\n\t\tHDC oldhdc = hdc;\n\t\thdc=(*pGDIGetDC)(dxw.GethWnd()); // potential leakage\n\t\tbRemappedDC = TRUE;\n\t\tOutTraceDW(\"SetPixelFormat: remapped desktop hdc=%x->%x hWnd=%x\\n\", oldhdc, hdc, dxw.GethWnd());\n\t}\n\tif(iCounter && (hdc == hLastDC))\n\t\tres = TRUE; // avoid calling SetPixelFormat more than once on same hdc\n\telse {\n\t\tres=(*pGDISetPixelFormat)(hdc, iPixelFormat, ppfd);\n\t\tiCounter++;\n\t\thLastDC = hdc;\n\t}\n\tif(bRemappedDC) (*pGDIReleaseDC)(dxw.GethWnd(), hdc); // fixed DC leakage\n\tdxw.ActualPixelFormat.dwRGBBitCount = ppfd->cColorBits;\n\tif(!res) OutTraceE(\"SetPixelFormat: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\treturn res;\n}\n\nint WINAPI extGDIGetPixelFormat(HDC hdc)\n{\n\tint res;\n\tBOOL bRemappedDC = FALSE;\n\tOutTraceDW(\"GetPixelFormat: hdc=%x\\n\", hdc);\n\tif(dxw.IsDesktop(WindowFromDC(hdc))){\n\t\tHDC oldhdc = hdc;\n\t\thdc=(*pGDIGetDC)(dxw.GethWnd()); // potential DC leakage\n\t\tbRemappedDC = TRUE;\n\t\tOutTraceDW(\"GetPixelFormat: remapped desktop hdc=%x->%x hWnd=%x\\n\", oldhdc, hdc, dxw.GethWnd());\n\t}\t\n\tres=(*pGDIGetPixelFormat)(hdc);\n\tif(!res) OutTraceE(\"GetPixelFormat: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\telse OutTraceDW(\"GetPixelFormat: res=%d\\n\", res);\n\tif(bRemappedDC)(*pGDIReleaseDC)(dxw.GethWnd(), hdc); // fixed DC leakage\n\treturn res;\n}\n\nstatic char *ExplainPFFlags(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"PFD_\");\n\tif (c & PFD_DOUBLEBUFFER) strcat(eb, \"DOUBLEBUFFER+\");\n\tif (c & PFD_STEREO) strcat(eb, \"STEREO+\");\n\tif (c & PFD_DRAW_TO_WINDOW) strcat(eb, \"DRAW_TO_WINDOW+\");\n\tif (c & PFD_DRAW_TO_BITMAP) strcat(eb, \"DRAW_TO_BITMAP+\");\n\tif (c & PFD_SUPPORT_GDI) strcat(eb, \"SUPPORT_GDI+\");\n\tif (c & PFD_SUPPORT_OPENGL) strcat(eb, \"SUPPORT_OPENGL+\");\n\tif (c & PFD_GENERIC_FORMAT) strcat(eb, \"GENERIC_FORMAT+\");\n\tif (c & PFD_NEED_PALETTE) strcat(eb, \"NEED_PALETTE+\");\n\tif (c & PFD_NEED_SYSTEM_PALETTE) strcat(eb, \"NEED_SYSTEM_PALETTE+\");\n\tif (c & PFD_SWAP_EXCHANGE) strcat(eb, \"SWAP_EXCHANGE+\");\n\tif (c & PFD_SWAP_COPY) strcat(eb, \"SWAP_COPY+\");\n\tif (c & PFD_SWAP_LAYER_BUFFERS) strcat(eb, \"SWAP_LAYER_BUFFERS+\");\n\tif (c & PFD_GENERIC_ACCELERATED) strcat(eb, \"GENERIC_ACCELERATED+\");\n\tif (c & PFD_SUPPORT_DIRECTDRAW) strcat(eb, \"SUPPORT_DIRECTDRAW+\");\n\tif (c & PFD_DIRECT3D_ACCELERATED) strcat(eb, \"DIRECT3D_ACCELERATED+\");\n\tif (c & PFD_SUPPORT_COMPOSITION) strcat(eb, \"SUPPORT_COMPOSITION+\");\n\tif (c & PFD_DEPTH_DONTCARE) strcat(eb, \"DEPTH_DONTCARE+\");\n\tif (c & PFD_DOUBLEBUFFER_DONTCARE) strcat(eb, \"DOUBLEBUFFER_DONTCARE+\");\n\tif (c & PFD_STEREO_DONTCARE) strcat(eb, \"STEREO_DONTCARE+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"PFD_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nint WINAPI extChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR *ppfd)\n{\n\tint res;\n\tOutTraceDW(\"ChoosePixelFormat: hdc=%x Flags=%x(%s) PixelType=%x(%s) ColorBits=%d RGBdepth=(%d,%d,%d) RGBshift=(%d,%d,%d)\\n\", \n\t\thdc, \n\t\tppfd->dwFlags, ExplainPFFlags(ppfd->dwFlags),\n\t\tppfd->iPixelType, ppfd->iPixelType?\"PFD_TYPE_COLORINDEX\":\"PFD_TYPE_RGBA\", ppfd->cColorBits,\n\t\tppfd->cRedBits, ppfd->cGreenBits, ppfd->cBlueBits,\n\t\tppfd->cRedShift, ppfd->cGreenShift, ppfd->cBlueShift);\n\tif(0){ // if necessary, add a flag here .....\n\t\tPIXELFORMATDESCRIPTOR myppfd;\n\t\tmemcpy(&myppfd, ppfd, sizeof(PIXELFORMATDESCRIPTOR));\n\t\tmyppfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);\n\t\tmyppfd.dwFlags |= PFD_DRAW_TO_WINDOW;\n\t\tres=(*pChoosePixelFormat)(hdc, &myppfd);\n\t} else {\n\t\tres=(*pChoosePixelFormat)(hdc, ppfd);\n\t}\n\tif(!res) OutTraceE(\"ChoosePixelFormat: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\telse OutTraceDW(\"ChoosePixelFormat: res=%d\\n\", res);\n\treturn res;\n}\n\nint WINAPI extDescribePixelFormat(HDC hdc, int iPixelFormat, UINT nBytes, LPPIXELFORMATDESCRIPTOR ppfd)\n{\n\tint res;\n\tOutTraceDW(\"DescribePixelFormat: hdc=%x PixelFormat=%d Bytes=%d\\n\", hdc, iPixelFormat, nBytes);\n\n\tres=(*pDescribePixelFormat)(hdc, iPixelFormat, nBytes, ppfd);\n\tif(!res){\n\t\tOutTraceE(\"DescribePixelFormat: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\treturn res;\n\t}\n\tif (ppfd && nBytes==sizeof(PIXELFORMATDESCRIPTOR)){\n\t\tOutTraceDW(\"DescribePixelFormat: res=%d Flags=%x(%s) PixelType=%x(%s) ColorBits=%d RGBdepth=(%d,%d,%d) RGBshift=(%d,%d,%d)\\n\", \n\t\t\tres, \n\t\t\tppfd->dwFlags, ExplainPFFlags(ppfd->dwFlags), ppfd->iPixelType, \n\t\t\tppfd->iPixelType?\"PFD_TYPE_COLORINDEX\":\"PFD_TYPE_RGBA\", ppfd->cColorBits,\n\t\t\tppfd->cRedBits, ppfd->cGreenBits, ppfd->cBlueBits,\n\t\t\tppfd->cRedShift, ppfd->cGreenShift, ppfd->cBlueShift);\n\t\tif((hdc==0) && dxw.IsFullScreen() && (ppfd->iPixelType==PFD_TYPE_RGBA)){ \n\t\t\tOutTraceDW(\"DescribePixelFormat: emulating virtual desktop pixelformat bpp=%d\\n\", dxw.VirtualPixelFormat.dwRGBBitCount); \n\t\t\tswitch(dxw.VirtualPixelFormat.dwRGBBitCount){\n\t\t\t\tcase 8:\n\t\t\t\t\tppfd->cColorBits = 8;\n\t\t\t\t\tOutTrace(\"colorbits=%d to be fixed!\\n\", ppfd->cColorBits);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 16:\n\t\t\t\t\tppfd->cColorBits = 16;\n\t\t\t\t\tswitch(dxw.VirtualPixelFormat.dwGBitMask){\n\t\t\t\t\t\tcase 0x0007E0: // RGB565\n\t\t\t\t\t\t\tppfd->cColorBits=16;\n\t\t\t\t\t\t\tppfd->cRedBits=5;\n\t\t\t\t\t\t\tppfd->cRedShift=0;\n\t\t\t\t\t\t\tppfd->cGreenBits=6;\n\t\t\t\t\t\t\tppfd->cGreenShift=5;\n\t\t\t\t\t\t\tppfd->cBlueBits=5;\n\t\t\t\t\t\t\tppfd->cBlueShift=11;\n\t\t\t\t\t\t\tppfd->cAlphaBits=0;\n\t\t\t\t\t\t\tppfd->cAlphaShift=0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 0x0003E0: // RGB555\n\t\t\t\t\t\t\tppfd->cColorBits=15;\n\t\t\t\t\t\t\tppfd->cRedBits=5;\n\t\t\t\t\t\t\tppfd->cRedShift=0;\n\t\t\t\t\t\t\tppfd->cGreenBits=5;\n\t\t\t\t\t\t\tppfd->cGreenShift=5;\n\t\t\t\t\t\t\tppfd->cBlueBits=5;\n\t\t\t\t\t\t\tppfd->cBlueShift=10;\n\t\t\t\t\t\t\tppfd->cAlphaBits=1;\n\t\t\t\t\t\t\tppfd->cAlphaShift=15;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 24:\n\t\t\t\t\tif (ppfd->cColorBits != 24) OutTrace(\"colorbits=%d to be fixed!\\n\", ppfd->cColorBits);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 32:\n\t\t\t\t\tif (ppfd->cColorBits != 24) OutTrace(\"colorbits=%d to be fixed!\\n\", ppfd->cColorBits);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\tOutTraceDW(\"DescribePixelFormat: res=%d\\n\", res);\n\t}\n\treturn res;\n}\n\nDWORD WINAPI extGetObjectType(HGDIOBJ h)\n{\n\tDWORD res;\n\tres=(*pGetObjectType)(h);\n\tOutTraceDW(\"GetObjectType: h=%x type=%x\\n\", h, res);\n\tif(h==dxw.VirtualHDC) {\n\t\tOutTraceDW(\"GetObjectType: REMAP h=%x type=%x->%x\\n\", h, res, OBJ_DC);\n\t\tres=OBJ_DC;\n\t}\n\treturn res;\n}\n\nextern BOOL gFixed;\n\nBOOL WINAPI extExtTextOutA(HDC hdc, int X, int Y, UINT fuOptions, const RECT *lprc, LPCSTR lpString, UINT cbCount, const INT *lpDx)\n{\n\tRECT rc;\n\tBOOL ret;\n\tif(IsTraceDW){\n\t\tchar sRect[81];\n\t\tif(lprc) sprintf(sRect, \"(%d,%d)-(%d,%d)\", lprc->left, lprc->top, lprc->right, lprc->bottom);\n\t\telse strcpy(sRect, \"NULL\");\n\t\tOutTrace(\"ExtTextOutA: hdc=%x pos=(%d,%d) String=\\\"%s\\\" rect=%s\\n\", hdc, X, Y, lpString, sRect);\n\t}\n\n\tif (dxw.IsToRemap(hdc) && !gFixed){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pExtTextOutA)(sdc.GetHdc(), X, Y, fuOptions, lprc, lpString, cbCount, lpDx);\n\t\t\t\tif(lprc){\n\t\t\t\t\trc = *lprc;\n\t\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&X, &Y);\n\t\t\t\tif(lprc) {\n\t\t\t\t\trc = *lprc;\n\t\t\t\t\tdxw.MapClient(&rc);\n\t\t\t\t}\n\t\t\t\tOutTraceDW(\"ExtTextOutA: fixed pos=(%d,%d)\\n\", X, Y);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tif(lprc)\n\t\treturn (*pExtTextOutA)(hdc, X, Y, fuOptions, &rc, lpString, cbCount, lpDx);\n\telse\n\t\treturn (*pExtTextOutA)(hdc, X, Y, fuOptions, NULL, lpString, cbCount, lpDx);\n}\n\nBOOL WINAPI extExtTextOutW(HDC hdc, int X, int Y, UINT fuOptions, const RECT *lprc, LPCWSTR lpString, UINT cbCount, const INT *lpDx)\n{\n\tRECT rc;\n\tBOOL ret;\n\tif(IsTraceDW){\n\t\tchar sRect[81];\n\t\tif(lprc) sprintf(sRect, \"(%d,%d)-(%d,%d)\", lprc->left, lprc->top, lprc->right, lprc->bottom);\n\t\telse strcpy(sRect, \"NULL\");\n\t\tOutTrace(\"ExtTextOutW: hdc=%x pos=(%d,%d) String=\\\"%ls\\\" rect=%s\\n\", hdc, X, Y, lpString, sRect);\n\t}\n\t\n\tif (dxw.IsToRemap(hdc) && !gFixed){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pExtTextOutW)(sdc.GetHdc(), X, Y, fuOptions, lprc, lpString, cbCount, lpDx);\n\t\t\t\tif(lprc){\n\t\t\t\t\trc = *lprc;\n\t\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&X, &Y);\n\t\t\t\tif(lprc) {\n\t\t\t\t\trc = *lprc;\n\t\t\t\t\tdxw.MapClient(&rc);\n\t\t\t\t}\n\t\t\t\tOutTraceDW(\"ExtTextOutW: fixed pos=(%d,%d)\\n\", X, Y);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tif(lprc)\n\t\treturn (*pExtTextOutW)(hdc, X, Y, fuOptions, &rc, lpString, cbCount, lpDx);\n\telse\n\t\treturn (*pExtTextOutW)(hdc, X, Y, fuOptions, NULL, lpString, cbCount, lpDx);\n\t\n}\n\n#ifdef TRACEPALETTE\nBOOL WINAPI extResizePalette(HPALETTE hpal, UINT nEntries)\n{\n\tOutTrace(\"ResizePalette: hpal=%x nEntries=%d\\n\", hpal, nEntries);\n\treturn (*pResizePalette)(hpal, nEntries);\n}\n#endif\n\n#if 0\nCOLORREF WINAPI extSetBkColor(HDC hdc, COLORREF crColor)\n{\n\tOutTrace(\"SetBkColor: hdc=%x color=%x\\n\", hdc, crColor);\n\tif(dxw.Windowize && dxw.IsRealDesktop(WindowFromDC(hdc))) {\n\t\tOutTrace(\"Remap desktop hdc=%x->%x\\n\", hdc, GetDC(dxw.GethWnd()));\n\t\thdc=GetDC(dxw.GethWnd());\n\t}\n\treturn (*pSetBkColor)(hdc, crColor);\n}\n\nint WINAPI extSetBkMode(HDC hdc, int iBkMode)\n{\n\tOutTrace(\"SetBkMode: hdc=%x bkmode=%x\\n\", hdc, iBkMode);\n\tif(dxw.Windowize && dxw.IsRealDesktop(WindowFromDC(hdc))) {\n\t\tOutTrace(\"Remap desktop hdc=%x->%x\\n\", hdc, GetDC(dxw.GethWnd()));\n\t\thdc=GetDC(dxw.GethWnd());\n\t}\n\treturn (*pSetBkMode)(hdc, iBkMode);\n}\n\nCOLORREF WINAPI extSetTextColor(HDC hdc, COLORREF crColor)\n{\n\tOutTrace(\"SetTextColor: hdc=%x color=%x\\n\", hdc, crColor);\n\tif(dxw.Windowize && dxw.IsRealDesktop(WindowFromDC(hdc))) {\n\t\tOutTrace(\"Remap desktop hdc=%x->%x\\n\", hdc, GetDC(dxw.GethWnd()));\n\t\thdc=GetDC(dxw.GethWnd());\n\t}\n\treturn (*pSetTextColor)(hdc, crColor);\n}\n\n// unhooked, since quite surprisingly all rectangles showed properly scaled already in RollerCoaster Tycoon !!\nDWORD WINAPI extGetRegionData(HRGN hRgn, DWORD dwCount, LPRGNDATA lpRgnData)\n{\n\tDWORD ret;\n\tRECT *data;\n\tret=(*pGetRegionData)(hRgn, dwCount, lpRgnData);\n\tif(IsDebug){\n\t\tOutTrace(\"GetRegionData: hRgn=%x count=%d RgnData=%x ret=%d\\n\", hRgn, dwCount, lpRgnData, ret);\n\t\tif(lpRgnData && dwCount){\n\t\t\tOutTrace(\"GetRegionData: size=%d type=%x(%s) count=%d size=%d rect=(%d,%d)-(%d,%d)\\n\", \n\t\t\t\tlpRgnData->rdh.dwSize, lpRgnData->rdh.iType, (lpRgnData->rdh.iType==RDH_RECTANGLES ? \"RDH_RECTANGLES\" : \"unknown\"), \n\t\t\t\tlpRgnData->rdh.nCount, lpRgnData->rdh.nRgnSize, \n\t\t\t\tlpRgnData->rdh.rcBound.left, lpRgnData->rdh.rcBound.top, lpRgnData->rdh.rcBound.right, lpRgnData->rdh.rcBound.bottom);\n\t\t\tdata=(RECT *)lpRgnData->Buffer;\n\t\t\tfor(DWORD i=0; i<lpRgnData->rdh.nCount; i++)\n\t\t\t\tOutTrace(\"GetRegionData: item=%i rect=(%d,%d)-(%d,%d)\\n\", i, data[i].left, data[i].top, data[i].right, data[i].bottom);\n\t\t}\n\t}\n\n\tif(dxw.IsFullScreen() && lpRgnData && dwCount){\n        dxw.UnmapClient(&(lpRgnData->rdh.rcBound));\n\t\tdata=(RECT *)lpRgnData->Buffer;\n\t\tfor(DWORD i=0; i<lpRgnData->rdh.nCount; i++) dxw.UnmapClient(&(data[i]));\n\t\tif(IsDebug){\n\t\t\tOutTrace(\"GetRegionData: FIXED rect=(%d,%d)-(%d,%d)\\n\", \n\t\t\t\tlpRgnData->rdh.rcBound.left, lpRgnData->rdh.rcBound.top, lpRgnData->rdh.rcBound.right, lpRgnData->rdh.rcBound.bottom);\n\t\t\tdata=(RECT *)lpRgnData->Buffer;\n\t\t\tfor(DWORD i=0; i<lpRgnData->rdh.nCount; i++)\n\t\t\t\tOutTrace(\"GetRegionData: FIXED item=%i rect=(%d,%d)-(%d,%d)\\n\", \n\t\t\t\t\ti, data[i].left, data[i].top, data[i].right, data[i].bottom);\n\t\t}\n\t}\n\n\treturn ret;\n}\n#endif\n\nint WINAPI extOffsetRgn(HRGN hrgn, int nXOffset, int nYOffset)\n{\n\tOutTraceDW(\"OffsetRgn(hrgn=%x nXOffset=%d nYOffset=%d\\n\", hrgn, nXOffset, nYOffset);\n\n\tif(dxw.IsFullScreen()){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\tcase GDIMODE_STRETCHED: \n\t\t\tdxw.MapClient(&nXOffset, &nYOffset);\n\t\t\tOutTraceDW(\"OffsetRgn: fixed STRETCHED offset=(%d,%d)\\n\", nXOffset, nYOffset);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn (*pOffsetRgn)(hrgn, nXOffset, nYOffset);\n}\n\nCOLORREF WINAPI extGetPixel(HDC hdc, int nXPos, int nYPos)\n{\n\tCOLORREF ret;\n\tOutTraceDW(\"GetPixel: hdc=%x\\n\", hdc);\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pGetPixel)(sdc.GetHdc(), nXPos, nYPos);\n\t\t\t\tsdc.PutPrimaryDC(hdc, FALSE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\t\t\t\n\t\t\tdefault:\n\t\t\t\t// to do .....\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\n\tret=(*pGetPixel)(hdc, nXPos, nYPos);\n\tif(ret==CLR_INVALID) {\n\t\tOutTraceE(\"GetPixel ERROR: err=%d\\n\", GetLastError());\n\t}\n\telse {\n\t\tOutTraceDW(\"GetPixel: color=0x%x\\n\", ret);\n\t}\n\treturn ret;}\n\nBOOL WINAPI extPlgBlt(HDC hdcDest, const POINT *lpPoint, HDC hdcSrc, int nXSrc, int nYSrc, int nWidth, int nHeight, HBITMAP hbmMask, int xMask, int yMask)\n{\n\tMessageBox(0, \"PlgBlt\", \"DxWnd\", MB_OK);\n\treturn (COLORREF)0;\n}\n\nBOOL WINAPI extChord(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nXRadial1, int nYRadial1, int nXRadial2, int nYRadial2)\n{\n\tMessageBox(0, \"Chord\", \"DxWnd\", MB_OK);\n\treturn (COLORREF)0;\n}\n\nBOOL WINAPI extPolyTextOutA(HDC hdc, const POLYTEXTA *pptxt, int cStrings)\n{\n\tMessageBox(0, \"PolyTextOutA\", \"DxWnd\", MB_OK);\n\treturn TRUE;\n}\n\nBOOL WINAPI extPolyTextOutW(HDC hdc, const POLYTEXTW *pptxt, int cStrings)\n{\n\tMessageBox(0, \"PolyTextOutW\", \"DxWnd\", MB_OK);\n\treturn TRUE;\n}\n\nHBITMAP WINAPI extCreateDIBitmap(HDC hdc, BITMAPINFOHEADER *lpbmih, DWORD fdwInit, const VOID *lpbInit, const BITMAPINFO *lpbmi, UINT fuUsage)\n{\n\tHBITMAP ret;\n\tif(IsTraceDW){\n\t\tOutTrace(\"CreateDIBitmap: hdc=%x init=%x%s data=%x usage=%x(%s)\\n\", \n\t\t\thdc, fdwInit, fdwInit==CBM_INIT?\"(CBM_INIT)\":\"\", lpbInit, \n\t\t\tfuUsage, ExplainDIBUsage(fuUsage));\n\t\tif(fdwInit==CBM_INIT) TraceBITMAPINFOHEADER(\"CreateDIBitmap(lpbmih)\", lpbmih);\n\t\tTraceBITMAPINFOHEADER(\"CreateDIBitmap(lpbmi)\", (BITMAPINFOHEADER *)&(lpbmi->bmiHeader));\n\t}\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pCreateDIBitmap)(sdc.GetHdc(), lpbmih, fdwInit, lpbInit, lpbmi, fuUsage);\n\t\t\t\tif(!ret) OutTraceE(\"CreateDIBitmap ERROR: err=%d\\n\", GetLastError());\n\t\t\t\tsdc.PutPrimaryDC(hdc, FALSE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\t\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\t\n\tret = (*pCreateDIBitmap)(hdc, lpbmih, fdwInit, lpbInit, lpbmi, fuUsage);\n\tif(!ret) OutTraceE(\"CreateDIBitmap ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nHBITMAP WINAPI extCreateDIBSection(HDC hdc, const BITMAPINFO *pbmi, UINT iUsage, VOID **ppvBits, HANDLE hSection, DWORD dwOffset)\n{\n\tHBITMAP ret;\n\tOutTraceDW(\"CreateDIBSection: hdc=%x bmi={%s} usage=%s hsect=%x offset=%x\\n\", hdc, sBMIDump((BITMAPINFO *)pbmi), ExplainDIBUsage(iUsage), hSection, dwOffset);\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pCreateDIBSection)(sdc.GetHdc(), pbmi, iUsage, ppvBits, hSection, dwOffset);\n\t\t\t\tsdc.PutPrimaryDC(hdc, FALSE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\t\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\t\n\tret=(*pCreateDIBSection)(hdc, pbmi, iUsage, ppvBits, hSection, dwOffset);\n\tif(!ret) {\n\t\tOutTraceE(\"CreateDIBSection ERROR: err=%d\\n\", GetLastError());\n\t}\n\telse {\n\t\tOutTraceDW(\"CreateDIBSection: ret=%x\\n\", ret);\n\t\t// beware: it is worth dumping the DIB section only when hSection is not NULL\n\t\t// which means the bitmap is connected to a shared memory file\n\t\tif((dxw.dwFlags8 & DUMPDIBSECTION) && hSection) DumpDibSection(pbmi, iUsage, *ppvBits);\n\t}\n\n\treturn ret;\n}\n\nHBITMAP WINAPI extCreateDiscardableBitmap(HDC hdc, int nWidth, int nHeight)\n{\n\tHBITMAP ret;\n\tOutTraceDW(\"CreateDiscardableBitmap: hdc=%x size=(%dx%d)\\n\", hdc, nWidth, nHeight);\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pCreateDiscardableBitmap)(sdc.GetHdc(), nWidth, nHeight);\n\t\t\t\tsdc.PutPrimaryDC(hdc, FALSE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\t\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\t\n\tret=(*pCreateDiscardableBitmap)(hdc, nWidth, nHeight);\n\tif(!ret) OutTraceE(\"CreateDiscardableBitmap ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extExtFloodFill(HDC hdc, int nXStart, int nYStart, COLORREF crColor, UINT fuFillType)\n{\n\tBOOL ret;\n\tOutTraceDW(\"ExtFloodFill: hdc=%x pos=(%d,%d)\\n\", hdc, nXStart, nYStart);\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pExtFloodFill)(sdc.GetHdc(), nXStart, nYStart, crColor, fuFillType);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\t\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\t\n\tret=(*pExtFloodFill)(hdc, nXStart, nYStart, crColor, fuFillType);\n\tif(!ret) OutTraceE(\"ExtFloodFill ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extGdiAlphaBlend(HDC hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest, HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, BLENDFUNCTION ftn)\n{\n\tBOOL ret;\n\tint Flux;\n\tBOOL IsToScreen, IsFromScreen;\n\tBOOL IsDCLeakageSrc = FALSE;\n\tBOOL IsDCLeakageDest = FALSE;\n\n\t// v2.04.05: call found in Rhem during savegame load\n\tOutTraceDW(\"GdiAlphaBlend: dest {hdc=%x pos=(%d,%d) size=(%dx%d)} source {hdc=%x pos=(%d,%d) size=(%dx%d)} ftn=%x\\n\", \n\t\thdcDest, xoriginDest, yoriginDest, wDest, hDest, hdcSrc, xoriginSrc, yoriginSrc, wSrc, hSrc, ftn);\n\n\tif(hdcDest == NULL){\n\t\thdcDest = (*pGDIGetDC)(dxw.GethWnd());\n\t\tOutTraceB(\"GdiAlphaBlend: DEBUG hdc dest=NULL->%x\\n\", hdcDest);\n\t\tIsDCLeakageDest = TRUE;\n\t}\n\tif(hdcSrc == NULL){\n\t\thdcSrc = (*pGDIGetDC)(dxw.GethWnd());\n\t\tOutTraceB(\"GdiAlphaBlend: DEBUG hdc src=NULL->%x\\n\", hdcSrc);\n\t\tIsDCLeakageSrc = TRUE;\n\t}\n\n\tIsToScreen=(OBJ_DC == (*pGetObjectType)(hdcDest));\n\tIsFromScreen=(OBJ_DC == (*pGetObjectType)(hdcSrc));\n\tFlux = (IsToScreen ? 1 : 0) + (IsFromScreen ? 2 : 0); \n\tif (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE;\n\n\t//_Warn(\"GdiAlphaBlend\");\n\tswitch(dxw.GDIEmulationMode){\n\t\tcase GDIMODE_SHAREDDC: \n\t\t\tswitch(Flux){\n\t\t\t\tcase 0: // memory to memory\n\t\t\t\t\tret=(*pGdiAlphaBlend)(hdcSrc, xoriginDest, yoriginDest, wDest, hDest, hdcSrc, xoriginSrc, yoriginSrc, wSrc, hSrc, ftn);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 1: // memory to screen\n\t\t\t\tcase 3: // screen to screen\n\t\t\t\t\tsdc.GetPrimaryDC(hdcDest);\n\t\t\t\t\tret=(*pGdiAlphaBlend)(sdc.GetHdc(), xoriginDest, yoriginDest, wDest, hDest, hdcSrc, xoriginSrc, yoriginSrc, wSrc, hSrc, ftn);\n\t\t\t\t\tsdc.PutPrimaryDC(hdcDest, TRUE, xoriginDest, yoriginDest, wDest, hDest);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2: // screen to memory using virtual screen\n\t\t\t\t\tsdc.GetPrimaryDC(hdcSrc);\n\t\t\t\t\tret=(*pGdiAlphaBlend)(hdcDest, xoriginDest, yoriginDest, wDest, hDest, sdc.GetHdc(), xoriginSrc, yoriginSrc, wSrc, hSrc, ftn);\n\t\t\t\t\tsdc.PutPrimaryDC(hdcSrc, FALSE, xoriginSrc, yoriginSrc, wSrc, hSrc);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\t\t\t\n\t\tcase GDIMODE_STRETCHED: \n\t\t\tswitch(Flux){\n\t\t\t\tcase 1: // memory to screen\n\t\t\t\t\tdxw.MapClient(&xoriginDest, &yoriginDest, &wDest, &hDest);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2: // screen to memory\n\t\t\t\t\tdxw.MapClient(&xoriginSrc, &yoriginSrc, &wSrc, &hSrc);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// fallthrough ....\n\t\tcase GDIMODE_EMULATED:\n\t\tdefault:\n\t\t\tret=(*pGdiAlphaBlend)(hdcDest, xoriginDest, yoriginDest, wDest, hDest, hdcSrc, xoriginSrc, yoriginSrc, wSrc, hSrc, ftn);\n\t\t\tbreak;\n\t}\n\n\tif(IsDCLeakageSrc) (*pGDIReleaseDC)(dxw.GethWnd(), hdcSrc);\n\tif(IsDCLeakageDest) (*pGDIReleaseDC)(dxw.GethWnd(), hdcDest);\n\tif(ret && IsToScreen) dxw.ShowOverlay(hdcDest);\n\tif(!ret) OutTraceE(\"GdiAlphaBlend ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nstatic char *sGradientMode(ULONG mode)\n{\n\tchar *s;\n\tswitch(mode){\n\t\tcase GRADIENT_FILL_RECT_H: s=\"RECT_H\"; break;\n\t\tcase GRADIENT_FILL_RECT_V: s=\"RECT_V\"; break;\n\t\tcase GRADIENT_FILL_TRIANGLE: s=\"TRIANGLE\"; break;\n\t\tdefault: s=\"???\"; break;\n\t}\n\treturn s;\n}\n\nBOOL WINAPI extGdiGradientFill(HDC hdc, PTRIVERTEX pVertex, ULONG nVertex, PVOID pMesh, ULONG nMesh, ULONG ulMode)\n{\n\t// v2.04.06.fx2: found in RHEM when DirectX emulation is off (?).\n\t// temporary version - doesn't scale nor return error\n\tBOOL ret;\n\tOutTraceDW(\"GDI.GdiGradientFill: HDC=%x nVertex=%d nMesh=%d mode=%x(%s)\\n\", \n\t\thdc, nVertex, nMesh, ulMode, sGradientMode(ulMode));\n\n\tret = (*pGdiGradientFill)(hdc, pVertex, nVertex, pMesh, nMesh, ulMode);\n\tif(!ret) OutTraceE(\"GDI.GdiGradientFill ERROR: err=%d\\n\", GetLastError());\n\treturn TRUE;\n}\n\nBOOL WINAPI extGdiTransparentBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, \n\t\t\t\t\t\t\t HDC hdcSrc, int nXSrc, int nYSrc, int nWSrc, int nHSrc, UINT crTransparent)\n{\n\tBOOL res;\n\tBOOL IsToScreen;\n\tBOOL IsFromScreen;\n\tBOOL IsDCLeakageSrc = FALSE;\n\tBOOL IsDCLeakageDest = FALSE;\n\tint Flux;\n\n\tOutTraceDW(\"GDI.GdiTransparentBlt: HDC=%x nXDest=%d nYDest=%d nWidth=%d nHeight=%d hdcSrc=%x nXSrc=%d nYSrc=%d nWSrc=%d nHSrc=%d transp=%x\\n\", \n\t\thdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, crTransparent);\n\n\tOutTraceB(\"GDI.GdiTransparentBlt: DEBUG FullScreen=%x target hdctype=%x(%s) hwnd=%x\\n\", \n\t\tdxw.IsFullScreen(), (*pGetObjectType)(hdcDest), ExplainDCType((*pGetObjectType)(hdcDest)), WindowFromDC(hdcDest));\n\n\tif(dxw.GDIEmulationMode == GDIMODE_EMULATED){\n\t\tif (hdcDest==dxw.RealHDC) hdcDest=dxw.VirtualHDC;\n\t\tOutTraceB(\"GDI.GdiTransparentBlt: DEBUG emulated hdc dest=%x->%x\\n\", dxw.RealHDC, hdcDest);\n\t}\n\n\tif(hdcDest == NULL){\n\t\t// happens in Reah, hdc is NULL despite the fact that BeginPaint returns a valid DC. Too bad, we recover here ...\n\t\thdcDest = (*pGDIGetDC)(dxw.GethWnd());\n\t\tOutTraceB(\"GDI.GdiTransparentBlt: DEBUG hdc dest=NULL->%x\\n\", hdcDest);\n\t\tIsDCLeakageDest = TRUE;\n\t}\n\tif(hdcSrc == NULL){\n\t\thdcSrc = (*pGDIGetDC)(dxw.GethWnd());\n\t\tOutTraceB(\"GDI.GdiTransparentBlt: DEBUG hdc src=NULL->%x\\n\", hdcSrc);\n\t\tIsDCLeakageSrc = TRUE;\n\t}\n\n\tIsToScreen=(OBJ_DC == (*pGetObjectType)(hdcDest));\n\tIsFromScreen=(OBJ_DC == (*pGetObjectType)(hdcSrc));\n\tFlux = (IsToScreen ? 1 : 0) + (IsFromScreen ? 2 : 0); \n\tif (IsToScreen && (dxw.dwFlags3 & NOGDIBLT)) return TRUE;\n\n\tif(dxw.IsToRemap(hdcDest) && (hdcDest != hdcSrc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tswitch(Flux){\n\t\t\t\t\tcase 0: // memory to memory\n\t\t\t\t\t\tres=(*pGdiTransparentBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, crTransparent);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1: // memory to screen\n\t\t\t\t\tcase 3: // screen to screen\n\t\t\t\t\t\tsdc.GetPrimaryDC(hdcDest);\n\t\t\t\t\t\tres=(*pGdiTransparentBlt)(sdc.GetHdc(), nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, crTransparent);\n\t\t\t\t\t\tsdc.PutPrimaryDC(hdcDest, TRUE, nXDest, nYDest, nWidth, nHeight);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2: // screen to memory using virtual screen\n\t\t\t\t\t\tsdc.GetPrimaryDC(hdcSrc);\n\t\t\t\t\t\tres=(*pGdiTransparentBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, sdc.GetHdc(), nXSrc, nYSrc, nWSrc, nHSrc, crTransparent);\n\t\t\t\t\t\tsdc.PutPrimaryDC(hdcSrc, FALSE, nXSrc, nYSrc, nWSrc, nHSrc);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: {\n\t\t\t\tint nWDest, nHDest;\n\t\t\t\tnWDest= nWidth;\n\t\t\t\tnHDest= nHeight;\n\t\t\t\tswitch(Flux){\n\t\t\t\t\tcase 1: // memory to screen\n\t\t\t\t\t\tdxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2: // screen to memory\n\t\t\t\t\t\tdxw.MapClient(&nXSrc, &nYSrc, &nWidth, &nHeight);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tres=(*pGdiTransparentBlt)(hdcDest, nXDest, nYDest, nWDest, nHDest, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, crTransparent);\n\t\t\t\tOutTraceB(\"GDI.GdiTransparentBlt: DEBUG DC dest=(%d,%d) size=(%d,%d)\\n\", nXDest, nYDest, nWDest, nHDest);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\tdefault:\n\t\t\t\tres=(*pGdiTransparentBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, crTransparent);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse {\n\t\tres=(*pGdiTransparentBlt)(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, nWSrc, nHSrc, crTransparent);\n\t}\n\n\tif(IsDCLeakageSrc) (*pGDIReleaseDC)(dxw.GethWnd(), hdcSrc);\n\tif(IsDCLeakageDest) (*pGDIReleaseDC)(dxw.GethWnd(), hdcDest);\n\tif(res && IsToScreen) {\n\t\tdxw.ShowOverlay(hdcDest);\n\t\tif(dxw.dwFlags8 & MARKGDI32) dxw.Mark(hdcDest, FALSE, RGB(255, 255, 255), nXDest, nYDest, nWidth, nHeight);\n\t}\n\tif(!res) OutTraceE(\"GDI.GdiTransparentBlt: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\treturn res;\n}\n\nBOOL WINAPI extPie(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nXRadial1, int nYRadial1, int nXRadial2, int nYRadial2)\n{\n\tBOOL ret;\n\tOutTraceDW(\"Pie: hdc=%x rect=(%d,%d)-(%d,%d)\\n\", hdc, nLeftRect, nTopRect, nRightRect, nBottomRect);\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pPie)(sdc.GetHdc(), nLeftRect, nTopRect, nRightRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\t\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\t\n\tret=(*pPie)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2);\n\tif(!ret) OutTraceE(\"Pie ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extAngleArc(HDC hdc, int X, int Y, DWORD dwRadius, FLOAT eStartAngle, FLOAT eSweepAngle)\n{\n\tBOOL ret;\n\tOutTraceDW(\"AngleArc: hdc=%x pos=(%d,%d)\\n\", hdc, X, Y);\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pAngleArc)(sdc.GetHdc(), X, Y, dwRadius, eStartAngle, eSweepAngle);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\t\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\t\n\tret=(*pAngleArc)(hdc, X, Y, dwRadius, eStartAngle, eSweepAngle);\n\tif(!ret) OutTraceE(\"AngleArc ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extPolyPolyline(HDC hdc, const POINT *lppt, const DWORD *lpdwPolyPoints, DWORD cCount)\n{\n\tBOOL ret;\n\tOutTraceDW(\"PolyPolyline: hdc=%x\\n\", hdc);\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pPolyPolyline)(sdc.GetHdc(), lppt, lpdwPolyPoints, cCount);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\t\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\t\n\tret=(*pPolyPolyline)(hdc, lppt, lpdwPolyPoints, cCount);\n\tif(!ret) OutTraceE(\"PolyPolyline ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extFillRgn(HDC hdc, HRGN hrgn, HBRUSH hbr)\n{\n\tBOOL ret;\n\tOutTraceDW(\"FillRgn: hdc=%x\\n\", hdc);\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pFillRgn)(sdc.GetHdc(), hrgn, hbr);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\t\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\t\n\tret=(*pFillRgn)(hdc, hrgn, hbr);\n\tif(!ret) OutTraceE(\"FillRgn ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extFrameRgn(HDC hdc, HRGN hrgn, HBRUSH hbr, int nWidth, int nHeight)\n{\n\tBOOL ret;\n\tOutTraceDW(\"FrameRgn: hdc=%x\\n\", hdc);\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pFrameRgn)(sdc.GetHdc(), hrgn, hbr, nWidth, nHeight);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\t\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\t\n\tret=(*pFrameRgn)(hdc, hrgn, hbr, nWidth, nHeight);\n\tif(!ret) OutTraceE(\"FrameRgn ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extInvertRgn(HDC hdc, HRGN hrgn)\n{\n\tBOOL ret;\n\tOutTraceDW(\"InvertRgn: hdc=%x hrgn=%x\\n\", hdc, hrgn);\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pInvertRgn)(sdc.GetHdc(), hrgn);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\t\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\t\n\tret=(*pInvertRgn)(hdc, hrgn);\n\tif(!ret) OutTraceE(\"InvertRgn ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extPaintRgn(HDC hdc, HRGN hrgn)\n{\n\tBOOL ret;\n\tOutTraceDW(\"PaintRgn: hdc=%x hrgn=%x\\n\", hdc, hrgn);\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pPaintRgn)(sdc.GetHdc(), hrgn);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\t\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\t\n\tret=(*pPaintRgn)(hdc, hrgn);\n\tif(!ret) OutTraceE(\"PaintRgn ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nint WINAPI extSetMapMode(HDC hdc, int fnMapMode)\n{\n\tint ret;\n\tOutTraceDW(\"SetMapMode: hdc=%x fnMapMode=%x\\n\", hdc, fnMapMode);\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pSetMapMode)(sdc.GetHdc(), fnMapMode);\n\t\t\t\tsdc.PutPrimaryDC(hdc, FALSE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\t\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\t\n\tret=(*pSetMapMode)(hdc, fnMapMode);\n\tif(!ret) OutTraceE(\"SetMapMode ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extRoundRect(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nWidth, int nHeight)\n{\n\tint ret;\n\tOutTraceDW(\"RoundRect: hdc=%x rect=(%d,%d)-(%d,%d) ellipse=(%dx%d)\\n\", hdc, nLeftRect, nTopRect, nRightRect, nBottomRect, nWidth, nHeight);\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pRoundRect)(sdc.GetHdc(), nLeftRect, nTopRect, nRightRect, nBottomRect, nWidth, nHeight);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, nLeftRect, nTopRect, nRightRect, nBottomRect);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\t\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\t\n\tret=(*pRoundRect)(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect, nWidth, nHeight);\n\tif(!ret) OutTraceE(\"RoundRect ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extPolyPolygon(HDC hdc, const POINT *lpPoints, const INT *lpPolyCounts, int nCount)\n{\n\tBOOL ret;\n\tOutTraceDW(\"PolyPolygon: hdc=%x\\n\", hdc);\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pPolyPolygon)(sdc.GetHdc(), lpPoints, lpPolyCounts, nCount);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\t\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\t\n\tret=(*pPolyPolygon)(hdc, lpPoints, lpPolyCounts, nCount);\n\tif(!ret) OutTraceE(\"PolyPolygon ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\n#if 0\nBOOL WINAPI extDPtoLP(HDC hdc, LPPOINT lpPoints, int nCount)\n{\n\tBOOL ret;\n\tOutTrace(\"DPtoLP: hdc=%x, nCount=%d\\n\", hdc, nCount);\n\tfor(int i=0; i<nCount; i++) OutTrace(\"point[%d]=(%d,%d)\\n\", i, lpPoints[i].x, lpPoints[i].y);\n\tret = (*pDPtoLP)(hdc, lpPoints, nCount);\n\tfor(int i=0; i<nCount; i++) OutTrace(\"point[%d]=(%d,%d)\\n\", i, lpPoints[i].x, lpPoints[i].y);\n\treturn ret;\n}\n#endif\n\nBOOL WINAPI extPlayEnhMetaFile(HDC hdc, HENHMETAFILE hemf, const RECT *lpRect)\n{\n\tBOOL ret;\n\tMessageBox(0, \"PlayEnhMetaFile\", \"dxwnd\", MB_OK);\n\tret = pPlayEnhMetaFile(hdc, hemf, lpRect);\n\treturn ret;\n}\n\nBOOL WINAPI extGetDCOrgEx(HDC hdc, LPPOINT lpPoint)\n{\n\tBOOL ret;\n\tret = pGetDCOrgEx(hdc, lpPoint);\n\tOutTraceDW(\"GetDCOrgEx: hdc=%x pt=(%d,%d)\\n\", hdc, lpPoint->x, lpPoint->y);\n\tif(ret && dxw.IsFullScreen()){ // ?? and dxw.isDesktop() ???\n\t\tdxw.UnmapClient(lpPoint);\n\t\tOutTraceDW(\"GetDCOrgEx: fixed pt=(%d,%d)\\n\", lpPoint->x, lpPoint->y);\n\t}\n\treturn ret;\n}\n\nUINT WINAPI extSetPaletteEntries(HPALETTE hpal, UINT iStart, UINT cEntries, const PALETTEENTRY *lppe)\n{\n\tUINT ret;\n\tOutTraceDW(\"SetPaletteEntries: hpal=%x start=%d entries=%d\\n\", hpal, iStart, cEntries);\n\tret = (*pSetPaletteEntries)(hpal, iStart, cEntries, lppe);\n\t// the only purpose of hooking this call is the fact that in windowed mode a palette update\n\t// does not flush the HDC updates to the device like in fullscreen (Win98?) mode.\n\t// if(dxw.IsFullScreen()) (*pInvalidateRect)(dxw.GethWnd(), NULL, FALSE);\n\treturn ret;\n}\n\nint WINAPI extSetROP2(HDC hdc, int fnDrawMode)\n{\n\t// In early OS the SetROP2 caused some sort of screen refresh, that does no longer happen in recent ones.\n\t// So wrapping the function and inserting a InvalidateRect right after that fixes the problem.\n\t// This trick fixes the black screens in \"Titanic - an adventure out of time\" on Win10.\n\t// N.b. Titanic calls SetTextColor, SetBkColor and SetROP2 in sequence, it might be possible that the \n\t// API to hook for refreshing is another, or even them all!\n\tint ret;\n\tOutTraceDW(\"SetROP2: hdc=%x drawmode=%d\\n\", hdc, fnDrawMode);\n\tret = (*pSetROP2)(hdc, fnDrawMode);\n\t(*pInvalidateRect)(WindowFromDC(hdc), NULL, 0);\n\treturn ret;\n}\n\n// v2.04.05: GetTextExtentPointA hooker for \"Warhammer Shadow of the Horned Rat\"\nBOOL WINAPI extGetTextExtentPointA(HDC hdc, LPCTSTR lpString, int cbString, LPSIZE lpSize)\n{\n\tBOOL ret;\n\tOutTraceDW(\"GetTextExtentPointA: hdc=%x string=\\\"%s\\\"(%d)\\n\", hdc, lpString, cbString);\n\n\tret = (*pGetTextExtentPointA)(hdc, lpString, cbString, lpSize);\n\tif(!ret){\n\t\tOutTraceDW(\"GetTextExtentPointA ERROR: err=%d\\n\", GetLastError);\n\t\treturn ret;\n\t}\n\t\n\tOutTraceDW(\"GetTextExtentPointA: size=(%dx%d)\\n\", lpSize->cx, lpSize->cy);\n\t// beware: size scaling is appropriate only when referred to video DC\n\tswitch(dxw.GDIEmulationMode){\n\t\tcase GDIMODE_STRETCHED: \n\t\t\tif(dxw.Windowize && (OBJ_DC == (*pGetObjectType)(hdc))){\n\t\t\t\tdxw.UnmapClient((LPPOINT)lpSize);\n\t\t\t\tOutTraceDW(\"GetTextExtentPointA: remapped size=(%dx%d)\\n\", lpSize->cx, lpSize->cy);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\treturn ret;\n}\n\n// v2.04.05: GetTextExtentPoint32A hooker for \"Warhammer Shadow of the Horned Rat\"\nBOOL WINAPI extGetTextExtentPoint32A(HDC hdc, LPCTSTR lpString, int cbString, LPSIZE lpSize)\n{\n\tBOOL ret;\n\tOutTraceDW(\"GetTextExtentPoint32A: hdc=%x(%s) string=\\\"%s\\\"(%d)\\n\", hdc, GetObjectTypeStr(hdc), lpString, cbString);\n\n\tret = (*pGetTextExtentPoint32A)(hdc, lpString, cbString, lpSize);\n\tif(!ret){\n\t\tOutTraceDW(\"GetTextExtentPoint32A ERROR: err=%d\\n\", GetLastError);\n\t\treturn ret;\n\t}\n\t\n\tOutTraceDW(\"GetTextExtentPoint32A: size=(%dx%d)\\n\", lpSize->cx, lpSize->cy);\n\t// beware: size scaling is appropriate only when referred to video DC\n\tswitch(dxw.GDIEmulationMode){\n\t\tcase GDIMODE_STRETCHED: \n\t\t\tif(dxw.Windowize && (OBJ_DC == (*pGetObjectType)(hdc))){\n\t\t\t\tdxw.UnmapClient((LPPOINT)lpSize);\n\t\t\t\tOutTraceDW(\"GetTextExtentPoint32A: remapped size=(%dx%d)\\n\", lpSize->cx, lpSize->cy);\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\treturn ret;\n}\n\n#if 0\nLONG WINAPI extSetBitmapBits(HBITMAP hbmp, DWORD cBytes, VOID *lpBits)\n{\n\tLONG ret;\n\tif(IsTraceDW){\n\t\tOutTrace(\"SetDIBits: hdc=%x hbmp=%x lines=(%d,%d) ColorUse=%x(%s)\\n\", hdc, hbmp, uStartScan, cScanLines, fuColorUse, ExplainDIBUsage(fuColorUse));\n\t\tTraceBITMAPINFOHEADER(\"SetDIBits\", (BITMAPINFOHEADER *)&(lpbmi->bmiHeader));\n\t}\n\n\tif(dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: // this will flicker !!!!\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pSetDIBits)(sdc.GetHdc(), hbmp, uStartScan, cScanLines, lpvBits, lpbmi, fuColorUse);\n\t\t\t\tif(!ret || (ret==GDI_ERROR)) OutTraceE(\"SetDIBits: ERROR err=%d\\n\", GetLastError()); \n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, 0, 0, lpbmi->bmiHeader.biWidth, lpbmi->bmiHeader.biHeight);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\tcase GDIMODE_EMULATED:\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tret = (*pSetBitmapBits)(hbmp, cBytes, lpBits);\n\tif(!ret || (ret==GDI_ERROR)) OutTraceE(\"SetDIBits: ERROR err=%d\\n\", GetLastError()); \n\treturn ret;\n}\n#endif\n\nHGDIOBJ WINAPI extSelectObject(HDC hdc, HGDIOBJ hgdiobj)\n{\n\tHGDIOBJ ret;\n\tOutTraceDW(\"SelectObject: hdc=%x(%s) obj=%x(%s)\\n\", hdc, GetObjectTypeStr(hdc), hgdiobj, GetObjectTypeStr((HDC)hgdiobj));\n\tif(GetObjectType(hgdiobj)==OBJ_FONT){\n\t\tif(GetObjectType(hdc)==OBJ_DC) {\n\t\t\tHGDIOBJ scaled;\n\t\t\tscaled = fontdb.GetScaledFont((HFONT)hgdiobj);\n\t\t\tif(scaled) {\n\t\t\t\thgdiobj=scaled;\n\t\t\t\tOutTraceDW(\"SelectObject: replaced font obj=%x\\n\", hgdiobj);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tOutTraceE(\"SelectObject: unmatched font obj=%x\\n\", hgdiobj);\n\t\t\t}\n\t\t}\n\t}\n\tret = (*pSelectObject)(hdc, hgdiobj);\n\treturn ret;\n}\n\nBOOL WINAPI extDeleteObject(HGDIOBJ hgdiobj)\n{\n\tBOOL ret;\n\tHGDIOBJ scaledobj;\n\tOutTraceDW(\"DeleteObject: obj=%x(%s)\\n\", hgdiobj, GetObjectTypeStr((HDC)hgdiobj));\n\tif(GetObjectType(hgdiobj)==OBJ_FONT){\n\t\tscaledobj=fontdb.DeleteFont((HFONT)hgdiobj);\n\t\tOutTraceDW(\"DeleteObject: deleted font obj=%x scaled=%x\\n\", hgdiobj, scaledobj);\n\t}\n\tif(scaledobj) (*pDeleteObject)(scaledobj);\n\tret = (*pDeleteObject)(hgdiobj);\n\treturn ret;\n}\n\nint WINAPI extSelectClipRgn(HDC hdc, HRGN hrgn)\n{\n\tint ret;\n\t// just proxy, right now ....\n\tOutTrace(\"SelectClipRgn: hdc=%x hrgn=%x\\n\", hdc, hrgn);\n\tret = (*pSelectClipRgn)(hdc, NULL);\n\treturn ret;\n}\n\n"
  },
  {
    "path": "dll/gdiblt.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n#define INITGUID\n//#define FULLHEXDUMP\n\n#include <windows.h>\n#include <ddraw.h>\n#include \"dxwnd.h\"\n#include \"dxhook.h\"\n#include \"ddrawi.h\"\n#include \"dxwcore.hpp\"\n#include \"stdio.h\" \n#include \"hddraw.h\"\n#include \"dxhelper.h\"\n#include \"syslibs.h\"\n\nextern GetDC_Type pGetDCMethod();\nextern ReleaseDC_Type pReleaseDCMethod();\nextern Unlock1_Type pUnlockMethod(int);\n\nvoid BlitToWindow(HWND w, LPDIRECTDRAWSURFACE s)\n{\n\tHDC shdc, thdc;\n\tRECT client;\n\tHRESULT res;\n\tBOOL ret;\n\n\tif(!s) return; // for surface color fill \n\tres=(*pGetDCMethod())(s, &shdc);\n\tif(res) {\n\t\tOutTrace(\"ddraw GetDC error lpdds=%x res=%x(%s)\\n\", s, res, ExplainDDError(res));\n\t\treturn;\n\t}\n\tthdc=(*pGDIGetDC)(w);\n\tif(!thdc) {\n\t\tOutTrace(\"GDI GetDC error=%d\\n\", GetLastError());\n\t\treturn;\n\t}\n\tclient = dxw.MapClientRect(NULL);\n\tif(dxw.dwFlags5 & CENTERTOWIN){\n\t\tint x, y;\n\t\tx = (client.left + client.right - dxw.GetScreenWidth()) >> 1; // right-shift 1 bit means divide by 2!\n\t\ty = (client.top + client.bottom - dxw.GetScreenHeight()) >> 1;\n\t\tret=(*pGDIBitBlt)(thdc, x, y, dxw.GetScreenWidth(), dxw.GetScreenHeight(), shdc, 0, 0, SRCCOPY);\n\t\tif(!ret) OutTrace(\"BitBlt error=%d\\n\", GetLastError());\n\t}\n\telse{\n\t\tif(dxw.dwFlags5 & BILINEARFILTER) {\n\t\t\tret=SetStretchBltMode(thdc, HALFTONE);\n\t\t\tif((!ret) || (ret==ERROR_INVALID_PARAMETER)) OutTrace(\"GDI SetStretchBltMode error=%d\\n\", GetLastError());\n\t\t}\n\t\tret=(*pGDIStretchBlt)(thdc, \n\t\t\tclient.left, client.top, client.right-client.left, client.bottom-client.top, \n\t\t\tshdc, 0, 0, dxw.GetScreenWidth(), dxw.GetScreenHeight(), SRCCOPY);\n\t\tif(!ret) OutTrace(\"GDI StretchBlt error=%d\\n\", GetLastError());\n\t}\n\tdxw.ShowOverlay(thdc);\n\tres=(*pReleaseDCMethod())(s, shdc);\n\tif(res) OutTrace(\"ddraw ReleaseDC error lpdds=%x res=%x(%s)\\n\", s, res, ExplainDDError(res));\n\tret=(*pGDIReleaseDC)(w, thdc);\n\tif(!ret) OutTrace(\"GDI ReleaseDC error=%d\\n\", GetLastError());\n}"
  },
  {
    "path": "dll/glhook.h",
    "content": "#include \"gl.h\"\n\nextern void HookOpenGL(HMODULE, char *);\n\ntypedef GLenum (WINAPI *glGetError_Type)();\ntypedef void (WINAPI *glViewport_Type)(GLint, GLint, GLsizei, GLsizei);\ntypedef void (WINAPI *glScissor_Type)(GLint, GLint, GLsizei, GLsizei);\ntypedef void (WINAPI *glGetIntegerv_Type)(GLenum, GLint *);\ntypedef void (WINAPI *glFinish_Type)(void);\ntypedef void (WINAPI *glFlush_Type)(void);\ntypedef void (WINAPI *glDrawBuffer_Type)(GLenum);\ntypedef void (WINAPI *glPolygonMode_Type)(GLenum, GLenum);\ntypedef void (WINAPI *glGetFloatv_Type)(GLenum, GLboolean *);\ntypedef void (WINAPI *glClear_Type)(GLbitfield);\ntypedef HGLRC (WINAPI *wglCreateContext_Type)(HDC);\ntypedef PROC (WINAPI *wglGetProcAddress_Type)(LPCSTR);\ntypedef BOOL (WINAPI *wglMakeCurrent_Type)(HDC, HGLRC);\ntypedef void (WINAPI *glTexImage2D_Type)(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);\ntypedef void (WINAPI *glPixelZoom_Type)(GLfloat, GLfloat);\ntypedef void (WINAPI *glBegin_Type)(GLenum);\ntypedef void (WINAPI *glBindTexture_Type)(GLenum, GLuint);\ntypedef void (WINAPI *glPixelStorei_Type)(GLenum, GLint);\ntypedef void (WINAPI *glCopyTexImage2D_Type)(GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint);\n\n\nextern GLenum WINAPI extglGetError();\nextern void WINAPI extglViewport(GLint,  GLint,  GLsizei,  GLsizei);\nextern void WINAPI extglScissor(GLint,  GLint,  GLsizei,  GLsizei);\nextern void WINAPI extglGetIntegerv(GLenum, GLint *);\nextern void WINAPI extglFinish(void);\nextern void WINAPI extglFlush(void);\nextern void WINAPI extglDrawBuffer(GLenum);\nextern void WINAPI extglPolygonMode(GLenum, GLenum);\nextern void WINAPI extglGetFloatv(GLenum, GLboolean *);\nextern void WINAPI extglClear(GLbitfield);\nextern HGLRC WINAPI extwglCreateContext(HDC);\nextern PROC WINAPI extwglGetProcAddress(LPCSTR);\nextern BOOL WINAPI extwglMakeCurrent(HDC, HGLRC);\nextern void WINAPI extglTexImage2D(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);\nextern void WINAPI extglPixelZoom(GLfloat, GLfloat);\nextern void WINAPI extglBegin(GLenum);\nextern void WINAPI extglBindTexture(GLenum, GLuint);\nextern void WINAPI extglPixelStorei(GLenum, GLint);\nextern void WINAPI extglCopyTexImage2D(GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint);\n\n#ifdef DXWDECLARATIONS \n#undef DXWEXTERN\n#undef DXWINITIALIZED\n#define DXWEXTERN\n#define DXWINITIALIZED = NULL\n#else\n#undef DXWEXTERN\n#undef DXWINITIALIZED\n#define DXWEXTERN extern\n#define DXWINITIALIZED\n#endif\n\n// GDI32.dll:\nDXWEXTERN glGetError_Type pglGetError;\nDXWEXTERN glViewport_Type pglViewport;\nDXWEXTERN glScissor_Type pglScissor;\nDXWEXTERN glGetIntegerv_Type pglGetIntegerv;\n//DXWEXTERN glFinish_Type pglFinish;\n//DXWEXTERN glFlush_Type pglFlush;\nDXWEXTERN glDrawBuffer_Type pglDrawBuffer;\nDXWEXTERN glPolygonMode_Type pglPolygonMode;\nDXWEXTERN glGetFloatv_Type pglGetFloatv;\nDXWEXTERN glClear_Type pglClear;\nDXWEXTERN wglCreateContext_Type pwglCreateContext;\nDXWEXTERN wglGetProcAddress_Type pwglGetProcAddress;\nDXWEXTERN wglMakeCurrent_Type pwglMakeCurrent;\nDXWEXTERN glTexImage2D_Type pglTexImage2D;\nDXWEXTERN glPixelZoom_Type pglPixelZoom;\nDXWEXTERN glBegin_Type pglBegin;\nDXWEXTERN glBindTexture_Type pglBindTexture;\nDXWEXTERN glPixelStorei_Type pglPixelStorei;\nDXWEXTERN glCopyTexImage2D_Type pglCopyTexImage2D;"
  },
  {
    "path": "dll/glide.cpp",
    "content": "#define __MSC__\n#include <stdio.h>\n#include <stdlib.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhook.h\"\n#include \"hddraw.h\"\n#include \"dxhelper.h\"\n#include \"glidehook.h\"\n\nvoid WINAPI extgrGlideInit(void);\nvoid WINAPI extgrGlideShutdown(void);\nvoid WINAPI extgrClipWindow(FxU32, FxU32, FxU32, FxU32);\nGrContext_t WINAPI extgrSstWinOpen(FxU32, GrScreenResolution_t, GrScreenRefresh_t, GrColorFormat_t, GrOriginLocation_t, int, int);\nFxI32 WINAPI extgrQueryResolutions (const GrResolution *, GrResolution *);\n\ngrGlideInit_Type pgrGlideInit = 0;\ngrGlideShutdown_Type pgrGlideShutdown = 0;\ngrClipWindow_Type pgrClipWindow = 0;\ngrSstWinOpen_Type pgrSstWinOpen = 0;\ngrQueryResolutions_Type pgrQueryResolutions = 0;\n\nstatic HookEntryEx_Type Hooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"_grGlideInit@0\", (FARPROC)NULL, (FARPROC *)&pgrGlideInit, (FARPROC)extgrGlideInit},\n\t{HOOK_IAT_CANDIDATE, 0, \"_grGlideShutdown@0\", (FARPROC)NULL, (FARPROC *)&pgrGlideShutdown, (FARPROC)extgrGlideShutdown},\n\t{HOOK_IAT_CANDIDATE, 0, \"_grClipWindow@16\", (FARPROC)NULL, (FARPROC *)&pgrClipWindow, (FARPROC)extgrClipWindow},\n\t{HOOK_IAT_CANDIDATE, 0, \"_grSstWinOpen@28\", (FARPROC)NULL, (FARPROC *)&pgrSstWinOpen, (FARPROC)extgrSstWinOpen},\n\t{HOOK_IAT_CANDIDATE, 0, \"_grQueryResolutions@8\", (FARPROC)NULL, (FARPROC *)&pgrQueryResolutions, (FARPROC)extgrQueryResolutions},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nFARPROC Remap_Glide_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tOutTrace(\"Remap_Glide_ProcAddress: proc=%s\\n\", proc);\n\tif(!(dxw.dwFlags4 & HOOKGLIDE)) return NULL; \n\tif (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\t// NULL -> keep the original call address\n\treturn NULL;\n}\n\nvoid HookGlideLibs(HMODULE hModule)\n{\n\tOutTraceDW(\"HookGlideLibs module=%x\\n\", hModule);\n\tHookLibraryEx(hModule, Hooks, \"glide.dll\");\n\tHookLibraryEx(hModule, Hooks, \"glide2x.dll\");\n\tHookLibraryEx(hModule, Hooks, \"glide3x.dll\");\n\treturn;\n}\n\n// static utility \n\nstatic char *ExplainGlideRes(int res)\n{\n\tchar *p;\n\tswitch(res){\n\t\tcase GR_RESOLUTION_320x200: p=\"320x200\"; break;\n\t\tcase GR_RESOLUTION_320x240: p=\"320x240\"; break;\n\t\tcase GR_RESOLUTION_400x256: p=\"400x256\"; break;\n\t\tcase GR_RESOLUTION_512x384: p=\"512x384\"; break;\n\t\tcase GR_RESOLUTION_640x200: p=\"640x200\"; break;\n\t\tcase GR_RESOLUTION_640x350: p=\"640x350\"; break;\n\t\tcase GR_RESOLUTION_640x400: p=\"640x400\"; break;\n\t\tcase GR_RESOLUTION_640x480: p=\"640x480\"; break;\n\t\tcase GR_RESOLUTION_800x600: p=\"800x600\"; break;\n\t\tcase GR_RESOLUTION_960x720: p=\"960x720\"; break;\n\t\tcase GR_RESOLUTION_856x480: p=\"856x480\"; break;\n\t\tcase GR_RESOLUTION_512x256: p=\"512x256\"; break;\n\t\tcase GR_RESOLUTION_1024x768: p=\"1024x768\"; break;\n\t\tcase GR_RESOLUTION_1280x1024: p=\"1280x1024\"; break;\n\t\tcase GR_RESOLUTION_1600x1200: p=\"1600x1200\"; break;\n\t\tcase GR_RESOLUTION_400x300: p=\"400x300\"; break;\n\t\tcase GR_RESOLUTION_NONE: p=\"NONE\"; break;\n\t\tdefault: p=\"unknown\"; break;\n\t}\n\treturn p;\n}\n\n// glide wrappers\n\nvoid WINAPI extgrClipWindow(FxU32 minx, FxU32 miny, FxU32 maxx, FxU32 maxy)\n{\n\tOutTrace(\"grClipWindow: win=(%d,%d)-(%d,%d)\\n\", minx, miny, maxx, maxy);\n\treturn (*pgrClipWindow)(minx, miny, maxx, maxy);\n}\n\nGrContext_t WINAPI extgrSstWinOpen(\n\tFxU32 hWin,\n\tGrScreenResolution_t res,\n\tGrScreenRefresh_t ref,\n\tGrColorFormat_t cFormat,\n\tGrOriginLocation_t org_loc,\n\tint num_buffers,\n\tint num_aux_buffers)\n{\n\tGrContext_t ret;\n\n\tOutTrace(\"grSstWinOpen: hWin=%x res=%x(%s)\\n\", hWin, res, ExplainGlideRes(res));\n\n\tif(dxw.IsDesktop((HWND)hWin)) hWin=(FxU32)dxw.GethWnd();\n\tret=(*pgrSstWinOpen)(hWin, res, ref, cFormat, org_loc, num_buffers, num_aux_buffers);\n\tOutTrace(\"grSstWinOpen: ret=%x\\n\", ret);\n\treturn ret;\n}\n\nFxI32 WINAPI extgrQueryResolutions (const GrResolution *resTemplate, GrResolution *output)\n{\n\tFxI32 ret;\n\n\tOutTrace(\"grQueryResolutions: resolution=%x refresh=%x numColorBuffers=%d numAuxBuffers=%d\\n\", \n\t\tresTemplate->resolution, resTemplate->refresh, resTemplate->numColorBuffers, resTemplate->numAuxBuffers);\n\n\tret=(*pgrQueryResolutions)(resTemplate, output);\n\tOutTrace(\"grQueryResolutions: res=%d\\n\", ret); \n\treturn ret;\n}\n\nvoid WINAPI extgrGlideInit(void)\n{\n\tOutTrace(\"grGlideInit\\n\");\n\treturn;\n}\n\nvoid WINAPI extgrGlideShutdown(void)\n{\n\tOutTrace(\"grGlideShutdown\\n\");\n\treturn;\n}\n\n"
  },
  {
    "path": "dll/glidehook.h",
    "content": "#define __WIN32__\n#define __MSC__\n\n#include \"3dfx.h\"\n#include \"glide.h\"\n\nextern void HookGlideLibs(HMODULE);\n\ntypedef void (WINAPI *grGlideInit_Type)(void);\ntypedef void (WINAPI *grGlideShutdown_Type)(void);\ntypedef void (WINAPI *grClipWindow_Type)(FxU32, FxU32, FxU32, FxU32);\ntypedef GrContext_t (WINAPI *grSstWinOpen_Type)(FxU32, GrScreenResolution_t, GrScreenRefresh_t, GrColorFormat_t, GrOriginLocation_t, int, int);\ntypedef FxI32 (WINAPI *grQueryResolutions_Type)(const GrResolution *, GrResolution *);\n\n"
  },
  {
    "path": "dll/hd3d.cpp",
    "content": "//#define D3D10_IGNORE_SDK_LAYERS 1\n#define _CRT_SECURE_NO_WARNINGS\n\n#include <windows.h>\n#include <d3d9.h>\n#include <d3d8caps.h>\n#include <D3D10_1.h>\n#include <D3D10Misc.h>\n#include <D3D11.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n#include \"syslibs.h\"\n#include \"stdio.h\"\n#include \"hd3d.doc.hpp\" // fake include to hold documentation\n\n#define HOOKD3D10ANDLATER 1\n#define TRACEALLMETHODS 1\n//#define DXWNDDISABLEDHOOKS 1\n\nextern void D3D9TextureHandling(void *, int);\nextern void D3D8TextureHandling(void *, int);\nextern HRESULT exCreateImageSurface8(void *, UINT, UINT, D3DFORMAT, LPDIRECTDRAWSURFACE *);\nextern HRESULT dxCopyRects(void *, LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE);\nextern HRESULT dwD3D8InitEmulation(void *);\nextern LPDIRECTDRAWSURFACE dwGetVirtualBackBuffer();\nextern void dwD3D8ShutdownEmulation(void *);\nextern HRESULT dwD3D8Present(void *, CONST RECT *, CONST RECT*, HWND, CONST RGNDATA *);\nextern void HookWindowProc(HWND);\nextern char *ExplainDDError(DWORD);\nextern char *ExplainRenderstateValue(DWORD Value);\nextern HRESULT dxGetFrontBuffer(void *, LPDIRECTDRAWSURFACE);\n\nvoid *lpD3DActiveDevice = NULL;\ntypedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID riid, void** ppvObj);\n\n// D3D8/9 API\n\ntypedef void* (WINAPI *Direct3DCreate8_Type)(UINT);\ntypedef void* (WINAPI *Direct3DCreate9_Type)(UINT);\ntypedef HRESULT (WINAPI *Direct3DCreate9Ex_Type)(UINT, IDirect3D9Ex **);\ntypedef HRESULT (WINAPI *CheckFullScreen_Type)(void);\ntypedef BOOL (WINAPI * DisableD3DSpy_Type)(void);\ntypedef void (WINAPI * D3DPERF_SetOptions_Type)(DWORD);\n\nvoid* WINAPI extDirect3DCreate8(UINT);\nvoid* WINAPI extDirect3DCreate9(UINT);\nHRESULT WINAPI extDirect3DCreate9Ex(UINT, IDirect3D9Ex **);\nHRESULT WINAPI extCheckFullScreen(void);\nHRESULT WINAPI voidDirect3DShaderValidatorCreate9(void);\nvoid WINAPI voidDebugSetLevel(void);\nvoid WINAPI voidDebugSetMute(void);\nBOOL WINAPI voidDisableD3DSpy(void);\nBOOL WINAPI extDisableD3DSpy(void);\nvoid WINAPI extD3DPERF_SetOptions(DWORD);\n\nDirect3DCreate8_Type pDirect3DCreate8 = 0;\nDirect3DCreate9_Type pDirect3DCreate9 = 0;\nDirect3DCreate9Ex_Type pDirect3DCreate9Ex = 0;\nCheckFullScreen_Type pCheckFullScreen = 0;\nDisableD3DSpy_Type pDisableD3DSpy = 0;\nD3DPERF_SetOptions_Type pD3DPERF_SetOptions = 0;\n\n// IDirect3D8/9 methods \n\ntypedef UINT\t(WINAPI *GetAdapterCount_Type)(void *);\ntypedef HRESULT (WINAPI *GetAdapterIdentifier_Type)(void *, UINT, DWORD, D3DADAPTER_IDENTIFIER9 *);\ntypedef UINT\t(WINAPI *GetAdapterModeCount8_Type)(void *, UINT);\ntypedef UINT\t(WINAPI *GetAdapterModeCount9_Type)(void *, UINT, D3DFORMAT);\ntypedef HRESULT (WINAPI *EnumAdapterModes8_Type)(void *, UINT, UINT, D3DDISPLAYMODE *);\ntypedef HRESULT (WINAPI *EnumAdapterModes9_Type)(void *, UINT, D3DFORMAT ,UINT, D3DDISPLAYMODE *);\ntypedef HRESULT (WINAPI *GetAdapterDisplayMode_Type)(void *, UINT, D3DDISPLAYMODE *);\ntypedef HRESULT (WINAPI *CheckDeviceType_Type)(void *, UINT, D3DDEVTYPE, D3DFORMAT, D3DFORMAT, BOOL);\ntypedef HRESULT (WINAPI *D3DGetDeviceCaps8_Type)(void *, UINT, D3DDEVTYPE, D3DCAPS8 *);\ntypedef HRESULT (WINAPI *D3DGetDeviceCaps9_Type)(void *, UINT, D3DDEVTYPE, D3DCAPS9 *);\ntypedef HMONITOR (WINAPI *GetAdapterMonitor_Type)(void *, UINT);\ntypedef HRESULT (WINAPI *CreateDevice_Type)(void *, UINT, D3DDEVTYPE, HWND, DWORD, void *, void **);\ntypedef HRESULT (WINAPI *CreateDeviceEx_Type)(void *, UINT, D3DDEVTYPE, HWND, DWORD, void *, D3DDISPLAYMODEEX *, void **);\ntypedef BOOL\t(WINAPI *DisableD3DSpy_Type)(void);\ntypedef HRESULT (WINAPI *GetBackBuffer8_Type)(void *, UINT, D3DBACKBUFFER_TYPE, LPDIRECTDRAWSURFACE *);\n\nUINT WINAPI extGetAdapterCount8(void *);\nUINT WINAPI extGetAdapterCount9(void *);\nHRESULT WINAPI extGetAdapterIdentifier8(void *, UINT, DWORD, D3DADAPTER_IDENTIFIER9 *);\nHRESULT WINAPI extGetAdapterIdentifier9(void *, UINT, DWORD, D3DADAPTER_IDENTIFIER9 *);\nUINT WINAPI extGetAdapterModeCount8(void *, UINT);\nUINT WINAPI extGetAdapterModeCount9(void *, UINT, D3DFORMAT);\nHRESULT WINAPI extCheckDeviceType8(void *, UINT, D3DDEVTYPE, D3DFORMAT, D3DFORMAT, BOOL);\nHRESULT WINAPI extCheckDeviceType9(void *, UINT, D3DDEVTYPE, D3DFORMAT, D3DFORMAT, BOOL);\nHRESULT WINAPI extD3DGetDeviceCaps8(void *, UINT, D3DDEVTYPE, D3DCAPS8 *);\nHRESULT WINAPI extD3DGetDeviceCaps9(void *, UINT, D3DDEVTYPE, D3DCAPS9 *);\nHMONITOR WINAPI extGetAdapterMonitor8(void *, UINT);\nHMONITOR WINAPI extGetAdapterMonitor9(void *, UINT);\nHRESULT WINAPI extCreateDevice8(void *, UINT, D3DDEVTYPE, HWND, DWORD, D3DPRESENT_PARAMETERS *, void **);\nHRESULT WINAPI extCreateDevice9(void *, UINT, D3DDEVTYPE, HWND, DWORD, D3DPRESENT_PARAMETERS *, void **);\nHRESULT WINAPI extCreateDeviceEx(void *, UINT, D3DDEVTYPE, HWND, DWORD, D3DPRESENT_PARAMETERS *, D3DDISPLAYMODEEX *, void **);\nHRESULT WINAPI extGetBackBuffer8(void *, UINT, D3DBACKBUFFER_TYPE, LPDIRECTDRAWSURFACE *);\n\nGetAdapterCount_Type pGetAdapterCount8, pGetAdapterCount9;\nGetAdapterModeCount8_Type pGetAdapterModeCount8;\nGetAdapterModeCount9_Type pGetAdapterModeCount9;\nGetAdapterIdentifier_Type pGetAdapterIdentifier8, pGetAdapterIdentifier9;\nCheckDeviceType_Type pCheckDeviceType8, pCheckDeviceType9;\nD3DGetDeviceCaps8_Type pD3DGetDeviceCaps8 = 0;\nD3DGetDeviceCaps9_Type pD3DGetDeviceCaps9 = 0;\nGetAdapterMonitor_Type pGetAdapterMonitor8, pGetAdapterMonitor9;\nCreateDevice_Type pCreateDevice8, pCreateDevice9;\nCreateDeviceEx_Type pCreateDeviceEx = 0;\nGetBackBuffer8_Type pGetBackBuffer8 = 0;\n\n// IDirect3DDevice8/9 methods\n\ntypedef UINT\t(WINAPI *GetAvailableTextureMem_Type)(void *);\ntypedef HRESULT (WINAPI *TestCooperativeLevel_Type)(void *);\ntypedef HRESULT (WINAPI *GetDirect3D8_Type)(void *, void **);\ntypedef HRESULT (WINAPI *GetDirect3D9_Type)(void *, void **);\ntypedef HRESULT (WINAPI *GetDisplayMode8_Type)(void *, D3DDISPLAYMODE *);\ntypedef HRESULT (WINAPI *GetDisplayMode9_Type)(void *, UINT, D3DDISPLAYMODE *);\ntypedef void\t(WINAPI *SetCursorPosition9_Type)(void *, int, int, DWORD);\ntypedef void\t(WINAPI *SetCursorPosition8_Type)(void *, int, int, DWORD);\ntypedef BOOL\t(WINAPI *ShowCursor8_Type)(void *, BOOL);\ntypedef BOOL\t(WINAPI *ShowCursor9_Type)(void *, BOOL);\ntypedef HRESULT (WINAPI *CreateAdditionalSwapChain_Type)(void *, D3DPRESENT_PARAMETERS *, IDirect3DSwapChain9 **);\ntypedef HRESULT (WINAPI *GetSwapChain_Type)(void *, UINT, IDirect3DSwapChain9**);\ntypedef UINT\t(WINAPI *GetNumberOfSwapChains_Type)(void *);\ntypedef HRESULT (WINAPI *BeginStateBlock_Type)(void *);\ntypedef HRESULT (WINAPI *EndStateBlock8_Type)(void *, DWORD *);\ntypedef HRESULT (WINAPI *EndStateBlock9_Type)(void *, IDirect3DStateBlock9**);\ntypedef HRESULT (WINAPI *CreateTexture8_Type)(void *, UINT, UINT, UINT, DWORD, D3DFORMAT, D3DPOOL, void **);\ntypedef HRESULT (WINAPI *CreateTexture9_Type)(void *, UINT, UINT, UINT, DWORD, D3DFORMAT, D3DPOOL, void **, HANDLE *);\ntypedef HRESULT\t(WINAPI *CopyRects_Type)(void *, LPDIRECTDRAWSURFACE, CONST RECT *, UINT, LPDIRECTDRAWSURFACE, CONST POINT *);\ntypedef HRESULT (WINAPI *GetFrontBuffer_Type)(void *, LPDIRECTDRAWSURFACE);\ntypedef ULONG\t(WINAPI *ReleaseDev_Type)(void *);\n\nUINT\tWINAPI extGetAvailableTextureMem8(void *);\nUINT\tWINAPI extGetAvailableTextureMem9(void *);\nHRESULT WINAPI extTestCooperativeLevel8(void *);\nHRESULT WINAPI extTestCooperativeLevel9(void *);\nHRESULT WINAPI extGetDirect3D8(void *, void **);\nHRESULT WINAPI extGetDirect3D9(void *, void **);\nHRESULT WINAPI extGetDisplayMode8(void *, D3DDISPLAYMODE *);\nHRESULT WINAPI extGetDisplayMode9(void *, UINT, D3DDISPLAYMODE *);\nvoid\tWINAPI extSetCursorPosition9(void *, int, int, DWORD);\nvoid\tWINAPI extSetCursorPosition8(void *, int, int, DWORD);\nBOOL\tWINAPI extShowCursor8(void *, BOOL);\nBOOL\tWINAPI extShowCursor9(void *, BOOL);\nHRESULT WINAPI extCreateAdditionalSwapChain8(void *, D3DPRESENT_PARAMETERS *, IDirect3DSwapChain9 **);\nHRESULT WINAPI extCreateAdditionalSwapChain9(void *, D3DPRESENT_PARAMETERS *, IDirect3DSwapChain9 **);\nHRESULT WINAPI extGetSwapChain(void *, UINT, IDirect3DSwapChain9**);\nUINT WINAPI extGetNumberOfSwapChains(void *);\nHRESULT WINAPI extBeginStateBlock8(void *);\nHRESULT WINAPI extBeginStateBlock9(void *);\nHRESULT WINAPI extEndStateBlock8(void *, DWORD *);\nHRESULT WINAPI extEndStateBlock9(void *, IDirect3DStateBlock9**);\nHRESULT WINAPI extCreateTexture8(void *, UINT, UINT, UINT, DWORD, D3DFORMAT, D3DPOOL, void **);\nHRESULT WINAPI extCreateTexture9(void *, UINT, UINT, UINT, DWORD, D3DFORMAT, D3DPOOL, void **, HANDLE *);\n// CopyRects prototype uses IDirect3DSurface8 *, but to avoid including d3d8.h better use a generic ptr as LPDIRECTDRAWSURFACE\nHRESULT\tWINAPI extCopyRects(void *, LPDIRECTDRAWSURFACE, CONST RECT *, UINT, LPDIRECTDRAWSURFACE, CONST POINT *);\nHRESULT WINAPI extGetFrontBuffer(void *, LPDIRECTDRAWSURFACE);\nULONG WINAPI extReleaseDev8(void *);\nULONG WINAPI extReleaseDev9(void *);\n\nGetAvailableTextureMem_Type pGetAvailableTextureMem8, pGetAvailableTextureMem9;\nTestCooperativeLevel_Type pTestCooperativeLevel8, pTestCooperativeLevel9;\nGetDirect3D8_Type pGetDirect3D8 = 0;\nGetDirect3D9_Type pGetDirect3D9 = 0;\nGetDisplayMode8_Type pGetDisplayMode8 = 0;\nGetDisplayMode9_Type pGetDisplayMode9 = 0;\nSetCursorPosition9_Type pSetCursorPosition9 = 0;\nSetCursorPosition8_Type pSetCursorPosition8 = 0;\nShowCursor8_Type pShowCursor8 = 0;\nShowCursor9_Type pShowCursor9 = 0;\nCreateAdditionalSwapChain_Type pCreateAdditionalSwapChain8 = 0;\nCreateAdditionalSwapChain_Type pCreateAdditionalSwapChain9 = 0;\nGetSwapChain_Type pGetSwapChain = 0;\nGetNumberOfSwapChains_Type pGetNumberOfSwapChains = 0;\nBeginStateBlock_Type pBeginStateBlock8 = 0;\nBeginStateBlock_Type pBeginStateBlock9 = 0;\nEndStateBlock8_Type pEndStateBlock8 = 0;\nEndStateBlock9_Type pEndStateBlock9 = 0;\nCreateTexture8_Type pCreateTexture8 = 0;\nCreateTexture9_Type pCreateTexture9 = 0;\nCopyRects_Type pCopyRects = 0;\nGetFrontBuffer_Type pGetFrontBuffer = 0;\nReleaseDev_Type pReleaseDev8, pReleaseDev9;\n\n// IDirect3DTexture8/9 methods\n\ntypedef HRESULT (WINAPI *LockRect_Type)(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD);\ntypedef HRESULT (WINAPI *UnlockRect_Type)(void *, UINT);\n\nHRESULT WINAPI extLockRect8(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD);\nHRESULT WINAPI extLockRect9(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD);\nHRESULT WINAPI extUnlockRect8(void *, UINT);\nHRESULT WINAPI extUnlockRect9(void *, UINT);\n\nLockRect_Type pLockRect8, pLockRect9;\nUnlockRect_Type pUnlockRect8, pUnlockRect9;\n\n// to sort ...\n\ntypedef HRESULT (WINAPI *Present_Type)(void *, CONST RECT *, CONST RECT *, HWND, CONST RGNDATA *);\ntypedef HRESULT (WINAPI *SetRenderState_Type)(void *, D3DRENDERSTATETYPE, DWORD);\ntypedef HRESULT (WINAPI *GetRenderState_Type)(void *, D3DRENDERSTATETYPE, DWORD );\ntypedef HRESULT (WINAPI *GetViewport_Type)(void *, D3DVIEWPORT9 *);\ntypedef HRESULT (WINAPI *SetViewport_Type)(void *, D3DVIEWPORT9 *);\ntypedef void\t(WINAPI *SetGammaRamp_Type)(void *, UINT, DWORD, D3DGAMMARAMP *);\ntypedef void\t(WINAPI *GetGammaRamp_Type)(void *, UINT, D3DGAMMARAMP *);\ntypedef HRESULT (WINAPI *SetTexture8_Type)(void *, DWORD, void *);\ntypedef HRESULT (WINAPI *SetTexture9_Type)(void *, DWORD, void *);\n\n//typedef ULONG\t(WINAPI *CreateRenderTarget8_Type)(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, IDirect3DSurface8**);\ntypedef ULONG\t(WINAPI *CreateRenderTarget8_Type)(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, void**);\ntypedef ULONG\t(WINAPI *CreateRenderTarget9_Type)(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, void**);\ntypedef ULONG\t(WINAPI *BeginScene_Type)(void *);\ntypedef ULONG\t(WINAPI *EndScene_Type)(void *);\n\ntypedef HRESULT (WINAPI *D3D10CreateDevice_Type)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, ID3D10Device **);\ntypedef HRESULT (WINAPI *D3D10CreateDeviceAndSwapChain_Type)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D10Device **);\ntypedef HRESULT (WINAPI *D3D10CreateDevice1_Type)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, D3D10_FEATURE_LEVEL1, UINT, ID3D10Device **);\ntypedef HRESULT (WINAPI *D3D10CreateDeviceAndSwapChain1_Type)(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D10Device **);\ntypedef HRESULT (WINAPI *D3D11CreateDevice_Type)(IDXGIAdapter *, D3D_DRIVER_TYPE, HMODULE, UINT, const D3D_FEATURE_LEVEL *, UINT, UINT, ID3D11Device **, D3D_FEATURE_LEVEL *, ID3D11DeviceContext **);\ntypedef HRESULT (WINAPI *D3D11CreateDeviceAndSwapChain_Type)(IDXGIAdapter *, D3D_DRIVER_TYPE, HMODULE, UINT, const D3D_FEATURE_LEVEL *, UINT, UINT, const DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D11Device **, D3D_FEATURE_LEVEL *, ID3D11DeviceContext **);\ntypedef void\t(WINAPI *RSSetViewports10_Type)(void *, UINT, D3D10_VIEWPORT *);\ntypedef void\t(WINAPI *RSSetViewports11_Type)(void *, UINT, D3D11_VIEWPORT *);\ntypedef ULONG\t(WINAPI *AddRef_Type)(void *);\ntypedef ULONG\t(WINAPI *Release_Type)(void *);\ntypedef HRESULT (WINAPI *Reset_Type)(void *, D3DPRESENT_PARAMETERS*);\n\nHRESULT WINAPI extQueryInterfaceD3D8(void *, REFIID, void** );\nHRESULT WINAPI extQueryInterfaceDev8(void *, REFIID, void** );\nHRESULT WINAPI extQueryInterfaceD3D9(void *, REFIID, void** );\nHRESULT WINAPI extQueryInterfaceDev9(void *, REFIID, void** );\n\nHRESULT WINAPI extEnumAdapterModes8(void *, UINT, UINT , D3DDISPLAYMODE *);\nHRESULT WINAPI extEnumAdapterModes9(void *, UINT, D3DFORMAT, UINT , D3DDISPLAYMODE *);\nHRESULT WINAPI extGetAdapterDisplayMode8(void *, UINT, D3DDISPLAYMODE *);\nHRESULT WINAPI extGetAdapterDisplayMode9(void *, UINT, D3DDISPLAYMODE *);\nHRESULT WINAPI extPresent8(void *, CONST RECT *, CONST RECT *, HWND, CONST RGNDATA *);\nHRESULT WINAPI extPresent9(void *, CONST RECT *, CONST RECT *, HWND, CONST RGNDATA *);\nHRESULT WINAPI extSetRenderState8(void *, D3DRENDERSTATETYPE, DWORD);\nHRESULT WINAPI extSetRenderState9(void *, D3DRENDERSTATETYPE, DWORD);\nHRESULT WINAPI extGetRenderState8(void *, D3DRENDERSTATETYPE, DWORD);\nHRESULT WINAPI extGetRenderState9(void *, D3DRENDERSTATETYPE, DWORD);\nHRESULT WINAPI extGetViewport(void *, D3DVIEWPORT9 *);\nHRESULT WINAPI extSetViewport(void *, D3DVIEWPORT9 *);\nHRESULT WINAPI extReset8(void *, D3DPRESENT_PARAMETERS *);\nHRESULT WINAPI extReset9(void *, D3DPRESENT_PARAMETERS *);\nvoid\tWINAPI extSetGammaRamp8(void *, UINT, DWORD, D3DGAMMARAMP *);\nvoid\tWINAPI extSetGammaRamp9(void *, UINT, DWORD, D3DGAMMARAMP *);\nvoid\tWINAPI extGetGammaRamp8(void *, UINT, D3DGAMMARAMP *);\nvoid\tWINAPI extGetGammaRamp9(void *, UINT, D3DGAMMARAMP *);\nBOOL  WINAPI voidDisableD3DSpy(void);\n\nULONG WINAPI extCreateRenderTarget8(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, void**);\nULONG WINAPI extCreateRenderTarget9(void *, UINT, UINT, D3DFORMAT, D3DMULTISAMPLE_TYPE, BOOL, void**);\nULONG WINAPI extBeginScene8(void *);\nULONG WINAPI extEndScene8(void *);\nULONG WINAPI extBeginScene9(void *);\nULONG WINAPI extEndScene9(void *);\nULONG WINAPI extSetTexture8(void *, DWORD, void *);\nULONG WINAPI extSetTexture9(void *, DWORD, void *);\n\nHRESULT WINAPI extD3D10CreateDevice(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, ID3D10Device **);\nHRESULT WINAPI extD3D10CreateDeviceAndSwapChain(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D10Device **);\nHRESULT WINAPI extD3D10CreateDevice1(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, D3D10_FEATURE_LEVEL1, UINT, ID3D10Device **);\nHRESULT WINAPI extD3D10CreateDeviceAndSwapChain1(IDXGIAdapter *, D3D10_DRIVER_TYPE, HMODULE, UINT, UINT, DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D10Device **);\nHRESULT WINAPI extD3D11CreateDevice(IDXGIAdapter *, D3D_DRIVER_TYPE, HMODULE, UINT, const D3D_FEATURE_LEVEL *, UINT, UINT, ID3D11Device **, D3D_FEATURE_LEVEL *, ID3D11DeviceContext **);\nHRESULT WINAPI extD3D11CreateDeviceAndSwapChain(IDXGIAdapter *, D3D_DRIVER_TYPE, HMODULE, UINT, const D3D_FEATURE_LEVEL *, UINT, UINT, const DXGI_SWAP_CHAIN_DESC *, IDXGISwapChain **, ID3D11Device **, D3D_FEATURE_LEVEL *, ID3D11DeviceContext **);\nvoid WINAPI extRSSetViewports10(void *, UINT, D3D10_VIEWPORT *);\nvoid WINAPI extRSSetViewports11(ID3D11DeviceContext *, UINT, D3D11_VIEWPORT *);\n\nQueryInterface_Type pQueryInterfaceD3D8 = 0;\nQueryInterface_Type pQueryInterfaceDev8 = 0;\nQueryInterface_Type pQueryInterfaceD3D9 = 0;\nQueryInterface_Type pQueryInterfaceDev9 = 0;\n\nEnumAdapterModes8_Type pEnumAdapterModes8 = 0;\nEnumAdapterModes9_Type pEnumAdapterModes9 = 0;\nGetAdapterDisplayMode_Type pGetAdapterDisplayMode8 = 0;\nGetAdapterDisplayMode_Type pGetAdapterDisplayMode9 = 0;\nPresent_Type pPresent8 = 0;\nPresent_Type pPresent9 = 0;\nSetRenderState_Type pSetRenderState8, pSetRenderState9;\nGetRenderState_Type pGetRenderState8, pGetRenderState9;\nGetViewport_Type pGetViewport = 0;\nSetViewport_Type pSetViewport = 0;\nSetGammaRamp_Type pSetGammaRamp8, pSetGammaRamp9;\nGetGammaRamp_Type pGetGammaRamp8, pGetGammaRamp9;\n\nCreateRenderTarget8_Type pCreateRenderTarget8 = 0;\nCreateRenderTarget9_Type pCreateRenderTarget9 = 0;\nBeginScene_Type pBeginScene8, pBeginScene9;\nEndScene_Type pEndScene8, pEndScene9;\nReset_Type pReset8, pReset9;\nSetTexture8_Type pSetTexture8 = 0;\nSetTexture9_Type pSetTexture9 = 0;\n\nD3D10CreateDevice_Type pD3D10CreateDevice = 0;\nD3D10CreateDeviceAndSwapChain_Type pD3D10CreateDeviceAndSwapChain = 0;\nD3D10CreateDevice1_Type pD3D10CreateDevice1 = 0;\nD3D10CreateDeviceAndSwapChain1_Type pD3D10CreateDeviceAndSwapChain1 = 0;\nD3D11CreateDevice_Type pD3D11CreateDevice = 0;\nD3D11CreateDeviceAndSwapChain_Type pD3D11CreateDeviceAndSwapChain = 0;\nRSSetViewports10_Type pRSSetViewports10 = 0;\nRSSetViewports11_Type pRSSetViewports11 = 0;\n\nAddRef_Type pAddRef9 = 0;\nRelease_Type pRelease9 = 0;\n\nDWORD dwD3DVersion;\nDWORD dwD3DSwapEffect;\n\nstatic HookEntryEx_Type d3d8Hooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"Direct3DCreate8\", (FARPROC)NULL, (FARPROC *)&pDirect3DCreate8, (FARPROC)extDirect3DCreate8},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type d3d9Hooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"Direct3DCreate9\", (FARPROC)NULL, (FARPROC *)&pDirect3DCreate9, (FARPROC)extDirect3DCreate9},\n\t{HOOK_HOT_CANDIDATE, 0, \"Direct3DCreate9Ex\", (FARPROC)NULL, (FARPROC *)&pDirect3DCreate9Ex, (FARPROC)extDirect3DCreate9Ex},\n\t{HOOK_HOT_CANDIDATE, 0, \"CheckFullScreen\", (FARPROC)NULL, (FARPROC *)&pCheckFullScreen, (FARPROC)extCheckFullScreen},\n\t//{HOOK_HOT_CANDIDATE, 0, \"DisableD3DSpy\", (FARPROC)NULL, (FARPROC *)&pDisableD3DSpy, (FARPROC)extDisableD3DSpy},\n\t{HOOK_HOT_CANDIDATE, 0, \"D3DPERF_SetOptions\", (FARPROC)NULL, (FARPROC *)&pD3DPERF_SetOptions, (FARPROC)extD3DPERF_SetOptions},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type d3d9Extra[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"Direct3DShaderValidatorCreate9\", (FARPROC)NULL, (FARPROC *)NULL, (FARPROC)voidDirect3DShaderValidatorCreate9},\n\t{HOOK_HOT_CANDIDATE, 0, \"DebugSetLevel\", (FARPROC)NULL, (FARPROC *)NULL, (FARPROC)voidDebugSetLevel},\n\t{HOOK_HOT_CANDIDATE, 0, \"DebugSetMute\", (FARPROC)NULL, (FARPROC *)NULL, (FARPROC)voidDebugSetMute},\n\t{HOOK_HOT_CANDIDATE, 0, \"DisableD3DSpy\", (FARPROC)NULL, (FARPROC *)NULL, (FARPROC)voidDisableD3DSpy}, \n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type d3d10Hooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"D3D10CreateDevice\", (FARPROC)NULL, (FARPROC *)&pD3D10CreateDevice, (FARPROC)extD3D10CreateDevice},\n\t{HOOK_HOT_CANDIDATE, 0, \"D3D10CreateDeviceAndSwapChain\", (FARPROC)NULL, (FARPROC *)&pD3D10CreateDeviceAndSwapChain, (FARPROC)extD3D10CreateDeviceAndSwapChain},\n\t{HOOK_HOT_CANDIDATE, 0, \"CheckFullScreen\", (FARPROC)NULL, (FARPROC *)&pCheckFullScreen, (FARPROC)extCheckFullScreen},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type d3d10_1Hooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"D3D11CreateDevice\", (FARPROC)NULL, (FARPROC *)&pD3D11CreateDevice, (FARPROC)extD3D11CreateDevice},\n\t{HOOK_HOT_CANDIDATE, 0, \"D3D11CreateDeviceAndSwapChain\", (FARPROC)NULL, (FARPROC *)&pD3D11CreateDeviceAndSwapChain, (FARPROC)extD3D11CreateDeviceAndSwapChain},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type d3d11Hooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"D3D10CreateDevice1\", (FARPROC)NULL, (FARPROC *)&pD3D10CreateDevice1, (FARPROC)extD3D10CreateDevice1},\n\t{HOOK_HOT_CANDIDATE, 0, \"D3D10CreateDeviceAndSwapChain1\", (FARPROC)NULL, (FARPROC *)&pD3D10CreateDeviceAndSwapChain1, (FARPROC)extD3D10CreateDeviceAndSwapChain1},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nFARPROC Remap_d3d8_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\t//if (dxw.dwTargetDDVersion == HOOKDDRAWNONE) return NULL;\n\tif (addr=RemapLibraryEx(proc, hModule, d3d8Hooks)) return addr;\n\treturn NULL;\n}\n\nFARPROC Remap_d3d9_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\t//if (dxw.dwTargetDDVersion == HOOKDDRAWNONE) return NULL;\n\tif (addr=RemapLibraryEx(proc, hModule, d3d9Hooks)) return addr;\n\tif (dxw.dwFlags3 & SUPPRESSD3DEXT) if (addr=RemapLibraryEx(proc, hModule, d3d9Extra)) return addr;\n\treturn NULL;\n}\n\nFARPROC Remap_d3d10_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\t//if (dxw.dwTargetDDVersion == HOOKDDRAWNONE) return NULL;\n\tif (addr=RemapLibraryEx(proc, hModule, d3d10Hooks)) return addr;\n\treturn NULL;\n}\n\nFARPROC Remap_d3d10_1_ProcAddress(LPCSTR proc, HMODULE hModule) \n{\n\tFARPROC addr;\n\t//if (dxw.dwTargetDDVersion == HOOKDDRAWNONE) return NULL;\n\tif (addr=RemapLibraryEx(proc, hModule, d3d10_1Hooks)) return addr;\n\treturn NULL;\n}\n\nFARPROC Remap_d3d11_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\t//if (dxw.dwTargetDDVersion == HOOKDDRAWNONE) return NULL;\n\tif (addr=RemapLibraryEx(proc, hModule, d3d11Hooks)) return addr;\n\treturn NULL;\n}\n\nint HookDirect3D(HMODULE module, int version){\n\tLPDIRECT3D9 lpd3d;\n\tID3D10Device *lpd3d10;\n\tID3D11Device *lpd3d11;\n\tHRESULT res;\n\n\tOutTraceDW(\"HookDirect3D: module=%x version=%d\\n\", module, version);\n\tswitch(version){\n\tcase 0:\n\t\tHookLibraryEx(module, d3d8Hooks, \"d3d8.dll\");\n\t\tHookLibraryEx(module, d3d9Hooks, \"d3d9.dll\");\n#ifdef HOOKD3D10ANDLATER\n\t\tHookLibraryEx(module, d3d10Hooks, \"d3d10.dll\");\n\t\tHookLibraryEx(module, d3d10_1Hooks, \"d3d10_1.dll\");\n\t\tHookLibraryEx(module, d3d11Hooks, \"d3d11.dll\");\n#endif\n\t\tbreak;\n\tcase 8:\n\t\tPinLibraryEx(d3d8Hooks, \"d3d8.dll\"); // pin for \"Port Royale 2\"\n\t\tHookLibraryEx(module, d3d8Hooks, \"d3d8.dll\");\n\t\tif(pDirect3DCreate8){\n\t\t\tlpd3d = (LPDIRECT3D9)extDirect3DCreate8(220);\n\t\t\tif(lpd3d) lpd3d->Release();\n\t\t}\n\t\tbreak;\n\tcase 9:\n\t\tPinLibraryEx(d3d9Hooks, \"d3d9.dll\");// pin for \"Affari tuoi\"\n\t\tHookLibraryEx(module, d3d9Hooks, \"d3d9.dll\");\n\t\tif(pDirect3DCreate9){ \n\t\t\tlpd3d = (LPDIRECT3D9)extDirect3DCreate9(31);\n\t\t\tif(lpd3d) lpd3d->Release();\n\t\t}\n\t\tbreak;\n#ifdef HOOKD3D10ANDLATER\n\tcase 10:\n\t\tPinLibraryEx(d3d10Hooks, \"d3d10.dll\");\n\t\tPinLibraryEx(d3d10_1Hooks, \"d3d10_1.dll\");\n\t\tHookLibraryEx(module, d3d10Hooks, \"d3d10.dll\");\n\t\tHookLibraryEx(module, d3d10_1Hooks, \"d3d10_1.dll\");\n\t\tif(pD3D10CreateDevice){\n\t\t\tres = extD3D10CreateDevice(\n\t\t\t\tNULL,\n\t\t\t\tD3D10_DRIVER_TYPE_HARDWARE,\n\t\t\t\tNULL,\n\t\t\t\t0,\n\t\t\t\tD3D10_SDK_VERSION,\n\t\t\t\t&lpd3d10);\n\t\t\tif(res==DD_OK) lpd3d10->Release();\n\t\t}\n\tbreak;\n\tcase 11:\n\t\tPinLibraryEx(d3d11Hooks, \"d3d11.dll\");\n\t\tHookLibraryEx(module, d3d11Hooks, \"d3d11.dll\");\n\t\tif(pD3D11CreateDevice){\n\t\t\tD3D_FEATURE_LEVEL FeatureLevel;\n\t\t\tID3D11DeviceContext *pImmediateContext;\n\t\t\tres = extD3D11CreateDevice(\n\t\t\t\tNULL,\n\t\t\t\tD3D_DRIVER_TYPE_HARDWARE,\n\t\t\t\tNULL,\n\t\t\t\t0, // flags\n\t\t\t\tNULL, // FeatureLevels\n\t\t\t\t0,\n\t\t\t\tD3D11_SDK_VERSION,\n\t\t\t\t&lpd3d11,\n\t\t\t\t&FeatureLevel,\n\t\t\t\t&pImmediateContext);\n\t\t\tif(res==DD_OK) lpd3d11->Release();\n\t\t}\n#endif\n\t}\n\tif(pDirect3DCreate8 || pDirect3DCreate9) return 1;\n\treturn 0;\n}\n\nvoid HookD3DDevice8(void** ppD3Ddev8)\n{\n\tOutTraceD3D(\"Device hook for IID_IDirect3DDevice8 interface\\n\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 +  0), extQueryInterfaceDev8, (void **)&pQueryInterfaceDev8, \"QueryInterface(D8)\");\n\t//SetHook((void *)(**(DWORD **)ppD3Ddev8 +  8), extReleaseDev8, (void **)&pReleaseDev8, \"Release(D8)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 12), extTestCooperativeLevel8, (void **)&pTestCooperativeLevel8, \"TestCooperativeLevel(D8)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 16), extGetAvailableTextureMem8, (void **)&pGetAvailableTextureMem8, \"GetAvailableTextureMem(D8)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 24), extGetDirect3D8, (void **)&pGetDirect3D8, \"GetDirect3D(D8)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 32), extGetDisplayMode8, (void **)&pGetDisplayMode8, \"GetDisplayMode(D8)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 44), extSetCursorPosition8, (void **)&pSetCursorPosition8, \"SetCursorPosition(D8)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 48), extShowCursor8, (void **)&pShowCursor8, \"ShowCursor(D8)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 52), extCreateAdditionalSwapChain8, (void **)&pCreateAdditionalSwapChain8, \"CreateAdditionalSwapChain(D8)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 56), extReset8, (void **)&pReset8, \"Reset(D8)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 60), extPresent8, (void **)&pPresent8, \"Present(D8)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 64), extGetBackBuffer8, (void **)&pGetBackBuffer8, \"GetBackBuffer(D8)\");\n\tif(dxw.dwFlags2 & DISABLEGAMMARAMP){\n\t\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 72), extSetGammaRamp8, (void **)&pSetGammaRamp8, \"SetGammaRamp(D8)\");\n\t\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 76), extGetGammaRamp8, (void **)&pGetGammaRamp8, \"GetGammaRamp(D8)\");\n\t}\n\tif(dxw.dwFlags5 & TEXTUREMASK){\n\t\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 80), extCreateTexture8, (void **)&pCreateTexture8, \"CreateTexture(D8)\");\n\t}\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 100), extCreateRenderTarget8, (void **)&pCreateRenderTarget8, \"CreateRenderTarget(D8)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 112), extCopyRects, (void **)&pCopyRects, \"CopyRects(D8)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 120), extGetFrontBuffer, (void **)&pGetFrontBuffer, \"GetFrontBuffer(D8)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 136), extBeginScene8, (void **)&pBeginScene8, \"BeginScene(D8)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 140), extEndScene8, (void **)&pEndScene8, \"EndScene(D8)\");\n\tif((dxw.dwFlags2 & WIREFRAME) || (dxw.dwFlags4 & DISABLEFOGGING) || (dxw.dwFlags4 & ZBUFFERALWAYS) || (dxw.dwFlags5 & TEXTURETRANSP)){\n\t\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 200), extSetRenderState8, (void **)&pSetRenderState8, \"SetRenderState(D8)\");\n\t\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 204), extGetRenderState8, (void **)&pGetRenderState8, \"GetRenderState(D8)\");\n\t\tif(dxw.dwFlags2 & WIREFRAME) (*pSetRenderState8)((void *)*ppD3Ddev8, D3DRS_FILLMODE, D3DFILL_WIREFRAME);\n\t\tif(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState8)((void *)*ppD3Ddev8, D3DRS_FOGENABLE, FALSE);\n\t\tif(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState8)((void *)*ppD3Ddev8, D3DRS_ZFUNC, D3DCMP_ALWAYS);\n\t\t//if(1) (*pSetRenderState8)((void *)*ppD3Ddev8, D3DRS_SPECULARENABLE, TRUE);\n\t}\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 208), extBeginStateBlock8, (void **)&pBeginStateBlock8, \"BeginStateBlock(D8)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 212), extEndStateBlock8, (void **)&pEndStateBlock8, \"EndStateBlock(D8)\");\n\tif((dxw.dwFlags5 & TEXTUREMASK) || (dxw.dwFlags4 & NOTEXTURES)){\n\t\tSetHook((void *)(**(DWORD **)ppD3Ddev8 + 244), extSetTexture8, (void **)&pSetTexture8, \"SetTexture(D8)\");\n\t}\n}\n\nvoid HookD3DDevice9(void** ppD3Ddev9)\n{\n\tOutTraceD3D(\"Device hook for IID_IDirect3DDevice9 interface\\n\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 +  0), extQueryInterfaceDev9, (void **)&pQueryInterfaceDev9, \"QueryInterface(D9)\");\n\t//SetHook((void *)(**(DWORD **)ppD3Ddev9 +  8), extReleaseDev9, (void **)&pReleaseDev9, \"Release(D9)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 12), extTestCooperativeLevel9, (void **)&pTestCooperativeLevel9, \"TestCooperativeLevel(D9)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 16), extGetAvailableTextureMem9, (void **)&pGetAvailableTextureMem9, \"GetAvailableTextureMem(D9)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 24), extGetDirect3D9, (void **)&pGetDirect3D9, \"GetDirect3D(D9)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 32), extGetDisplayMode9, (void **)&pGetDisplayMode9, \"GetDisplayMode(D9)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 44), extSetCursorPosition9, (void **)&pSetCursorPosition9, \"SetCursorPosition(D9)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 48), extShowCursor9, (void **)&pShowCursor9, \"ShowCursor(D9)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 52), extCreateAdditionalSwapChain9, (void **)&pCreateAdditionalSwapChain9, \"CreateAdditionalSwapChain(D9)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 56), extGetSwapChain, (void **)&pGetSwapChain, \"GetSwapChain(D9)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 60), extGetNumberOfSwapChains, (void **)&pGetNumberOfSwapChains, \"extGetNumberOfSwapChains(D9)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 64), extReset9, (void **)&pReset9, \"Reset(D9)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 68), extPresent9, (void **)&pPresent9, \"Present(D9)\");\n\tif(dxw.dwFlags2 & DISABLEGAMMARAMP){\n\t\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 84), extSetGammaRamp9, (void **)&pSetGammaRamp9, \"SetGammaRamp(D9)\");\n\t\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 88), extGetGammaRamp9, (void **)&pGetGammaRamp9, \"GetGammaRamp(D9)\");\n\t}\n\tif(dxw.dwFlags5 & TEXTUREMASK){\n\t\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 92), extCreateTexture9, (void **)&pCreateTexture9, \"CreateTexture(D9)\");\n\t}\n#ifdef DXWNDDISABLEDHOOKS\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 120), extUpdateSurface, (void **)&pUpdateSurface, \"UpdateSurface(D9)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 124), extUpdateTexture, (void **)&pUpdateTexture, \"UpdateTexture(D9)\");\n#endif\n\n\t//SetHook((void *)(**(DWORD **)ppD3Ddev9 + 112), extCreateRenderTarget9, (void **)&pCreateRenderTarget9, \"CreateRenderTarget(D9)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 164), extBeginScene9, (void **)&pBeginScene9, \"BeginScene(D9)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 168), extEndScene9, (void **)&pEndScene9, \"EndScene(D9)\");\n\t//SetHook((void *)(**(DWORD **)ppD3Ddev9 +188), extSetViewport, (void **)&pSetViewport, \"SetViewport(D9)\");\n\t//SetHook((void *)(**(DWORD **)ppD3Ddev9 +192), extGetViewport, (void **)&pGetViewport, \"GetViewport(D9)\");\n\tif((dxw.dwFlags2 & WIREFRAME) || (dxw.dwFlags4 & DISABLEFOGGING) || (dxw.dwFlags4 & ZBUFFERALWAYS) || (dxw.dwFlags5 & TEXTURETRANSP)){\n\t\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 228), extSetRenderState9, (void **)&pSetRenderState9, \"SetRenderState(D9)\");\n\t\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 232), extGetRenderState9, (void **)&pGetRenderState9, \"GetRenderState(D9)\");\n\t\tif(dxw.dwFlags2 & WIREFRAME) (*pSetRenderState9)((void *)*ppD3Ddev9, D3DRS_FILLMODE, D3DFILL_WIREFRAME);\n\t\tif(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState9)((void *)*ppD3Ddev9, D3DRS_FOGENABLE, FALSE);\n\t\tif(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState9)((void *)*ppD3Ddev9, D3DRS_ZFUNC, D3DCMP_ALWAYS);\n\t\t//if(1) (*pSetRenderState9)((void *)*ppD3Ddev9, D3DRS_SPECULARENABLE, TRUE);\n\t}\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 240), extBeginStateBlock9, (void **)&pBeginStateBlock9, \"BeginStateBlock(D9)\");\n\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 244), extEndStateBlock9, (void **)&pEndStateBlock9, \"EndStateBlock(D9)\");\n\tif((dxw.dwFlags5 & TEXTUREMASK) || (dxw.dwFlags4 & NOTEXTURES)){\n\t\tSetHook((void *)(**(DWORD **)ppD3Ddev9 + 260), extSetTexture9, (void **)&pSetTexture9, \"SetTexture(D9)\");\n\t}\n}\n\n// WIP\nvoid HookD3DTexture8(void** ppD3Dtex8)\n{\n\tOutTraceD3D(\"Device hook for IDirect3DTexture8 interface\\n\");\n\tSetHook((void *)(**(DWORD **)ppD3Dtex8 + 64), extLockRect8, (void **)&pLockRect8, \"LockRect(D8)\");\n\tSetHook((void *)(**(DWORD **)ppD3Dtex8 + 68), extUnlockRect8, (void **)&pUnlockRect8, \"UnlockRect(D8)\");\n}\n\nvoid HookD3DTexture9(void** ppD3Dtex9)\n{\n\tOutTraceD3D(\"Device hook for IDirect3DTexture9 interface\\n\");\n\tSetHook((void *)(**(DWORD **)ppD3Dtex9 + 76), extLockRect9, (void **)&pLockRect9, \"LockRect(T9)\");\n\tSetHook((void *)(**(DWORD **)ppD3Dtex9 + 80), extUnlockRect9, (void **)&pUnlockRect9, \"UnlockRect(T9)\");\n}\n\nvoid HookDirect3D8(void *lpd3d)\n{\n\tSetHook((void *)(*(DWORD *)lpd3d +  0), extQueryInterfaceD3D8, (void **)&pQueryInterfaceD3D8, \"QueryInterface(D8)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 16), extGetAdapterCount8, (void **)&pGetAdapterCount8, \"GetAdapterCount(D8)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 20), extGetAdapterIdentifier8, (void **)&pGetAdapterIdentifier8, \"GetAdapterIdentifier(D8)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 24), extGetAdapterModeCount8, (void **)&pGetAdapterModeCount8, \"GetAdapterGetAdapterModeCount(D8)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 28), extEnumAdapterModes8, (void **)&pEnumAdapterModes8, \"EnumAdapterModes(D8)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode8, (void **)&pGetAdapterDisplayMode8, \"GetAdapterDisplayMode(D8)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 36), extCheckDeviceType8, (void **)&pCheckDeviceType8, \"CheckDeviceType(D8)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 52), extD3DGetDeviceCaps8, (void **)&pD3DGetDeviceCaps8, \"GetDeviceCaps(D8)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 56), extGetAdapterMonitor8, (void **)&pGetAdapterMonitor8, \"GetAdapterMonitor(D8)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 60), extCreateDevice8, (void **)&pCreateDevice8, \"CreateDevice(D8)\");\n}\n\nvoid HookDirect3D9(void *lpd3d, BOOL ex)\n{\n\tSetHook((void *)(*(DWORD *)lpd3d +  0), extQueryInterfaceD3D9, (void **)&pQueryInterfaceD3D9, \"QueryInterface(D9)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 16), extGetAdapterCount9, (void **)&pGetAdapterCount9, \"GetAdapterCount(D9)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 20), extGetAdapterIdentifier9, (void **)&pGetAdapterIdentifier9, \"GetAdapterIdentifier(D9)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 24), extGetAdapterModeCount9, (void **)&pGetAdapterModeCount9, \"GetAdapterGetAdapterModeCount(D9)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 28), extEnumAdapterModes9, (void **)&pEnumAdapterModes9, \"EnumAdapterModes(D9)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode9, (void **)&pGetAdapterDisplayMode9, \"GetAdapterDisplayMode(D9)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 36), extCheckDeviceType9, (void **)&pCheckDeviceType9, \"CheckDeviceType(D9)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 56), extD3DGetDeviceCaps9, (void **)&pD3DGetDeviceCaps9, \"GetDeviceCaps(D9)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 60), extGetAdapterMonitor9, (void **)&pGetAdapterMonitor9, \"GetAdapterMonitor(D9)\");\n\tSetHook((void *)(*(DWORD *)lpd3d + 64), extCreateDevice9, (void **)&pCreateDevice9, \"CreateDevice(D9)\");\n\tif(ex) SetHook((void *)(*(DWORD *)lpd3d + 80), extCreateDeviceEx, (void **)&pCreateDeviceEx, \"CreateDeviceEx(D9)\");\n}\n\ntypedef enum {\n\tTYPE_OBJECT_UNKNOWN = 0,\n\tTYPE_OBJECT_DIRECT3D,\n\tTYPE_OBJECT_DIRECT3DDEVICE,\n\tTYPE_OBJECT_GAMMARAMP,\n\tTYPE_OBJECT_BASETEXTURE,\n\tTYPE_OBJECT_TEXTURE,\n\tTYPE_OBJECT_3DSURFACE,\n\tTYPE_OBJECT_VIEWPORT };\n\nstatic HRESULT WINAPI QueryInterfaceD3D(int d3dversion, QueryInterface_Type pQueryInterfaceD3D, void *obj, REFIID riid, void** ppvObj)\n{\n\tHRESULT res;\n\tint iObjectType;\n\tint iObjectVersion;\n\tBOOL bEx = FALSE;\n\n\tiObjectVersion = 0;\n\tiObjectType = TYPE_OBJECT_UNKNOWN;\n\n\tOutTraceD3D(\"D3D::QueryInterface(%d): d3d=%x riid=%x(%s)\\n\", d3dversion, obj, riid.Data1, ExplainGUID((GUID *)&riid));\n\n\tswitch(riid.Data1){\n\t// DirectDraw\n\tcase 0x1dd9e8da: //IID_IDirect3D8\n\t\tiObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=8; break;\n\tcase 0x81bdcbca: // IID_IDirect3D9\n\t\tiObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=9; break;\n\tcase 0x02177241: // IID_IDirect3D9Ex\n\t\tiObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=9; bEx=TRUE; break;\n\tcase 0x7385e5df: // IID_IDirect3DDevice8\n\t\tiObjectType=TYPE_OBJECT_DIRECT3DDEVICE; iObjectVersion=8; break;\n\tcase 0xd0223b96: // IID_IDirect3DDevice9\n\t\tiObjectType=TYPE_OBJECT_DIRECT3DDEVICE; iObjectVersion=9; break;\n\tcase 0xb18b10ce: // IID_IDirect3DDevice9Ex\n\t\tiObjectType=TYPE_OBJECT_DIRECT3DDEVICE; iObjectVersion=9; bEx=TRUE; break; // !!!!\n\tcase 0xb4211cfa: // IID_IDirect3DBaseTexture8\n\t\tiObjectType=TYPE_OBJECT_BASETEXTURE; iObjectVersion=8; break;\n\tcase 0xe4cdd575: // IID_IDirect3DTexture8\n\t\tiObjectType=TYPE_OBJECT_TEXTURE; iObjectVersion=8; break;\n\tcase 0x580ca87e: // IID_IDirect3DBaseTexture9  \n\t\tiObjectType=TYPE_OBJECT_BASETEXTURE; iObjectVersion=9; break;\n\tcase 0x85c31227: // IID_IDirect3DTexture9\n\t\tiObjectType=TYPE_OBJECT_TEXTURE; iObjectVersion=9; break;\n\tcase 0xb96eebca: // IID_IDirect3DSurface8\n\t\tiObjectType=TYPE_OBJECT_3DSURFACE; iObjectVersion=8; break;\n\tcase 0x0cfbaf3a: // IID_IDirect3DSurface9 \n\t\tiObjectType=TYPE_OBJECT_3DSURFACE; iObjectVersion=9; break;\n\t}\n\n/* IID_IDirect3DDevice9Video */\n// {26DC4561-A1EE-4ae7-96DA-118A36C0EC95}\n// DEFINE_GUID(IID_IDirect3DDevice9Video, 0x26dc4561, 0xa1ee, 0x4ae7, 0x96, 0xda, 0x11, 0x8a, 0x36, 0xc0, 0xec, 0x95);\n\n\tchar *sLabel;\n\tswitch(iObjectType){\n\t\tcase TYPE_OBJECT_DIRECT3D: sLabel = \"IID_IDirect3D\"; break;\n\t\tcase TYPE_OBJECT_DIRECT3DDEVICE: sLabel = \"IID_IDirect3DDevice\"; break;\n\t\tcase TYPE_OBJECT_BASETEXTURE: sLabel = \"IID_IDirect3DBaseTexture\"; break;\n\t\tcase TYPE_OBJECT_TEXTURE: sLabel = \"IID_IDirect3DTexture\"; break;\n\t\tcase TYPE_OBJECT_3DSURFACE: sLabel = \"IID_IDirect3DSurface\"; break;\n\t\tcase TYPE_OBJECT_UNKNOWN: \n\t\tdefault: sLabel = \"(unknown)\"; break;\n\t}\n\tOutTraceDW(\"D3D::QueryInterface: Got interface for %s version %d\\n\", sLabel, iObjectVersion);\n\n\tres=pQueryInterfaceD3D(obj, riid, ppvObj);\n\tif(res) {\n\t\tOutTraceDW(\"D3D::QueryInterface ERROR: obj=%x REFIID=%x obp=%x ret=%x(%s)\\n\",\n\t\t\tobj, riid.Data1, *ppvObj, res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\n\tif (! *ppvObj) {\n\t\tOutTraceDW(\"D3D::QueryInterface: Interface for object %x not found\\n\", riid.Data1);\n\t\treturn res;\n\t}\n\n\t// added trace\n\tOutTraceDW(\"D3D::QueryInterface: obj=%x REFIID=%x obp=%x obj=%s version=%d ret=0\\n\",\n\t\tobj, riid.Data1, *ppvObj, sLabel, iObjectVersion);\n\n\tif(iObjectVersion == 8){\n\t\tswitch(iObjectType){\n\t\t\tcase TYPE_OBJECT_DIRECT3D:\t\t\tHookDirect3D8(ppvObj); break;\n\t\t\tcase TYPE_OBJECT_DIRECT3DDEVICE:\tHookD3DDevice8(ppvObj); break;\n\t\t\tcase TYPE_OBJECT_TEXTURE:\t\t\tHookD3DTexture8(ppvObj); break;\n\t\t}\n\t}\n\telse{ // 9!\n\t\tswitch(iObjectType){\n\t\t\tcase TYPE_OBJECT_DIRECT3D:\t\t\tHookDirect3D9(ppvObj, bEx); break;\n\t\t\tcase TYPE_OBJECT_DIRECT3DDEVICE:\tHookD3DDevice9(ppvObj); break;\n\t\t\tcase TYPE_OBJECT_TEXTURE:\t\t\tHookD3DTexture9(ppvObj); break;\n\t\t}\n\t}\n\n\tOutTraceD3D(\"D3D::QueryInterface: obp=%x\\n\", *ppvObj);\n\treturn res;\n}\n\nHRESULT WINAPI extQueryInterfaceD3D8(void *obj, REFIID riid, void** ppvObj)\n{ return QueryInterfaceD3D(8, pQueryInterfaceD3D8, obj, riid, ppvObj); }\nHRESULT WINAPI extQueryInterfaceDev8(void *obj, REFIID riid, void** ppvObj)\n{ return QueryInterfaceD3D(8, pQueryInterfaceDev8, obj, riid, ppvObj); }\nHRESULT WINAPI extQueryInterfaceD3D9(void *obj, REFIID riid, void** ppvObj)\n{ return QueryInterfaceD3D(9, pQueryInterfaceD3D9, obj, riid, ppvObj); }\nHRESULT WINAPI extQueryInterfaceDev9(void *obj, REFIID riid, void** ppvObj)\n{ return QueryInterfaceD3D(9, pQueryInterfaceDev9, obj, riid, ppvObj); }\n\nBOOL WINAPI extDisableD3DSpy(void)\n{\n\tif(TRUE) return FALSE;\n\treturn (*pDisableD3DSpy)();\n}\n\nvoid* WINAPI extDirect3DCreate8(UINT sdkversion)\n{\n\tvoid *lpd3d;\n\n\tOutTraceD3D(\"Direct3DCreate8: sdkversion=%x\\n\", sdkversion);\n\tlpd3d = (*pDirect3DCreate8)(sdkversion);\n\tif(!lpd3d) {\n\t\tOutTraceE(\"Direct3DCreate8: ERROR err=%d\\n\", GetLastError());\n\t\treturn 0;\n\t}\n\tdwD3DVersion = 8;\n\tHookDirect3D8(lpd3d);\n\tOutTraceD3D(\"Direct3DCreate8: d3d=%x\\n\", lpd3d);\n\n\treturn lpd3d;\n}\n\nstatic char *ExplainD3DBehaviourFlags(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"D3DCREATE_\");\n\tif (c & D3DCREATE_FPU_PRESERVE) strcat(eb, \"FPU_PRESERVE+\");\n\tif (c & D3DCREATE_MULTITHREADED) strcat(eb, \"MULTITHREADED+\");\n\tif (c & D3DCREATE_PUREDEVICE) strcat(eb, \"PUREDEVICE+\");\n\tif (c & D3DCREATE_SOFTWARE_VERTEXPROCESSING) strcat(eb, \"SOFTWARE_VERTEXPROCESSING+\");\n\tif (c & D3DCREATE_HARDWARE_VERTEXPROCESSING) strcat(eb, \"HARDWARE_VERTEXPROCESSING+\");\n\tif (c & D3DCREATE_MIXED_VERTEXPROCESSING) strcat(eb, \"MIXED_VERTEXPROCESSING+\");\n\tif (c & D3DCREATE_DISABLE_DRIVER_MANAGEMENT) strcat(eb, \"DISABLE_DRIVER_MANAGEMENT+\");\n\tif (c & D3DCREATE_ADAPTERGROUP_DEVICE) strcat(eb, \"ADAPTERGROUP_DEVICE+\");\n\tif (c & D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX) strcat(eb, \"DISABLE_DRIVER_MANAGEMENT_EX+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"D3DCREATE_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nvoid* WINAPI extDirect3DCreate9(UINT sdkversion)\n{\n\tvoid *lpd3d; \n\n\tOutTraceD3D(\"Direct3DCreate9: sdkversion=%x\\n\", sdkversion);\n\tlpd3d = (*pDirect3DCreate9)(sdkversion);\n\tif(!lpd3d) {\n\t\tOutTraceE(\"Direct3DCreate9: ERROR err=%d\\n\", GetLastError());\n\t\treturn 0;\n\t}\n\n\tdwD3DVersion = 9;\n\tHookDirect3D9(lpd3d, FALSE);\n\tOutTraceD3D(\"Direct3DCreate9: d3d=%x\\n\", lpd3d);\n\n\treturn lpd3d;\n}\n\nHRESULT WINAPI extDirect3DCreate9Ex(UINT sdkversion, IDirect3D9Ex **ppD3D)\n{\n\tvoid *lpd3d;\n\tHRESULT res;\n\n\tOutTraceD3D(\"Direct3DCreate9Ex: sdkversion=%x\\n\", sdkversion);\n\tres = (*pDirect3DCreate9Ex)(sdkversion, ppD3D);\n\tif(res) {\n\t\tOutTraceE(\"Direct3DCreate9Ex: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\tdwD3DVersion = 9;\n\tlpd3d = *ppD3D;\n\tHookDirect3D9(lpd3d, TRUE);\n\tOutTraceD3D(\"Direct3DCreate9Ex: d3d=%x\\n\", lpd3d);\n\treturn res;\n}\n\nUINT WINAPI extGetAdapterCount8(void *lpd3d)\n{\n\tUINT res;\n\tres=(*pGetAdapterCount8)(lpd3d);\n\tOutTraceD3D(\"GetAdapterCount(8): count=%d\\n\", res);\n\tif(dxw.dwFlags2 & HIDEMULTIMONITOR) {\n\t\tOutTraceD3D(\"GetAdapterCount: HIDEMULTIMONITOR count=1\\n\");\n\t\tres=1;\n\t}\n\treturn res;\n}\n\nUINT WINAPI extGetAdapterCount9(void *lpd3d)\n{\n\tUINT res;\n\tres=(*pGetAdapterCount9)(lpd3d);\n\tOutTraceD3D(\"GetAdapterCount(9): count=%d\\n\", res);\n\tif(dxw.dwFlags2 & HIDEMULTIMONITOR) {\n\t\tOutTraceD3D(\"GetAdapterCount: HIDEMULTIMONITOR count=1\\n\");\n\t\tres=1;\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extGetAdapterIdentifier8(void *pd3dd, UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9 *pIdentifier)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"GetAdapterIdentifier(8): Adapter=%d flags=%x\\n\", Adapter, Flags);\n\tres=pGetAdapterIdentifier8(pd3dd, Adapter, Flags, pIdentifier);\n\tOutTraceD3D(\"GetAdapterIdentifier(8): ret=%x\\n\", res);\n\t//if(pIdentifier){\n\t//\tOutTraceD3D(\"\\tDriver=%s\\n\", pIdentifier->Driver);\n\t//\tOutTraceD3D(\"\\tDescription=%s\\n\", pIdentifier->Description);\n\t//\tOutTraceD3D(\"\\tDeviceName=%s\\n\", pIdentifier->DeviceName);\n\t//\tOutTraceD3D(\"\\tVersion=%x\\n\", pIdentifier->DriverVersion);\n\t//}\n\treturn res;\n}\n\nHRESULT WINAPI extGetAdapterIdentifier9(void *pd3dd, UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9 *pIdentifier)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"GetAdapterIdentifier(9): Adapter=%d flags=%x\\n\", Adapter, Flags);\n\tres=pGetAdapterIdentifier9(pd3dd, Adapter, Flags, pIdentifier);\n\tOutTraceD3D(\"GetAdapterIdentifier(9): ret=%x\\n\", res);\n\tif(pIdentifier){\n\t\tOutTraceD3D(\"\\tDriver=%s\\n\", pIdentifier->Driver);\n\t\tOutTraceD3D(\"\\tDescription=%s\\n\", pIdentifier->Description);\n\t\tOutTraceD3D(\"\\tDeviceName=%s\\n\", pIdentifier->DeviceName);\n\t\tOutTraceD3D(\"\\tVersion=%x\\n\", pIdentifier->DriverVersion);\n\t\tOutTraceD3D(\"\\tVendorId=%x\\n\", pIdentifier->VendorId);\n\t\tOutTraceD3D(\"\\tDeviceId=%x\\n\", pIdentifier->DeviceId);\n\t\tOutTraceD3D(\"\\tSubSysId=%x\\n\", pIdentifier->SubSysId);\n\t\tOutTraceD3D(\"\\tWHQLLevel=%x\\n\", pIdentifier->WHQLLevel);\n\t}\n\treturn res;\n}\n\nstatic char *ExplainSwapEffect(DWORD f)\n{\n\tchar *s;\n\tswitch(f){\n\t\tcase D3DSWAPEFFECT_DISCARD: s=\"DISCARD\"; break;\n\t\tcase D3DSWAPEFFECT_FLIP:\ts=\"FLIP\"; break;\n\t\tcase D3DSWAPEFFECT_COPY:\ts=\"COPY\"; break;\n\t\tcase D3DSWAPEFFECT_OVERLAY: s=\"OVERLAY\"; break;\n\t\tcase D3DSWAPEFFECT_FLIPEX:\ts=\"FLIPEX\"; break;\n\t\tdefault:\t\t\t\t\ts=\"unknown\"; break;\n\t}\n\treturn s;\n}\n\nstatic HRESULT WINAPI extReset(int dwD3DVersion, void *pd3dd, D3DPRESENT_PARAMETERS* pPresParam)\n{\n\tHRESULT res;\n\tDWORD param[64], *tmp;\n\tD3DDISPLAYMODE mode;\n\tDWORD Windowed;\n\tvoid *pD3D;\n\tReset_Type pReset;\n\n\tmemcpy(param, pPresParam, (dwD3DVersion == 9)?56:52);\n\tdxw.SetScreenSize(param[0], param[1]);\n\n\tif(IsTraceD3D){\n\t\ttmp = param;\n\t\tDWORD SwapEffect;\n\t\tOutTrace(\"D3D%d::Reset\\n\", dwD3DVersion);\n\t\tOutTrace(\"    BackBufferWidth = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    BackBufferHeight = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    BackBufferFormat = %i(%s)\\n\", *(tmp ++), ExplainD3DSurfaceFormat(param[2]));\n\t\tOutTrace(\"    BackBufferCount = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    MultiSampleType = %i\\n\", *(tmp ++));\n\t\tif(dwD3DVersion == 9) OutTrace(\"    MultiSampleQuality = %i\\n\", *(tmp ++));\n\t\tSwapEffect = *(tmp ++);\n\t\tOutTrace(\"    SwapEffect = 0x%x(%s)\\n\", SwapEffect, ExplainSwapEffect(SwapEffect));\n\t\tOutTrace(\"    hDeviceWindow = 0x%x\\n\", *(tmp ++));\n\t\tOutTrace(\"    Windowed = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    EnableAutoDepthStencil = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    AutoDepthStencilFormat = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    Flags = 0x%x\\n\", *(tmp ++));\n\t\tOutTrace(\"    FullScreen_RefreshRateInHz = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    PresentationInterval = 0x%x\\n\", *(tmp ++));\n\t}\n\n\tWindowed = (dwD3DVersion == 8) ? param[7] : param[8];\n\tpReset = (dwD3DVersion == 8) ? pReset8 : pReset9;\n\tif(dxw.Windowize){\n\t\tif(Windowed) {\n\t\t\t// do not attempt to reset when returning to windowed mode: it is useless (you are windowed already)\n\t\t\t// and the code below (GetDirect3D, ...) doesn't work.\n\t\t\tOutTraceD3D(\"SKIPPED!\\n\");\n\t\t\treturn DD_OK;\n\t\t}\n\n\t\tif (dwD3DVersion == 9){\n\t\t\tres=(*pGetDirect3D9)(pd3dd, &pD3D);\n\t\t\tif(res) {\n\t\t\t\tOutTraceD3D(\"GetDirect3D FAILED! %x\\n\", res);\n\t\t\t\treturn(DD_OK);\n\t\t\t}\n\t\t\tOutTraceD3D(\"GetDirect3D pd3d=%x\\n\", pD3D);\n\t\t\tres=(*pGetAdapterDisplayMode9)(pD3D, 0, &mode);\n\t\t\tif(res) {\n\t\t\t\tOutTraceD3D(\"GetAdapterDisplayMode FAILED! %x\\n\", res);\n\t\t\t\treturn(DD_OK);\n\t\t\t}\n\t\t\tif(dxw.dwFlags6 & FORCESWAPEFFECT) param[6] = dxw.SwapEffect;\t\t\t//Swap effect;\n\t\t\tdwD3DSwapEffect = param[6];\n\t\t\tparam[7] = 0;\t\t\t//hDeviceWindow\n\t\t\tdxw.SetFullScreen(~param[8]?TRUE:FALSE); \n\t\t\tparam[8] = 1;\t\t\t//Windowed\n\t\t\t//param[11] = D3DPRESENTFLAG_DEVICECLIP;\t\t\t//Flags;\n\t\t\tparam[12] = 0;\t\t\t//FullScreen_RefreshRateInHz;\n\t\t\tparam[13] = D3DPRESENT_INTERVAL_DEFAULT;\t//PresentationInterval\n\t\t}\n\t\telse{\n\t\t\tres=(*pGetDirect3D8)(pd3dd, &pD3D);\n\t\t\tif(res) {\n\t\t\t\tOutTraceD3D(\"GetDirect3D FAILED! %x\\n\", res);\n\t\t\t\treturn(DD_OK);\n\t\t\t}\n\t\t\tOutTraceD3D(\"GetDirect3D pd3d=%x\\n\", pD3D);\n\t\t\tres=(*pGetAdapterDisplayMode8)(pD3D, 0, &mode);\n\t\t\tif(res) {\n\t\t\t\tOutTraceD3D(\"GetAdapterDisplayMode FAILED! %x\\n\", res);\n\t\t\t\treturn(DD_OK);\n\t\t\t}\n\t\t\tif(dxw.dwFlags6 & FORCESWAPEFFECT) param[5] = dxw.SwapEffect;\t\t\t//Swap effect;\n\t\t\tdwD3DSwapEffect = param[5];\n\t\t\tparam[6] = 0;\t\t\t//hDeviceWindow\n\t\t\tdxw.SetFullScreen(~param[7]?TRUE:FALSE); \n\t\t\tparam[7] = 1;\t\t\t//Windowed\n\t\t\t//param[10] = D3DPRESENTFLAG_DEVICECLIP;\t\t\t//Flags;\n\t\t\tparam[11] = 0;\t\t\t//FullScreen_RefreshRateInHz;\n\t\t\tparam[12] = D3DPRESENT_INTERVAL_DEFAULT;\t//PresentationInterval\n\t\t}\n\t}\n\n\tif((dxw.dwFlags8 & D3D8BACK16) && (dwD3DVersion == 8)){\n\t\tD3DPRESENT_PARAMETERS *params = (D3DPRESENT_PARAMETERS *)&param[0];\n\t\tdwD3D8ShutdownEmulation(pd3dd);\n\t\t// Change the presentation effect from D3DSWAPEFFECT_COPY to D3DSWAPEFFECT_DISCARD to fix blank screen on W10.\n\t\tparams->SwapEffect = D3DSWAPEFFECT_DISCARD;\n\t\t// Drop the lockable backbuffer flag to be safe. We do not need it.\n\t\tparams->Flags &= ~D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;\n\t}\n\n\tif(!(dxw.dwFlags4 & NOD3DRESET)){ \n\t\tres = (*pReset)(pd3dd, (D3DPRESENT_PARAMETERS *)param);\n\t\tif(res){\n\t\t\tOutTraceD3D(\"err=%x(%s) switching to mode=%d(%s)\\n\", res, ExplainDDError(res), mode.Format, ExplainD3DSurfaceFormat(mode.Format));\n\t\t\tparam[2] = mode.Format; // first attempt: current screen mode\n\t\t\tres = (*pReset)(pd3dd, (D3DPRESENT_PARAMETERS *)param);\n\t\t}\n\t\tif(res){\n\t\t\tOutTraceD3D(\"switching to mode=D3DFMT_UNKNOWN\\n\");\n\t\t\tparam[2] = D3DFMT_UNKNOWN; // second attempt: unknown, good for windowed mode\n\t\t\tres = (*pReset)(pd3dd, (D3DPRESENT_PARAMETERS *)param);\n\t\t}\n\t\tif(res == D3DERR_INVALIDCALL){\n\t\t\tOutTraceD3D(\"FAILED! D3DERR_INVALIDCALL\\n\", res);\n\t\t\treturn D3DERR_INVALIDCALL;\n\t\t}\n\t\tif(res){\n\t\t\tOutTraceD3D(\"FAILED! %x(%s)\\n\", res, ExplainDDError(res));\n\t\t\treturn res;\n\t\t}\n\t\tOutTraceD3D(\"SUCCESS!\\n\");\n\t\t(dwD3DVersion == 8) ? HookD3DDevice8(&pd3dd) : HookD3DDevice9(&pd3dd);\n\t}\n\telse{\n\t\tOutTraceD3D(\"SKIPPED!\\n\");\n\t\tres=D3D_OK;\n\t}\n\n\tif((dxw.dwFlags8 & D3D8BACK16) && (dwD3DVersion == 8)){\n\t\tdwD3D8InitEmulation(pd3dd);\n\t\tif(res) OutTraceE(\"Reset: dwD3D8InitEmulation ERROR: err=%x(%s)\\n\", res, ExplainDDError(res));\n\t}\n\n\tdxw.SetScreenSize(pPresParam->BackBufferWidth, pPresParam->BackBufferHeight);\n\tdxw.SetVSyncDelays(mode.RefreshRate);\n\n\tGetHookInfo()->IsFullScreen = dxw.IsFullScreen();\n\tGetHookInfo()->DXVersion=(short)dwD3DVersion;\n\tGetHookInfo()->Height=(short)dxw.GetScreenHeight();\n\tGetHookInfo()->Width=(short)dxw.GetScreenWidth();\n\tGetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount;\n\t\n\treturn D3D_OK;\n}\n\nHRESULT WINAPI extReset8(void *pd3dd, D3DPRESENT_PARAMETERS* pPresParam)\n{ return extReset(8, pd3dd, pPresParam); }\nHRESULT WINAPI extReset9(void *pd3dd, D3DPRESENT_PARAMETERS* pPresParam)\n{ return extReset(9, pd3dd, pPresParam); }\n\nstatic HRESULT WINAPI extPresent(int d3dversion, Present_Type pPresent, void *pd3dd, CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion)\n{\n\tHRESULT res;\n\tRECT RemappedSrcRect, RemappedDstRect;\n\tif(IsDebug){\n\t\tchar sSourceRect[81];\n\t\tchar sDestRect[81];\n\t\tif (pSourceRect) sprintf_s(sSourceRect, 80, \"(%d,%d)-(%d,%d)\", pSourceRect->left, pSourceRect->top, pSourceRect->right, pSourceRect->bottom);\n\t\telse strcpy(sSourceRect, \"(NULL)\");\n\t\tif (pDestRect) sprintf_s(sDestRect, 80, \"(%d,%d)-(%d,%d)\", pDestRect->left, pDestRect->top, pDestRect->right, pDestRect->bottom);\n\t\telse strcpy(sDestRect, \"(NULL)\");\n\t\tOutTraceB(\"Present(%d): d3dd=%x SourceRect=%s DestRect=%s hDestWndOverride=%x dirtyregion=%x\\n\", \n\t\t\td3dversion, pd3dd, sSourceRect, sDestRect, hDestWindowOverride, pDirtyRegion);\n\t}\n\n\t// frame counter handling....\n\tif (dxw.HandleFPS()) return D3D_OK;\n\tif (dxw.dwFlags1 & SAVELOAD) dxw.VSyncWait();\n\n\tif((dxw.dwFlags8 & D3D8BACK16) && (d3dversion == 8)){\n\t\tres = dwD3D8Present(pd3dd, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion);\n\t\tOutTraceD3D(\"Present: EMULATION res=%x\\n\", res);\n\t}\n\n\tif(dxw.dwFlags2 & FULLRECTBLT) pSourceRect = pDestRect = NULL;\n\tif(dxw.Windowize){\n\t\t// v2.03.15 - fix target RECT region\n\t\tif ((dwD3DSwapEffect == D3DSWAPEFFECT_COPY) && (dxw.dwFlags2 & KEEPASPECTRATIO)) {\n\t\t\tRemappedDstRect=dxw.MapClientRect((LPRECT)pDestRect);\n\t\t\tpDestRect = &RemappedDstRect;\n\t\t\tOutTraceB(\"Present: FIXED DestRect=(%d,%d)-(%d,%d)\\n\", RemappedDstRect.left, RemappedDstRect.top, RemappedDstRect.right, RemappedDstRect.bottom);\n\t\t}\n\t\t// in case of NOD3DRESET, remap source rect. Unfortunately, this doesn't work in fullscreen mode ....\n\t\tif((dxw.dwFlags4 & NOD3DRESET) && (pSourceRect == NULL)){ \n\t\t\tRemappedSrcRect = dxw.GetScreenRect();\n\t\t\tpSourceRect = &RemappedSrcRect;\n\t\t\tOutTraceB(\"Present: NOD3DRESET FIXED SourceRect=(%d,%d)-(%d,%d)\\n\", RemappedSrcRect.left, RemappedSrcRect.top, RemappedSrcRect.right, RemappedSrcRect.bottom);\n\t\t}\n\t}\n\n\tres=(*pPresent)(pd3dd, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion);\n\tif(res) {\n\t\tOutTraceE(\"Present: err=%x(%s)\\n\", res, ExplainDDError(res));\n\t}\n\telse {\n\t\tif(IsDebug){\n\t\t\tif(pDirtyRegion) {\n\t\t\t\tOutTrace(\"Present: D3D_OK dirtyreg={buf=%x type=%d count=%d rgnsize=%x bound=(%d,%d)-(%d,%d)}\\n\", \n\t\t\t\t\tpDirtyRegion->Buffer, pDirtyRegion->rdh.iType, pDirtyRegion->rdh.nCount, pDirtyRegion->rdh.nRgnSize,\n\t\t\t\t\tpDirtyRegion->rdh.rcBound.left, pDirtyRegion->rdh.rcBound.top, pDirtyRegion->rdh.rcBound.right, pDirtyRegion->rdh.rcBound.bottom);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tOutTrace(\"Present: D3D_OK\\n\");\n\t\t\t}\n\t\t}\n\t}\n\tdxw.ShowOverlay();\n\treturn res;\n}\n\nHRESULT WINAPI extPresent8(void *pd3dd, CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion)\n{ return extPresent(8, pPresent8, pd3dd, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion); }\nHRESULT WINAPI extPresent9(void *pd3dd, CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion)\n{ return extPresent(9, pPresent9, pd3dd, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion); }\n\nHRESULT WINAPI extGetDisplayMode8(void *lpd3d, D3DDISPLAYMODE *pMode)\n{\n\tHRESULT res;\n\tres=(*pGetDisplayMode8)(lpd3d, pMode);\n\tOutTraceD3D(\"GetDisplayMode(8): size=(%dx%d) RefreshRate=%d Format=%d\\n\",\n\t\tpMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format);\n\tif(dxw.dwFlags2 & KEEPASPECTRATIO){\n\t\tpMode->Width=dxw.iSizX;\n\t\tpMode->Height=dxw.iSizY;\n\t}\n\telse{\n\t\tpMode->Width = dxw.GetScreenWidth();\n\t\tpMode->Height = dxw.GetScreenHeight();\n\t}\n\tOutTraceD3D(\"GetDisplayMode(8): fixed size=(%dx%d)\\n\", pMode->Width, pMode->Height);\n\tdxw.SetVSyncDelays(pMode->RefreshRate);\n\treturn res;\n}\n\nHRESULT WINAPI extGetDisplayMode9(void *lpd3d, UINT iSwapChain, D3DDISPLAYMODE *pMode)\n{\n\tHRESULT res;\n\tres=(*pGetDisplayMode9)(lpd3d, iSwapChain, pMode);\n\tOutTraceD3D(\"GetDisplayMode(9): SwapChain=%d size=(%dx%d) RefreshRate=%d Format=%d\\n\",\n\t\tiSwapChain, pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format);\n\tif(dxw.dwFlags2 & KEEPASPECTRATIO){\n\t\tpMode->Width=dxw.iSizX;\n\t\tpMode->Height=dxw.iSizY;\n\t}\n\telse{\n\t\tpMode->Width = dxw.GetScreenWidth();\n\t\tpMode->Height = dxw.GetScreenHeight();\n\t}\n\tOutTraceD3D(\"GetDisplayMode(9): fixed size=(%dx%d)\\n\", pMode->Width, pMode->Height);\n\tdxw.SetVSyncDelays(pMode->RefreshRate);\n\treturn res;\n}\n\nHRESULT WINAPI extEnumAdapterModes8(void *lpd3d, UINT Adapter, UINT Mode, D3DDISPLAYMODE* pMode)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"EnumAdapterModes(8): adapter=%d mode=%d pMode=%x\\n\", Adapter, Mode, pMode);\n\tif(dxw.dwFlags7 & ENUM16BITMODES){\n\t\tres=(*pEnumAdapterModes8)(lpd3d, Adapter, Mode/2, pMode);\n\t\tif((res == D3D_OK) && (Mode % 2)){\n\t\t\tpMode->Format = (dxw.dwFlags1 & USERGB565)? D3DFMT_R5G6B5 : D3DFMT_A1R5G5B5;\n\t\t}\n\t}\n\telse\n\t\tres=(*pEnumAdapterModes8)(lpd3d, Adapter, Mode, pMode);\n\tif(res) {\n\t\tOutTraceE(\"EnumAdapterModes ERROR: err=%x(%s)\\n\", res, ExplainDDError(res));\n\t}\n\telse {\n\t\tOutTraceD3D(\"EnumAdapterModes(8): res=(%dx%d) refresh=%dHz format=%d(%s)\\n\", \n\t\t\tpMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format, ExplainD3DSurfaceFormat(pMode->Format));\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extEnumAdapterModes9(void *lpd3d, UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE* pMode)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"EnumAdapterModes(9): adapter=%d format=%x mode=%d pMode=%x\\n\", Adapter, Format, Mode, pMode);\n\tif(dxw.dwFlags7 & ENUM16BITMODES){\n\t\tres=(*pEnumAdapterModes9)(lpd3d, Adapter, Format, Mode/2, pMode);\n\t\tif((res == D3D_OK) && (Mode % 2)){\n\t\t\tpMode->Format = (dxw.dwFlags1 & USERGB565)? D3DFMT_R5G6B5 : D3DFMT_A1R5G5B5;\n\t\t}\n\t}\n\telse\n\t\tres=(*pEnumAdapterModes9)(lpd3d, Adapter, Format, Mode, pMode);\n\tif(res) {\n\t\tOutTraceE(\"EnumAdapterModes ERROR: err=%x(%s)\\n\", res, ExplainDDError(res));\n\t}\n\telse {\n\t\tOutTraceD3D(\"EnumAdapterModes(9): res=(%dx%d) refresh=%dHz format=%d(%s)\\n\", \n\t\t\tpMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format, ExplainD3DSurfaceFormat(pMode->Format));\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extGetAdapterDisplayMode(int d3dversion, GetAdapterDisplayMode_Type pGetAdapterDisplayMode, void *lpd3d, UINT Adapter, D3DDISPLAYMODE *pMode)\n{\n\tHRESULT res;\n\tres=(*pGetAdapterDisplayMode)(lpd3d, Adapter, pMode);\n\tOutTraceD3D(\"GetAdapterDisplayMode(%d): size=(%dx%d) RefreshRate=%d Format=%d(%s)\\n\",\n\t\td3dversion, pMode->Width, pMode->Height, pMode->RefreshRate, pMode->Format, ExplainD3DSurfaceFormat(pMode->Format));\n\tif(dxw.dwFlags2 & KEEPASPECTRATIO){\n\t\tpMode->Width=dxw.iSizX;\n\t\tpMode->Height=dxw.iSizY;\n\t}\n\telse{\n\t\tpMode->Width = dxw.GetScreenWidth();\n\t\tpMode->Height = dxw.GetScreenHeight();\n\t}\n\tOutTraceD3D(\"GetAdapterDisplayMode: fixed size=(%dx%d)\\n\", pMode->Width, pMode->Height);\n\tdxw.SetVSyncDelays(pMode->RefreshRate);\n\treturn res;\n}\n\nHRESULT WINAPI extGetAdapterDisplayMode8(void *lpd3d, UINT Adapter, D3DDISPLAYMODE *pMode)\n{ return extGetAdapterDisplayMode(8, pGetAdapterDisplayMode8, lpd3d, Adapter, pMode); }\nHRESULT WINAPI extGetAdapterDisplayMode9(void *lpd3d, UINT Adapter, D3DDISPLAYMODE *pMode)\n{ return extGetAdapterDisplayMode(9, pGetAdapterDisplayMode9, lpd3d, Adapter, pMode); }\n\n\nHWND FixD3DWindowFrame(HWND hFocusWin)\n{\n\tHWND hRetWnd = hFocusWin;\n\n\tif(!(dxw.dwFlags3 & NOWINDOWMOVE)) \n\t\tAdjustWindowFrame(dxw.GethWnd(), dxw.GetScreenWidth(), dxw.GetScreenHeight());\n\n\tif(dxw.dwFlags3 & FIXD3DFRAME){\n\t\tchar ClassName[81];\n\t\tRECT workarea;\n\t\tHWND hChildWin;\n\t\tGetClassName(dxw.GethWnd(), ClassName, 80);\n\t\t(*pGetClientRect)(dxw.GethWnd(), &workarea);\n\t\tif (dxw.dwFlags2 & KEEPASPECTRATIO) dxw.FixWorkarea(&workarea);\n\t\thChildWin=(*pCreateWindowExA)(\n\t\t\t0, ClassName, \"child\", \n\t\t\tWS_CHILD|WS_VISIBLE, \n\t\t\t//GetSystemMetrics(SM_CXSIZEFRAME), GetSystemMetrics(SM_CYSIZEFRAME)+GetSystemMetrics(SM_CYCAPTION), \n\t\t\tworkarea.left, workarea.top, workarea.right-workarea.left, workarea.bottom-workarea.top, \n\t\t\t//workarea.left+20, workarea.top+20, workarea.right-workarea.left-40, workarea.bottom-workarea.top-40, \n\t\t\tdxw.GethWnd(), NULL, NULL, NULL);\n\t\tif (hChildWin) \n\t\t\tOutTraceD3D(\"CreateDevice: ChildWin=%x pos=(%d,%d) size=(%d,%d)\\n\", \n\t\t\t\thChildWin, workarea.left, workarea.top, workarea.right-workarea.left, workarea.bottom-workarea.top);\n\t\telse\n\t\t\tOutTraceE(\"CreateDevice: CreateWindowEx ERROR err=%d\\n\", GetLastError());\n\t\tdxw.SethWnd(hChildWin, dxw.GethWnd());\n\t\tHookWindowProc(hChildWin);\n\t\thRetWnd = hChildWin;\n\t}\n\n\treturn hRetWnd;\n}\n\nstatic HRESULT WINAPI extCreateDevice(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype,\n\tHWND hfocuswindow, DWORD behaviorflags, D3DPRESENT_PARAMETERS *ppresentparam, void **ppd3dd, int dwD3DVersion)\n{\n\tHRESULT res;\n\tDWORD param[64], *tmp;\n\tD3DDISPLAYMODE mode;\n\n\tOutTraceD3D(\"CreateDevice(%d): lpd3d=%x adapter=%x hFocusWnd=%x behavior=%x, size=(%d,%d)\\n\",\n\t\tdwD3DVersion, lpd3d, adapter, hfocuswindow, behaviorflags, ppresentparam->BackBufferWidth, ppresentparam->BackBufferHeight);\n\n\tmemcpy(param, ppresentparam, (dwD3DVersion == 9)?56:52);\n\tdxw.SethWnd(hfocuswindow);\n\tdxw.SetScreenSize(param[0], param[1]);\n\n\tif(dxw.Windowize) hfocuswindow=FixD3DWindowFrame(hfocuswindow);\n\t\n\tif(IsTraceD3D){\n\t\ttmp = param;\n\t\tDWORD SwapEffect;\n\t\tOutTrace(\"D3D%d::CreateDevice\\n\", dwD3DVersion);\n\t\tOutTrace(\"  Adapter = %i\\n\", adapter);\n\t\tOutTrace(\"  DeviceType = %i\\n\", devicetype);\n\t\tOutTrace(\"  hFocusWindow = 0x%x\\n\", hfocuswindow);\n\t\tOutTrace(\"  BehaviorFlags = 0x%x(%s)\\n\", behaviorflags, ExplainD3DBehaviourFlags(behaviorflags));\n\t\tOutTrace(\"    BackBufferWidth = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    BackBufferHeight = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    BackBufferFormat = %i(%s)\\n\", *(tmp ++), ExplainD3DSurfaceFormat(param[2]));\n\t\tOutTrace(\"    BackBufferCount = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    MultiSampleType = %i\\n\", *(tmp ++));\n\t\tif(dwD3DVersion == 9) OutTrace(\"    MultiSampleQuality = %i\\n\", *(tmp ++));\n\t\tSwapEffect = *(tmp ++);\n\t\tOutTrace(\"    SwapEffect = 0x%x(%s)\\n\", SwapEffect, ExplainSwapEffect(SwapEffect));\n\t\tOutTrace(\"    hDeviceWindow = 0x%x\\n\", *(tmp ++));\n\t\tOutTrace(\"    Windowed = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    EnableAutoDepthStencil = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    AutoDepthStencilFormat = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    Flags = 0x%x\\n\", *(tmp ++));\n\t\tOutTrace(\"    FullScreen_RefreshRateInHz = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    PresentationInterval = 0x%x\\n\", *(tmp ++));\n\t}\n\n\tif(dwD3DVersion == 9)\n\t\t(*pGetAdapterDisplayMode9)(lpd3d, 0, &mode);\n\telse\n\t\t(*pGetAdapterDisplayMode8)(lpd3d, 0, &mode);\n\tOutTraceD3D(\"    Current Format = %d(%s)\\n\", mode.Format, ExplainD3DSurfaceFormat(mode.Format));\n\tOutTraceD3D(\"    Current ScreenSize = (%dx%d)\\n\", mode.Width, mode.Height);\n\tOutTraceD3D(\"    Current Refresh Rate = %d\\n\", mode.RefreshRate);\n\n\tif((dxw.dwFlags4 & NOD3DRESET) && dxw.Windowize){ \n\t\tRECT desktop;\n\t\t// Get a handle to the desktop window\n\t\tconst HWND hDesktop = (*pGetDesktopWindow)();\n\t\t// Get the size of screen to the variable desktop\n\t\t(*pGetWindowRect)(hDesktop, &desktop);\n\t\t// The top left corner will have coordinates (0,0)\n\t\t// and the bottom right corner will have coordinates\n\t\t// (horizontal, vertical)\n\t\tparam[0] = desktop.right;\n\t\tparam[1] = desktop.bottom;\t\t\t\n\t}\n\n\tif(dwD3DVersion == 9){\n\t\tif(dxw.Windowize){\n\t\t\tif(dxw.dwFlags6 & FORCESWAPEFFECT) param[6] = dxw.SwapEffect;\t\t\t//Swap effect;\n\t\t\tdwD3DSwapEffect = param[6];\n\t\t\tparam[7] = 0;\t\t\t//hDeviceWindow\n\t\t\tdxw.SetFullScreen(~param[8]?TRUE:FALSE); \n\t\t\tparam[8] = 1;\t\t\t//Windowed\n\t\t\t//param[11] = D3DPRESENTFLAG_DEVICECLIP;\t\t\t//Flags;\n\t\t\tparam[12] = 0;\t\t\t//FullScreen_RefreshRateInHz;\n\t\t\tparam[13] = D3DPRESENT_INTERVAL_DEFAULT;\t//PresentationInterval\n\t\t}\n\t\tres = (*pCreateDevice9)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, ppd3dd);\n\t\tif(res){\n\t\t\tOutTraceD3D(\"err=%x(%s) switching to mode=%d(%s)\\n\", res, ExplainDDError(res), mode.Format, ExplainD3DSurfaceFormat(mode.Format));\n\t\t\tparam[2] = mode.Format; // first attempt: current screen mode\n\t\t\tres = (*pCreateDevice9)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, ppd3dd);\n\t\t}\n\t\tif(res){\n\t\t\tOutTraceD3D(\"err=%x(%s) switching to mode=D3DFMT_UNKNOWN\\n\", res, ExplainDDError(res));\n\t\t\tparam[2] = D3DFMT_UNKNOWN; // second attempt: unknown, good for windowed mode\n\t\t\tres = (*pCreateDevice9)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, ppd3dd);\n\t\t}\n\t}\n\telse{\n\t\tif(dxw.Windowize){\n\t\t\tif(dxw.dwFlags6 & FORCESWAPEFFECT) param[5] = dxw.SwapEffect;\t\t\t//Swap effect;\n\t\t\tdwD3DSwapEffect = param[5];\n\t\t\tparam[6] = 0;\t\t\t//hDeviceWindow\n\t\t\tdxw.SetFullScreen(~param[7]?TRUE:FALSE); \n\t\t\tparam[7] = 1;\t\t\t//Windowed\n\t\t\t//param[10] = D3DPRESENTFLAG_DEVICECLIP;\t\t\t//Flags;\n\t\t\tparam[11] = 0;\t\t\t//FullScreen_RefreshRateInHz;\n\t\t\tparam[12] = D3DPRESENT_INTERVAL_DEFAULT;\t//PresentationInterval\n\t\t}\n\t\tres = (*pCreateDevice8)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, ppd3dd);\n\t\tif(res){\n\t\t\tOutTraceD3D(\"err=%x(%s) switching to mode=%d(%s)\\n\", res, ExplainDDError(res), mode.Format, ExplainD3DSurfaceFormat(mode.Format));\n\t\t\tparam[2] = mode.Format; // first attempt: current screen mode\n\t\t\tres = (*pCreateDevice8)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, ppd3dd);\n\t\t}\n\t\tif(res){\n\t\t\tOutTraceD3D(\"err=%x(%s) switching to mode=D3DFMT_UNKNOWN\\n\", res, ExplainDDError(res));\n\t\t\tparam[2] = D3DFMT_UNKNOWN; // second attempt: unknown, good for windowed mode\n\t\t\tres = (*pCreateDevice8)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, ppd3dd);\n\t\t}\n\t}\n\n\tif(res){\n\t\tOutTraceD3D(\"FAILED! err=%x(%s)\\n\", res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\tOutTraceD3D(\"SUCCESS! device=%x\\n\", *ppd3dd);\n\tlpD3DActiveDevice = *ppd3dd;\n\n\tif((dxw.dwFlags8 & D3D8BACK16) && (dwD3DVersion == 8)){\n\t\tdwD3D8InitEmulation(*ppd3dd);\n\t}\n\n\tif(dwD3DVersion == 8){ \n\t\tHookD3DDevice8(ppd3dd);\n\t}\n\telse {\n\t\tHookD3DDevice9(ppd3dd);\n\t}\n\n\tdxw.SetVSyncDelays(mode.RefreshRate);\n\n\tGetHookInfo()->IsFullScreen = dxw.IsFullScreen();\n\tGetHookInfo()->DXVersion=(short)dwD3DVersion;\n\tGetHookInfo()->Height=(short)dxw.GetScreenHeight();\n\tGetHookInfo()->Width=(short)dxw.GetScreenWidth();\n\tGetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount;\n\treturn DD_OK;\n}\n\nHRESULT WINAPI extCreateDevice8(void *lpd3d, UINT adapter, D3DDEVTYPE dt, HWND hfw, DWORD bf, D3DPRESENT_PARAMETERS *ppp, void **ppd3dd)\n{ return extCreateDevice(lpd3d, adapter, dt, hfw, bf, ppp, ppd3dd, 8); }\nHRESULT WINAPI extCreateDevice9(void *lpd3d, UINT adapter, D3DDEVTYPE dt, HWND hfw, DWORD bf, D3DPRESENT_PARAMETERS *ppp, void **ppd3dd)\n{ return extCreateDevice(lpd3d, adapter, dt, hfw, bf, ppp, ppd3dd, 9); }\n\n\nHRESULT WINAPI extCreateDeviceEx(void *lpd3d, UINT adapter, D3DDEVTYPE devicetype,\n\tHWND hfocuswindow, DWORD behaviorflags, D3DPRESENT_PARAMETERS *ppresentparam, D3DDISPLAYMODEEX *pFullscreenDisplayMode, void **ppd3dd)\n{\n\tHRESULT res;\n\tDWORD param[64], *tmp;\n\tD3DDISPLAYMODE mode;\n\n\tOutTraceD3D(\"CreateDeviceEx: D3DVersion=%d lpd3d=%x adapter=%x hFocusWnd=%x behavior=%x, size=(%d,%d)\\n\",\n\t\tdwD3DVersion, lpd3d, adapter, hfocuswindow, behaviorflags, ppresentparam->BackBufferWidth, ppresentparam->BackBufferHeight);\n\n\tmemcpy(param, ppresentparam, 56);\n\tdxw.SethWnd(hfocuswindow);\n\tdxw.SetScreenSize(param[0], param[1]);\n\n\tif(dxw.Windowize) hfocuswindow=FixD3DWindowFrame(hfocuswindow);\n\n\tif(IsTraceD3D){\n\t    tmp = param;\n\t\tDWORD SwapEffect;\n\t\tOutTrace(\"D3D%d::CreateDeviceEx\\n\", dwD3DVersion);\n\t\tOutTrace(\"  Adapter = %i\\n\", adapter);\n\t\tOutTrace(\"  DeviceType = %i\\n\", devicetype);\n\t\tOutTrace(\"  hFocusWindow = 0x%x\\n\", hfocuswindow);\n\t\tOutTrace(\"  BehaviorFlags = 0x%x\\n\", behaviorflags);\n\t\tOutTrace(\"    BackBufferWidth = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    BackBufferHeight = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    BackBufferFormat = %i(%s)\\n\", *(tmp ++), ExplainD3DSurfaceFormat(param[2]));\n\t\tOutTrace(\"    BackBufferCount = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    MultiSampleType = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    MultiSampleQuality = %i\\n\", *(tmp ++));\n\t\tSwapEffect = *(tmp ++);\n\t\tOutTrace(\"    SwapEffect = 0x%x(%s)\\n\", SwapEffect, ExplainSwapEffect(SwapEffect));\n\t\tOutTrace(\"    hDeviceWindow = 0x%x\\n\", *(tmp ++));\n\t\tOutTrace(\"    Windowed = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    EnableAutoDepthStencil = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    AutoDepthStencilFormat = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    Flags = 0x%x\\n\", *(tmp ++));\n\t\tOutTrace(\"    FullScreen_RefreshRateInHz = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    PresentationInterval = 0x%x\\n\", *(tmp ++));\n\t}\n\n\t//((LPDIRECT3D9)lpd3d)->GetAdapterDisplayMode(0, &mode);\n\t(*pGetAdapterDisplayMode9)(lpd3d, 0, &mode);\n\tOutTraceD3D(\"    Current Format = %d(%s)\\n\", mode.Format, ExplainD3DSurfaceFormat(mode.Format));\n\tOutTraceD3D(\"    Current ScreenSize = (%dx%d)\\n\", mode.Width, mode.Height);\n\tOutTraceD3D(\"    Current Refresh Rate = %d\\n\", mode.RefreshRate);\n\n\tif((dxw.dwFlags4 & NOD3DRESET) && dxw.Windowize){ \n\t\tRECT desktop;\n\t\t// Get a handle to the desktop window\n\t\tconst HWND hDesktop = (*pGetDesktopWindow)();\n\t\t// Get the size of screen to the variable desktop\n\t\t(*pGetWindowRect)(hDesktop, &desktop);\n\t\t// The top left corner will have coordinates (0,0)\n\t\t// and the bottom right corner will have coordinates\n\t\t// (horizontal, vertical)\n\t\tparam[0] = desktop.right;\n\t\tparam[1] = desktop.bottom;\t\t\t\n\t}\n\n\tif(dxw.Windowize){\n\t\tif(dxw.dwFlags6 & FORCESWAPEFFECT) param[6] = dxw.SwapEffect;\t\t\t//Swap effect;\n\t\tdwD3DSwapEffect = param[6];\n\t\t//param[7] = 0;\t\t\t//hDeviceWindow\n\t\tparam[7] = (DWORD)dxw.GethWnd();\t\t\t//hDeviceWindow\n\t\tdxw.SetFullScreen(~param[8]?TRUE:FALSE); \n\t\tparam[8] = 1;\t\t\t//Windowed\n\t\tparam[12] = 0;\t\t\t//FullScreen_RefreshRateInHz;\n\t\tparam[13] = D3DPRESENT_INTERVAL_DEFAULT;\t//PresentationInterval\n\t\t// from MSDN:\n\t\t// The display mode for when the device is set to fullscreen. See D3DDISPLAYMODEEX. \n\t\t// If BehaviorFlags specifies D3DCREATE_ADAPTERGROUP_DEVICE, this parameter is an array. \n\t\t// This parameter must be NULL for windowed mode.\n\t\tpFullscreenDisplayMode = NULL;\n\t}\n\n\tres = (*pCreateDeviceEx)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, pFullscreenDisplayMode, ppd3dd);\n\tif(res){\n\t\tOutTraceD3D(\"err=%x(%s) switching to mode=%d(%s)\\n\", res, ExplainDDError(res), mode.Format, ExplainD3DSurfaceFormat(mode.Format));\n\t\tparam[2] = mode.Format; // first attempt: current screen mode\n\t\tres = (*pCreateDeviceEx)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, pFullscreenDisplayMode, ppd3dd);\n\t}\n\tif(res){\n\t\tOutTraceD3D(\"err=%x(%s) switching to mode=D3DFMT_UNKNOWN\\n\", res, ExplainDDError(res));\n\t\tparam[2] = D3DFMT_UNKNOWN; // second attempt: unknown, good for windowed mode\n\t\tres = (*pCreateDeviceEx)(lpd3d, 0, devicetype, hfocuswindow, behaviorflags, param, pFullscreenDisplayMode, ppd3dd);\n\t}\n\tif(res){\n\t\tOutTraceD3D(\"FAILED! err=%x(%s)\\n\", res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\tOutTraceD3D(\"SUCCESS!\\n\"); \n\tlpD3DActiveDevice = *ppd3dd;\n\n\tHookD3DDevice9(ppd3dd);\n\n\tdxw.SetVSyncDelays(mode.RefreshRate);\n\n\tGetHookInfo()->IsFullScreen = dxw.IsFullScreen();\n\tGetHookInfo()->DXVersion=(short)dwD3DVersion;\n\tGetHookInfo()->Height=(short)dxw.GetScreenHeight();\n\tGetHookInfo()->Width=(short)dxw.GetScreenWidth();\n\tGetHookInfo()->ColorDepth=(short)dxw.VirtualPixelFormat.dwRGBBitCount;\n\t\n\treturn DD_OK;\n}\n\nstatic HRESULT WINAPI extSetRenderState(SetRenderState_Type pSetRenderState, void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) \n{\n\tHRESULT res;\n\tOutTraceD3D(\"SetRenderState: d3dd=%x State=%x(%s) Value=%x\\n\", pd3dd, State, ExplainD3DRenderState(State), Value);\n\n\tif((dxw.dwFlags4 & ZBUFFERALWAYS) && (State == D3DRS_ZFUNC)) {\n\t\tOutTraceD3D(\"SetRenderState: FIXED State=ZFUNC Value=%s->D3DCMP_ALWAYS\\n\", ExplainRenderstateValue(Value));\n\t\tValue = D3DCMP_ALWAYS;\n\t}\n\tif((dxw.dwFlags2 & WIREFRAME) && (State == D3DRS_FILLMODE)){\n\t\tOutTraceD3D(\"SetRenderState: FIXED State=FILLMODE Value=%x->D3DFILL_WIREFRAME\\n\", Value);\n\t\tValue = D3DFILL_WIREFRAME;\n\t}\n\tif((dxw.dwFlags4 & DISABLEFOGGING) && (State == D3DRS_FOGENABLE)){\n\t\tOutTraceD3D(\"SetRenderState: FIXED State=FOGENABLE Value=%x->FALSE\\n\", Value);\n\t\tValue = FALSE;\n\t}\n\tif((dxw.dwFlags5 & TEXTURETRANSP) && (State == D3DRS_ALPHABLENDENABLE)){\n\t\tOutTraceD3D(\"SetRenderState: FIXED State=ALPHABLENDENABLE Value=%x->TRUE\\n\", Value);\n\t\tValue = TRUE;\n\t}\n\n\tres=(*pSetRenderState)(pd3dd, State, Value);\n\tif(res) OutTraceE(\"SetRenderState: res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extSetRenderState8(void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) \n{ return extSetRenderState(pSetRenderState8, pd3dd, State, Value); }\nHRESULT WINAPI extSetRenderState9(void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) \n{ return extSetRenderState(pSetRenderState9, pd3dd, State, Value); }\n\nstatic HRESULT WINAPI extGetRenderState(GetRenderState_Type pGetRenderState, void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) \n{\n\treturn (*pGetRenderState)(pd3dd, State, Value);\n}\n\nHRESULT WINAPI extGetRenderState8(void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) \n{ return extGetRenderState(pSetRenderState8, pd3dd, State, Value); }\nHRESULT WINAPI extGetRenderState9(void *pd3dd, D3DRENDERSTATETYPE State, DWORD Value) \n{ return extGetRenderState(pSetRenderState9, pd3dd, State, Value); }\n\nHRESULT WINAPI extGetViewport(void *pd3dd, D3DVIEWPORT9 *pViewport)\n{\n\treturn (*pGetViewport)(pd3dd, pViewport);\n}\n\nHRESULT WINAPI extSetViewport(void *pd3dd, D3DVIEWPORT9 *pViewport)\n{\n\tRECT client;\n\tPOINT p={0,0};\n\t(*pGetClientRect)(dxw.GethWnd(), &client);\n\tOutTraceD3D(\"SetViewport: declared pos=(%d,%d) size=(%d,%d) depth=(%f;%f)\\n\", \n\t\tpViewport->X, pViewport->Y, pViewport->Width, pViewport->Height, pViewport->MinZ, pViewport->MaxZ);\n\tif(IsDebug) OutTrace(\"SetViewport: DEBUG win=(%d,%d) screen=(%d,%d)\\n\",\n\t\tclient.right, client.bottom, dxw.GetScreenWidth(), dxw.GetScreenHeight());\n\tpViewport->X = (pViewport->X * (int)client.right) / (int)dxw.GetScreenWidth();\n\tpViewport->Y = (pViewport->Y * (int)client.bottom) / (int)dxw.GetScreenHeight();\n\tpViewport->Width = (pViewport->Width * (int)client.right) / (int)dxw.GetScreenWidth();\n\tpViewport->Height = (pViewport->Height * (int)client.bottom) / (int)dxw.GetScreenHeight();\n\tOutTraceD3D(\"SetViewport: remapped pos=(%d,%d) size=(%d,%d)\\n\", \n\t\tpViewport->X, pViewport->Y, pViewport->Width, pViewport->Height);\n\treturn (*pSetViewport)(pd3dd, pViewport);\n}\n\nstatic HRESULT WINAPI extCreateAdditionalSwapChain(int dwD3DVersion, void *lpd3dd, D3DPRESENT_PARAMETERS *pPresentationParameters, IDirect3DSwapChain9 **ppSwapChain)\n{\n\tHRESULT res, res2;\n\tDWORD param[64], *tmp;\n\tD3DDISPLAYMODE mode;\n\tCreateAdditionalSwapChain_Type pCreateAdditionalSwapChain;\n\tReset_Type pReset;\n\tGetAdapterDisplayMode_Type pGetAdapterDisplayMode;\n\n\tOutTraceD3D(\"CreateAdditionalSwapChain(%d): d3d=%x\\n\", dwD3DVersion, lpd3dd);\n\n\tpCreateAdditionalSwapChain = (dwD3DVersion == 8) ? pCreateAdditionalSwapChain8 : pCreateAdditionalSwapChain9;\n\tpReset = (dwD3DVersion == 8) ? pReset8 : pReset9;\n\tpGetAdapterDisplayMode = (dwD3DVersion == 8) ? pGetAdapterDisplayMode8 : pGetAdapterDisplayMode9;\n\n\tmemcpy(param, pPresentationParameters, (dwD3DVersion == 9)?56:52);\n\tdxw.SetScreenSize(param[0], param[1]);\n\tif(dxw.Windowize) FixD3DWindowFrame(dxw.GethWnd());\n\n\tif(IsTraceD3D){\n\t    tmp = param;\n\t\tDWORD SwapEffect;\n\t\tOutTrace(\"D3D%d::CreateAdditionalSwapChain\\n\", dwD3DVersion);\n\t\tOutTrace(\"    BackBufferWidth = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    BackBufferHeight = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    BackBufferFormat = %i(%s)\\n\", *(tmp ++), ExplainD3DSurfaceFormat(param[2]));\n\t\tOutTrace(\"    BackBufferCount = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    MultiSampleType = %i\\n\", *(tmp ++));\n\t\tif(dwD3DVersion == 9) OutTrace(\"    MultiSampleQuality = %i\\n\", *(tmp ++));\n\t\tSwapEffect = *(tmp ++);\n\t\tOutTrace(\"    SwapEffect = 0x%x(%s)\\n\", SwapEffect, ExplainSwapEffect(SwapEffect));\n\t\tOutTrace(\"    hDeviceWindow = 0x%x\\n\", *(tmp ++));\n\t\tOutTrace(\"    Windowed = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    EnableAutoDepthStencil = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    AutoDepthStencilFormat = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    Flags = 0x%x\\n\", *(tmp ++));\n\t\tOutTrace(\"    FullScreen_RefreshRateInHz = %i\\n\", *(tmp ++));\n\t\tOutTrace(\"    PresentationInterval = 0x%x\\n\", *(tmp ++));\n\t}\n\n\tres2=(*pGetAdapterDisplayMode)(lpd3dd, D3DADAPTER_DEFAULT, &mode);\n\n\tif(res2==DD_OK){\n\tOutTraceD3D(\"    Current Format = %d(%s)\\n\", mode.Format, ExplainD3DSurfaceFormat(mode.Format));\n\tOutTraceD3D(\"    Current ScreenSize = (%dx%d)\\n\", mode.Width, mode.Height);\n\tOutTraceD3D(\"    Current Refresh Rate = %d\\n\", mode.RefreshRate);\n\t}\n\telse\n\t\tOutTraceE(\"CreateAdditionalSwapChain: GetAdapterDisplayMode err=%x(%s)\\n\", res2, ExplainDDError(res2));\n\n\tif(dxw.Windowize){\n\t\tif(dwD3DVersion == 9){\n\t\t\tif(dxw.dwFlags6 & FORCESWAPEFFECT) param[6] = dxw.SwapEffect;\t\t\t//Swap effect;\n\t\t\tdwD3DSwapEffect = param[6];\n\t\t\tparam[7] = 0;\t\t\t//hDeviceWindow\n\t\t\tdxw.SetFullScreen(~param[8]?TRUE:FALSE); \n\t\t\tparam[8] = 1;\t\t\t//Windowed\n\t\t\tparam[12] = 0;\t\t\t//FullScreen_RefreshRateInHz;\n\t\t\tparam[13] = D3DPRESENT_INTERVAL_DEFAULT;\t//PresentationInterval\n\t\t}\n\t\telse{\n\t\t\tif(dxw.dwFlags6 & FORCESWAPEFFECT) param[5] = dxw.SwapEffect;\t\t\t//Swap effect;\n\t\t\tdwD3DSwapEffect = param[5];\n\t\t\tparam[6] = 0;\t\t\t//hDeviceWindow\n\t\t\tdxw.SetFullScreen(~param[7]?TRUE:FALSE); \n\t\t\tparam[7] = 1;\t\t\t//Windowed\n\t\t\tparam[11] = 0;\t\t\t//FullScreen_RefreshRateInHz;\n\t\t\tparam[12] = D3DPRESENT_INTERVAL_DEFAULT;\t//PresentationInterval\n\t\t}\n\t}\n\n\tif(res2 == D3DERR_DEVICELOST){\n\t\tres2 = (*pReset)(lpd3dd, (D3DPRESENT_PARAMETERS *)param);\n\t\tif(res2 != DD_OK) OutTraceE(\"CreateAdditionalSwapChain: Reset err=%x(%s)\\n\", res2, ExplainDDError(res2));\n\t}\n\n\tres=(*pCreateAdditionalSwapChain)(lpd3dd, (D3DPRESENT_PARAMETERS *)param, ppSwapChain);\n\tif(res && (res2==DD_OK)){\n\t\tOutTraceD3D(\"err=%x(%s) switching to mode=%d(%s)\\n\", res, ExplainDDError(res), mode.Format, ExplainD3DSurfaceFormat(mode.Format));\n\t\tparam[2] = mode.Format; // first attempt: current screen mode\n\t\tres=(*pCreateAdditionalSwapChain)(lpd3dd, (D3DPRESENT_PARAMETERS *)param, ppSwapChain);\n\t}\n\tif(res){\n\t\tOutTraceD3D(\"switching to mode=D3DFMT_UNKNOWN\\n\");\n\t\tparam[2] = D3DFMT_UNKNOWN; // second attempt: unknown, good for windowed mode\n\t\tres=(*pCreateAdditionalSwapChain)(lpd3dd, (D3DPRESENT_PARAMETERS *)param, ppSwapChain);\n\t}\n\t//if(res){\n\t//\tOutTraceD3D(\"switching to size=0,0\\n\");\n\t//\tparam[0] = param[1] = 0; // third attempt: unknown, good for windowed mode\n\t//\tres=(*pCreateAdditionalSwapChain)(lpd3dd, (D3DPRESENT_PARAMETERS *)param, ppSwapChain);\n\t//}\n\tif(res) {\n\t\tOutTraceE(\"CreateAdditionalSwapChain ERROR: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t}\n\n\t(dwD3DVersion == 9) ? HookD3DDevice9(&lpd3dd) : HookD3DDevice8(&lpd3dd);\n\tdxw.SetVSyncDelays(mode.RefreshRate);\n\treturn res;\n}\n\nHRESULT WINAPI extCreateAdditionalSwapChain8(void *lpd3dd, D3DPRESENT_PARAMETERS *pPresentationParameters, IDirect3DSwapChain9 **ppSwapChain)\n{ return extCreateAdditionalSwapChain(8, lpd3dd, pPresentationParameters, ppSwapChain); }\nHRESULT WINAPI extCreateAdditionalSwapChain9(void *lpd3dd, D3DPRESENT_PARAMETERS *pPresentationParameters, IDirect3DSwapChain9 **ppSwapChain)\n{ return extCreateAdditionalSwapChain(9, lpd3dd, pPresentationParameters, ppSwapChain); }\n\n// to do:\n// hook SetCursorPosition ShowCursor to handle cursor\n\nHRESULT WINAPI extD3D10CreateDevice(\n\tIDXGIAdapter *pAdapter, \n\tD3D10_DRIVER_TYPE DriverType, \n\tHMODULE Software, \n\tUINT Flags, \n\tUINT SDKVersion, \n\tID3D10Device **ppDevice)\n{\n\tHRESULT res;\n\t//D3D10_VIEWPORT ViewPort;\n\tOutTraceD3D(\"D3D10CreateDevice: DriverType=%x Flags=%x SDKVersion=%x\\n\", DriverType, Flags, SDKVersion);\n\t//return 0x887a0004;\n\tres=(*pD3D10CreateDevice)(pAdapter, DriverType, Software, Flags, SDKVersion, ppDevice);\n\tif(res){\n\t\tOutTraceE(\"D3D10CreateDevice: ret=%x(%s)\\n\", res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\t// useless ....\n\t//SetHook((void *)(*(DWORD *)*ppDevice + 120), extRSSetViewports10, (void **)&pRSSetViewports10, \"RSSetViewports(D10)\");\n\n\t// useless ....\n\t//if(dxw.Windowize){\n\t//\tViewPort.TopLeftX=dxw.iPosX;\n\t//\tViewPort.TopLeftY=dxw.iPosY;\n\t//\tViewPort.Width=dxw.iSizX;\n\t//\tViewPort.Height=dxw.iSizY;\n\t//\tViewPort.MinDepth=1.0;\n\t//\tViewPort.MaxDepth=1.0;\n\t//\t(*pRSSetViewports10)((void *)*ppDevice, 1, (D3D10_VIEWPORT *)&ViewPort);\n\t//}\n\n\tOutTraceD3D(\"D3D10CreateDevice: ret=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extD3D10CreateDevice1(\n\tIDXGIAdapter *pAdapter, \n\tD3D10_DRIVER_TYPE DriverType, \n\tHMODULE Software, \n\tUINT Flags, \n\tD3D10_FEATURE_LEVEL1 HardwareLevel,\n\tUINT SDKVersion, \n\tID3D10Device **ppDevice)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"D3D10CreateDevice1: DriverType=%x Flags=%x HardwareLevel=%x SDKVersion=%x\\n\", DriverType, Flags, HardwareLevel, SDKVersion);\n\tres=(*pD3D10CreateDevice1)(pAdapter, DriverType, Software, Flags, HardwareLevel, SDKVersion, ppDevice);\n\tSetHook((void *)(*(DWORD *)*ppDevice + 100), extRSSetViewports10, (void **)&pRSSetViewports10, \"RSSetViewports(D10)\");\n\tOutTraceD3D(\"D3D10CreateDevice1: ret=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extD3D10CreateDeviceAndSwapChain(\n\tIDXGIAdapter *pAdapter, \n\tD3D10_DRIVER_TYPE DriverType, \n\tHMODULE Software, \n\tUINT Flags, \n\tUINT SDKVersion, \n\tDXGI_SWAP_CHAIN_DESC *pSwapChainDesc, \n\tIDXGISwapChain **ppSwapChain, \n\tID3D10Device **ppDevice)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"D3D10CreateDeviceAndSwapChain: DriverType=%x Flags=%x SDKVersion=%x\\n\", DriverType, Flags, SDKVersion);\n\t//return 0x887a0004;\n\tif(dxw.Windowize){\n\t\tpSwapChainDesc->OutputWindow = dxw.GethWnd();\n\t\tpSwapChainDesc->Windowed = true;\t\n\t}\n\tres=(*pD3D10CreateDeviceAndSwapChain)(pAdapter, DriverType, Software, Flags, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice);\n\tOutTraceD3D(\"D3D10CreateDeviceAndSwapChain ret=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extD3D10CreateDeviceAndSwapChain1(\n\tIDXGIAdapter *pAdapter, \n\tD3D10_DRIVER_TYPE DriverType, \n\tHMODULE Software, \n\tUINT Flags, \n\tUINT SDKVersion, \n\tDXGI_SWAP_CHAIN_DESC *pSwapChainDesc, \n\tIDXGISwapChain **ppSwapChain, \n\tID3D10Device **ppDevice)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"D3D10CreateDeviceAndSwapChain1: DriverType=%x Flags=%x SDKVersion=%x\\n\", DriverType, Flags, SDKVersion);\n\t//return 0x887a0004;\n\tif(dxw.Windowize){\n\t\tpSwapChainDesc->OutputWindow = dxw.GethWnd();\n\t\tpSwapChainDesc->Windowed = true;\t\n\t}\n\tres=(*pD3D10CreateDeviceAndSwapChain1)(pAdapter, DriverType, Software, Flags, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice);\n\tOutTraceD3D(\"D3D10CreateDeviceAndSwapChain1 ret=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extD3D11CreateDevice(\n\tIDXGIAdapter *pAdapter, \n\tD3D_DRIVER_TYPE DriverType,\n\tHMODULE Software,\n\tUINT Flags,\n\tconst D3D_FEATURE_LEVEL *pFeatureLevels,\n\tUINT FeatureLevels,\n\tUINT SDKVersion,\n\tID3D11Device **ppDevice,\n\tD3D_FEATURE_LEVEL *pFeatureLevel,\n\tID3D11DeviceContext **ppImmediateContext)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"D3D11CreateDevice: DriverType=%x Flags=%x FeatureLevels=%x SDKVersion=%x\\n\", DriverType, Flags, FeatureLevels, SDKVersion);\n\t//return 0x887a0004;\n\tres=(*pD3D11CreateDevice)(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, ppDevice, pFeatureLevel, ppImmediateContext);\n\tif(res){\n\t\tOutTraceE(\"D3D11CreateDevice: ret=%x\\n\", res);\n\t\treturn res;\n\t}\n\tSetHook((void *)(*(DWORD *)ppImmediateContext + 148), extRSSetViewports11, (void **)&pRSSetViewports11, \"RSSetViewports(D11)\");\n\t//SetHook((void *)(*(DWORD *)ppImmediateContext + 152), extRSSetScissorRects, (void **)&pRSSetScissorRects, \"RSSetScissorRects(D11)\");\n\tOutTraceD3D(\"D3D11CreateDevice ret=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extD3D11CreateDeviceAndSwapChain(\n\tIDXGIAdapter *pAdapter,\n\tD3D_DRIVER_TYPE DriverType,\n\tHMODULE Software,\n\tUINT Flags,\n\tconst D3D_FEATURE_LEVEL *pFeatureLevels,\n\tUINT FeatureLevels,\n\tUINT SDKVersion,\n\tconst DXGI_SWAP_CHAIN_DESC *pSwapChainDesc,\n\tIDXGISwapChain **ppSwapChain,\n\tID3D11Device **ppDevice,\n\tD3D_FEATURE_LEVEL *pFeatureLevel,\n\tID3D11DeviceContext **ppImmediateContext)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"D3D11CreateDeviceAndSwapChain\\n\");\n\tres=(*pD3D11CreateDeviceAndSwapChain)(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice, pFeatureLevel, ppImmediateContext);\n\tOutTraceD3D(\"D3D11CreateDeviceAndSwapChain ret=%x\\n\", res);\n\treturn res;\n}\n\nvoid WINAPI extRSSetViewports10(void *This, UINT NumViewports, D3D10_VIEWPORT *pViewports)\n{\n\tOutTraceD3D(\"RSSetViewports: NumViewports=%d\\n\", NumViewports);\n\n\tif(dxw.Windowize && (NumViewports==1)){\n\t\tpViewports->TopLeftX=dxw.iPosX;\n\t\tpViewports->TopLeftY=dxw.iPosY;\n\t\tpViewports->Width=dxw.iSizX;\n\t\tpViewports->Height=dxw.iSizY;\n\t}\n\n\t(*pRSSetViewports10)(This, NumViewports, pViewports);\n}\n\nvoid WINAPI extRSSetViewports11(ID3D11DeviceContext *This, UINT NumViewports, D3D11_VIEWPORT *pViewports)\n{\n\tOutTraceD3D(\"RSSetViewports: NumViewports=%d\\n\", NumViewports);\n\n\tif(dxw.Windowize && (NumViewports==1)){\n\t\tpViewports->TopLeftX=(FLOAT)dxw.iPosX;\n\t\tpViewports->TopLeftY=(FLOAT)dxw.iPosY;\n\t\tpViewports->Width=(FLOAT)dxw.iSizX;\n\t\tpViewports->Height=(FLOAT)dxw.iSizY;\n\t}\n\n\t(*pRSSetViewports11)(This, NumViewports, pViewports);\n}\n\nstatic ULONG WINAPI ReleaseDev(int d3dversion, ReleaseDev_Type pReleaseDev, void *lpdd)\n{\n\tULONG ActualRef;\n\tActualRef=(*pReleaseDev)(lpdd);\n\tOutTraceD3D(\"Release(D%d): lpdd=%x ret=%d\\n\", d3dversion, lpdd, ActualRef);\n\treturn ActualRef;\n}\n\nULONG WINAPI extReleaseDev8(void *lpdd)\n{ return ReleaseDev(8, pReleaseDev8, lpdd); }\nULONG WINAPI extReleaseDev9(void *lpdd)\n{ return ReleaseDev(9, pReleaseDev9, lpdd); }\n\nHRESULT WINAPI extGetDirect3D8(void *lpdd3dd, void **ppD3D8)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"Device::GetDirect3D(8): d3dd=%x\\n\", lpdd3dd);\n\tres=(*pGetDirect3D8)(lpdd3dd, ppD3D8);\n\tif(res)\n\t\tOutTraceE(\"Device::GetDirect3D ERROR: d3dd=%x ret=%x\\n\", lpdd3dd, res);\n\telse{\n\t\tOutTraceD3D(\"Device::GetDirect3D: d3dd=%x d3d=%x\\n\", lpdd3dd, *ppD3D8);\n\t\t// HookDirect3D8(*ppD3D8);\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extGetDirect3D9(void *lpdd3dd, void **ppD3D9)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"Device::GetDirect3D(9): d3dd=%x\\n\", lpdd3dd);\n\tres=(*pGetDirect3D9)(lpdd3dd, ppD3D9);\n\tif(res)\n\t\tOutTraceE(\"Device::GetDirect3D ERROR: d3dd=%x ret=%x\\n\", lpdd3dd, res);\n\telse{\n\t\tOutTraceD3D(\"Device::GetDirect3D: d3dd=%x d3d=%x\\n\", lpdd3dd, *ppD3D9);\n\t\t// re-hook d3d session: neeeded for Need for Speed Underground\n\t\t// commented out: NFSU works also without it ....\n\t\t// HookDirect3D9(*ppD3D9, FALSE);\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extCheckFullScreen(void)\n{\n\tHRESULT res;\n\tif(dxw.Windowize){\n\t\tOutTraceD3D(\"CheckFullScreen: return OK\\n\");\n\t\tres=0;\n\t}\n\telse{\n\t\tres=(*pCheckFullScreen)();\n\t\tOutTraceD3D(\"CheckFullScreen: return %x\\n\", res);\n\t}\n\treturn res;\n}\n\nstatic void WINAPI extSetGammaRamp(SetGammaRamp_Type pSetGammaRamp, void *lpdd3dd, UINT iSwapChain, DWORD Flags, D3DGAMMARAMP *pRamp)\n{\n\tOutTraceD3D(\"SetGammaRamp: dd3dd=%x SwapChain=%d flags=%x\\n\", lpdd3dd, iSwapChain, Flags);\n\tif (dxw.dwFlags2 & DISABLEGAMMARAMP) return;\n\t(*pSetGammaRamp)(lpdd3dd, iSwapChain, Flags, pRamp);\n}\n\nvoid WINAPI extSetGammaRamp8(void *lpdd3dd, UINT iSwapChain, DWORD Flags, D3DGAMMARAMP *pRamp)\n{ return extSetGammaRamp(pSetGammaRamp8, lpdd3dd, iSwapChain, Flags, pRamp); }\nvoid WINAPI extSetGammaRamp9(void *lpdd3dd, UINT iSwapChain, DWORD Flags, D3DGAMMARAMP *pRamp)\n{ return extSetGammaRamp(pSetGammaRamp9, lpdd3dd, iSwapChain, Flags, pRamp); }\n\nstatic void WINAPI extGetGammaRamp(GetGammaRamp_Type pGetGammaRamp, void *lpdd3dd, UINT iSwapChain, D3DGAMMARAMP *pRamp)\n{\n\tOutTraceD3D(\"GetGammaRamp: dd3dd=%x SwapChain=%d\\n\", lpdd3dd, iSwapChain);\n\t(*pGetGammaRamp)(lpdd3dd, iSwapChain, pRamp);\n}\n\nvoid WINAPI extGetGammaRamp8(void *lpdd3dd, UINT iSwapChain, D3DGAMMARAMP *pRamp)\n{ return extGetGammaRamp(pGetGammaRamp8, lpdd3dd, iSwapChain, pRamp); }\nvoid WINAPI extGetGammaRamp9(void *lpdd3dd, UINT iSwapChain, D3DGAMMARAMP *pRamp)\n{ return extGetGammaRamp(pGetGammaRamp9, lpdd3dd, iSwapChain, pRamp); }\n\nvoid WINAPI extSetCursorPosition9(void *lpdd3dd, int X, int Y, DWORD Flags)\n{\n\tOutTraceD3D(\"SetCursorPosition: dd3dd=%x pos=(%d,%d) flags=%x\\n\", lpdd3dd, X, Y, Flags);\n\tif(dxw.dwFlags2 & KEEPCURSORFIXED) return;\n\t// to do: proper scaling.....\n\t//(*pSetCursorPosition9)(lpdd3dd, X, Y, Flags);\n}\n\nvoid WINAPI extSetCursorPosition8(void *lpdd3dd, int X, int Y, DWORD Flags)\n{\n\tOutTraceD3D(\"SetCursorPosition: dd3dd=%x pos=(%d,%d) flags=%x\\n\", lpdd3dd, X, Y, Flags);\n\tif(dxw.dwFlags2 & KEEPCURSORFIXED) return;\n\t// to do: proper scaling.....\n\t//(*pSetCursorPosition8)(lpdd3dd, X, Y, Flags);\n}\n\n//ULONG WINAPI extCreateRenderTarget8(void *lpdd3dd, UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, BOOL Lockable, IDirect3DSurface8** ppSurface) \nULONG WINAPI extCreateRenderTarget8(void *lpdd3dd, UINT Width, UINT Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, BOOL Lockable, void** ppSurface) \n{\n\tULONG res;\n\n\tOutTraceD3D(\"Device::CreateRenderTarget(8): dd3dd=%x dim=(%dx%d) Format=%x Lockable=%x\\n\", \n\t\tlpdd3dd, Width, Height, Format, Lockable);\n\tres=(*pCreateRenderTarget8)(lpdd3dd, Width, Height, Format, MultiSample, Lockable, ppSurface);\n\tOutTraceD3D(\"Device::CreateRenderTarget(8): res=%x\\n\", res);\n\treturn res;\n}\n\nULONG WINAPI extBeginScene8(void *lpdd3dd)\n{\n\tULONG res;\n\tOutTraceB(\"Device::BeginScene(8): d3dd=%x\\n\", lpdd3dd);\n\tres=(*pBeginScene8)(lpdd3dd);\n\tif (res) OutTraceE(\"Device::BeginScene(8) ERROR: err=%x\\n\", res);\n\n\t//if(dxw.dwFlags5 & TEXTURETRANSP) (*pSetRenderState8)(lpdd3dd, D3DRS_ALPHABLENDENABLE, TRUE);\n\treturn res;\n}\n\nULONG WINAPI extBeginScene9(void *lpdd3dd)\n{\n\tULONG res;\n\tOutTraceB(\"Device::BeginScene(9): d3dd=%x\\n\", lpdd3dd);\n\tres=(*pBeginScene9)(lpdd3dd);\n\tif (res) OutTraceE(\"Device::BeginScene(9) ERROR: err=%x\\n\", res);\n\n\t//if(dxw.dwFlags5 & TEXTURETRANSP) (*pSetRenderState9)(lpdd3dd, D3DRS_ALPHABLENDENABLE, TRUE);\n\treturn res;\n}\n\nULONG WINAPI extEndScene8(void *lpdd3dd)\n{\n\tULONG res;\n\tOutTraceB(\"Device::EndScene(8): d3dd=%x\\n\", lpdd3dd);\n\tres=(*pEndScene8)(lpdd3dd);\n\tif (res) OutTraceE(\"Device::EndScene(8) ERROR: err=%x\\n\", res);\n\treturn res;\n}\n\nULONG WINAPI extEndScene9(void *lpdd3dd)\n{\n\tULONG res;\n\tOutTraceB(\"Device::EndScene(9): d3dd=%x\\n\", lpdd3dd);\n\tres=(*pEndScene9)(lpdd3dd);\n\tif (res) OutTraceE(\"Device::EndScene(9) ERROR: err=%x\\n\", res);\n\treturn res;\n}\n\nULONG WINAPI extSetTexture8(void *lpd3dd, DWORD Stage, void* pTexture)\n{\n\tULONG ret;\n\tif (dxw.dwFlags4 & NOTEXTURES) {\n\t\t(*pSetTexture8)(lpd3dd, Stage, NULL);\n\t\tOutTraceD3D(\"Device::SetTexture(8): d3dd=%x stage=%x\\n\", lpd3dd, Stage);\n\t\treturn DD_OK;\n\t}\n\tret = (*pSetTexture8)(lpd3dd, Stage, pTexture);\n\tOutTraceD3D(\"Device::SetTexture(8): d3dd=%x stage=%x texture=%x ret=%x\\n\", lpd3dd, Stage, pTexture, ret);\n\tif(pTexture) D3D8TextureHandling((void *)pTexture, Stage);\n\treturn ret;\n}\n\nULONG WINAPI extSetTexture9(void *lpd3dd, DWORD Stage, void* pTexture)\n{\n\tULONG ret;\n\tif (dxw.dwFlags4 & NOTEXTURES) {\n\t\t(*pSetTexture9)(lpd3dd, Stage, NULL);\n\t\tOutTraceD3D(\"Device::SetTexture(9): d3dd=%x stage=%x\\n\", lpd3dd, Stage);\n\t\treturn DD_OK;\n\t}\n\tret = (*pSetTexture9)(lpd3dd, Stage, pTexture);\n\tOutTraceD3D(\"Device::SetTexture(9): d3dd=%x stage=%x texture=%x ret=%x\\n\", lpd3dd, Stage, pTexture, ret);\n\tif(pTexture) D3D9TextureHandling((void *)pTexture, (int)Stage);\n\treturn ret;\n}\n\nBOOL WINAPI extShowCursor8(void *lpd3dd, BOOL bShow)\n{\n\tBOOL res, bNew;\n\tbNew=bShow;\n\tif(dxw.dwFlags2 & SHOWHWCURSOR) bNew=TRUE;\n\tif(dxw.dwFlags1 & HIDEHWCURSOR) bNew=FALSE;\n\tres=(*pShowCursor8)(lpd3dd, bNew);\n\tif(bNew==bShow)\n\t\tOutTraceD3D(\"Device::ShowCursor(8): d3dd=%x show=%x res=%x\\n\", lpd3dd, bNew, res);\n\telse\n\t\tOutTraceD3D(\"Device::ShowCursor(8): d3dd=%x show=%x->%x res=%x\\n\", lpd3dd, bShow, bNew, res);\n\treturn res;\n}\n\nBOOL WINAPI extShowCursor9(void *lpd3dd, BOOL bShow)\n{\n\tBOOL res, bNew;\n\tbNew=bShow;\n\tif(dxw.dwFlags2 & SHOWHWCURSOR) bNew=TRUE;\n\tif(dxw.dwFlags1 & HIDEHWCURSOR) bNew=FALSE;\n\tres=(*pShowCursor9)(lpd3dd, bNew);\n\tif(bNew==bShow)\n\t\tOutTraceD3D(\"Device::ShowCursor(9): d3dd=%x show=%x res=%x\\n\", lpd3dd, bNew, res);\n\telse\n\t\tOutTraceD3D(\"Device::ShowCursor(9): d3dd=%x show=%x->%x res=%x\\n\", lpd3dd, bShow, bNew, res);\n\treturn res;\n}\n\nvoid WINAPI voidDebugSetLevel(void) \n{\n\tOutTraceD3D(\"DebugSetLevel: SUPPRESS\\n\");\n}\n\nvoid WINAPI voidDebugSetMute(void) \n{\n\tOutTraceD3D(\"DebugSetMute: SUPPRESS\\n\");\n}\n\nBOOL  WINAPI voidDisableD3DSpy(void)\n{\n\tOutTraceD3D(\"DisableD3DSpy: SUPPRESS\\n\");\n\treturn FALSE;\n}\n\nHRESULT WINAPI voidDirect3DShaderValidatorCreate9(void) \n{\n\tOutTraceD3D(\"Direct3DShaderValidatorCreate9: SUPPRESS\\n\");\n\treturn 0;\n}\n\nstatic char *ExplainD3DDeviceType(D3DDEVTYPE DeviceType)\n{\n\tchar *s;\n\tswitch(DeviceType){\n\t\tcase D3DDEVTYPE_HAL: s=\"HAL\"; break;\n\t\tcase D3DDEVTYPE_NULLREF: s=\"NULLREF\"; break;\n\t\tcase D3DDEVTYPE_REF: s=\"REF\"; break;\n\t\tcase D3DDEVTYPE_SW: s=\"SW\"; break;\n\t\tdefault: s=\"unknown\"; break;\n\t}\n\treturn s;\n}\n\nstatic HRESULT WINAPI extCheckDeviceType(int d3dversion, CheckDeviceType_Type pCheckDeviceType, void *lpd3d, UINT Adapter, D3DDEVTYPE DevType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"CheckDeviceType(%d): d3d=%x adapter=%d devtype=%x(%s) backbufferformat=%d(%s) windowed=%x\\n\", \n\t\td3dversion, lpd3d, Adapter, DevType, ExplainD3DDeviceType(DevType), AdapterFormat, ExplainD3DSurfaceFormat(AdapterFormat), bWindowed);\n\tif(dxw.Windowize) bWindowed = TRUE;\n\tres = (*pCheckDeviceType)(lpd3d, Adapter, DevType, AdapterFormat, BackBufferFormat, bWindowed);\n\tOutTraceD3D(\"CheckDeviceType: res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extCheckDeviceType8(void *lpd3d, UINT Adapter, D3DDEVTYPE DevType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed)\n{ return extCheckDeviceType(8, pCheckDeviceType8, lpd3d, Adapter, DevType, AdapterFormat, BackBufferFormat, bWindowed); }\nHRESULT WINAPI extCheckDeviceType9(void *lpd3d, UINT Adapter, D3DDEVTYPE DevType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed)\n{ return extCheckDeviceType(9, pCheckDeviceType9, lpd3d, Adapter, DevType, AdapterFormat, BackBufferFormat, bWindowed); }\n\nHRESULT WINAPI extD3DGetDeviceCaps(int version, void *lpd3d, UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9* pCaps)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"GetDeviceCaps(%d): d3d=%x adapter=%d devtype=%x(%s)\\n\", version, lpd3d, Adapter, DeviceType, ExplainD3DDeviceType(DeviceType));\n\t\n\tif(version == 8)\n\t\tres=(*pD3DGetDeviceCaps8)(lpd3d, Adapter, DeviceType, (D3DCAPS8 *)pCaps);\n\telse\n\t\tres=(*pD3DGetDeviceCaps9)(lpd3d, Adapter, DeviceType, pCaps);\n\n\tif(res){\n\t\tOutTraceE(\"GetDeviceCaps: ERROR: err=%x\\n\", res);\n\t}\n\telse{\n\t\tif(IsDebug){\n\t\t\tOutTrace(\"GetDeviceCaps:\\n\\t\"\n\t\t\t\t\"DeviceType=%x(%s)\\n\\t\"\n\t\t\t\t\"Caps=%x Caps2=%x Caps3=%x\\n\\t\"\n\t\t\t\t\"PresentationIntervals=%x\\n\\t\"\n\t\t\t\t\"CursorCaps=%x DevCaps=%x\\n\\t\"\n\t\t\t\t\"PrimitiveMiscCaps=%x\\n\\t\"\n\t\t\t\t\"RasterCaps=%x\\n\\t\"\n\t\t\t\t\"ZCmpCaps=%x\\n\\t\"\n\t\t\t\t\"SrcBlendCaps=%x\\n\\t\"\n\t\t\t\t\"DestBlendCaps=%x\\n\\t\"\n\t\t\t\t\"AlphaCmpCaps=%x\\n\\t\"\n\t\t\t\t\"ShadeCaps=%x\\n\\t\"\n\t\t\t\t\"TextureCaps=%x\\n\\t\",\n\t\t\t\tpCaps->DeviceType, ExplainD3DDeviceType(pCaps->DeviceType), \n\t\t\t\tpCaps->Caps, pCaps->Caps2, pCaps->Caps3, \n\t\t\t\tpCaps->PresentationIntervals,\n\t\t\t\tpCaps->CursorCaps, pCaps->DevCaps,\n\t\t\t\tpCaps->PrimitiveMiscCaps, \n\t\t\t\tpCaps->RasterCaps, \n\t\t\t\tpCaps->ZCmpCaps, \n\t\t\t\tpCaps->SrcBlendCaps, \n\t\t\t\tpCaps->DestBlendCaps, \n\t\t\t\tpCaps->AlphaCmpCaps, \t\t\t\t\n\t\t\t\tpCaps->ShadeCaps, \n\t\t\t\tpCaps->TextureCaps);\n\t\t\tOutTrace(\n\t\t\t\t\"TextureFilterCaps=%x\\n\\t\"\n\t\t\t\t\"CubeTextureFilterCaps=%x\\n\\t\"\n\t\t\t\t\"VolumeTextureFilterCaps=%x\\n\\t\"\n\t\t\t\t\"TextureAddressCaps=%x\\n\\t\"\n\t\t\t\t\"VolumeTextureAddressCaps=%x\\n\\t\"\n\t\t\t\t\"LineCaps=%x\\n\\t\"\n\t\t\t\t\"StencilCaps=%x\\n\\t\"\n\t\t\t\t\"FVFCaps=%x\\n\\t\"\n\t\t\t\t\"TextureOpCaps=%x\\n\\t\"\n\t\t\t\t\"VertexProcessingCaps=%x\\n\\t\",\n\t\t\t\tpCaps->TextureFilterCaps, \n\t\t\t\tpCaps->CubeTextureFilterCaps, \n\t\t\t\tpCaps->VolumeTextureFilterCaps, \n\t\t\t\tpCaps->TextureAddressCaps, \n\t\t\t\tpCaps->VolumeTextureAddressCaps, \n\t\t\t\tpCaps->LineCaps, \n\t\t\t\tpCaps->StencilCaps, \n\t\t\t\tpCaps->FVFCaps, \n\t\t\t\tpCaps->TextureOpCaps, \n\t\t\t\tpCaps->VertexProcessingCaps);\n\t\t\tOutTrace(\n\t\t\t\t\"MaxTexture(Width x Height)=(%dx%d)\\n\\t\"\n\t\t\t\t\"MaxVolumeExtent=%d\\n\\t\"\n\t\t\t\t\"MaxTextureRepeat=%d\\n\\t\"\n\t\t\t\t\"MaxTextureAspectRatio=%d\\n\\t\"\n\t\t\t\t\"MaxAnisotropy=%d\\n\\t\"\n\t\t\t\t\"MaxActiveLights=%d\\n\\t\"\n\t\t\t\t\"MaxUserClipPlanes=%x\\n\\t\"\n\t\t\t\t\"MaxUserClipPlanes=%x\\n\\t\"\n\t\t\t\t\"MaxVertexW=%f\\n\\t\"\n\t\t\t\t\"GuardBandLeft=%f\\n\\t\"\n\t\t\t\t\"GuardBandTop=%f\\n\\t\"\n\t\t\t\t\"GuardBandRight=%f\\n\\t\"\n\t\t\t\t\"GuardBandBottom=%f\\n\\t\"\n\t\t\t\t\"ExtentsAdjust=%f\\n\\t\"\n\t\t\t\t\"MaxPointSize=%f\\n\\t\"\n\t\t\t\t\"MaxTextureBlendStages=%d\\n\\t\"\n\t\t\t\t\"MaxSimultaneousTextures=%x\\n\\t\"\n\t\t\t\t\"MaxVertexBlendMatrices=%x\\n\\t\"\n\t\t\t\t\"MaxVertexBlendMatrixIndex=%x\\n\\t\"\n\t\t\t\t\"MaxPrimitiveCount=%d\\n\\t\"\n\t\t\t\t\"MaxVertexIndex=%x\\n\\t\"\n\t\t\t\t\"MaxStreams=%x\\n\\t\"\n\t\t\t\t\"MaxStreamStride=%x\\n\\t\"\n\t\t\t\t\"VertexShaderVersion=%x\\n\\t\"\n\t\t\t\t\"MaxVertexShaderConst=%d\\n\\t\"\n\t\t\t\t\"PixelShaderVersion=%x\\n\\t\"\n\t\t\t\t\"PixelShader1xMaxValue=%f\\n\",\n\t\t\t\tpCaps->MaxTextureWidth, pCaps->MaxTextureHeight, \n\t\t\t\tpCaps->MaxVolumeExtent, \n\t\t\t\tpCaps->MaxTextureRepeat, \n\t\t\t\tpCaps->MaxTextureAspectRatio, \n\t\t\t\tpCaps->MaxAnisotropy,\n\t\t\t\tpCaps->MaxActiveLights, \n\t\t\t\tpCaps->MaxUserClipPlanes, \n\t\t\t\tpCaps->MaxUserClipPlanes,\n\t\t\t\tpCaps->MaxVertexW, \n\t\t\t\tpCaps->GuardBandLeft, \n\t\t\t\tpCaps->GuardBandTop, \n\t\t\t\tpCaps->GuardBandRight, \n\t\t\t\tpCaps->GuardBandBottom, \n\t\t\t\tpCaps->ExtentsAdjust, \n\t\t\t\tpCaps->MaxPointSize,\n\t\t\t\tpCaps->MaxTextureBlendStages, \n\t\t\t\tpCaps->MaxSimultaneousTextures, \n\t\t\t\tpCaps->MaxVertexBlendMatrices, \n\t\t\t\tpCaps->MaxVertexBlendMatrixIndex,\n\t\t\t\tpCaps->MaxPrimitiveCount, \n\t\t\t\tpCaps->MaxVertexIndex, \n\t\t\t\tpCaps->MaxStreams, \n\t\t\t\tpCaps->MaxStreamStride, \n\t\t\t\tpCaps->VertexShaderVersion,\n\t\t\t\tpCaps->MaxVertexShaderConst, \n\t\t\t\tpCaps->PixelShaderVersion, \n\t\t\t\tpCaps->PixelShader1xMaxValue);\n\t\t\tif(version == 9) OutTrace(\n\t\t\t\t\"\\tDevCaps2=%x Reserved5=%x\\n\\t\"\n\t\t\t\t\"MaxNpatchTessellationLevel=%f\\n\\t\"\n\t\t\t\t\"MasterAdapterOrdinal=%i\\n\\t\"\n\t\t\t\t\"AdapterOrdinalInGroup=%i\\n\\t\"\n\t\t\t\t\"NumberOfAdaptersInGroup=%i\\n\\t\"\n\t\t\t\t\"DeclTypes=%x\\n\\t\"\n\t\t\t\t\"NumSimultaneousRTs=%x\\n\\t\"\n\t\t\t\t\"StretchRectFilterCaps=%x\\n\\t\"\n\t\t\t\t\"VertexTextureFilterCaps=%x\\n\\t\"\n\t\t\t\t\"MaxVShaderInstructionsExecuted=%x\\n\\t\"\n\t\t\t\t\"MaxPShaderInstructionsExecuted=%x\\n\\t\"\n\t\t\t\t\"MaxVertexShader30InstructionSlots=%x\\n\\t\"\n\t\t\t\t\"MaxPixelShader30InstructionSlots=%x\\n\",\n\t\t\t\tpCaps->DevCaps2, pCaps->Reserved5,\n\t\t\t\tpCaps->MaxNpatchTessellationLevel,\n\t\t\t\tpCaps->MasterAdapterOrdinal,\n\t\t\t\tpCaps->AdapterOrdinalInGroup,\n\t\t\t\tpCaps->NumberOfAdaptersInGroup,\n\t\t\t\tpCaps->DeclTypes,\n\t\t\t\tpCaps->NumSimultaneousRTs,\n\t\t\t\tpCaps->StretchRectFilterCaps,\n\t\t\t\tpCaps->VertexTextureFilterCaps,\n\t\t\t\tpCaps->MaxVShaderInstructionsExecuted,\n\t\t\t\tpCaps->MaxPShaderInstructionsExecuted,\n\t\t\t\tpCaps->MaxVertexShader30InstructionSlots,\n\t\t\t\tpCaps->MaxPixelShader30InstructionSlots);\n\t\t}\n\t}\n\n\tif(dxw.dwFlags7 & SUPPRESSOVERLAY){\n\t\tif(pCaps->Caps & D3DCAPS_OVERLAY) OutTraceDW(\"GetDeviceCaps(%d): SUPPRESS OVERLAY CAP\\n\", version);\n\t\tpCaps->Caps &= ~D3DCAPS_OVERLAY;\n\t}\n\t\n\treturn res;\n}\n\nHRESULT WINAPI extD3DGetDeviceCaps8(void *lpd3d, UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS8 *pCaps)\n{ return extD3DGetDeviceCaps(8, lpd3d, Adapter, DeviceType, (D3DCAPS9 *)pCaps); }\nHRESULT WINAPI extD3DGetDeviceCaps9(void *lpd3d, UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9 *pCaps)\n{ return extD3DGetDeviceCaps(9, lpd3d, Adapter, DeviceType, pCaps); }\n\nstatic HMONITOR WINAPI extGetAdapterMonitor(GetAdapterMonitor_Type pGetAdapterMonitor, void *lpd3d, UINT Adapter)\n{\n\tOutTraceD3D(\"GetAdapterMonitor: d3d=%x adapter=%d\\n\", lpd3d, Adapter);\n\tif((dxw.dwFlags2 & HIDEMULTIMONITOR) && (Adapter != D3DADAPTER_DEFAULT)){\n\t\tOutTraceD3D(\"GetAdapterMonitor: HIDE adapter=%d\\n\", Adapter);\n\t\treturn NULL;\n\t}\n\treturn (*pGetAdapterMonitor)(lpd3d, Adapter);\n}\n\nHMONITOR WINAPI extGetAdapterMonitor8(void *lpd3d, UINT Adapter)\n{ return extGetAdapterMonitor(pGetAdapterMonitor8, lpd3d, Adapter); }\nHMONITOR WINAPI extGetAdapterMonitor9(void *lpd3d, UINT Adapter)\n{ return extGetAdapterMonitor(pGetAdapterMonitor9, lpd3d, Adapter); }\n\n\nstatic UINT WINAPI extGetAvailableTextureMem(GetAvailableTextureMem_Type pGetAvailableTextureMem, void *lpd3dd)\n{\n\tconst UINT TextureMemoryLimit = 1024 * 1024 * 1024; // 1GB\n\t// const DWORD dwMaxMem = 0x70000000; = 1.8G\n\tUINT AvailableTextureMem = (*pGetAvailableTextureMem)(lpd3dd);\n\tOutTraceD3D(\"GetAvailableTextureMem: lpd3dd=%x AvailableTextureMem=%u(%dMB)\\n\", lpd3dd, AvailableTextureMem, AvailableTextureMem>>20);\n\n\tif(dxw.bHintActive && (AvailableTextureMem > TextureMemoryLimit)) ShowHint(HINT_LIMITMEM);\n\n\tif((dxw.dwFlags2 & LIMITRESOURCES) && (AvailableTextureMem > TextureMemoryLimit)){\n\t\tOutTraceDW(\"GetAvailableTextureMem: LIMIT AvailableTextureMem=%u->%u\\n\", AvailableTextureMem, TextureMemoryLimit);\n\t\tAvailableTextureMem = TextureMemoryLimit;\n\t}\n\tif(dxw.dwFlags5 & STRESSRESOURCES) AvailableTextureMem = 0xFFFFFFFF;\n\n\treturn AvailableTextureMem;\n}\n\nUINT WINAPI extGetAvailableTextureMem8(void *lpd3dd)\n{ return extGetAvailableTextureMem(pGetAvailableTextureMem8, lpd3dd); }\nUINT WINAPI extGetAvailableTextureMem9(void *lpd3dd)\n{ return extGetAvailableTextureMem(pGetAvailableTextureMem9, lpd3dd); }\n\nstatic HRESULT WINAPI extTestCooperativeLevel(TestCooperativeLevel_Type pTestCooperativeLevel, void *lpd3dd)\n{\n\tHRESULT res;\n\tres = (*pTestCooperativeLevel)(lpd3dd);\n\tOutTraceB(\"TestCooperativeLevel: d3dd=%x res=%x\\n\", lpd3dd, res);\n\treturn res;\n}\n\nHRESULT WINAPI extTestCooperativeLevel8(void *lpd3dd)\n{ return extTestCooperativeLevel(pTestCooperativeLevel8, lpd3dd); }\nHRESULT WINAPI extTestCooperativeLevel9(void *lpd3dd)\n{ return extTestCooperativeLevel(pTestCooperativeLevel9, lpd3dd); }\n\nHRESULT WINAPI extGetSwapChain(void *lpd3dd, UINT iSwapChain, IDirect3DSwapChain9** pSwapChain)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"GetSwapChain: d3dd=%x SwapChain=%d\\n\", lpd3dd, iSwapChain);\n\tres = (*pGetSwapChain)(lpd3dd, iSwapChain, pSwapChain);\n\tif(res) OutTraceE(\"GetSwapChain ERROR: res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nUINT WINAPI extGetNumberOfSwapChains(void *lpd3dd)\n{\n\tUINT res;\n\tres = (*pGetNumberOfSwapChains)(lpd3dd);\n\tOutTraceD3D(\"GetNumberOfSwapChains: d3dd=%x res=%d\\n\", lpd3dd, res);\n\treturn res;\n}\n\nHRESULT WINAPI extBeginStateBlock8(void *lpd3dd)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"BeginStateBlock(8): d3dd=%x\\n\", lpd3dd);\n\tres = (*pBeginStateBlock8)(lpd3dd);\n\tHookD3DDevice8(&lpd3dd);\n\treturn res;\n}\n\nHRESULT WINAPI extBeginStateBlock9(void *lpd3dd)\n{\n\t// v2.02.78: D3DDevice9::BeginStateBlock refreshes the COM D3DDevice9 method pointers, so that\n\t// you need to hook the device object again. This operation fixes the switch to fullscreen mode\n\t// in \"Freedom Force vs. the Third Reich\".\n\tHRESULT res;\n\tOutTraceD3D(\"BeginStateBlock(9): d3dd=%x\\n\", lpd3dd);\n\tres = (*pBeginStateBlock9)(lpd3dd);\n\tHookD3DDevice9(&lpd3dd);\n\treturn res;\n}\n\nHRESULT WINAPI extEndStateBlock8(void *lpd3dd, DWORD *pToken)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"EndStateBlock(8): d3dd=%x\\n\", lpd3dd);\n\tres = (*pEndStateBlock8)(lpd3dd, pToken);\n\treturn res;\n}\n\nHRESULT WINAPI extEndStateBlock9(void *lpd3dd, IDirect3DStateBlock9** ppSB)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"EndStateBlock(9): d3dd=%x\\n\", lpd3dd);\n\tres = (*pEndStateBlock9)(lpd3dd, ppSB);\n\treturn res;\n}\n\nHRESULT WINAPI extCreateTexture8(void *lpd3dd, UINT Width, UINT Height, UINT Levels, \n\t\t\t\t\t\t\t\t DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, \n\t\t\t\t\t\t\t\t void **ppTexture)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"CreateTexture(8): lpd3dd=%x size=(%dx%d) levels=%d usage=%x format=%d pool=%x\\n\",\n\t\tlpd3dd, Width, Height, Levels, Usage, Format, Pool);\n\tres=(*pCreateTexture8)(lpd3dd, Width, Height, Levels, Usage, Format, Pool, ppTexture);\n\tif (res) \n\t\tOutTraceE(\"CreateTexture(8) ERROR: err=%x\\n\", res);\n\telse {\n\t\tOutTraceD3D(\"CreateTexture(8): lpTexture=%x\\n\", *ppTexture);\n\t\tHookD3DTexture8(ppTexture);\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extCreateTexture9(void *lpd3dd, UINT Width, UINT Height, UINT Levels, \n\t\t\t\t\t\t\t\t DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, \n\t\t\t\t\t\t\t\t void **ppTexture, HANDLE *pSharedHandle)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"CreateTexture(9): lpd3dd=%x size=(%dx%d) levels=%d usage=%x format=%d pool=%x\\n\",\n\t\tlpd3dd, Width, Height, Levels, Usage, Format, Pool, ppTexture, pSharedHandle);\n\tres=(*pCreateTexture9)(lpd3dd, Width, Height, Levels, Usage, Format, Pool, ppTexture, pSharedHandle);\n\tif (res) \n\t\tOutTraceE(\"CreateTexture(9) ERROR: err=%x\\n\", res);\n\telse {\n\t\tOutTraceD3D(\"CreateTexture(9): lpTexture=%x\\n\", *ppTexture);\n\t\tHookD3DTexture9(ppTexture);\n\t}\n\treturn res;\n}\n\nstatic HRESULT WINAPI extLockRect(LockRect_Type pLockRect, void *lpd3dtex, UINT Level, D3DLOCKED_RECT *pLockedRect, CONST RECT *pRect, DWORD Flags)\n{\n\tHRESULT res;\n\tif(IsTraceD3D){\n\t\tchar sRect[81];\n\t\tif(pRect) \n\t\t\tsprintf_s(sRect, 80, \"(%d,%d)-(%d,%d)\", pRect->left, pRect->top, pRect->right, pRect->bottom);\n\t\telse \n\t\t\tstrcpy_s(sRect, 80, \"NULL\");\n\t\tOutTrace(\"Texture::LockRect: lpd3dtex=%x level=%d rect=%s flags=%x\\n\", lpd3dtex, Level, sRect, Flags);\n\t}\n\n\tres=(*pLockRect)(lpd3dtex, Level, pLockedRect, pRect, Flags);\n\tif (res) OutTraceE(\"Device::LockRect ERROR: err=%x\\n\", res);\n\telse {\n\t\tOutTraceD3D(\"Device::LockRect: pBits=%x pitch=%d\\n\", pLockedRect->pBits, pLockedRect->Pitch);\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extLockRect8(void *lpd3dtex, UINT Level, D3DLOCKED_RECT *pLockedRect, CONST RECT *pRect, DWORD Flags)\n{ return extLockRect(pLockRect8, lpd3dtex, Level, pLockedRect, pRect, Flags); }\nHRESULT WINAPI extLockRect9(void *lpd3dtex, UINT Level, D3DLOCKED_RECT *pLockedRect, CONST RECT *pRect, DWORD Flags)\n{ return extLockRect(pLockRect9, lpd3dtex, Level, pLockedRect, pRect, Flags); }\n\ntypedef void (*TextureHandling_Type)(void *, int);\n\nstatic HRESULT WINAPI extUnlockRect(UnlockRect_Type pUnlockRect, void *lpd3dtex, UINT Level, TextureHandling_Type TextureHandling)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"Texture::UnlockRect: lpd3dtex=%x level=%d\\n\", lpd3dtex, Level);\n\n\tres=(*pUnlockRect)(lpd3dtex, Level);\n\tif (res) OutTraceE(\"Device::UnlockRect ERROR: err=%x\\n\", res);\n\telse {\n\t\tOutTraceD3D(\"Device::UnlockRect: D3D_OK\\n\");\n\t}\n\n\tif(TextureHandling) TextureHandling(lpd3dtex, Level);\n\treturn res;\n}\n\nHRESULT WINAPI extUnlockRect8(void *lpd3dtex, UINT Level)\n{ return extUnlockRect(pUnlockRect8, lpd3dtex, Level, D3D8TextureHandling); }\nHRESULT WINAPI extUnlockRect9(void *lpd3dtex, UINT Level)\n{ return extUnlockRect(pUnlockRect9, lpd3dtex, Level, D3D9TextureHandling); }\n\nvoid WINAPI extD3DPERF_SetOptions(DWORD dwOptions)\n{\n\tif(dwOptions) OutTraceD3D(\"circumvent D3DPERF_SetOptions\\n\");\n\tpD3DPERF_SetOptions(0);\n}\n\nvoid RestoreD3DSurfaces(BOOL bFullScreen)\n{\n\t//DWORD param[64];\n\t//HRESULT res;\n\n\t// a well programmed D3D game should provide to Reset by itself, so the best thing to do is NOTHING\n\treturn;\n\n\t//if(lpD3DActiveDevice){\n\t//\tOutTrace(\"RestoreD3DSurfaces(%d): reset device %x fullscreen=%x\\n\", dwD3DVersion, lpD3DActiveDevice, bFullScreen);\n\t//\tRECT Desktop;\n\t//\tmemcpy(param, gActiveDeviceParams, sizeof(param));\n\t//\tif(bFullScreen){\n\t//\t\t(*pGetClientRect)(0, &Desktop);\n\t//\t\tparam[0] = Desktop.right;\t\t\t// BackBufferWidth\n\t//\t\tparam[1] = Desktop.bottom;\t\t\t// BackBufferHeight\n\t//\t}\n\t//\tres=(*pReset)(lpD3DActiveDevice, (D3DPRESENT_PARAMETERS *)param);\n\t//\tif(res != DD_OK) OutTraceE(\"RestoreD3DSurfaces: Reset size=(%dx%d) err=%x(%s)\\n\", \n\t//\t\tparam[0], param[1], res, ExplainDDError(res));\n\t//}\n}\n\nUINT WINAPI extGetAdapterModeCount8(void *lpd3d, UINT Adapter)\n{\n\tUINT ret;\n\tOutTraceD3D(\"GetAdapterModeCount(8): d3d=%x adapter=%d\\n\", lpd3d, Adapter);\n\tret = (*pGetAdapterModeCount8)(lpd3d, Adapter);\n\tif(dxw.dwFlags7 & ENUM16BITMODES){\n\t\tOutTraceDW(\"GetAdapterModeCount(8): DOUBLED MODES %d->%d\\n\", ret, ret*2);\n\t\tret = ret * 2;\n\t}\n\tOutTraceD3D(\"GetAdapterModeCount(8): ret=%d\\n\", ret);\n\treturn ret;\n}\n\nUINT WINAPI extGetAdapterModeCount9(void *lpd3d, UINT Adapter, D3DFORMAT Format)\n{\n\tUINT ret;\n\tOutTraceD3D(\"GetAdapterModeCount(9): d3d=%x adapter=%d format=%d(%s)\\n\",\n\t\tlpd3d, Adapter, Format, ExplainD3DSurfaceFormat(Format));\n\tret = (*pGetAdapterModeCount9)(lpd3d, Adapter, Format);\n\tif(dxw.dwFlags7 & ENUM16BITMODES){\n\t\tOutTraceDW(\"GetAdapterModeCount(9): DOUBLED MODES %d->%d\\n\", ret, ret*2);\n\t\tret = ret * 2;\n\t}\n\tOutTraceD3D(\"GetAdapterModeCount(9): ret=%d\\n\", ret);\n\treturn ret;\n}\n\nHRESULT WINAPI extGetFrontBuffer(void *lpd3dd, LPDIRECTDRAWSURFACE pDestSurface)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"GetFrontBuffer(8): d3d=%x dest=%x\\n\", lpd3dd, pDestSurface);\n\tres = (*pGetFrontBuffer)(lpd3dd, pDestSurface);\n\n\t// v2.04.02: Fix for \"Dirt Track Racing 2\": GetFrontBuffer in windowed mode through DxWnd intervention may yterminate in error\n\t// since the Front Buffer size is the whole screen and the surface provided by the application only maps the virtual coordinates.\n\t// So, the dxGetFrontBuffer() routine tries to match the surfaces, but in any case, also if an error happens, better return a\n\t// fake D3D_OK condition.\n\n\tif(res == D3DERR_INVALIDCALL) {\n\t\tres = dxGetFrontBuffer(lpd3dd, pDestSurface);\n\t\tif(res) OutTraceDW(\"GetFrontBuffer(8): ret=%x return FAKE D3D_OK\\n\", res);\n\t\tres = D3D_OK;\n\t}\n\n\tOutTraceD3D(\"GetFrontBuffer(8): ret=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extCopyRects(void *lpd3dd, LPDIRECTDRAWSURFACE pSourceSurface, CONST RECT *pSourceRectsArray, UINT cRects, LPDIRECTDRAWSURFACE pDestinationSurface, CONST POINT *pDestPointsArray)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"CopyRects(8): d3d=%x source=%x dest=%x rects=%d\\n\", lpd3dd, pSourceSurface, pDestinationSurface, cRects);\n\n\t// v2.04.02: Fix for \"Dirt Track Racing 2\": in early D3D8 implementation it seems that invoking this Copyrects method for 0 rects count didn't hurt,\n\t// but now the method returns an error. \n\t// added a patch for handling the \"if(cRects==0)\" case - it is not worth a flag, it seems good for all circumstances, isn't it?\n\t// Beware: it seems (from some code snippet) that lpDevice->CopyRects(lpSrcSurface, NULL, 0, lpDestSurface, NULL) means copy the whole lpSrcSurface\n\t// to lpDestSurface. In windowized mode the peration may fail because of the different sizing!\n\n\tres = (*pCopyRects)(lpd3dd, pSourceSurface, pSourceRectsArray, cRects, pDestinationSurface, pDestPointsArray);\n\tif((res == D3DERR_INVALIDCALL) && (cRects==0)) {\n\t\tres = dxCopyRects(lpd3dd, pSourceSurface, pDestinationSurface);\n\t\tif(res) OutTraceDW(\"CopyRects(8): res=%x FAKE D3D_OK on 0 rects\\n\", res);\n\t\tres = D3D_OK;\n\t}\n\tOutTraceD3D(\"CopyRects(8): ret=%x\\n\", res);\n\treturn res;\n}\n\n//    STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain,UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer) PURE;\n\nHRESULT WINAPI extGetBackBuffer8(void *lpd3dd, UINT BackBuffer, D3DBACKBUFFER_TYPE Type, LPDIRECTDRAWSURFACE *ppBackBuffer) \n{\n\tHRESULT res;\n\tOutTraceD3D(\"GetBackBuffer(8): d3d=%x backbuffer=%x type=%x\\n\", lpd3dd, BackBuffer, Type);\n\n\tif((dxw.dwFlags8 & D3D8BACK16) && (dwD3DVersion == 8)){\n\t\tif ((BackBuffer != 0) || (Type != D3DBACKBUFFER_TYPE_MONO)) {\n\t\t\treturn D3DERR_INVALIDCALL;\n\t\t}\n\t\t*ppBackBuffer = dwGetVirtualBackBuffer();\n\t\t(*ppBackBuffer)->AddRef();\n\t\tOutTraceD3D(\"GetBackBuffer(8): EMULATION OK\\n\");\n\t\treturn D3D_OK;\n\t}\n\n\tres = (*pGetBackBuffer8)(lpd3dd, BackBuffer, Type, ppBackBuffer);\n\tif(res) OutTraceE(\"GetBackBuffer(8): ret=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\n\tif(res) OutTraceE(\"GetBackBuffer(8): ret=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}"
  },
  {
    "path": "dll/hd3d.doc.hpp",
    "content": "#if 0\nfrom http://msdn.microsoft.com/en-us/library/windows/desktop/bb172588%28v=vs.85%29.aspx\n\nD3DPRESENT_PARAMETERS structure\n\nDescribes the presentation parameters.\nSyntax\nC++\n\ntypedef struct D3DPRESENT_PARAMETERS {\n  UINT                BackBufferWidth;\n  UINT                BackBufferHeight;\n  D3DFORMAT           BackBufferFormat;\n  UINT                BackBufferCount;\n  D3DMULTISAMPLE_TYPE MultiSampleType;\n  DWORD               MultiSampleQuality;\n  D3DSWAPEFFECT       SwapEffect;\n  HWND                hDeviceWindow;\n  BOOL                Windowed;\n  BOOL                EnableAutoDepthStencil;\n  D3DFORMAT           AutoDepthStencilFormat;\n  DWORD               Flags;\n  UINT                FullScreen_RefreshRateInHz;\n  UINT                PresentationInterval;\n} D3DPRESENT_PARAMETERS, *LPD3DPRESENT_PARAMETERS;\n\nBackBufferFormat\n    Type: D3DFORMAT\n    The back buffer format. For more information about formats, see D3DFORMAT. \n\tThis value must be one of the render-target formats as validated by CheckDeviceType. \n\tYou can use GetDisplayMode to obtain the current format.\n    In fact, D3DFMT_UNKNOWN can be specified for the BackBufferFormat while in windowed mode. \n\tThis tells the runtime to use the current display-mode format and eliminates the need to call GetDisplayMode.\n    For windowed applications, the back buffer format no longer needs to match the display-mode format because \n\tcolor conversion can now be done by the hardware (if the hardware supports color conversion). \n\tThe set of possible back buffer formats is constrained, but the runtime will allow any valid back buffer format \n\tto be presented to any desktop format. (There is the additional requirement that the device be operable in the\n\tdesktop; devices typically do not operate in 8 bits per pixel modes.)\n\n    Full-screen applications cannot do color conversion.\n#endif"
  },
  {
    "path": "dll/hd3d.h",
    "content": ""
  },
  {
    "path": "dll/hd3d7.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n#include <windows.h>\n#include <d3d.h>\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"dxhook.h\"\n#include \"syslibs.h\"\n#include \"dxhelper.h\"\n\n//#undef OutTraceD3D\n//#define OutTraceD3D OutTrace\n\nextern LPDIRECTDRAW lpPrimaryDD;\ntypedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *);\nextern HRESULT WINAPI extQueryInterfaceDX(int, QueryInterface_Type, void *, REFIID, LPVOID *);\n\n// exported API\n\ntypedef HRESULT (WINAPI *Direct3DCreateDevice_Type)(GUID FAR *, LPDIRECT3D, LPDIRECTDRAWSURFACE, LPDIRECT3D *, LPUNKNOWN);\ntypedef HRESULT (WINAPI *Direct3DCreate_Type)(UINT, LPDIRECT3D *, LPUNKNOWN);\n\nDirect3DCreateDevice_Type pDirect3DCreateDevice = NULL;\nDirect3DCreate_Type pDirect3DCreate = NULL;\n\nHRESULT WINAPI extDirect3DCreateDevice(GUID FAR *, LPDIRECT3D, LPDIRECTDRAWSURFACE, LPDIRECT3D *, LPUNKNOWN);\nHRESULT WINAPI extDirect3DCreate(UINT, LPDIRECT3D *, LPUNKNOWN);\n\n// IDirect3D-n interfaces\n\ntypedef HRESULT (WINAPI *QueryInterfaceD3_Type)(void *, REFIID, LPVOID *);\ntypedef HRESULT (WINAPI *Initialize_Type)(void *);\ntypedef HRESULT (WINAPI *EnumDevices_Type)(void *, LPD3DENUMDEVICESCALLBACK, LPVOID);\ntypedef HRESULT (WINAPI *EnumDevices7_Type)(void *, LPD3DENUMDEVICESCALLBACK7, LPVOID);\ntypedef HRESULT (WINAPI *CreateLight_Type)(void *, LPDIRECT3DLIGHT *, IUnknown *);\n#ifdef TRACEMATERIAL\ntypedef HRESULT (WINAPI *CreateMaterial1_Type)(void *, LPDIRECT3DMATERIAL *, IUnknown *);\ntypedef HRESULT (WINAPI *CreateMaterial2_Type)(void *, LPDIRECT3DMATERIAL2 *, IUnknown *);\ntypedef HRESULT (WINAPI *CreateMaterial3_Type)(void *, LPDIRECT3DMATERIAL3 *, IUnknown *);\n#endif\ntypedef HRESULT (WINAPI *CreateViewport1_Type)(void *, LPDIRECT3DVIEWPORT *, IUnknown *);\ntypedef HRESULT (WINAPI *CreateViewport2_Type)(void *, LPDIRECT3DVIEWPORT2 *, IUnknown *);\ntypedef HRESULT (WINAPI *CreateViewport3_Type)(void *, LPDIRECT3DVIEWPORT3 *, IUnknown *);\ntypedef HRESULT (WINAPI *FindDevice_Type)(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT);\ntypedef HRESULT (WINAPI *CreateDevice2_Type)(void *, REFCLSID, LPDIRECTDRAWSURFACE, LPDIRECT3DDEVICE2 *);\ntypedef HRESULT (WINAPI *CreateDevice3_Type)(void *, REFCLSID, LPDIRECTDRAWSURFACE4, LPDIRECT3DDEVICE3 *, LPUNKNOWN);\ntypedef HRESULT (WINAPI *CreateDevice7_Type)(void *, REFCLSID, LPDIRECTDRAWSURFACE7, LPDIRECT3DDEVICE7 *);\ntypedef HRESULT (WINAPI *EnumZBufferFormats_Type)(void *, REFCLSID, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID);\ntypedef HRESULT (WINAPI *EnumTextureFormats_Type)(void *, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID);\n\nQueryInterfaceD3_Type pQueryInterfaceD31 = NULL;\nQueryInterfaceD3_Type pQueryInterfaceD32 = NULL;\nQueryInterfaceD3_Type pQueryInterfaceD33 = NULL;\nQueryInterfaceD3_Type pQueryInterfaceD37 = NULL;\nInitialize_Type pInitialize = NULL;\nEnumDevices_Type pEnumDevices1 = NULL;\nEnumDevices_Type pEnumDevices2 = NULL;\nEnumDevices_Type pEnumDevices3 = NULL;\nEnumDevices7_Type pEnumDevices7 = NULL;\nCreateLight_Type pCreateLight1 = NULL;\nCreateLight_Type pCreateLight2 = NULL;\nCreateLight_Type pCreateLight3 = NULL;\n#ifdef TRACEMATERIAL\nCreateMaterial1_Type pCreateMaterial1 = NULL;\nCreateMaterial2_Type pCreateMaterial2 = NULL;\nCreateMaterial3_Type pCreateMaterial3 = NULL;\n#endif\nCreateViewport1_Type pCreateViewport1 = NULL;\nCreateViewport2_Type pCreateViewport2 = NULL;\nCreateViewport3_Type pCreateViewport3 = NULL;\nFindDevice_Type pFindDevice1, pFindDevice2, pFindDevice3;\nCreateDevice2_Type pCreateDevice2 = NULL;\nCreateDevice3_Type pCreateDevice3 = NULL;\nCreateDevice7_Type pCreateDevice7 = NULL;\nEnumZBufferFormats_Type pEnumZBufferFormats3 = NULL;\nEnumZBufferFormats_Type pEnumZBufferFormats7 = NULL;\n\nEnumTextureFormats_Type pEnumTextureFormats1, pEnumTextureFormats2, pEnumTextureFormats3, pEnumTextureFormats7;\n\nHRESULT WINAPI extQueryInterfaceD31(void *, REFIID, LPVOID *);\nHRESULT WINAPI extQueryInterfaceD32(void *, REFIID, LPVOID *);\nHRESULT WINAPI extQueryInterfaceD33(void *, REFIID, LPVOID *);\nHRESULT WINAPI extQueryInterfaceD37(void *, REFIID, LPVOID *);\nHRESULT WINAPI extEnumDevices1(void *, LPD3DENUMDEVICESCALLBACK, LPVOID);\nHRESULT WINAPI extEnumDevices2(void *, LPD3DENUMDEVICESCALLBACK, LPVOID);\nHRESULT WINAPI extEnumDevices3(void *, LPD3DENUMDEVICESCALLBACK, LPVOID);\nHRESULT WINAPI extEnumDevices7(void *, LPD3DENUMDEVICESCALLBACK7, LPVOID);\nHRESULT WINAPI extCreateLight1(void *, LPDIRECT3DLIGHT *, IUnknown *);\nHRESULT WINAPI extCreateLight2(void *, LPDIRECT3DLIGHT *, IUnknown *);\nHRESULT WINAPI extCreateLight3(void *, LPDIRECT3DLIGHT *, IUnknown *);\n\nHRESULT WINAPI extEnumZBufferFormats3(void *, REFCLSID, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID);\nHRESULT WINAPI extEnumZBufferFormats7(void *, REFCLSID, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID);\n\nHRESULT WINAPI extEnumTextureFormats1(void *, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID);\nHRESULT WINAPI extEnumTextureFormats2(void *, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID);\nHRESULT WINAPI extEnumTextureFormats3(void *, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID);\nHRESULT WINAPI extEnumTextureFormats7(void *, LPD3DENUMPIXELFORMATSCALLBACK, LPVOID);\n\n// Direct3DDevice-n interfaces\n\ntypedef ULONG   (WINAPI *ReleaseD3D_Type)(LPDIRECT3DDEVICE);\ntypedef HRESULT (WINAPI *QueryInterfaceD3D_Type)(void *, REFIID, LPVOID *);\ntypedef HRESULT (WINAPI *D3DInitialize_Type)(void *, LPDIRECT3D , LPGUID, LPD3DDEVICEDESC);\ntypedef HRESULT (WINAPI *D3DGetCaps_Type)(void *, LPD3DDEVICEDESC ,LPD3DDEVICEDESC);\ntypedef HRESULT (WINAPI *D3DGetCaps7_Type)(void *, LPD3DDEVICEDESC7);\ntypedef HRESULT (WINAPI *AddViewport1_Type)(void *, LPDIRECT3DVIEWPORT);\ntypedef HRESULT (WINAPI *AddViewport2_Type)(void *, LPDIRECT3DVIEWPORT2);\ntypedef HRESULT (WINAPI *AddViewport3_Type)(void *, LPDIRECT3DVIEWPORT3);\ntypedef HRESULT (WINAPI *Scene_Type)(void *); // BeginScene, EndScene\ntypedef HRESULT (WINAPI *SetRenderState3_Type)(void *, D3DRENDERSTATETYPE, DWORD);\ntypedef HRESULT (WINAPI *GetViewport7_Type)(void *, LPD3DVIEWPORT7);\ntypedef HRESULT (WINAPI *SetViewport7_Type)(void *, LPD3DVIEWPORT7);\ntypedef HRESULT (WINAPI *SetLightState_Type)(void *, D3DLIGHTSTATETYPE, DWORD);\ntypedef HRESULT (WINAPI *GetCurrentViewport2_Type)(void *, LPDIRECT3DVIEWPORT2 *);\ntypedef HRESULT (WINAPI *SetCurrentViewport2_Type)(void *, LPDIRECT3DVIEWPORT2);\ntypedef HRESULT (WINAPI *GetCurrentViewport3_Type)(void *, LPDIRECT3DVIEWPORT3 *);\ntypedef HRESULT (WINAPI *SetCurrentViewport3_Type)(void *, LPDIRECT3DVIEWPORT3);\ntypedef HRESULT (WINAPI *SetTexture3_Type)(void *, DWORD, LPDIRECT3DTEXTURE2);\ntypedef HRESULT (WINAPI *SetTexture7_Type)(void *, DWORD, LPDIRECTDRAWSURFACE7);\ntypedef HRESULT (WINAPI *SwapTextureHandles_Type)(void *, LPDIRECT3DTEXTURE, LPDIRECT3DTEXTURE);\ntypedef HRESULT (WINAPI *SwapTextureHandles2_Type)(void *, LPDIRECT3DTEXTURE2, LPDIRECT3DTEXTURE2);\ntypedef HRESULT (WINAPI *SetTransform_Type)(void *, D3DTRANSFORMSTATETYPE, LPD3DMATRIX);\n\nQueryInterfaceD3_Type pQueryInterfaceD3D1, pQueryInterfaceD3D2, pQueryInterfaceD3D3, pQueryInterfaceD3D7;\nReleaseD3D_Type pReleaseD3D1, pReleaseD3D2, pReleaseD3D3, pReleaseD3D7;\nD3DInitialize_Type pD3DInitialize = NULL;\nD3DGetCaps_Type pD3DGetCaps1, pD3DGetCaps2, pD3DGetCaps3;\nD3DGetCaps7_Type pD3DGetCaps7;\nAddViewport1_Type pAddViewport1 = NULL;\nAddViewport2_Type pAddViewport2 = NULL;\nAddViewport3_Type pAddViewport3 = NULL;\nScene_Type pBeginScene1 = NULL;\nScene_Type pBeginScene2 = NULL;\nScene_Type pBeginScene3 = NULL;\nScene_Type pBeginScene7 = NULL;\nScene_Type pEndScene1 = NULL;\nScene_Type pEndScene2 = NULL;\nScene_Type pEndScene3 = NULL;\nScene_Type pEndScene7 = NULL;\nSetRenderState3_Type pSetRenderState2 = NULL;\nSetRenderState3_Type pSetRenderState3 = NULL;\nSetRenderState3_Type pSetRenderState7 = NULL;\nGetViewport7_Type pGetViewport7 = NULL;\nSetViewport7_Type pSetViewport7 = NULL;\nSetLightState_Type pSetLightState3 = NULL;\nGetCurrentViewport2_Type pGetCurrentViewport2 = NULL;\nSetCurrentViewport2_Type pSetCurrentViewport2 = NULL;\nGetCurrentViewport3_Type pGetCurrentViewport3 = NULL;\nSetCurrentViewport3_Type pSetCurrentViewport3 = NULL;\nSetTexture3_Type pSetTexture3 = NULL;\nSetTexture7_Type pSetTexture7 = NULL;\nSwapTextureHandles_Type pSwapTextureHandles = NULL;\nSwapTextureHandles2_Type pSwapTextureHandles2 = NULL;\nSetTransform_Type pSetTransform2, pSetTransform3, pSetTransform7;\n\n// IDirect3DViewport-n interfaces\n\ntypedef HRESULT (WINAPI *InitializeVP_Type)(void *, LPDIRECT3D);\ntypedef HRESULT (WINAPI *SetViewport_Type)(void *, LPD3DVIEWPORT);\ntypedef HRESULT (WINAPI *GetViewport_Type)(void *, LPD3DVIEWPORT);\ntypedef HRESULT (WINAPI *GetViewport2_Type)(void *, LPD3DVIEWPORT);\ntypedef HRESULT (WINAPI *SetViewport2_Type)(void *, LPD3DVIEWPORT);\ntypedef HRESULT (WINAPI *GetViewport3_Type)(void *, LPD3DVIEWPORT);\ntypedef HRESULT (WINAPI *SetViewport3_Type)(void *, LPD3DVIEWPORT);\ntypedef HRESULT (WINAPI *GetViewport2_3_Type)(void *, LPD3DVIEWPORT2);\ntypedef HRESULT (WINAPI *SetViewport2_3_Type)(void *, LPD3DVIEWPORT2);\ntypedef HRESULT (WINAPI *DeleteViewport1_Type)(void *, LPDIRECT3DVIEWPORT);\ntypedef HRESULT (WINAPI *NextViewport1_Type)(void *, LPDIRECT3DVIEWPORT, LPDIRECT3DVIEWPORT *, DWORD);\ntypedef HRESULT (WINAPI *DeleteViewport2_Type)(void *, LPDIRECT3DVIEWPORT2);\ntypedef HRESULT (WINAPI *NextViewport2_Type)(void *, LPDIRECT3DVIEWPORT2, LPDIRECT3DVIEWPORT2 *, DWORD);\ntypedef HRESULT (WINAPI *ViewportClear_Type)(void *, DWORD, LPD3DRECT, DWORD);\n\n#ifdef TRACEMATERIAL\n// IDirect3DMaterial interfaces\n\ntypedef HRESULT (WINAPI *SetMaterial_Type)(void *, LPD3DMATERIAL);\ntypedef HRESULT (WINAPI *GetMaterial_Type)(void *, LPD3DMATERIAL);\n#endif\n\nInitializeVP_Type pInitializeVP = NULL;\nSetViewport_Type pSetViewport1 = NULL;\nGetViewport_Type pGetViewport1 = NULL;\nGetViewport2_Type pGetViewport2 = NULL;\nSetViewport2_Type pSetViewport2 = NULL;\nGetViewport2_3_Type pGetViewport2_2 = NULL;\nSetViewport2_3_Type pSetViewport2_2 = NULL;\nGetViewport2_3_Type pGetViewport2_3 = NULL;\nSetViewport2_3_Type pSetViewport2_3 = NULL;\nGetViewport3_Type pGetViewport3 = NULL;\nSetViewport3_Type pSetViewport3 = NULL;\nDeleteViewport1_Type pDeleteViewport1 = NULL;\nNextViewport1_Type pNextViewport1 = NULL;\nDeleteViewport2_Type pDeleteViewport2 = NULL;\nNextViewport2_Type pNextViewport2 = NULL;\nViewportClear_Type pViewportClear = NULL;\n\n#ifdef TRACEMATERIAL\nSetMaterial_Type pSetMaterial = NULL;\nGetMaterial_Type pGetMaterial = NULL;\n#endif\n\nHRESULT WINAPI extInitialize(void *);\n#ifdef TRACEMATERIAL\nHRESULT WINAPI extCreateMaterial1(void *, LPDIRECT3DMATERIAL *, IUnknown *);\nHRESULT WINAPI extCreateMaterial2(void *, LPDIRECT3DMATERIAL2 *, IUnknown *);\nHRESULT WINAPI extCreateMaterial3(void *, LPDIRECT3DMATERIAL3 *, IUnknown *);\n#endif\nHRESULT WINAPI extCreateViewport1(void *, LPDIRECT3DVIEWPORT *, IUnknown *);\nHRESULT WINAPI extCreateViewport2(void *, LPDIRECT3DVIEWPORT2 *, IUnknown *);\nHRESULT WINAPI extCreateViewport3(void *, LPDIRECT3DVIEWPORT3 *, IUnknown *);\nHRESULT WINAPI extFindDevice1(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT);\nHRESULT WINAPI extFindDevice2(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT);\nHRESULT WINAPI extFindDevice3(void *, LPD3DFINDDEVICESEARCH, LPD3DFINDDEVICERESULT);\nHRESULT WINAPI extCreateDevice2(void *, REFCLSID, LPDIRECTDRAWSURFACE, LPDIRECT3DDEVICE2 *);\nHRESULT WINAPI extCreateDevice3(void *, REFCLSID, LPDIRECTDRAWSURFACE4, LPDIRECT3DDEVICE3 *, LPUNKNOWN);\nHRESULT WINAPI extCreateDevice7(void *, REFCLSID, LPDIRECTDRAWSURFACE7, LPDIRECT3DDEVICE7 *);\nHRESULT WINAPI extDeleteViewport1(void *, LPDIRECT3DVIEWPORT);\nHRESULT WINAPI extNextViewport1(void *, LPDIRECT3DVIEWPORT, LPDIRECT3DVIEWPORT *, DWORD);\nHRESULT WINAPI extDeleteViewport2(void *, LPDIRECT3DVIEWPORT2);\nHRESULT WINAPI extNextViewport2(void *, LPDIRECT3DVIEWPORT2, LPDIRECT3DVIEWPORT2 *, DWORD);\nHRESULT WINAPI extViewportClear(void *, DWORD, LPD3DRECT, DWORD);\n\nHRESULT WINAPI extInitializeVP(void *, LPDIRECT3D);\nHRESULT WINAPI extSetViewport1(void *, LPD3DVIEWPORT);\nHRESULT WINAPI extGetViewport1(void *, LPD3DVIEWPORT);\nHRESULT WINAPI extSetViewport2(void *, LPD3DVIEWPORT);\nHRESULT WINAPI extGetViewport2(void *, LPD3DVIEWPORT);\nHRESULT WINAPI extSetViewport3(void *, LPD3DVIEWPORT);\nHRESULT WINAPI extGetViewport3(void *, LPD3DVIEWPORT);\n#ifdef TRACEMATERIAL\nHRESULT WINAPI extSetMaterial(void *, LPD3DMATERIAL);\nHRESULT WINAPI extGetMaterial(void *, LPD3DMATERIAL);\n#endif\nHRESULT WINAPI extQueryInterfaceD3(void *, REFIID, LPVOID *);\nHRESULT WINAPI extQueryInterfaceD3D1(void *, REFIID, LPVOID *);\nHRESULT WINAPI extQueryInterfaceD3D2(void *, REFIID, LPVOID *);\nHRESULT WINAPI extQueryInterfaceD3D3(void *, REFIID, LPVOID *);\nHRESULT WINAPI extQueryInterfaceD3D7(void *, REFIID, LPVOID *);\n\nULONG WINAPI extReleaseD3D1(LPDIRECT3DDEVICE);\nULONG WINAPI extReleaseD3D2(LPDIRECT3DDEVICE);\nULONG WINAPI extReleaseD3D3(LPDIRECT3DDEVICE);\nULONG WINAPI extReleaseD3D7(LPDIRECT3DDEVICE);\nHRESULT WINAPI extBeginScene1(void *);\nHRESULT WINAPI extEndScene1(void *);\nHRESULT WINAPI extBeginScene2(void *);\nHRESULT WINAPI extEndScene2(void *);\nHRESULT WINAPI extBeginScene3(void *);\nHRESULT WINAPI extEndScene3(void *);\nHRESULT WINAPI extBeginScene7(void *);\nHRESULT WINAPI extEndScene7(void *);\nHRESULT WINAPI extSetRenderState2(void *, D3DRENDERSTATETYPE, DWORD);\nHRESULT WINAPI extSetRenderState3(void *, D3DRENDERSTATETYPE, DWORD);\nHRESULT WINAPI extSetRenderState7(void *, D3DRENDERSTATETYPE, DWORD);\nHRESULT WINAPI extD3DGetCaps1(void *, LPD3DDEVICEDESC, LPD3DDEVICEDESC);\nHRESULT WINAPI extD3DGetCaps2(void *, LPD3DDEVICEDESC, LPD3DDEVICEDESC);\nHRESULT WINAPI extD3DGetCaps3(void *, LPD3DDEVICEDESC, LPD3DDEVICEDESC);\nHRESULT WINAPI extD3DGetCaps7(void *, LPD3DDEVICEDESC7);\nHRESULT WINAPI extSetLightState3(void *d3dd, D3DLIGHTSTATETYPE d3dls, DWORD t);\nHRESULT WINAPI extSetViewport3(void *, LPD3DVIEWPORT);\nHRESULT WINAPI extGetViewport3(void *, LPD3DVIEWPORT);\nHRESULT WINAPI extAddViewport1(void *, LPDIRECT3DVIEWPORT);\nHRESULT WINAPI extAddViewport2(void *, LPDIRECT3DVIEWPORT2);\nHRESULT WINAPI extAddViewport3(void *, LPDIRECT3DVIEWPORT3);\nHRESULT WINAPI extGetViewport2(void *, LPD3DVIEWPORT);\nHRESULT WINAPI extSetViewport2(void *, LPD3DVIEWPORT);\nHRESULT WINAPI extGetViewport2_2(void *, LPD3DVIEWPORT2);\nHRESULT WINAPI extSetViewport2_2(void *, LPD3DVIEWPORT2);\nHRESULT WINAPI extGetViewport2_3(void *, LPD3DVIEWPORT2);\nHRESULT WINAPI extSetViewport2_3(void *, LPD3DVIEWPORT2);\nHRESULT WINAPI extSetCurrentViewport2(void *, LPDIRECT3DVIEWPORT2);\nHRESULT WINAPI extGetCurrentViewport2(void *, LPDIRECT3DVIEWPORT2 *);\nHRESULT WINAPI extSetCurrentViewport3(void *, LPDIRECT3DVIEWPORT3);\nHRESULT WINAPI extGetCurrentViewport3(void *, LPDIRECT3DVIEWPORT3 *);\nHRESULT WINAPI extSetViewport7(void *, LPD3DVIEWPORT7);\nHRESULT WINAPI extGetViewport7(void *, LPD3DVIEWPORT7);\nHRESULT WINAPI extSetTexture3(void *, DWORD, LPDIRECT3DTEXTURE2);\nHRESULT WINAPI extSetTexture7(void *, DWORD, LPDIRECTDRAWSURFACE7);\nHRESULT WINAPI extSwapTextureHandles(void *, LPDIRECT3DTEXTURE, LPDIRECT3DTEXTURE);\nHRESULT WINAPI extSwapTextureHandles2(void *, LPDIRECT3DTEXTURE2, LPDIRECT3DTEXTURE2);\nHRESULT WINAPI extSetTransform2(void *, D3DTRANSFORMSTATETYPE, LPD3DMATRIX);\nHRESULT WINAPI extSetTransform3(void *, D3DTRANSFORMSTATETYPE, LPD3DMATRIX);\nHRESULT WINAPI extSetTransform7(void *, D3DTRANSFORMSTATETYPE, LPD3DMATRIX);\n\n// Texture\n\ntypedef HRESULT (WINAPI *TexInitialize_Type)(void *, LPDIRECT3DDEVICE, LPDIRECTDRAWSURFACE);\ntypedef HRESULT (WINAPI *TexGetHandle_Type)(void *, LPDIRECT3DDEVICE, LPD3DTEXTUREHANDLE);\ntypedef HRESULT (WINAPI *TexPaletteChanged_Type)(void *, DWORD, DWORD);\ntypedef HRESULT (WINAPI *TexLoad_Type)(void *, LPDIRECT3DTEXTURE);\ntypedef HRESULT (WINAPI *TexUnload_Type)(void *);\n\nTexInitialize_Type pTInitialize = NULL;\nTexGetHandle_Type pTGetHandle1, pTGetHandle2;\nTexPaletteChanged_Type pTPaletteChanged1, pTPaletteChanged2;\nTexLoad_Type pTLoad1, pTLoad2;\nTexUnload_Type pTUnload = NULL;\n\nHRESULT WINAPI extTexInitialize(void *, LPDIRECT3DDEVICE, LPDIRECTDRAWSURFACE);\nHRESULT WINAPI extTexGetHandle1(void *, LPDIRECT3DDEVICE, LPD3DTEXTUREHANDLE);\nHRESULT WINAPI extTexGetHandle2(void *, LPDIRECT3DDEVICE2, LPD3DTEXTUREHANDLE);\nHRESULT WINAPI extTexPaletteChanged1(void *, DWORD, DWORD);\nHRESULT WINAPI extTexPaletteChanged2(void *, DWORD, DWORD);\nHRESULT WINAPI extTexLoad1(void *, LPDIRECT3DTEXTURE);\nHRESULT WINAPI extTexLoad2(void *, LPDIRECT3DTEXTURE);\nHRESULT WINAPI extTexUnload(void *);\n\ntypedef HRESULT (WINAPI *Execute_Type)(void *, LPDIRECT3DEXECUTEBUFFER, LPDIRECT3DVIEWPORT, DWORD);\nHRESULT WINAPI extExecute(void *, LPDIRECT3DEXECUTEBUFFER, LPDIRECT3DVIEWPORT, DWORD);\nExecute_Type pExecute = NULL;\n\nextern char *ExplainDDError(DWORD);\n\nstatic char *sFourCC(DWORD fcc)\n{\n\tstatic char sRet[5];\n\tchar c;\n\tint i;\n\tchar *t=&sRet[0];\n\tfor(i=0; i<4; i++){\n\t\tc = fcc & (0xFF);\n\t\t*t++ = isprint(c) ? c : '.';\n\t\tc = c >> 8;\n\t}\n\t*t = 0;\n\treturn sRet;\n}\n\nchar *DumpPixelFormat(LPDDPIXELFORMAT ddpfPixelFormat)\n{\n\tstatic char sBuf[512];\n\tchar sItem[256];\n\tDWORD flags=ddpfPixelFormat->dwFlags;\n\tsprintf(sBuf, \" PixelFormat flags=%x(%s) BPP=%d\", \n\t\tflags, ExplainPixelFormatFlags(flags), ddpfPixelFormat->dwRGBBitCount);\n\tif (flags & DDPF_RGB) {\n\t\tif (flags & DDPF_ALPHAPIXELS) {\n\t\t\tsprintf(sItem, \" RGBA=(%x,%x,%x,%x)\", \n\t\t\t\tddpfPixelFormat->dwRBitMask,\n\t\t\t\tddpfPixelFormat->dwGBitMask,\n\t\t\t\tddpfPixelFormat->dwBBitMask,\n\t\t\t\tddpfPixelFormat->dwRGBAlphaBitMask);\n\t\t}\n\t\telse {\n\t\t\tsprintf(sItem, \" RGB=(%x,%x,%x)\", \n\t\t\t\tddpfPixelFormat->dwRBitMask,\n\t\t\t\tddpfPixelFormat->dwGBitMask,\n\t\t\t\tddpfPixelFormat->dwBBitMask);\n\t\t}\n\t\tstrcat(sBuf, sItem);\n\t}\n\tif (flags & DDPF_YUV) {\n\t\tsprintf(sItem, \" YUVA=(%x,%x,%x,%x)\", \n\t\t\tddpfPixelFormat->dwYBitMask,\n\t\t\tddpfPixelFormat->dwUBitMask,\n\t\t\tddpfPixelFormat->dwVBitMask,\n\t\t\tddpfPixelFormat->dwYUVAlphaBitMask);\n\t\tstrcat(sBuf, sItem);\n\t}\n\tif (flags & DDPF_ZBUFFER) {\n\t\tsprintf(sItem, \" SdZSbL=(%x,%x,%x,%x)\", \n\t\t\tddpfPixelFormat->dwStencilBitDepth,\n\t\t\tddpfPixelFormat->dwZBitMask,\n\t\t\tddpfPixelFormat->dwStencilBitMask,\n\t\t\tddpfPixelFormat->dwLuminanceAlphaBitMask);\n\t\tstrcat(sBuf, sItem);\n\t}\n\tif (flags & DDPF_ALPHA) {\n\t\tsprintf(sItem, \" LBdBlZ=(%x,%x,%x,%x)\", \n\t\t\tddpfPixelFormat->dwLuminanceBitMask,\n\t\t\tddpfPixelFormat->dwBumpDvBitMask,\n\t\t\tddpfPixelFormat->dwBumpLuminanceBitMask,\n\t\t\tddpfPixelFormat->dwRGBZBitMask);\n\t\tstrcat(sBuf, sItem);\n\t}\n\tif (flags & DDPF_LUMINANCE) {\n\t\tsprintf(sItem, \" BMbMF=(%x,%x,%x,%x)\", \n\t\t\tddpfPixelFormat->dwBumpDuBitMask,\n\t\t\tddpfPixelFormat->MultiSampleCaps.wBltMSTypes,\n\t\t\tddpfPixelFormat->MultiSampleCaps.wFlipMSTypes,\n\t\t\tddpfPixelFormat->dwYUVZBitMask);\n\t\tstrcat(sBuf, sItem);\n\t}\n\tif (flags & DDPF_BUMPDUDV) {\n\t\tsprintf(sItem, \" O=(%x)\", \n\t\t\tddpfPixelFormat->dwOperations);\n\t\tstrcat(sBuf, sItem);\n\t}\n\tif (flags & DDPF_FOURCC) {\n\t\tsprintf(sItem, \" FourCC=%x(%s)\", \n\t\t\tddpfPixelFormat->dwFourCC, sFourCC(ddpfPixelFormat->dwFourCC));\n\t\tstrcat(sBuf, sItem);\n\t}\n\treturn sBuf;\n}\n\nint HookDirect3D7(HMODULE module, int version){\n\tvoid *tmp;\n\tHINSTANCE hinst;\n\tLPDIRECT3D lpd3d=NULL;\n\tHRESULT res;\n\n\tOutTraceDW(\"HookDirect3D7: module=%x version=%d\\n\", module, version);\n\tswitch(version){\n\tcase 0:\n\tcase 1:\n\t\ttmp = HookAPI(module, \"d3dim.dll\", NULL, \"Direct3DCreate\", extDirect3DCreate);\n\t\tif(tmp) pDirect3DCreate = (Direct3DCreate_Type)tmp;\n\t\ttmp = HookAPI(module, \"d3dim.dll\", NULL, \"Direct3DCreateDevice\", extDirect3DCreateDevice);\n\t\tif(tmp) pDirect3DCreateDevice = (Direct3DCreateDevice_Type)tmp;\n\t\ttmp = HookAPI(module, \"d3dim700.dll\", NULL, \"Direct3DCreate\", extDirect3DCreate);\n\t\tif(tmp) pDirect3DCreate = (Direct3DCreate_Type)tmp;\n\t\ttmp = HookAPI(module, \"d3dim700.dll\", NULL, \"Direct3DCreateDevice\", extDirect3DCreateDevice);\n\t\tif(tmp) pDirect3DCreateDevice = (Direct3DCreateDevice_Type)tmp;\n\t\tbreak;\n\tcase 7:\n\t\thinst = (*pLoadLibraryA)(\"d3dim.dll\");\n\t\tif (hinst){\n\t\t\tpDirect3DCreate =\n\t\t\t\t(Direct3DCreate_Type)(*pGetProcAddress)(hinst, \"Direct3DCreate\");\n\t\t\tif(pDirect3DCreate){\n\t\t\t\tres = extDirect3DCreate(0x0700, &lpd3d, NULL);\n\t\t\t\tif(res == DD_OK) lpd3d->Release();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\thinst = (*pLoadLibraryA)(\"d3dim700.dll\");\n\t\t\tpDirect3DCreate =\n\t\t\t\t(Direct3DCreate_Type)(*pGetProcAddress)(hinst, \"Direct3DCreate\");\n\t\t\tif(pDirect3DCreate){\n\t\t\t\tres = extDirect3DCreate(0x0700, &lpd3d, NULL);\n\t\t\t\tif(res == DD_OK) lpd3d->Release();\n\t\t\t}\n\t\t}\n\t\tbreak;\n\t}\n\treturn 0;\n}\n\nFARPROC Remap_d3d7_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tif (!strcmp(proc,\"Direct3DCreate\") && !pDirect3DCreate){\n\t\tpDirect3DCreate=(Direct3DCreate_Type)(*pGetProcAddress)(hModule, proc);\n\t\tOutTraceD3D(\"GetProcAddress: hooking proc=%s at addr=%x\\n\", ProcToString(proc), pDirect3DCreate);\n\t\treturn (FARPROC)extDirect3DCreate;\n\t}\n\tif (!strcmp(proc,\"Direct3DCreateDevice\") && !pDirect3DCreateDevice){\n\t\tpDirect3DCreateDevice=(Direct3DCreateDevice_Type)(*pGetProcAddress)(hModule, proc);\n\t\tOutTraceD3D(\"GetProcAddress: hooking proc=%s at addr=%x\\n\", ProcToString(proc), pDirect3DCreateDevice);\n\t\treturn (FARPROC)extDirect3DCreateDevice;\n\t}\n\t// NULL -> keep the original call address\n\treturn NULL;\n}\n\nvoid HookDirect3DSession(LPDIRECTDRAW *lplpdd, int d3dversion)\n{\n\tOutTraceD3D(\"HookDirect3DSession: d3d=%x d3dversion=%d\\n\", *lplpdd, d3dversion);\n\n\tswitch(d3dversion){\n\tcase 1:\n\t\tSetHook((void *)(**(DWORD **)lplpdd +   0), extQueryInterfaceD31, (void **)&pQueryInterfaceD31, \"QueryInterface(D3S1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  12), extInitialize, (void **)&pInitialize, \"Initialize(1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  16), extEnumDevices1, (void **)&pEnumDevices1, \"EnumDevices(1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  20), extCreateLight1, (void **)&pCreateLight1, \"CreateLight(1)\");\n#ifdef TRACEMATERIAL\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  24), extCreateMaterial1, (void **)&pCreateMaterial1, \"CreateMaterial(1)\");\n#endif\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  28), extCreateViewport1, (void **)&pCreateViewport1, \"CreateViewport(1)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  32), extFindDevice1, (void **)&pFindDevice1, \"FindDevice(1)\");\t\n\t\tbreak;\n\tcase 2:\n\t\tSetHook((void *)(**(DWORD **)lplpdd +   0), extQueryInterfaceD32, (void **)&pQueryInterfaceD32, \"QueryInterface(D3S2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  12), extEnumDevices2, (void **)&pEnumDevices2, \"EnumDevices(2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  16), extCreateLight2, (void **)&pCreateLight2, \"CreateLight(2)\");\n#ifdef TRACEMATERIAL\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  20), extCreateMaterial2, (void **)&pCreateMaterial2, \"CreateMaterial(2)\");\n#endif\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  24), extCreateViewport2, (void **)&pCreateViewport2, \"CreateViewport(2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  28), extFindDevice2, (void **)&pFindDevice2, \"FindDevice(2)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  32), extCreateDevice2, (void **)&pCreateDevice2, \"CreateDevice(D3D2)\");\n\t\tbreak;\n\tcase 3:\n\t\tSetHook((void *)(**(DWORD **)lplpdd +   0), extQueryInterfaceD33, (void **)&pQueryInterfaceD33, \"QueryInterface(D3S3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  12), extEnumDevices3, (void **)&pEnumDevices3, \"EnumDevices(3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  16), extCreateLight3, (void **)&pCreateLight3, \"CreateLight(3)\");\n#ifdef TRACEMATERIAL\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  20), extCreateMaterial3, (void **)&pCreateMaterial3, \"CreateMaterial(3)\");\n#endif\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  24), extCreateViewport3, (void **)&pCreateViewport3, \"CreateViewport(3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  28), extFindDevice3, (void **)&pFindDevice3, \"FindDevice(3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  32), extCreateDevice3, (void **)&pCreateDevice3, \"CreateDevice(D3D3)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  40), extEnumZBufferFormats3, (void **)&pEnumZBufferFormats3, \"EnumZBufferFormats(D3D3)\");\n\t\tbreak;\n\tcase 7:\n\t\tSetHook((void *)(**(DWORD **)lplpdd +   0), extQueryInterfaceD37, (void **)&pQueryInterfaceD37, \"QueryInterface(D3S7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  12), extEnumDevices7, (void **)&pEnumDevices7, \"EnumDevices(7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  16), extCreateDevice7, (void **)&pCreateDevice7, \"CreateDevice(D3D7)\");\n\t\tSetHook((void *)(**(DWORD **)lplpdd +  24), extEnumZBufferFormats7, (void **)&pEnumZBufferFormats7, \"EnumZBufferFormats(D3D7)\");\n\t\tbreak;\n\t}\n} \n\nvoid HookDirect3DDevice(void **lpd3ddev, int d3dversion)\n{\n\tOutTraceD3D(\"HookDirect3DDevice: d3ddev=%x d3dversion=%d\\n\", lpd3ddev, d3dversion);\n\n\tswitch(d3dversion){\n\tcase 1:\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +   0), extQueryInterfaceD3D1, (void **)&pQueryInterfaceD3D1, \"QueryInterface(D3DD1)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +   8), extReleaseD3D1, (void **)&pReleaseD3D1, \"ReleaseD3D(1)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  16), extD3DGetCaps1, (void **)&pD3DGetCaps1, \"GetCaps(1)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  20), extSwapTextureHandles, (void **)&pSwapTextureHandles, \"SwapTextureHandles(1)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  32), extExecute, (void **)&pExecute, \"Execute(1)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  36), extAddViewport1, (void **)&pAddViewport1, \"AddViewport(1)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  40), extDeleteViewport1, (void **)&pDeleteViewport1, \"DeleteViewport(1)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  44), extNextViewport1, (void **)&pNextViewport1, \"NextViewport(1)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  56), extEnumTextureFormats1, (void **)&pEnumTextureFormats1, \"EnumTextureFormats(1)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  76), extBeginScene1, (void **)&pBeginScene1, \"BeginScene(1)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  80), extEndScene1, (void **)&pEndScene1, \"EndScene(1)\");\n\t\tbreak;\n\tcase 2:\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +   0), extQueryInterfaceD3D2, (void **)&pQueryInterfaceD3D2, \"QueryInterface(D3DD2)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +   8), extReleaseD3D2, (void **)&pReleaseD3D2, \"ReleaseD3D(2)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  12), extD3DGetCaps2, (void **)&pD3DGetCaps2, \"GetCaps(2)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  16), extSwapTextureHandles2, (void **)&pSwapTextureHandles2, \"SwapTextureHandles(2)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  24), extAddViewport2, (void **)&pAddViewport2, \"AddViewport(2)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  28), extDeleteViewport2, (void **)&pDeleteViewport2, \"DeleteViewport(2)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  32), extNextViewport2, (void **)&pNextViewport2, \"NextViewport(2)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  36), extEnumTextureFormats2, (void **)&pEnumTextureFormats2, \"EnumTextureFormats(2)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  40), extBeginScene2, (void **)&pBeginScene2, \"BeginScene(2)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  44), extEndScene2, (void **)&pEndScene2, \"EndScene(2)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  52), extSetCurrentViewport2, (void **)&pSetCurrentViewport2, \"SetCurrentViewport(2)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  56), extGetCurrentViewport2, (void **)&pGetCurrentViewport2, \"GetCurrentViewport(2)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  92), extSetRenderState2, (void **)&pSetRenderState2, \"SetRenderState(2)\");\n\t\t//SetHook((void *)(**(DWORD **)lpd3ddev + 100), extSetTransform2, (void **)&pSetTransform2, \"SetTransform(2)\");\n\t\tif(pSetRenderState2){\n\t\t\tif(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME); \t\t\n\t\t\tif(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE); \n\t\t\tif(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState2)(*lpd3ddev, D3DRENDERSTATE_ZFUNC, D3DCMP_ALWAYS);\n\t\t}\t\t\n\t\tbreak;\n\tcase 3:\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +   0), extQueryInterfaceD3D3, (void **)&pQueryInterfaceD3D3, \"QueryInterface(D3DD3)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +   8), extReleaseD3D3, (void **)&pReleaseD3D3, \"ReleaseD3D(3)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  12), extD3DGetCaps3, (void **)&pD3DGetCaps3, \"GetCaps(3)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  20), extAddViewport3, (void **)&pAddViewport3, \"AddViewport(3)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  32), extEnumTextureFormats3, (void **)&pEnumTextureFormats3, \"EnumTextureFormats(3)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  36), extBeginScene3, (void **)&pBeginScene3, \"BeginScene(3)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  40), extEndScene3, (void **)&pEndScene3, \"EndScene(3)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  48), extSetCurrentViewport3, (void **)&pSetCurrentViewport3, \"SetCurrentViewport(3)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  52), extGetCurrentViewport3, (void **)&pGetCurrentViewport3, \"GetCurrentViewport(3)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  88), extSetRenderState3, (void **)&pSetRenderState3, \"SetRenderState(3)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  96), extSetLightState3, (void **)&pSetLightState3, \"SetLightState(3)\");\n\t\t//SetHook((void *)(**(DWORD **)lpd3ddev + 100), extSetTransform3, (void **)&pSetTransform3, \"SetTransform(3)\");\n\t\tif (dxw.dwFlags4 & NOTEXTURES) SetHook((void *)(**(DWORD **)lpd3ddev + 152), extSetTexture3, (void **)&pSetTexture3, \"SetTexture(D3)\");\n\t\tif(pSetRenderState3){\n\t\t\tif(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME); \t\t\n\t\t\tif(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE); \n\t\t\tif(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState3)(*lpd3ddev, D3DRENDERSTATE_ZFUNC, D3DCMP_ALWAYS);\n\t\t}\t\t\n\t\tbreak;\n\tcase 7:\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +   0), extQueryInterfaceD3D7, (void **)&pQueryInterfaceD3D7, \"QueryInterface(D3DD7)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +   8), extReleaseD3D7, (void **)&pReleaseD3D7, \"ReleaseD3D(7)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  12), extD3DGetCaps7, (void **)&pD3DGetCaps7, \"GetCaps(7)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  16), extEnumTextureFormats7, (void **)&pEnumTextureFormats7, \"EnumTextureFormats(7)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  20), extBeginScene7, (void **)&pBeginScene7, \"BeginScene(7)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  24), extEndScene7, (void **)&pEndScene7, \"EndScene(7)\");\n\t\t//SetHook((void *)(**(DWORD **)lpd3ddev +  44), extSetTransform7, (void **)&pSetTransform7, \"SetTransform(7)\");\n\t\t//SetHook((void *)(**(DWORD **)lpd3ddev +  52), extSetViewport7, (void **)&pSetViewport7, \"SetViewport(7)\");\n\t\t//SetHook((void *)(**(DWORD **)lpd3ddev +  60), extGetViewport7, (void **)&pGetViewport7, \"GetViewport(7)\");\n\t\tSetHook((void *)(**(DWORD **)lpd3ddev +  80), extSetRenderState7, (void **)&pSetRenderState7, \"SetRenderState(7)\");\n\t\tif (dxw.dwFlags4 & NOTEXTURES) SetHook((void *)(**(DWORD **)lpd3ddev + 140), extSetTexture7, (void **)&pSetTexture7, \"SetTexture(D7)\");\n\t\tif(pSetRenderState7){\n\t\t\tif(dxw.dwFlags2 & WIREFRAME)(*pSetRenderState7)(*lpd3ddev, D3DRENDERSTATE_FILLMODE, D3DFILL_WIREFRAME); \t\t\n\t\t\tif(dxw.dwFlags4 & DISABLEFOGGING) (*pSetRenderState7)(*lpd3ddev, D3DRENDERSTATE_FOGENABLE, FALSE); \n\t\t\tif(dxw.dwFlags4 & ZBUFFERALWAYS) (*pSetRenderState7)(*lpd3ddev, D3DRENDERSTATE_ZFUNC, D3DCMP_ALWAYS);\n\t\t}\t\t\n\t\tbreak;\n\t}\n} \n\nHRESULT WINAPI extDirect3DCreate(UINT SDKVersion, LPDIRECT3D *lplpd3d, LPUNKNOWN pUnkOuter)\n{\n\tHRESULT res;\n\tUINT d3dversion; \n\n\td3dversion = 1;\n\tif(SDKVersion >= 0x0500) d3dversion = 2;\n\tif(SDKVersion >= 0x0600) d3dversion = 3;\n\tif(SDKVersion >= 0x0700) d3dversion = 7;\n\n\tOutTraceD3D(\"Direct3DCreate(D3D%d): SDKVersion=%x UnkOuter=%x\\n\", d3dversion, SDKVersion, pUnkOuter);\n\tres=(*pDirect3DCreate)(SDKVersion, lplpd3d, pUnkOuter);\n\n\tif(res) {\n\t\tOutTraceE(\"Direct3DCreate ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tHookDirect3DSession((LPDIRECTDRAW *)lplpd3d, d3dversion);\n\tOutTraceD3D(\"Direct3DCreate: d3d=%x\\n\", *lplpd3d);\n\treturn res;\n}\n\nHRESULT WINAPI extDirect3DCreateDevice(GUID FAR *lpGUID, LPDIRECT3D lpd3ddevice, LPDIRECTDRAWSURFACE surf, LPDIRECT3D *lplpd3ddevice, LPUNKNOWN pUnkOuter)\n{\n\tHRESULT res;\n\tint d3dversion = 0;\n\n\tswitch(lpGUID->Data1){\n\tcase 0x64108800: // IID_IDirect3DDevice\n\t\td3dversion = 1; break;\n\tcase 0x93281501: // IID_IDirect3DDevice2\n\t\td3dversion = 2; break;\n\tcase 0xb0ab3b60: // IID_IDirect3DDevice3\n\t\td3dversion = 3; break;\n\tcase 0xf5049e79: // IID_IDirect3DDevice7\n\t\td3dversion = 7; break;\n\t}\n\n\tOutTraceD3D(\"Direct3DCreateDevice: guid=%x(%s) d3ddevice=%x dds=%x%s UnkOuter=%x\\n\",\n\t\tlpGUID, ExplainGUID(lpGUID), lpd3ddevice, surf, dxwss.ExplainSurfaceRole(surf), pUnkOuter);\n\tres=(*pDirect3DCreateDevice)(lpGUID, lpd3ddevice, surf, lplpd3ddevice, pUnkOuter);\n\tif(res) OutTraceE(\"Direct3DCreateDevice ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse {\n\t\tOutTraceD3D(\"Direct3DCreateDevice: d3ddevice=%x\\n\", *lplpd3ddevice);\n\t\tif(d3dversion) HookDirect3DDevice((void **)lplpd3ddevice, d3dversion);\n\t}\n\treturn res;\n}\n\nvoid HookViewport(LPDIRECT3DVIEWPORT *lpViewport, int d3dversion)\n{\n\tOutTraceD3D(\"HookViewport: Viewport=%x d3dversion=%d\\n\", *lpViewport, d3dversion);\n\n \tswitch(d3dversion){\n\tcase 1:\n\t\tSetHook((void *)(**(DWORD **)lpViewport +  12), extInitializeVP, (void **)&pInitializeVP, \"Initialize(VP1)\");\n\t\tSetHook((void *)(**(DWORD **)lpViewport +  16), extGetViewport1, (void **)&pGetViewport1, \"GetViewport(1)\");\n\t\tSetHook((void *)(**(DWORD **)lpViewport +  20), extSetViewport1, (void **)&pSetViewport1, \"SetViewport(1)\");\n\n\t\t// to do: why Clear method crashes in \"Forsaken\" in emulation and GDI mode???\n\t\t// SetHook((void *)(**(DWORD **)lpViewport +  48), extViewportClear, (void **)&pViewportClear, \"Clear(1)\");\n\t\tbreak;\n\tcase 2:\n\t\tSetHook((void *)(**(DWORD **)lpViewport +  12), extInitializeVP, (void **)&pInitializeVP, \"Initialize(VP2)\");\n\t\tSetHook((void *)(**(DWORD **)lpViewport +  16), extGetViewport2, (void **)&pGetViewport2, \"GetViewport(2)\");\n\t\tSetHook((void *)(**(DWORD **)lpViewport +  20), extSetViewport2, (void **)&pSetViewport2, \"SetViewport(2)\");\n\t\tSetHook((void *)(**(DWORD **)lpViewport +  64), extGetViewport2_2, (void **)&pGetViewport2_2, \"GetViewport2(2)\");\n\t\tSetHook((void *)(**(DWORD **)lpViewport +  68), extSetViewport2_2, (void **)&pSetViewport2_2, \"SetViewport2(2)\");\n\t\tbreak;\n\tcase 3:\n\t\tSetHook((void *)(**(DWORD **)lpViewport +  12), extInitializeVP, (void **)&pInitializeVP, \"Initialize(VP3)\");\n\t\tSetHook((void *)(**(DWORD **)lpViewport +  16), extGetViewport3, (void **)&pGetViewport3, \"GetViewport(3)\");\n\t\tSetHook((void *)(**(DWORD **)lpViewport +  20), extSetViewport3, (void **)&pSetViewport3, \"SetViewport(3)\");\n\t\tSetHook((void *)(**(DWORD **)lpViewport +  64), extGetViewport2_3, (void **)&pGetViewport2_3, \"GetViewport2(3)\");\n\t\tSetHook((void *)(**(DWORD **)lpViewport +  68), extSetViewport2_3, (void **)&pSetViewport2_3, \"SetViewport2(3)\");\n\t\tbreak;\n\tcase 7:\n\t\tbreak;\n\t}\n}\n\n#ifdef TRACEMATERIAL\nvoid HookMaterial(LPDIRECT3DMATERIAL *lpMaterial, int d3dversion)\n{\n\tOutTraceD3D(\"HookMaterial: Material=%x d3dversion=%d\\n\", *lpMaterial, d3dversion);\n\n \tswitch(d3dversion){\n\tcase 1:\n\t\tSetHook((void *)(**(DWORD **)lpMaterial +  16), extSetMaterial, (void **)&pSetMaterial, \"SetMaterial\");\n\t\tSetHook((void *)(**(DWORD **)lpMaterial +  20), extGetMaterial, (void **)&pGetMaterial, \"GetMaterial\");\n\t\tbreak;\n\tdefault:\n\t\tSetHook((void *)(**(DWORD **)lpMaterial +  12), extSetMaterial, (void **)&pSetMaterial, \"SetMaterial\");\n\t\tSetHook((void *)(**(DWORD **)lpMaterial +  16), extGetMaterial, (void **)&pGetMaterial, \"GetMaterial\");\n\t\tbreak;\n\t}\n}\n#endif\n\nvoid HookTexture(LPVOID *lpTexture, int version)\n{\n\tOutTraceD3D(\"HookTexture: Texture=%x version=%d\\n\", *lpTexture, version);\n \tswitch(version){\n\tcase 1:\n\t\tSetHook((void *)(**(DWORD **)lpTexture +  12), extTexInitialize, (void **)&pTInitialize, \"Initialize(T1)\");\n\t\tSetHook((void *)(**(DWORD **)lpTexture +  16), extTexGetHandle1, (void **)&pTGetHandle1, \"GetHandle(T1)\");\n\t\tSetHook((void *)(**(DWORD **)lpTexture +  20), extTexPaletteChanged1, (void **)&pTPaletteChanged1, \"PaletteChanged(T1)\");\n\t\tSetHook((void *)(**(DWORD **)lpTexture +  24), extTexLoad1, (void **)&pTLoad1, \"Load(T1)\");\n\t\tSetHook((void *)(**(DWORD **)lpTexture +  28), extTexUnload, (void **)&pTUnload, \"Unload(T1)\");\n\t\tbreak;\n\tcase 2:\n\t\tSetHook((void *)(**(DWORD **)lpTexture +  12), extTexGetHandle2, (void **)&pTGetHandle2, \"GetHandle(T2)\");\n\t\tSetHook((void *)(**(DWORD **)lpTexture +  16), extTexPaletteChanged2, (void **)&pTPaletteChanged2, \"PaletteChanged(T2)\");\n\t\tSetHook((void *)(**(DWORD **)lpTexture +  20), extTexLoad2, (void **)&pTLoad2, \"Load(T2)\");\n\t\tbreak;\n\t}\n}\n\nHRESULT WINAPI extQueryInterfaceD31(void *lpd3d, REFIID riid, LPVOID *ppvObj)\n{ return extQueryInterfaceDX(1, pQueryInterfaceD31, lpd3d, riid, ppvObj); }\nHRESULT WINAPI extQueryInterfaceD32(void *lpd3d, REFIID riid, LPVOID *ppvObj)\n{ return extQueryInterfaceDX(2, pQueryInterfaceD32, lpd3d, riid, ppvObj); }\nHRESULT WINAPI extQueryInterfaceD33(void *lpd3d, REFIID riid, LPVOID *ppvObj)\n{ return extQueryInterfaceDX(3, pQueryInterfaceD33, lpd3d, riid, ppvObj); }\nHRESULT WINAPI extQueryInterfaceD37(void *lpd3d, REFIID riid, LPVOID *ppvObj)\n{ return extQueryInterfaceDX(7, pQueryInterfaceD37, lpd3d, riid, ppvObj); }\n\nHRESULT WINAPI extQueryInterfaceD3D1(void *lpd3ddev, REFIID riid, LPVOID *ppvObj)\n{ return extQueryInterfaceDX(1, pQueryInterfaceD3D1, lpd3ddev, riid, ppvObj); }\nHRESULT WINAPI extQueryInterfaceD3D2(void *lpd3ddev, REFIID riid, LPVOID *ppvObj)\n{ return extQueryInterfaceDX(2, pQueryInterfaceD3D2, lpd3ddev, riid, ppvObj); }\nHRESULT WINAPI extQueryInterfaceD3D3(void *lpd3ddev, REFIID riid, LPVOID *ppvObj)\n{ return extQueryInterfaceDX(3, pQueryInterfaceD3D3, lpd3ddev, riid, ppvObj); }\nHRESULT WINAPI extQueryInterfaceD3D7(void *lpd3ddev, REFIID riid, LPVOID *ppvObj)\n{ return extQueryInterfaceDX(7, pQueryInterfaceD3D7, lpd3ddev, riid, ppvObj); }\n\nULONG WINAPI extReleaseD3D(int d3dversion, ReleaseD3D_Type pReleaseD3D, LPDIRECT3DDEVICE lpd3dd)\n{\n\tULONG ref;\n\tOutTraceD3D(\"Release(D3DD%d): d3ddev=%x \\n\", d3dversion, lpd3dd);\n\tref = (*pReleaseD3D)(lpd3dd);\n\tOutTraceD3D(\"Release(D3DD): ref=%d\\n\", ref);\n\treturn ref;\n}\n\nULONG WINAPI extReleaseD3D1(LPDIRECT3DDEVICE lpd3d)\n{ return extReleaseD3D(1, pReleaseD3D1, lpd3d); }\nULONG WINAPI extReleaseD3D2(LPDIRECT3DDEVICE lpd3d)\n{ return extReleaseD3D(2, pReleaseD3D2, lpd3d); }\nULONG WINAPI extReleaseD3D3(LPDIRECT3DDEVICE lpd3d)\n{ return extReleaseD3D(3, pReleaseD3D3, lpd3d); }\nULONG WINAPI extReleaseD3D7(LPDIRECT3DDEVICE lpd3d)\n{ return extReleaseD3D(7, pReleaseD3D7, lpd3d); }\n\nHRESULT WINAPI extInitialize(void *lpd3d)\n{\n\tHRESULT res;\n\n\t// the Initialize method is present in D3D interface version 1 only...\n\tOutTraceD3D(\"Initialize(D3D1): d3d=%x\\n\", lpd3d);\n\tres=(*pInitialize)(lpd3d);\n\tif(res) OutTraceE(\"Initialize ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"Initialize: OK\\n\");\n\treturn res;\n}\n\ntypedef struct {\n\tLPD3DENUMDEVICESCALLBACK *cb;\n\tLPVOID arg;\n} CallbackArg;\n\ntypedef struct {\n\tLPD3DENUMDEVICESCALLBACK7 *cb;\n\tLPVOID arg;\n} CallbackArg7;\n\nstatic void DumpD3DDeviceDesc(LPD3DDEVICEDESC d3, char *label)\n{\n\tif(IsTraceD3D){\n\t\tif(d3){\n\t\t\tOutTrace(\"EnumDevices: CALLBACK dev=%s Size=%d Flags=%x \", label, d3->dwSize, d3->dwFlags);\n\t\t\tif(d3->dwFlags & D3DDD_COLORMODEL) OutTrace(\"ColorModel=%x \", d3->dcmColorModel);\n\t\t\tif(d3->dwFlags & D3DDD_DEVCAPS) OutTrace(\"DevCaps=%x \", d3->dwDevCaps);\n\t\t\tif(d3->dwFlags & D3DDD_TRANSFORMCAPS) OutTrace(\"TransformCaps=%x \", d3->dtcTransformCaps.dwCaps);\n\t\t\tif(d3->dwFlags & D3DDD_LIGHTINGCAPS) OutTrace(\"LightingCaps=%x \", d3->dlcLightingCaps);\n\t\t\tif(d3->dwFlags & D3DDD_BCLIPPING) OutTrace(\"Clipping=%x \", d3->bClipping);\n\t\t\tif(d3->dwFlags & D3DDD_LINECAPS) OutTrace(\"LineCaps=%x \", d3->dpcLineCaps);\n\t\t\tif(d3->dwFlags & D3DDD_TRICAPS) OutTrace(\"TriCaps=%x \", d3->dpcTriCaps);\n\t\t\tif(d3->dwFlags & D3DDD_DEVICERENDERBITDEPTH) OutTrace(\"DeviceRenderBitDepth=%d \", d3->dwDeviceRenderBitDepth);\n\t\t\tif(d3->dwFlags & D3DDD_DEVICEZBUFFERBITDEPTH) OutTrace(\"DeviceZBufferBitDepth=%d \", d3->dwDeviceZBufferBitDepth);\n\t\t\tif(d3->dwFlags & D3DDD_MAXBUFFERSIZE) OutTrace(\"MaxBufferSize=%d \", d3->dwMaxBufferSize);\n\t\t\tif(d3->dwFlags & D3DDD_MAXVERTEXCOUNT) OutTrace(\"MaxVertexCount=%d \", d3->dwMaxVertexCount);\n\t\t\tOutTrace(\"Texture min=(%dx%d) max=(%dx%d)\\n\", d3->dwMinTextureWidth, d3->dwMinTextureHeight, d3->dwMaxTextureWidth, d3->dwMaxTextureHeight);\n\t\t\tif(IsTraceHex) HexTrace((unsigned char *)d3, d3->dwSize);\n\t\t}\n\t\telse\n\t\t\tOutTrace(\"EnumDevices: CALLBACK dev=%s ddesc=NULL\\n\", label);\n\t}\n}\n\nstatic void DumpD3DPrimCaps(char *label, D3DPRIMCAPS *pc)\n{\n\tOutTrace(\"%s={siz=%d Misc=%x Raster=%x ZCmp=%x SrcBlend=%x DestBlend=%x AlphaCmp=%x Shade=%x Tex=%x TexFil=%x TexBlend=%x TexAddr=%x Stipple=(%dx%d)} \", \n\t\tlabel,\n\t\tpc->dwSize, pc->dwMiscCaps, pc->dwRasterCaps, pc->dwZCmpCaps, pc->dwSrcBlendCaps, pc->dwDestBlendCaps, pc->dwAlphaCmpCaps,\n\t\tpc->dwShadeCaps, pc->dwTextureCaps, pc->dwTextureFilterCaps, pc->dwTextureBlendCaps, pc->dwTextureAddressCaps,\n\t\tpc->dwStippleWidth, pc->dwStippleHeight);\n}\n\nstatic void DumpD3DDeviceDesc7(LPD3DDEVICEDESC7 d3, char *label)\n{\n\tif(IsTraceD3D){\n\t\tif(d3){\n\t\t\tOutTrace(\"EnumDevices: CALLBACK dev=%s DevCaps=%x \", label, d3->dwDevCaps);\n\t\t\tDumpD3DPrimCaps(\"LineCaps\", &d3->dpcLineCaps);\n\t\t\tDumpD3DPrimCaps(\"TriCaps\", &d3->dpcLineCaps);\n\t\t\tOutTrace(\"RenderBitDepth=%d ZBufferBitDepth\", d3->dwDeviceRenderBitDepth, d3->dwDeviceZBufferBitDepth);\n\t\t\tOutTrace(\"Texture min=(%dx%d) max=(%dx%d)\\n\", d3->dwMinTextureWidth, d3->dwMinTextureHeight, d3->dwMaxTextureWidth, d3->dwMaxTextureHeight);\n\t\t\t// to be completed ....\n\t\t\t//OutTrace(\"\\n\");\n\t\t\tif(IsTraceHex) HexTrace((unsigned char *)d3, sizeof(D3DDEVICEDESC7));\n\t\t}\n\t\telse\n\t\t\tOutTrace(\"EnumDevices: CALLBACK dev=%s ddesc=NULL\\n\", label);\n\t}\n}\n\nHRESULT WINAPI extDeviceProxy(GUID FAR *lpGuid, LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC lpd3ddd1, LPD3DDEVICEDESC lpd3ddd2, LPVOID arg)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"EnumDevices: CALLBACK GUID=%x(%s) DeviceDescription=\\\"%s\\\", DeviceName=\\\"%s\\\", arg=%x\\n\", lpGuid->Data1, ExplainGUID(lpGuid), lpDeviceDescription, lpDeviceName, ((CallbackArg *)arg)->arg);\n\tDumpD3DDeviceDesc(lpd3ddd1, \"HWDEV\");\n\tDumpD3DDeviceDesc(lpd3ddd2, \"SWDEV\");\n\n\t// IID_IDirect3DHALDevice = 0x84e63de0....\n\tif((dxw.dwFlags8 & NOHALDEVICE) && (lpGuid->Data1 == 0x84e63de0))\n\t{\n\t\tOutTraceDW(\"EnumDevices: D3DHALDEVICE SKIP\\n\");\n\t\treturn TRUE;\n\t}\n\n\tif(dxw.dwFlags4 & NOPOWER2FIX){ \n\t\tD3DDEVICEDESC lpd3ddd1fix, lpd3ddd2fix;\n\t\tif(lpd3ddd1) memcpy(&lpd3ddd1fix, lpd3ddd1, sizeof(D3DDEVICEDESC));\n\t\tif(lpd3ddd2) memcpy(&lpd3ddd2fix, lpd3ddd2, sizeof(D3DDEVICEDESC));\n\t\tlpd3ddd1fix.dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2;\n\t\tlpd3ddd1fix.dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2;\n\t\tlpd3ddd2fix.dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2;\n\t\tlpd3ddd2fix.dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2;\n\t\tres = (*(((CallbackArg *)arg)->cb))(lpGuid, lpDeviceDescription, lpDeviceName, lpd3ddd1?&lpd3ddd1fix:NULL, lpd3ddd2?&lpd3ddd2fix:NULL, ((CallbackArg *)arg)->arg);\n\t}\n\telse {\n\t\tres = (*(((CallbackArg *)arg)->cb))(lpGuid, lpDeviceDescription, lpDeviceName, lpd3ddd1, lpd3ddd2, ((CallbackArg *)arg)->arg);\n\t}\n\tOutTraceD3D(\"EnumDevices: CALLBACK ret=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extDeviceProxy7(LPSTR lpDeviceDescription, LPSTR lpDeviceName, LPD3DDEVICEDESC7 lpd3ddd, LPVOID arg)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"EnumDevices(D3D7): CALLBACK DeviceDescription=\\\"%s\\\", DeviceName=\\\"%s\\\", arg=%x\\n\", lpDeviceDescription, lpDeviceName, ((CallbackArg *)arg)->arg);\n\tDumpD3DDeviceDesc7(lpd3ddd, \"DX7DEV\");\n\n\t// to do: NOHALDEVICE handling, we have no GUID here!\n\n\tif(dxw.dwFlags4 & NOPOWER2FIX){ \n\t\tD3DDEVICEDESC7 lpd3dddfix;\n\t\tif(lpd3ddd) memcpy(&lpd3dddfix, lpd3ddd, sizeof(D3DDEVICEDESC7));\n\t\tlpd3dddfix.dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2;\n\t\tlpd3dddfix.dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2;\n\t\tres = (*(((CallbackArg7 *)arg)->cb))(lpDeviceDescription, lpDeviceName, lpd3ddd?&lpd3dddfix:NULL, ((CallbackArg7 *)arg)->arg);\n\t}\n\telse {\n\t\tres = (*(((CallbackArg7 *)arg)->cb))(lpDeviceDescription, lpDeviceName, lpd3ddd, ((CallbackArg7 *)arg)->arg);\n\t}\n\tOutTraceD3D(\"EnumDevices: CALLBACK ret=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extEnumDevices(int d3dversion, EnumDevices_Type pEnumDevices, void *lpd3d, LPD3DENUMDEVICESCALLBACK cb, LPVOID arg)\n{\n\tHRESULT res;\n\tCallbackArg Arg;\n\n\tOutTraceD3D(\"EnumDevices(D3D%d): d3d=%x arg=%x\\n\", d3dversion, lpd3d, arg);\n\tArg.cb= &cb;\n\tArg.arg=arg;\n\tres=(*pEnumDevices)(lpd3d, (LPD3DENUMDEVICESCALLBACK)extDeviceProxy, (LPVOID)&Arg);\n\tif(res) OutTraceE(\"EnumDevices ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"EnumDevices: OK\\n\");\n\treturn res;\n}\n\nHRESULT WINAPI extEnumDevices1(void *lpd3d, LPD3DENUMDEVICESCALLBACK cb, LPVOID arg)\n{ return extEnumDevices(1, pEnumDevices1, lpd3d, cb, arg); }\nHRESULT WINAPI extEnumDevices2(void *lpd3d, LPD3DENUMDEVICESCALLBACK cb, LPVOID arg)\n{ return extEnumDevices(2, pEnumDevices2, lpd3d, cb, arg); }\nHRESULT WINAPI extEnumDevices3(void *lpd3d, LPD3DENUMDEVICESCALLBACK cb, LPVOID arg)\n{ return extEnumDevices(3, pEnumDevices3, lpd3d, cb, arg); }\n\nHRESULT WINAPI extEnumDevices7(void *lpd3d, LPD3DENUMDEVICESCALLBACK7 cb, LPVOID arg)\n{\n\tHRESULT res;\n\tCallbackArg7 Arg;\n\n\tOutTraceD3D(\"EnumDevices(D3D7): d3d=%x arg=%x\\n\", lpd3d, arg);\n\tArg.cb= &cb;\n\tArg.arg=arg;\n\tres=(*pEnumDevices7)(lpd3d, (LPD3DENUMDEVICESCALLBACK7)extDeviceProxy7, (LPVOID)&Arg);\n\tif(res) OutTraceE(\"EnumDevices ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"EnumDevices: OK\\n\");\n\treturn res;\n}\n\nHRESULT WINAPI extCreateLight(int d3dversion, CreateLight_Type pCreateLight, void *lpd3d, LPDIRECT3DLIGHT *lpLight, IUnknown *p0)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"CreateLight(D3D%d): d3d=%x\\n\", d3dversion, lpd3d);\n\tres=(*pCreateLight)(lpd3d, lpLight, p0);\n\tif(res) OutTraceE(\"CreateLight ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"CreateLight: OK\\n\");\n\treturn res;\n}\n\nHRESULT WINAPI extCreateLight1(void *lpd3d, LPDIRECT3DLIGHT *lpLight, IUnknown *p0)\n{ return extCreateLight(1, pCreateLight1, lpd3d, lpLight, p0); }\nHRESULT WINAPI extCreateLight2(void *lpd3d, LPDIRECT3DLIGHT *lpLight, IUnknown *p0)\n{ return extCreateLight(2, pCreateLight2, lpd3d, lpLight, p0); }\nHRESULT WINAPI extCreateLight3(void *lpd3d, LPDIRECT3DLIGHT *lpLight, IUnknown *p0)\n{ return extCreateLight(3, pCreateLight3, lpd3d, lpLight, p0); }\n\n#ifdef TRACEMATERIAL\nHRESULT WINAPI extCreateMaterial1(void *lpd3d, LPDIRECT3DMATERIAL *lpMaterial, IUnknown *p0)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"CreateMaterial(D3D1): d3d=%x\\n\", lpd3d);\n\tres=(*pCreateMaterial1)(lpd3d, lpMaterial, p0);\n\tif(res) OutTraceE(\"CreateMaterial ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"CreateMaterial: OK\\n\");\n\tHookMaterial(lpMaterial, 0);\n\treturn res;\n}\n\nHRESULT WINAPI extCreateMaterial2(void *lpd3d, LPDIRECT3DMATERIAL2 *lpMaterial, IUnknown *p0)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"CreateMaterial(D3D2): d3d=%x\\n\", lpd3d);\n\tres=(*pCreateMaterial2)(lpd3d, lpMaterial, p0);\n\tif(res) OutTraceE(\"CreateMaterial ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"CreateMaterial: OK\\n\");\n\t//HookMaterial(lpMaterial, 0);\n\treturn res;\n}\n\nHRESULT WINAPI extCreateMaterial3(void *lpd3d, LPDIRECT3DMATERIAL3 *lpMaterial, IUnknown *p0)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"CreateMaterial(D3D3): d3d=%x\\n\", lpd3d);\n\tres=(*pCreateMaterial3)(lpd3d, lpMaterial, p0);\n\tif(res) OutTraceE(\"CreateMaterial ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"CreateMaterial: OK\\n\");\n\t//HookMaterial(lpMaterial, 0);\n\treturn res;\n}\n#endif\n\nHRESULT WINAPI extCreateViewport1(void *lpd3d, LPDIRECT3DVIEWPORT *lpViewport, IUnknown *p0)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"CreateViewport(D3D1): d3d=%x\\n\", lpd3d);\n\tres=(*pCreateViewport1)(lpd3d, lpViewport, p0);\n\tif(res) OutTraceE(\"CreateViewport ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"CreateViewport: Viewport=%x\\n\", *lpViewport);\n\tHookViewport(lpViewport, 1);\n\treturn res;\n}\n\nHRESULT WINAPI extCreateViewport2(void *lpd3d, LPDIRECT3DVIEWPORT2 *lpViewport, IUnknown *p0)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"CreateViewport(D3D2): d3d=%x\\n\", lpd3d);\n\tres=(*pCreateViewport2)(lpd3d, lpViewport, p0);\n\tif(res) OutTraceE(\"CreateViewport ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"CreateViewport: Viewport=%x\\n\", *lpViewport);\n\tHookViewport((LPDIRECT3DVIEWPORT *)lpViewport, 2);\n\treturn res;\n}\n\nHRESULT WINAPI extCreateViewport3(void *lpd3d, LPDIRECT3DVIEWPORT3 *lpViewport, IUnknown *p0)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"CreateViewport(D3D3): d3d=%x\\n\", lpd3d);\n\tres=(*pCreateViewport3)(lpd3d, lpViewport, p0);\n\tif(res) OutTraceE(\"CreateViewport ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"CreateViewport: Viewport=%x\\n\", *lpViewport);\n\tHookViewport((LPDIRECT3DVIEWPORT *)lpViewport, 3);\n\tif(IsDebug){\n\t\tHRESULT res2;\n\t\tD3DVIEWPORT2 vpdesc;\n\t\tvpdesc.dwSize = sizeof(D3DVIEWPORT2);\n\t\tres2=(*pGetViewport2_3)(*lpViewport, &vpdesc);\n\t\tif(res) \n\t\t\tOutTraceE(\"CreateViewport ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\telse\n\t\t\tOutTraceD3D(\"CreateViewport: size=%d pos=(%d,%d) dim=(%dx%d)\\n\",\n\t\t\t\tvpdesc.dwSize, vpdesc.dwX, vpdesc.dwY, vpdesc.dwWidth, vpdesc.dwHeight);\n\t}\n\treturn res;\n}\n\nstatic HRESULT WINAPI extFindDevice(int d3dversion, FindDevice_Type pFindDevice, void *lpd3d, LPD3DFINDDEVICESEARCH p1, LPD3DFINDDEVICERESULT p2)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"FindDevice(D3D%d): d3d=%x devsearch=%x (size=%d flags=%x caps=%x primcaps=%x colormodel=%x hw=%x guid=%x) p2=%x\\n\", \n\t\td3dversion, lpd3d, p1, p1->dwSize, p1->dwFlags, p1->dwCaps, p1->dpcPrimCaps, p1->dcmColorModel, p1->bHardware, p1->guid, p2);\n\tres=(*pFindDevice)(lpd3d, p1, p2);\n\tif(res) OutTraceE(\"FindDevice ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse {\n\t\tOutTraceD3D(\"FindDevice: GUID=%x.%x.%x.%x\\n\", p2->guid.Data1, p2->guid.Data2, p2->guid.Data3, p2->guid.Data4);\n\t\tDumpD3DDeviceDesc(&(p2->ddHwDesc), \"HWDEV\");\n\t\tDumpD3DDeviceDesc(&(p2->ddSwDesc), \"SWDEV\");\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extFindDevice1(void *lpd3d, LPD3DFINDDEVICESEARCH p1, LPD3DFINDDEVICERESULT p2)\n{ return extFindDevice(1, pFindDevice1, lpd3d, p1, p2); }\nHRESULT WINAPI extFindDevice2(void *lpd3d, LPD3DFINDDEVICESEARCH p1, LPD3DFINDDEVICERESULT p2)\n{ return extFindDevice(2, pFindDevice2, lpd3d, p1, p2); }\nHRESULT WINAPI extFindDevice3(void *lpd3d, LPD3DFINDDEVICESEARCH p1, LPD3DFINDDEVICERESULT p2)\n{ return extFindDevice(3, pFindDevice3, lpd3d, p1, p2); }\n\nHRESULT WINAPI extSetViewport(int dxversion, SetViewport_Type pSetViewport, void *lpvp, LPD3DVIEWPORT vpd)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"SetViewport(D3D%d): viewport=%x viewportd=%x size=%d pos=(%d,%d) dim=(%dx%d) scale=(%fx%f) maxXYZ=(%f,%f,%f) minZ=%f\\n\", \n\t\tdxversion, lpvp, vpd, vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight, vpd->dvScaleX, vpd->dvScaleY, \n\t\tvpd->dvMaxX, vpd->dvMaxY, vpd->dvMaxZ, vpd->dvMinZ);\n\n\t// v2.03.48: scaled dvScaleX/Y fields. Fixes \"Dark Vengeance\" viewport size when using D3D interface.\n\t// no.... see Forsaken\n\t// no good (useless) also for \"Spearhead\"\n\t//if(dxw.Windowize){\n\t//\tdxw.MapClient(&vpd->dvScaleX, &vpd->dvScaleY);\n\t//\tOutTraceDW(\"SetViewport: FIXED scale=(%fx%f)\\n\", vpd->dvScaleX, vpd->dvScaleY);\n\t//\tint w = (int) vpd->dwWidth;\n\t//\tint h = (int) vpd->dwHeight;\n\t//\tdxw.MapClient(&w, &h);\n\t//\tvpd->dwWidth = (DWORD) w;\n\t//\tvpd->dwHeight = (DWORD) h;\n\t//\tOutTraceDW(\"SetViewport: FIXED scale=(%dx%d)\\n\", vpd->dwWidth, vpd->dwHeight);\n\t//}\n\n\tres=(*pSetViewport)(lpvp, vpd);\n\tif(res) OutTraceE(\"SetViewport ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"SetViewport: OK\\n\");\n\treturn res;\n}\n\nHRESULT WINAPI extSetViewport1(void *lpvp, LPD3DVIEWPORT vpd)\n{ return extSetViewport(1, pSetViewport1, lpvp, vpd); }\nHRESULT WINAPI extSetViewport2(void *lpvp, LPD3DVIEWPORT vpd)\n{ return extSetViewport(2, pSetViewport2, lpvp, vpd); }\nHRESULT WINAPI extSetViewport3(void *lpvp, LPD3DVIEWPORT vpd)\n{ return extSetViewport(3, pSetViewport3, lpvp, vpd); }\n\nHRESULT WINAPI extGetViewport(int d3dversion, GetViewport_Type pGetViewport, void *lpvp, LPD3DVIEWPORT vpd)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"GetViewport(D3D%d): viewport=%x viewportd=%x\\n\", d3dversion, lpvp, vpd);\n\tres=(*pGetViewport)(lpvp, vpd);\n\t// v2.03.48: should the dvScaleX/Y fields be unscaled? \n\tif(res) OutTraceE(\"GetViewport ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"GetViewport: OK size=%d pos=(%d,%d) dim=(%dx%d) scale=(%fx%f) maxXYZ=(%f,%f,%f) minZ=%f\\n\",\n\t\tvpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight, vpd->dvScaleX, vpd->dvScaleY, \n\t\tvpd->dvMaxX, vpd->dvMaxY, vpd->dvMaxZ, vpd->dvMinZ);\n\treturn res;\n}\n\nHRESULT WINAPI extGetViewport1(void *lpvp, LPD3DVIEWPORT vpd)\n{ return extGetViewport(1, pGetViewport1, lpvp, vpd); }\nHRESULT WINAPI extGetViewport2(void *lpvp, LPD3DVIEWPORT vpd)\n{ return extGetViewport(2, pGetViewport2, lpvp, vpd); }\nHRESULT WINAPI extGetViewport3(void *lpvp, LPD3DVIEWPORT vpd)\n{ return extGetViewport(3, pGetViewport3, lpvp, vpd); }\n\nHRESULT WINAPI extInitializeVP(void *lpvp, LPDIRECT3D lpd3d)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"Initialize(VP): viewport=%x d3d=%x\\n\", lpvp, lpd3d);\n\tres=(*pInitializeVP)(lpvp, lpd3d);\n\tif(res) OutTraceE(\"Initialize(VP) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"Initialize(VP): OK \\n\");\n\treturn res;\n}\n\n#ifndef D3DERR_NOTAVAILABLE\n#define _FACD3D  0x876\n#define D3DERR_NOTAVAILABLE MAKE_HRESULT(1, _FACD3D, 2154)\n#endif\n\nHRESULT WINAPI extCreateDevice2(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE lpdds, LPDIRECT3DDEVICE2 *lplpd3dd)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"CreateDevice(D3D2): d3d=%x GUID=%x(%s) lpdds=%x%s\\n\", \n\t\tlpd3d, Guid.Data1, ExplainGUID((GUID *)&Guid), lpdds, dxwss.ExplainSurfaceRole((LPDIRECTDRAWSURFACE)lpdds));\n\n\tif((dxw.dwFlags8 & NOHALDEVICE) && (Guid.Data1 == 0x84e63de0)) {\n\t\tOutTraceDW(\"CreateDevice(D3D2): D3DHALDEVICE SKIP\\n\");\n\t\treturn D3DERR_NOTAVAILABLE;\n\t}\n\n\tres=(*pCreateDevice2)(lpd3d, Guid, lpdds, lplpd3dd);\n\tif(res!=DD_OK) {\n\t\tOutTraceE(\"CreateDevice(D3D2) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t}\n\telse{\n\t\tOutTraceD3D(\"CreateDevice(D3D2): lpd3dd=%x\\n\", lpd3d, *lplpd3dd);\n\t\tHookDirect3DDevice((void **)lplpd3dd, 2); \n\t}\n\n\treturn res;\n}\n\nHRESULT WINAPI extCreateDevice3(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE4 lpdds, LPDIRECT3DDEVICE3 *lplpd3dd, LPUNKNOWN unk)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"CreateDevice(D3D3): d3d=%x GUID=%x(%s) lpdds=%x%s\\n\", \n\t\tlpd3d, Guid.Data1, ExplainGUID((GUID *)&Guid), lpdds, dxwss.ExplainSurfaceRole((LPDIRECTDRAWSURFACE)lpdds));\n\n\tif((dxw.dwFlags8 & NOHALDEVICE) && (Guid.Data1 == 0x84e63de0)) {\n\t\tOutTraceDW(\"CreateDevice(D3D3): D3DHALDEVICE SKIP\\n\");\n\t\treturn D3DERR_NOTAVAILABLE;\n\t}\n\n\tres=(*pCreateDevice3)(lpd3d, Guid, lpdds, lplpd3dd, unk);\n\tif(res!=DD_OK) {\n\t\tOutTraceE(\"CreateDevice(D3D3) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t}\n\telse{\n\t\tOutTraceD3D(\"CreateDevice(D3D3): lpd3dd=%x\\n\", lpd3d, *lplpd3dd);\n\t\tHookDirect3DDevice((void **)lplpd3dd, 3); \n\t}\n\n\treturn res;\n}\n\nHRESULT WINAPI extCreateDevice7(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE7 lpdds, LPDIRECT3DDEVICE7 *lplpd3dd)\n{\n\t// v2.02.83: D3D CreateDevice (version 7? all versions?) internally calls the Release method upon the backbuffer\n\t// surface, and this has to be avoided since it causes a crash. \n\n\tHRESULT res;\n\n\tOutTraceD3D(\"CreateDevice(D3D7): d3d=%x GUID=%x(%s) lpdds=%x%s\\n\", \n\t\tlpd3d, Guid.Data1, ExplainGUID((GUID *)&Guid), lpdds, dxwss.ExplainSurfaceRole((LPDIRECTDRAWSURFACE)lpdds));\n\n\tres=(*pCreateDevice7)(lpd3d, Guid, lpdds, lplpd3dd);\n\n\tif(res == DD_OK){\n\t\tOutTraceD3D(\"CreateDevice(D3D7): lpd3dd=%x\\n\", lpd3d, *lplpd3dd);\n\t\tHookDirect3DDevice((void **)lplpd3dd, 7); \n\t}\n\telse\n\t\tOutTraceE(\"CreateDevice(D3D7) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\n\treturn res;\n}\n\nHRESULT WINAPI extSetRenderState(int version, SetRenderState3_Type pSetRenderState, void *d3dd, D3DRENDERSTATETYPE State, DWORD Value)\n{\n\tHRESULT res;\n\tOutTraceB(\"SetRenderState(D3D%d): d3dd=%x State=%x(%s) Value=%x\\n\", version, d3dd, State, ExplainD3DRenderState(State), Value);\n\n\tif((dxw.dwFlags4 & ZBUFFERALWAYS) && (State == D3DRENDERSTATE_ZFUNC)) {\n\t\tOutTraceD3D(\"SetRenderState: FIXED State=ZFUNC Value=%s->D3DCMP_ALWAYS\\n\", ExplainRenderstateValue(Value));\n\t\tValue = D3DCMP_ALWAYS;\n\t}\n\tif((dxw.dwFlags2 & WIREFRAME) && (State == D3DRENDERSTATE_FILLMODE)){\n\t\tOutTraceD3D(\"SetRenderState: FIXED State=FILLMODE Value=%x->D3DFILL_WIREFRAME\\n\", Value);\n\t\tValue = D3DFILL_WIREFRAME;\n\t}\n\tif((dxw.dwFlags4 & DISABLEFOGGING) && (State == D3DRENDERSTATE_FOGENABLE)){\n\t\tOutTraceD3D(\"SetRenderState: FIXED State=FOGENABLE Value=%x->FALSE\\n\", Value);\n\t\tValue = FALSE;\n\t}\n\tif((dxw.dwFlags5 & TEXTURETRANSP) && (State == D3DRENDERSTATE_ALPHABLENDENABLE)){\n\t\tOutTraceD3D(\"SetRenderState: FIXED State=ALPHABLENDENABLE Value=%x->TRUE\\n\", Value);\n\t\tValue = TRUE;\n\t}\n\n\t// beware!!! likely this code would work for interface version 3 only !!!\n\tif((State==D3DRENDERSTATE_ZWRITEENABLE) && (Value==TRUE) && (dxw.dwFlags8 & DYNAMICZCLEAN)){\n\t//if((State==D3DRENDERSTATE_ZWRITEENABLE) && (Value==FALSE) && (dxw.dwFlags8 & DYNAMICZCLEAN)){\n\t//if((State==D3DRENDERSTATE_ZWRITEENABLE) && (dxw.dwFlags8 & DYNAMICZCLEAN)){\n\t\tHRESULT res2;\n\t\tLPDIRECT3DVIEWPORT3 vp;\n\t\tD3DVIEWPORT vpd;\n\t\tres2=((LPDIRECT3DDEVICE3)d3dd)->GetCurrentViewport(&vp);\n\t\tif(!res2){\n\t\t\tD3DRECT d3dRect;\n\t\t\tvpd.dwSize=sizeof(D3DVIEWPORT);\n\t\t\tvp->GetViewport(&vpd);\n\t\t\td3dRect.x1 = vpd.dwX; \n\t\t\td3dRect.y1 = vpd.dwY;\n\t\t\td3dRect.x2 = vpd.dwX + vpd.dwWidth;\n\t\t\td3dRect.y2 = vpd.dwY + vpd.dwHeight;\n\t\t\tOutTraceD3D(\"d3dRect=(%d,%d)-(%d,%d)\\n\", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2);\n\t\t\tif(dxw.dwFlags4 & ZBUFFERCLEAN )vp->Clear2(1, &d3dRect, D3DCLEAR_ZBUFFER, 0, 1.0, 0);\t\n\t\t\tif(dxw.dwFlags4 & ZBUFFER0CLEAN)vp->Clear2(1, &d3dRect, D3DCLEAR_ZBUFFER, 0, 0.0, 0);\t\n\t\t\tif(dxw.dwFlags5 & CLEARTARGET) vp->Clear(1, &d3dRect, D3DCLEAR_TARGET);\t\n\t\t}\n\t}\n\n\tres=(*pSetRenderState)(d3dd, State, Value);\n\tif(res) OutTraceE(\"SetRenderState: res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extSetRenderState2(void *d3dd, D3DRENDERSTATETYPE State, DWORD Value)\n{ return extSetRenderState(2, pSetRenderState2, d3dd, State, Value); }\nHRESULT WINAPI extSetRenderState3(void *d3dd, D3DRENDERSTATETYPE State, DWORD Value)\n{ return extSetRenderState(3, pSetRenderState3, d3dd, State, Value); }\nHRESULT WINAPI extSetRenderState7(void *d3dd, D3DRENDERSTATETYPE State, DWORD Value)\n{ return extSetRenderState(7, pSetRenderState7, d3dd, State, Value); }\n\nstatic HRESULT WINAPI dxwRestoreCallback(LPDIRECTDRAWSURFACE lpDDSurface, LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext)\n{\n\tHRESULT res;\n\tOutTrace(\"dxwRestoreCallback: ANALYZING lpdds=%x\\n\", lpDDSurface);\n\tif(lpDDSurface->IsLost()){\n\t\tif(res=lpDDSurface->Restore()){\n\t\t\tOutTrace(\"dxwRestoreCallback: RESTORE FAILED lpdds=%x err=%x(%s)\\n\", lpDDSurface, res, ExplainDDError(res));\n\t\t\treturn DDENUMRET_CANCEL;\n\t\t}\n\t\tOutTrace(\"dxwRestoreCallback: RESTORED lpdds=%x\\n\", lpDDSurface);\n\t}\n\treturn DDENUMRET_OK;\n}\n\nHRESULT WINAPI extBeginScene1(void *d3dd)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"BeginScene(D3D1): d3dd=%x\\n\", d3dd);\n\tres=(*pBeginScene1)(d3dd);\n\tif(res == DDERR_SURFACELOST){\n\t\tOutTraceDW(\"BeginScene: recovering from DDERR_SURFACELOST\\n\");\n\t\tlpPrimaryDD->EnumSurfaces(DDENUMSURFACES_DOESEXIST|DDENUMSURFACES_ALL, NULL, NULL, (LPDDENUMSURFACESCALLBACK)dxwRestoreCallback);\n\t\tres=(*pBeginScene1)(d3dd);\n\t}\n\tif(res) OutTraceE(\"BeginScene: res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nstatic HRESULT WINAPI dxwRestoreCallback2(LPDIRECTDRAWSURFACE4 lpDDSurface, LPDDSURFACEDESC2 lpDDSurfaceDesc, LPVOID lpContext)\n{\n\tHRESULT res;\n\tOutTrace(\"dxwRestoreCallback2: ANALYZING lpdds=%x\\n\", lpDDSurface);\n\tif(lpDDSurface->IsLost()){\n\t\tif(res=lpDDSurface->Restore()){\n\t\t\tOutTrace(\"dxwRestoreCallback2: RESTORE FAILED lpdds=%x err=%x(%s)\\n\", lpDDSurface, res, ExplainDDError(res));\n\t\t\treturn DDENUMRET_CANCEL;\n\t\t}\n\t\tOutTrace(\"dxwRestoreCallback2: RESTORED lpdds=%x\\n\", lpDDSurface);\n\t}\n\treturn DDENUMRET_OK;\n}\n\nHRESULT WINAPI extBeginScene2(void *d3dd)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"BeginScene(D3D2): d3dd=%x\\n\", d3dd);\n\tif((dxw.dwFlags4 & (ZBUFFERCLEAN|ZBUFFER0CLEAN)) || (dxw.dwFlags5 & CLEARTARGET)){\n\t\tHRESULT res2;\n\t\tLPDIRECT3DVIEWPORT2 vp;\n\t\tD3DVIEWPORT vpd;\n\t\tres2=((LPDIRECT3DDEVICE2)d3dd)->GetCurrentViewport(&vp);\n\t\tif(!res2){\n\t\t\tD3DRECT d3dRect;\n\t\t\tvpd.dwSize=sizeof(D3DVIEWPORT);\n\t\t\tvp->GetViewport(&vpd);\n\t\t\td3dRect.x1 = vpd.dwX; \n\t\t\td3dRect.y1 = vpd.dwY;\n\t\t\td3dRect.x2 = vpd.dwX + vpd.dwWidth;\n\t\t\td3dRect.y2 = vpd.dwY + vpd.dwHeight;\n\t\t\tOutTraceD3D(\"d3dRect=(%d,%d)-(%d,%d)\\n\", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2);\n\t\t\tif(dxw.dwFlags4 & (ZBUFFERCLEAN|ZBUFFER0CLEAN)) vp->Clear(1, &d3dRect, D3DCLEAR_ZBUFFER);\n\t\t\tif(dxw.dwFlags5 & CLEARTARGET) vp->Clear(1, &d3dRect, D3DCLEAR_TARGET);\t\n\t\t}\n\t}\n\tres=(*pBeginScene2)(d3dd);\n\tif(res == DDERR_SURFACELOST){\n\t\tOutTraceDW(\"BeginScene: recovering from DDERR_SURFACELOST\\n\");\n\t\tlpPrimaryDD->EnumSurfaces(DDENUMSURFACES_DOESEXIST|DDENUMSURFACES_ALL, NULL, NULL, (LPDDENUMSURFACESCALLBACK)dxwRestoreCallback2);\n\t\tres=(*pBeginScene2)(d3dd);\n\t}\n\tif(res) OutTraceE(\"BeginScene: res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extBeginScene3(void *d3dd)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"BeginScene(D3D3): d3dd=%x\\n\", d3dd);\n\tif((dxw.dwFlags4 & (ZBUFFERCLEAN|ZBUFFER0CLEAN)) || (dxw.dwFlags5 & CLEARTARGET)){\n\t\tHRESULT res2;\n\t\tLPDIRECT3DVIEWPORT3 vp;\n\t\tD3DVIEWPORT vpd;\n\t\tres2=((LPDIRECT3DDEVICE3)d3dd)->GetCurrentViewport(&vp);\n\t\tif(!res2){\n\t\t\tD3DRECT d3dRect;\n\t\t\tvpd.dwSize=sizeof(D3DVIEWPORT);\n\t\t\tvp->GetViewport(&vpd);\n\t\t\td3dRect.x1 = vpd.dwX; \n\t\t\td3dRect.y1 = vpd.dwY;\n\t\t\td3dRect.x2 = vpd.dwX + vpd.dwWidth;\n\t\t\td3dRect.y2 = vpd.dwY + vpd.dwHeight;\n\t\t\tOutTraceD3D(\"d3dRect=(%d,%d)-(%d,%d)\\n\", d3dRect.x1, d3dRect.y1, d3dRect.x2, d3dRect.y2);\n\t\t\tif(dxw.dwFlags4 & ZBUFFERCLEAN )vp->Clear2(1, &d3dRect, D3DCLEAR_ZBUFFER, 0, 1.0, 0);\t\n\t\t\tif(dxw.dwFlags4 & ZBUFFER0CLEAN)vp->Clear2(1, &d3dRect, D3DCLEAR_ZBUFFER, 0, 0.0, 0);\t\n\t\t\tif(dxw.dwFlags5 & CLEARTARGET) vp->Clear(1, &d3dRect, D3DCLEAR_TARGET);\t\n\t\t}\n\t}\n\tres=(*pBeginScene3)(d3dd);\n\tif(res == DDERR_SURFACELOST){\n\t\tOutTraceDW(\"BeginScene: recovering from DDERR_SURFACELOST\\n\");\n\t\tlpPrimaryDD->EnumSurfaces(DDENUMSURFACES_DOESEXIST|DDENUMSURFACES_ALL, NULL, NULL, (LPDDENUMSURFACESCALLBACK)dxwRestoreCallback2);\n\t\tres=(*pBeginScene3)(d3dd);\n\t}\n\tif(res) OutTraceE(\"BeginScene: res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nstatic HRESULT WINAPI dxwRestoreCallback7(LPDIRECTDRAWSURFACE7 lpDDSurface, LPDDSURFACEDESC2 lpDDSurfaceDesc, LPVOID lpContext)\n{\n\tHRESULT res;\n\tOutTrace(\"dxwRestoreCallback7: ANALYZING lpdds=%x\\n\", lpDDSurface);\n\tif(lpDDSurface->IsLost()){\n\t\tif(res=lpDDSurface->Restore()){\n\t\t\tOutTrace(\"dxwRestoreCallback7: RESTORE FAILED lpdds=%x err=%x(%s)\\n\", lpDDSurface, res, ExplainDDError(res));\n\t\t\treturn DDENUMRET_CANCEL;\n\t\t}\n\t\tOutTrace(\"dxwRestoreCallback7: RESTORED lpdds=%x\\n\", lpDDSurface);\n\t}\n\treturn DDENUMRET_OK;\n}\n\nHRESULT WINAPI extBeginScene7(void *d3dd)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"BeginScene(D3D7): d3dd=%x\\n\", d3dd);\n\n\t// there is no Clear method for Viewport object in D3D7 !!!\n\n\tres=(*pBeginScene7)(d3dd);\n\tif(res == DDERR_SURFACELOST){\n\t\tOutTraceDW(\"BeginScene: recovering from DDERR_SURFACELOST\\n\");\n\t\tlpPrimaryDD->EnumSurfaces(DDENUMSURFACES_DOESEXIST|DDENUMSURFACES_ALL, NULL, NULL, (LPDDENUMSURFACESCALLBACK)dxwRestoreCallback7);\n\t\tres=(*pBeginScene7)(d3dd);\n\t}\n\tif(res) OutTraceE(\"BeginScene: res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nstatic HRESULT WINAPI extEndScene(int d3dversion, Scene_Type pEndScene, void *d3dd)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"EndScene(D3D%d): d3dd=%x\\n\", d3dversion, d3dd);\n\tres=(*pEndScene)(d3dd);\n\t//dxw.ShowOverlay();\n\tif(res) OutTraceE(\"EndScene: res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extEndScene1(void *d3dd)\n{ return extEndScene(1, pEndScene1, d3dd); }\nHRESULT WINAPI extEndScene2(void *d3dd)\n{ return extEndScene(2, pEndScene2, d3dd); }\nHRESULT WINAPI extEndScene3(void *d3dd)\n{ return extEndScene(3, pEndScene3, d3dd); }\nHRESULT WINAPI extEndScene7(void *d3dd)\n{ return extEndScene(7, pEndScene7, d3dd); }\n\nHRESULT WINAPI extD3DGetCaps(int d3dversion, D3DGetCaps_Type pD3DGetCaps, void *d3dd, LPD3DDEVICEDESC hd, LPD3DDEVICEDESC sd)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"GetCaps(D3D%d): d3dd=%x hd=%x sd=%x\\n\", d3dversion, d3dd, hd, sd);\n\tres=(*pD3DGetCaps)(d3dd, hd, sd);\n\tif(res) {\n\t\tOutTraceE(\"GetCaps(D3D): ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\n\tDumpD3DDeviceDesc(hd, \"HWDEV\");\n\tDumpD3DDeviceDesc(sd, \"SWDEV\");\n\n\tif(dxw.dwFlags4 & NOPOWER2FIX){\n\t\tif(hd) {\n\t\t\tOutTraceDW(\"GetCaps(D3D): Fixing NOPOWER2FIX hw caps\\n\");\n            hd->dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2;\n            hd->dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2;\n        }\n        if(sd) {\n\t\t\tOutTraceDW(\"GetCaps(D3D): Fixing NOPOWER2FIX sw caps\\n\");\n            sd->dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2;\n            sd->dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2;\n        }\n    }\n\treturn res;\n}\n\nHRESULT WINAPI extD3DGetCaps1(void *d3dd, LPD3DDEVICEDESC hd, LPD3DDEVICEDESC sd)\n{ return extD3DGetCaps(1, pD3DGetCaps1, d3dd, hd, sd); }\nHRESULT WINAPI extD3DGetCaps2(void *d3dd, LPD3DDEVICEDESC hd, LPD3DDEVICEDESC sd)\n{ return extD3DGetCaps(2, pD3DGetCaps2, d3dd, hd, sd); }\nHRESULT WINAPI extD3DGetCaps3(void *d3dd, LPD3DDEVICEDESC hd, LPD3DDEVICEDESC sd)\n{ return extD3DGetCaps(3, pD3DGetCaps3, d3dd, hd, sd); }\n\nHRESULT WINAPI extD3DGetCaps7(void *d3dd, LPD3DDEVICEDESC7 lpd3ddd)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"GetCaps(D3D7): d3dd=%x lpd3ddd=%x\\n\", d3dd, lpd3ddd);\n\tres=(*pD3DGetCaps7)(d3dd, lpd3ddd);\n\tif(res) {\n\t\tOutTraceE(\"GetCaps(D3D): ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\treturn res;\n\t}\n\n\tDumpD3DDeviceDesc7(lpd3ddd, \"DEV7\");\n\n\tif(dxw.dwFlags4 & NOPOWER2FIX){\n\t\tif(lpd3ddd) {\n\t\t\tOutTraceDW(\"GetCaps(D3D): Fixing NOPOWER2FIX hw caps\\n\");\n            lpd3ddd->dpcLineCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2;\n            lpd3ddd->dpcTriCaps.dwTextureCaps|=D3DPTEXTURECAPS_NONPOW2CONDITIONAL|D3DPTEXTURECAPS_POW2;\n        }\n    }\n\treturn res;\n}\n\nHRESULT WINAPI extSetLightState3(void *d3dd, D3DLIGHTSTATETYPE d3dls, DWORD t)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"SetLightState(D3D3): d3d=%x lightstate=%x t=%x\\n\", d3dd, d3dls, t);\n\tres=(*pSetLightState3)(d3dd, d3dls, t);\n\tif(res) OutTraceE(\"SetLightState: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extSetViewport7(void *d3dd, LPD3DVIEWPORT7 lpd3dvp)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"SetViewport(D3D7): d3d=%x d3dvp=%x\\n\", d3dd, lpd3dvp);\n\tres=(*pSetViewport7)(d3dd, lpd3dvp);\n\tif(res) OutTraceE(\"SetViewport: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extGetViewport7(void *d3dd, LPD3DVIEWPORT7 lpd3dvp)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"GetViewport(D3D7): d3d=%x d3dvp=%x\\n\", d3dd, lpd3dvp);\n\tres=(*pGetViewport7)(d3dd, lpd3dvp);\n\tif(res) OutTraceE(\"GetViewport: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extAddViewport1(void *d3dd, LPDIRECT3DVIEWPORT lpd3dvp)\n{\n\tHRESULT res;\n\tstatic VOID *LastDevice = 0;\n\tOutTraceD3D(\"AddViewport(D3D1): d3d=%x d3dvp=%x\\n\", d3dd, lpd3dvp);\n\tres=(*pAddViewport1)(d3dd, lpd3dvp);\n\tif((res == DDERR_INVALIDPARAMS) && LastDevice) {\n\t\t// going through here fixes \"Die hard trilogy\" \"DirectX error 15\" caused by an AddViewport failure\n\t\tOutTraceE(\"AddViewport DDERR_INVALIDPARAMS: try to unlink from d3dd=%x\\n\", LastDevice);\n\t\tres=((LPDIRECT3DDEVICE)LastDevice)->DeleteViewport(lpd3dvp);\n\t\tif(res) OutTrace(\"DeleteViewport: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\tres=(*pAddViewport1)(d3dd, lpd3dvp);\n\t}\n\tif(res){\n\t\tOutTraceE(\"AddViewport: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;\n\t}\n\telse\n\t\tLastDevice = d3dd;\n\treturn res;\n}\n\nHRESULT WINAPI extAddViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 lpd3dvp)\n{\n\tHRESULT res;\n\tstatic VOID *LastDevice = 0;\n\tOutTraceD3D(\"AddViewport(D3D2): d3d=%x d3dvp=%x\\n\", d3dd, lpd3dvp);\n\tres=(*pAddViewport2)(d3dd, lpd3dvp);\n\tif((res == DDERR_INVALIDPARAMS) && LastDevice) {\n\t\tOutTraceE(\"AddViewport DDERR_INVALIDPARAMS: try to unlink from d3dd=%x\\n\", LastDevice);\n\t\tres=((LPDIRECT3DDEVICE2)LastDevice)->DeleteViewport(lpd3dvp);\n\t\tif(res) OutTrace(\"DeleteViewport: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\tres=(*pAddViewport2)(d3dd, lpd3dvp);\n\t}\n\tif(res) {\n\t\tOutTraceE(\"AddViewport ERROR: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;\n\t}\n\telse\n\t\tLastDevice = d3dd;\n\treturn res;\n}\n\nHRESULT WINAPI extAddViewport3(void *d3dd, LPDIRECT3DVIEWPORT3 lpd3dvp)\n{\n\tHRESULT res;\n\tstatic VOID *LastDevice = 0;\n\tOutTraceD3D(\"AddViewport(D3D3): d3d=%x d3dvp=%x\\n\", d3dd, lpd3dvp);\n\tres=(*pAddViewport3)(d3dd, lpd3dvp);\n\tif((res == DDERR_INVALIDPARAMS) && LastDevice) {\n\t\tOutTraceE(\"AddViewport DDERR_INVALIDPARAMS: try to unlink from d3dd=%x\\n\", LastDevice);\n\t\tres=((LPDIRECT3DDEVICE3)LastDevice)->DeleteViewport(lpd3dvp);\n\t\tif(res) OutTrace(\"DeleteViewport ERROR: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\tres=(*pAddViewport3)(d3dd, lpd3dvp);\n\t}\n\tif(res) {\n\t\tOutTraceE(\"AddViewport ERROR: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\tif(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK;\n\t}\n\telse\n\t\tLastDevice = d3dd;\n\treturn res;\n}\n\nHRESULT WINAPI extSetViewport2_2(void *lpvp, LPD3DVIEWPORT2 vpd)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"SetViewport2(VP2): viewport=%x viewportd=%x size=%d pos=(%d,%d) dim=(%dx%d) Z=(%f-%f)\\n\", \n\t\tlpvp, vpd, vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight, vpd->dvMinZ, vpd->dvMaxZ);\n\tres=(*pSetViewport2_2)(lpvp, vpd);\n\tif(res) OutTraceE(\"SetViewport2(VP2) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"SetViewport2(VP2): OK\\n\");\n\treturn res;\n}\n\nHRESULT WINAPI extGetViewport2_2(void *lpvp, LPD3DVIEWPORT2 vpd)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"GetViewport2(VP2): viewport=%x viewportd=%x\\n\", lpvp, vpd);\n\tres=(*pGetViewport2_2)(lpvp, vpd);\n\tif(res) OutTraceE(\"GetViewport2(VP2) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"GetViewport2(VP2): OK size=%d pos=(%d,%d) dim=(%dx%d)\\n\",\n\t\tvpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight);\n\treturn res;\n}\n\nHRESULT WINAPI extSetViewport2_3(void *lpvp, LPD3DVIEWPORT2 vpd)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"SetViewport2(VP3): viewport=%x viewportd=%x size=%d pos=(%d,%d) dim=(%dx%d) Z=(%f-%f)\\n\", \n\t\tlpvp, vpd, vpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight, vpd->dvMinZ, vpd->dvMaxZ);\n\tres=(*pSetViewport2_3)(lpvp, vpd);\n\tif(res) OutTraceE(\"SetViewport2(VP3) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"SetViewport2(VP3): OK\\n\");\n\treturn res;\n}\n\nHRESULT WINAPI extGetViewport2_3(void *lpvp, LPD3DVIEWPORT2 vpd)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"GetViewport2(VP3): viewport=%x viewportd=%x\\n\", lpvp, vpd);\n\tres=(*pGetViewport2_3)(lpvp, vpd);\n\tif(res) OutTraceE(\"GetViewport2(VP3) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"GetViewport2(VP3): OK size=%d pos=(%d,%d) dim=(%dx%d)\\n\",\n\t\tvpd->dwSize, vpd->dwX, vpd->dwY, vpd->dwWidth, vpd->dwHeight);\n\treturn res;\n}\n\nHRESULT WINAPI extGetCurrentViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 *lpd3dvp)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"GetCurrentViewport(D3DD2): d3dd=%x viewportd=%x\\n\", d3dd, lpd3dvp);\n\tres=(*pGetCurrentViewport2)(d3dd, lpd3dvp);\n\tif(res) {\n\t\tOutTraceE(\"GetCurrentViewport(D3DD2) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\tHookViewport((LPDIRECT3DVIEWPORT *)lpd3dvp, 2);\n\treturn res;\n}\n\nHRESULT WINAPI extSetCurrentViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 lpd3dvp)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"SetCurrentViewport(D3DD2): d3dd=%x viewportd=%x\\n\", d3dd, lpd3dvp);\n\tres=(*pSetCurrentViewport2)(d3dd, lpd3dvp);\n\tif(res) OutTraceE(\"SetCurrentViewport(D3DD2) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"SetCurrentViewport(D3DD2): OK\\n\");\n\treturn res;\n}\n\nHRESULT WINAPI extGetCurrentViewport3(void *d3dd, LPDIRECT3DVIEWPORT3 *lpd3dvp)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"GetCurrentViewport(D3DD3): d3dd=%x viewportd=%x\\n\", d3dd, lpd3dvp);\n\tres=(*pGetCurrentViewport3)(d3dd, lpd3dvp);\n\tif(res) {\n\t\tOutTraceE(\"GetCurrentViewport(D3DD3) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\tHookViewport((LPDIRECT3DVIEWPORT *)lpd3dvp, 3);\n\tif(IsDebug){\n\t\tHRESULT res2;\n\t\tD3DVIEWPORT2 vpdesc;\n\t\tvpdesc.dwSize = sizeof(D3DVIEWPORT2);\n\t\tres2=(*pGetViewport2_3)(lpd3dvp, &vpdesc);\n\t\tif(res) \n\t\t\tOutTraceE(\"GetCurrentViewport(D3DD3) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\telse\n\t\t\tOutTraceD3D(\"GetCurrentViewport(D3DD3): size=%d pos=(%d,%d) dim=(%dx%d)\\n\",\n\t\t\t\tvpdesc.dwSize, vpdesc.dwX, vpdesc.dwY, vpdesc.dwWidth, vpdesc.dwHeight);\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extSetCurrentViewport3(void *lpvp, LPDIRECT3DVIEWPORT3 lpd3dvp)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"SetCurrentViewport(D3DD3): viewport=%x\\n\", lpvp, lpd3dvp);\n\tres=(*pSetCurrentViewport3)(lpvp, lpd3dvp);\n\tif(res) OutTraceE(\"SetCurrentViewport(D3DD3) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"SetCurrentViewport(D3DD3): OK\\n\");\n\tif(IsDebug){\n\t\tHRESULT res2;\n\t\tD3DVIEWPORT2 vpdesc;\n\t\tvpdesc.dwSize = sizeof(D3DVIEWPORT2);\n\t\tres2=(*pGetViewport2_3)(lpd3dvp, &vpdesc);\n\t\tif(res) \n\t\t\tOutTraceE(\"SetCurrentViewport(D3DD3) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\t\telse\n\t\t\tOutTraceD3D(\"SetCurrentViewport(D3DD3): size=%d pos=(%d,%d) dim=(%dx%d)\\n\",\n\t\t\t\tvpdesc.dwSize, vpdesc.dwX, vpdesc.dwY, vpdesc.dwWidth, vpdesc.dwHeight);\n\t}\n\treturn res;\n}\n\nHRESULT WINAPI extDeleteViewport1(void *d3dd, LPDIRECT3DVIEWPORT lpd3dvp)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"DeletetViewport(D3DD1): d3dd=%x viewport=%x\\n\", d3dd, lpd3dvp);\n\tres=(*pDeleteViewport1)(d3dd, lpd3dvp);\n\tif(res) OutTraceE(\"DeletetViewport(D3DD1) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"DeletetViewport(D3DD1): OK\\n\");\n\treturn res;\n}\n\nHRESULT WINAPI extNextViewport1(void *d3dd, LPDIRECT3DVIEWPORT lpd3dvp, LPDIRECT3DVIEWPORT *vpnext, DWORD dw)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"NextViewport(D3DD1): d3dd=%x viewport=%x dw=%x\\n\", d3dd, lpd3dvp);\n\tres=(*pNextViewport1)(d3dd, lpd3dvp, vpnext, dw);\n\tif(res) OutTraceE(\"NextViewport(D3DD1) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"NextViewport(D3DD1): next=%x\\n\", *vpnext);\n\treturn res;\n}\n\nHRESULT WINAPI extDeleteViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 lpd3dvp)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"DeletetViewport(D3DD2): d3dd=%x viewport=%x\\n\", d3dd, lpd3dvp);\n\tres=(*pDeleteViewport2)(d3dd, lpd3dvp);\n\tif(res) OutTraceE(\"DeletetViewport(D3DD2) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"DeletetViewport(D3DD2): OK\\n\");\n\treturn res;\n}\n\nHRESULT WINAPI extNextViewport2(void *d3dd, LPDIRECT3DVIEWPORT2 lpd3dvp, LPDIRECT3DVIEWPORT2 *vpnext, DWORD dw)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"NextViewport(D3DD2): d3dd=%x viewport=%x dw=%x\\n\", d3dd, lpd3dvp);\n\tres=(*pNextViewport2)(d3dd, lpd3dvp, vpnext, dw);\n\tif(res) OutTraceE(\"NextViewport(D3DD2) ERROR: err=%x(%s) at %d\\n\", res, ExplainDDError(res), __LINE__);\n\telse OutTraceD3D(\"NextViewport(D3DD2): next=%x\\n\", *vpnext);\n\treturn res;\n}\n\nHRESULT WINAPI extSetTexture3(void *d3dd, DWORD flags, LPDIRECT3DTEXTURE2 lptex)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"SetTexture(D3D3): d3dd=%x flags=%x tex=%x\\n\", d3dd, flags, lptex);\n\tif (dxw.dwFlags4 & NOTEXTURES) return DD_OK;\n\n\tres=(*pSetTexture3)(d3dd, flags, lptex);\n\tif(res) OutTraceD3D(\"SetTexture: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extSetTexture7(void *d3dd, DWORD flags, LPDIRECTDRAWSURFACE7 lptex)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"SetTexture(D3D7): d3dd=%x, flags=%x, tex=%x\\n\", d3dd, flags, lptex);\n\tif (dxw.dwFlags4 & NOTEXTURES) return DD_OK;\n\n\tres=(*pSetTexture7)(d3dd, flags, lptex);\n\tif(res) OutTraceD3D(\"SetTexture: ERROR res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\n#ifdef TRACEMATERIAL\nHRESULT WINAPI extSetMaterial(void *d3dd, LPD3DMATERIAL lpMaterial)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"SetMaterial: d3dd=%x material=%x\\n\", d3dd, lpMaterial);\n\tif(lpMaterial && IsDebug){\n\t\tOutTraceD3D(\"Material: Size=%d Texture=%x diffuse=(%f,%f,%f,%f) ambient=(%f,%f,%f,%f) specular=(%f,%f,%f,%f) emissive=(%f,%f,%f,%f) power=%f\\n\", \n\t\t\tlpMaterial->dwSize, lpMaterial->hTexture, \n\t\t\tlpMaterial->diffuse.a, lpMaterial->diffuse.r, lpMaterial->diffuse.g, lpMaterial->diffuse.b,\n\t\t\tlpMaterial->ambient.a, lpMaterial->ambient.r, lpMaterial->ambient.g, lpMaterial->ambient.b,\n\t\t\tlpMaterial->specular.a, lpMaterial->specular.r, lpMaterial->specular.g, lpMaterial->specular.b,\n\t\t\tlpMaterial->emissive.a, lpMaterial->emissive.r, lpMaterial->emissive.g, lpMaterial->emissive.b,\n\t\t\tlpMaterial->power\n\t\t\t);\n\t\t}\n\tres=(*pSetMaterial)(d3dd, lpMaterial);\n\tif(res) OutTraceD3D(\"SetMaterial: ERROR res=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extGetMaterial(void *d3dd, LPD3DMATERIAL lpMaterial)\n{\n\tHRESULT res;\n\n\tres=(*pGetMaterial)(d3dd, lpMaterial);\n\tOutTraceD3D(\"GetMaterial: d3dd=%x material=%x res=%x\\n\", d3dd, lpMaterial, res);\n\tif(lpMaterial && IsDebug && (res==DD_OK)){\n\t\tOutTraceD3D(\"Material: Size=%d diffuse=(%f,%f,%f,%f) ambient=(%f,%f,%f,%f) specular=(%f,%f,%f,%f) emissive=(%f,%f,%f,%f) power=%f\\n\", \n\t\t\tlpMaterial->dwSize, \n\t\t\tlpMaterial->diffuse.a, lpMaterial->diffuse.r, lpMaterial->diffuse.g, lpMaterial->diffuse.b,\n\t\t\tlpMaterial->ambient.a, lpMaterial->ambient.r, lpMaterial->ambient.g, lpMaterial->ambient.b,\n\t\t\tlpMaterial->specular.a, lpMaterial->specular.r, lpMaterial->specular.g, lpMaterial->specular.b,\n\t\t\tlpMaterial->emissive.a, lpMaterial->emissive.r, lpMaterial->emissive.g, lpMaterial->emissive.b,\n\t\t\tlpMaterial->power\n\t\t\t);\n\t\t}\n\treturn res;\n}\n#endif\n\nHRESULT WINAPI extSwapTextureHandles(void *d3dd, LPDIRECT3DTEXTURE t1, LPDIRECT3DTEXTURE t2)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"SwapTextureHandles(D3D1): d3dd=%x t1=%x t2=%x\\n\", d3dd, t1, t2);\n\tif (dxw.dwFlags4 & NOTEXTURES) return DD_OK;\n\t\n\tres=(*pSwapTextureHandles)(d3dd, t1, t2);\n\tif(res) OutTraceD3D(\"SwapTextureHandles: ERROR res=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extSwapTextureHandles2(void *d3dd, LPDIRECT3DTEXTURE2 t1, LPDIRECT3DTEXTURE2 t2)\n{\n\tHRESULT res;\n\n\tOutTraceD3D(\"SwapTextureHandles(D3D2): d3dd=%x t1=%x t2=%x\\n\", d3dd, t1, t2);\n\tif (dxw.dwFlags4 & NOTEXTURES) return DD_OK;\n\t\n\tres=(*pSwapTextureHandles2)(d3dd, t1, t2);\n\tif(res) OutTraceD3D(\"SwapTextureHandles: ERROR res=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extTexInitialize(void *t, LPDIRECT3DDEVICE lpd3dd, LPDIRECTDRAWSURFACE lpdds)\n{\n\tOutTrace(\"Texture::Initialize\\n\");\n\treturn (*pTInitialize)(t, lpd3dd, lpdds);\n}\n\nstatic HRESULT WINAPI extTexGetHandle(int version, TexGetHandle_Type pTGetHandle, void *t, LPDIRECT3DDEVICE lpd3dd, LPD3DTEXTUREHANDLE lpth)\n{\n\tHRESULT ret;\n\tOutTrace(\"Texture(%d)::GetHandle lpt=%x lpd3dd=%x lpth=%x\\n\", version, t, lpd3dd, lpth);\n\tret = (*pTGetHandle)(t, lpd3dd, lpth);\n\tif(ret) OutTraceE(\"Texture::Load ERROR res=%x(%s)\\n\", ret, ExplainDDError(ret));\n\treturn ret;\n}\n\nHRESULT WINAPI extTexGetHandle1(void *t, LPDIRECT3DDEVICE lpd3dd, LPD3DTEXTUREHANDLE lpth)\n{ return extTexGetHandle(1, pTGetHandle1, t, lpd3dd, lpth); }\nHRESULT WINAPI extTexGetHandle2(void *t, LPDIRECT3DDEVICE2 lpd3dd, LPD3DTEXTUREHANDLE lpth)\n{ return extTexGetHandle(2, pTGetHandle2, t, (LPDIRECT3DDEVICE)lpd3dd, lpth); }\n\n\nstatic HRESULT WINAPI extTexPaletteChanged(int version, TexPaletteChanged_Type pTPaletteChanged, void *t, DWORD dw1, DWORD dw2)\n{\n\tHRESULT ret;\n\tOutTrace(\"Texture(%d)::PaletteChanged lpt=%x dw1=%x dw2=%x\\n\", version, t, dw1, dw2);\n\tret = (*pTPaletteChanged)(t, dw1, dw2);\n\tif(ret) OutTraceE(\"Texture::PaletteChanged ERROR res=%x(%s)\\n\", ret, ExplainDDError(ret));\n\treturn ret;\n}\n\nHRESULT WINAPI extTexPaletteChanged1(void *t, DWORD dw1, DWORD dw2)\n{ return extTexPaletteChanged(1, pTPaletteChanged1, t, dw1, dw2); }\nHRESULT WINAPI extTexPaletteChanged2(void *t, DWORD dw1, DWORD dw2)\n{ return extTexPaletteChanged(2, pTPaletteChanged2, t, dw1, dw2); }\n\nHRESULT WINAPI extTexLoad(int version, TexLoad_Type pTLoad, void *t, LPDIRECT3DTEXTURE lpt)\n{\n\tHRESULT ret;\n\tOutTrace(\"Texture(%d)::Load lpt=%x lpd3dt=%x\\n\", version, t, lpt);\n\tret = (*pTLoad)(t, lpt);\n\tif(ret) OutTraceE(\"Texture::Load ERROR res=%x(%s)\\n\", ret, ExplainDDError(ret));\n\treturn ret;\n}\n\nHRESULT WINAPI extTexLoad1(void *t, LPDIRECT3DTEXTURE lpt)\n{ return extTexLoad(1, pTLoad1, t, lpt); }\nHRESULT WINAPI extTexLoad2(void *t, LPDIRECT3DTEXTURE lpt)\n{ return extTexLoad(2, pTLoad2, t, lpt); }\n\nHRESULT WINAPI extTexUnload(void *t)\n{\n\tHRESULT ret;\n\tOutTrace(\"Texture::Unload lpt=%x\\n\", t);\n\tret = (*pTUnload)(t);\n\tif(ret) OutTraceE(\"Texture::Load ERROR res=%x(%s)\\n\", ret, ExplainDDError(ret));\n\treturn ret;\n}\n\ntypedef struct {\n\tLPD3DENUMPIXELFORMATSCALLBACK *cb;\n\tLPVOID arg;\n} CallbackPixFmtArg;\n\nHRESULT WINAPI extZBufferProxy(LPDDPIXELFORMAT lpDDPixFmt, LPVOID lpContext)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"EnumZBufferFormats: CALLBACK context=%x %s \\n\", ((CallbackPixFmtArg *)lpContext)->arg, ExplainPixelFormat(lpDDPixFmt));\n\tres = (*(((CallbackPixFmtArg *)lpContext)->cb))(lpDDPixFmt, ((CallbackPixFmtArg *)lpContext)->arg);\n\tOutTraceD3D(\"EnumZBufferFormats: CALLBACK ret=%x\\n\", res);\n\treturn res;\n}\n\n#define MAXPFTABLESIZE 50\n#define MAXTRIMMEDENTRIES 3\n\ntypedef struct {\n\tint nEntries;\n//\tLPDDPIXELFORMAT lpPixelFormatEntries;\n\tDDPIXELFORMAT lpPixelFormatEntries[MAXPFTABLESIZE];\n} PixelFormatTable_Type;\n\nHRESULT WINAPI FillPixelFormatTable(LPDDPIXELFORMAT lpDDPixFmt, LPVOID Arg)\n{\n\tPixelFormatTable_Type *lpPixelFormatTable = (PixelFormatTable_Type *)Arg;\n\tOutTraceD3D(\"EnumZBufferFormats: FILL CALLBACK entry=%d %s\\n\", lpPixelFormatTable->nEntries, ExplainPixelFormat(lpDDPixFmt));\n\tif(lpPixelFormatTable->nEntries >= MAXPFTABLESIZE) return FALSE;\n\tmemcpy((LPVOID)&(lpPixelFormatTable->lpPixelFormatEntries[lpPixelFormatTable->nEntries]), (LPVOID)lpDDPixFmt, sizeof(DDPIXELFORMAT));\n\tlpPixelFormatTable->nEntries ++;\n\t//lpPixelFormatTable->lpPixelFormatEntries = (LPDDPIXELFORMAT)realloc((LPVOID)(lpPixelFormatTable->lpPixelFormatEntries), lpPixelFormatTable->nEntries * sizeof(DDPIXELFORMAT));\n\t//OutTrace(\"lp=%x err=%s\\n\", lpPixelFormatTable->lpPixelFormatEntries, GetLastError());\n\treturn TRUE;\n}\n\nstatic HRESULT WINAPI extEnumZBufferFormats(int d3dversion, EnumZBufferFormats_Type pEnumZBufferFormats, void *lpd3d, REFCLSID riidDevice, LPD3DENUMPIXELFORMATSCALLBACK lpEnumCallback, LPVOID lpContext)\n{\n\tHRESULT ret;\n\tOutTraceD3D(\"Direct3D::EnumZBufferFormats(D3D%d) d3d=%x clsid=%x context=%x\\n\", d3dversion, lpd3d, riidDevice.Data1, lpContext);\n\n\tif(dxw.dwFlags8 & TRIMTEXTUREFORMATS){\n\t\tint iIndex;\n\t\tint iEnumerated;\n\t\tPixelFormatTable_Type PixelFormatTable;\n\t\tPixelFormatTable.nEntries = 0;\n\t\t//PixelFormatTable.lpPixelFormatEntries = (LPDDPIXELFORMAT)malloc(sizeof(DDPIXELFORMAT));\n\t\tret = (*pEnumZBufferFormats)(lpd3d, riidDevice, (LPD3DENUMPIXELFORMATSCALLBACK)FillPixelFormatTable, (LPVOID)&PixelFormatTable);\n\t\tOutTraceD3D(\"EnumZBufferFormats: collected entries=%d\\n\", PixelFormatTable.nEntries);\n\t\t// bubble sorting;\n\t\twhile(TRUE){\n\t\t\tBOOL bSorted = FALSE;\n\t\t\tfor(iIndex=0; iIndex<PixelFormatTable.nEntries-1; iIndex++){\n\t\t\t\tif(PixelFormatTable.lpPixelFormatEntries[iIndex].dwRGBBitCount > PixelFormatTable.lpPixelFormatEntries[iIndex+1].dwRGBBitCount){\n\t\t\t\t\tDDPIXELFORMAT tmp;\n\t\t\t\t\ttmp = PixelFormatTable.lpPixelFormatEntries[iIndex];\n\t\t\t\t\tPixelFormatTable.lpPixelFormatEntries[iIndex] = PixelFormatTable.lpPixelFormatEntries[iIndex+1];\n\t\t\t\t\tPixelFormatTable.lpPixelFormatEntries[iIndex+1] = tmp;\n\t\t\t\t\tbSorted = TRUE;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!bSorted) break;\n\t\t}\n\t\tfor(iIndex=0, iEnumerated=0; (iIndex < PixelFormatTable.nEntries) && (iEnumerated < MAXTRIMMEDENTRIES); iIndex++){\n\t\t\tif(PixelFormatTable.lpPixelFormatEntries[iIndex].dwRGBBitCount >= 32) break;\n\t\t\tif((dxw.dwFlags7 & CLEARTEXTUREFOURCC) && (PixelFormatTable.lpPixelFormatEntries[iIndex].dwFlags & DDPF_FOURCC)) continue;\n\t\t\tret = (*lpEnumCallback)(&(PixelFormatTable.lpPixelFormatEntries[iIndex]), lpContext);\n\t\t\tOutTraceD3D(\"Direct3D::EnumZBufferFormats: CALLBACK entry=%d ret=%x %s\\n\", iIndex, ret, ExplainPixelFormat(&PixelFormatTable.lpPixelFormatEntries[iIndex]));\n\t\t\tif(!ret) break;\n\t\t\tiEnumerated++;\n\t\t}\n\t\t//free((LPVOID)(PixelFormatTable.lpPixelFormatEntries));\n\t\tret = DD_OK;\n\t}\n\telse {\n\t\tCallbackPixFmtArg Arg;\n\t\tArg.cb= &lpEnumCallback;\n\t\tArg.arg=lpContext;\n\t\tret = (*pEnumZBufferFormats)(lpd3d, riidDevice, (LPD3DENUMPIXELFORMATSCALLBACK)extZBufferProxy, (LPVOID)&Arg);\n\t}\n\tOutTraceE(\"Direct3D::EnumZBufferFormats res=%x(%s)\\n\", ret, ExplainDDError(ret));\n\treturn ret;\n}\n\nHRESULT WINAPI extEnumZBufferFormats3(void *lpd3d, REFCLSID riidDevice, LPD3DENUMPIXELFORMATSCALLBACK lpEnumCallback, LPVOID lpContext)\n{ return extEnumZBufferFormats(3, pEnumZBufferFormats3, lpd3d, riidDevice, lpEnumCallback, lpContext); }\nHRESULT WINAPI extEnumZBufferFormats7(void *lpd3d, REFCLSID riidDevice, LPD3DENUMPIXELFORMATSCALLBACK lpEnumCallback, LPVOID lpContext)\n{ return extEnumZBufferFormats(7, pEnumZBufferFormats7, lpd3d, riidDevice, lpEnumCallback, lpContext); }\n\n// Beware: using service surfaces with DDSCAPS_SYSTEMMEMORY capability may lead to crashes in D3D operations\n// like Vievport::Clear() in \"Forsaken\" set in emulation AERO-friendly mode. To avoid the problem, you can \n// suppress the offending cap by use of the NOSYSMEMPRIMARY or NOSYSMEMBACKBUF flags\n\nHRESULT WINAPI extViewportClear(void *lpd3dvp, DWORD p1, LPD3DRECT lpRect, DWORD p2)\n{\n\tHRESULT ret;\n\n\tif(IsTraceD3D){\n\t\tchar sRect[81];\n\t\tif (lpRect) sprintf(sRect, \"(%d,%d)-(%d,%d)\", lpRect->x1, lpRect->y1, lpRect->x2, lpRect->y2);\n\t\telse strcpy(sRect, \"(NULL)\");\n\t\tOutTrace(\"Viewport::Clear lpd3dvp=%x p1=%x p2=%x rect=%s\\n\", lpd3dvp, p1, p2, sRect);\n\t}\n\n\t// proxying the call ....\n\tret = (*pViewportClear)(lpd3dvp, p1, lpRect, p2);\n\n\tOutTraceD3D(\"Viewport::Clear ret=%x\\n\", ret);\n\treturn ret;\n}\n\nHRESULT WINAPI extExecute(void *lpd3d, LPDIRECT3DEXECUTEBUFFER eb, LPDIRECT3DVIEWPORT vp, DWORD dw)\n{\n\tHRESULT ret;\n\tOutTraceD3D(\"Direct3DDevice::Execute\\n\");\n\tret=(*pExecute)(lpd3d, eb, vp, dw);\n\tif (ret) OutTraceE(\"Direct3DDevice::Execute res=%x(%s)\\n\", ret, ExplainDDError(ret));\n\treturn DD_OK;\n}\n\nstatic HRESULT CALLBACK lpTextureTrimmer(LPDDPIXELFORMAT lpDDPixFmt, LPVOID lpContext)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"EnumTextureFormats: CALLBACK context=%x %s \\n\", lpContext, ExplainPixelFormat(lpDDPixFmt));\n\tif(lpDDPixFmt->dwFlags & DDPF_FOURCC)\n\t\tres = DD_OK;\n\telse\n\t\tres = (*(((CallbackPixFmtArg *)lpContext)->cb))(lpDDPixFmt, ((CallbackPixFmtArg *)lpContext)->arg);\n\treturn res;\n}\n\nstatic HRESULT CALLBACK lpTextureDumper(LPDDPIXELFORMAT lpDDPixFmt, LPVOID lpContext)\n{\n\tOutTraceD3D(\"EnumTextureFormats: CALLBACK context=%x %s \\n\", lpContext, ExplainPixelFormat(lpDDPixFmt));\n\treturn TRUE;\n}\n\nHRESULT WINAPI extEnumTextureFormats(int d3dversion, EnumTextureFormats_Type pEnumTextureFormats, void *lpd3dd, LPD3DENUMPIXELFORMATSCALLBACK lptfcallback, LPVOID arg)\n{\n\tHRESULT res;\n\tOutTraceD3D(\"EnumTextureFormats(%d): lpd3dd=%x cb=%x arg=%x\\n\", d3dversion, lpd3dd, lptfcallback, arg);\n\tif(IsDebug) (*pEnumTextureFormats)(lpd3dd, lpTextureDumper, arg);\n\n\tif(dxw.dwFlags7 & CLEARTEXTUREFOURCC){\n\t\tCallbackPixFmtArg Arg;\n\t\tArg.cb= &lptfcallback;\n\t\tArg.arg=arg;\n\t\tres = (*pEnumTextureFormats)(lpd3dd, lpTextureTrimmer, (LPVOID)&Arg);\n\t}\n\telse{\n\t\tres = (*pEnumTextureFormats)(lpd3dd, lptfcallback, arg);\n\t}\n\tif(res) OutTraceD3D(\"EnumTextureFormats: res=%x(%s)\\n\", res, ExplainDDError(res));\n\treturn res;\n}\n\nHRESULT WINAPI extEnumTextureFormats1(void *lpd3dd, LPD3DENUMPIXELFORMATSCALLBACK lptfcallback, LPVOID arg)\n{ return extEnumTextureFormats(1, pEnumTextureFormats1, lpd3dd, lptfcallback, arg); }\nHRESULT WINAPI extEnumTextureFormats2(void *lpd3dd, LPD3DENUMPIXELFORMATSCALLBACK lptfcallback, LPVOID arg)\n{ return extEnumTextureFormats(2, pEnumTextureFormats2, lpd3dd, lptfcallback, arg); }\nHRESULT WINAPI extEnumTextureFormats3(void *lpd3dd, LPD3DENUMPIXELFORMATSCALLBACK lptfcallback, LPVOID arg)\n{ return extEnumTextureFormats(3, pEnumTextureFormats3, lpd3dd, lptfcallback, arg); }\nHRESULT WINAPI extEnumTextureFormats7(void *lpd3dd, LPD3DENUMPIXELFORMATSCALLBACK lptfcallback, LPVOID arg)\n{ return extEnumTextureFormats(7, pEnumTextureFormats7, lpd3dd, lptfcallback, arg); }\n\nstatic char *sTransformType(D3DTRANSFORMSTATETYPE tstype)\n{\n\tchar *s;\n\tswitch(tstype){\n\t\tcase D3DTRANSFORMSTATE_WORLD:\t\ts = \"WORLD\"; break;\n\t\tcase D3DTRANSFORMSTATE_VIEW:\t\ts = \"VIEW\"; break;\n\t\tcase D3DTRANSFORMSTATE_PROJECTION:\ts = \"PROJECTION\"; break;\n\t\tcase D3DTRANSFORMSTATE_WORLD1:\t\ts = \"WORLD1\"; break;\n\t\tcase D3DTRANSFORMSTATE_WORLD2:\t\ts = \"WORLD2\"; break;\n\t\tcase D3DTRANSFORMSTATE_WORLD3:\t\ts = \"WORLD3\"; break;\n\t\tcase D3DTRANSFORMSTATE_TEXTURE0:\ts = \"TEXTURE0\"; break;\n\t\tcase D3DTRANSFORMSTATE_TEXTURE1:\ts = \"TEXTURE1\"; break;\n\t\tcase D3DTRANSFORMSTATE_TEXTURE2:\ts = \"TEXTURE2\"; break;\n\t\tcase D3DTRANSFORMSTATE_TEXTURE3:\ts = \"TEXTURE3\"; break;\n\t\tcase D3DTRANSFORMSTATE_TEXTURE4:\ts = \"TEXTURE4\"; break;\n\t\tcase D3DTRANSFORMSTATE_TEXTURE5:\ts = \"TEXTURE5\"; break;\n\t\tcase D3DTRANSFORMSTATE_TEXTURE6:\ts = \"TEXTURE6\"; break;\n\t\tcase D3DTRANSFORMSTATE_TEXTURE7:\ts = \"TEXTURE7\"; break;\n\t\tdefault:\ts = \"unknown\"; break;\n\t}\n\treturn s;\n}\n\nstatic HRESULT WINAPI SetTransform(int d3dversion, SetTransform_Type pSetTransform, void *lpd3dd, D3DTRANSFORMSTATETYPE tstype, LPD3DMATRIX matrix)\n{\n\tHRESULT res;\n\n\tOutTrace(\"SetTransform(D3D%d): lpd3dd=%x tstype=%x(%s) matrix={\\n%f %f %f %f\\n%f %f %f %f\\n%f %f %f %f\\n%f %f %f %f\\n}\\n\", \n\t\td3dversion, lpd3dd, tstype, sTransformType(tstype),\n\t\tmatrix->_11, matrix->_12, matrix->_13, matrix->_14,\n\t\tmatrix->_21, matrix->_22, matrix->_23, matrix->_24,\n\t\tmatrix->_31, matrix->_32, matrix->_33, matrix->_34,\n\t\tmatrix->_41, matrix->_42, matrix->_43, matrix->_44);\n\n\tres = (*pSetTransform)(lpd3dd, tstype, matrix);\n\tif(res) OutTraceE(\"SetTransform ERROR: ret=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extSetTransform2(void *lpd3dd, D3DTRANSFORMSTATETYPE tstype, LPD3DMATRIX matrix)\n{ return SetTransform(2, pSetTransform2, lpd3dd, tstype, matrix); }\nHRESULT WINAPI extSetTransform3(void *lpd3dd, D3DTRANSFORMSTATETYPE tstype, LPD3DMATRIX matrix)\n{ return SetTransform(3, pSetTransform3, lpd3dd, tstype, matrix); }\nHRESULT WINAPI extSetTransform7(void *lpd3dd, D3DTRANSFORMSTATETYPE tstype, LPD3DMATRIX matrix)\n{ return SetTransform(7, pSetTransform7, lpd3dd, tstype, matrix); }\n"
  },
  {
    "path": "dll/hd3d8.cpp",
    "content": "#include <D3D8.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n#include \"syslibs.h\"\n#include \"stdio.h\"\n\nextern void TextureHandling(LPDIRECTDRAWSURFACE);\n\ntypedef HRESULT (WINAPI *LockRect_Type)(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD);\ntypedef HRESULT (WINAPI *UnlockRect_Type)(void *, UINT);\ntypedef HRESULT (WINAPI *GetFrontBuffer_Type)(void *, LPDIRECTDRAWSURFACE);\ntypedef HRESULT (WINAPI *GetAdapterDisplayMode_Type)(void *, UINT, D3DDISPLAYMODE *);\ntypedef HRESULT\t(WINAPI *CopyRects_Type)(void *, LPDIRECTDRAWSURFACE, CONST RECT *, UINT, LPDIRECTDRAWSURFACE, CONST POINT *);\ntypedef HRESULT (WINAPI *GetDirect3D8_Type)(void *, void **);\n\nextern LockRect_Type pLockRect8;\nextern UnlockRect_Type pUnlockRect8;\nextern GetAdapterDisplayMode_Type pGetAdapterDisplayMode8;\nextern CopyRects_Type pCopyRects;\nextern GetFrontBuffer_Type pGetFrontBuffer;\nextern GetDirect3D8_Type pGetDirect3D8;\n\nextern void D3DTextureDump(D3DSURFACE_DESC, D3DLOCKED_RECT);\nextern void D3DTextureHighlight(D3DSURFACE_DESC, D3DLOCKED_RECT);\nextern void D3DTextureHack(D3DSURFACE_DESC, D3DLOCKED_RECT);\nextern void D3DTextureTransp(D3DSURFACE_DESC, D3DLOCKED_RECT);\nextern char *ExplainD3DSurfaceFormat(DWORD);\n\nvoid D3D8TextureHandling(void *arg, int Level)\n{\n\tHRESULT res;\n\tLPDIRECT3DTEXTURE8 lpd3dtex = (LPDIRECT3DTEXTURE8)arg;\n\tIDirect3DSurface8 *pSurfaceLevel;\n\tD3DSURFACE_DESC Desc;\n\tD3DLOCKED_RECT LockedRect;\n\tOutTraceB(\"D3D8TextureHandling: arg=%x level=%d\\n\", (DWORD)arg, Level);\n\t// Beware: attempts to dump surfaces at level > 0 result in stack corruption!!!\n\tif(Level > 0) return;\n\tif(res=lpd3dtex->GetSurfaceLevel(Level, &pSurfaceLevel)){\n\t\tOutTraceE(\"Texture::GetSurfaceLevel ERROR: res=%d(%s)\\n\", res, ExplainDDError(res));\n\t\treturn;\n\t}\n\tif(res=lpd3dtex->GetLevelDesc(Level, &Desc)){\n\t\tOutTraceE(\"Texture::GetLevelDesc ERROR: res=%d(%s)\\n\", res, ExplainDDError(res));\n\t\treturn;\n\t}\n\tpSurfaceLevel->Release();\n\tOutTraceB(\"D3D8TextureHandling: level=%d type=%x usage=%x\\n\", Level, Desc.Type, Desc.Usage);\n\tswitch(Desc.Type){\n\t\tcase D3DRTYPE_SURFACE:\n\t\tcase D3DRTYPE_TEXTURE:\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tOutTraceB(\"D3D88TextureHandling: SKIP type=%x\\n\", Desc.Type);\n\t\t\treturn;\n\t\t\tbreak;\n\t}\n\tif(Desc.Usage == D3DUSAGE_RENDERTARGET){\n\t\tOutTraceB(\"D3D8TextureHandling: SKIP usage=%x\\n\", Desc.Usage);\n\t\treturn;\n\t}\n\t//pSurfaceLevel->GetRenderTargetData(&pRenderTarget, &pDestSurface);\t\n\tres=(*pLockRect8)(lpd3dtex, Level, &LockedRect, NULL, 0);\n\tOutTrace(\"D3D8TextureHandling: lpd3dtex=%x level=%d format=0x%x(%s) size=(%dx%d) bits=%x pitch=%d\\n\", \n\t\tlpd3dtex, Level, Desc.Format, ExplainD3DSurfaceFormat(Desc.Format), \n\t\tDesc.Width, Desc.Height, LockedRect.pBits, LockedRect.Pitch);\n\tswitch(dxw.dwFlags5 & TEXTUREMASK){\n\t\tcase TEXTUREHIGHLIGHT: \n\t\t\tD3DTextureHighlight(Desc, LockedRect);\n\t\t\tbreak;\n\t\tcase TEXTUREDUMP: \n\t\t\tD3DTextureDump(Desc, LockedRect);\n\t\t\tbreak;\n\t\tcase TEXTUREHACK:\n\t\t\tD3DTextureHack(Desc, LockedRect);\n\t\t\tbreak;\n\t\tcase TEXTURETRANSP:\n\t\t\tD3DTextureTransp(Desc, LockedRect);\n\t\t\tbreak;\n\t}\n\tres=(*pUnlockRect8)(lpd3dtex, Level);\n}\n\n/*\nfrom http://realmike.org/blog/projects/taking-screenshots-with-direct3d-8/\n\nAccessing the Front Buffer\n\nThe IDirect3DDevice8 interface provides the GetFrontBuffer and GetBackBuffer methods to gain access to the swap chain of a Direct3D 8 application. These methods have the \nfollowing characteristics:\n\n    GetBackBuffer  By using this method you can obtain an IDirect3DSurface8 interface pointer for each of the buffers in the swap chain. \n\tHowever, unless you explicitily requested a lockable back buffer when creating the device (by using the D3DPRESENTFLAG_LOCKABLE_BACKBUFFER flag), \n\tyou are not allowed to lock the surface. The SDK docs mention a performance cost when using lockable back buffers, even if theyre not actually locked. \n\tOur Screenshot function should not require you to rewrite your device creation code, let alone degrade performance, therefore we wont use the GetBackBuffer method here.\n    GetFrontBuffer  This method copies the contents of the front buffer to a system-memory surface that is provided by the application. \n\tWhat makes the GetFrontBuffer method especially useful for our purposes is that it converts the data into a 32-bit ARGB format so that we dont have to handle \n\tdifferent formats manually.\n\nNote: When using the GetFrontBuffer method, well always capture the entire screen, which might be undesired in a windowed application. However, the majority of \napplications are full-screen. Therefore, well ignore this issue.\n\nThe GetFrontBuffer method requires us to provide a system-memory surface of the same dimensions as the screen. This surface will be filled with a copy of the front buffers \ncontents. So, how do we retrieve the screen dimensions when all we have is a pointer to the IDirect3DDevice8 interface? We can use the GetAdapterDisplayMode method of the \nIDirect3D8 interface to query information about the current display mode of a given adapter. A pointer to the IDirect3D8 interface can be obtained by calling the GetDirect3D \nmethod of the IDirect3DDevice8 interface. The adapter identifier that is expected by the GetAdapterDisplayMode method can be obtained by using the \nIDirect3DDevice8::GetCreationParameters method. To summarize, these are the required steps to retrieve the screen dimensions:\n\n    Call the IDirect3DDevice8::GetDirect3D method to retrieve a pointer to an IDirect3D8 interface.\n    Call the IDirect3DDevice8::GetCreationParameters method, which returns the identifier of the adapter that the Direct3D device uses.\n    Call the IDirect3D8::GetAdapterDisplayMode with the adapter identifier that we retrieved in Step 2.\n\nThe following code snippet performs these three steps:\n\nD3DDEVICE_CREATION_PARAMETERS dcp;\ndcp.AdapterOrdinal = D3DADAPTER_DEFAULT;\nlpDevice->GetCreationParameters(&dcp);\n\nD3DDISPLAYMODE dm;\ndm.Width = dm.Height = 0;\n\n// retrieve pointer to IDirect3D8 interface,\n// which provides the GetAdapterDisplayMode method\nLPDIRECT3D8 lpD3D = NULL;\nlpDevice->GetDirect3D(&lpD3D);\nif (lpD3D)\n{\n    // query the screen dimensions of the current adapter\n    lpD3D->GetAdapterDisplayMode(dcp.AdapterOrdinal, &dm);\n    SAFERELEASE(lpD3D);\n}\n\nNow we can pass the values in dm.Width and dm.Height to the IDirect3DDevice8::CreateImageSurface method to create a system-memory surface that can be used by the GetFrontBuffer method. The expected format of the surface is D3DFMT_A8R8G8B8, which means that there are 8 bits each for the blue, green, red, and alpha components of the colors. The following code snippet creates the surface and calls the GetFrontBuffer method to fill the surface:\n\nLPDIRECT3DSURFACE8 lpSurface = NULL;\nlpDevice->CreateImageSurface(\n    dm.Width, dm.Height,\n    D3DFMT_A8R8G8B8,\n    &lpSurface\n);\n\nlpDevice->GetFrontBuffer(lpSurface);\n*/\n\nHRESULT dxGetFrontBuffer(void *lpd3dd, LPDIRECTDRAWSURFACE xdest)\n{\n\tHRESULT res;\n\tD3DDEVICE_CREATION_PARAMETERS dcp;\n\tLPDIRECT3DSURFACE8 lpSurface = NULL;\n\tIDirect3DDevice8 *lpDevice = (IDirect3DDevice8 *)lpd3dd;\n\tIDirect3DSurface8 *dest = (IDirect3DSurface8 *)xdest;\n\n\tdcp.AdapterOrdinal = D3DADAPTER_DEFAULT;\n\tlpDevice->GetCreationParameters(&dcp);\n\n\tD3DDISPLAYMODE dm;\n\tdm.Width = dm.Height = 0;\n\n\t// retrieve pointer to IDirect3D8 interface,\n\t// which provides the GetAdapterDisplayMode method\n\tLPDIRECT3D8 lpD3D = NULL;\n\t//res = lpDevice->GetDirect3D(&lpD3D);\n\tres = (*pGetDirect3D8)(lpDevice, (void **)&lpD3D);\n\tif(res) {\n\t\tOutTraceE(\"GetFrontBuffer: GetDirect3D ERROR res=%x at %d\\n\", res, __LINE__);\n\t\treturn res;\n\t}\n\n\t// query the screen dimensions of the current adapter\n\t//res = lpD3D->GetAdapterDisplayMode(dcp.AdapterOrdinal, &dm);\n\tres = (*pGetAdapterDisplayMode8)(lpD3D, dcp.AdapterOrdinal, &dm);\n\tlpD3D->Release();\n\tif(res) {\n\t\tOutTraceE(\"GetFrontBuffer: GetAdapterDisplayMode ERROR res=%x at %d\\n\", res, __LINE__);\n\t\treturn res;\n\t}\n\telse {\n\t\tOutTraceB(\"GetFrontBuffer: screen size=(%dx%d)\\n\", dm.Width, dm.Height);\n\t}\n\n\tres = lpDevice->CreateImageSurface(dm.Width, dm.Height, D3DFMT_A8R8G8B8, &lpSurface);\n\tif(res) {\n\t\tOutTraceE(\"GetFrontBuffer: CreateImageSurface ERROR res=%x at %d\\n\", res, __LINE__);\n\t\treturn res;\n\t}\n\n\t//res = lpDevice->GetFrontBuffer(lpSurface);\n\tres = (*pGetFrontBuffer)(lpDevice, (LPDIRECTDRAWSURFACE)lpSurface);\n\tif(res) {\n\t\tOutTraceE(\"GetFrontBuffer: GetFrontBuffer ERROR res=%x at %d\\n\", res, __LINE__);\n\t\tlpSurface->Release();\n\t\treturn res;\n\t}\n\n\tRECT p0 = dxw.GetUnmappedScreenRect();\n\tRECT srcrect = dxw.GetScreenRect();\n\tOffsetRect(&srcrect, p0.left, p0.top);\n\tOutTraceB(\"GetFrontBuffer: screen rect=(%d,%d)-(%d,%d)\\n\", srcrect.left, srcrect.top, srcrect.right, srcrect.bottom);\n\tPOINT destpoint = {0, 0};\n\t//res = lpDevice->CopyRects(lpSurface, (CONST RECT *)&srcrect, 1, dest, (CONST POINT *)&destpoint);\n\tres = (*pCopyRects)(lpDevice, (LPDIRECTDRAWSURFACE)lpSurface, &srcrect, 1, (LPDIRECTDRAWSURFACE)dest, &destpoint);\n\tlpSurface->Release();\n\tif(res) {\n\t\tOutTraceE(\"GetFrontBuffer: CopyRects ERROR res=%x at %d\\n\", res, __LINE__);\n\t\treturn res;\n\t}\n\n\treturn DD_OK;\n}\n\nHRESULT exCreateImageSurface8(void *lpd3dd, UINT w, UINT h, D3DFORMAT Format, LPDIRECTDRAWSURFACE *ppBackBuffer)\n{\n\treturn ((IDirect3DDevice8 *)lpd3dd)->CreateImageSurface(w, h, Format, (IDirect3DSurface8 **)ppBackBuffer);\n}\n\nHRESULT  dxCopyRects(void *lpd3dd, LPDIRECTDRAWSURFACE psrc, LPDIRECTDRAWSURFACE pdst)\n{\n\tHRESULT res;\n\tIDirect3DSurface8 *lpsrc = (IDirect3DSurface8 *)psrc;\n\tIDirect3DSurface8 *lpdst = (IDirect3DSurface8 *)pdst;\n\tIDirect3DDevice8 *lpDevice = (IDirect3DDevice8 *)lpd3dd;\n\tLPDIRECT3DSURFACE8 lpImageSrc = NULL;\n\tLPDIRECT3DSURFACE8 lpImageDst = NULL;\n\tD3DSURFACE_DESC SrcDesc, DstDesc;\n\tD3DLOCKED_RECT SrcLockedRect, DstLockedRect;\n\n\t// first, build  source image\n\tif(res = lpsrc->GetDesc(&SrcDesc)){\n\t\tOutTraceE(\"dxCopyRects: GetDesc ERROR res=%x at %d\\n\", res, __LINE__);\n\t\treturn res;\n\t}\n\telse{\n\t\tOutTraceB(\"dxCopyRects: source size=(%dx%d) format=%d\\n\", SrcDesc.Width, SrcDesc.Height, SrcDesc.Format);\n\t}\n\n\tif(res = lpDevice->CreateImageSurface(SrcDesc.Width, SrcDesc.Height, SrcDesc.Format, &lpImageSrc)){\n\t\tOutTraceE(\"dxCopyRects: CreateImageSurface ERROR res=%x at %d\\n\", res, __LINE__);\n\t\treturn res;\n\t}\n\n\t// get source image\n\tif(res = (*pCopyRects)(lpDevice, (LPDIRECTDRAWSURFACE)psrc, NULL, 0, (LPDIRECTDRAWSURFACE)lpImageSrc, NULL)){\n\t\tOutTraceE(\"dxCopyRects: CopyRects ERROR res=%x at %d\\n\", res, __LINE__);\n\t\treturn res;\n\t}\n\n\t// build a target image similar to destination \n\tif(res = lpdst->GetDesc(&DstDesc)){\n\t\tOutTraceE(\"dxCopyRects: GetDesc ERROR res=%x at %d\\n\", res, __LINE__);\n\t\treturn res;\n\t}\n\telse{\n\t\tOutTraceB(\"dxCopyRects: dest size=(%dx%d) format=%d\\n\", DstDesc.Width, DstDesc.Height, DstDesc.Format);\n\t}\n\n\tif(res = lpDevice->CreateImageSurface(DstDesc.Width, DstDesc.Height, DstDesc.Format, &lpImageDst)){\n\t\tOutTraceE(\"dxCopyRects: GetDesc ERROR res=%x at %d\\n\", res, __LINE__);\n\t\treturn res;\n\t}\n\n\t// make the conversion here ....\n\tif (res=lpImageSrc->LockRect(&SrcLockedRect, NULL, D3DLOCK_READONLY)){\n\t\tOutTraceE(\"dxCopyRects: LockRect ERROR res=%x at %d\\n\", res, __LINE__);\n\t\treturn res;\n\t}\n\tif(res = lpImageDst->LockRect(&DstLockedRect, NULL, 0)){\n\t\tOutTraceE(\"dxCopyRects: LockRect ERROR res=%x at %d\\n\", res, __LINE__);\n\t\treturn res;\n\t}\n\n\t// pixel conversion here\n\tswitch(SrcDesc.Format){\n\t\tcase D3DFMT_A8R8G8B8:\n\t\tcase D3DFMT_X8R8G8B8:\n\t\t\tswitch(DstDesc.Format){\n\t\t\t\tcase D3DFMT_R5G6B5:\n\t\t\t\t\t{\n\t\t\t\t\t\tOutTraceB(\"dxCopyRects: converting 32 to 16 BPP\\n\", res, __LINE__);\n\t\t\t\t\t\tDWORD *srcpix;\n\t\t\t\t\t\tWORD *dstpix;\n\t\t\t\t\t\tfor(unsigned int y=0; y<min(DstDesc.Height,SrcDesc.Height); y++){\n\t\t\t\t\t\t\tsrcpix = (DWORD *)SrcLockedRect.pBits + (y * SrcLockedRect.Pitch / 4);\n\t\t\t\t\t\t\tdstpix = (WORD *)DstLockedRect.pBits + (y * DstLockedRect.Pitch / 2);\n\t\t\t\t\t\t\tfor(unsigned int x=0; x<min(DstDesc.Width,SrcDesc.Width); x++){\n\t\t\t\t\t\t\t\t// to do ....\n\t\t\t\t\t\t\t\t*dstpix++ = *srcpix++ & 0xFFFF;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase D3DFMT_R5G6B5:\n\t\t\tswitch(DstDesc.Format){\n\t\t\t\tcase D3DFMT_A8R8G8B8:\n\t\t\t\tcase D3DFMT_X8R8G8B8:\n\t\t\t\t\t{\n\t\t\t\t\t\tOutTraceB(\"dxCopyRects: converting 16 to 32 BPP\\n\", res, __LINE__);\n\t\t\t\t\t\tWORD *srcpix;\n\t\t\t\t\t\tDWORD *dstpix;\n\t\t\t\t\t\textern void SetPalette16BPP(void);\n\t\t\t\t\t\textern DWORD *Palette16BPP;\n\t\t\t\t\t\tif (!Palette16BPP) SetPalette16BPP();\n\t\t\t\t\t\tfor(unsigned int y=0; y<min(DstDesc.Height,SrcDesc.Height); y++){\n\t\t\t\t\t\t\tsrcpix = (WORD *)SrcLockedRect.pBits + (y * SrcLockedRect.Pitch / 2);\n\t\t\t\t\t\t\tdstpix = (DWORD *)DstLockedRect.pBits + (y * DstLockedRect.Pitch / 4);\n\t\t\t\t\t\t\tfor(unsigned int x=0; x<min(DstDesc.Width,SrcDesc.Width); x++)\n\t\t\t\t\t\t\t\t*(dstpix ++) = Palette16BPP[*(srcpix ++)]; *srcpix++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t}\n\n\tlpImageSrc->UnlockRect();\n\tlpImageDst->UnlockRect();\n\n\t// copy to target surface\n\tif(res = (*pCopyRects)(lpDevice, (LPDIRECTDRAWSURFACE)lpImageDst, NULL, 0, (LPDIRECTDRAWSURFACE)lpdst, NULL)){\n\t\tOutTraceE(\"dxCopyRects: CopyRects ERROR res=%x at %d\\n\", res, __LINE__);\n\t\treturn res;\n\t}\n\n\t// clean up\n\tlpImageSrc->Release();\n\tlpImageDst->Release();\n\treturn res;\n}\n\nLPDIRECT3DSURFACE8 D3D8EmulatedBackBuffer;\nLPDIRECT3DSURFACE8 D3D8RealBackBuffer;\nLPDIRECT3DSURFACE8 RealDepthBuffer;\nLPDIRECT3DTEXTURE8 D3D8EmulatedBackBufferTexture;\nIDirect3DSurface8* EmulatedBackBufferTextureLevel0;\n\nLPDIRECTDRAWSURFACE dwGetVirtualBackBuffer()\n{\n\treturn (LPDIRECTDRAWSURFACE)D3D8EmulatedBackBuffer;\n}\n\nHRESULT dwD3D8InitEmulation(void *lpd3ddx)\n{\n\tHRESULT res;\n\tLPDIRECT3DDEVICE8 lpd3dd = (LPDIRECT3DDEVICE8)lpd3ddx;\n\n    // Create the render target which will be used as the real back buffer.\n    res = lpd3dd->CreateRenderTarget(dxw.GetScreenWidth(), dxw.GetScreenHeight(), D3DFMT_R5G6B5, D3DMULTISAMPLE_NONE, TRUE, &D3D8EmulatedBackBuffer);\n    if(res) OutTraceE(\"dwD3D8InitEmulation: CreateRenderTarget ERROR res=%x at %d\\n\", res, __LINE__);\n\n    res = lpd3dd->CreateTexture(dxw.GetScreenWidth(), dxw.GetScreenHeight(), 1, 0, D3DFMT_R5G6B5, D3DPOOL_DEFAULT, &D3D8EmulatedBackBufferTexture);\n    if(res) OutTraceE(\"dwD3D8InitEmulation: CreateTexture ERROR res=%x at %d\\n\", res, __LINE__);\n\n    res = D3D8EmulatedBackBufferTexture->GetSurfaceLevel(0, &EmulatedBackBufferTextureLevel0);\n    if(res) OutTraceE(\"dwD3D8InitEmulation: GetSurfaceLevel ERROR res=%x at %d\\n\", res, __LINE__);\n\n    // Locate the real buffers.\n    res = lpd3dd->GetBackBuffer(0, D3DBACKBUFFER_TYPE_MONO, &D3D8RealBackBuffer);\n    if(res) OutTraceE(\"dwD3D8InitEmulation: GetBackBuffer ERROR res=%x at %d\\n\", res, __LINE__);\n\n    res = lpd3dd->GetDepthStencilSurface(&RealDepthBuffer);\n    if(res) OutTraceE(\"dwD3D8InitEmulation: GetDepthStencilSurface ERROR res=%x at %d\\n\", res, __LINE__);\n\n    // Switch the render target to the emulated one by default.\n\n    res = lpd3dd->SetRenderTarget(D3D8EmulatedBackBuffer, RealDepthBuffer);\n    if(res) OutTraceE(\"dwD3D8InitEmulation: SetRenderTarget ERROR res=%x at %d\\n\", res, __LINE__);\n\n    return D3D_OK;\n}\n\nvoid dwD3D8ShutdownEmulation(void *lpd3ddx)\n{\n\tHRESULT res;\n\tLPDIRECT3DDEVICE8 lpd3dd = (LPDIRECT3DDEVICE8)lpd3ddx;\n    \n\t// Restore targets.\n\n    res=lpd3dd->SetRenderTarget(D3D8RealBackBuffer, RealDepthBuffer);\n    if(res) OutTraceE(\"dwD3D8ShutdownEmulation: SetRenderTarget ERROR res=%x at %d\\n\", res, __LINE__);\n    res=D3D8RealBackBuffer->Release();\n    res=RealDepthBuffer->Release();\n\n    // Destroy emulation objects.\n\n    res=EmulatedBackBufferTextureLevel0->Release();\n    res=D3D8EmulatedBackBufferTexture->Release();\n    res=D3D8EmulatedBackBuffer->Release();\n}\n\nstatic DWORD set_rs(LPDIRECT3DDEVICE8 lpd3dd, const D3DRENDERSTATETYPE type, const DWORD value)\n{\n    DWORD old_value;\n    lpd3dd->GetRenderState(type, &old_value);\n    lpd3dd->SetRenderState(type, value);\n    return old_value;\n}\n\nstatic DWORD set_tss(LPDIRECT3DDEVICE8 lpd3dd, const DWORD stage, const D3DTEXTURESTAGESTATETYPE type, const DWORD value)\n{\n    DWORD old_value;\n    lpd3dd->GetTextureStageState(stage, type, &old_value);\n    lpd3dd->SetTextureStageState(stage, type, value);\n    return old_value;\n}\n\nHRESULT dwD3D8Present(void *lpd3ddx, CONST RECT *pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion)\n{\n\tHRESULT res;\n\tLPDIRECT3DDEVICE8 lpd3dd = (LPDIRECT3DDEVICE8)lpd3ddx;\n\n    if (pSourceRect || pDestRect || hDestWindowOverride || pDirtyRegion) {\n        OutTraceE(\"dwD3D8Present: ERROR only parameter-less Present is supported\\n\");\n        return D3DERR_INVALIDCALL;\n    }\n\n    // Blit the render target to the texture.\n\n    res = lpd3dd->CopyRects(D3D8EmulatedBackBuffer, NULL, 0, EmulatedBackBufferTextureLevel0, NULL);\n    if(res) OutTraceE(\"dwD3D8Present: CopyRects ERROR res=%x at %d\\n\", res, __LINE__);\n\n    // Render the texture to the real back buffer.\n\n    res = lpd3dd->BeginScene();\n\tif(res) {\n\t\tOutTraceE(\"dwD3D8Present: CopyRects ERROR res=%x at %d\\n\", res, __LINE__);\n\t\treturn D3DERR_INVALIDCALL;\n\t}\n\n    LPDIRECT3DSURFACE8 old_back_buffer;\n    LPDIRECT3DSURFACE8 old_depth_buffer;\n    lpd3dd->GetRenderTarget(&old_back_buffer);\n    lpd3dd->GetDepthStencilSurface(&old_depth_buffer);\n\n    lpd3dd->SetRenderTarget(D3D8RealBackBuffer, RealDepthBuffer);\n\n    LPDIRECT3DBASETEXTURE8 old_txt;\n    lpd3dd->GetTexture(0, &old_txt);\n    lpd3dd->SetTexture(0, D3D8EmulatedBackBufferTexture);\n\n    DWORD old_vs;\n    lpd3dd->GetVertexShader(&old_vs);\n    lpd3dd->SetVertexShader(D3DFVF_XYZRHW | D3DFVF_TEX1);\n\n    IDirect3DVertexBuffer8 *old_stream_0;\n    UINT old_stream_0_stride;\n    lpd3dd->GetStreamSource(0, &old_stream_0, &old_stream_0_stride);\n\n    const DWORD old_cull = set_rs(lpd3dd, D3DRS_CULLMODE, D3DCULL_NONE);\n    const DWORD old_atest = set_rs(lpd3dd, D3DRS_ALPHATESTENABLE, FALSE);\n    const DWORD old_blend = set_rs(lpd3dd, D3DRS_ALPHABLENDENABLE, FALSE);\n    const DWORD old_z_enable = set_rs(lpd3dd, D3DRS_ZENABLE, FALSE);\n    const DWORD old_z_write = set_rs(lpd3dd, D3DRS_ZWRITEENABLE, FALSE);\n    const DWORD old_stencil = set_rs(lpd3dd, D3DRS_STENCILENABLE, FALSE);\n    const DWORD old_fog = set_rs(lpd3dd, D3DRS_FOGENABLE, FALSE);\n    const DWORD old_specular = set_rs(lpd3dd, D3DRS_SPECULARENABLE, FALSE);\n    const DWORD old_zbias = set_rs(lpd3dd, D3DRS_ZBIAS, 0);\n\n    const DWORD old_colorop_0 = set_tss(lpd3dd, 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);\n    const DWORD old_colorarg_0 = set_tss(lpd3dd, 0, D3DTSS_COLORARG0, D3DTA_TEXTURE);\n    const DWORD old_colorop_1 = set_tss(lpd3dd, 1, D3DTSS_COLOROP, D3DTOP_DISABLE);\n    const DWORD old_mag_filter_0 = set_tss(lpd3dd, 0, D3DTSS_MAGFILTER, D3DTEXF_POINT);\n    const DWORD old_min_filter_0 = set_tss(lpd3dd, 0, D3DTSS_MINFILTER, D3DTEXF_POINT);\n\n    const float right = static_cast<float>(dxw.GetScreenWidth());\n    const float bottom = static_cast<float>(dxw.GetScreenHeight());\n\n    const struct QuadVertex {\n        float x, y, z, w;\n        float u, v;\n    } quad[] = {\n        {-0.5f + 0.0f,  -0.5f + 0.0f,   0.5f, 1.0f, 0.0f, 0.0f},\n        {-0.5f + right, -0.5f + 0.0f,   0.5f, 1.0f, 1.0f, 0.0f},\n        {-0.5f + right, -0.5f + bottom, 0.5f, 1.0f, 1.0f, 1.0f},\n        {-0.5f + 0.0f,  -0.5f + bottom, 0.5f, 1.0f, 0.0f, 1.0f},\n    };\n    lpd3dd->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, quad, sizeof(QuadVertex));\n\n    // Restore whatever parts of the state are necessary.\n    // Currently we do not restore viewport.\n\n    lpd3dd->SetRenderTarget(old_back_buffer, old_depth_buffer);\n    lpd3dd->SetTexture(0, old_txt);\n    lpd3dd->SetVertexShader(old_vs);\n\n    lpd3dd->SetRenderState(D3DRS_CULLMODE, old_cull);\n    lpd3dd->SetRenderState(D3DRS_ALPHATESTENABLE, old_atest);\n    lpd3dd->SetRenderState(D3DRS_ALPHABLENDENABLE, old_blend);\n    lpd3dd->SetRenderState(D3DRS_ZENABLE, old_z_enable);\n    lpd3dd->SetRenderState(D3DRS_ZWRITEENABLE, old_z_write);\n    lpd3dd->SetRenderState(D3DRS_STENCILENABLE, old_stencil);\n    lpd3dd->SetRenderState(D3DRS_FOGENABLE, old_fog);\n    lpd3dd->SetRenderState(D3DRS_SPECULARENABLE, old_specular);\n    lpd3dd->SetRenderState(D3DRS_ZBIAS, old_zbias);\n\n    lpd3dd->SetTextureStageState(0, D3DTSS_COLOROP, old_colorop_0);\n    lpd3dd->SetTextureStageState(0, D3DTSS_COLORARG0, old_colorarg_0);\n    lpd3dd->SetTextureStageState(1, D3DTSS_COLOROP, old_colorop_1);\n    lpd3dd->SetTextureStageState(0, D3DTSS_MAGFILTER, old_mag_filter_0);\n    lpd3dd->SetTextureStageState(0, D3DTSS_MINFILTER, old_min_filter_0);\n\n    lpd3dd->SetStreamSource(0, old_stream_0, old_stream_0_stride);\n    lpd3dd->EndScene();\n\treturn D3D_OK;\n}\n"
  },
  {
    "path": "dll/hd3d9.cpp",
    "content": "#include <D3D9.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n#include \"syslibs.h\"\n#include \"stdio.h\"\n\nextern void TextureHandling(LPDIRECTDRAWSURFACE);\n\ntypedef HRESULT (WINAPI *LockRect_Type)(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD);\ntypedef HRESULT (WINAPI *UnlockRect_Type)(void *, UINT);\n\nextern LockRect_Type pLockRect9;\nextern UnlockRect_Type pUnlockRect9;\n\nextern void D3DTextureDump(D3DSURFACE_DESC, D3DLOCKED_RECT);\nextern void D3DTextureHighlight(D3DSURFACE_DESC, D3DLOCKED_RECT);\nextern void D3DTextureHack(D3DSURFACE_DESC, D3DLOCKED_RECT);\nextern void D3DTextureTransp(D3DSURFACE_DESC, D3DLOCKED_RECT);\nextern char *ExplainD3DSurfaceFormat(DWORD);\n\nvoid D3D9TextureHandling(void *arg, int Level)\n{\n\tHRESULT res;\n\tLPDIRECT3DTEXTURE9 lpd3dtex = (LPDIRECT3DTEXTURE9)arg;\n\tIDirect3DSurface9 *pSurfaceLevel;\n\tD3DSURFACE_DESC Desc;\n\tD3DLOCKED_RECT LockedRect;\n\tOutTraceB(\"D3D9TextureHandling: arg=%x level=%d\\n\", (DWORD)arg, Level);\n\t// Beware: attempts to dump surfaces at level > 0 result in stack corruption!!!\n\tif(Level > 0) return;\n\tif(res=lpd3dtex->GetSurfaceLevel(Level, &pSurfaceLevel)){\n\t\tOutTraceE(\"Texture::GetSurfaceLevel ERROR: res=%d(%s)\\n\", res, ExplainDDError(res));\n\t\treturn;\n\t}\n\tpSurfaceLevel->Release();\n\tif(res=lpd3dtex->GetLevelDesc(Level, &Desc)){\n\t\tOutTraceE(\"Texture::GetLevelDesc ERROR: res=%d(%s)\\n\", res, ExplainDDError(res));\n\t\treturn;\n\t}\n\tOutTraceB(\"D3D9TextureHandling: level=%d type=%x usage=%x\\n\", Level, Desc.Type, Desc.Usage);\n\tswitch(Desc.Type){\n\t\tcase D3DRTYPE_SURFACE:\n\t\tcase D3DRTYPE_TEXTURE:\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tOutTraceB(\"D3D9TextureHandling: SKIP type=%x usage=%x\\n\", Desc.Type);\n\t\t\treturn;\n\t\t\tbreak;\n\t}\n\tif(Desc.Usage == D3DUSAGE_RENDERTARGET){\n\t\tOutTraceB(\"D3D9TextureHandling: SKIP usage=%x\\n\", Desc.Usage);\n\t\treturn;\n\t}\n\t//pSurfaceLevel->GetRenderTargetData(&pRenderTarget, &pDestSurface);\n\tres=(*pLockRect9)(lpd3dtex, Level, &LockedRect, NULL, D3DLOCK_READONLY);\n\tOutTrace(\"D3D9TextureHandling: lpd3dtex=%x level=%d format=0x%x(%s) size=(%dx%d) bits=%x pitch=%d\\n\", \n\t\tlpd3dtex, Level, Desc.Format, ExplainD3DSurfaceFormat(Desc.Format), \n\t\tDesc.Width, Desc.Height, LockedRect.pBits, LockedRect.Pitch);\n\tswitch(dxw.dwFlags5 & TEXTUREMASK){\n\t\tcase TEXTUREHIGHLIGHT: \n\t\t\tD3DTextureHighlight(Desc, LockedRect);\n\t\t\tbreak;\n\t\tcase TEXTUREDUMP: \n\t\t\tD3DTextureDump(Desc, LockedRect);\n\t\t\tbreak;\n\t\tcase TEXTUREHACK:\n\t\t\tD3DTextureHack(Desc, LockedRect);\n\t\t\tbreak;\n\t\tcase TEXTURETRANSP:\n\t\t\tD3DTextureTransp(Desc, LockedRect);\n\t\t\tbreak;\n\t}\n\tres=(*pUnlockRect9)(lpd3dtex, Level);\n}\n"
  },
  {
    "path": "dll/hddraw.h",
    "content": "#include <dxdiag.h>\n\ntypedef HRESULT (WINAPI *DirectDrawCreate_Type)(GUID *, LPDIRECTDRAW *, IUnknown *);\ntypedef HRESULT (WINAPI *DirectDrawCreateEx_Type)(GUID *, LPDIRECTDRAW *, REFIID, IUnknown *);\ntypedef HRESULT (WINAPI *DirectDrawEnumerateA_Type)(LPDDENUMCALLBACKA, LPVOID);\ntypedef HRESULT (WINAPI *DirectDrawEnumerateExA_Type)(LPDDENUMCALLBACKEXA, LPVOID, DWORD);\ntypedef HRESULT (WINAPI *DirectDrawEnumerateW_Type)(LPDDENUMCALLBACKW, LPVOID);\ntypedef HRESULT (WINAPI *DirectDrawEnumerateExW_Type)(LPDDENUMCALLBACKEXW, LPVOID, DWORD);\ntypedef HRESULT (WINAPI *DirectDrawCreateClipper_Type)(DWORD, LPDIRECTDRAWCLIPPER *, IUnknown *);\ntypedef void\t(WINAPI *HandleDDThreadLock_Type)(void);\n\ntypedef HDC (WINAPI *GDIGetDC_Type)(HWND);\ntypedef int (WINAPI *GDIReleaseDC_Type)(HWND, HDC);\n\n// COM generic types\ntypedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *);\n\n// DirectDraw\n//    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;\ntypedef ULONG (WINAPI *AddRefD_Type)(LPDIRECTDRAW);\ntypedef ULONG (WINAPI *ReleaseD_Type)(LPDIRECTDRAW);\n    /*** IDirectDraw methods ***/\ntypedef ULONG (WINAPI *Compact_Type)(LPDIRECTDRAW);\ntypedef HRESULT (WINAPI *CreateClipper_Type)(LPDIRECTDRAW, DWORD, LPDIRECTDRAWCLIPPER FAR* , IUnknown FAR*);\ntypedef HRESULT (WINAPI *CreatePalette_Type)(LPDIRECTDRAW, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *);\ntypedef HRESULT (WINAPI *CreateSurface1_Type)(LPDIRECTDRAW, DDSURFACEDESC *, LPDIRECTDRAWSURFACE *, void *);\ntypedef HRESULT (WINAPI *CreateSurface2_Type)(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *);\ntypedef HRESULT (WINAPI *CreateSurface_Type)(LPDIRECTDRAW, DDSURFACEDESC2 *, LPDIRECTDRAWSURFACE *, void *);\ntypedef HRESULT (WINAPI *DuplicateSurface_Type)(LPDIRECTDRAW, LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE FAR *);\ntypedef HRESULT (WINAPI *DuplicateSurface4_Type)(LPDIRECTDRAW, LPDIRECTDRAWSURFACE4, LPDIRECTDRAWSURFACE4 FAR *);\ntypedef HRESULT (WINAPI *DuplicateSurface7_Type)(LPDIRECTDRAW, LPDIRECTDRAWSURFACE7, LPDIRECTDRAWSURFACE7 FAR *);\ntypedef HRESULT (WINAPI *EnumDisplayModes1_Type)(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK);\ntypedef HRESULT (WINAPI *EnumDisplayModes4_Type)(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2);\ntypedef HRESULT (WINAPI *EnumSurfaces1_Type)(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMSURFACESCALLBACK);\ntypedef HRESULT (WINAPI *EnumSurfaces4_Type)(LPDIRECTDRAW, DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMSURFACESCALLBACK2);\ntypedef HRESULT (WINAPI *FlipToGDISurface_Type)(LPDIRECTDRAW);\ntypedef HRESULT (WINAPI *GetCapsD_Type)(LPDIRECTDRAW, LPDDCAPS, LPDDCAPS);\ntypedef HRESULT (WINAPI *GetDisplayMode_Type)(LPDIRECTDRAW, LPDDSURFACEDESC);\ntypedef HRESULT (WINAPI *GetDisplayMode4_Type)(LPDIRECTDRAW, LPDDSURFACEDESC2);\ntypedef HRESULT (WINAPI *GetFourCCCodes_Type)(LPDIRECTDRAW, LPDWORD, LPDWORD);\ntypedef HRESULT (WINAPI *GetGDISurface_Type)(LPDIRECTDRAW, LPDIRECTDRAWSURFACE *);\ntypedef HRESULT (WINAPI *GetMonitorFrequency_Type)(LPDIRECTDRAW, LPDWORD);\ntypedef HRESULT (WINAPI *GetScanLine_Type)(LPDIRECTDRAW, LPDWORD);\ntypedef HRESULT (WINAPI *GetVerticalBlankStatus_Type)(LPDIRECTDRAW, LPBOOL);\ntypedef HRESULT (WINAPI *Initialize_Type)(LPDIRECTDRAW, GUID FAR *);\ntypedef HRESULT (WINAPI *RestoreDisplayMode_Type)(LPDIRECTDRAW);\ntypedef HRESULT (WINAPI *SetCooperativeLevel_Type)(void *, HWND, DWORD);\ntypedef HRESULT (WINAPI *SetDisplayMode2_Type)(LPDIRECTDRAW, DWORD, DWORD, DWORD, DWORD, DWORD);\ntypedef HRESULT (WINAPI *SetDisplayMode1_Type)(LPDIRECTDRAW, DWORD, DWORD, DWORD);\ntypedef HRESULT (WINAPI *WaitForVerticalBlank_Type)(LPDIRECTDRAW, DWORD, HANDLE);\ntypedef HRESULT (WINAPI *GetAvailableVidMem_Type)(LPDIRECTDRAW, LPDDSCAPS, LPDWORD, LPDWORD);\ntypedef HRESULT (WINAPI *GetAvailableVidMem4_Type)(LPDIRECTDRAW, LPDDSCAPS2, LPDWORD, LPDWORD);\ntypedef HRESULT (WINAPI *GetSurfaceFromDC_Type)(LPDIRECTDRAW, HDC, LPDIRECTDRAWSURFACE*);\ntypedef HRESULT (WINAPI *RestoreAllSurfaces_Type)(LPDIRECTDRAW); \ntypedef HRESULT (WINAPI *TestCooperativeLevel_Type)(LPDIRECTDRAW);\ntypedef HRESULT (WINAPI *GetDeviceIdentifier_Type)(LPDIRECTDRAW, LPDDDEVICEIDENTIFIER, DWORD);\ntypedef HRESULT (WINAPI *GetScanLine_Type)(LPDIRECTDRAW, LPDWORD);\ntypedef HRESULT (WINAPI *StartModeTest_Type)(LPDIRECTDRAW, LPSIZE, DWORD, DWORD);\ntypedef HRESULT (WINAPI *EvaluateMode_Type)(LPDIRECTDRAW, DWORD, DWORD *);\n\n// DirectDrawSurface\ntypedef ULONG (WINAPI *AddRefS_Type)(LPDIRECTDRAWSURFACE);\ntypedef HRESULT (WINAPI *ReleaseS_Type)(LPDIRECTDRAWSURFACE);\ntypedef HRESULT (WINAPI *AddAttachedSurface_Type)(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE);\ntypedef HRESULT (WINAPI *AddOverlayDirtyRect_Type)(LPDIRECTDRAWSURFACE, LPRECT);\ntypedef HRESULT (WINAPI *Blt_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX);\ntypedef HRESULT (WINAPI *BltBatch_Type)(LPDIRECTDRAWSURFACE, LPDDBLTBATCH, DWORD, DWORD);\ntypedef HRESULT (WINAPI *BltFast_Type)(LPDIRECTDRAWSURFACE, DWORD, DWORD, LPDIRECTDRAWSURFACE, LPRECT, DWORD);\ntypedef HRESULT (WINAPI *DeleteAttachedSurface_Type)(LPDIRECTDRAWSURFACE,  DWORD, LPDIRECTDRAWSURFACE);\ntypedef HRESULT (WINAPI *EnumAttachedSurfaces_Type)(LPDIRECTDRAWSURFACE, LPVOID, LPDDENUMSURFACESCALLBACK);\ntypedef HRESULT (WINAPI *EnumOverlayZOrders_Type)(LPDIRECTDRAWSURFACE, DWORD, LPVOID, LPDDENUMSURFACESCALLBACK);\ntypedef HRESULT (WINAPI *Flip_Type)(LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE, DWORD);\ntypedef HRESULT (WINAPI *GetAttachedSurface_Type)(LPDIRECTDRAWSURFACE, DDSCAPS *, LPDIRECTDRAWSURFACE *);\ntypedef HRESULT (WINAPI *GetBltStatus_Type)(LPDIRECTDRAWSURFACE, DWORD);\ntypedef HRESULT (WINAPI *GetCapsS_Type)(LPDIRECTDRAWSURFACE, LPDDSCAPS);\ntypedef HRESULT (WINAPI *GetCaps2S_Type)(LPDIRECTDRAWSURFACE, LPDDSCAPS2);\ntypedef HRESULT (WINAPI *GetClipper_Type)(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER FAR*);\ntypedef HRESULT (WINAPI *GetColorKey_Type)(LPDIRECTDRAWSURFACE, DWORD, LPDDCOLORKEY);\ntypedef HRESULT (WINAPI *GetDC_Type) (LPDIRECTDRAWSURFACE, HDC FAR *);\ntypedef HRESULT (WINAPI *GetFlipStatus_Type)(LPDIRECTDRAWSURFACE, DWORD);\ntypedef HRESULT (WINAPI *GetOverlayPosition_Type)(LPDIRECTDRAWSURFACE, LPLONG, LPLONG);\ntypedef HRESULT (WINAPI *GetPalette_Type)(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE *);\ntypedef HRESULT (WINAPI *GetPixelFormat_Type)(LPDIRECTDRAWSURFACE, LPDDPIXELFORMAT);\ntypedef HRESULT (WINAPI *GetSurfaceDesc_Type)(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC);\ntypedef HRESULT (WINAPI *GetSurfaceDesc2_Type)(LPDIRECTDRAWSURFACE2, LPDDSURFACEDESC2);\ntypedef HRESULT (WINAPI *InitializeC_Type)(LPDIRECTDRAWCLIPPER, LPDIRECTDRAW, DWORD);\ntypedef HRESULT (WINAPI *IsLost_Type)(LPDIRECTDRAWSURFACE);\ntypedef HRESULT (WINAPI *Lock_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDDSURFACEDESC, DWORD, HANDLE);\ntypedef HRESULT (WINAPI *ReleaseDC_Type)(LPDIRECTDRAWSURFACE, HDC);\ntypedef HRESULT (WINAPI *Restore_Type)(LPDIRECTDRAWSURFACE);\ntypedef HRESULT (WINAPI *SetClipper_Type)(LPDIRECTDRAWSURFACE, LPDIRECTDRAWCLIPPER);\ntypedef HRESULT (WINAPI *SetColorKey_Type)(LPDIRECTDRAWSURFACE, DWORD,  LPDDCOLORKEY);\ntypedef HRESULT (WINAPI *SetOverlayPosition_Type)(LPDIRECTDRAWSURFACE, LONG, LONG);\ntypedef HRESULT (WINAPI *SetPalette_Type)(LPDIRECTDRAWSURFACE, LPDIRECTDRAWPALETTE);\ntypedef HRESULT (WINAPI *Unlock1_Type)(LPDIRECTDRAWSURFACE, LPVOID);\ntypedef HRESULT (WINAPI *Unlock4_Type)(LPDIRECTDRAWSURFACE, LPRECT);\ntypedef HRESULT (WINAPI *UpdateOverlay_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDOVERLAYFX);\ntypedef HRESULT (WINAPI *UpdateOverlayDisplay_Type) (LPDIRECTDRAWSURFACE, DWORD);\ntypedef HRESULT (WINAPI *UpdateOverlayZOrder_Type)(LPDIRECTDRAWSURFACE, DWORD, LPDIRECTDRAWSURFACE);\ntypedef HRESULT (WINAPI *SetSurfaceDesc_Type)(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, DWORD);\n\n// DirectDrawClipper\ntypedef HRESULT (WINAPI *AddRefC_Type)(LPDIRECTDRAWCLIPPER);\ntypedef HRESULT (WINAPI *ReleaseC_Type)(LPDIRECTDRAWCLIPPER);\ntypedef HRESULT (WINAPI *GetClipList_Type)(LPDIRECTDRAWCLIPPER, LPRECT, LPRGNDATA, LPDWORD);\ntypedef HRESULT (WINAPI *SetClipList_Type)(LPDIRECTDRAWCLIPPER, LPRGNDATA, DWORD);\ntypedef HRESULT (WINAPI *GetHWnd_Type)(LPDIRECTDRAWCLIPPER, HWND FAR *);\ntypedef HRESULT (WINAPI *IsClipListChanged_Type)(LPDIRECTDRAWCLIPPER, BOOL FAR *);\ntypedef HRESULT (WINAPI *SetHWnd_Type)(LPDIRECTDRAWCLIPPER, DWORD, HWND);\n\n// DirectDraw Palette \n    /*** IUnknown methods ***/\ntypedef HRESULT (WINAPI *QueryInterfaceP_Type)(void *, REFIID, LPVOID *);\ntypedef HRESULT (WINAPI *AddRefP_Type)(LPDIRECTDRAWPALETTE);\ntypedef HRESULT (WINAPI *ReleaseP_Type)(LPDIRECTDRAWPALETTE);\n    /*** IDirectDrawPalette methods ***/\ntypedef HRESULT (WINAPI *GetCapsP_Type)(LPDIRECTDRAWPALETTE, LPDWORD);\ntypedef HRESULT (WINAPI *GetEntries_Type)(LPDIRECTDRAWPALETTE, DWORD, DWORD, DWORD, LPPALETTEENTRY);\n//    STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW, DWORD, LPPALETTEENTRY) PURE;\ntypedef HRESULT (WINAPI *SetEntries_Type)(LPDIRECTDRAWPALETTE, DWORD, DWORD, DWORD, LPPALETTEENTRY);\n\n// \n// GammaRamp\ntypedef HRESULT (WINAPI *GammaRamp_Type)(LPDIRECTDRAWSURFACE, DWORD, LPDDGAMMARAMP);\n\n// extern procedures\n\nextern void HookTexture(LPVOID *, int);\nextern int Set_dwSize_From_Surface();\n\nextern void SetBltTransformations(int);\nextern HRESULT WINAPI PrimaryBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX);\nextern HRESULT WINAPI PrimaryNoBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX);\nextern HRESULT WINAPI PrimaryStretchBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX);\nextern HRESULT WINAPI PrimaryFastBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX);\nextern HRESULT WINAPI PrimaryBilinearBlt(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX);\n\ntypedef HRESULT (WINAPI *EmuBlt_Type)(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPVOID);\ntypedef HRESULT (WINAPI *RevBlt_Type)(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT);\ntypedef HRESULT (WINAPI *PrimaryBlt_Type)(int, Blt_Type, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, LPDDBLTFX);\n\nextern EmuBlt_Type pEmuBlt;\nextern RevBlt_Type pRevBlt;\n"
  },
  {
    "path": "dll/hdinput.cpp",
    "content": "#include <windows.h>\n#include <dinput.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n\ntypedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *);\ntypedef HRESULT (WINAPI *DirectInputCreate_Type)(HINSTANCE, DWORD, LPDIRECTINPUT *, LPUNKNOWN);\ntypedef HRESULT (WINAPI *DirectInputCreateEx_Type)(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN);\ntypedef HRESULT (WINAPI *DICreateDevice_Type)(LPDIRECTINPUT, REFGUID, LPDIRECTINPUTDEVICE *, LPUNKNOWN);\ntypedef HRESULT (WINAPI *DICreateDeviceEx_Type)(LPDIRECTINPUT, REFGUID, REFIID, LPVOID *, LPUNKNOWN);\ntypedef HRESULT (WINAPI *GetDeviceData_Type)(LPDIRECTINPUTDEVICE, DWORD, LPVOID, LPDWORD, DWORD);\ntypedef HRESULT (WINAPI *GetDeviceState_Type)(LPDIRECTINPUTDEVICE, DWORD, LPDIMOUSESTATE);\ntypedef HRESULT (WINAPI *DISetCooperativeLevel_Type)(LPDIRECTINPUTDEVICE, HWND, DWORD);\ntypedef HRESULT (WINAPI *SetDataFormat_Type)(LPDIRECTINPUTDEVICE, LPCDIDATAFORMAT);\n\nHRESULT WINAPI extDirectInputCreate(HINSTANCE, DWORD, LPDIRECTINPUT *, LPUNKNOWN);\nHRESULT WINAPI extDirectInputCreateEx(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN);\nHRESULT WINAPI extDirectInput8Create(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN);\nHRESULT WINAPI extDICreateDevice(LPDIRECTINPUT, REFGUID, LPDIRECTINPUTDEVICE *, LPUNKNOWN);\nHRESULT WINAPI extDICreateDeviceEx(LPDIRECTINPUT, REFGUID, REFIID, LPVOID *, LPUNKNOWN);\nHRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE, DWORD, LPVOID, LPDWORD, DWORD);\nHRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE, DWORD, LPDIMOUSESTATE);\nHRESULT WINAPI extDISetCooperativeLevel(LPDIRECTINPUTDEVICE, HWND, DWORD);\nHRESULT WINAPI extSetDataFormat(LPDIRECTINPUTDEVICE, LPCDIDATAFORMAT);\nHRESULT WINAPI extQueryInterfaceI(void *, REFIID, LPVOID *);\nvoid GetMousePosition(int *, int *);\nvoid InitPosition(int, int, int, int, int, int);\n\t\nDirectInputCreate_Type pDirectInputCreate = 0;\nDirectInputCreateEx_Type pDirectInputCreateEx = 0;\nDICreateDevice_Type pDICreateDevice = 0;\nDICreateDeviceEx_Type pDICreateDeviceEx = 0;\nGetDeviceData_Type pGetDeviceData;\nGetDeviceState_Type pGetDeviceState;\nDISetCooperativeLevel_Type pDISetCooperativeLevel;\nSetDataFormat_Type pSetDataFormat;\nQueryInterface_Type pQueryInterfaceI;\n\nint iCursorX;\nint iCursorY;\nint iCursorXBuf;\nint iCursorYBuf;\nint iCurMinX;\nint iCurMinY;\nint iCurMaxX;\nint iCurMaxY;\n\nint HookDirectInput(HMODULE module, int version)\n{\n\tHINSTANCE hinst;\n\tvoid *tmp;\n\tLPDIRECTINPUT lpdi;\n\tconst GUID di7 = {0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE};\n\tconst GUID di8 = {0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00};\n\n\ttmp = HookAPI(module, \"dinput.dll\", NULL, \"DirectInputCreateA\", extDirectInputCreate);\n\tif(tmp) pDirectInputCreate = (DirectInputCreate_Type)tmp;\n\ttmp = HookAPI(module, \"dinput.dll\", NULL, \"DirectInputCreateW\", extDirectInputCreate);\n\tif(tmp) pDirectInputCreate = (DirectInputCreate_Type)tmp;\n\ttmp = HookAPI(module, \"dinput.dll\", NULL, \"DirectInputCreateEx\", extDirectInputCreateEx);\n\tif(tmp) pDirectInputCreateEx = (DirectInputCreateEx_Type)tmp;\n\ttmp = HookAPI(module, \"dinput8.dll\", NULL, \"DirectInput8Create\", extDirectInput8Create);\n\tif(tmp) pDirectInputCreateEx = (DirectInputCreateEx_Type)tmp;\n\tif(!pDirectInputCreate && !pDirectInputCreateEx){\n\t\tif(version < 8){\n\t\t\thinst = LoadLibrary(\"dinput.dll\");\n\t\t\tpDirectInputCreate =\n\t\t\t\t(DirectInputCreate_Type)GetProcAddress(hinst, \"DirectInputCreateA\");\n\t\t\tif(pDirectInputCreate)\n\t\t\t\tif(!extDirectInputCreate(GetModuleHandle(0), DIRECTINPUT_VERSION,\n\t\t\t\t\t&lpdi, 0)) lpdi->Release();\n\t\t\tpDirectInputCreateEx =\n\t\t\t\t(DirectInputCreateEx_Type)GetProcAddress(hinst, \"DirectInputCreateEx\");\n\t\t\tif(pDirectInputCreateEx)\n\t\t\t\tif(!extDirectInputCreateEx(GetModuleHandle(0), DIRECTINPUT_VERSION,\n\t\t\t\t\tdi7, (void **)&lpdi, 0)) lpdi->Release();\n\t\t}\n\t\telse{\n\t\t\thinst = LoadLibrary(\"dinput8.dll\");\n\t\t\tpDirectInputCreateEx =\n\t\t\t\t(DirectInputCreateEx_Type)GetProcAddress(hinst, \"DirectInput8Create\");\n\t\t\tif(pDirectInputCreateEx)\n\t\t\t\tif(!extDirectInputCreateEx(GetModuleHandle(0), DIRECTINPUT_VERSION,\n\t\t\t\t\tdi8, (void **)&lpdi, 0)) lpdi->Release();\n\t\t}\n\t}\n\tif(pDirectInputCreate || pDirectInputCreateEx) return 1;\n\treturn 0;\n}\n\nHRESULT WINAPI extDirectInputCreate(HINSTANCE hinst,\n\tDWORD dwversion, LPDIRECTINPUT *lplpdi, LPUNKNOWN pu)\n{\n\tHRESULT res;\n\n\tOutTraceD(\"DirectInputCreate: dwVersion = %x\\n\",\n\t\tdwversion);\n\n\tres = (*pDirectInputCreate)(hinst, dwversion, lplpdi, pu);\n\tif(res) return res;\n\tSetHook((void *)(**(DWORD **)lplpdi + 12), extDICreateDevice, (void **)&pDICreateDevice, \"CreateDevice(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdi), extQueryInterfaceI, (void **)&pQueryInterfaceI, \"QueryInterface(I)\");\n\treturn 0;\n}\n\nHRESULT WINAPI extDirectInputCreateEx(HINSTANCE hinst,\n\tDWORD dwversion, REFIID riidltf, LPVOID *ppvout, LPUNKNOWN pu)\n{\n\tHRESULT res;\n\n\tOutTraceD(\"DirectInputCreateEx: dwVersion = %x REFIID = %x\\n\",\n\t\tdwversion, riidltf.Data1);\n\n\tres = (*pDirectInputCreateEx)(hinst, dwversion, riidltf, ppvout, pu);\n\tif(res) return res;\n\tSetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDevice, (void **)&pDICreateDevice, \"CreateDevice(I)\");\n\tSetHook((void *)(**(DWORD **)ppvout + 36), extDICreateDeviceEx, (void **)pDICreateDeviceEx, \"DICreateDeviceEx(I)\");\n\treturn 0;\n}\n\nHRESULT WINAPI extQueryInterfaceI(void * lpdi, REFIID riid, LPVOID *obp)\n{\n\tHRESULT res;\n\n\tOutTraceD(\"lpDI->QueryInterface: REFIID = %x\\n\",\n\t\triid.Data1);\n\n\tres = (*pQueryInterfaceI)(lpdi, riid, obp);\n\tif(res) return res;\n\n\tswitch(riid.Data1){\n\tcase 0x5944E662:\t\t//DirectInput2A\n\tcase 0x5944E663:\t\t//DirectInput2W\n\t\tSetHook((void *)(**(DWORD **)obp + 12), extDICreateDevice, (void **)pDICreateDevice, \"CreateDevice(I)\");\n\t\tbreak;\n\t}\n\treturn 0;\n}\n\nHRESULT WINAPI extDirectInput8Create(HINSTANCE hinst,\n\tDWORD dwversion, REFIID riidltf, LPVOID *ppvout, LPUNKNOWN pu)\n{\n\tHRESULT res;\n\n\tOutTraceD(\"DirectInput8Create: dwVersion = %x REFIID = %x\\n\",\n\t\tdwversion, riidltf.Data1);\n\n\tres = (*pDirectInputCreateEx)(hinst, dwversion, riidltf, ppvout, pu);\n\tif(res) return res;\n\tSetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDevice, (void **)&pDICreateDevice, \"CreateDevice(I8)\");\n\treturn 0;\n}\n\nHRESULT WINAPI extDICreateDevice(LPDIRECTINPUT lpdi, REFGUID rguid,\n\tLPDIRECTINPUTDEVICE *lplpdid, LPUNKNOWN pu)\n{\n\tHRESULT res;\n\n\tOutTraceD(\"lpDI->CreateDevice: REFGUID = %x\\n\",\n\t\trguid.Data1);\n\n\tres = (*pDICreateDevice)(lpdi, rguid, lplpdid, pu);\n\tif(res) return res;\n\tSetHook((void *)(**(DWORD **)lplpdid + 36), extGetDeviceState, (void **)&pGetDeviceState, \"GetDeviceState(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdid + 40), extGetDeviceData, (void **)&pGetDeviceData, \"GetDeviceData(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdid + 44), extSetDataFormat, (void **)&pSetDataFormat, \"SetDataFormat(I)\");\n\tSetHook((void *)(**(DWORD **)lplpdid + 52), extDISetCooperativeLevel, (void **)&pDISetCooperativeLevel, \"SetCooperativeLevel(I)\");\n\treturn 0;\n}\n\nHRESULT WINAPI extDICreateDeviceEx(LPDIRECTINPUT lpdi, REFGUID rguid,\n\tREFIID riid, LPVOID *pvout, LPUNKNOWN pu)\n{\n\tHRESULT res;\n\n\tOutTraceD(\"lpDI->CreateDeviceEx: GUID = %x REFIID = %x\\n\",\n\t\trguid.Data1, riid.Data1);\n\n\tres = (*pDICreateDeviceEx)(lpdi, rguid, riid, pvout, pu);\n\tif(res) return res;\n\tSetHook((void *)(**(DWORD **)pvout + 36), extGetDeviceState, (void **)&pGetDeviceState, \"GetDeviceState(I)\");\n\tSetHook((void *)(**(DWORD **)pvout + 40), extGetDeviceData, (void **)&pGetDeviceData, \"GetDeviceData(I)\");\n\tSetHook((void *)(**(DWORD **)pvout + 44), extSetDataFormat, (void **)&pSetDataFormat, \"SetDataFormat(I)\");\n\tSetHook((void *)(**(DWORD **)pvout + 52), extDISetCooperativeLevel, (void **)&pDISetCooperativeLevel, \"SetCooperativeLevel(I)\");\n\treturn 0;\n}\n\nHRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPVOID rgdod, LPDWORD pdwinout, DWORD dwflags)\n{\n\tHRESULT res;\n\tBYTE *tmp;\n\tunsigned int i;\n\tPOINT p;\n\n\tOutTraceD(\"GetDeviceData cbdata:%i\\n\", cbdata);\n\n\tres = (*pGetDeviceData)(lpdid, cbdata, rgdod, pdwinout, dwflags);\n\tif(res) return res;\n\n\tif(!dxw.bActive) *pdwinout = 0;\n\tGetMousePosition((int *)&p.x, (int *)&p.y);\n\tif(cbdata == 20 || cbdata == 24){\n\t\ttmp = (BYTE *)rgdod;\n\t\tfor(i = 0; i < *pdwinout; i ++){\n\t\t\tif(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_X){\n\t\t\t\t((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.x;\n\t\t\t\tif(!dxw.bDInputAbs){\n\t\t\t\t\tif(p.x < iCurMinX) p.x = iCurMinX;\n\t\t\t\t\tif(p.x > iCurMaxX) p.x = iCurMaxX;\n\t\t\t\t\t((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.x - iCursorXBuf;\n\t\t\t\t\tiCursorXBuf = p.x;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(((LPDIDEVICEOBJECTDATA)tmp)->dwOfs == DIMOFS_Y){\n\t\t\t\t((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.y;\n\t\t\t\tif(!dxw.bDInputAbs){\n\t\t\t\t\tif(p.y < iCurMinY) p.y = iCurMinY;\n\t\t\t\t\tif(p.y > iCurMaxY) p.y = iCurMaxY;\n\t\t\t\t\t((LPDIDEVICEOBJECTDATA)tmp)->dwData = p.y - iCursorYBuf;\n\t\t\t\t\tiCursorYBuf = p.y;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttmp += cbdata;\n\t\t}\n\t\tOutTraceD(\"DEBUG: directinput mousedata=(%d,%d)\\n\", p.x, p.y);\n\t}\n\treturn 0;\n}\n\nHRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE lpdid, DWORD cbdata, LPDIMOUSESTATE lpvdata)\n{\n\tHRESULT res;\n\tPOINT p = {0, 0};\n\n\tOutTraceD(\"GetDeviceState cbData:%i %i\\n\", cbdata, dxw.bActive);\n\n\tres = (*pGetDeviceState)(lpdid, cbdata, lpvdata);\n\tif(res) return res;\n\tif(cbdata == sizeof(DIMOUSESTATE) || cbdata == sizeof(DIMOUSESTATE2)){\n\t\tGetMousePosition((int *)&p.x, (int *)&p.y);\n\t\tlpvdata->lX = p.x;\n\t\tlpvdata->lY = p.y;\n\t\tif(!dxw.bDInputAbs){\n\t\t\tif(p.x < iCurMinX) p.x = iCurMinX;\n\t\t\tif(p.x > iCurMaxX) p.x = iCurMaxX;\n\t\t\tif(p.y < iCurMinY) p.y = iCurMinY;\n\t\t\tif(p.y > iCurMaxY) p.y = iCurMaxY;\n\t\t\tlpvdata->lX = p.x - iCursorX;\n\t\t\tlpvdata->lY = p.y - iCursorY;\n\t\t\tiCursorX = p.x;\n\t\t\tiCursorY = p.y;\n\t\t}\n\t\tif(!dxw.bActive){\n\t\t\tlpvdata->lZ = 0;\n\t\t\t*(DWORD *)lpvdata->rgbButtons = 0;\n\t\t}\n\t\tOutTraceD(\"DEBUG: directinput mousestate=(%d,%d)\\n\", p.x, p.y);\n\t}\n\t\n\tif(cbdata == 256 && !dxw.bActive) ZeroMemory(lpvdata, 256);\n\treturn 0;\n}\n\t\nHRESULT WINAPI extSetDataFormat(LPDIRECTINPUTDEVICE lpdid, LPCDIDATAFORMAT lpdf)\n{\n\tOutTraceD(\"SetDataFormat: flags = 0x%x\\n\", lpdf->dwFlags);\n\n\tif(lpdf->dwFlags & DIDF_ABSAXIS) dxw.bDInputAbs = 1;\n\tif(lpdf->dwFlags & DIDF_RELAXIS) dxw.bDInputAbs = 0;\n\treturn (*pSetDataFormat)(lpdid, lpdf);\n}\n\nHRESULT WINAPI extDISetCooperativeLevel(LPDIRECTINPUTDEVICE lpdid, HWND hwnd, DWORD dwflags)\n{\n\tOutTraceD(\"lpDI->SetCooperativeLevel\\n\");\n\n\tdwflags = DISCL_NONEXCLUSIVE | DISCL_BACKGROUND;\n\treturn (*pDISetCooperativeLevel)(lpdid, hwnd, dwflags);\n}\n\n// Simplified version, taking in proper account the GetCursorPos API hooking & coordinate processing\nvoid GetMousePosition(int *x, int *y)\n{\n\tPOINT p;\n\t//GetCursorPos(&p);\n\textern BOOL WINAPI extGetCursorPos(LPPOINT);\n\textGetCursorPos(&p);\n\t*x = p.x;\n\t*y = p.y;\n\tOutTraceD(\"GetMousePosition: x,y=(%d,%d)\\n\", *x, *y);\n}\n\nvoid InitPosition(int x, int y, int minx, int miny, int maxx, int maxy)\n{\n\tiCursorX = x;\n\tiCursorY = y;\n\tiCursorXBuf = x;\n\tiCursorYBuf = y;\n\tiCurMinX = minx;\n\tiCurMinY = miny;\n\tiCurMaxX = maxx;\n\tiCurMaxY = maxy;\n}\n"
  },
  {
    "path": "dll/hdinput.h",
    "content": ""
  },
  {
    "path": "dll/hexdump.cpp",
    "content": "#define  _CRT_SECURE_NO_WARNINGS\n#include \"stdio.h\"\n#include \"string.h\"\n\n#define MAX_HEXDUMP 512\n\nchar *hexdump(unsigned char *Buffer, int len)\n{\n\tstatic char sHexBuffer[3*MAX_HEXDUMP+12];\n\tchar *s;\n\tint iMaxI;\n\tif(!Buffer) return \"(NULL)\";\n\ts=sHexBuffer;\n\tiMaxI = len;\n\tif(iMaxI > MAX_HEXDUMP) iMaxI = MAX_HEXDUMP;\n\tfor (int i=0; i<iMaxI; i++){\n\t\tsprintf(s, \"%02.2X,\", Buffer[i]); \n\t\ts += 3;\n\t}\n\t*(--s)=0; // eliminate last comma\n\tif(len > iMaxI) strcpy(s, \",...\");\n\treturn sHexBuffer;\n}"
  },
  {
    "path": "dll/hint.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n#include \"windows.h\"\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n\ntypedef struct {\n\tBOOL bShowed;\n\tchar *sHintText;\n} HintEntry_Type;\n\nHintEntry_Type HintTable[]={\n\t{FALSE, \"Automatic configuration hints enabled. Uncheck SHOWHINTS to turn off\"},\n\t{FALSE, \"DirectDraw dependency detected. Check DirectX flags\"},\n\t{FALSE, \"Direct3D8 dependency detected. Check DirectX8 flags\"},\n\t{FALSE, \"Direct3D9 dependency detected. Check DirectX9 flags\"},\n\t{FALSE, \"Direct3D10 dependency detected. Check DirectX10 flags\"},\n\t{FALSE, \"Direct3D11 dependency detected. Check DirectX11 flags\"},\n\t{FALSE, \"OpenGL dependency detected. Check OpenGL hook and flags\"},\n\t{FALSE, \"DirectSound dependency detected. Check DirectSound hook in case of sound problems\"},\n\t{FALSE, \"DirectInput dependency detected. Check DirectInput hook in case of input problems\"},\n\t{FALSE, \"DirectInput8 dependency detected. Check DirectInput8 hook in case of input problems\"},\n\t{FALSE, \"Movie libraries detected. Check multimedia section\"},\n\t{FALSE, \"D3D libraries detected. Check DirectX version hook (DirectX7 ?)\"},\n\t{FALSE, \"IMAGEHLP dependency detected. In case of error, check NOIMAGEHLP flag\"},\n\t{FALSE, \"Compatibility settings for a dfferent OS detected. You may need to clear them\"},\n\t{FALSE, \"Executable obfuscation detected. Impossible to hook this file\"},\n\t{FALSE, \"SafeDisk dependency detected. Check for compatibility with current OS\"},\n\t{FALSE, \"SecuRom dependency detected. Check for compatibility with current OS\"},\n\t{FALSE, \"Integer32 memory size overflow. May need limit resources flag\"},\n\t{FALSE, \"Hooked address update. May need to check the \\\"No hook update\\\" (HOOKNOUPDATE) flag\"},\n\t{FALSE, \"\"}\n};\n\nvoid ShowHint(int HintId)\n{\n\t//if(!dxw.bHintActive) return;\n\n\t// boundary checks\n\tif ((HintId < HINT_HINT) || (HintId >= HINT_LAST)) return;\n\n\t// show hints just once\n\tif(HintTable[HintId].bShowed) return; \n\tHintTable[HintId].bShowed = TRUE;\n\n\t// show hint\n\tchar sMessage[1024];\n\tstrcpy(sMessage, HintTable[HintId].sHintText);\n\tstrcat(sMessage, \"\\n\\nShow next hints?\");\n\tif(MessageBox(NULL, sMessage, \"DxWnd hint\", \n\t\tMB_OKCANCEL|MB_ICONWARNING|MB_TOPMOST)==IDCANCEL)\n\t\tdxw.bHintActive = FALSE;\n}\n"
  },
  {
    "path": "dll/hotpatch.cpp",
    "content": "// hotpatch compiled system dlls come with Windows XP SP2 or later\n\n// return: \n// 0 = patch failed\n// 1 = already patched\n// addr = address of the original function\n\n#define USEMINHOOK\n\n#include <windows.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#ifdef USEMINHOOK\n#include \"MinHook.h\"\n#endif\n\nvoid *HotPatch(void *apiproc, const char *apiname, void *hookproc)\n{\n#ifdef USEMINHOOK\n\tvoid *pProc;\n\tstatic BOOL DoOnce = TRUE;\n\n\tif(DoOnce){\n\t\tif (MH_Initialize() != MH_OK) {\n\t\t\tOutTraceE(\"HotPatch: MH_Initialize FAILED\\n\");\n\t\t\t// What to do here? No recovery action ...\n\t\t\treturn 0;\n\t\t}\n\t\tDoOnce = FALSE;\n\t}\n\n\tOutTraceH(\"HotPatch: api=%s addr=%x hook=%x\\n\", apiname, apiproc, hookproc);\n\t\n\tif(!strcmp(apiname, \"GetProcAddress\")) return 0; // do not mess with this one!\n\n\tif (MH_CreateHook(apiproc, hookproc, reinterpret_cast<void**>(&pProc)) != MH_OK){\n\t\tOutTraceH(\"HotPatch: MH_CreateHook FAILED\\n\");\n        return 0;\n\t}\n\n\tif (MH_EnableHook(apiproc) != MH_OK){\n\t\tOutTraceH(\"HotPatch: MH_EnableHook FAILED\\n\");\n        return 0;\n\t}\n\n\tOutTrace(\"HotPatch: api=%s addr=%x->%x hook=%x\\n\", apiname, apiproc, pProc, hookproc);\n\treturn pProc;\n#else\n\tDWORD dwPrevProtect;\n\tBYTE* patch_address;\n\tvoid *orig_address;\n\n\tOutTraceH(\"HotPatch: api=%s addr=%x hook=%x\\n\", apiname, apiproc, hookproc);\n\n\tif(!strcmp(apiname, \"GetProcAddress\")) return 0; // do not mess with this one!\n\n\tpatch_address = ((BYTE *)apiproc) - 5;\n\torig_address = (BYTE *)apiproc + 2;\n\n\t// entry point could be at the top of a page? so VirtualProtect first to make sure patch_address is readable\n\t//if(!VirtualProtect(patch_address, 7, PAGE_EXECUTE_READWRITE, &dwPrevProtect)){\n\tif(!VirtualProtect(patch_address, 12, PAGE_EXECUTE_WRITECOPY, &dwPrevProtect)){\n\t\tOutTraceH(\"HotPatch: access denied. err=%x\\n\", GetLastError());\n\t\treturn (void *)0; // access denied\n\t}\n\n\t// some calls (QueryPerformanceCounter) are sort of hot patched already....\n\tif(!memcmp( \"\\x90\\x90\\x90\\x90\\x90\\xEB\\x05\\x90\\x90\\x90\\x90\\x90\", patch_address, 12)){\n\t\t*patch_address = 0xE9; // jmp (4-byte relative)\n\t\t*((DWORD *)(patch_address + 1)) = (DWORD)hookproc - (DWORD)patch_address - 5; // relative address\n\t\t*((WORD *)apiproc) = 0xF9EB; // should be atomic write (jmp $-5)\n\t\t\n\t\tVirtualProtect( patch_address, 12, dwPrevProtect, &dwPrevProtect ); // restore protection\n\t\tOutTrace(\"HotPatch: api=%s addr=%x->%x hook=%x\\n\", apiname, apiproc, orig_address, hookproc);\n\t\treturn orig_address;\n\t}\n\n\t// make sure it is a hotpatchable image... check for 5 nops followed by mov edi,edi\n\tif(memcmp( \"\\x90\\x90\\x90\\x90\\x90\\x8B\\xFF\", patch_address, 7) && memcmp( \"\\x90\\x90\\x90\\x90\\x90\\x89\\xFF\", patch_address, 7)){\n\t\tVirtualProtect( patch_address, 12, dwPrevProtect, &dwPrevProtect ); // restore protection\n\t\t// check it wasn't patched already\n\t\tif((*patch_address==0xE9) && (*(WORD *)apiproc == 0xF9EB)){\n\t\t\t// should never go through here ...\n\t\t\tOutTraceH(\"HotPatch: patched already\\n\");\n\t\t\treturn (void *)1;\n\t\t}\n\t\telse{\n\t\t\tOutTraceH(\"HotPatch: not patch aware.\\n\");\n\t\t\treturn (void *)0; // not hot patch \"aware\"\n\t\t}\n\t}\n\t\n\t*patch_address = 0xE9; // jmp (4-byte relative)\n\t*((DWORD *)(patch_address + 1)) = (DWORD)hookproc - (DWORD)patch_address - 5; // relative address\n\t*((WORD *)apiproc) = 0xF9EB; // should be atomic write (jmp $-5)\n\t\n\tVirtualProtect( patch_address, 12, dwPrevProtect, &dwPrevProtect ); // restore protection\n\tOutTrace(\"HotPatch: api=%s addr=%x->%x hook=%x\\n\", apiname, apiproc, orig_address, hookproc);\n\treturn orig_address;\n#endif\n}  "
  },
  {
    "path": "dll/iatpatch.cpp",
    "content": "#include <windows.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n\nvoid *IATPatchDefault(HMODULE module, DWORD ordinal, char *dll, void *apiproc, const char *apiname, void *hookproc)\n{\n\tPIMAGE_NT_HEADERS pnth;\n\tPIMAGE_IMPORT_DESCRIPTOR pidesc;\n\tDWORD base, rva;\n\tPSTR impmodule;\n\tPIMAGE_THUNK_DATA ptaddr;\n\tPIMAGE_THUNK_DATA ptname;\n\tPIMAGE_IMPORT_BY_NAME piname;\n\tDWORD oldprotect;\n\tvoid *org;\n\tOutTraceH(\"IATPatch: module=%x ordinal=%x name=%s dll=%s\\n\", module, ordinal, apiname, dll);\n\n\tbase = (DWORD)module;\n\torg = 0; // by default, ret = 0 => API not found\n\n\t__try{\n\t\tpnth = PIMAGE_NT_HEADERS(PBYTE(base) + PIMAGE_DOS_HEADER(base)->e_lfanew);\n\t\tif(!pnth) {\n\t\t\tOutTraceH(\"IATPatch: ERROR no PNTH at %d\\n\", __LINE__);\n\t\t\treturn 0;\n\t\t}\n\t\trva = pnth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;\n\t\tif(!rva) {\n\t\t\tOutTraceH(\"IATPatch: ERROR no RVA at %d\\n\", __LINE__);\n\t\t\treturn 0;\n\t\t}\n\t\tpidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva);\n\n\t\twhile(pidesc->FirstThunk){\n\t\t\timpmodule = (PSTR)(base + pidesc->Name);\n\t\t\t//OutTraceH(\"IATPatch: analyze impmodule=%s\\n\", impmodule);\n\t\t\tchar *fname = impmodule;\n\t\t\tfor(; *fname; fname++); for(; !*fname; fname++);\n\n\t\t\tif(!lstrcmpi(dll, impmodule)) {\n\t\t\t\tOutTraceH(\"IATPatch: dll=%s found at %x\\n\", dll, impmodule);\n\n\t\t\t\tptaddr = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->FirstThunk);\n\t\t\t\tptname = (pidesc->OriginalFirstThunk) ? (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk) : NULL;\n\n\t\t\t\twhile(ptaddr->u1.Function){\n\t\t\t\t\t// OutTraceH(\"IATPatch: address=%x ptname=%x\\n\", ptaddr->u1.AddressOfData, ptname);\n\t\t\t\t\t\n\t\t\t\t\tif (ptname){\n\t\t\t\t\t\t// examining by function name\n\t\t\t\t\t\tif(!IMAGE_SNAP_BY_ORDINAL(ptname->u1.Ordinal)){\n\t\t\t\t\t\t\tpiname = (PIMAGE_IMPORT_BY_NAME)(base + (DWORD)ptname->u1.AddressOfData);\n\t\t\t\t\t\t\tOutTraceH(\"IATPatch: BYNAME ordinal=%x address=%x name=%s hint=%x\\n\", ptaddr->u1.Ordinal, ptaddr->u1.AddressOfData, (char *)piname->Name, piname->Hint);\n\t\t\t\t\t\t\tif(!lstrcmpi(apiname, (char *)piname->Name)) break;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse{\n\t\t\t\t\t\t\t// OutTraceH(\"IATPatch: BYORD target=%x ord=%x\\n\", ordinal, IMAGE_ORDINAL32(ptname->u1.Ordinal));\n\t\t\t\t\t\t\tif(ordinal && (IMAGE_ORDINAL32(ptname->u1.Ordinal) == ordinal)) { // skip unknow ordinal 0\n\t\t\t\t\t\t\tOutTraceH(\"IATPatch: BYORD ordinal=%x addr=%x\\n\", ptname->u1.Ordinal, ptaddr->u1.Function);\n\t\t\t\t\t\t\t//OutTraceH(\"IATPatch: BYORD GetProcAddress=%x\\n\", GetProcAddress(GetModuleHandle(dll), MAKEINTRESOURCE(IMAGE_ORDINAL32(ptname->u1.Ordinal))));\t\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// OutTraceH(\"IATPatch: fname=%s\\n\", fname);\n\t\t\t\t\t\tif(!lstrcmpi(apiname, fname)) {\n\t\t\t\t\t\t\tOutTraceH(\"IATPatch: BYSCAN ordinal=%x address=%x name=%s\\n\", ptaddr->u1.Ordinal, ptaddr->u1.AddressOfData, fname);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor(; *fname; fname++); for(; !*fname; fname++);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (apiproc){\n\t\t\t\t\t\t// examining by function addr\n\t\t\t\t\t\tif(ptaddr->u1.Function == (DWORD)apiproc) break;\n\t\t\t\t\t}\n\t\t\t\t\tptaddr ++;\n\t\t\t\t\tif (ptname) ptname ++;\n\t\t\t\t}\n\n\t\t\t\tif(ptaddr->u1.Function) {\n\t\t\t\t\torg = (void *)ptaddr->u1.Function;\n\t\t\t\t\tif(org == hookproc) return 0; // already hooked\n\t\t\t\t\t\t\n\t\t\t\t\tif(!VirtualProtect(&ptaddr->u1.Function, 4, PAGE_EXECUTE_READWRITE, &oldprotect)) {\n\t\t\t\t\t\tOutTraceDW(\"IATPatch: VirtualProtect error %d at %d\\n\", GetLastError(), __LINE__);\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tptaddr->u1.Function = (DWORD)hookproc;\n\t\t\t\t\tif(!VirtualProtect(&ptaddr->u1.Function, 4, oldprotect, &oldprotect)) {\n\t\t\t\t\t\tOutTraceDW(\"IATPatch: VirtualProtect error %d at %d\\n\", GetLastError(), __LINE__);\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (!FlushInstructionCache(GetCurrentProcess(), &ptaddr->u1.Function, 4)) {\n\t\t\t\t\t\tOutTraceDW(\"IATPatch: FlushInstructionCache error %d at %d\\n\", GetLastError(), __LINE__);\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tOutTraceH(\"IATPatch hook=%s address=%x->%x\\n\", apiname, org, hookproc);\n\n\t\t\t\t\treturn org;\n\t\t\t\t}\n\t\t\t}\n\t\t\tpidesc ++;\n\t\t}\n\t\tif(!pidesc->FirstThunk) {\n\t\t\tOutTraceH(\"IATPatch: PE unreferenced function %s:%s\\n\", dll, apiname);\n\t\t\treturn 0;\n\t\t}\n\n\t}\n\t__except(EXCEPTION_EXECUTE_HANDLER)\n\t{       \n\t\tOutTraceH(\"IATPatch: EXCEPTION hook=%s:%s Hook Failed.\\n\", dll, apiname);\n\t}\n\treturn org;\n}\n\nvoid *IATPatchSequential(HMODULE module, DWORD ordinal, char *dll, void *apiproc, const char *apiname, void *hookproc)\n{\n\tPIMAGE_NT_HEADERS pnth;\n\tPIMAGE_IMPORT_DESCRIPTOR pidesc;\n\tDWORD base, rva;\n\tPSTR impmodule;\n\tPIMAGE_THUNK_DATA ptaddr;\n\tPIMAGE_THUNK_DATA ptname;\n\tPIMAGE_IMPORT_BY_NAME piname;\n\tDWORD oldprotect;\n\tvoid *org;\n\tOutTraceH(\"IATPatch: module=%x ordinal=%x name=%s dll=%s\\n\", module, ordinal, apiname, dll);\n\n\tbase = (DWORD)module;\n\torg = 0; // by default, ret = 0 => API not found\n\n\t__try{\n\t\tpnth = PIMAGE_NT_HEADERS(PBYTE(base) + PIMAGE_DOS_HEADER(base)->e_lfanew);\n\t\tif(!pnth) {\n\t\t\tOutTraceH(\"IATPatch: ERROR no PNTH at %d\\n\", __LINE__);\n\t\t\treturn 0;\n\t\t}\n\t\trva = pnth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;\n\t\tif(!rva) {\n\t\t\tOutTraceH(\"IATPatch: ERROR no RVA at %d\\n\", __LINE__);\n\t\t\treturn 0;\n\t\t}\n\t\tpidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva);\n\n\t\t// move fname pointer to first API name\n\t\tchar *fname;\n\t\twhile(pidesc->FirstThunk){\n\t\t\timpmodule = (PSTR)(base + pidesc->Name);\n\t\t\tfname  = impmodule;\n\t\t\tfor(; *fname; fname++); for(; !*fname; fname++);\n\t\t\tpidesc ++;\n\t\t}\n\t\tpidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva);\n\t\t//OutTraceB(\"IATPatch: first call=%s\\n\", fname);\n\n\t\twhile(pidesc->FirstThunk){\n\t\t\timpmodule = (PSTR)(base + pidesc->Name);\n\n\t\t\tif(!lstrcmpi(dll, impmodule)) {\n\t\t\t\tOutTraceH(\"IATPatch: dll=%s found at %x\\n\", dll, impmodule);\n\t\t\t\t//OutTraceH(\"IATPatch: first call=%s\\n\", fname);\n\n\t\t\t\tptaddr = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->FirstThunk);\n\t\t\t\tptname = (pidesc->OriginalFirstThunk) ? (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk) : NULL;\n\n\t\t\t\twhile(ptaddr->u1.Function){\n\t\t\t\t\t// OutTraceH(\"IATPatch: address=%x ptname=%x\\n\", ptaddr->u1.AddressOfData, ptname);\n\t\t\t\t\t\n\t\t\t\t\tif (ptname){\n\t\t\t\t\t\t// examining by function name\n\t\t\t\t\t\tif(!IMAGE_SNAP_BY_ORDINAL(ptname->u1.Ordinal)){\n\t\t\t\t\t\t\tpiname = (PIMAGE_IMPORT_BY_NAME)(base + (DWORD)ptname->u1.AddressOfData);\n\t\t\t\t\t\t\tOutTraceH(\"IATPatch: BYNAME ordinal=%x address=%x name=%s hint=%x\\n\", ptaddr->u1.Ordinal, ptaddr->u1.AddressOfData, (char *)piname->Name, piname->Hint);\n\t\t\t\t\t\t\tif(!lstrcmpi(apiname, (char *)piname->Name)) break;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse{\n\t\t\t\t\t\t\t// OutTraceH(\"IATPatch: BYORD target=%x ord=%x\\n\", ordinal, IMAGE_ORDINAL32(ptname->u1.Ordinal));\n\t\t\t\t\t\t\tif(ordinal && (IMAGE_ORDINAL32(ptname->u1.Ordinal) == ordinal)) { // skip unknow ordinal 0\n\t\t\t\t\t\t\tOutTraceH(\"IATPatch: BYORD ordinal=%x addr=%x\\n\", ptname->u1.Ordinal, ptaddr->u1.Function);\n\t\t\t\t\t\t\t//OutTraceH(\"IATPatch: BYORD GetProcAddress=%x\\n\", GetProcAddress(GetModuleHandle(dll), MAKEINTRESOURCE(IMAGE_ORDINAL32(ptname->u1.Ordinal))));\t\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// OutTraceH(\"IATPatch: fname=%s\\n\", fname);\n\t\t\t\t\t\tif(!lstrcmpi(apiname, fname)) {\n\t\t\t\t\t\t\tOutTraceH(\"IATPatch: BYSCAN ordinal=%x address=%x name=%s\\n\", ptaddr->u1.Ordinal, ptaddr->u1.AddressOfData, fname);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor(; *fname; fname++); for(; !*fname; fname++);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (apiproc){\n\t\t\t\t\t\t// examining by function addr\n\t\t\t\t\t\tif(ptaddr->u1.Function == (DWORD)apiproc) break;\n\t\t\t\t\t}\n\t\t\t\t\tptaddr ++;\n\t\t\t\t\tif (ptname) ptname ++;\n\t\t\t\t}\n\n\t\t\t\tif(ptaddr->u1.Function) {\n\t\t\t\t\tOutTraceDW(\"IATPatch: hooking %s\\n\", apiname);\n\t\t\t\t\torg = (void *)ptaddr->u1.Function;\n\t\t\t\t\tif(org == hookproc) return 0; // already hooked\n\t\t\t\t\t\t\n\t\t\t\t\tif(!VirtualProtect(&ptaddr->u1.Function, 4, PAGE_EXECUTE_READWRITE, &oldprotect)) {\n\t\t\t\t\t\tOutTraceDW(\"IATPatch: VirtualProtect error %d at %d\\n\", GetLastError(), __LINE__);\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tptaddr->u1.Function = (DWORD)hookproc;\n\t\t\t\t\tif(!VirtualProtect(&ptaddr->u1.Function, 4, oldprotect, &oldprotect)) {\n\t\t\t\t\t\tOutTraceDW(\"IATPatch: VirtualProtect error %d at %d\\n\", GetLastError(), __LINE__);\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tif (!FlushInstructionCache(GetCurrentProcess(), &ptaddr->u1.Function, 4)) {\n\t\t\t\t\t\tOutTraceDW(\"IATPatch: FlushInstructionCache error %d at %d\\n\", GetLastError(), __LINE__);\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t\tOutTraceH(\"IATPatch hook=%s address=%x->%x\\n\", apiname, org, hookproc);\n\n\t\t\t\t\treturn org;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse{\n\t\t\t\t//OutTraceDW(\"IATPatch: skip dll=%s first call=%s\\n\", impmodule, fname);\n\t\t\t\t// skip dll fnames ...\n\t\t\t\tptaddr = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->FirstThunk);\n\t\t\t\t//ptname = (pidesc->OriginalFirstThunk) ? (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk) : NULL;\n\t\t\t\twhile(ptaddr->u1.Function){\n\t\t\t\t\tptaddr ++;\n\t\t\t\t\tfor(; *fname; fname++); for(; !*fname; fname++);\n\t\t\t\t}\n\t\t\t}\n\t\t\tpidesc ++;\n\t\t}\n\t\tif(!pidesc->FirstThunk) {\n\t\t\tOutTraceH(\"IATPatch: PE unreferenced function %s:%s\\n\", dll, apiname);\n\t\t\treturn 0;\n\t\t}\n\n\t}\n\t__except(EXCEPTION_EXECUTE_HANDLER)\n\t{       \n\t\tOutTraceH(\"IATPatch: EXCEPTION hook=%s:%s Hook Failed.\\n\", dll, apiname);\n\t}\n\treturn org;\n}\n\n// Note: when pidesc->OriginalFirstThunk is NULL, the pidesc->FirstThunk points to an array of \n// RVA for imported function names in the PE file, but when the loader loads the program these\n// values gets replaced by the function addresses. The only way to retrieve the function names \n// after that event is to point to the dll name and get the list of the following strings sequentially\n// taking in account that the function names have variable length and are aligned to a DWORD\n// boundary, so that a practical way to retrieve the next name is this piece of code:\n// for(; *fname; fname++); for(; !*fname; fname++);\n\n// Note (2): the above condition is not always true. The original version of \"Al Unser Jr Arcade Racing\" \n// executable ALUNSER.EXE seems to have all dll names first, then followed by the names of all the dll\n// entries, so that it is still possible to retrieve the function name, but a different schema must be used.\n\n\nvoid DumpImportTableDefault(HMODULE module)\n{\n\tPIMAGE_NT_HEADERS pnth;\n\tPIMAGE_IMPORT_DESCRIPTOR pidesc;\n\tDWORD base, rva;\n\tPSTR impmodule;\n\tPIMAGE_THUNK_DATA ptaddr;\n\tPIMAGE_THUNK_DATA ptname;\n\tPIMAGE_IMPORT_BY_NAME piname;\n\n\tbase=(DWORD)module;\n\t// OutTrace(\"DumpImportTable: base=%x\\n\", base);\n\t__try{\n\t\tpnth = PIMAGE_NT_HEADERS(PBYTE(base) + PIMAGE_DOS_HEADER(base)->e_lfanew);\n\t\tif(!pnth) {\n\t\t\tOutTrace(\"DumpImportTable: ERROR no pnth at %d\\n\", __LINE__);\n\t\t\treturn;\n\t\t}\n\t\trva = pnth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;\n\t\tif(!rva) {\n\t\t\tOutTrace(\"DumpImportTable: ERROR no rva at %d\\n\", __LINE__);\n\t\t\treturn;\n\t\t}\n\t\tpidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva);\n\n\t\twhile(pidesc->FirstThunk){\n\t\t\tchar *fname;\n\t\t\timpmodule = (PSTR)(base + pidesc->Name);\n\t\t\tOutTrace(\"DumpImportTable: ENTRY timestamp=%x module=%s forwarderchain=%x\\n\", \n\t\t\t\tpidesc->TimeDateStamp, impmodule, pidesc->ForwarderChain);\n\t\t\tif(pidesc->OriginalFirstThunk) {\n\t\t\t\tptname = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tptname = 0;\n\t\t\t\tfname = impmodule;\n\t\t\t\tfor(; *fname; fname++); for(; !*fname; fname++);\n\t\t\t\tOutTrace(\"DumpImportTable: no PE OFTs - stripped module=%s\\n\", impmodule);\n\t\t\t}\n\t\t\tptaddr = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->FirstThunk);\n\t\t\twhile(ptaddr->u1.Function){\n\t\t\t\tOutTrace(\"addr=%x\", ptaddr->u1.Function); \n\t\t\t\tptaddr ++;\n\t\t\t\tif(ptname){\n\t\t\t\t\tif(!IMAGE_SNAP_BY_ORDINAL(ptname->u1.Ordinal)){\n\t\t\t\t\t\tpiname = (PIMAGE_IMPORT_BY_NAME)(base + (DWORD)ptname->u1.AddressOfData);\n\t\t\t\t\t\tOutTrace(\" hint=%x name=%s\", piname->Hint, piname->Name);\n\t\t\t\t\t\tptname ++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tOutTrace(\" name=%s\", fname);\n\t\t\t\t\tfor(; *fname; fname++); for(; !*fname; fname++);\n\t\t\t\t}\n\t\t\t\tOutTrace(\"\\n\");\n\t\t\t}\n\t\t\tOutTrace(\"*** EOT ***\\n\", ptaddr->u1.Function); \n\t\t\tpidesc ++;\n\t\t}\n\t}\n\t__except(EXCEPTION_EXECUTE_HANDLER)\n\t{       \n\t\tOutTraceDW(\"DumpImportTable: EXCEPTION\\n\");\n\t}\n\treturn;\n}\n\nvoid DumpImportTableSequential(HMODULE module)\n{\n\tPIMAGE_NT_HEADERS pnth;\n\tPIMAGE_IMPORT_DESCRIPTOR pidesc;\n\tDWORD base, rva;\n\tPSTR impmodule;\n\tPIMAGE_THUNK_DATA ptaddr;\n\tPIMAGE_THUNK_DATA ptname;\n\tPIMAGE_IMPORT_BY_NAME piname;\n\n\tbase=(DWORD)module;\n\t// OutTrace(\"DumpImportTable: base=%x\\n\", base);\n\t__try{\n\t\tpnth = PIMAGE_NT_HEADERS(PBYTE(base) + PIMAGE_DOS_HEADER(base)->e_lfanew);\n\t\tif(!pnth) {\n\t\t\tOutTrace(\"DumpImportTable: ERROR no pnth at %d\\n\", __LINE__);\n\t\t\treturn;\n\t\t}\n\t\trva = pnth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;\n\t\tif(!rva) {\n\t\t\tOutTrace(\"DumpImportTable: ERROR no rva at %d\\n\", __LINE__);\n\t\t\treturn;\n\t\t}\n\t\tpidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva);\n\t\tOutTrace(\"DumpImportTable: pidesc=%x\\n\", pidesc);\n\n\t\tchar *fname;\n\t\tPIMAGE_IMPORT_DESCRIPTOR savepidesc = pidesc;\n\t\twhile(pidesc->FirstThunk){\n\t\t\timpmodule = (PSTR)(base + pidesc->Name);\n\t\t\tfname  = impmodule;\n\t\t\tfor(; *fname; fname++); for(; !*fname; fname++);\n\t\t\tpidesc ++;\n\t\t}\n\t\tpidesc = savepidesc;\n\t\tOutTrace(\"DumpImportTable: no PE OFTs - first call=%s\\n\", fname);\n\n\t\twhile(pidesc->FirstThunk){\n\t\t\t//char *fname;\n\t\t\timpmodule = (PSTR)(base + pidesc->Name);\n\t\t\tOutTrace(\"DumpImportTable: ENTRY timestamp=%x module=%s forwarderchain=%x\\n\", \n\t\t\t\tpidesc->TimeDateStamp, impmodule, pidesc->ForwarderChain);\n\t\t\tif(pidesc->OriginalFirstThunk) {\n\t\t\t\tptname = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->OriginalFirstThunk);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tptname = 0;\n\t\t\t\t//fname = impmodule;\n\t\t\t\t//for(; *fname; fname++); for(; !*fname; fname++);\n\t\t\t\tOutTrace(\"DumpImportTable: no PE OFTs - stripped module=%s\\n\", impmodule);\n\t\t\t}\n\t\t\tptaddr = (PIMAGE_THUNK_DATA)(base + (DWORD)pidesc->FirstThunk);\n\t\t\twhile(ptaddr->u1.Function){\n\t\t\t\tOutTrace(\"addr=%x\", ptaddr->u1.Function); \n\t\t\t\tptaddr ++;\n\t\t\t\tif(ptname){\n\t\t\t\t\tif(!IMAGE_SNAP_BY_ORDINAL(ptname->u1.Ordinal)){\n\t\t\t\t\t\tpiname = (PIMAGE_IMPORT_BY_NAME)(base + (DWORD)ptname->u1.AddressOfData);\n\t\t\t\t\t\tOutTrace(\" hint=%x name=%s\", piname->Hint, piname->Name);\n\t\t\t\t\t\tptname ++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tOutTrace(\" name=%s\", fname);\n\t\t\t\t\tfor(; *fname; fname++); for(; !*fname; fname++);\n\t\t\t\t}\n\t\t\t\tOutTrace(\"\\n\");\n\t\t\t}\n\t\t\tOutTrace(\"*** EOT ***\\n\", ptaddr->u1.Function); \n\t\t\tpidesc ++;\n\t\t}\n\t}\n\t__except(EXCEPTION_EXECUTE_HANDLER)\n\t{       \n\t\tOutTraceDW(\"DumpImportTable: EXCEPTION\\n\");\n\t}\n\treturn;\n}\n\nstatic char* stristr(char* str1, const char* str2)\n{\n    char* p1 = str1 ;\n    const char* p2 = str2 ;\n    char* r = *p2 == 0 ? str1 : 0 ;\n\n    while(*p1 != 0 && *p2 != 0) {\n        if(tolower(*p1) == tolower(*p2)){\n            if(r == 0) r = p1;\n            p2++ ;\n        }\n        else {\n            p2 = str2;\n            if(tolower(*p1) == tolower(*p2)){\n                r = p1;\n                p2++ ;\n            }\n            else{\n                r = 0;\n            }\n        }\n        p1++ ;\n    }\n    return *p2 == 0 ? r : 0 ;\n}\n\nBOOL IsIATSequential(HMODULE module)\n{\n\tPIMAGE_NT_HEADERS pnth;\n\tPIMAGE_IMPORT_DESCRIPTOR pidesc;\n\tDWORD base, rva;\n\n\tbase=(DWORD)module;\n\t__try{\n\t\tpnth = PIMAGE_NT_HEADERS(PBYTE(base) + PIMAGE_DOS_HEADER(base)->e_lfanew);\n\t\tif(!pnth) {\n\t\t\tOutTrace(\"IsIATSequential: ERROR no pnth at %d\\n\", __LINE__);\n\t\t\treturn FALSE;\n\t\t}\n\t\trva = pnth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;\n\t\tif(!rva) {\n\t\t\tOutTrace(\"IsIATSequential: ERROR no rva at %d\\n\", __LINE__);\n\t\t\treturn FALSE;\n\t\t}\n\t\tpidesc = (PIMAGE_IMPORT_DESCRIPTOR)(base + rva);\n\t\t//OutTrace(\"IsIATSequential: pidesc=%x\\n\", pidesc);\n\n\t\tchar *fname = (PSTR)(base + pidesc->Name);\n\t\t// first string should be a DLL in both cases\n\t\tif(!stristr(fname, \".DLL\")) {\n\t\t\tOutTrace(\"IsIATSequential: ERROR no .DLL at %d\\n\", __LINE__);\n\t\t\treturn FALSE;\n\t\t}\n\t\t// skip first string\n\t\tfor(; *fname; fname++); for(; !*fname; fname++);\n\t\t// if second string is another DLL it is sequential, otherwise not.\n\t\t//OutTraceB(\"IsIATSequential: second entry=%s\\n\", fname);\n\t\treturn (BOOL)stristr(fname, \".DLL\");\n\t}\n\t__except(EXCEPTION_EXECUTE_HANDLER)\n\t{       \n\t\tOutTraceDW(\"IsIATSequential: EXCEPTION\\n\");\n\t}\n\treturn FALSE;\n}\n"
  },
  {
    "path": "dll/imagehlp.cpp",
    "content": "#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n\n#include \"stdio.h\"\n#include \"Dbghelp.h\"\n\ntypedef PIMAGE_DEBUG_INFORMATION (WINAPI *MapDebugInformation_Type)(HANDLE, PCSTR, PCSTR, ULONG);\ntypedef BOOL (WINAPI *UnmapDebugInformation_Type)(PIMAGE_DEBUG_INFORMATION);\ntypedef BOOL (WINAPI *SymInitialize_Type)(HANDLE, PCTSTR, BOOL);\ntypedef BOOL (WINAPI *SymCleanup_Type)(HANDLE);\ntypedef BOOL (WINAPI *StackWalk_Type)(DWORD, HANDLE, HANDLE, LPSTACKFRAME, LPVOID, PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE);\ntypedef LPVOID (WINAPI *SymFunctionTableAccess_Type)(HANDLE, DWORD);\ntypedef LPVOID (WINAPI *SymGetModuleBase_Type)(HANDLE, DWORD);\ntypedef BOOL (WINAPI *SymGetSymFromAddr_Type)(HANDLE, DWORD, LPDWORD, PIMAGEHLP_SYMBOL);\n\nPIMAGE_DEBUG_INFORMATION WINAPI extMapDebugInformation(HANDLE, PCSTR, PCSTR, ULONG);\nBOOL WINAPI extUnmapDebugInformation(PIMAGE_DEBUG_INFORMATION);\nBOOL WINAPI extSymInitialize(HANDLE, PCTSTR, BOOL);\nBOOL WINAPI extSymCleanup(HANDLE);\nBOOL WINAPI extStackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, LPVOID, PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE);\nLPVOID WINAPI extSymFunctionTableAccess(HANDLE, DWORD);\nLPVOID WINAPI extSymGetModuleBase(HANDLE, DWORD);\nBOOL WINAPI extSymGetSymFromAddr(HANDLE, DWORD, LPDWORD, PIMAGEHLP_SYMBOL);\n\nMapDebugInformation_Type pMapDebugInformation = NULL;\nUnmapDebugInformation_Type pUnmapDebugInformation = NULL;\nSymInitialize_Type pSymInitialize;\nSymCleanup_Type pSymCleanup;\nStackWalk_Type pStackWalk;\nSymFunctionTableAccess_Type pSymFunctionTableAccess;\nSymGetModuleBase_Type pSymGetModuleBase;\nSymGetSymFromAddr_Type pSymGetSymFromAddr;\n\nstatic HookEntryEx_Type Hooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"MapDebugInformation\", (FARPROC)NULL, (FARPROC *)&pMapDebugInformation, (FARPROC)extMapDebugInformation},\n\t{HOOK_IAT_CANDIDATE, 0, \"UnmapDebugInformation\", (FARPROC)NULL, (FARPROC *)&pUnmapDebugInformation, (FARPROC)extUnmapDebugInformation},\n\t{HOOK_IAT_CANDIDATE, 0, \"SymInitialize\", (FARPROC)NULL, (FARPROC *)&pSymInitialize, (FARPROC)extSymInitialize},\n\t{HOOK_IAT_CANDIDATE, 0, \"SymCleanup\", (FARPROC)NULL, (FARPROC *)&pSymCleanup, (FARPROC)extSymCleanup},\n\t{HOOK_IAT_CANDIDATE, 0, \"StackWalk\", (FARPROC)NULL, (FARPROC *)&pStackWalk, (FARPROC)extStackWalk},\n\t{HOOK_IAT_CANDIDATE, 0, \"SymFunctionTableAccess\", (FARPROC)NULL, (FARPROC *)&pSymFunctionTableAccess, (FARPROC)extSymFunctionTableAccess},\n\t{HOOK_IAT_CANDIDATE, 0, \"SymGetModuleBase\", (FARPROC)NULL, (FARPROC *)&pSymGetModuleBase, (FARPROC)extSymGetModuleBase},\n\t{HOOK_IAT_CANDIDATE, 0, \"SymGetSymFromAddr\", (FARPROC)NULL, (FARPROC *)&pSymGetSymFromAddr, (FARPROC)extSymGetSymFromAddr},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n}; \n\nstatic char *libname = \"IMAGEHLP.DLL\";\n\nvoid HookImagehlpInit()\n{\n\tHookLibInitEx(Hooks);\n}\n\nvoid HookImagehlp(HMODULE module)\n{\n\tif(dxw.dwFlags5 & NOIMAGEHLP) HookLibraryEx(module, Hooks, libname);\n}\n\nFARPROC Remap_Imagehlp_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\n\tif(dxw.dwFlags5 & NOIMAGEHLP) {\n\t\tif(addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\t}\n\n\treturn NULL;\n}\n\n// =================== rerouted calls ==========================\n\nIMAGE_DEBUG_INFORMATION DummyDebugInfo;\n\nPIMAGE_DEBUG_INFORMATION WINAPI extMapDebugInformation(HANDLE FileHandle, PCSTR FileName, PCSTR SymbolPath, ULONG ImageBase)\n{\n\tOutTrace(\"MapDebugInformation: FileHandle=%x FileName=%s SymbolPath=%s ImageBase=%x\\n\", FileHandle, FileName, SymbolPath, ImageBase);\n\tmemset(&DummyDebugInfo, 0, sizeof(IMAGE_DEBUG_INFORMATION));\n\treturn &DummyDebugInfo;\n}\n\nBOOL WINAPI extUnmapDebugInformation(PIMAGE_DEBUG_INFORMATION DebugInfo)\n{\n\tOutTrace(\"UnmapDebugInformation: DebugInfo=%x\\n\", DebugInfo);\n\treturn TRUE;\n}\n\nBOOL WINAPI extSymInitialize(HANDLE hProcess, PCTSTR UserSearchPath, BOOL fInvadeProcess)\n{\n\tOutTrace(\"SymInitialize: hprocess=%x usrsearchpath=\\\"%s\\\" invadeproc=%x\\n\", hProcess, UserSearchPath, fInvadeProcess);\n\treturn TRUE;\n}\n\nBOOL WINAPI extSymCleanup(HANDLE hProcess)\n{\n\tOutTrace(\"SymCleanup: hprocess=%x\\n\", hProcess);\n\treturn TRUE;\n}\n\nBOOL WINAPI extStackWalk(DWORD MachineType, HANDLE hProcess, HANDLE hThread, LPSTACKFRAME StackFrame, LPVOID ContextRecord, \n\t\t\t\t\t\t PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine, PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine,\n\t\t\t\t\t\t PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine, PTRANSLATE_ADDRESS_ROUTINE TranslateAddress)\n{\n\tOutTrace(\"SymCleanup: hprocess=%x\\n\", hProcess);\n\t// too complex, pretend we have an error\n\treturn FALSE;\n}\n\nLPVOID WINAPI extSymFunctionTableAccess(HANDLE hProcess, DWORD AddrBase)\n{\n\tOutTrace(\"SymFunctionTableAccess: hprocess=%x addrbase=%x\\n\", hProcess, AddrBase);\n\t// too dangerous, pretend we have an error\n\treturn NULL;\n}\n\t\nLPVOID WINAPI extSymGetModuleBase(HANDLE hProcess, DWORD AddrBase)\n{\n\tOutTrace(\"SymGetModuleBase: hprocess=%x addrbase=%x\\n\", hProcess, AddrBase);\n\t// too dangerous, pretend we have an error\n\treturn NULL;\n}\n\nBOOL WINAPI extSymGetSymFromAddr(HANDLE hProcess, DWORD Address, LPDWORD Displacement, PIMAGEHLP_SYMBOL Symbol)\n{\n\tOutTrace(\"SymGetSymFromAddr: hprocess=%x address=%x\\n\", hProcess, Address);\n\t// too dangerous, pretend we have an error\n\treturn NULL;\n}\n"
  },
  {
    "path": "dll/imelib.cpp",
    "content": "#define _WIN32_WINNT 0x0600\n#define WIN32_LEAN_AND_MEAN\n#include <windows.h>\n#include <stdio.h>\n#include <malloc.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"dxhook.h\"\n#include \"syslibs.h\"\n#include \"dxhelper.h\"\n\nstatic HookEntryEx_Type Hooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"ImmNotifyIME\", NULL, (FARPROC *)&pImmNotifyIME, (FARPROC)extImmNotifyIME},\n\t{HOOK_IAT_CANDIDATE, 0, \"ImmCreateContext\", NULL, (FARPROC *)&pImmCreateContext, (FARPROC)extImmCreateContext},\n\t{HOOK_IAT_CANDIDATE, 0, \"ImmDestroyContext\", NULL, (FARPROC *)&pImmDestroyContext, (FARPROC)extImmDestroyContext},\n\t{HOOK_IAT_CANDIDATE, 0, \"ImmSetOpenStatus\", NULL, (FARPROC *)&pImmSetOpenStatus, (FARPROC)extImmSetOpenStatus},\n\t{HOOK_IAT_CANDIDATE, 0, \"ImmAssociateContext\", NULL, (FARPROC *)&pImmAssociateContext, (FARPROC)extImmAssociateContext},\n\t{HOOK_IAT_CANDIDATE, 0, \"ImmSetCompositionWindow\", NULL, (FARPROC *)&pImmSetCompositionWindow, (FARPROC)extImmSetCompositionWindow},\n\t{HOOK_IAT_CANDIDATE, 0, \"ImmSetCompositionStringA\", NULL, (FARPROC *)&pImmSetCompositionString, (FARPROC)extImmSetCompositionString},\n\t{HOOK_IAT_CANDIDATE, 0, \"ImmGetOpenStatus\", NULL, (FARPROC *)&pImmGetOpenStatus, (FARPROC)extImmGetOpenStatus},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nvoid HookImeLib(HMODULE module)\n{\n\tif(!(dxw.dwFlags2 & SUPPRESSIME)) return; \n\tHookLibraryEx(module, Hooks, \"IMM32.dll\");\n}\n\nFARPROC Remap_ImeLib_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tif(!(dxw.dwFlags2 & SUPPRESSIME)) return NULL; \n\tif (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\treturn NULL;\n}\n\nBOOL WINAPI extImmNotifyIME(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue)\n{\n\tOutTraceDW(\"ImmNotifyIME: hIMC=%x dwAction=%x dwIndex=%x dwValue=%x\\n\", hIMC, dwAction, dwIndex, dwValue);\n\treturn(*pImmNotifyIME)(hIMC, dwAction, dwIndex, dwValue);\n}\n\nHIMC WINAPI extImmCreateContext(void)\n{\n\tOutTraceDW(\"ImmCreateContext\\n\");\n\treturn(*pImmCreateContext)();\n}\n\nBOOL WINAPI extImmDestroyContext(HIMC hIMC)\n{\n\tOutTraceDW(\"ImmDestroyContext: hIMC=%x\\n\", hIMC);\n\treturn(*pImmDestroyContext)(hIMC);\n}\n\nBOOL WINAPI extImmSetOpenStatus(HIMC hIMC, BOOL fOpen)\n{\n\tOutTraceDW(\"ImmSetOpenStatus: hIMC=%x fOpen=%x\\n\", hIMC, fOpen);\n\treturn(*pImmSetOpenStatus)(hIMC, fOpen);\n}\n\nHIMC WINAPI extImmAssociateContext(HWND hwnd, HIMC hIMC)\n{\n\tOutTraceDW(\"ImmAssociateContext: hwnd=%x hIMC=%x\\n\", hwnd, hIMC);\n\t//return NULL;\n\treturn(*pImmAssociateContext)(hwnd, hIMC);\n}\n\nBOOL WINAPI extImmSetCompositionWindow(HIMC hIMC, LPCOMPOSITIONFORM lpCompForm)\n{\n\tOutTraceDW(\"ImmSetCompositionWindow: hIMC=%x lpCompForm=%x\\n\", hIMC, lpCompForm);\n\treturn(*pImmSetCompositionWindow)(hIMC, lpCompForm);\n}\n\nBOOL WINAPI extImmSetCompositionString(HIMC hIMC, DWORD dwIndex, LPVOID lpComp, DWORD dwCompLen, LPVOID lpRead, DWORD dwReadLen)\n{\n\tOutTraceDW(\"ImmSetCompositionString: hIMC=%x dwIndex=%x lpComp=%x dwCompLen=%x dwRead=%x dwReadLen=%x\\n\", hIMC, dwIndex, lpComp, dwCompLen, lpRead, dwReadLen);\n\treturn (*pImmSetCompositionString)(hIMC, dwIndex, lpComp, dwCompLen, lpRead, dwReadLen);\n}\n\nBOOL WINAPI extImmGetOpenStatus(HIMC hIMC)\n{\n\tOutTraceDW(\"ImmGetOpenStatus: hIMC=%x\\n\", hIMC);\n\treturn(*pImmGetOpenStatus)(hIMC);\n}\n"
  },
  {
    "path": "dll/kernel32.cpp",
    "content": "#define  _CRT_SECURE_NO_WARNINGS\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n#include \"hddraw.h\"\n#include \"stdio.h\"\n\n//#undef IsTraceDW\n//#define IsTraceDW TRUE\n//#define LOCKINJECTIONTHREADS\n#define TRYFATNAMES TRUE\n\nextern HRESULT WINAPI extDirectDrawEnumerateA(LPDDENUMCALLBACK, LPVOID);\nextern HRESULT WINAPI extDirectDrawEnumerateExA(LPDDENUMCALLBACKEX, LPVOID, DWORD);\n\nBOOL WINAPI extCheckRemoteDebuggerPresent(HANDLE, PBOOL);\nLPVOID WINAPI extVirtualAlloc(LPVOID, SIZE_T, DWORD, DWORD);\nUINT WINAPI extWinExec(LPCSTR, UINT);\nBOOL WINAPI extSetPriorityClass(HANDLE, DWORD);\nBOOL WINAPI extGlobalUnlock(HGLOBAL);\nLPVOID WINAPI extHeapAlloc(HANDLE, DWORD, SIZE_T);\nLPVOID WINAPI extHeapReAlloc(HANDLE, DWORD, LPVOID, SIZE_T);\nHANDLE WINAPI extHeapCreate(DWORD, SIZE_T, SIZE_T);\nBOOL WINAPI extHeapFree(HANDLE, DWORD, LPVOID);\nBOOL WINAPI extHeapValidate(HANDLE, DWORD, LPVOID);\nSIZE_T WINAPI extHeapCompact(HANDLE, DWORD);\nHANDLE WINAPI extGetProcessHeap(void);\nBOOL WINAPI extHeapDestroy(HANDLE);\n\ntypedef LPVOID (WINAPI *VirtualAlloc_Type)(LPVOID, SIZE_T, DWORD, DWORD);\ntypedef BOOL (WINAPI *CreateProcessA_Type)(LPCTSTR, LPTSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, \n\t\t\t\t\t\t\t\t\t\t   BOOL, DWORD, LPVOID, LPCTSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION);\ntypedef BOOL (WINAPI *SetPriorityClass_Type)(HANDLE, DWORD);\ntypedef UINT (WINAPI *WinExec_Type)(LPCSTR, UINT);\ntypedef BOOL (WINAPI *GlobalUnlock_Type)(HGLOBAL);\ntypedef LPVOID (WINAPI *HeapAlloc_Type)(HANDLE, DWORD, SIZE_T);\ntypedef LPVOID (WINAPI *HeapReAlloc_Type)(HANDLE, DWORD, LPVOID, SIZE_T);\ntypedef HANDLE (WINAPI *HeapCreate_Type)(DWORD, SIZE_T, SIZE_T);\ntypedef BOOL (WINAPI *HeapFree_Type)(HANDLE, DWORD, LPVOID);\ntypedef SIZE_T (WINAPI *HeapCompact_Type)(HANDLE, DWORD);\ntypedef HANDLE (WINAPI *GetProcessHeap_Type)(void);\ntypedef BOOL (WINAPI *HeapDestroy_Type)(HANDLE);\n\nCreateProcessA_Type pCreateProcessA = NULL;\nVirtualAlloc_Type pVirtualAlloc = NULL;\nWinExec_Type pWinExec = NULL;\nSetPriorityClass_Type pSetPriorityClass = NULL;\nGlobalUnlock_Type pGlobalUnlock = NULL;\nHeapAlloc_Type pHeapAlloc;\nHeapReAlloc_Type pHeapReAlloc;\nHeapCreate_Type pHeapCreate;\nHeapFree_Type pHeapFree, pHeapValidate;\nHeapCompact_Type pHeapCompact;\nGetProcessHeap_Type pGetProcessHeap;\nHeapDestroy_Type pHeapDestroy;\n\n// v2.02.96: the GetSystemInfo API is NOT hot patchable on Win7. This can cause problems because it can't be hooked by simply\n// enabling hot patch. A solution is making all LoadLibrary* calls hot patchable, so that when loading the module, the call\n// can be hooked by the IAT lookup. This fixes a problem after movie playing in Wind Fantasy SP.\n\nstatic HookEntryEx_Type Hooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"IsDebuggerPresent\", (FARPROC)NULL, (FARPROC *)NULL, (FARPROC)extIsDebuggerPresent},\n\t{HOOK_IAT_CANDIDATE, 0, \"CheckRemoteDebuggerPresent\", (FARPROC)NULL, (FARPROC *)NULL, (FARPROC)extCheckRemoteDebuggerPresent},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetProcAddress\", (FARPROC)GetProcAddress, (FARPROC *)&pGetProcAddress, (FARPROC)extGetProcAddress},\n\t{HOOK_HOT_CANDIDATE, 0, \"LoadLibraryA\", (FARPROC)LoadLibraryA, (FARPROC *)&pLoadLibraryA, (FARPROC)extLoadLibraryA},\n\t{HOOK_HOT_CANDIDATE, 0, \"LoadLibraryExA\", (FARPROC)LoadLibraryExA, (FARPROC *)&pLoadLibraryExA, (FARPROC)extLoadLibraryExA},\n\t{HOOK_HOT_CANDIDATE, 0, \"LoadLibraryW\", (FARPROC)LoadLibraryW, (FARPROC *)&pLoadLibraryW, (FARPROC)extLoadLibraryW},\n\t{HOOK_HOT_CANDIDATE, 0, \"LoadLibraryExW\", (FARPROC)LoadLibraryExW, (FARPROC *)&pLoadLibraryExW, (FARPROC)extLoadLibraryExW},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetDriveTypeA\", (FARPROC)NULL, (FARPROC *)&pGetDriveType, (FARPROC)extGetDriveType},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetLogicalDrives\", (FARPROC)NULL, (FARPROC *)&pGetLogicalDrives, (FARPROC)extGetLogicalDrives},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetTempFileNameA\", (FARPROC)GetTempFileNameA, (FARPROC *)&pGetTempFileName, (FARPROC)extGetTempFileName},\n\t{HOOK_IAT_CANDIDATE, 0, \"CreateProcessA\", (FARPROC)NULL, (FARPROC *)&pCreateProcessA, (FARPROC)extCreateProcessA},\n\t//{HOOK_IAT_CANDIDATE, 0, \"WinExec\", (FARPROC)NULL, (FARPROC *)&pWinExec, (FARPROC)extWinExec},\n\t{HOOK_HOT_CANDIDATE, 0, \"SetPriorityClass\", (FARPROC)SetPriorityClass, (FARPROC *)&pSetPriorityClass, (FARPROC)extSetPriorityClass},\n\t{HOOK_HOT_CANDIDATE, 0, \"GlobalUnlock\", (FARPROC)GlobalUnlock, (FARPROC *)&pGlobalUnlock, (FARPROC)extGlobalUnlock},\n\t{HOOK_HOT_CANDIDATE, 0, \"FreeLibrary\", (FARPROC)FreeLibrary, (FARPROC *)&pFreeLibrary, (FARPROC)extFreeLibrary},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type HeapHooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"HeapCreate\", (FARPROC)HeapCreate, (FARPROC *)&pHeapCreate, (FARPROC)extHeapCreate},\n\t{HOOK_IAT_CANDIDATE, 0, \"HeapAlloc\", (FARPROC)HeapAlloc, (FARPROC *)&pHeapAlloc, (FARPROC)extHeapAlloc},\n\t{HOOK_IAT_CANDIDATE, 0, \"HeapReAlloc\", (FARPROC)HeapReAlloc, (FARPROC *)&pHeapReAlloc, (FARPROC)extHeapReAlloc},\n\t{HOOK_IAT_CANDIDATE, 0, \"HeapFree\", (FARPROC)HeapFree, (FARPROC *)&pHeapFree, (FARPROC)extHeapFree},\n\t{HOOK_IAT_CANDIDATE, 0, \"HeapValidate\", (FARPROC)HeapFree, (FARPROC *)&pHeapFree, (FARPROC)extHeapFree},\n\t{HOOK_IAT_CANDIDATE, 0, \"HeapCompact\", (FARPROC)HeapCompact, (FARPROC *)&pHeapCompact, (FARPROC)extHeapCompact},\n\t{HOOK_IAT_CANDIDATE, 0, \"HeapDestroy\", (FARPROC)HeapDestroy, (FARPROC *)&pHeapDestroy, (FARPROC)extHeapDestroy},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetProcessHeap\", (FARPROC)GetProcessHeap, (FARPROC *)&pGetProcessHeap, (FARPROC)extGetProcessHeap},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type FixAllocHooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"VirtualAlloc\", (FARPROC)VirtualAlloc, (FARPROC *)&pVirtualAlloc, (FARPROC)extVirtualAlloc},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type FixIOHooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"ReadFile\", (FARPROC)NULL, (FARPROC *)&pReadFile, (FARPROC)extReadFile},\n\t{HOOK_IAT_CANDIDATE, 0, \"CreateFileA\", (FARPROC)NULL, (FARPROC *)&pCreateFile, (FARPROC)extCreateFile},\n\t{HOOK_IAT_CANDIDATE, 0, \"SetFilePointer\", (FARPROC)NULL, (FARPROC *)&pSetFilePointer, (FARPROC)extSetFilePointer},\n\t{HOOK_IAT_CANDIDATE, 0, \"CloseHandle\", (FARPROC)NULL, (FARPROC *)&pCloseHandle, (FARPROC)extCloseHandle},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type LimitHooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"GetDiskFreeSpaceA\", (FARPROC)GetDiskFreeSpaceA, (FARPROC *)&pGetDiskFreeSpaceA, (FARPROC)extGetDiskFreeSpaceA},\n\t{HOOK_HOT_CANDIDATE, 0, \"GlobalMemoryStatus\", (FARPROC)GlobalMemoryStatus, (FARPROC *)&pGlobalMemoryStatus, (FARPROC)extGlobalMemoryStatus},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type TimeHooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"GetTickCount\", (FARPROC)GetTickCount, (FARPROC *)&pGetTickCount, (FARPROC)extGetTickCount},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetLocalTime\", (FARPROC)GetLocalTime, (FARPROC *)&pGetLocalTime, (FARPROC)extGetLocalTime},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetSystemTime\", (FARPROC)GetSystemTime, (FARPROC *)&pGetSystemTime, (FARPROC)extGetSystemTime},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetSystemTimeAsFileTime\", (FARPROC)GetSystemTimeAsFileTime, (FARPROC *)&pGetSystemTimeAsFileTime, (FARPROC)extGetSystemTimeAsFileTime},\n\t{HOOK_HOT_CANDIDATE, 0, \"Sleep\", (FARPROC)Sleep, (FARPROC *)&pSleep, (FARPROC)extSleep},\n\t{HOOK_HOT_CANDIDATE, 0, \"SleepEx\", (FARPROC)SleepEx, (FARPROC *)&pSleepEx, (FARPROC)extSleepEx},\n\t{HOOK_HOT_CANDIDATE, 0, \"QueryPerformanceCounter\", (FARPROC)QueryPerformanceCounter, (FARPROC *)&pQueryPerformanceCounter, (FARPROC)extQueryPerformanceCounter},\n\t{HOOK_HOT_CANDIDATE, 0, \"QueryPerformanceFrequency\", (FARPROC)QueryPerformanceFrequency, (FARPROC *)&pQueryPerformanceFrequency, (FARPROC)extQueryPerformanceFrequency},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type VersionHooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"GetVersion\", (FARPROC)GetVersion, (FARPROC *)&pGetVersion, (FARPROC)extGetVersion},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetVersionExA\", (FARPROC)GetVersionExA, (FARPROC *)&pGetVersionExA, (FARPROC)extGetVersionExA},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetVersionExW\", (FARPROC)GetVersionExW, (FARPROC *)&pGetVersionExW, (FARPROC)extGetVersionExW},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic char *libname = \"kernel32.dll\";\n\nvoid HookKernel32(HMODULE module)\n{\n\tHookLibraryEx(module, Hooks, libname);\n\tif(dxw.dwFlags3 & BUFFEREDIOFIX) HookLibraryEx(module, FixIOHooks, libname);\n\tif(dxw.dwFlags2 & LIMITRESOURCES) HookLibraryEx(module, LimitHooks, libname);\n\tif(dxw.dwFlags2 & TIMESTRETCH) HookLibraryEx(module, TimeHooks, libname);\n\tif(dxw.dwFlags2 & FAKEVERSION) HookLibraryEx(module, VersionHooks, libname);\n\tif(dxw.dwFlags6 & LEGACYALLOC) HookLibraryEx(module, FixAllocHooks, libname);\n\tif(dxw.dwFlags8 & VIRTUALHEAP) HookLibraryEx(module, HeapHooks, libname);\n}\n\nvoid HookKernel32Init()\n{\n\tHookLibInitEx(Hooks);\n\tHookLibInitEx(FixIOHooks);\n\tHookLibInitEx(LimitHooks);\n\tHookLibInitEx(TimeHooks);\n\tHookLibInitEx(VersionHooks);\n\tHookLibInitEx(FixAllocHooks);\n\tHookLibInitEx(HeapHooks);\n}\n\nFARPROC Remap_kernel32_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\n\tif (dxw.dwFlags4 & NOPERFCOUNTER){\n\t\tif( !strcmp(proc, \"QueryPerformanceCounter\") ||\n\t\t\t!strcmp(proc, \"QueryPerformanceFrequency\")){\n\t\t\t\tOutTraceDW(\"GetProcAddress: HIDING proc=%s\\n\", proc);\n\t\t\treturn NULL;\n\t\t}\n\t}\n\t\t\t\n\tif (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\n\tif(dxw.dwFlags3 & BUFFEREDIOFIX)\n\t\tif (addr=RemapLibraryEx(proc, hModule, FixIOHooks)) return addr;\n\n\tif(dxw.dwFlags2 & LIMITRESOURCES)\n\t\tif (addr=RemapLibraryEx(proc, hModule, LimitHooks)) return addr;\n\n\tif(dxw.dwFlags2 & TIMESTRETCH)\n\t\tif (addr=RemapLibraryEx(proc, hModule, TimeHooks)) return addr;\n\n\tif(dxw.dwFlags2 & FAKEVERSION)\n\t\tif (addr=RemapLibraryEx(proc, hModule, VersionHooks)) return addr;\n\n\tif(dxw.dwFlags6 & LEGACYALLOC)\n\t\tif (addr=RemapLibraryEx(proc, hModule, FixAllocHooks)) return addr;\n\n\tif(dxw.dwFlags8 & VIRTUALHEAP)\n\t\tif (addr=RemapLibraryEx(proc, hModule, HeapHooks)) return addr;\n\n\treturn NULL;\n}\n\nextern DirectDrawEnumerateA_Type pDirectDrawEnumerateA;\nextern DirectDrawEnumerateExA_Type pDirectDrawEnumerateExA;\nextern void HookModule(HMODULE, int);\n\nint WINAPI extIsDebuggerPresent(void)\n{\n\tOutTraceDW(\"extIsDebuggerPresent: return FALSE\\n\");\n\treturn FALSE;\n}\n\nBOOL WINAPI extGetDiskFreeSpaceA(LPCSTR lpRootPathName, LPDWORD lpSectorsPerCluster, LPDWORD lpBytesPerSector, LPDWORD lpNumberOfFreeClusters, LPDWORD lpTotalNumberOfClusters)\n{\n\tBOOL ret;\n\tOutTraceDW(\"GetDiskFreeSpace: RootPathName=\\\"%s\\\"\\n\", lpRootPathName);\n\tret=(*pGetDiskFreeSpaceA)(lpRootPathName, lpSectorsPerCluster, lpBytesPerSector, lpNumberOfFreeClusters, lpTotalNumberOfClusters);\n\tif(ret) {\n\t\tOutTraceDW(\"GetDiskFreeSpace: SectXCluster=%d BytesXSect=%d FreeClusters=%d TotalClusters=%d\\n\", \n\t\t\t*lpSectorsPerCluster, *lpBytesPerSector, *lpNumberOfFreeClusters, *lpTotalNumberOfClusters);\n\t}\n\telse {\n\t\tOutTraceE(\"GetDiskFreeSpace: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t}\n\t// try to define 100MB free space in a 120MB hard disk\n\tDWORD BytesXCluster = *lpBytesPerSector * *lpSectorsPerCluster;\n\tif(BytesXCluster){\n\t\t*lpNumberOfFreeClusters = 100000000 / BytesXCluster;\n\t\t*lpTotalNumberOfClusters = 120000000 / BytesXCluster;\n\t\tOutTraceDW(\"GetDiskFreeSpace: FIXED SectXCluster=%d BytesXSect=%d FreeClusters=%d TotalClusters=%d\\n\", \n\t\t\t*lpSectorsPerCluster, *lpBytesPerSector, *lpNumberOfFreeClusters, *lpTotalNumberOfClusters);\n\t}\n\treturn ret;\n}\n\n/* -------------------------------------------------------------------------------\n\nGlobalMemoryStatus: MSDN documents that on modern PCs that have more than DWORD\nmemory values the GlobalMemoryStatus sets the fields to -1 (0xFFFFFFFF) and you \nshould use GlobalMemoryStatusEx instead. \nBut in some cases the value is less that DWORD max, but greater that DWORD>>1, that\nis the calling application may get a big value and see it as a signed negative\nvalue, as it happened to Nocturne on my PC. That's why it's not adviseable to write: \nif(lpBuffer->dwTotalPhys== -1) ...\nbut this way:\nif ((int)lpBuffer->dwTotalPhys < 0) ...\nand also don't set \nBIGENOUGH 0x80000000 // possibly negative!!!\nbut:\nBIGENOUGH 0x60000000 // surely positive !!!\n\nv2.03.08: the \"Jeff Gordon XS Racing demo\" adds the dwAvailPhys to the dwAvailPageFile\nvalue, so that the sum is negative. To avoid this, all available memory values are\ndivided by 2 (HALFBIG macro).\n/* ---------------------------------------------------------------------------- */\n\n#define BIGENOUGH 0x60000000\n#define HALFBIG (BIGENOUGH >> 1)\n#define TOOBIG\t  0xFFFFFFFF\n\nvoid WINAPI extGlobalMemoryStatus(LPMEMORYSTATUS lpBuffer)\n{\n\t(*pGlobalMemoryStatus)(lpBuffer);\n\tOutTraceDW(\"GlobalMemoryStatus: Length=%d MemoryLoad=%d%c \"\n\t\t\"TotalPhys=%x AvailPhys=%x TotalPageFile=%x AvailPageFile=%x TotalVirtual=%x AvailVirtual=%x\\n\",\n\t\tlpBuffer->dwLength, lpBuffer->dwMemoryLoad, '%', lpBuffer->dwTotalPhys, lpBuffer->dwAvailPhys,\n\t\tlpBuffer->dwTotalPageFile, lpBuffer->dwAvailPageFile, lpBuffer->dwTotalVirtual, lpBuffer->dwAvailVirtual);\n\tif(lpBuffer->dwLength==sizeof(MEMORYSTATUS)){\n\t\tMEMORYSTATUS PrevMemoryStatus;\n\t\tmemcpy(&PrevMemoryStatus, lpBuffer, sizeof(MEMORYSTATUS));\n\t\tif (((int)lpBuffer->dwTotalPhys < 0) || ((int)lpBuffer->dwTotalPhys > BIGENOUGH)) lpBuffer->dwTotalPhys = BIGENOUGH;\n\t\tif (((int)lpBuffer->dwAvailPhys < 0) || ((int)lpBuffer->dwAvailPhys > HALFBIG)) lpBuffer->dwAvailPhys = HALFBIG;\n\t\tif (((int)lpBuffer->dwTotalPageFile < 0) || ((int)lpBuffer->dwTotalPageFile > BIGENOUGH)) lpBuffer->dwTotalPageFile = BIGENOUGH;\n\t\tif (((int)lpBuffer->dwAvailPageFile < 0) || ((int)lpBuffer->dwAvailPageFile > HALFBIG)) lpBuffer->dwAvailPageFile = HALFBIG;\n\t\tif (((int)lpBuffer->dwTotalVirtual < 0) || ((int)lpBuffer->dwTotalVirtual > BIGENOUGH)) lpBuffer->dwTotalVirtual = BIGENOUGH;\n\t\tif (((int)lpBuffer->dwAvailVirtual < 0) || ((int)lpBuffer->dwAvailVirtual > HALFBIG)) lpBuffer->dwAvailVirtual = HALFBIG;\n\t\tif(dxw.dwFlags5 & STRESSRESOURCES){\n\t\t\tlpBuffer->dwTotalPhys = TOOBIG;\n\t\t\tlpBuffer->dwAvailPhys = TOOBIG;\n\t\t\tlpBuffer->dwTotalPageFile = TOOBIG;\n\t\t\tlpBuffer->dwAvailPageFile = TOOBIG;\n\t\t\tlpBuffer->dwTotalVirtual = TOOBIG;\n\t\t\tlpBuffer->dwAvailVirtual = TOOBIG;\n\t\t}\n\t\tif(memcmp(&PrevMemoryStatus, lpBuffer, sizeof(MEMORYSTATUS)))\n\t\t\tOutTraceDW(\"GlobalMemoryStatus UPDATED: Length=%d MemoryLoad=%d%c \"\n\t\t\t\t\"TotalPhys=%x AvailPhys=%x TotalPageFile=%x AvailPageFile=%x TotalVirtual=%x AvailVirtual=%x\\n\",\n\t\t\t\tlpBuffer->dwLength, lpBuffer->dwMemoryLoad, '%', lpBuffer->dwTotalPhys, lpBuffer->dwAvailPhys,\n\t\t\t\tlpBuffer->dwTotalPageFile, lpBuffer->dwAvailPageFile, lpBuffer->dwTotalVirtual, lpBuffer->dwAvailVirtual);\n\t}\n\telse{\n\t\tOutTraceDW(\"GlobalMemoryStatus WARNING: Length=%d sizeof(LPMEMORYSTATUS)=%d\\n\", lpBuffer->dwLength, sizeof(LPMEMORYSTATUS));\n\t}\n}\n\n/*\nFrom MSDN:\nOperating system\t\tVersion number\tdwMajorVersion\tdwMinorVersion\tOther\nWindows 8\t\t\t\t6.2\t\t6\t\t2\t\tOSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION\nWindows Server 2012\t\t6.2\t\t6\t\t2\t\tOSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION\nWindows 7\t\t\t\t6.1\t\t6\t\t1\t\tOSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION\nWindows Server 2008 R2\t6.1\t\t6\t\t1\t\tOSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION\nWindows Server 2008\t\t6.0\t\t6\t\t0\t\tOSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION\nWindows Vista\t\t\t6.0\t\t6\t\t0\t\tOSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION\nWindows Server 2003 R2\t5.2\t\t5\t\t2\t\tGetSystemMetrics(SM_SERVERR2) != 0\nWindows Home Server\t\t5.2\t\t5\t\t2\t\tOSVERSIONINFOEX.wSuiteMask & VER_SUITE_WH_SERVER\nWindows Server 2003\t\t5.2\t\t5\t\t2\t\tGetSystemMetrics(SM_SERVERR2) == 0\nWindows XP Pro x64 Ed.\t5.2\t\t5\t\t2\t\t(OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION) && (SYSTEM_INFO.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)\nWindows XP\t\t\t\t5.1\t\t5\t\t1\t\tNot applicable\nWindows 2000\t\t\t5.0\t\t5\t\t0\t\tNot applicable\nFrom http://delphi.about.com/cs/adptips2000/a/bltip1100_2.htm \nWindows 95\t\t\t\t4.0\t\t4\t\t0\nWindows 98/SE\"\t\t\t4.10\t4\t\t10\t\tif osVerInfo.szCSDVersion[1] = 'A' then Windows98SE\nWindows ME\t\t\t\t4.90\t4\t\t90\n*/\n\n/*\nDifferences with older Windows versions\nThis function is provided even with older Windows versions with some significant differences than stated above:\nThe high order bit determins if it's NT based (NT, 2000, XP and newer) or not (Win 3.1, 95, 98, ME)\nThe remaining bits of the high order word specify the build number only on NT based Windows verions.\n\nFrom older MSDN:\nTo distinguish between operating system platforms, use the high order bit and the low order byte, as shown in the following table:\n\nWindows NT\n    High order bit: 0\n    Low order byte (major version number): 3 or 4\nWindows 95 and Windows 98\n    High order bit: 1\n    Low order byte (major version number): 4\nWin32s with Windows 3.1\n    High order bit: 1\n    Low order byte (major version number): 3\n\nFor Windows NT and Win32s, the remaining bits in the high order word specify the build number.\nFor Windows 95 and Windows 98, the remaining bits of the high order word are reserved.\n*/\n\n// v2.03.20: \"Talonsoft's Operational Art of War II\" checks the dwPlatformId field\n// v2.03.20: list revised according to Microsoft compatibility settings\n\nstatic struct {DWORD bMajor; DWORD bMinor; DWORD dwPlatformId; DWORD build; char *sName;} WinVersions[9]=\n{\n\t{4, 0, VER_PLATFORM_WIN32_WINDOWS,\t950,\t\t\"Windows 95\"},\n\t{4,10, VER_PLATFORM_WIN32_WINDOWS,\t67766446,\t\"Windows 98/SE\"},\n\t{4,90, VER_PLATFORM_WIN32_WINDOWS,\t0,\t\t\t\"Windows ME\"},\n//\t{4, 0, VER_PLATFORM_WIN32_NT,\t\t1381,\t\t\"Windows NT4.0(sp5)\"},\n\t{5, 0, VER_PLATFORM_WIN32_NT,\t\t2195,\t\t\"Windows 2000\"},\n//\t{5, 1, VER_PLATFORM_WIN32_NT,\t\t2600,\t\t\"Windows XP(sp2)\"},\n\t{5, 1, VER_PLATFORM_WIN32_NT,\t\t2600,\t\t\"Windows XP(sp3)\"},\n\t{5, 2, VER_PLATFORM_WIN32_NT,\t\t3790,\t\t\"Windows Server 2003(sp1)\"},\n//\t{6, 0, VER_PLATFORM_WIN32_NT,\t\t6001,\t\t\"Windows Server 2008(sp1)\"},\n//\t{6, 0, VER_PLATFORM_WIN32_NT,\t\t6000,\t\t\"Windows Vista\"},\n//\t{6, 0, VER_PLATFORM_WIN32_NT,\t\t6001,\t\t\"Windows Vista(sp1)\"},\n\t{6, 0, VER_PLATFORM_WIN32_NT,\t\t6002,\t\t\"Windows Vista(sp2)\"},\n\t{6, 1, VER_PLATFORM_WIN32_NT,\t\t7600,\t\t\"Windows 7\"},\n\t{6, 2, VER_PLATFORM_WIN32_NT,\t\t0,\t\t\t\"Windows 8\"}\n};\n\nBOOL WINAPI extGetVersionExA(LPOSVERSIONINFOA lpVersionInfo)\n{\n\tBOOL ret;\n\n\tret=(*pGetVersionExA)(lpVersionInfo);\n\tif(!ret) {\n\t\tOutTraceE(\"GetVersionExA: ERROR err=%d\\n\", GetLastError());\n\t\treturn ret;\n\t}\n\n\tOutTraceDW(\"GetVersionExA: version=%d.%d platform=%x build=(%d)\\n\", \n\t\tlpVersionInfo->dwMajorVersion, lpVersionInfo->dwMinorVersion, lpVersionInfo->dwPlatformId, lpVersionInfo->dwBuildNumber);\n\n\tif(dxw.dwFlags2 & FAKEVERSION) {\n\t\t// fake Win XP build 0\n\t\tlpVersionInfo->dwMajorVersion = WinVersions[dxw.FakeVersionId].bMajor;\n\t\tlpVersionInfo->dwMinorVersion = WinVersions[dxw.FakeVersionId].bMinor;\n\t\tlpVersionInfo->dwPlatformId = WinVersions[dxw.FakeVersionId].dwPlatformId;\n\t\tlpVersionInfo->dwBuildNumber = 0;\n\t\tOutTraceDW(\"GetVersionExA: FIXED version=%d.%d platform=%x build=(%d) os=\\\"%s\\\"\\n\", \n\t\t\tlpVersionInfo->dwMajorVersion, lpVersionInfo->dwMinorVersion, lpVersionInfo->dwPlatformId, lpVersionInfo->dwBuildNumber,\n\t\t\tWinVersions[dxw.FakeVersionId].sName);\n\t}\n\treturn TRUE;\n}\n\nBOOL WINAPI extGetVersionExW(LPOSVERSIONINFOW lpVersionInfo)\n{\n\tBOOL ret;\n\n\tret=(*pGetVersionExW)(lpVersionInfo);\n\tif(!ret) {\n\t\tOutTraceE(\"GetVersionExW: ERROR err=%d\\n\", GetLastError());\n\t\treturn ret;\n\t}\n\n\tOutTraceDW(\"GetVersionExW: version=%d.%d platform=%x build=(%d)\\n\", \n\t\tlpVersionInfo->dwMajorVersion, lpVersionInfo->dwMinorVersion, lpVersionInfo->dwPlatformId, lpVersionInfo->dwBuildNumber);\n\n\tif(dxw.dwFlags2 & FAKEVERSION) {\n\t\t// fake Win XP build 0\n\t\tlpVersionInfo->dwMajorVersion = WinVersions[dxw.FakeVersionId].bMajor;\n\t\tlpVersionInfo->dwMinorVersion = WinVersions[dxw.FakeVersionId].bMinor;\n\t\tlpVersionInfo->dwPlatformId = WinVersions[dxw.FakeVersionId].dwPlatformId;\n\t\tlpVersionInfo->dwBuildNumber = 0;\n\t\tOutTraceDW(\"GetVersionExW: FIXED version=%d.%d platform=%x build=(%d) os=\\\"%s\\\"\\n\", \n\t\t\tlpVersionInfo->dwMajorVersion, lpVersionInfo->dwMinorVersion, lpVersionInfo->dwPlatformId, lpVersionInfo->dwBuildNumber,\n\t\t\tWinVersions[dxw.FakeVersionId].sName);\n\t}\n\treturn TRUE;\n}\n\nDWORD WINAPI extGetVersion(void)\n{\n    DWORD dwVersion; \n    DWORD dwMajorVersion;\n    DWORD dwMinorVersion; \n    DWORD dwBuild = 0;\n\n    dwVersion = (*pGetVersion)();\n \n    // Get the Windows version.\n\n    dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));\n    dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));\n\n    // Get the build number.\n\n    if (dwVersion < 0x80000000)              \n        dwBuild = (DWORD)(HIWORD(dwVersion));\n\n\tOutTraceDW(\"GetVersion: version=%d.%d build=(%d)\\n\", dwMajorVersion, dwMinorVersion, dwBuild);\n\n\tif(dxw.dwFlags2 & FAKEVERSION) {\n\t\tdwVersion = WinVersions[dxw.FakeVersionId].bMajor | (WinVersions[dxw.FakeVersionId].bMinor << 8);\n\t\tdwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));\n\t    dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));\n\t\tdwBuild = (DWORD)(HIWORD(dwVersion));\n\t\tif(WinVersions[dxw.FakeVersionId].bMajor == 4) dwVersion |= 0x80000000; // v2.03.11: fixes \"Warhead\"\n\t\tOutTraceDW(\"GetVersion: FIXED version=%x: Win%d.%d build=(%d) os=\\\"%s\\\"\\n\", \n\t\t\tdwVersion, dwMajorVersion, dwMinorVersion, dwBuild, WinVersions[dxw.FakeVersionId].sName);\n\t}\n\n\treturn dwVersion;\n}\n\n/* -------------------------------------------------------------------------------\n\ntime related APIs\n\n/* ---------------------------------------------------------------------------- */\n\nDWORD WINAPI extGetTickCount(void)\n{\n\tDWORD ret;\n\tret=dxw.GetTickCount();\n\t//OutTraceB(\"GetTickCount: ret=%x\\n\", ret); \n\treturn ret;\n}\n\nvoid WINAPI extGetSystemTime(LPSYSTEMTIME lpSystemTime)\n{\n\tdxw.GetSystemTime(lpSystemTime);\n\tOutTraceB(\"GetSystemTime: %02d:%02d:%02d.%03d\\n\", \n\t\tlpSystemTime->wHour, lpSystemTime->wMinute, lpSystemTime->wSecond, lpSystemTime->wMilliseconds);\n}\n\nvoid WINAPI extGetLocalTime(LPSYSTEMTIME lpLocalTime)\n{\n\tSYSTEMTIME SystemTime;\n\tdxw.GetSystemTime(&SystemTime);\n\tSystemTimeToTzSpecificLocalTime(NULL, &SystemTime, lpLocalTime);\n\tOutTraceB(\"GetLocalTime: %02d:%02d:%02d.%03d\\n\", \n\t\tlpLocalTime->wHour, lpLocalTime->wMinute, lpLocalTime->wSecond, lpLocalTime->wMilliseconds);\n}\n\nVOID WINAPI extSleep(DWORD dwMilliseconds)\n{\n\tDWORD dwNewDelay;\n\tdwNewDelay=dwMilliseconds;\n\tif ((dwMilliseconds!=INFINITE) && (dwMilliseconds!=0)){\n\t\tdwNewDelay = dxw.StretchTime(dwMilliseconds);\n\t\tif (dwNewDelay==0) dwNewDelay=1; // minimum allowed...\n\t}\n\tOutTraceB(\"Sleep: msec=%d->%d timeshift=%d\\n\", dwMilliseconds, dwNewDelay, dxw.TimeShift);\n\t(*pSleep)(dwNewDelay);\n\twhile(dxw.TimeFreeze)(*pSleep)(40);\n}\n\nDWORD WINAPI extSleepEx(DWORD dwMilliseconds, BOOL bAlertable)\n{\n\tDWORD ret;\n\tDWORD dwNewDelay;\n\tdwNewDelay=dwMilliseconds;\n\tif ((dwMilliseconds!=INFINITE) && (dwMilliseconds!=0)){\n\t\tdwNewDelay = dxw.StretchTime(dwMilliseconds);\n\t\tif (dwNewDelay==0) dwNewDelay=1; // minimum allowed...\n\t}\n\tOutTraceB(\"SleepEx: msec=%d->%d alertable=%x, timeshift=%d\\n\", dwMilliseconds, dwNewDelay, bAlertable, dxw.TimeShift);\n\tret = (*pSleepEx)(dwNewDelay, bAlertable);\n\twhile(dxw.TimeFreeze)(*pSleep)(40);\n\treturn ret;\n}\n\nvoid WINAPI extGetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime)\n{\n\tOutTraceB(\"GetSystemTimeAsFileTime\\n\");\n\tdxw.GetSystemTimeAsFileTime(lpSystemTimeAsFileTime);\n}\n\nBOOL WINAPI extQueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)\n{\n\tBOOL ret;\n\n\tif(dxw.dwFlags4 & NOPERFCOUNTER){\n\t\tret=0;\n\t\t(*lpPerformanceCount).QuadPart = 0;\n\t}\n\telse{\n\t\tLARGE_INTEGER CurrentInCount;\n\t\tret=(*pQueryPerformanceCounter)(&CurrentInCount);\n\t\tif(dxw.dwFlags5 & NORMALIZEPERFCOUNT) {\n\t\t\tLARGE_INTEGER PerfFrequency;\n\t\t\tstatic LARGE_INTEGER StartCounter = {0LL};\n\t\t\tif (StartCounter.QuadPart == 0LL) StartCounter.QuadPart = CurrentInCount.QuadPart;\n\t\t\t(*pQueryPerformanceFrequency)(&PerfFrequency);\n\t\t\tCurrentInCount.QuadPart = ((CurrentInCount.QuadPart - StartCounter.QuadPart) * 1000000LL) / PerfFrequency.QuadPart;\n\t\t}\n\t\t*lpPerformanceCount = dxw.StretchLargeCounter(CurrentInCount);\n\t}\n\n\tOutTraceB(\"QueryPerformanceCounter: ret=%x Count=[%x-%x]\\n\", ret, lpPerformanceCount->HighPart, lpPerformanceCount->LowPart);\n\treturn ret;\n}\n\nBOOL WINAPI extQueryPerformanceFrequency(LARGE_INTEGER *lpPerformanceFrequency)\n{\n\tBOOL ret;\n\tif(dxw.dwFlags4 & NOPERFCOUNTER){\n\t\tLARGE_INTEGER myPerfFrequency;\n\t\tmyPerfFrequency.LowPart = 0L;\n\t\tmyPerfFrequency.HighPart = 0L;\n\t\t*lpPerformanceFrequency=myPerfFrequency;\n\t\tret = 0;\n\t}\n\telse{\n\t\tif(dxw.dwFlags5 & NORMALIZEPERFCOUNT){\n\t\t\tlpPerformanceFrequency->QuadPart = 1000000LL;\n\t\t\tret = TRUE;\n\t\t}\n\t\telse{\n\t\t\tret = (*pQueryPerformanceFrequency)(lpPerformanceFrequency);\n\t\t}\n\t}\n\tOutTraceDW(\"QueryPerformanceFrequency: ret=%x Frequency=%x-%x\\n\", ret, lpPerformanceFrequency->HighPart, lpPerformanceFrequency->LowPart);\n\treturn ret;\n}\n\n/* -------------------------------------------------------------------------------\n\nLoadLibrary (hooking) related APIs\n\n/* ---------------------------------------------------------------------------- */\n\nHMODULE SysLibs[SYSLIBIDX_MAX];\n\nHMODULE WINAPI LoadLibraryExWrapper(LPVOID lpFileName, BOOL IsWidechar, HANDLE hFile, DWORD dwFlags, char *api)\n{\n\tHMODULE libhandle;\n\tint idx;\n\t// recursion control: this is necessary so far only on WinXP while other OS like Win7,8,10 don't get into \n\t// recursion problems, but in any case better to leave it here, you never know ....\n\tstatic BOOL Recursed = FALSE;\n\n\tif(IsWidechar){\n\t\tOutTraceB(\"%s: file=%ls flags=%x\\n\", api, lpFileName, dwFlags);\n\t\tlibhandle=(*pLoadLibraryExW)((LPCWSTR)lpFileName, hFile, dwFlags);\n\t}\n\telse{\n\t\tOutTraceB(\"%s: file=%s flags=%x\\n\", api, lpFileName, dwFlags);\n\t\tlibhandle=(*pLoadLibraryExA)((LPCTSTR)lpFileName, hFile, dwFlags);\n\t}\n\n\tif(Recursed) {\n\t\t// v2.03.97.fx2: clear Recursed flag when exiting!\n\t\tRecursed = FALSE;\n\t\treturn libhandle;\n\t}\n\tRecursed = TRUE;\n\n\t// found in \"The Rage\" (1996): loading a module with relative path after a SetCurrentDirectory may fail, though\n\t// the module is present in the current directory folder. To fix this problem in case of failure it is possible \n\t// to retry the operation using a full pathname composed concatenating current dir and module filename.\n\tif(!libhandle){\n\t\tchar lpBuffer[MAX_PATH+1];\n\t\tGetCurrentDirectory(MAX_PATH, lpBuffer);\n\t\tif(IsWidechar)\n\t\t\tsprintf_s(lpBuffer, MAX_PATH, \"%s/%ls\", lpBuffer, lpFileName);\n\t\telse\n\t\tsprintf_s(lpBuffer, MAX_PATH, \"%s/%s\", lpBuffer, lpFileName);\n\n\t\tOutTrace(\"LoadLibrary: RETRY fullpath=\\\"%s\\\"\\n\", lpBuffer);\n\t\tlibhandle=(*pLoadLibraryExA)(lpBuffer, hFile, dwFlags);\n\t}\n\n\tif(IsWidechar)\n\t\tOutTraceDW(\"%s: FileName=%ls hFile=%x Flags=%x(%s) hmodule=%x\\n\", api, lpFileName, hFile, dwFlags, ExplainLoadLibFlags(dwFlags), libhandle);\n\telse\n\tOutTraceDW(\"%s: FileName=%s hFile=%x Flags=%x(%s) hmodule=%x\\n\", api, lpFileName, hFile, dwFlags, ExplainLoadLibFlags(dwFlags), libhandle);\n\n\tif(!libhandle){\n\t\tOutTraceE(\"%s: ERROR FileName=%s err=%d\\n\", api, lpFileName, GetLastError());\n\t\tRecursed = FALSE;\n\t\n\t\t// compatibility issue: some games (Nightmare Creatures) check for the ERROR_DLL_NOT_FOUND\n\t\t// errorcode or assume the library is there, hence the dialog box about a SDL.DLL file to delete.\n\t\tif((dxw.dwFlags8 & LOADLIBRARYERR) && (GetLastError()==ERROR_MOD_NOT_FOUND)) SetLastError(ERROR_DLL_NOT_FOUND);\n\t\treturn libhandle;\n\t}\n\n\t// when loaded with LOAD_LIBRARY_AS_DATAFILE or LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE flags, \n\t// there's no symbol map, then its no possible to hook function calls.\n\tif(dwFlags & (LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE|LOAD_LIBRARY_AS_DATAFILE)) return libhandle;\n\n\tchar *AnsiFileName;\n\tif(IsWidechar){\t\n\t\tstatic char sFileName[256+1];\n\t\twcstombs_s(NULL, sFileName, (LPCWSTR)lpFileName, 80);\n\t\tAnsiFileName = sFileName;\n\t}\n\telse\n\t\tAnsiFileName = (char *)lpFileName;\n\n\tidx=dxw.GetDLLIndex((char *)lpFileName);\n\tif(idx != -1) {\n\t\tOutTraceDW(\"%s: push idx=%x library=%s hdl=%x\\n\", api, idx, AnsiFileName, libhandle);\n\t\tSysLibs[idx]=libhandle;\n\t}\n\t// handle custom OpenGL library\n\tif(!lstrcmpi(AnsiFileName,dxw.CustomOpenGLLib)){\n\t\tidx=SYSLIBIDX_OPENGL;\n\t\tSysLibs[idx]=libhandle;\n\t}\n\tif (idx == -1) {\n\t\tOutTraceDW(\"%s: hooking lib=\\\"%s\\\" handle=%x\\n\", api, AnsiFileName, libhandle);\n\t\tHookModule(libhandle, 0);\n\t}\n\t\n\tRecursed = FALSE;\n\treturn libhandle;\n}\n\nHMODULE WINAPI extLoadLibraryA(LPCTSTR lpFileName)\n{ return LoadLibraryExWrapper((LPVOID)lpFileName, FALSE, NULL, 0, \"LoadLibraryA\"); }\n\nHMODULE WINAPI extLoadLibraryW(LPCWSTR lpFileName)\n{ return LoadLibraryExWrapper((LPVOID)lpFileName, TRUE, NULL, 0, \"LoadLibraryW\"); }\n\nHMODULE WINAPI extLoadLibraryExA(LPCTSTR lpFileName, HANDLE hFile, DWORD dwFlags)\n{ return LoadLibraryExWrapper((LPVOID)lpFileName, FALSE, hFile, dwFlags, \"LoadLibraryExA\"); }\n\nHMODULE WINAPI extLoadLibraryExW(LPCWSTR lpFileName, HANDLE hFile, DWORD dwFlags)\n{ return LoadLibraryExWrapper((LPVOID)lpFileName, TRUE, hFile, dwFlags, \"LoadLibraryExW\"); }\n\nBOOL WINAPI extFreeLibrary(HMODULE hModule)\n{ \n\tBOOL ret;\n\tstatic HMODULE hLastModule;\n\tOutTraceB(\"FreeLibrary: hModule=%x\\n\", hModule);\n\tret = (*pFreeLibrary)(hModule);\n\tif(ret){\n\t\tOutTrace(\"FreeLibrary: ret=%x\\n\", ret);\n\t\tif((hModule == hLastModule) && (dxw.dwFlags7 & FIXFREELIBRARY)) {\n\t\t\tOutTraceDW(\"FreeLibrary: FIXFREELIBRARY hack ret=0\\n\");\n\t\t\tret = 0;\n\t\t}\n\t\thLastModule = hModule;\n\t}\n\telse {\n\t\tOutTraceE(\"FreeLibrary ERROR: err=%d\\n\", GetLastError());\n\t}\n\treturn ret; \n}\n\nextern DirectDrawCreate_Type pDirectDrawCreate;\nextern DirectDrawCreateEx_Type pDirectDrawCreateEx;\nextern HRESULT WINAPI extDirectDrawCreate(GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *);\nextern HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *, LPDIRECTDRAW FAR *, REFIID, IUnknown FAR *);\nextern GetProcAddress_Type pGetProcAddress;\n//extern HRESULT STDAPICALLTYPE extCoCreateInstance(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID FAR*);\n\nFARPROC WINAPI extGetProcAddress(HMODULE hModule, LPCSTR proc)\n{\n\tFARPROC ret;\n\tint idx;\n\n\t// WARNING: seems to be called with bad LPCSTR value....\n\t// from MSDN:\n\t// The function or variable name, or the function's ordinal value. \n\t// If this parameter is an ordinal value, it must be in the low-order word; \n\t// the high-order word must be zero.\n\n\tOutTraceDW(\"GetProcAddress: hModule=%x proc=%s\\n\", hModule, ProcToString(proc));\n\n\tfor(idx=0; idx<SYSLIBIDX_MAX; idx++){\n\t\tif(SysLibs[idx]==hModule) break;\n\t}\n\n\t// to do: the else condition: the program COULD load addresses by ordinal value ... done ??\n\tif((DWORD)proc & 0xFFFF0000){\n\t\tFARPROC remap = 0;\n\t\tswitch(idx){\n\t\t\tcase SYSLIBIDX_AVIFIL32:\n\t\t\tremap=Remap_AVIFil32_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_DIRECTDRAW:\n\t\t\tremap=Remap_ddraw_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_USER32:\n\t\t\tremap=Remap_user32_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_GDI32:\n\t\t\tremap=Remap_GDI32_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_KERNEL32:\n\t\t\tremap=Remap_kernel32_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_IMELIB:\n\t\t\tremap=Remap_ImeLib_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_WINMM:\n\t\t\tremap=Remap_WinMM_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_OLE32: \n\t\t\tremap=Remap_ole32_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_DIRECT3D8:\n\t\t\tremap=Remap_d3d8_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_DIRECT3D9:\n\t\t\tremap=Remap_d3d9_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_DIRECT3D10:\n\t\t\tremap=Remap_d3d10_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_DIRECT3D10_1:\n\t\t\tremap=Remap_d3d10_1_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_DIRECT3D11:\n\t\t\tremap=Remap_d3d11_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_OPENGL:\n\t\t\tif(dxw.Windowize) remap=Remap_gl_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_MSVFW:\n\t\t\tremap=Remap_vfw_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_WINTRUST:\n\t\t\tremap=Remap_trust_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_ADVAPI32:\n\t\t\tremap=Remap_AdvApi32_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_DIRECT3D:\n\t\t\tremap=Remap_d3d7_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_DIRECT3D700:\n\t\t\tremap=Remap_d3d7_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_IMAGEHLP:\n\t\t\tremap=Remap_Imagehlp_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_DINPUT:\n\t\t\tremap=Remap_DInput_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_DINPUT8:\n\t\t\tremap=Remap_DInput8_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_COMCTL32:\n\t\t\tremap=Remap_ComCtl32_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_COMDLG32:\n\t\t\tremap=Remap_ComDlg32_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_DSOUND:\n\t\t\tremap=Remap_DSound_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_WING32:\n\t\t\tremap=Remap_WinG32_ProcAddress(proc, hModule);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\t\t\t\n\t\t}\n\t\tif(remap == (FARPROC)-1) {\n\t\t\tOutTraceDW(\"GetProcAddress: FAKE ret=0\\n\");\n\t\t\treturn 0; // pretend the call isn't there ....\n\t\t}\n\t\tif(remap) {\n\t\t\tOutTraceDW(\"GetProcAddress: HOOK ret=%x\\n\", remap);\n\t\t\treturn remap;\n\t\t}\n\t}\n\telse {\n\t\tswitch(idx){\n\t\tcase SYSLIBIDX_DIRECTDRAW:\n\t\t\tswitch((DWORD)proc){\n\t\t\t\tcase 0x0008: // DirectDrawCreate\n\t\t\t\t\tpDirectDrawCreate=(DirectDrawCreate_Type)(*pGetProcAddress)(hModule, proc);\n\t\t\t\t\tOutTraceDW(\"GetProcAddress: hooking proc=%s at addr=%x\\n\", ProcToString(proc), pDirectDrawCreate);\n\t\t\t\t\treturn (FARPROC)extDirectDrawCreate;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x000A: // DirectDrawCreateEx\n\t\t\t\t\tpDirectDrawCreateEx=(DirectDrawCreateEx_Type)(*pGetProcAddress)(hModule, proc);\n\t\t\t\t\tOutTraceDW(\"GetProcAddress: hooking proc=%s at addr=%x\\n\", ProcToString(proc), pDirectDrawCreateEx);\n\t\t\t\t\treturn (FARPROC)extDirectDrawCreateEx;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x000B: // DirectDrawEnumerateA\n\t\t\t\t\tpDirectDrawEnumerateA=(DirectDrawEnumerateA_Type)(*pGetProcAddress)(hModule, proc);\n\t\t\t\t\tOutTraceP(\"GetProcAddress: hooking proc=%s at addr=%x\\n\", proc, pDirectDrawEnumerateA);\n\t\t\t\t\treturn (FARPROC)extDirectDrawEnumerateA;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x000C: // DirectDrawEnumerateExA\n\t\t\t\t\tpDirectDrawEnumerateExA=(DirectDrawEnumerateExA_Type)(*pGetProcAddress)(hModule, proc);\n\t\t\t\t\tOutTraceP(\"GetProcAddress: hooking proc=%s at addr=%x\\n\", proc, pDirectDrawEnumerateExA);\n\t\t\t\t\treturn (FARPROC)extDirectDrawEnumerateExA;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase SYSLIBIDX_USER32:\n\t\t\tif ((DWORD)proc == 0x0020){ // ChangeDisplaySettingsA\n\t\t\t\t/* if (!pChangeDisplaySettingsA) */ pChangeDisplaySettingsA=(ChangeDisplaySettingsA_Type)(*pGetProcAddress)(hModule, proc);\n\t\t\t\tOutTraceDW(\"GetProcAddress: hooking proc=%s at addr=%x\\n\", ProcToString(proc), pChangeDisplaySettingsA);\n\t\t\t\treturn (FARPROC)extChangeDisplaySettingsA;\n\t\t\t}\n\t\t\tbreak;\n#ifndef ANTICHEATING\n\t\tcase SYSLIBIDX_KERNEL32:\n\t\t\tif ((DWORD)proc == 0x0305){ // \"IsDebuggerPresent\"\n\t\t\t\tOutTraceDW(\"GetProcAddress: hooking proc=%s at addr=%x\\n\", ProcToString(proc), extIsDebuggerPresent);\n\t\t\t\treturn (FARPROC)extIsDebuggerPresent;\n\t\t\t}\n\t\t\tif ((DWORD)proc == 0x0050){ // \"CheckRemoteDebuggerPresent\"\n\t\t\t\tOutTraceDW(\"GetProcAddress: hooking proc=%s at addr=%x\\n\", ProcToString(proc), extCheckRemoteDebuggerPresent);\n\t\t\t\treturn (FARPROC)extCheckRemoteDebuggerPresent;\n\t\t\t}\n#endif\n\t\tcase SYSLIBIDX_OLE32:\n\t\t\tif ((DWORD)proc == 0x0011){ // \"CoCreateInstance\"\n\t\t\t\tpCoCreateInstance=(CoCreateInstance_Type)(*pGetProcAddress)(hModule, proc);\n\t\t\t\tOutTraceDW(\"GetProcAddress: hooking proc=%s at addr=%x\\n\", ProcToString(proc), pCoCreateInstance);\n\t\t\t\treturn (FARPROC)extCoCreateInstance;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tret=(*pGetProcAddress)(hModule, proc);\n\tOutTraceDW(\"GetProcAddress: ret=%x\\n\", ret);\n\treturn ret;\n}\n\n/* -------------------------------------------------------------------------------\n\nI/O related APIs\n\n/* ---------------------------------------------------------------------------- */\n\nUINT WINAPI extGetDriveType(LPCTSTR lpRootPathName)\n{\n\tOutTraceDW(\"GetDriveType: path=\\\"%s\\\"\\n\", lpRootPathName);\n\tif (dxw.dwFlags3 & CDROMDRIVETYPE) return DRIVE_CDROM;\n\tif (dxw.dwFlags4 & HIDECDROMEMPTY){ \n\t\tBOOL Vol;\n\t\tVol = GetVolumeInformation(lpRootPathName, NULL, NULL, NULL, 0, 0, 0, 0);\n\t\tOutTrace(\"Vol=%x\\n\", Vol);\n\t\tif(!Vol) return DRIVE_UNKNOWN;\n\t}\n\treturn (*pGetDriveType)(lpRootPathName);\n}\n\nDWORD WINAPI extGetLogicalDrives(void)\n{\n\tDWORD DevMask;\n\tOutTraceDW(\"GetLogicalDrives:\\n\");\n\tDevMask = (*pGetLogicalDrives)();\n\tif (dxw.dwFlags4 & HIDECDROMEMPTY){ \n\t\tfor(int i=0; i<32; i++){\n\t\t\tDWORD DevBit;\n\t\t\tBOOL Vol;\n\t\t\tDevBit = 0x1 << i;\n\t\t\tif(DevMask & DevBit){\n\t\t\t\tchar RootPathName[10];\n\t\t\t\tsprintf_s(RootPathName, 4, \"%c:\\\\\", 'A'+i);\n\t\t\t\tVol = GetVolumeInformation(RootPathName, NULL, NULL, NULL, 0, 0, 0, 0);\n\t\t\t\tOutTrace(\"Vol=%s status=%x\\n\", RootPathName, Vol);\n\t\t\t\tif(!Vol) DevMask &= ~DevBit;\n\t\t\t}\n\t\t}\n\t}\n\treturn DevMask;\n}\n\nBOOL WINAPI extReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped)\n{\n\tBOOL ret;\n\tstatic char *IOBuffer=NULL;\n\tmemset(lpBuffer, 0, nNumberOfBytesToRead);\n\n\tif(IsTraceDW){\n\t\tOutTrace(\"ReadFile: hFile=%x Buffer=%x BytesToRead=%d Overlapped=%x\", hFile, lpBuffer, nNumberOfBytesToRead, lpOverlapped);\n\t\tif(lpOverlapped) OutTrace(\"->(Offset=0x%x OffsetHigh=0x%x)\", lpOverlapped->Offset, lpOverlapped->OffsetHigh);\n\t\tOutTrace(\"\\n\");\n\t}\n\n\tret = (*pReadFile)(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped);\n\tif(IsTraceDW){\n\t\tif(ret){\n\t\t\tOutTrace(\"ReadFile: NumberOfBytesRead=%d\\n\", *lpNumberOfBytesRead);\n\t\t\tOutTrace(\"ReadFile: \");\n\t\t\tfor(unsigned int i=0; i<*lpNumberOfBytesRead; i++) OutTrace(\"%02X,\", *((unsigned char *)lpBuffer+i));\n\t\t\tOutTrace(\"\\n\");\n\t\t}\n\t\telse\n\t\t\tOutTrace(\"ReadFile: ERROR err=%d\\n\", GetLastError());\n\t}\n\treturn ret;\n}\n\nstatic char *ExplainFlagsAndAttributes(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"\");\n\tif (c & FILE_ATTRIBUTE_ARCHIVE) strcat(eb, \"FILE_ATTRIBUTE_ARCHIVE+\");\n\tif (c & FILE_ATTRIBUTE_ENCRYPTED) strcat(eb, \"FILE_ATTRIBUTE_ENCRYPTED+\");\n\tif (c & FILE_ATTRIBUTE_HIDDEN) strcat(eb, \"FILE_ATTRIBUTE_HIDDEN+\");\n\tif (c & FILE_ATTRIBUTE_NORMAL) strcat(eb, \"FILE_ATTRIBUTE_NORMAL+\");\n\tif (c & FILE_ATTRIBUTE_OFFLINE) strcat(eb, \"FILE_ATTRIBUTE_OFFLINE+\");\n\tif (c & FILE_ATTRIBUTE_READONLY) strcat(eb, \"FILE_ATTRIBUTE_READONLY+\");\n\tif (c & FILE_ATTRIBUTE_SYSTEM) strcat(eb, \"FILE_ATTRIBUTE_SYSTEM+\");\n\tif (c & FILE_ATTRIBUTE_TEMPORARY) strcat(eb, \"FILE_ATTRIBUTE_TEMPORARY+\");\n\tif (c & FILE_FLAG_BACKUP_SEMANTICS) strcat(eb, \"FILE_FLAG_BACKUP_SEMANTICS+\");\n\tif (c & FILE_FLAG_DELETE_ON_CLOSE) strcat(eb, \"FILE_FLAG_DELETE_ON_CLOSE+\");\n\tif (c & FILE_FLAG_NO_BUFFERING) strcat(eb, \"FILE_FLAG_NO_BUFFERING+\");\n\tif (c & FILE_FLAG_OPEN_NO_RECALL) strcat(eb, \"FILE_FLAG_OPEN_NO_RECALL+\");\n\tif (c & FILE_FLAG_OPEN_REPARSE_POINT) strcat(eb, \"FILE_FLAG_OPEN_REPARSE_POINT+\");\n\tif (c & FILE_FLAG_OVERLAPPED) strcat(eb, \"FILE_FLAG_OVERLAPPED+\");\n\tif (c & FILE_FLAG_POSIX_SEMANTICS) strcat(eb, \"FILE_FLAG_POSIX_SEMANTICS+\");\n\tif (c & FILE_FLAG_RANDOM_ACCESS) strcat(eb, \"FILE_FLAG_RANDOM_ACCESS+\");\n\t//if (c & FILE_FLAG_SESSION_AWARE) strcat(eb, \"FILE_FLAG_SESSION_AWARE+\");\n\tif (c & FILE_FLAG_SEQUENTIAL_SCAN) strcat(eb, \"FILE_FLAG_SEQUENTIAL_SCAN+\");\n\tif (c & FILE_FLAG_WRITE_THROUGH) strcat(eb, \"FILE_FLAG_WRITE_THROUGH+\");\n\tif (c & SECURITY_ANONYMOUS) strcat(eb, \"SECURITY_ANONYMOUS+\");\n\tif (c & SECURITY_CONTEXT_TRACKING) strcat(eb, \"SECURITY_CONTEXT_TRACKING+\");\n\tif (c & SECURITY_DELEGATION) strcat(eb, \"SECURITY_DELEGATION+\");\n\tif (c & SECURITY_EFFECTIVE_ONLY) strcat(eb, \"SECURITY_EFFECTIVE_ONLY+\");\n\tif (c & SECURITY_IDENTIFICATION) strcat(eb, \"SECURITY_IDENTIFICATION+\");\n\tif (c & SECURITY_IMPERSONATION) strcat(eb, \"SECURITY_IMPERSONATION+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"\")) eb[l-1]=0; // delete last '+' if any\n\treturn(eb);\n}\n\nstatic char *ExplainDesiredAccess(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"GENERIC_\");\n\tif (c & GENERIC_READ) strcat(eb, \"READ+\");\n\tif (c & GENERIC_WRITE) strcat(eb, \"WRITE+\");\n\tif (c & GENERIC_EXECUTE) strcat(eb, \"EXECUTE+\");\n\tif (c & GENERIC_ALL) strcat(eb, \"ALL+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"GENERIC_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nHANDLE WINAPI extCreateFile(LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, \n\t\t\t\t\t\t\tLPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition,\n\t\t\t\t\t\t\tDWORD dwFlagsAndAttributes, HANDLE hTemplateFile)\n{\n\tHANDLE ret;\n\tint err=0;\n\tOutTraceDW(\"CreateFile: FileName=%s DesiredAccess=%x(%s) SharedMode=%x Disposition=%x Flags=%x(%s)\\n\", \n\t\tlpFileName, dwDesiredAccess, ExplainDesiredAccess(dwDesiredAccess), dwShareMode, dwCreationDisposition, \n\t\tdwFlagsAndAttributes, ExplainFlagsAndAttributes(dwFlagsAndAttributes));\n\n\t// just proxy\n\tif(!(dxw.dwFlags3 & BUFFEREDIOFIX))\n\t\treturn (*pCreateFile)(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);\n\n\tif((dxw.dwFlags3 & BUFFEREDIOFIX) && (dwFlagsAndAttributes & FILE_FLAG_NO_BUFFERING)){\n\t\tOutTraceDW(\"CreateFile: suppress FILE_FLAG_NO_BUFFERING\\n\"); \n\t\tdwFlagsAndAttributes &= ~FILE_FLAG_NO_BUFFERING;\n\t}\n\n\tret=(*pCreateFile)(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);\n\tif(IsTraceDW){\n\t\tif(ret && (ret != (HANDLE)INVALID_SET_FILE_POINTER)) \n\t\t\tOutTrace(\"CreateFile: ret=%x\\n\", ret);\n\t\telse\n\t\t\tOutTrace(\"CreateFile ERROR: err=%d\\n\", err=GetLastError());\n\t}\n\n#if 0\n\tif(TRYFATNAMES && (!ret) && (err==ERROR_FILE_NOT_FOUND)){\n\t\tchar ShortPath[MAX_PATH+1];\n\t\tint iLastBackSlash, iFnameLength;\n\t\tchar *sFileName;\n\t\tstrncpy(ShortPath, lpFileName, MAX_PATH);\n\t\tiLastBackSlash = -1;\n\t\tfor(size_t i=0; i<strlen(ShortPath); i++) if((ShortPath[i]=='\\\\') || (ShortPath[i]=='/')) iLastBackSlash=i;\n\t\tsFileName = &ShortPath[iLastBackSlash+1];\n\t\tfor(size_t i=0; i<strlen(sFileName); i++) if(sFileName[i]=='.') iFnameLength=i;\n\t\tif(iFnameLength > 8){\n\t\t\tsFileName[6] = '~';\n\t\t\tsFileName[7] = '1';\n\t\t\tstrcpy(&sFileName[8], &sFileName[iFnameLength]);\n\t\t}\n\t\tOutTrace(\"CreateFile: try FAT path=\\\"%s\\\"\\n\", ShortPath);\n\t\tret=(*pCreateFile)(ShortPath, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);\n\t}\n#endif\n\n\treturn ret;\n} \n\nBOOL WINAPI extCloseHandle(HANDLE hObject)\n{\n\tBOOL ret;\n\tif (hObject && (hObject != (HANDLE)-1)) {\n\t\tOutTraceB(\"CloseHandle: hFile=%x\\n\", hObject);\n\t\t__try {ret=CloseHandle(hObject);\n\t\t} \n\t\t__except(EXCEPTION_EXECUTE_HANDLER){};\n\t}\n\telse{\n\t\tOutTraceDW(\"CloseHandle: BYPASS hFile=%x\\n\", hObject);\n\t}\n\treturn ret;\n}\n\nDWORD WINAPI extSetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod)\n{\n\tOutTrace(\"SetFilePointer: hFile=%x DistanceToMove=0x%lx DistanceToMoveHigh=0x%x MoveMethod=%x\\n\", \n\t\thFile, lDistanceToMove, lpDistanceToMoveHigh, dwMoveMethod);\n\n\treturn (*pSetFilePointer)(hFile, lDistanceToMove, lpDistanceToMoveHigh, dwMoveMethod);\n}\n\nstatic char *ExplainDebugEvent(DWORD ec)\n{\n\tchar *e;\n\tswitch(ec){\n\t\tcase EXCEPTION_DEBUG_EVENT: e=\"EXCEPTION\"; break;\n\t\tcase CREATE_THREAD_DEBUG_EVENT: e=\"CREATE_THREAD\"; break;\n\t\tcase CREATE_PROCESS_DEBUG_EVENT: e=\"CREATE_PROCESS\"; break;\n\t\tcase EXIT_THREAD_DEBUG_EVENT: e=\"EXIT_THREAD\"; break;\n\t\tcase EXIT_PROCESS_DEBUG_EVENT: e=\"EXIT_PROCESS\"; break;\n\t\tcase LOAD_DLL_DEBUG_EVENT: e=\"LOAD_DLL\"; break;\n\t\tcase UNLOAD_DLL_DEBUG_EVENT: e=\"UNLOAD_DLL\"; break;\n\t\tcase OUTPUT_DEBUG_STRING_EVENT: e=\"OUTPUT_DEBUG\"; break;\n\t\tcase RIP_EVENT: e=\"RIP\"; break;\n\t\tdefault: e=\"unknown\"; break;\n\t}\n\treturn e;\n}\n\nstatic BOOL CreateProcessDebug(\n\tLPCTSTR lpApplicationName, \n\tLPTSTR lpCommandLine, \n\tLPSECURITY_ATTRIBUTES lpProcessAttributes,\n\tLPSECURITY_ATTRIBUTES lpThreadAttributes,\n\tBOOL bInheritHandles,\n\tDWORD dwCreationFlags,\n\tLPVOID lpEnvironment,\n\tLPCTSTR lpCurrentDirectory,\n\tLPSTARTUPINFO lpStartupInfo,\n\tLPPROCESS_INFORMATION lpProcessInformation\n)\n{\n\tBOOL res;\n\tDEBUG_EVENT debug_event ={0};\n\tchar path[MAX_PATH];\n\tDWORD dwContinueStatus = DBG_CONTINUE;\n\textern BOOL Inject(DWORD, const char *);\n\tLPVOID LastExceptionPtr = 0;\n\n\tdwCreationFlags |= DEBUG_ONLY_THIS_PROCESS;\n\n\tres=(*pCreateProcessA)(\n\t\tlpApplicationName, lpCommandLine,\n\t\tlpProcessAttributes, lpThreadAttributes, bInheritHandles,\n\t\tdwCreationFlags, lpEnvironment,\n\t\tlpCurrentDirectory, lpStartupInfo, lpProcessInformation\n\t);\n\tOutTrace(\"CreateProcess res=%x\\n\", res);\n\tBOOL bContinueDebugging = TRUE;\n\twhile(bContinueDebugging)\n\t{ \n\t\tif (!WaitForDebugEvent(&debug_event, INFINITE)) break;\n\t\tOutTraceB(\"CreateProcess: WaitForDebugEvent pid=%x tid=%x event=%x(%s)\\n\", \n\t\t\tdebug_event.dwProcessId, debug_event.dwThreadId, debug_event.dwDebugEventCode, ExplainDebugEvent(debug_event.dwDebugEventCode));\n\t\tswitch(debug_event.dwDebugEventCode){\n\t\t\tcase EXIT_PROCESS_DEBUG_EVENT:\n\t\t\t\tbContinueDebugging=false;\n\t\t\t\tbreak;\n\t\t\tcase CREATE_PROCESS_DEBUG_EVENT:\n\t\t\t\tGetModuleFileName(GetModuleHandle(\"dxwnd\"), path, MAX_PATH);\n\t\t\t\tOutTrace(\"CreateProcess: injecting path=%s\\n\", path);\n\t\t\t\tif(!Inject(lpProcessInformation->dwProcessId, path)){\n\t\t\t\t\tOutTrace(\"CreateProcess: Injection ERROR pid=%x dll=%s\\n\", lpProcessInformation->dwProcessId, path);\n\t\t\t\t}\n#ifdef LOCKINJECTIONTHREADS\n\t\t\t\t\tHANDLE TargetHandle;\n\t\t\t\t\textern LPVOID GetThreadStartAddress(HANDLE);\n\t\t\t\t\tDWORD EndlessLoop;\n\t\t\t\t\tEndlessLoop=0x9090FEEB; // assembly for JMP to here, NOP, NOP\n\t\t\t\t\tSIZE_T BytesCount;\n\t\t\t\t\tTargetHandle = (DWORD)OpenProcess(\n\t\t\t\t\t\tPROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, \n\t\t\t\t\t\tFALSE, \n\t\t\t\t\t\tlpProcessInformation->dwProcessId);\n\t\t\t\t\tif(TargetHandle){\n\t\t\t\t\t\tStartAddress = GetThreadStartAddress(lpProcessInformation->hThread);\n\t\t\t\t\t\tOutTrace(\"CreateProcess: StartAddress=%x\\n\", StartAddress);\n\t\t\t\t\t\tif(StartAddress){\n\t\t\t\t\t\t\tif(!ReadProcessMemory(lpProcessInformation->hProcess, StartAddress, &StartingCode, 4, &BytesCount)){ \n\t\t\t\t\t\t\t\tOutTrace(\"CreateProcess: ReadProcessMemory error=%d\\n\", GetLastError());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tOutTrace(\"CreateProcess: StartCode=%x\\n\", StartingCode);\n\t\t\t\t\t\t\tif(!WriteProcessMemory(lpProcessInformation->hProcess, StartAddress, &EndlessLoop, 4, &BytesCount)){\n\t\t\t\t\t\t\t\tOutTrace(\"CreateProcess: WriteProcessMemory error=%d\\n\", GetLastError());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n#endif\t\t\t\t\n\t\t\t\tOutTrace(\"CreateProcess: injection started\\n\", res);\n\t\t\t\tCloseHandle(debug_event.u.CreateProcessInfo.hFile);\n\t\t\t\tbreak;\n\t\t\tcase EXCEPTION_DEBUG_EVENT:\n\t\t\t\t{\n\t\t\t\t\tLPEXCEPTION_DEBUG_INFO ei;\n\t\t\t\t\tei=(LPEXCEPTION_DEBUG_INFO)&debug_event.u;\n\t\t\t\t\tOutTraceE(\"CreateProcess: EXCEPTION code=%x flags=%x addr=%x firstchance=%x\\n\", \n\t\t\t\t\t\tei->ExceptionRecord.ExceptionCode, \n\t\t\t\t\t\tei->ExceptionRecord.ExceptionFlags, \n\t\t\t\t\t\tei->ExceptionRecord.ExceptionAddress,\n\t\t\t\t\t\tdebug_event.u.Exception.dwFirstChance);\n\t\t\t\t\t// exception twice in same address, then do not continue.\n\t\t\t\t\tif(LastExceptionPtr == ei->ExceptionRecord.ExceptionAddress) bContinueDebugging = FALSE;\n\t\t\t\t\t//if(ei->dwFirstChance == 0) bContinueDebugging = FALSE;\n\t\t\t\t\tLastExceptionPtr = ei->ExceptionRecord.ExceptionAddress;\n\t\t\t\t}\n\t\t\t\tbContinueDebugging=false;\n\t\t\t\tbreak;\n\t\t\tcase LOAD_DLL_DEBUG_EVENT:\n\t\t\t\t//OutTrace(\"CreateProcess: event=%x(%s) dll=%s address=%x\\n\", \n\t\t\t\t//\tdebug_event.dwDebugEventCode, ExplainDebugEvent(debug_event.dwDebugEventCode),\n\t\t\t\t//\t((LOAD_DLL_DEBUG_INFO *)&debug_event.u)->lpImageName, ((LOAD_DLL_DEBUG_INFO *)&debug_event.u)->lpBaseOfDll);\n\t\t\t\tCloseHandle(debug_event.u.LoadDll.hFile);\n\t\t\t\tbreak;\n\t\t\tcase CREATE_THREAD_DEBUG_EVENT:\n\t\t\t\tOutTraceB(\"CreateProcess: THREAD %x\\n\", debug_event.u.CreateThread.hThread);\n\t\t\t\tbreak;\n\t\t\tcase EXIT_THREAD_DEBUG_EVENT:\n#ifdef LOCKINJECTIONTHREADS\n\t\t\t\tif(TargetHandle && StartAddress){\n\t\t\t\t\tif(dxw.dwFlags5 & FREEZEINJECTEDSON){\n\t\t\t\t\t\tOutTrace(\"CreateProcess: FREEZEINJECTEDSON leaving son process in endless loop\\n\", GetLastError());\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\tif(!WriteProcessMemory(lpProcessInformation->hProcess, StartAddress, &StartingCode, 4, &BytesCount)){\n\t\t\t\t\t\tOutTrace(\"CreateProcess: WriteProcessMemory error=%d\\n\", GetLastError());\n\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tCloseHandle((HANDLE)TargetHandle);\n\t\t\t\t\tOutTrace(\"CreateProcess: injection terminated\\n\", res);\n\t\t\t\t}\n#endif\n\t\t\t\tOutTraceB(\"CreateProcess: thread exit code=%x\\n\", debug_event.u.ExitThread.dwExitCode);\n\t\t\t\tbContinueDebugging=false;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tif(bContinueDebugging){\n\t\t\tContinueDebugEvent(debug_event.dwProcessId, \n\t\t\t\tdebug_event.dwThreadId, \n\t\t\t\tdwContinueStatus);\n\t\t}\n\t\telse{\n\t\t\tContinueDebugEvent(debug_event.dwProcessId, debug_event.dwThreadId, DBG_CONTINUE); \n\t\t\tif(!DebugSetProcessKillOnExit(FALSE)){\n\t\t\t\tOutTraceE(\"CreateProcess: DebugSetProcessKillOnExit ERROR err=%d\\n\", GetLastError());\n\t\t\t}\n\t\t\tif(!DebugActiveProcessStop(debug_event.dwProcessId)){\n\t\t\t\tOutTraceE(\"CreateProcess: DebugActiveProcessStop ERROR err=%d\\n\", GetLastError());\n\t\t\t\tMessageBox(NULL, \"Error in DebugActiveProcessStop\", \"dxwnd\", MB_OK);\n\t\t\t}\n\t\t}\n\t}\n\tOutTrace(\"CreateProcess: detached\\n\");\n\treturn res;\n}\n\nstatic BOOL CreateProcessSuspended(\n\tLPCTSTR lpApplicationName, \n\tLPTSTR lpCommandLine, \n\tLPSECURITY_ATTRIBUTES lpProcessAttributes,\n\tLPSECURITY_ATTRIBUTES lpThreadAttributes,\n\tBOOL bInheritHandles,\n\tDWORD dwCreationFlags,\n\tLPVOID lpEnvironment,\n\tLPCTSTR lpCurrentDirectory,\n\tLPSTARTUPINFO lpStartupInfo,\n\tLPPROCESS_INFORMATION lpProcessInformation\n)\n{\n\tBOOL res;\n\textern BOOL Inject(DWORD, const char *);\n\tchar StartingCode[4];\n\tDWORD EndlessLoop;\n\tEndlessLoop=0x9090FEEB; // careful: it's BIG ENDIAN: EB FE 90 90\n\tDWORD BytesCount;\n\tDWORD OldProt;\n\tDWORD PEHeader[0x70];\n\tchar dllpath[MAX_PATH];\n\tLPVOID StartAddress;\n\tHANDLE TargetHandle;\n\tFILE *fExe = NULL;\n\tBOOL bKillProcess = FALSE;\n\n\tOutTrace(\"CreateProcessSuspended: appname=\\\"%s\\\" commandline=\\\"%s\\\" dir=\\\"%s\\\"\\n\", \n\t\tlpApplicationName, lpCommandLine, lpCurrentDirectory);\n\t// attempt to load the specified target\n\tres=(*pCreateProcessA)(\n\t\tlpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, false, \n\t\tdwCreationFlags|CREATE_SUSPENDED, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation);\n\tif (!res){\n\t\tOutTraceE(\"CreateProcess(CREATE_SUSPENDED) ERROR: err=%d\\n\", GetLastError());\n\t\tres=(*pCreateProcessA)(NULL, lpCommandLine, 0, 0, false, dwCreationFlags, NULL, lpCurrentDirectory, lpStartupInfo, lpProcessInformation);\n\t\tif(!res){ \n\t\t\tOutTraceE(\"CreateProcess ERROR: err=%d\\n\", GetLastError());\n\t\t}\n\t\treturn res;\n\t}\n\n\twhile(TRUE){ // fake loop\n\t\tbKillProcess = TRUE;\n\n\t\t// locate the entry point\n\t\tTargetHandle = OpenProcess(\n\t\t\tPROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_SUSPEND_RESUME, \n\t\t\tFALSE, \n\t\t\tlpProcessInformation->dwProcessId);\n\n\t\tFILE *fExe = fopen(lpCommandLine ? lpCommandLine : lpApplicationName, \"rb\");\n\t\tif(fExe==NULL){\n\t\t\tOutTraceE(\"CreateProcess: fopen %s error=%d\\n\", lpCommandLine, GetLastError());\n\t\t\tbreak;\n\t\t}\n\t\t// read DOS header\n\t\tif(fread((void *)PEHeader, sizeof(DWORD), 0x10, fExe)!=0x10){\n\t\t\tOutTraceE(\"CreateProcess: fread DOSHDR error=%d\\n\", GetLastError());\n\t\t\tbreak;\n\t\t}\n\t\tOutTraceB(\"CreateProcess: NT Header offset=%X\\n\", PEHeader[0xF]);\n\t\tfseek(fExe, PEHeader[0xF], 0);\n\t\t// read File header + Optional header\n\t\tif(fread((void *)PEHeader, sizeof(DWORD), 0x70, fExe)!=0x70){\n\t\t\tOutTraceE(\"CreateProcess: fread NTHDR error=%d\\n\", GetLastError());\n\t\t\tbreak;\n\t\t}\n\n\t\tStartAddress = (LPVOID)(PEHeader[0xA] + PEHeader[0xD]);\n\t\tOutTraceB(\"CreateProcess: AddressOfEntryPoint=%X ImageBase=%X startaddr=%X\\n\", PEHeader[0xA], PEHeader[0xD], StartAddress);\n\n\t\t// patch the entry point with infinite loop\n\t\tif(!VirtualProtectEx(TargetHandle, StartAddress, 4, PAGE_EXECUTE_READWRITE, &OldProt )){\n\t\t\tOutTraceE(\"CreateProcess: VirtualProtectEx error=%d\\n\", GetLastError());\n\t\t\tbreak;\n\t\t}\n\n\t\tif(!ReadProcessMemory(TargetHandle, StartAddress, &StartingCode, 4, &BytesCount)){ \n\t\t\tOutTraceE(\"CreateProcess: ReadProcessMemory error=%d\\n\", GetLastError());\n\t\t\tbreak;\n\t\t}\n\n\t\tif(!WriteProcessMemory(TargetHandle, StartAddress, &EndlessLoop, 4, &BytesCount)){\n\t\t\tOutTraceE(\"CreateProcess: WriteProcessMemory error=%d\\n\", GetLastError());\n\t\t\tbreak;\n\t\t}\n\n\t\tif(!FlushInstructionCache(TargetHandle, StartAddress, 4)){\n\t\t\tOutTrace(\"CreateProcess: FlushInstructionCache ERROR err=%x\\n\", GetLastError());\n\t\t\tbreak; // error condition\n\t\t}\n\n\t\t// resume the main thread\n\t\tif(ResumeThread(lpProcessInformation->hThread)==(DWORD)-1){\n\t\t\tOutTraceE(\"CreateProcess: ResumeThread error=%d at:%d\\n\", GetLastError(), __LINE__);\n\t\t\tbreak;\n\t\t}\n\n\t\t// wait until the thread stuck at entry point\n\t\tCONTEXT context;\n\t\tcontext.Eip = (DWORD)0; // initialize to impossible value\n\t\tfor ( unsigned int i = 0; i < 80 && context.Eip != (DWORD)StartAddress; ++i ){\n\t\t\t// patience.\n\t\t\tSleep(50);\n\n\t\t\t// read the thread context\n\t\t\tcontext.ContextFlags = CONTEXT_CONTROL;\n\t\t\tif(!GetThreadContext(lpProcessInformation->hThread, &context)){\n\t\t\t\tOutTraceE(\"CreateProcess: GetThreadContext error=%d\\n\", GetLastError());\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tOutTraceB(\"wait cycle %d eip=%x\\n\", i, context.Eip);\n\t\t}\n\n\t\tif (context.Eip != (DWORD)StartAddress){\n\t\t\t// wait timed out\n\t\t\tOutTraceE(\"CreateProcess: thread blocked eip=%x addr=%x\", context.Eip, StartAddress);\n\t\t\tbreak;\n\t\t}\n\n\t\t// inject DLL payload into remote process\n\t\tGetFullPathName(\"dxwnd.dll\", MAX_PATH, dllpath, NULL);\n\t\tif(!Inject(lpProcessInformation->dwProcessId, dllpath)){\n\t\t\t// DXW_STRING_INJECTION\n\t\t\tOutTraceE(\"CreateProcess: Injection error: pid=%x dll=%s\\n\", lpProcessInformation->dwProcessId, dllpath);\n\t\t\tbreak;\n\t\t}\n\n\t\t// pause \n\t\tif(SuspendThread(lpProcessInformation->hThread)==(DWORD)-1){\n\t\t\tOutTraceE(\"CreateProcess: SuspendThread error=%d\\n\", GetLastError());\n\t\t\tbreak;\n\t\t}\n\n\t\t// restore original entry point\n\t\tif(!WriteProcessMemory(TargetHandle, StartAddress, &StartingCode, 4, &BytesCount)){\n\t\t\tOutTraceE(\"CreateProcess: WriteProcessMemory error=%d\\n\", GetLastError());\n\t\t\tbreak;\n\t\t}\n\n\t\tif(!FlushInstructionCache(TargetHandle, StartAddress, 4)){\n\t\t\tOutTrace(\"CreateProcess: FlushInstructionCache ERROR err=%x\\n\", GetLastError());\n\t\t\tbreak; // error condition\n\t\t}\n\n\t\t// you are ready to go\n\t\t// pause and restore original entry point\n\t\tif(ResumeThread(lpProcessInformation->hThread)==(DWORD)-1){\n\t\t\tOutTraceE(\"CreateProcess: ResumeThread error=%d at:%d\\n\", GetLastError(), __LINE__);\n\t\t\tbreak;\n\t\t}\n\n\t\tbKillProcess = FALSE;\n\t\tbreak; // exit fake loop\n\t}\n\n\t// cleanup ....\n\tif(fExe) fclose(fExe);\n\tif(TargetHandle) CloseHandle(TargetHandle);\n\t// terminate the newly spawned process\n\tif(bKillProcess){\n\t\tOutTraceDW(\"CreateProcess: Kill son process hproc=%x pid=%x\\n\", lpProcessInformation->hProcess, lpProcessInformation->dwProcessId);\n\t\tif(!TerminateProcess( lpProcessInformation->hProcess, -1 )){\n\t\t\tOutTraceE(\"CreateProcess: failed to kill hproc=%x err=%d\\n\", lpProcessInformation->hProcess, GetLastError());\n\t\t}\n\t}\n\tOutTraceB(\"CreateProcess: resumed\\n\");\n\treturn res;\n}\n\nBOOL WINAPI extCreateProcessA(\n\tLPCTSTR lpApplicationName, \n\tLPTSTR lpCommandLine, \n\tLPSECURITY_ATTRIBUTES lpProcessAttributes,\n\tLPSECURITY_ATTRIBUTES lpThreadAttributes,\n\tBOOL bInheritHandles,\n\tDWORD dwCreationFlags,\n\tLPVOID lpEnvironment,\n\tLPCTSTR lpCurrentDirectory,\n\tLPSTARTUPINFO lpStartupInfo,\n\tLPPROCESS_INFORMATION lpProcessInformation\n)\n{\n\tBOOL res;\n#ifdef LOCKINJECTIONTHREADS\n\tDWORD StartingCode;\n\tLPVOID StartAddress = 0;\n\textern LPVOID GetThreadStartAddress(HANDLE);\n#endif\n\tOutTraceDW(\"CreateProcess: ApplicationName=\\\"%s\\\" CommandLine=\\\"%s\\\" CreationFlags=%x CurrentDir=\\\"%s\\\"\\n\", \n\t\tlpApplicationName, lpCommandLine, dwCreationFlags, lpCurrentDirectory);\n\tif(dxw.dwFlags4 & SUPPRESSCHILD) {\n\t\tOutTraceDW(\"CreateProcess: SUPPRESS\\n\");\n\t\treturn TRUE;\n\t}\n\n\tif(dxw.dwFlags5 & (INJECTSON|ENABLESONHOOK)) {\n\t\textern HANDLE hLockMutex;\n\t\tReleaseMutex(hLockMutex);\n\t}\n\n\tif(dxw.dwFlags5 & INJECTSON) {\n\t\tres=CreateProcessDebug(\n\t\t\tlpApplicationName, \n\t\t\tlpCommandLine, \n\t\t\tlpProcessAttributes,\n\t\t\tlpThreadAttributes,\n\t\t\tbInheritHandles,\n\t\t\tdwCreationFlags,\n\t\t\tlpEnvironment,\n\t\t\tlpCurrentDirectory,\n\t\t\tlpStartupInfo,\n\t\t\tlpProcessInformation\n\t\t);\n\t}\n\telse\n\tif(dxw.dwFlags7 & INJECTSUSPENDED) {\n\t\tres=CreateProcessSuspended(\n\t\t\tlpApplicationName, \n\t\t\tlpCommandLine, \n\t\t\tlpProcessAttributes,\n\t\t\tlpThreadAttributes,\n\t\t\tbInheritHandles,\n\t\t\tdwCreationFlags,\n\t\t\tlpEnvironment,\n\t\t\tlpCurrentDirectory,\n\t\t\tlpStartupInfo,\n\t\t\tlpProcessInformation\n\t\t);\n\t}\n\telse{\n\t\tres=(*pCreateProcessA)(\n\t\t\tlpApplicationName, \n\t\t\tlpCommandLine, \n\t\t\tlpProcessAttributes,\n\t\t\tlpThreadAttributes,\n\t\t\tbInheritHandles,\n\t\t\tdwCreationFlags,\n\t\t\tlpEnvironment,\n\t\t\tlpCurrentDirectory,\n\t\t\tlpStartupInfo,\n\t\t\tlpProcessInformation\n\t\t);\n\t}\n\n\tif(!res) OutTraceE(\"CreateProcess: ERROR err=%d\\n\", GetLastError());\n\treturn res;\n}\n\nBOOL WINAPI extGetExitCodeProcess(HANDLE hProcess, LPDWORD lpExitCode)\n{\n\tBOOL res;\n\n\tOutTraceDW(\"GetExitCodeProcess: hProcess=%x\\n\", hProcess);\n\n\tif(dxw.dwFlags4 & SUPPRESSCHILD) {\n\t\tOutTraceDW(\"GetExitCodeProcess: FAKE exit code=0\\n\");\n\t\tlpExitCode = 0;\n\t\treturn TRUE;\n\t}\n\n\tres=(*pGetExitCodeProcess)(hProcess, lpExitCode);\n\tif(dxw.dwFlags5 & (INJECTSON|ENABLESONHOOK)) {\n\t\tif(*lpExitCode != STILL_ACTIVE){\n\t\t\tOutTraceDW(\"GetExitCodeProcess: locking mutex\\n\");\n\t\t\textern HANDLE hLockMutex;\n\t\t\tWaitForSingleObject(hLockMutex, 0);\n\t\t}\n\t}\n\tOutTraceDW(\"GetExitCodeProcess: hProcess=%x ExitCode=%x res=%x\\n\", hProcess, *lpExitCode, res);\n\treturn res;\n}\n\nBOOL WINAPI extCheckRemoteDebuggerPresent(HANDLE hProcess, PBOOL pbDebuggerPresent)\n{\n\tBOOL ret;\n\tif(pbDebuggerPresent) *pbDebuggerPresent = FALSE;\n\tret= (hProcess==(HANDLE)0xFFFFFFFF) ? FALSE : TRUE;\n\tOutTraceDW(\"CheckRemoteDebuggerPresent: hProcess=%x ret=%x\\n\", hProcess, ret);\n\treturn ret;\n}\n\nUINT WINAPI extGetTempFileName(LPCTSTR lpPathName, LPCTSTR lpPrefixString, UINT uUnique, LPTSTR lpTempFileName)\n{\n\tUINT ret;\n\tOutTraceDW(\"GetTempFileName: PathName=\\\"%s\\\" PrefixString=%s Unique=%d\\n\", lpPathName, lpPrefixString, uUnique);\n\tret = (*pGetTempFileName)(lpPathName, lpPrefixString, uUnique, lpTempFileName);\n\tif(ret == 0){\n\t\t// GetTempFileName patch to make \"Powerslide\" working\n\t\tOutTraceDW(\"GetTempFileName FAILED: error=%d at %d\\n\", GetLastError(), __LINE__);\n\t\tchar sTmpDir[MAX_PATH+1];\n\t\tGetTempPath(sizeof(sTmpDir), sTmpDir);\n\t\tret = (*pGetTempFileName)(sTmpDir, lpPrefixString, uUnique, lpTempFileName);\n\t\tif(ret == 0) OutTraceDW(\"GetTempFileName FAILED: PathName=\\\"%s\\\" error=%d line %d\\n\", sTmpDir, GetLastError(), __LINE__);\n\t}\n\tif(ret){\n\t\tOutTraceDW(\"GetTempFileName: TempFileName=\\\"%s\\\" ret=%d\\n\", lpTempFileName, ret);\n\t}\n\treturn ret;\n}\n\nLPVOID WINAPI extVirtualAlloc(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect)\n{\n\t// v2.03.20: handling of legacy memory segments.\n\t// Some games (Crusaders of Might and Magic, the demo and the GOG release) rely on the fact that the\n\t// program can VirtualAlloc-ate memory on certain tipically free segments (0x4000000, 0x5000000, \n\t// 0x6000000, 0x7000000 and 0x8000000) but when the program is hooked by DxWnd these segments could\n\t// be allocated to extra dlls or allocated memory. \n\t// The trick is ti pre-allocate this memory and free it upon error to make it certainly available to\n\t// the calling program.\n\n\tLPVOID ret;\n\tOutTraceB(\"VirtualAlloc: lpAddress=%x size=%x flag=%x protect=%x\\n\", lpAddress, dwSize, flAllocationType, flProtect);\n\tret = (*pVirtualAlloc)(lpAddress, dwSize, flAllocationType, flProtect);\n\tif((ret == NULL) && lpAddress){\n\t\tOutTraceE(\"VirtualAlloc: RECOVERY lpAddress=%x size=%x flag=%x protect=%x\\n\", \n\t\t\tlpAddress, dwSize, flAllocationType, flProtect);\n\t\tif (((DWORD)lpAddress & 0xF0FFFFFF) == 0){\n\t\t\tBOOL bret;\n\t\t\tbret = VirtualFree(lpAddress, 0x00000000, MEM_RELEASE);\n\t\t\tif(!bret) OutTraceE(\"VirtualFree: MEM_RELEASE err=%d\\n\", GetLastError());\n\t\t\tret = (*pVirtualAlloc)(lpAddress, dwSize, flAllocationType, flProtect);\n\t\t\tif (ret == NULL) OutTraceE(\"VirtualAlloc: addr=%x err=%d\\n\", lpAddress, GetLastError());\n\t\t}\n\t\tif (!ret) ret = (*pVirtualAlloc)((LPVOID)0x00000000, dwSize, flAllocationType, flProtect);\n\t\tif(ret == NULL) OutTraceE(\"VirtualAlloc: addr=NULL err=%d\\n\", GetLastError());\n\t}\n\tOutTrace(\"VirtualAlloc: ret=%x\\n\", ret);\n\treturn ret;\n}\n\n// WinExec: used by \"Star Wars X-Wings Alliance\" frontend, but fortunately it's not essential to hook it....\nUINT WINAPI extWinExec(LPCSTR lpCmdLine, UINT uCmdShow)\n{\n\tUINT ret;\n\tOutTraceDW(\"WinExec: lpCmdLine=%s CmdShow=%x\\n\", lpCmdLine, uCmdShow);\n\tret=(*pWinExec)(lpCmdLine, uCmdShow);\n\tif(ret<31)\n\t\tOutTraceE(\"WinExec: ERROR ret=%x\\n\", ret);\n\treturn ret;\n}\n\nBOOL WINAPI extSetPriorityClass(HANDLE hProcess, DWORD dwPriorityClass)\n{\n\tOutTraceDW(\"SetPriorityClass: hProcess=%x class=%x\\n\", hProcess, dwPriorityClass);\n\tif(dxw.dwFlags7 & BLOCKPRIORITYCLASS) {\n\t\tOutTraceDW(\"SetPriorityClass: BLOCKED\\n\");\n\t\treturn TRUE;\n\t}\n\treturn (*pSetPriorityClass)(hProcess, dwPriorityClass);\n}\n\nBOOL WINAPI extGlobalUnlock(HGLOBAL hMem)\n{\n\tBOOL ret;\n\tret = (*pGlobalUnlock)(hMem);\n\tif((dxw.dwFlags7 & FIXGLOBALUNLOCK) && (ret == 1)){\n\t\tstatic HGLOBAL hLastMem = NULL;\n\t\tif(hMem == hLastMem){\n\t\t\tret = 0;\n\t\t\tOutTraceDW(\"GlobalUnlock: FIXED RETCODE hMem=%x\\n\", hMem);\n\t\t}\n\t\thLastMem = hMem;\n\t}\n\treturn ret;\n}\n\n// ---------------------------------------------------------------------\n// Virtual Heap\n// ---------------------------------------------------------------------\n\nstatic LPVOID VHeapMin = (LPVOID)0xFFFFFFFF;\nstatic LPVOID VHeapMax = (LPVOID)0x00000000;\nstatic int iProg = 1;\n\n#if 0\n\nLPVOID WINAPI extHeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes)\n{\n\tLPVOID ret;\n\tOutTraceB(\"HeapAlloc: heap=%x flags=%x bytes=%d\\n\", hHeap, dwFlags, dwBytes);\n\tif(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg)){\n\t\tret = malloc(dwBytes);\n\t\tif(ret){\n\t\t\tif(ret > VHeapMax) VHeapMax = ret;\n\t\t\tif(ret < VHeapMin) VHeapMin = ret;\n\t\t}\n\t\tOutTraceB(\"HeapAlloc: (virtual) ret=%x\\n\", ret);\n\t}\n\telse {\n\t\tret = (*pHeapAlloc)(hHeap, dwFlags, dwBytes);\n\t\tOutTraceB(\"HeapAlloc: ret=%x\\n\", ret);\n\t}\n\treturn ret;\n}\n\nLPVOID WINAPI extHeapReAlloc(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, SIZE_T dwBytes)\n{\n\tLPVOID ret;\n\tOutTraceB(\"HeapReAlloc: heap=%x flags=%x mem=%x bytes=%d\\n\", hHeap, dwFlags, lpMem, dwBytes);\n\tif(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg)){\n\t\tret = realloc(lpMem, dwBytes);\n\t\tif(ret){\n\t\t\tif(ret > VHeapMax) VHeapMax = ret;\n\t\t\tif(ret < VHeapMin) VHeapMin = ret;\n\t\t}\n\t\tOutTraceB(\"HeapReAlloc: (virtual) ret=%x\\n\", ret);\n\t}\n\telse {\n\t\tret = (*pHeapReAlloc)(hHeap, dwFlags, lpMem, dwBytes);\n\t\tOutTraceB(\"HeapReAlloc: ret=%X\\n\", ret);\n\t}\n\treturn ret;\n}\n\nBOOL WINAPI extHeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem)\n{\n\tBOOL ret;\n\tOutTraceB(\"HeapFree: heap=%x flags=%x mem=%x\\n\", hHeap, dwFlags, lpMem);\n\tif((lpMem >= VHeapMin) && (lpMem <= VHeapMax)){\n\t\tfree(lpMem);\n\t\tret = TRUE;\n\t\tOutTraceB(\"HeapFree: (virtual) ret=%x\\n\", ret);\n\t}\n\telse {\n\t\tret = (*pHeapFree)(hHeap, dwFlags, lpMem);\n\t\tOutTraceB(\"HeapFree: ret=%x\\n\", ret);\n\t}\n\treturn ret;\n}\n\nBOOL WINAPI extHeapValidate(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem)\n{\n\tBOOL ret;\n\tOutTraceB(\"HeapValidate: heap=%x flags=%x mem=%x\\n\", hHeap, dwFlags, lpMem);\n\tif((lpMem >= VHeapMin) && (lpMem <= VHeapMax)){\n\t\tret = TRUE;\n\t\tOutTraceB(\"HeapValidate: (virtual) ret=%x\\n\", ret);\n\t}\n\telse {\n\t\tret = (*pHeapValidate)(hHeap, dwFlags, lpMem);\n\t\tOutTraceB(\"HeapValidate: ret=%x\\n\", ret);\n\t}\n\treturn ret;\n}\n\nSIZE_T WINAPI extHeapCompact(HANDLE hHeap, DWORD dwFlags)\n{\n\tSIZE_T ret;\n\tOutTraceB(\"HeapCompact: heap=%x flags=%x\\n\", hHeap, dwFlags);\n\tif(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg)){\n\t\tret = 100000; // just a number ....\n\t\tOutTraceB(\"HeapCompact: (virtual) ret=%d\\n\", ret);\n\t}\n\telse {\n\t\tret = (*pHeapCompact)(hHeap, dwFlags);\n\t\tOutTraceB(\"HeapCompact: ret=%d\\n\", ret);\n\t}\n\treturn ret;\n}\n\nHANDLE WINAPI extHeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize)\n{\n\tHANDLE ret;\n\tOutTraceB(\"HeapCreate: flags=%x size(init-max)=(%d-%d)\\n\", flOptions, dwInitialSize, dwMaximumSize);\n\t//flOptions &= ~HEAP_NO_SERIALIZE;\n\t//ret = (*pHeapCreate)(flOptions, dwInitialSize, dwMaximumSize);\n\tret = (HANDLE)(0xDEADBEEF + iProg++);\n\tOutTraceB(\"HeapCreate: (virtual) ret=%X\\n\", ret);\n\treturn ret;\n}\n\nHANDLE WINAPI extGetProcessHeap(void)\n{\n\tOutTraceB(\"GetProcessHeap: (virtual) ret=0xDEADBEEF\\n\");\n\treturn (HANDLE)0xDEADBEEF;\n}\n\nBOOL WINAPI extHeapDestroy(HANDLE hHeap)\n{\n\tBOOL ret;\n\tOutTraceB(\"HeapDestroy: heap=%x\\n\", hHeap);\n\tif(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg))\n\t\tret = TRUE;\n\telse \n\t\tret = (*pHeapDestroy)(hHeap);\n\tOutTraceB(\"HeapDestroy: ret=%x\\n\", ret);\n\treturn ret;\n}\n\n#else\n\n#define HEAPTRACE FALSE\n\nLPVOID WINAPI extHeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes)\n{\n\tLPVOID ret;\n\tOutTraceB(\"HeapAlloc: heap=%x flags=%x bytes=%d\\n\", hHeap, dwFlags, dwBytes);\n\tif(HEAPTRACE) return (*pHeapAlloc)(hHeap, dwFlags, dwBytes);\n\n\tret = malloc(dwBytes);\n\tif(ret){\n\t\tif(ret > VHeapMax) VHeapMax = ret;\n\t\tif(ret < VHeapMin) VHeapMin = ret;\n\t}\n\tOutTraceB(\"HeapAlloc: (virtual) ret=%x\\n\", ret);\n\treturn ret;\n}\n\nLPVOID WINAPI extHeapReAlloc(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, SIZE_T dwBytes)\n{\n\tLPVOID ret;\n\tOutTraceB(\"HeapReAlloc: heap=%x flags=%x mem=%x bytes=%d\\n\", hHeap, dwFlags, lpMem, dwBytes);\n\tif(HEAPTRACE) return (*pHeapReAlloc)(hHeap, dwFlags, lpMem, dwBytes);\n\n\tret = realloc(lpMem, dwBytes);\n\tif(ret){\n\t\tif(ret > VHeapMax) VHeapMax = ret;\n\t\tif(ret < VHeapMin) VHeapMin = ret;\n\t}\n\tOutTraceB(\"HeapReAlloc: (virtual) ret=%x\\n\", ret);\n\treturn ret;\n}\n\nBOOL WINAPI extHeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem)\n{\n\tBOOL ret;\n\tOutTraceB(\"HeapFree: heap=%x flags=%x mem=%x\\n\", hHeap, dwFlags, lpMem);\n\tif(HEAPTRACE) return (*pHeapFree)(hHeap, dwFlags, lpMem);\n\n\tif((lpMem >= VHeapMin) && (lpMem <= VHeapMax)){\n\t\tfree(lpMem);\n\t\tret = TRUE;\n\t\tOutTraceB(\"HeapFree: (virtual) ret=%x\\n\", ret);\n\t}\n\telse {\n\t\tret = (*pHeapFree)(hHeap, dwFlags, lpMem);\n\t\tOutTraceB(\"HeapFree: ret=%x\\n\", ret);\n\t}\n\treturn ret;\n}\n\nBOOL WINAPI extHeapValidate(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem)\n{\n\tBOOL ret;\n\tOutTraceB(\"HeapValidate: heap=%x flags=%x mem=%x\\n\", hHeap, dwFlags, lpMem);\n\tif(HEAPTRACE) return (*pHeapValidate)(hHeap, dwFlags, lpMem);\n\n\tif((lpMem >= VHeapMin) && (lpMem <= VHeapMax)){\n\t\tret = TRUE;\n\t\tOutTraceB(\"HeapValidate: (virtual) ret=%x\\n\", ret);\n\t}\n\telse {\n\t\tret = (*pHeapValidate)(hHeap, dwFlags, lpMem);\n\t\tOutTraceB(\"HeapValidate: ret=%x\\n\", ret);\n\t}\n\treturn ret;\n}\n\nSIZE_T WINAPI extHeapCompact(HANDLE hHeap, DWORD dwFlags)\n{\n\tSIZE_T ret;\n\tOutTraceB(\"HeapCompact: heap=%x flags=%x\\n\", hHeap, dwFlags);\n\tif(HEAPTRACE) return (*pHeapCompact)(hHeap, dwFlags);\n\n\tif(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg)){\n\t\tret = 100000; // just a number ....\n\t\tOutTraceB(\"HeapCompact: (virtual) ret=%d\\n\", ret);\n\t}\n\telse {\n\t\tret = (*pHeapCompact)(hHeap, dwFlags);\n\t\tOutTraceB(\"HeapCompact: ret=%d\\n\", ret);\n\t}\n\treturn ret;\n}\n\nHANDLE WINAPI extHeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize)\n{\n\tHANDLE ret;\n\tOutTraceB(\"HeapCreate: flags=%x size(init-max)=(%d-%d)\\n\", flOptions, dwInitialSize, dwMaximumSize);\n\tif(HEAPTRACE) return (*pHeapCreate)(flOptions, dwInitialSize, dwMaximumSize);\n\n\tret = (HANDLE)(0xDEADBEEF + iProg++);\n\tOutTraceB(\"HeapCreate: (virtual) ret=%X\\n\", ret);\n\treturn ret;\n}\n\nHANDLE WINAPI extGetProcessHeap(void)\n{\n\tOutTraceB(\"GetProcessHeap: (virtual) ret=0xDEADBEEF\\n\");\n\tif(HEAPTRACE) return (*pGetProcessHeap)();\n\n\treturn (HANDLE)0xDEADBEEF;\n}\n\nBOOL WINAPI extHeapDestroy(HANDLE hHeap)\n{\n\tBOOL ret;\n\tOutTraceB(\"HeapDestroy: heap=%x\\n\", hHeap);\n\tif(HEAPTRACE) return (*pHeapDestroy)(hHeap);\n\n\tif(((DWORD)hHeap >= 0xDEADBEEF) && ((DWORD)hHeap < 0xDEADBEEF + iProg))\n\t\tret = TRUE;\n\telse \n\t\tret = (*pHeapDestroy)(hHeap);\n\tOutTraceB(\"HeapDestroy: ret=%x\\n\", ret);\n\treturn ret;\n}\n\n#endif"
  },
  {
    "path": "dll/logall.h",
    "content": "#ifdef OutTraceB\n#undef OutTraceB\n#define OutTraceB OutTrace\n#endif\n#ifdef OutTraceDW\n#undef OutTraceDW\n#define OutTraceDW OutTrace\n#endif\n#ifdef OutTraceC\n#undef OutTraceC\n#define OutTraceC OutTrace\n#endif\n#ifdef OutTraceE\n#undef OutTraceE\n#define OutTraceE OutTrace\n#endif\n#ifdef IsTraceB\n#undef IsTraceB\n#define IsTraceB TRUE\n#endif\n#ifdef IsTraceDW\n#undef IsTraceDW\n#define IsTraceDW TRUE\n#endif\n#ifdef IsTraceC\n#undef IsTraceC\n#define IsTraceC TRUE\n#endif\n#ifdef IsTraceE\n#undef IsTraceE\n#define IsTraceE TRUE\n#endif\n#ifdef IsDebug\n#undef IsDebug\n#define IsDebug TRUE\n#endif\n"
  },
  {
    "path": "dll/mincaps.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n#define INITGUID\n\n#include <windows.h>\n#include <ddraw.h>\n#include \"dxwnd.h\"\n#include \"dxhook.h\"\n#include \"ddrawi.h\"\n#include \"dxwcore.hpp\"\n#include \"stdio.h\" \n#include \"hddraw.h\"\n#include \"dxhelper.h\"\n#include \"syslibs.h\"\n\n#define VIRTUAL_CAPS_VIRTUALPC TRUE\n\n#if 0\ntypedef struct _DDCAPS_DX7\n{\n/*  0*/ DWORD   dwSize;                 // size of the DDDRIVERCAPS structure\n/*  4*/ DWORD   dwCaps;                 // driver specific capabilities\n/*  8*/ DWORD   dwCaps2;                // more driver specific capabilites\n/*  c*/ DWORD   dwCKeyCaps;             // color key capabilities of the surface\n/* 10*/ DWORD   dwFXCaps;               // driver specific stretching and effects capabilites\n/* 14*/ DWORD   dwFXAlphaCaps;          // alpha driver specific capabilities\n/* 18*/ DWORD   dwPalCaps;              // palette capabilities\n/* 1c*/ DWORD   dwSVCaps;               // stereo vision capabilities\n/* 20*/ DWORD   dwAlphaBltConstBitDepths;       // DDBD_2,4,8\n/* 24*/ DWORD   dwAlphaBltPixelBitDepths;       // DDBD_1,2,4,8\n/* 28*/ DWORD   dwAlphaBltSurfaceBitDepths;     // DDBD_1,2,4,8\n/* 2c*/ DWORD   dwAlphaOverlayConstBitDepths;   // DDBD_2,4,8\n/* 30*/ DWORD   dwAlphaOverlayPixelBitDepths;   // DDBD_1,2,4,8\n/* 34*/ DWORD   dwAlphaOverlaySurfaceBitDepths; // DDBD_1,2,4,8\n/* 38*/ DWORD   dwZBufferBitDepths;             // DDBD_8,16,24,32\n/* 3c*/ DWORD   dwVidMemTotal;          // total amount of video memory\n/* 40*/ DWORD   dwVidMemFree;           // amount of free video memory\n/* 44*/ DWORD   dwMaxVisibleOverlays;   // maximum number of visible overlays\n/* 48*/ DWORD   dwCurrVisibleOverlays;  // current number of visible overlays\n/* 4c*/ DWORD   dwNumFourCCCodes;       // number of four cc codes\n/* 50*/ DWORD   dwAlignBoundarySrc;     // source rectangle alignment\n/* 54*/ DWORD   dwAlignSizeSrc;         // source rectangle byte size\n/* 58*/ DWORD   dwAlignBoundaryDest;    // dest rectangle alignment\n/* 5c*/ DWORD   dwAlignSizeDest;        // dest rectangle byte size\n/* 60*/ DWORD   dwAlignStrideAlign;     // stride alignment\n/* 64*/ DWORD   dwRops[DD_ROP_SPACE];   // ROPS supported\n/* 84*/ DDSCAPS ddsOldCaps;             // Was DDSCAPS  ddsCaps. ddsCaps is of type DDSCAPS2 for DX6\n/* 88*/ DWORD   dwMinOverlayStretch;    // minimum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 8c*/ DWORD   dwMaxOverlayStretch;    // maximum overlay stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 90*/ DWORD   dwMinLiveVideoStretch;  // minimum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 94*/ DWORD   dwMaxLiveVideoStretch;  // maximum live video stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 98*/ DWORD   dwMinHwCodecStretch;    // minimum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* 9c*/ DWORD   dwMaxHwCodecStretch;    // maximum hardware codec stretch factor multiplied by 1000, eg 1000 == 1.0, 1300 == 1.3\n/* a0*/ DWORD   dwReserved1;            // reserved\n/* a4*/ DWORD   dwReserved2;            // reserved\n/* a8*/ DWORD   dwReserved3;            // reserved\n/* ac*/ DWORD   dwSVBCaps;              // driver specific capabilities for System->Vmem blts\n/* b0*/ DWORD   dwSVBCKeyCaps;          // driver color key capabilities for System->Vmem blts\n/* b4*/ DWORD   dwSVBFXCaps;            // driver FX capabilities for System->Vmem blts\n/* b8*/ DWORD   dwSVBRops[DD_ROP_SPACE];// ROPS supported for System->Vmem blts\n/* d8*/ DWORD   dwVSBCaps;              // driver specific capabilities for Vmem->System blts\n/* dc*/ DWORD   dwVSBCKeyCaps;          // driver color key capabilities for Vmem->System blts\n/* e0*/ DWORD   dwVSBFXCaps;            // driver FX capabilities for Vmem->System blts\n/* e4*/ DWORD   dwVSBRops[DD_ROP_SPACE];// ROPS supported for Vmem->System blts\n/*104*/ DWORD   dwSSBCaps;              // driver specific capabilities for System->System blts\n/*108*/ DWORD   dwSSBCKeyCaps;          // driver color key capabilities for System->System blts\n/*10c*/ DWORD   dwSSBFXCaps;            // driver FX capabilities for System->System blts\n/*110*/ DWORD   dwSSBRops[DD_ROP_SPACE];// ROPS supported for System->System blts\n/*130*/ DWORD   dwMaxVideoPorts;        // maximum number of usable video ports\n/*134*/ DWORD   dwCurrVideoPorts;       // current number of video ports used\n/*138*/ DWORD   dwSVBCaps2;             // more driver specific capabilities for System->Vmem blts\n/*13c*/ DWORD   dwNLVBCaps;               // driver specific capabilities for non-local->local vidmem blts\n/*140*/ DWORD   dwNLVBCaps2;              // more driver specific capabilities non-local->local vidmem blts\n/*144*/ DWORD   dwNLVBCKeyCaps;           // driver color key capabilities for non-local->local vidmem blts\n/*148*/ DWORD   dwNLVBFXCaps;             // driver FX capabilities for non-local->local blts\n/*14c*/ DWORD   dwNLVBRops[DD_ROP_SPACE]; // ROPS supported for non-local->local blts\n// Members added for DX6 release\n/*16c*/ DDSCAPS2 ddsCaps;               // Surface Caps\n} DDCAPS_DX7;\ntypedef DDCAPS_DX7 FAR* LPDDCAPS_DX7;\n#endif\n\nvoid SetMinimalCaps(int dxversion, LPDDCAPS c1, LPDDCAPS c2)\n{\n\tDWORD dwMaxSize;\n\tswitch(dxversion){\n\t\tcase 1: \n\t\tcase 2:\n\t\tcase 3:\n\t\t\tdwMaxSize=sizeof(DDCAPS_DX3); \n\t\t\tbreak;\n\t\tcase 4:\n\t\tcase 5:\n\t\t\tdwMaxSize=sizeof(DDCAPS_DX5); \n\t\t\tbreak;\n\t\tcase 6:\n\t\t\tdwMaxSize=sizeof(DDCAPS_DX6); \n\t\t\tbreak;\n\t\tcase 7:\n\t\t\tdwMaxSize=sizeof(DDCAPS_DX7); \n\t\t\tbreak;\n\t}\n\n#ifdef VIRTUAL_CAPS_VMWARE\n\tif(c1){\n\t\tint dwSize = c1->dwSize;\n\t\t//memset(&c1, 0, dwSize);\n\t\tc1->dwSize\t\t= dwSize;\n\t\tc1->dwCaps\t\t= (DDCAPS_3D|DDCAPS_BLT|DDCAPS_BLTQUEUE|DDCAPS_OVERLAY|DDCAPS_OVERLAYFOURCC|DDCAPS_OVERLAYSTRETCH|DDCAPS_COLORKEY|DDCAPS_BLTDEPTHFILL|DDCAPS_CANBLTSYSMEM);\n\t\tc1->dwCaps2\t\t= (DDCAPS2_WIDESURFACES|DDCAPS2_CANRENDERWINDOWED|DDCAPS2_FLIPNOVSYNC);\n\t\tc1->dwCKeyCaps\t= (DDCKEYCAPS_DESTOVERLAY);\n\t\tc1->dwFXCaps\t= (DDFXCAPS_OVERLAYSHRINKX|DDFXCAPS_OVERLAYSHRINKY|DDFXCAPS_OVERLAYSTRETCHX|DDFXCAPS_OVERLAYSTRETCHY);\n\t\tc1->dwZBufferBitDepths = 0x600;\n\t\tc1->dwMaxVisibleOverlays = 0x20;\n\t\tfor(int j=0; j<DD_ROP_SPACE; j++) c1->dwRops[j]=0;\n\t\tc1->dwRops[6]\t= 0x100;\n\t\tif(dwSize >= (int)(0x16C)) {\n\t\t\tc1->ddsCaps.dwCaps = 0x42727A;\n\t\t\tc1->ddsCaps.dwCaps2 = 0x200200;\n\t\t}\n\t\t// c1->dwNumFourCCCodes - untouched (03 in VmWare)\n\t}\n\tif(c2){\n\t\tint dwSize = c2->dwSize;\n\t\t//memset(&c2, 0, dwSize);\n\t\tc2->dwSize\t\t= dwSize;\n\t\tc2->dwCaps\t\t= (DDCAPS_3D|DDCAPS_BLT|DDCAPS_BLTSTRETCH|DDCAPS_PALETTE|DDCAPS_COLORKEY|DDCAPS_ALPHA|DDCAPS_BLTCOLORFILL|DDCAPS_BLTDEPTHFILL|DDCAPS_CANCLIP|DDCAPS_CANCLIPSTRETCHED|DDCAPS_CANBLTSYSMEM);\n\t\tc2->dwCaps2\t\t= (DDCAPS2_CERTIFIED);\n\t\tc2->dwCKeyCaps\t=(DDCKEYCAPS_SRCBLT);\n\t\tc2->dwPalCaps\t= 0x347; // ???\n\t\tc2->dwFXCaps\t= (DDFXCAPS_BLTARITHSTRETCHY|DDFXCAPS_BLTMIRRORLEFTRIGHT|DDFXCAPS_BLTMIRRORUPDOWN|DDFXCAPS_BLTSHRINKX|DDFXCAPS_BLTSHRINKXN|DDFXCAPS_BLTSHRINKY|DDFXCAPS_BLTSHRINKYN|DDFXCAPS_BLTSTRETCHX|DDFXCAPS_BLTSTRETCHXN|DDFXCAPS_BLTSTRETCHY|DDFXCAPS_BLTSTRETCHYN|DDFXCAPS_BLTALPHA|DDFXCAPS_BLTFILTER|DDFXCAPS_BLTARITHSTRETCHY);\n\t\tfor(int j=0; j<DD_ROP_SPACE; j++) c2->dwRops[j]=0;\n\t\tc2->dwRops[0]\t= 0x1;\n\t\tc2->dwRops[6]\t= 0x100;\n\t\tc2->dwRops[7]\t= 0x8000000;\n\t\tc2->ddsOldCaps.dwCaps\t= 0x421350;\n\t\t// VMWare specific?\n\t\tc2->dwSVBCaps\t= 0xF4C08241;\n\t\tc2->dwSVBCKeyCaps = 0x200; \n\t\tc2->dwSVBFXCaps = 0x3FCE3 ;\n\t\tfor(int j=0; j<DD_ROP_SPACE; j++) c2->dwSVBRops[j]=0;\n\t\tc2->dwSVBRops[0] = 0x1;\n\t\tc2->dwSVBRops[6]\t= 0x100;\n\t\tc2->dwSVBRops[7]\t= 0x8000000;\n\t\tc2->dwVSBCaps = 0xF4C08241;\n\t\tc2->dwVSBCKeyCaps = 0x200;\n\t\tc2->dwVSBFXCaps = 0x3FCE3;\n\t\tfor(int j=0; j<DD_ROP_SPACE; j++) c2->dwVSBRops[j]=0;\n\t\tc2->dwVSBRops[0] = 0x1;\n\t\tc2->dwVSBRops[6]\t= 0x100;\n\t\tc2->dwVSBRops[7]\t= 0x8000000;\n\t\tc2->dwSSBCaps = 0xF4C08241;\n\t\tc2->dwSSBFXCaps = 0x3FCE3;\n\t\tfor(int j=0; j<DD_ROP_SPACE; j++) c2->dwSSBRops[j]=0;\n\t\tc2->dwSSBRops[0] = 1;\n\t\tc2->dwSSBRops[6]\t= 0x100;\n\t\tc2->dwSSBRops[7]\t= 0x8000000;\n\t\tif(dwSize > (int)0x16C) {\n\t\t\tc2->ddsCaps.dwCaps = 0x421350;\n\t\t\tc2->ddsCaps.dwCaps2 = 0x200;\n\t\t}\n\t}\n#endif\n#ifdef VIRTUAL_CAPS_VIRTUALPC\n/*\nCapsDump(c1:HW)=\n------- 00 -------- 04 -------- 08 -------- 0c --------\n0x0000: 7C,01,00,00,C1,68,40,90,00,10,48,00,10,00,00,00,\n0x0010: 00,00,A8,02,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0020: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0030: 00,00,00,00,00,00,00,00,00,06,00,00,C0,21,55,00,\n0x0040: C0,21,55,00,20,00,00,00,00,00,00,00,00,00,00,00,\n0x0050: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0060: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0070: 00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,\n0x0080: 00,00,00,00,50,02,00,00,00,00,00,00,00,00,00,00,\n0x0090: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x00a0: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x00b0: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x00c0: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x00d0: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x00e0: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x00f0: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0100: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0110: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0120: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0130: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0140: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0150: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0160: 00,00,00,00,00,00,00,00,00,00,00,00,7A,72,42,00,\n0x0170: 00,02,20,00,00,00,00,00,00,00,00,00,\nCapsDump(c2:SW)=\n------- 00 -------- 04 -------- 08 -------- 0c --------\n0x0000: 7C,01,00,00,41,82,C0,F4,01,00,00,00,00,02,00,00,\n0x0010: E1,FC,03,00,00,00,00,00,47,03,00,00,00,00,00,00,\n0x0020: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0030: 00,00,00,00,00,00,00,00,00,04,00,00,00,00,00,00,\n0x0040: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0050: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0060: 00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,\n0x0070: 00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,\n0x0080: 00,00,00,08,50,13,42,00,00,00,00,00,00,00,00,00,\n0x0090: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x00a0: 00,00,00,00,00,00,00,00,00,00,00,00,41,82,C0,F4,\n0x00b0: 00,02,00,00,E3,FC,03,00,01,00,00,00,00,00,00,00,\n0x00c0: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x00d0: 00,01,00,00,00,00,00,08,41,82,C0,F4,00,02,00,00,\n0x00e0: E3,FC,03,00,01,00,00,00,00,00,00,00,00,00,00,00,\n0x00f0: 00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,\n0x0100: 00,00,00,08,41,82,C0,F4,00,02,00,00,E3,FC,03,00,\n0x0110: 01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0120: 00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,08,\n0x0130: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0140: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0150: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\n0x0160: 00,00,00,00,00,00,00,00,00,00,00,00,50,13,42,00,\n0x0170: 00,02,00,00,00,00,00,00,00,00,00,00,\n*/ \n\tif(c1){\n\t\tDWORD dwSize = c1->dwSize;\n\t\tif(dwSize > dwMaxSize) dwSize = dwMaxSize;\n\t\tDWORD dwVidMemTotal = c1->dwVidMemTotal;\n\t\tDWORD dwVidMemFree = c1->dwVidMemFree;\n\t\tmemset((void *)c1, 0, dwSize);\n\t\tc1->dwSize\t\t= dwSize;\n\t\tc1->dwCaps\t\t= 0x904068c1;\n\t\tc1->dwCaps2\t\t= 0x481000;\n\t\tc1->dwCKeyCaps\t= 0x1;\n\t\tc1->dwFXCaps\t= 0x2a80000;\n\t\tc1->dwZBufferBitDepths = 0x600;\n\t\tc1->dwVidMemTotal = dwVidMemTotal;\n\t\tc1->dwVidMemFree = dwVidMemFree;\n\t\tc1->dwMaxVisibleOverlays = 0x20;\n\t\t//for(int j=0; j<DD_ROP_SPACE; j++) c1->dwRops[j]=0;\n\t\tc1->dwRops[6]\t= 0x100;\n\t\tc1->ddsOldCaps.dwCaps = 0x250;\n\t\tif(dwSize >= (int)(0x16C)) {\n\t\t\tc1->ddsCaps.dwCaps = 0x42727A;\n\t\t\tc1->ddsCaps.dwCaps2 = 0x200200;\n\t\t}\n\t}\n\tif(c2){\n\t\tDWORD dwSize = c2->dwSize;\n\t\tif(dwSize > dwMaxSize) dwSize = dwMaxSize;\n\t\tDWORD dwVidMemTotal = c2->dwVidMemTotal;\n\t\tDWORD dwVidMemFree = c2->dwVidMemFree;\n\t\tmemset((void *)c2, 0, dwSize);\n\t\tc2->dwSize\t\t= dwSize;\n\t\tc2->dwCaps\t\t= 0xf4c08241;\n\t\tc2->dwCaps2\t\t= 0x1;\n\t\tc2->dwCKeyCaps\t= 0x200;\n\t\tc2->dwFXCaps\t= 0x3fce1;\n\t\tc2->dwPalCaps\t= 0x347; \n\t\tc2->dwVidMemTotal = dwVidMemTotal;\n\t\tc2->dwVidMemFree = dwVidMemFree;\n\t\tif(dwSize > (int)0xac){\n\t\t\t//for(int j=0; j<DD_ROP_SPACE; j++) c2->dwRops[j]=0;\n\t\t\tc2->dwRops[0]\t= 0x1;\n\t\t\tc1->dwRops[6]\t= 0x100;\n\t\t\tc2->dwRops[7]\t= 0x8000000;\n\t\t\tc2->ddsOldCaps.dwCaps\t= 0x421350;\n\t\t\tc2->dwSVBCaps\t= 0xF4C08241;\n\t\t\tc2->dwSVBCKeyCaps = 0x200; \n\t\t\tc2->dwSVBFXCaps = 0x3FCE3;\n\t\t\t//for(int j=0; j<DD_ROP_SPACE; j++) c2->dwSVBRops[j]=0;\n\t\t\tc2->dwSVBRops[0] = 0x1;\n\t\t\tc2->dwSVBRops[6]\t= 0x100;\n\t\t\tc2->dwSVBRops[7]\t= 0x8000000;\n\t\t\tc2->dwVSBCaps = 0xF4C08241;\n\t\t\tc2->dwVSBCKeyCaps = 0x200;\n\t\t\tc2->dwVSBFXCaps = 0x3FCE3;\n\t\t\t//for(int j=0; j<DD_ROP_SPACE; j++) c2->dwVSBRops[j]=0;\n\t\t\tc2->dwVSBRops[0] = 0x1;\n\t\t\tc2->dwVSBRops[6]\t= 0x100;\n\t\t\tc2->dwVSBRops[7]\t= 0x8000000;\n\t\t\tc2->dwSSBCaps = 0xF4C08241;\n\t\t\tc2->dwSSBCKeyCaps = 0x200;\n\t\t\tc2->dwSSBFXCaps = 0x3FCE3;\n\t\t}\n\t\tif(dwSize > (int)0x13c) {\n\t\t\t//for(int j=0; j<DD_ROP_SPACE; j++) c2->dwSSBRops[j]=0;\n\t\t\tc2->dwSSBRops[0] = 1;\n\t\t\tc2->dwSSBRops[6]\t= 0x100;\n\t\t\tc2->dwSSBRops[7]\t= 0x8000000;\n\t\t}\n\t\tif(dwSize > (int)0x16C) {\n\t\t\tc2->ddsCaps.dwCaps = 0x421350;\n\t\t\tc2->ddsCaps.dwCaps2 = 0x200;\n\t\t}\n\t}\n#endif\n}\n"
  },
  {
    "path": "dll/msghook.cpp",
    "content": "#define _WIN32_WINNT 0x0600\n#define WIN32_LEAN_AND_MEAN\n#define _CRT_SECURE_NO_DEPRECATE 1\n\n#include <windows.h>\n#include <stdio.h>\n#include <stdarg.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"dxhelper.h\"\n\nextern HHOOK hMouseHook;\n\n/*\ntypedef struct tagMSG {\n  HWND   hwnd;\t\t\t// A handle to the window whose window procedure receives the message. This member is NULL when the message is a thread message.    \n  UINT   message;\t\t// The message identifier. Applications can only use the low word; the high word is reserved by the system. \n  WPARAM wParam;        // Additional information about the message. The exact meaning depends on the value of the message member. \n  LPARAM lParam;        // Additional information about the message. The exact meaning depends on the value of the message member. \n  DWORD  time;\t\t\t// The time at which the message was posted.\n  POINT  pt;            // The cursor position, in screen coordinates, when the message was posted. \n} MSG, *PMSG, *LPMSG;\n*/\n\nLRESULT CALLBACK MessageHook(int code, WPARAM wParam, LPARAM lParam)\n{\n\tstatic BOOL SizeMoving = FALSE;\n\n\tif(code == HC_ACTION){\n\t\tif(dxw.IsFullScreen()){\n\t\t\tMSG *msg;\n\t\t\tmsg = (MSG *)lParam;\n\t\t\tOutTraceC(\"MessageHook: hwnd=%x message=%d(%s) remove=%d params=(L:%x,R:%x) pt=(%d,%d)\\n\", \n\t\t\t\tmsg->hwnd, msg->message, ExplainWinMessage(msg->message), wParam, msg->lParam, msg->wParam, msg->pt.x, msg->pt.y);\n\n\t\t\tswitch(msg->message){\n\t\t\t\tcase WM_ENTERSIZEMOVE: SizeMoving = TRUE; break;\n\t\t\t\tcase WM_EXITSIZEMOVE: SizeMoving = FALSE; break;\n\t\t\t}\n\n\t\t\t// do not try to fix coordinates for points outside the client area!!\n\t\t\t// in theory, that should primarily depend on the message type, but this is the way it works ...\n\t\t\t// do not do the fixing also when in sizemove mode\n\t\t\tRECT client;\n\t\t\tclient=dxw.GetUnmappedScreenRect();\n\t\t\tif ((SizeMoving) ||\n\t\t\t\t(msg->pt.x < client.left)\t\t||\n\t\t\t\t(msg->pt.y < client.top)\t\t||\n\t\t\t\t(msg->pt.x > client.right)\t\t||\n\t\t\t\t(msg->pt.y > client.bottom)){\n\t\t\t\t// do nothing\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// fix the message point coordinates\n\t\t\t\tPOINT upleft={0,0};\n\t\t\t\tPOINT pt;\n                HWND hwnd;\n                // v2.03.36: offset to be calculated from target window\n                // v2-03.70: unless is a thread message (hwnd == NULL) !!\n                hwnd=(msg->hwnd)?msg->hwnd:dxw.GethWnd();\n                (*pClientToScreen)(hwnd, &upleft);\n\t\t\t\tpt = msg->pt;\n\t\t\t\tpt = dxw.SubCoordinates(pt, upleft);\n\t\t\t\tpt=dxw.FixCursorPos(pt);\n\t\t\t\tmsg->pt = pt;\n\t\t\t\t// beware: needs fix for mousewheel?\n\t\t\t\t// if NOMOUSEPROC fix point x,y coordinates only to NON MOUSE messages that won't be fixed by WindowProc hooker\n\t\t\t\t// NOMOUSEPROC is required by \"X-Files\", must be off for \"Star Trek Armada\" !!!\n\t\t\t\t// if((msg->message <= WM_MOUSELAST) && (msg->message >= WM_MOUSEFIRST) && !(dxw.dwFlags6 & NOMOUSEPROC)) msg->lParam = MAKELPARAM(pt.x, pt.y); \n\t\t\t\tif((msg->message <= WM_MOUSELAST) && (msg->message >= WM_MOUSEFIRST)) msg->lParam = MAKELPARAM(pt.x, pt.y); \n\t\t\t\tOutTraceC(\"MessageHook: fixed hwnd=%x lparam/pt=(%d,%d)\\n\", msg->hwnd, pt.x, pt.y);\n\t\t\t\tGetHookInfo()->CursorX=(short)pt.x;\n\t\t\t\tGetHookInfo()->CursorY=(short)pt.y;\n\t\t\t}\n\t\t}\n\t}\n\treturn CallNextHookEx(hMouseHook, code, wParam, lParam);\n}\n"
  },
  {
    "path": "dll/msims32.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"hddraw.h\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n#include \"shareddc.hpp\"\n\n#include \"stdio.h\"\n\nstatic BOOL bGDIRecursionFlag = FALSE;\n\n#define _Warn(s) MessageBox(0, s, \"to do\", MB_ICONEXCLAMATION)\n\ntypedef BOOL (WINAPI *AlphaBlend_Type)(HDC hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest, HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, BLENDFUNCTION ftn);\nAlphaBlend_Type pAlphaBlend = NULL;\nBOOL WINAPI extAlphaBlend(HDC hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest, HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, BLENDFUNCTION ftn);\n\ntypedef BOOL (WINAPI *GradientFill_Type)(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG);\nGradientFill_Type pGradientFill = NULL;\nBOOL WINAPI extGradientFill(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG);\n\ntypedef BOOL (WINAPI *TransparentBlt_Type)(HDC, int, int, int, int, HDC, int, int, int, int, UINT);\nTransparentBlt_Type pTransparentBlt = NULL;\nBOOL WINAPI extTransparentBlt(HDC, int, int, int, int, HDC, int, int, int, int, UINT);\n\nstatic HookEntryEx_Type Hooks[]={\n\n\t{HOOK_IAT_CANDIDATE, 0, \"AlphaBlend\", (FARPROC)NULL, (FARPROC *)&pAlphaBlend, (FARPROC)extAlphaBlend},\n\t{HOOK_IAT_CANDIDATE, 0, \"GradientFill\", (FARPROC)NULL, (FARPROC *)&pGradientFill, (FARPROC)extGradientFill},\n\t{HOOK_IAT_CANDIDATE, 0, \"TransparentBlt\", (FARPROC)NULL, (FARPROC *)&pTransparentBlt, (FARPROC)extTransparentBlt},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n}; \n\nstatic char *libname = \"msimg32.dll\";\n\nvoid HookMSIMG32Init()\n{\n\tHookLibInitEx(Hooks);\n}\n\nvoid HookMSIMG32(HMODULE module)\n{\n\tHookLibraryEx(module, Hooks, libname);\n}\n\nFARPROC Remap_MSIMG32_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\n\tif(addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\treturn NULL;\n}\n\nBOOL WINAPI extAlphaBlend(HDC hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest, HDC hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, BLENDFUNCTION ftn)\n{\n\t_Warn(\"AlphaBlend\");\n\treturn TRUE;\n}\n\nBOOL WINAPI extGradientFill(HDC hdc, PTRIVERTEX pVertex, ULONG nVertex, PVOID pMesh, ULONG nMesh, ULONG ulMode)\n{\n\t_Warn(\"GradientFill\");\n\treturn TRUE;\n}\n\nBOOL WINAPI extTransparentBlt(HDC hdcDest, int xoriginDest, int yoriginDest, int wDest, int hDest,\n\t\t\t\t\t\t\t  HDC  hdcSrc, int xoriginSrc, int yoriginSrc, int wSrc, int hSrc, UINT crTransparent)\n{\n\t_Warn(\"TransparentBlt\");\n\treturn TRUE;\n}\n"
  },
  {
    "path": "dll/msvfw.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS 1\n\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhook.h\"\n#include \"Vfw.h\"\n\n#define DXWDECLARATIONS TRUE\n#include \"msvfwhook.h\"\n#undef DXWDECLARATIONS\n\ntypedef DWORD (WINAPIV *ICDrawBegin_Type)(HIC, DWORD, HPALETTE, HWND,  HDC, int, int, int, int, LPBITMAPINFOHEADER, int, int, int, int, DWORD, DWORD);\nICDrawBegin_Type pICDrawBegin = NULL;\nDWORD WINAPIV extICDrawBegin(HIC, DWORD, HPALETTE, HWND,  HDC, int, int, int, int, LPBITMAPINFOHEADER, int, int, int, int, DWORD, DWORD);\ntypedef BOOL (WINAPI *DrawDibDraw_Type)(HDRAWDIB, HDC, int, int, int, int, LPBITMAPINFOHEADER, LPVOID, int, int, int, int, UINT);\nDrawDibDraw_Type pDrawDibDraw = NULL;\nBOOL WINAPI extDrawDibDraw(HDRAWDIB, HDC, int, int, int, int, LPBITMAPINFOHEADER, LPVOID, int, int, int, int, UINT);\ntypedef BOOL (WINAPI *DrawDibBegin_Type)(HDRAWDIB, HDC, int, int, LPBITMAPINFOHEADER, int, int, UINT);\nDrawDibBegin_Type pDrawDibBegin = NULL;\nBOOL WINAPI extDrawDibBegin(HDRAWDIB, HDC, int, int, LPBITMAPINFOHEADER, int, int, UINT);\ntypedef BOOL (WINAPI *DrawDibStart_Type)(HDRAWDIB, LONG);\nDrawDibStart_Type pDrawDibStart = NULL;\nBOOL WINAPI extDrawDibStart(HDRAWDIB, LONG);\ntypedef BOOL (WINAPI *DrawDibStop_Type)(HDRAWDIB);\nDrawDibStop_Type pDrawDibStop = NULL;\nBOOL WINAPI extDrawDibStop(HDRAWDIB);\ntypedef BOOL (WINAPI *DrawDibEnd_Type)(HDRAWDIB);\nDrawDibEnd_Type pDrawDibEnd = NULL;\nBOOL WINAPI extDrawDibEnd(HDRAWDIB);\n\nstatic HookEntryEx_Type Hooks[]={\n\t//{HOOK_HOT_CANDIDATE, 0, \"ICSendMessage\", (FARPROC)NULL, (FARPROC *)&pICSendMessage, (FARPROC)extICSendMessage},\n\t//{HOOK_HOT_CANDIDATE, 0, \"ICOpen\", (FARPROC)NULL, (FARPROC *)&pICOpen, (FARPROC)extICOpen},\n\t{HOOK_HOT_CANDIDATE, 0, \"MCIWndCreateA\", (FARPROC)NULL, (FARPROC *)&pMCIWndCreateA, (FARPROC)extMCIWndCreateA}, // \"Man in Black\" - beware: this is NOT STDCALL!!!\n\t{HOOK_HOT_CANDIDATE, 0, \"ICGetDisplayFormat\", (FARPROC)NULL, (FARPROC *)&pICGetDisplayFormat, (FARPROC)extICGetDisplayFormat}, // \"Man in Black\" - beware: this is NOT STDCALL!!!\n\t{HOOK_HOT_CANDIDATE, 0, \"ICDrawBegin\", (FARPROC)NULL, (FARPROC *)&pICDrawBegin, (FARPROC)extICDrawBegin}, // AoE demo: not a STDCALL !!\n\t{HOOK_HOT_CANDIDATE, 0, \"DrawDibDraw\", (FARPROC)NULL, (FARPROC *)&pDrawDibDraw, (FARPROC)extDrawDibDraw}, \n\t{HOOK_HOT_CANDIDATE, 0, \"DrawDibBegin\", (FARPROC)NULL, (FARPROC *)&pDrawDibBegin, (FARPROC)extDrawDibBegin}, \n\t{HOOK_HOT_CANDIDATE, 0, \"DrawDibStart\", (FARPROC)NULL, (FARPROC *)&pDrawDibStart, (FARPROC)extDrawDibStart}, \n\t{HOOK_HOT_CANDIDATE, 0, \"DrawDibStop\", (FARPROC)NULL, (FARPROC *)&pDrawDibStop, (FARPROC)extDrawDibStop}, \n\t{HOOK_HOT_CANDIDATE, 0, \"DrawDibEnd\", (FARPROC)NULL, (FARPROC *)&pDrawDibEnd, (FARPROC)extDrawDibEnd}, \n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nFARPROC Remap_vfw_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tif (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\t// NULL -> keep the original call address\n\treturn NULL;\n}\n\nvoid HookMSV4WLibs(HMODULE module)\n{\n\tHookLibraryEx(module, Hooks, \"MSVFW32.dll\");\n}\n\nLRESULT WINAPI extICSendMessage(HIC hic, UINT wMsg, DWORD_PTR dw1, DWORD_PTR dw2)\n{\n\tLRESULT res;\n\tOutTraceDW(\"ICSendMessage: hic=%x wMsg=%x dw1=%x dw2=%x\\n\", hic, wMsg, dw1, dw2);\n\tres=(*pICSendMessage)(hic, wMsg, dw1, dw2);\n\tOutTraceDW(\"ICSendMessage: ret=%x\\n\", res);\n\treturn res;\n}\n\nHIC WINAPI extICOpen(DWORD fccType, DWORD fccHandler, UINT wMode)\n{\n\tHIC res;\n\tOutTraceDW(\"ICOpen: fccType=%x fccHandler=%x wMode=%x\\n\", fccType, fccHandler, wMode);\n\tres=(*pICOpen)(fccType, fccHandler, wMode);\n\tOutTraceDW(\"ICOpen: ret=%x\\n\", res);\n\treturn res;\n}\n\n/*\nICDrawBegin function\n\nThe ICDrawBegin function initializes the renderer and prepares the drawing destination for drawing.\nSyntax\nDWORD ICDrawBegin(\n  HIC hic,\n  DWORD dwFlags,\n  HPALETTE hpal,\n  HWND hwnd,\n  HDC hdc,\n  int xDst,\n  int yDst,\n  int dxDst,\n  int dyDst,\n  LPBITMAPINFOHEADER lpbi,\n  int xSrc,\n  int ySrc,\n  int dxSrc,\n  int dySrc,\n  DWORD dwRate,\n  DWORD dwScale\n);\n\n\nParameters\n\nhic\t\t\t\t\t\tHandle to the decompressor to use.\n\ndwFlags\n    Decompression flags. The following values are defined.\n    Value \t\t\t\tMeaning\n    ICDRAW_ANIMATE\t\tApplication can animate the palette.\n    ICDRAW_CONTINUE\t\tDrawing is a continuation of the previous frame.\n    ICDRAW_FULLSCREEN\tDraws the decompressed data on the full screen.\n    ICDRAW_HDC\t\t\tDraws the decompressed data to a window or a DC.\n    ICDRAW_MEMORYDC\t\tDC is off-screen.\n    ICDRAW_QUERY\t\tDetermines if the decompressor can decompress the data. The driver does not decompress the data.\n    ICDRAW_UPDATING\t\tCurrent frame is being updated rather than played.\n\nhpal\t\t\t\t\tHandle to the palette used for drawing.\n\nhwnd\t\t\t\t\tHandle to the window used for drawing.\n\nhdc\t\t\t\t\t\tDC used for drawing.\n\nxDst\t\t\t\t\tThe x-coordinate of the upper right corner of the destination rectangle.\nyDst\t\t\t\t\tThe y-coordinate of the upper right corner of the destination rectangle.\ndxDst\t\t\t\t\tWidth of the destination rectangle.\ndyDst\t\t\t\t\tHeight of the destination rectangle.\n\nlpbi\t\t\t\t\tPointer to a BITMAPINFOHEADER structure containing the format of the input data to be decompressed.\n\nxSrc\t\t\t\t\tThe x-coordinate of the upper right corner of the source rectangle.\nySrc\t\t\t\t\tThe y-coordinate of the upper right corner of the source rectangle.\ndxSrc\t\t\t\t\tWidth of the source rectangle.\ndySrc\t\t\t\t\tHeight of the source rectangle.\n\ndwRate\t\t\t\t\tFrame rate numerator. The frame rate, in frames per second, is obtained by dividing dwRate by dwScale.\ndwScale\t\t\t\t\tFrame rate denominator. The frame rate, in frames per second, is obtained by dividing dwRate by dwScale.\n\nReturn value\n\nReturns ICERR_OK if the renderer can decompress the data or ICERR_UNSUPPORTED otherwise.\nRemarks\n\nThe ICDRAW_HDC and ICDRAW_FULLSCREEN flags are mutually exclusive. If an application sets the ICDRAW_HDC flag in dwFlags, the decompressor uses hwnd, hdc, and the parameters defining the destination rectangle (xDst, yDst, dxDst, and dyDst). Your application should set these parameters to the size of the destination rectangle. Specify destination rectangle values relative to the current window or DC.\nIf an application sets the ICDRAW_FULLSCREEN flag in dwFlags, the hwnd and hdc parameters are not used and should be set to NULL. Also, the destination rectangle is not used and its parameters can be set to zero.\nThe source rectangle is relative to the full video frame. The portion of the video frame specified by the source rectangle is stretched or shrunk to fit the destination rectangle.\nThe dwRate and dwScale parameters specify the decompression rate. The integer value specified for dwRate divided by the integer value specified for dwScale defines the frame rate in frames per second. This value is used by the renderer when it is responsible for timing frames during playback.\n\nRequirements\nMinimum supported client\n\tWindows 2000 Professional [desktop apps only]\nMinimum supported server\n\tWindows 2000 Server [desktop apps only]\n\nHeader\t\t\t\t\tVfw.h\nLibrary\t\t\t\t\tVfw32.lib\nDLL\t\t\t\t\t\tMsvfw32.dll \n\n*/\nstatic char *ExplainMCIWndCreateFlags(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"MCIWNDF_\");\n\tif (c & MCIWNDF_NOAUTOSIZEWINDOW) strcat(eb, \"NOAUTOSIZEWINDOW+\");\n\tif (c & MCIWNDF_NOPLAYBAR) strcat(eb, \"NOPLAYBAR+\");\n\tif (c & MCIWNDF_NOAUTOSIZEMOVIE) strcat(eb, \"NOAUTOSIZEMOVIE+\");\n\tif (c & MCIWNDF_NOMENU) strcat(eb, \"NOMENU+\");\n\tif (c & MCIWNDF_SHOWNAME) strcat(eb, \"SHOWNAME+\");\n\tif (c & MCIWNDF_SHOWPOS) strcat(eb, \"SHOWPOS+\");\n\tif (c & MCIWNDF_SHOWMODE) strcat(eb, \"SHOWMODE+\");\n\tif (c & MCIWNDF_NOTIFYMODE) strcat(eb, \"NOTIFYMODE+\");\n\tif (c & MCIWNDF_NOTIFYPOS) strcat(eb, \"NOTIFYPOS+\");\n\tif (c & MCIWNDF_NOTIFYSIZE) strcat(eb, \"NOTIFYSIZE+\");\n\tif (c & MCIWNDF_NOTIFYERROR) strcat(eb, \"NOTIFYERROR+\");\n\tif (c & MCIWNDF_NOTIFYMEDIAW) strcat(eb, \"NOTIFYMEDIAW+\");\n\tif (c & MCIWNDF_NOTIFYANSI) strcat(eb, \"NOTIFYANSI+\");\n\tif (c & MCIWNDF_RECORD) strcat(eb, \"RECORD+\");\n\tif (c & MCIWNDF_NOERRORDLG) strcat(eb, \"NOERRORDLG+\");\n\tif (c & MCIWNDF_NOOPEN) strcat(eb, \"NOOPEN+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"MCIWNDF_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nHWND extMCIWndCreateA(HWND hwndParent, HINSTANCE hInstance, DWORD dwStyle, LPCTSTR szFile)\n{\n\tHWND g_hwndMCIWnd;\n\tOutTraceDW(\"MCIWndCreateA: hwnd=%x hInst=%x style=%x(%s) file=%s\\n\", \n\t\thwndParent, hInstance, dwStyle, ExplainMCIWndCreateFlags(dwStyle), szFile);\n\tif(dxw.dwFlags6 & NOMOVIES) {\n\t\tOutTraceDW(\"MCIWndCreateA: SUPPRESSED\\n\");\n\t\treturn NULL;\n\t}\n\n\tg_hwndMCIWnd = (*pMCIWndCreateA)(hwndParent, hInstance, dwStyle, szFile);\n\n\t// look at https://msdn.microsoft.com/en-us/library/windows/desktop/dd757178%28v=vs.85%29.aspx\n\n\tif(dxw.dwFlags5 & REMAPMCI){\n\t\t// since there seem to be no way to stretch the movie, we do an attempt to center \n\t\t// the movie on the screen by shifting the video window. \n\t\t// We assume (but we don't really know for sure ...) that the movie was to be rendered\n\t\t// fulscreen using the size of the virtual desktop\n\t\tRECT client;\n\t\tOutTraceDW(\"MCIWndCreateA: CENTERED\\n\");\n\t\t(*pGetClientRect)(dxw.GethWnd(), &client);\n\t\t(*pSetWindowPos)(g_hwndMCIWnd,\t\t\t\t\t// window to resize \n\t\tNULL,\t\t\t\t\t\t\t\t\t\t\t// z-order: don't care \n\t\t(client.right - dxw.GetScreenWidth()) / 2,\t\t// X pos\n\t\t(client.bottom - dxw.GetScreenHeight()) / 2,\t// Y pos\n\t\tdxw.GetScreenWidth(),\t\t\t\t\t\t\t// width\n\t\tdxw.GetScreenHeight(),\t\t\t\t\t\t\t// height\n\t\tSWP_NOZORDER | SWP_NOACTIVATE); \n\t\t//(*pUpdateWindow)(g_hwndMCIWnd);\n\t}\n\n\treturn g_hwndMCIWnd;\n}\n\nHIC WINAPI extICGetDisplayFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, int BitDepth, int dx, int dy)\n{\n\tHIC ret;\n\tOutTraceDW(\"ICGetDisplayFormat: hic=%x bitdepth=%d dx=%d dy=%d indepth=%d\\n\", hic, BitDepth, dx, dy, lpbiIn->biBitCount);\n\n\tret=(*pICGetDisplayFormat)(hic, lpbiIn, lpbiOut, BitDepth, dx, dy);\n\tif(ret){\n\t\tOutTraceDW(\"ICGetDisplayFormat: ret=%x outdepth=%d\\n\", hic, lpbiOut->biBitCount);\n\t\tif(dxw.dwFlags6 & FIXMOVIESCOLOR){\n\t\t\tlpbiOut->biBitCount = (WORD)dxw.VirtualPixelFormat.dwRGBBitCount;\n\t\t\tOutTraceDW(\"ICGetDisplayFormat: FIXED outdepth=%d\\n\", lpbiOut->biBitCount);\n\t\t}\n\t}\n\telse {\n\t\tOutTraceDW(\"ICGetDisplayFormat ERROR: err=%d\\n\", GetLastError());\n\t}\n\n\treturn ret;\n}\nDWORD WINAPIV extICDrawBegin(HIC hic, DWORD dwFlags, HPALETTE hpal, HWND hwnd,  HDC hdc, int xDst, int yDst, int dxDst, int dyDst, LPBITMAPINFOHEADER lpbi, int xSrc, int ySrc, int dxSrc, int dySrc, DWORD dwRate, DWORD dwScale)\n{\n\tOutTrace(\"ICDrawBegin\\n\");\n\n\treturn (*pICDrawBegin)(hic, dwFlags, hpal, hwnd, hdc, xDst, yDst, dxDst, dyDst, lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale);\n}\n\nBOOL WINAPI extDrawDibDraw(HDRAWDIB hdd, HDC hdc, int xDst, int yDst, int dxDst, int dyDst, LPBITMAPINFOHEADER lpbi, LPVOID lpBits, int xSrc, int ySrc, int dxSrc, int dySrc, UINT wFlags)\n{\n\t// Reah intro movie\n\tBOOL ret;\n\tOutTrace(\"DrawDibDraw: hdd=%x hdc=%x DEST pos=(%d,%d) size=(%d,%d) SRC pos=(%d,%d) size=(%d,%d) flags=%x\\n\",\n\t\thdd, hdc, xDst, yDst, dxDst, dyDst, xSrc, ySrc, dxSrc, dySrc, wFlags);\n\tret = (*pDrawDibDraw)(hdd, hdc, xDst, yDst, dxDst, dyDst, lpbi, lpBits, xSrc, ySrc, dxSrc, dySrc, wFlags);\n\treturn ret;\n}\n\nBOOL WINAPI extDrawDibBegin(HDRAWDIB hdd, HDC hdc, int dxDest, int dyDest, LPBITMAPINFOHEADER lpbi, int dxSrc, int dySrc, UINT wFlags)\n{\n\t// Reah game transitions\n\tBOOL ret;\n\tOutTrace(\"DrawDibBegin: hdd=%x hdc=%x DEST size=(%d,%d) SRC size=(%d,%d) flags=%x\\n\",\n\t\thdd, hdc, dxDest, dyDest, dxSrc, dySrc, wFlags);\n\tret = (*pDrawDibBegin)(hdd, hdc, dxDest, dyDest, lpbi, dxSrc, dySrc, wFlags);\n\treturn ret;\n}\n\nBOOL WINAPI extDrawDibStart(HDRAWDIB hdd, LONG rate)\n{\n\t// Reah game transitions\n\tBOOL ret;\n\tOutTrace(\"DrawDibStart: hdd=%x rate=%x\\n\", hdd, rate);\n\tret = (*pDrawDibStart)(hdd, rate);\n\treturn ret;\n}\n\nBOOL WINAPI extDrawDibStop(HDRAWDIB hdd)\n{\n\t// Reah game transitions\n\tBOOL ret;\n\tOutTrace(\"DrawDibStop: hdd=%x\\n\", hdd);\n\tret = (*pDrawDibStop)(hdd);\n\treturn ret;\n}\n\nBOOL WINAPI extDrawDibEnd(HDRAWDIB hdd)\n{\n\t// Reah game transitions\n\tBOOL ret;\n\tOutTrace(\"DrawDibEnd: hdd=%x\\n\", hdd);\n\tret = (*pDrawDibEnd)(hdd);\n\treturn ret;\n}\n\n\n\n"
  },
  {
    "path": "dll/msvfwhook.h",
    "content": "#include \"Vfw.h\"\n\nextern FARPROC Remap_vfw_ProcAddress(LPCSTR, HMODULE);\nextern void HookMSV4WLibs(HMODULE);\n\ntypedef LRESULT (WINAPI * ICSendMessage_Type)(HIC, UINT, DWORD_PTR, DWORD_PTR);\ntypedef HIC (WINAPI *ICOpen_Type)(DWORD, DWORD, UINT);\ntypedef HIC (WINAPI *ICGetDisplayFormat_Type)(HIC, LPBITMAPINFOHEADER, LPBITMAPINFOHEADER, int, int, int);\n//typedef HWND (WINAPI *MCIWndCreateA_Type)(HWND, HINSTANCE, DWORD, LPCTSTR);\ntypedef HWND (*MCIWndCreateA_Type)(HWND, HINSTANCE, DWORD, LPCTSTR);\n\nextern LRESULT WINAPI extICSendMessage(HIC, UINT, DWORD_PTR, DWORD_PTR);\nextern HIC WINAPI extICOpen(DWORD, DWORD, UINT);\nextern HIC WINAPI extICGetDisplayFormat(HIC, LPBITMAPINFOHEADER, LPBITMAPINFOHEADER, int, int, int);\n//extern HWND WINAPI extMCIWndCreateA(HWND, HINSTANCE, DWORD, LPCTSTR);\nextern HWND extMCIWndCreateA(HWND, HINSTANCE, DWORD, LPCTSTR);\n\n#ifdef DXWDECLARATIONS \n#undef DXWEXTERN\n#undef DXWINITIALIZED\n#define DXWEXTERN\n#define DXWINITIALIZED = NULL\n#else\n#undef DXWEXTERN\n#undef DXWINITIALIZED\n#define DXWEXTERN extern\n#define DXWINITIALIZED\n#endif\n\n// MSVFW32.dll:\nDXWEXTERN ICSendMessage_Type pICSendMessage DXWINITIALIZED;\nDXWEXTERN ICOpen_Type pICOpen DXWINITIALIZED;\nDXWEXTERN ICGetDisplayFormat_Type pICGetDisplayFormat;\nDXWEXTERN MCIWndCreateA_Type pMCIWndCreateA DXWINITIALIZED;\n"
  },
  {
    "path": "dll/ole32.cpp",
    "content": "#include <dxdiag.h>\n#include <dsound.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n\nextern void HookModule(HMODULE, int);\nextern void HookDirectSoundObj(LPDIRECTSOUND *);\nextern void HookDirectDrawFactory(void *);\n\nstatic BOOL bRecursedHook = FALSE;\n\nstatic HookEntryEx_Type Hooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"CoCreateInstance\", NULL, (FARPROC *)&pCoCreateInstance, (FARPROC)extCoCreateInstance},\n\t{HOOK_HOT_CANDIDATE, 0, \"CoCreateInstanceEx\", NULL, (FARPROC *)&pCoCreateInstanceEx, (FARPROC)extCoCreateInstanceEx}, \n\t//{HOOK_HOT_CANDIDATE, 0, \"CoInitialize\", NULL, (FARPROC *)&pCoInitialize, (FARPROC)extCoInitialize}, \n\t//{HOOK_HOT_CANDIDATE, 0, \"CoUninitialize\", NULL, (FARPROC *)&pCoUninitialize, (FARPROC)extCoUninitialize}, \n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nextern HRESULT WINAPI extDirectDrawCreate(GUID FAR *, LPDIRECTDRAW FAR *, IUnknown FAR *);\nextern HRESULT WINAPI extDirectDrawCreateEx(GUID FAR *, LPDIRECTDRAW FAR *, REFIID, IUnknown FAR *);\n\nvoid HookOle32(HMODULE module)\n{\n\tHookLibraryEx(module, Hooks, \"ole32.dll\");\n}\n\nFARPROC Remap_ole32_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tif (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\treturn NULL;\n}\n\n// so far, there are 4 additional libraries that could be loaded by means of a CoCreateInstance call....\n\n#define ADDITIONAL_MODULE_COUNT 4\nstruct {\n\tBOOL Hooked;\n\tchar *ModuleName;\n} AddedModules[ADDITIONAL_MODULE_COUNT]=\n{\n\t{FALSE, \"quartz\"},\n\t//{FALSE, \"ddrawex\"}, //v2.03.71: hooking this library makes \"WhiteOut\" crash\n\t{FALSE, \"amstream\"},\n\t{FALSE, \"dplayx\"},\n\t{0, 0} // it seems necessary to also repeat the hook the main module ....\n};\n\nstatic void HookAdditionalModules()\n{\n\tfor(int i=0; i<ADDITIONAL_MODULE_COUNT; i++){\n\t\tif(!AddedModules[i].Hooked){ // if the module is not hooked yet...\n\t\t\tHMODULE hModule;\n\t\t\thModule=GetModuleHandle(AddedModules[i].ModuleName);\n\t\t\tif(hModule){ // --- and now it exists ...\n\t\t\t\tHookModule(hModule, 0); // ... then hook it and ..\n\t\t\t\tAddedModules[i].Hooked=TRUE; // .. mark it as already hooked\n\t\t\t\tOutTraceDW(\"CoCreateInstance: hooked module=%s hmodule=%x\\n\", AddedModules[i].ModuleName, hModule);\n\t\t\t\t//CloseHandle(hModule); // do NOT close this handle\n\t\t\t}\n\t\t}\n\t}\n}\n\n// -------------------------------------------------------------------------------------\n// Ole32 CoCreateInstance handling: you can create DirectDraw objects through it!\n// utilized so far in a single game: \"Axis & Allies\"\n// another one: \"Crusaders of Might and Magic\" ....\n// -------------------------------------------------------------------------------------\n\nextern void HookDDSession(LPDIRECTDRAW *, int); \n#if 0\ntypedef HRESULT (WINAPI *Initialize_Type)(LPDIRECTDRAW, GUID FAR *);\nextern Initialize_Type pInitialize;\nHRESULT WINAPI extInitialize1(LPDIRECTDRAW lpdd, GUID FAR *lpguid) { OutTrace(\"1\\n\"); HookDDSession(&lpdd, 1); return DD_OK; }\nHRESULT WINAPI extInitialize2(LPDIRECTDRAW lpdd, GUID FAR *lpguid) { OutTrace(\"2\\n\"); HookDDSession(&lpdd, 2); return DD_OK; }\nHRESULT WINAPI extInitialize4(LPDIRECTDRAW lpdd, GUID FAR *lpguid) { OutTrace(\"4\\n\"); HookDDSession(&lpdd, 4); return DD_OK; }\nHRESULT WINAPI extInitialize7(LPDIRECTDRAW lpdd, GUID FAR *lpguid) { OutTrace(\"7\\n\"); HookDDSession(&lpdd, 7); return DD_OK; }\n\nvoid HookDDSessionInitialize(LPDIRECTDRAW *lplpdd, int dxversion, Initialize_Type extInitialize)\n{\n\tOutTraceDW(\"Hooking directdraw Init dd=%x dxversion=%d pInit=%x\\n\", \n\t\t*lplpdd, dxversion, extInitialize);\n\tSetHook((void *)(**(DWORD **)lplpdd + 72), extInitialize, (void **)&pInitialize, \"Initialize(D)\");\n}\n#endif\n\nHRESULT STDAPICALLTYPE extCoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID FAR* ppv)\n{\n\tHRESULT res;\n\tOutTraceDW(\"CoCreateInstance: rclsid=%x UnkOuter=%x ClsContext=%x refiid=%x(%s)\\n\",\n\t\trclsid.Data1, pUnkOuter, dwClsContext, riid.Data1, ExplainGUID((GUID *)&riid));\n\n\tbRecursedHook = TRUE;\n\tres=(*pCoCreateInstance)(rclsid, pUnkOuter, dwClsContext, riid, ppv);\n\tbRecursedHook = FALSE;\n\tif(res) {\n\t\tOutTraceE(\"CoCreateInstance: ERROR res=%x\\n\", res);\n\t\treturn res;\n\t}\n\t\n\tOutTraceDW(\"CoCreateInstance: ppv=%x->%x\\n\", *ppv, *(DWORD *)*ppv);\n\n\tswitch (rclsid.Data1) {\n\t\tcase 0xD7B70EE0: // CLSID_DirectDraw:\n\t\t\t// v2.03.18: fixed\n\t\t\tOutTraceDW(\"CoCreateInstance: CLSID_DirectDraw object\\n\");\n\t\t\tswitch (*(DWORD *)&riid){\n\t\t\t\tLPDIRECTDRAW lpOldDDraw;\n\t\t\t\tcase 0x6C14DB80:\n\t\t\t\t\t// must go through DirectDrawCreate: needed for \"Darius Gaiden\"\n\t\t\t\t\tOutTraceDW(\"CoCreateInstance: IID_DirectDraw RIID\\n\");\n\t\t\t\t\tres=extDirectDrawCreate(NULL, &lpOldDDraw, 0);\n\t\t\t\t\tif(res)OutTraceDW(\"DirectDrawCreate: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\t\t\tres=lpOldDDraw->QueryInterface(IID_IDirectDraw, (LPVOID *)ppv);\n\t\t\t\t\tif(res)OutTraceDW(\"QueryInterface: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\t\t\tlpOldDDraw->Release();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0xB3A6F3E0:\n\t\t\t\t\tOutTraceDW(\"CoCreateInstance: IID_DirectDraw2 RIID\\n\");\n\t\t\t\t\tres=extDirectDrawCreate(NULL, &lpOldDDraw, 0);\n\t\t\t\t\tif(res)OutTraceDW(\"DirectDrawCreate: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\t\t\tres=lpOldDDraw->QueryInterface(IID_IDirectDraw2, (LPVOID *)ppv);\n\t\t\t\t\tif(res)OutTraceDW(\"QueryInterface: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\t\t\tlpOldDDraw->Release();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x9C59509A:\n\t\t\t\t\tOutTraceDW(\"CoCreateInstance: IID_DirectDraw4 RIID\\n\");\n\t\t\t\t\tres=extDirectDrawCreate(NULL, &lpOldDDraw, 0);\n\t\t\t\t\tif(res)OutTraceDW(\"DirectDrawCreate: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\t\t\tres=lpOldDDraw->QueryInterface(IID_IDirectDraw4, (LPVOID *)ppv);\n\t\t\t\t\tif(res)OutTraceDW(\"QueryInterface: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\t\t\tlpOldDDraw->Release();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x15E65EC0:\n\t\t\t\t\tOutTraceDW(\"CoCreateInstance: IID_DirectDraw7 RIID\\n\");\n\t\t\t\t\tres=extDirectDrawCreateEx(NULL, (LPDIRECTDRAW *)ppv, IID_IDirectDraw7, 0);\n\t\t\t\t\tif(res)OutTraceDW(\"DirectDrawCreateEx: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0xE436EBB3:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 0xA65B8071: // CLSID_DxDiagProvider:\n\t\t\tif ((rclsid.Data2==0x3BFE) && (rclsid.Data3 == 0x4213)){\n\t\t\tOutTraceDW(\"CoCreateInstance: CLSID_DxDiagProvider object\\n\");\n\t\t\t\tres=HookDxDiag(riid, ppv);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 0x47d4d946: // CLSID_DirectSound\n\t\t\tOutTraceDW(\"CoCreateInstance: CLSID_DirectSound object\\n\");\n\t\t\tHookDirectSoundObj((LPDIRECTSOUND *)ppv); \n\t\t\tbreak;\n\t\tcase 0x4fd2a832: // CLSID_DirectDrawFactory \n\t\t\tif ((rclsid.Data2==0x86c8) && (rclsid.Data3 == 0x11d0)){\n\t\t\t\tOutTraceDW(\"CoCreateInstance: CLSID_DirectDrawFactory object\\n\");\n\t\t\t\tHookDirectDrawFactory((void *)ppv);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\tHookAdditionalModules();\n\tOutTraceDW(\"CoCreateInstance: res=%x ppv=%x->%x\\n\", res, *ppv, *(DWORD *)*ppv);\n\treturn S_OK;\n}\n\nHRESULT STDAPICALLTYPE extCoCreateInstanceEx(REFCLSID rclsid, IUnknown *punkOuter, DWORD dwClsCtx, COSERVERINFO *pServerInfo, DWORD dwCount, MULTI_QI *pResults)\n{\n\tHRESULT res;\n\tDWORD i;\n\n\tOutTraceDW(\"CoCreateInstanceEx: rclsid=%x UnkOuter=%x ClsContext=%x Count=%d\\n\",\n\t\trclsid.Data1, punkOuter, dwClsCtx, dwCount);\n\n\tres=(*pCoCreateInstanceEx)(rclsid, punkOuter, dwClsCtx, pServerInfo, dwCount, pResults);\n\tif(res) {\n\t\tOutTraceE(\"CoCreateInstanceEx: ERROR res=%x\\n\", res);\n\t\treturn res;\n\t}\n\tif(bRecursedHook) return res;\n\n\tfor(i=0; i<dwCount; i++){\n\t\tLPVOID FAR* ppv;\n\t\tIID riid;\n\n\t\tif(pResults[i].hr) continue;\n\n\t\triid=*pResults[i].pIID;\n\t\tppv=(LPVOID *)pResults[i].pItf;\n\n\t\t// CLSID e436ebb3 implies loading quartz.dll to play movies through dshow:\n\t\t// quartz.dll must be hooked.\n\t\tswitch (rclsid.Data1) {\n\t\t\tcase 0xe436ebb3: \n\t\t\tHMODULE qlib;\n\t\t\tOutTraceDW(\"CoCreateInstanceEx: CLSID_FilterGraph RIID=%x\\n\", *(DWORD *)&riid);\n\t\t\tqlib=(*pLoadLibraryA)(\"quartz.dll\");\n\t\t\tOutTraceDW(\"CoCreateInstanceEx: quartz lib handle=%x\\n\", qlib);\n\t\t\tHookModule(qlib, 0);\n\t\t\t\tbreak;\n\t\t\tcase 0xD7B70EE0: // CLSID_DirectDraw:\n\t\t\textern void HookDDSession(LPDIRECTDRAW *, int); \n\t\t\t\tOutTraceDW(\"CoCreateInstanceEx: CLSID_DirectDraw object\\n\");\n\t\t\tswitch (*(DWORD *)&riid){\n\t\t\t\tLPDIRECTDRAW lpOldDDraw;\n\t\t\t\tcase 0x6C14DB80:\n\t\t\t\t\t\tOutTraceDW(\"CoCreateInstanceEx: IID_DirectDraw RIID\\n\");\n\t\t\t\t\tHookDDSession((LPDIRECTDRAW *)ppv, 1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0xB3A6F3E0:\n\t\t\t\t\t\tOutTraceDW(\"CoCreateInstanceEx: IID_DirectDraw2 RIID\\n\");\n\t\t\t\t\tres=extDirectDrawCreate(NULL, &lpOldDDraw, 0);\n\t\t\t\t\tif(res)OutTraceDW(\"DirectDrawCreate: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\t\t\tres=lpOldDDraw->QueryInterface(IID_IDirectDraw2, (LPVOID *)ppv);\n\t\t\t\t\tif(res)OutTraceDW(\"QueryInterface: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\t\t\tlpOldDDraw->Release();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x9C59509A:\n\t\t\t\t\t\tOutTraceDW(\"CoCreateInstanceEx: IID_DirectDraw4 RIID\\n\");\n\t\t\t\t\tres=extDirectDrawCreate(NULL, &lpOldDDraw, 0);\n\t\t\t\t\tif(res)OutTraceDW(\"DirectDrawCreate: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\t\t\tres=lpOldDDraw->QueryInterface(IID_IDirectDraw4, (LPVOID *)ppv);\n\t\t\t\t\tif(res)OutTraceDW(\"QueryInterface: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\t\t\tlpOldDDraw->Release();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x15E65EC0:\n\t\t\t\t\t\tOutTraceDW(\"CoCreateInstanceEx: IID_DirectDraw7 RIID\\n\");\n\t\t\t\t\tres=extDirectDrawCreateEx(NULL, (LPDIRECTDRAW *)ppv, IID_IDirectDraw7, 0);\n\t\t\t\t\tif(res)OutTraceDW(\"DirectDrawCreateEx: res=%x(%s)\\n\", res, ExplainDDError(res));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0xE436EBB3:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0xA65B8071: // CLSID_DxDiagProvider:\n\t\t\t\tif ((rclsid.Data2==0x3BFE) && (rclsid.Data3 == 0x4213)){\n\t\t\t\t\tOutTraceDW(\"CoCreateInstanceEx: CLSID_DxDiagProvider object\\n\");\n\t\t\t\t\tres=HookDxDiag(riid, ppv);\n\t\t\t\t}\n\t\t\tbreak;\n\t\t\tcase 0x4fd2a832: // CLSID_DirectDrawFactory \n\t\t\t\tif ((rclsid.Data2==0x86c8) && (rclsid.Data3 == 0x11d0)){\n\t\t\t\t\tOutTraceDW(\"CoCreateInstanceEx: CLSID_DirectDrawFactory object\\n\");\n\t\t\t\t\tHookDirectDrawFactory((LPDIRECTSOUND *)ppv);\n\t\t}\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tHookAdditionalModules();\n\tOutTraceDW(\"CoCreateInstanceEx: res=%x\\n\", res);\n\treturn res;\n}\n\nHRESULT WINAPI extCoInitialize(LPVOID pvReserved)\n{\n\tHRESULT res;\n\tOutTraceDW(\"CoInitialize: Reserved=%x\\n\", pvReserved);\n\tres=(*pCoInitialize)(pvReserved);\n\treturn res;\n}\n\nvoid WINAPI extCoUninitialize(void)\n{\n\tOutTraceDW(\"CoUninitialize\\n\");\n\t(*pCoUninitialize)();\n}"
  },
  {
    "path": "dll/opengl.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n#include \"stdio.h\"\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhook.h\"\n#include \"gl\\gl.h\"\n#include \"gl\\wglext.h\"\n#include \"gl\\glext.h\"\n\n#define DXWDECLARATIONS TRUE\n#include \"glhook.h\"\n#undef DXWDECLARATIONS\n\n#ifndef COMPRESSED_RGB_S3TC_DXT1_EXT\n#define COMPRESSED_RGB_S3TC_DXT1_EXT                   0x83F0\n#define COMPRESSED_RGBA_S3TC_DXT1_EXT                  0x83F1\n#define COMPRESSED_RGBA_S3TC_DXT3_EXT                  0x83F2\n#define COMPRESSED_RGBA_S3TC_DXT5_EXT                  0x83F3\n#endif\n\n//#include \"logall.h\"\n\ntypedef void (WINAPI *glutFullScreen_Type)(void);\nglutFullScreen_Type pglutFullScreen;\nvoid WINAPI extglutFullScreen(void);\ntypedef void (WINAPI *glutInitWindowSize_Type)(int, int);\nglutInitWindowSize_Type pglutInitWindowSize;\nvoid extglutInitWindowSize(int, int);\ntypedef void (WINAPI *glutInitWindowPosition_Type)(int, int);\nglutInitWindowPosition_Type pglutInitWindowPosition;\nvoid extglutInitWindowPosition(int, int);\ntypedef void (WINAPI *glutSetWindow_Type)(HWND);\nglutSetWindow_Type pglutSetWindow;\nvoid WINAPI extglutSetWindow(HWND);\ntypedef const GLubyte* (WINAPI *glGetString_Type)(GLenum);\nglGetString_Type pglGetString;\nconst GLubyte* WINAPI extglGetString(GLenum);\ntypedef char* (WINAPI *wglGetExtensionsStringEXT_Type)(void);\nwglGetExtensionsStringEXT_Type pwglGetExtensionsStringEXT;\nchar* WINAPI extwglGetExtensionsStringEXT(void);\ntypedef const GLubyte* (WINAPI *gluGetString_Type)(GLenum);\ngluGetString_Type pgluGetString;\nconst GLubyte* WINAPI extgluGetString(GLenum);\n\n//void WINAPI extglDrawPixels(GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);\n//typedef void (WINAPI *glDrawPixels_Type)(GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);\n//glDrawPixels_Type pglDrawPixels = NULL;\n\nstatic HookEntryEx_Type Hooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"glGetError\", NULL, (FARPROC *)&pglGetError, (FARPROC)extglGetError},\n\t{HOOK_IAT_CANDIDATE, 0, \"glViewport\", NULL, (FARPROC *)&pglViewport, (FARPROC)extglViewport},\n\t{HOOK_IAT_CANDIDATE, 0, \"glScissor\", NULL, (FARPROC *)&pglScissor, (FARPROC)extglScissor},\n\t{HOOK_IAT_CANDIDATE, 0, \"glGetIntegerv\", NULL, (FARPROC *)&pglGetIntegerv, (FARPROC)&extglGetIntegerv},\n\t{HOOK_IAT_CANDIDATE, 0, \"glDrawBuffer\", NULL, (FARPROC *)&pglDrawBuffer, (FARPROC)extglDrawBuffer},\n\t{HOOK_IAT_CANDIDATE, 0, \"glPolygonMode\", NULL, (FARPROC *)&pglPolygonMode, (FARPROC)extglPolygonMode},\n\t{HOOK_IAT_CANDIDATE, 0, \"glGetFloatv\", NULL, (FARPROC *)&pglGetFloatv, (FARPROC)extglGetFloatv},\n\t{HOOK_IAT_CANDIDATE, 0, \"glClear\", NULL, (FARPROC *)&pglClear, (FARPROC)extglClear},\n\t{HOOK_IAT_CANDIDATE, 0, \"glTexImage2D\", NULL, (FARPROC *)&pglTexImage2D, (FARPROC)extglTexImage2D},\n\t//{HOOK_IAT_CANDIDATE, 0, \"glDrawPixels\", NULL, (FARPROC *)&pglDrawPixels, (FARPROC)extglDrawPixels},\n\t{HOOK_IAT_CANDIDATE, 0, \"glPixelZoom\", NULL, (FARPROC *)&pglPixelZoom, (FARPROC)extglPixelZoom},\n\t//{HOOK_IAT_CANDIDATE, 0, \"glBegin\", NULL, (FARPROC *)&pglBegin, (FARPROC)extglBegin},\n\t{HOOK_IAT_CANDIDATE, 0, \"glBindTexture\", NULL, (FARPROC *)&pglBindTexture, (FARPROC)extglBindTexture},\n\t//{HOOK_IAT_CANDIDATE, 0, \"glCopyTexImage2D\", NULL, (FARPROC *)&pglCopyTexImage2D, (FARPROC)extglCopyTexImage2D},\n\t//{HOOK_IAT_CANDIDATE, 0, \"glPixelStorei\", NULL, (FARPROC *)&pglPixelStorei, (FARPROC)extglPixelStorei},\n\t{HOOK_IAT_CANDIDATE, 0, \"glGetString\", NULL, (FARPROC *)&pglGetString, (FARPROC)extglGetString},\n\t{HOOK_IAT_CANDIDATE, 0, \"wglCreateContext\", NULL, (FARPROC *)&pwglCreateContext, (FARPROC)extwglCreateContext},\n\t{HOOK_IAT_CANDIDATE, 0, \"wglMakeCurrent\", NULL, (FARPROC *)&pwglMakeCurrent, (FARPROC)extwglMakeCurrent},\n\t{HOOK_IAT_CANDIDATE, 0, \"wglGetProcAddress\", NULL, (FARPROC *)&pwglGetProcAddress, (FARPROC)extwglGetProcAddress},\n\t{HOOK_IAT_CANDIDATE, 0, \"wglGetExtensionsStringEXT\", NULL, (FARPROC *)&pwglGetExtensionsStringEXT, (FARPROC)extwglGetExtensionsStringEXT},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\n// to do:\n//\tglutInitDisplayMode\n//  glutCreateWindow,  glutCreateSubWindow\n//\tglutPositionWindow,  glutReshapeWindow\n//\tglGetFloatv ( GL_SCISSOR_BOX - GL_VIEWPORT )\n\nstatic HookEntryEx_Type GlutHooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"glutFullScreen\", NULL, (FARPROC *)&pglutFullScreen, (FARPROC)extglutFullScreen},\n\t{HOOK_IAT_CANDIDATE, 0, \"glutInitWindowSize\", NULL, (FARPROC *)&pglutInitWindowSize, (FARPROC)extglutInitWindowSize},\n\t{HOOK_IAT_CANDIDATE, 0, \"glutInitWindowPosition\", NULL, (FARPROC *)&pglutInitWindowPosition, (FARPROC)extglutInitWindowPosition},\n\t{HOOK_IAT_CANDIDATE, 0, \"glutSetWindow\", NULL, (FARPROC *)&pglutSetWindow, (FARPROC)extglutSetWindow},\n\t{HOOK_IAT_CANDIDATE, 0, \"gluGetString\", NULL, (FARPROC *)&pgluGetString, (FARPROC)extgluGetString},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nFARPROC Remap_gl_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tif(!(dxw.dwFlags2 & HOOKOPENGL)) return NULL; \n\tif (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\tif (dxw.dwFlags7 & HOOKGLUT32) if(addr=RemapLibraryEx(proc, hModule, GlutHooks)) return addr;\n\t// NULL -> keep the original call address\n\treturn NULL;\n}\n\nPROC Remap_wgl_ProcAddress(LPCSTR proc)\n{\n\tint i;\n\tHookEntryEx_Type *Hook;\n\tif(!(dxw.dwFlags2 & HOOKOPENGL)) return NULL; \n\tfor(i=0; Hooks[i].APIName; i++){\n\t\tHook=&Hooks[i];\n\t\tif (!strcmp(proc,Hook->APIName)){\n\t\t\tif (Hook->StoreAddress) { // avoid clearing function pointers\n\t\t\t\tPROC Addr = (*pwglGetProcAddress)(proc);\n\t\t\t\tif(Addr) *(Hook->StoreAddress)=Addr;\n\t\t\t}\n\t\t\tOutTraceDW(\"GetProcAddress: hooking proc=%s at addr=%x\\n\", ProcToString(proc), (Hook->StoreAddress) ? *(Hook->StoreAddress) : 0);\n\t\t\treturn Hook->HookerAddress;\n\t\t}\n\t}\n\t// NULL -> keep the original call address\n\treturn NULL;\n}\n\nvoid ForceHookOpenGL(HMODULE base) // to do .....\n{\n\tHMODULE hGlLib;\n\tstatic int DoOnce=FALSE;\n\n\tif(DoOnce) return;\n\tDoOnce = TRUE;\n\n\thGlLib=(*pLoadLibraryA)(\"OpenGL32.dll\");\n\tOutTrace(\"hGlLib=%x\\n\",hGlLib);\n\tif(!hGlLib){\n\t\tOutTraceE(\"LoadLibrary(\\\"OpenGL32.dll\\\") ERROR: err=%d at %d\\n\", GetLastError(), __LINE__);\n\t\treturn;\n\t}\n\n\tint i;\n\tHookEntryEx_Type *Hook;\n\tfor(i=0; Hooks[i].APIName; i++){\n\t\tHook=&Hooks[i];\n\t\tHook->OriginalAddress = GetProcAddress(hGlLib, Hook->APIName);\n\t\tif(Hook->OriginalAddress) {\n\t\t\tHookAPI(base, \"opengl32\", Hook->StoreAddress, Hook->APIName, Hook->HookerAddress);\n\t\t}\n\t}\n\treturn;\n}\n\nvoid HookOpenGL(HMODULE module, char *customlib)\n{\n\tif(!(dxw.dwFlags2 & HOOKOPENGL)) return;\n\n\tchar *DefOpenGLModule=\"OpenGL32.dll\";\n\n\tif (!customlib) customlib=DefOpenGLModule;\n\n\tOutTraceDW(\"HookOpenGL module=%x lib=\\\"%s\\\" forced=%x\\n\", module, customlib, (dxw.dwFlags3 & FORCEHOOKOPENGL)?1:0);\n\tif (dxw.dwFlags3 & FORCEHOOKOPENGL) \n\t\tForceHookOpenGL(module);\n\telse\n\t\tHookLibraryEx(module, Hooks, customlib);\n\n\tif(dxw.dwFlags7 & HOOKGLUT32) HookLibraryEx(module, GlutHooks, \"glut32.dll\");\n\n\treturn;\n}\n\nstatic char *ExplainTarget(GLint t)\n{\n\tchar *p;\n\tswitch(t){\n\t\tcase GL_TEXTURE_1D: p=\"GL_TEXTURE_1D\"; break;\n\t\tcase GL_TEXTURE_2D: p=\"GL_TEXTURE_2D\"; break;\n\t\tcase GL_TEXTURE_3D: p=\"GL_TEXTURE_3D\"; break;\n\t\tcase GL_PROXY_TEXTURE_2D: p=\"GL_PROXY_TEXTURE_2D\"; break;\n\t\tcase GL_TEXTURE_1D_ARRAY: p=\"GL_TEXTURE_1D_ARRAY\"; break;\n\t\tcase GL_PROXY_TEXTURE_1D_ARRAY: p=\"GL_PROXY_TEXTURE_1D_ARRAY\"; break;\n\t\tcase GL_TEXTURE_RECTANGLE: p=\"GL_TEXTURE_RECTANGLE\"; break;\n\t\tcase GL_PROXY_TEXTURE_RECTANGLE: p=\"GL_PROXY_TEXTURE_RECTANGLE\"; break;\n\t\tcase GL_TEXTURE_CUBE_MAP_POSITIVE_X: p=\"GL_TEXTURE_CUBE_MAP_POSITIVE_X\"; break;\n\t\tcase GL_TEXTURE_CUBE_MAP_NEGATIVE_X: p=\"GL_TEXTURE_CUBE_MAP_NEGATIVE_X\"; break;\n\t\tcase GL_TEXTURE_CUBE_MAP_POSITIVE_Y: p=\"GL_TEXTURE_CUBE_MAP_POSITIVE_Y\"; break;\n\t\tcase GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: p=\"GL_TEXTURE_CUBE_MAP_NEGATIVE_Y\"; break;\n\t\tcase GL_TEXTURE_CUBE_MAP_POSITIVE_Z: p=\"GL_TEXTURE_CUBE_MAP_POSITIVE_Z\"; break;\n\t\tcase GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: p=\"GL_TEXTURE_CUBE_MAP_NEGATIVE_Z\"; break;\n\t\tcase GL_TEXTURE_CUBE_MAP: p=\"GL_TEXTURE_CUBE_MAP\"; break;\n\t\tdefault: p=\"???\"; break;\n\t}\n\treturn p;\n}\n\nGLenum WINAPI extglGetError()\n{\n\t// to avoid dependencies on opengl32.dll\n\tif (pglGetError) return (*pglGetError)();\n\treturn GL_NO_ERROR;\n}\n\nvoid WINAPI extglViewport(GLint  x,  GLint  y,  GLsizei  width,  GLsizei  height)\n{\n\tRECT client;\n\tPOINT p={0,0};\n\tHWND hwnd;\n\tOutTraceOGL(\"glViewport: pos=(%d,%d) size=(%d,%d)\\n\", x, y, width, height);\n\thwnd=dxw.GethWnd();\n\t(*pGetClientRect)(hwnd, &client);\n\tif(IsDebug) OutTrace(\"glViewport: DEBUG hwnd=%x win=(%d,%d) screen=(%d,%d)\\n\",\n\t\thwnd, client.right, client.bottom, dxw.GetScreenWidth(), dxw.GetScreenHeight());\n\tif(x==CW_USEDEFAULT) x=0;\n\tif(y==CW_USEDEFAULT) y=0;\n\tx = (x * (GLint)client.right) / (GLint)dxw.GetScreenWidth();\n\ty = (y * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight();\n\twidth = (width * (GLint)client.right) / (GLint)dxw.GetScreenWidth();\n\theight = (height * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight();\n\tOutTraceDW(\"glViewport: remapped pos=(%d,%d) size=(%d,%d)\\n\", x, y, width, height);\n\t(*pglViewport)(x, y, width, height);\n}\n\nvoid WINAPI extglScissor(GLint  x,  GLint  y,  GLsizei  width,  GLsizei  height)\n{\n\tRECT client;\n\tPOINT p={0,0};\n\t//if (dxw.dwFlags2 & HANDLEFPS) if(dxw.HandleFPS()) return;\n\t(*pGetClientRect)(dxw.GethWnd(), &client);\n\tOutTraceOGL(\"glScissor: pos=(%d,%d) size=(%d,%d)\\n\", x, y, width, height);\n\tx = (x * (GLint)client.right) / (GLint)dxw.GetScreenWidth();\n\ty = (y * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight();\n\twidth = (width * (GLint)client.right) / (GLint)dxw.GetScreenWidth();\n\theight = (height * (GLint)client.bottom) / (GLint)dxw.GetScreenHeight();\n\tOutTraceDW(\"glScissor: remapped pos=(%d,%d) size=(%d,%d)\\n\", x, y, width, height);\n\t(*pglScissor)(x, y, width, height);\n}\n\nvoid WINAPI extglGetIntegerv(GLenum pname, GLint *params)\n{\n\t(*pglGetIntegerv)(pname, params);\n\tOutTraceB(\"glGetIntegerv: pname=%d\\n\", pname);\n\tif(pname == GL_VIEWPORT){\n\t\tRECT client;\n\t\tOutTraceDW(\"glGetIntegerv(GL_VIEWPORT): pos=(%i,%i) siz=(%i,%i)\\n\", params[0], params[1], params[2], params[3]);\n\t\t(*pGetClientRect)(dxw.GethWnd(), &client);\n\t\tparams[0] = (params[0] * dxw.GetScreenWidth()) / client.right;\n\t\tparams[1] = (params[1] * dxw.GetScreenHeight()) / client.bottom;\n\t\tparams[2] = (params[2] * dxw.GetScreenWidth()) / client.right;\n\t\tparams[3] = (params[3] * dxw.GetScreenHeight()) / client.bottom;\n\t\tOutTraceDW(\"glGetIntegerv(GL_VIEWPORT): FIXED pos=(%i,%i) siz=(%i,%i)\\n\", params[0], params[1], params[2], params[3]);\n\t}\n}\n\nvoid WINAPI extglDrawBuffer(GLenum mode)\n{\n\tif (IsDebug) OutTrace(\"glDrawBuffer: mode=%x\\n\", mode);\n\tif(dxw.dwFlags2 & WIREFRAME) (*pglClear)(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT) ; // clear screen for wireframe mode....\n\t// handle FPS only to backbuffer updates (if stereo, on left backbuffer...)\n\t// using the frontbuffer seems less reliable: Return to Castle Wolfenstein doesn't use it at all!\n\tif (dxw.dwFlags2 & HANDLEFPS){\n\t\tswitch (mode){\n\t\t\t//case GL_FRONT_LEFT:\n\t\t\tcase GL_BACK_LEFT:\n\t\t\t//case GL_FRONT:\n\t\t\tcase GL_BACK:\n\t\t\tcase GL_LEFT:\n\t\t\tcase GL_FRONT_AND_BACK:\n\t\t\t\tif(dxw.HandleFPS()) return;\n\t\t}\n\t}\n\t(*pglDrawBuffer)(mode);\n\tdxw.ShowOverlay();\n}\n\nvoid WINAPI extglPolygonMode(GLenum face, GLenum mode)\n{\n\tOutTraceOGL(\"glPolygonMode: face=%x mode=%x\\n\", face, mode);\n\t//OutTraceDW(\"glPolygonMode: extglPolygonMode=%x pglPolygonMode=%x\\n\", extglPolygonMode, pglPolygonMode);\n\tif(dxw.dwFlags2 & WIREFRAME) {\n\t\tOutTraceDW(\"glPolygonMode: WIREFRAME forcind mode=GL_LINE\\n\");\n\t\tmode = GL_LINE; // trick to set wireframe mode....\n\t}\n\t(*pglPolygonMode)(face, mode);\n\treturn;\n}\n\nvoid WINAPI extglGetFloatv(GLenum pname, GLboolean *params)\n{\n\tOutTraceOGL(\"glGetFloatv: pname=%x\\n\", pname);\n\t(*pglGetFloatv)(pname, params);\n\treturn;\n}\n\nvoid WINAPI extglClear(GLbitfield mask)\n{\n\t(*pglClear)(mask);\n\treturn;\n}\n\n//BEWARE: SetPixelFormat must be issued on the same hdc used by OpenGL wglCreateContext, otherwise \n// a failure err=2000 ERROR INVALID PIXEL FORMAT occurs!!\n\nHGLRC WINAPI extwglCreateContext(HDC hdc)\n{\n\tHGLRC ret;\n\tOutTraceOGL(\"wglCreateContext: hdc=%x\\n\", hdc);\n\t// v2.02.31: don't let it use desktop hdc\n\tif(dxw.IsRealDesktop(WindowFromDC(hdc))){\n\t\tHDC oldhdc = hdc;\n\t\thdc=(*pGDIGetDC)(dxw.GethWnd());\n\t\tOutTraceDW(\"wglCreateContext: remapped desktop hdc=%x->%x hWnd=%x\\n\", oldhdc, hdc, dxw.GethWnd());\n\t}\n\tret=(*pwglCreateContext)(hdc);\n\tif(ret){\n\t\tHWND hwnd;\n\t\thwnd=WindowFromDC(hdc);\n\t\tdxw.SethWnd(hwnd);\n\t\tOutTraceDW(\"wglCreateContext: SET hwnd=%x\\n\", hwnd);\n\t}\n\telse {\n\t\tOutTraceDW(\"wglCreateContext: ERROR err=%d\\n\", GetLastError());\n\t}\n\treturn ret;\n}\n\nPROC WINAPI extwglGetProcAddress(LPCSTR proc)\n{\n\tPROC procaddr;\n\n\tOutTraceOGL(\"wglGetProcAddress: proc=%s\\n\", proc);\n\tprocaddr=Remap_wgl_ProcAddress(proc);\n\tif (!procaddr) procaddr=(*pwglGetProcAddress)(proc);\n\treturn procaddr;\n}\n\nBOOL WINAPI extwglMakeCurrent(HDC hdc, HGLRC hglrc)\n{\n\tBOOL ret;\n\n\tOutTraceOGL(\"wglMakeCurrent: hdc=%x hglrc=%x\\n\", hdc, hglrc);\n\t// v2.02.31: don't let it use desktop hdc\n\tif(dxw.IsDesktop(WindowFromDC(hdc))){\n\t\tHDC oldhdc = hdc;\n\t\thdc=(*pGDIGetDC)(dxw.GethWnd());\n\t\tOutTraceDW(\"wglMakeCurrent: remapped desktop hdc=%x->%x\\n\", oldhdc, hdc);\n\t}\n\tret=(*pwglMakeCurrent)(hdc, hglrc);\n\tif(ret){\n\t\tHWND hWnd;\n\t\thWnd = WindowFromDC(hdc);\n\t\tOutTraceDW(\"wglMakeCurrent: setting hwnd=%x\\n\", hWnd);\n\t\tdxw.SethWnd(hWnd);\n\t}\n\treturn ret;\n}\n\nstatic unsigned int Hash(BYTE *buf, int len)\n{\n   unsigned int b    = 378551;\n   unsigned int a    = 63689;\n   DWORD hash = 0;\n   for(int i = 0; i < len; i++){\n      hash = hash * a + buf[i];\n      a    = a * b;\n   }\n   return hash;\n}\n\nstatic void glTextureDump(GLint internalFormat, GLenum Format, GLsizei w, GLsizei h, GLenum type, const GLvoid * data)\n{\n\tint iSurfaceSize, iScanLineSize;\n\tstatic int MinTexX, MinTexY, MaxTexX, MaxTexY;\n\tstatic BOOL DoOnce = TRUE;\n\tchar pszFile[MAX_PATH];\n\tWORD dwRGBBitCount;\n\tDWORD dwRBitMask, dwGBitMask, dwBBitMask, dwABitMask;\n\tchar *sType;\n\n\tif(DoOnce){\n\t\tchar sProfilePath[MAX_PATH];\n\t\tsprintf_s(sProfilePath, MAX_PATH, \"%s\\\\dxwnd.ini\", GetDxWndPath());\n\t\tMinTexX=GetPrivateProfileInt(\"Texture\", \"MinTexX\", 0, sProfilePath);\n\t\tMaxTexX=GetPrivateProfileInt(\"Texture\", \"MaxTexX\", 0, sProfilePath);\n\t\tMinTexY=GetPrivateProfileInt(\"Texture\", \"MinTexY\", 0, sProfilePath);\n\t\tMaxTexY=GetPrivateProfileInt(\"Texture\", \"MaxTexY\", 0, sProfilePath);\n\t\tOutTrace(\"TextureDump: size min=(%dx%d) max=(%dx%d)\\n\", MinTexX, MinTexY, MaxTexX, MaxTexY);\n\t\tsprintf_s(pszFile, MAX_PATH, \"%s\\\\texture.out\", GetDxWndPath());\n\t\tCreateDirectory(pszFile, NULL);\n\t\tDoOnce = FALSE;\n\t}\n\n\tif((MinTexX && (w<MinTexX)) || (MinTexY && (h<MinTexY))) {\n\t\tOutTrace(\"TextureDump: SKIP small texture\\n\");\n\t\treturn;\n\t}\n\tif((MaxTexX && (w>MaxTexX)) || (MaxTexY && (h>MaxTexY))) {\n\t\tOutTrace(\"TextureDump: SKIP big texture\\n\");\n\t\treturn;\n\t}\n\n\tswitch(internalFormat){\n\t\tcase GL_TRIANGLES: break; // the only safe for now ....\n\t\tcase GL_QUADS: \n\t\tcase GL_RGB:  // from \"Alone in the Dark the new nightmare\" .....\n\t\tcase GL_RGBA:  \n\t\tdefault: return; \n\t}\n\n\t// temporary ....\n\t\t\t\t\tdwRBitMask = 0x000000FF;\n\t\t\t\t\tdwGBitMask = 0x0000FF00;\n\t\t\t\t\tdwBBitMask = 0x00FF0000;\n\t\t\t\t\tdwABitMask = 0xFF000000;\n\t\t\t\t\tdwRGBBitCount = 32;\n\n\t// format: GL_RED?, GL_GREEN?, GL_BLUE?, GL_RG?, GL_RGB?, GL_BGR?, GL_RGBA?, GL_BGRA\n\t// type: GL_UNSIGNED_BYTE?, GL_BYTE?, GL_UNSIGNED_SHORT?, GL_SHORT?, GL_UNSIGNED_INT?, GL_INT?, \n\t// GL_FLOAT?, GL_UNSIGNED_BYTE_3_3_2?, GL_UNSIGNED_BYTE_2_3_3_REV?, GL_UNSIGNED_SHORT_5_6_5?, GL_UNSIGNED_SHORT_5_6_5_REV?,\n\t// GL_UNSIGNED_SHORT_4_4_4_4?, GL_UNSIGNED_SHORT_4_4_4_4_REV?, GL_UNSIGNED_SHORT_5_5_5_1?, GL_UNSIGNED_SHORT_1_5_5_5_REV?, \n\t// GL_UNSIGNED_INT_8_8_8_8?, GL_UNSIGNED_INT_8_8_8_8_REV?, GL_UNSIGNED_INT_10_10_10_2?, GL_UNSIGNED_INT_2_10_10_10_REV\n\tsType = \"unknown\";\n\tdwRGBBitCount = 0;\n\tswitch(Format){\n\t\tcase GL_RGB:\n\t\tcase GL_RGBA:\n\t\t\tswitch(type){\n\t\t\t\tcase GL_BYTE:\n\t\t\t\tcase GL_UNSIGNED_BYTE: // Daikatana, Doom 3\n\t\t\t\t\tdwRBitMask = 0x000000FF;\n\t\t\t\t\tdwGBitMask = 0x0000FF00;\n\t\t\t\t\tdwBBitMask = 0x00FF0000;\n\t\t\t\t\tdwABitMask = (Format == GL_RGBA) ? 0xFF000000 : 0x00000000;\n\t\t\t\t\tdwRGBBitCount = 32;\n\t\t\t\t\tsType = (Format == GL_RGBA) ? \"RGBA888\" : \"RGB888\";\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase GL_BGR:\n\t\tcase GL_BGRA:\n\t\t\tswitch(type){\n\t\t\t\tcase GL_BYTE:\n\t\t\t\tcase GL_UNSIGNED_BYTE: // ???\n\t\t\t\t\tdwRBitMask = 0x00FF0000;\n\t\t\t\t\tdwGBitMask = 0x0000FF00;\n\t\t\t\t\tdwBBitMask = 0x000000FF;\n\t\t\t\t\tdwABitMask = (Format == GL_RGBA) ? 0xFF000000 : 0x00000000;\n\t\t\t\t\tdwRGBBitCount = 32;\n\t\t\t\t\tsType = (Format == GL_RGBA) ? \"RGBA888\" : \"RGB888\";\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\tif(!dwRGBBitCount) return;\n\tiSurfaceSize = w * h;\n\n\twhile (TRUE) {\n\t\tFILE *hf;\n\t\tBITMAPFILEHEADER hdr;       // bitmap file-header \n\t\tBITMAPV4HEADER pbi;\t\t\t// bitmap info-header  \n\n\t\tmemset((void *)&pbi, 0, sizeof(BITMAPV4HEADER));\n\t\tpbi.bV4Size = sizeof(BITMAPV4HEADER); \n\t\tpbi.bV4Width = w;\n\t\tpbi.bV4Height = h;\n\t\tpbi.bV4BitCount = dwRGBBitCount;\n\t\tpbi.bV4SizeImage = ((w * dwRGBBitCount + 0x1F) & ~0x1F)/8 * h; \n\t\tpbi.bV4Height = - h;\n\t\tpbi.bV4Planes = 1;\n\t\tpbi.bV4V4Compression = BI_BITFIELDS;\n\t\tif(pbi.bV4BitCount == 8) pbi.bV4V4Compression = BI_RGB;\n\t\tpbi.bV4XPelsPerMeter = 1;\n\t\tpbi.bV4YPelsPerMeter = 1;\n\t\tpbi.bV4ClrUsed = 0;\n\t\tif(pbi.bV4BitCount == 8) pbi.bV4ClrUsed = 256;\n\t\tpbi.bV4ClrImportant = 0;\n\t\tpbi.bV4RedMask = dwRBitMask;\n\t\tpbi.bV4GreenMask = dwGBitMask;\n\t\tpbi.bV4BlueMask = dwBBitMask;\n\t\tpbi.bV4AlphaMask = dwABitMask;\n\t\tpbi.bV4CSType = LCS_CALIBRATED_RGB;\n\t\tiScanLineSize = ((w * dwRGBBitCount + 0x1F) & ~0x1F)/8; \n\n\t\t// calculate the bitmap hash\n\t\tOutTraceB(\"glTextureDump: hash linesize=%d h=%d\\n\", iScanLineSize, h);\n\t\tDWORD hash = Hash((BYTE *)data, iScanLineSize * h);\n\t\t\n\t\t// Create the .BMP file. \n\t\t//sprintf_s(pszFile, MAX_PATH, \"%s\\\\texture.out\\\\texture.%03d.%03d.%s.%08X.bmp\", \n\t\t//\tGetDxWndPath(), w, h, sType, hash);\n\t\tsprintf_s(pszFile, MAX_PATH, \"%s\\\\texture.out\\\\texture.I%x.F%x.T%x.%03d.%03d.%08X.bmp\", \n\t\t\tGetDxWndPath(), internalFormat, Format, type, w, h, hash);\n\t\tOutTrace(\"writing to %s\\n\", pszFile);\n\t\thf = fopen(pszFile, \"wb\");\n\t\tif(!hf) break;\n\n\t\thdr.bfType = 0x4d42;        // 0x42 = \"B\" 0x4d = \"M\"  \n\t\t// Compute the size of the entire file.  \n\t\thdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof(RGBQUAD) + pbi.bV4SizeImage); \n\t\thdr.bfReserved1 = 0; \n\t\thdr.bfReserved2 = 0; \n\n\t\t// Compute the offset to the array of color indices.  \n\t\thdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + pbi.bV4Size + pbi.bV4ClrUsed * sizeof (RGBQUAD); \n\n\t\t// Copy the BITMAPFILEHEADER into the .BMP file.  \n\t\tfwrite((LPVOID)&hdr, sizeof(BITMAPFILEHEADER), 1, hf);\n\n\t\t// Copy the BITMAPINFOHEADER array into the file.  \n\t\tfwrite((LPVOID)&pbi, sizeof(BITMAPV4HEADER), 1, hf);\n\n\t\t// Copy the array of color indices into the .BMP file.  \n\t\t//for(int y=0; y<(int)ddsd.dwHeight; y++)\n\t\t//\tfwrite((BYTE *)ddsd.lpSurface + (y*ddsd.lPitch), iScanLineSize, 1, hf);\n\t\tfwrite((BYTE *)data, iScanLineSize, h, hf);\n\n\t\t// Close the .BMP file.  \n\t\tfclose(hf);\n\t\tbreak;\n\t}\n}\n\n\nvoid WINAPI extglTexImage2D(\n\tGLenum target,\n  \tGLint level,\n  \tGLint internalFormat,\n  \tGLsizei width,\n  \tGLsizei height,\n  \tGLint border,\n  \tGLenum format,\n  \tGLenum type,\n  \tconst GLvoid * data)\n{\n\tOutTraceOGL(\"glTexImage2D: TEXTURE target=%x(%s) level=%x internalformat=%x format=%x type=%x size=(%dx%d)\\n\", \n\t\ttarget, ExplainTarget(target), level, internalFormat, format, type, width, height);\n\n\tswitch(target){\n\t\t//case GL_PROXY_TEXTURE_RECTANGLE:\n\t\t//case GL_PROXY_TEXTURE_2D:\n\t\tcase GL_TEXTURE_2D:\n\t\tcase GL_TEXTURE_RECTANGLE:\n\t\t\tswitch(dxw.dwFlags5 & TEXTUREMASK){\n\t\t\t\tdefault:\n\t\t\t\tcase TEXTUREHIGHLIGHT: \n\t\t\t\t\t//glTextureHighlight(s);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TEXTUREDUMP: \n\t\t\t\t\tglTextureDump(internalFormat, format, width, height, type, data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TEXTUREHACK:\n\t\t\t\t\t//glTextureHack(...);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TEXTURETRANSP:\n\t\t\t\t\t//glTextureTransp(...);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\tif(dxw.dwFlags4 & NOTEXTURES) return;\n\n\treturn (*pglTexImage2D)(target, level, internalFormat, width, height, border, format, type, data);\n}\n\nvoid WINAPI extglCopyTexImage2D(\n\tGLenum target,\n  \tGLint level,\n  \tGLenum internalFormat,\n  \tGLint x,\n  \tGLint y,\n  \tGLsizei width,\n  \tGLsizei height,\n  \tGLint border)\n{\n\tOutTraceOGL(\"glCopyTexImage2D: TEXTURE target=%x(%s) level=%x internalformat=%x pos=(%d,%d) size=(%dx%d) border=%d\\n\", \n\t\ttarget, ExplainTarget(target), level, internalFormat, x, y, width, height, border);\n\n\tswitch(target){\n\t\t//case GL_PROXY_TEXTURE_RECTANGLE:\n\t\t//case GL_PROXY_TEXTURE_2D:\n\t\tcase GL_TEXTURE_2D:\n\t\tcase GL_TEXTURE_RECTANGLE:\n\t\t\tswitch(dxw.dwFlags5 & TEXTUREMASK){\n\t\t\t\tdefault:\n\t\t\t\tcase TEXTUREHIGHLIGHT: \n\t\t\t\t\t//glTextureHighlight(s);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TEXTUREDUMP: \n\t\t\t\t\t//glTextureDump(internalFormat, 0, width, height, 0, glGet(GL_READ_BUFFER));\n\t\t\t\t\tbreak;\n\t\t\t\tcase TEXTUREHACK:\n\t\t\t\t\t//glTextureHack(...);\n\t\t\t\t\tbreak;\n\t\t\t\tcase TEXTURETRANSP:\n\t\t\t\t\t//glTextureTransp(...);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\tif(dxw.dwFlags4 & NOTEXTURES) return;\n\n\treturn (*pglCopyTexImage2D)(target, level, internalFormat, x, y, width, height, border);\n}\n\n#if 0\nchar *ExplainDrawPixelsFormat(DWORD c)\n{\n\tstatic char *eb;\n\tswitch(c)\n\t{\n\t\tcase GL_COLOR_INDEX: \t\t\t\teb=\"GL_COLOR_INDEX\"; break;\n\t\tcase GL_STENCIL_INDEX: \t\t\t\teb=\"GL_STENCIL_INDEX\"; break;\n\t\tcase GL_DEPTH_COMPONENT: \t\t\teb=\"GL_DEPTH_COMPONENT\"; break;\n\t\tcase GL_RGB: \t\t\t\t\t\teb=\"GL_RGB\"; break;\n\t\tcase GL_BGR: \t\t\t\t\t\teb=\"GL_BGR\"; break;\n\t\tcase GL_RGBA: \t\t\t\t\t\teb=\"GL_RGBA\"; break;\n\t\tcase GL_BGRA: \t\t\t\t\t\teb=\"GL_BGRA\"; break;\n\t\tcase GL_RED: \t\t\t\t\t\teb=\"GL_RED\"; break;\n\t\tcase GL_GREEN: \t\t\t\t\t\teb=\"GL_GREEN\"; break;\n\t\tcase GL_BLUE: \t\t\t\t\t\teb=\"GL_BLUE\"; break;\n\t\tcase GL_ALPHA: \t\t\t\t\t\teb=\"GL_ALPHA\"; break;\n\t\tcase GL_LUMINANCE: \t\t\t\t\teb=\"GL_LUMINANCE\"; break;\n\t\tcase GL_LUMINANCE_ALPHA: \t\t\teb=\"GL_LUMINANCE_ALPHA\"; break;\n\t\tdefault: \t\t\t\t\t\t\teb=\"unknown\"; break;\n\t}\n\treturn eb;\n}\n\nvoid WINAPI extglDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *data)\n{\n\tGLenum glerr;\n\tOutTraceDW(\"glDrawPixels: size=(%dx%d) format=%x(%s) type=%d data=%x\\n\", \n\t\twidth, height, format, ExplainDrawPixelsFormat(format), type, data);\n\n\t(*pglDrawPixels)(width, height, format, type, data);\n\tif ((glerr=extglGetError())!= GL_NO_ERROR) OutTraceE(\"GLERR %d ad %d\\n\", glerr, __LINE__);\n\treturn;\n}\n#endif\n\nvoid WINAPI extglPixelZoom(GLfloat xfactor, GLfloat yfactor)\n{\n\tGLenum glerr;\n\tOutTraceOGL(\"glPixelZoom: x,y factor=(%f,%f)\\n\", xfactor, yfactor);\n\n\tif(dxw.dwFlags6 & FIXPIXELZOOM){\n\t\tRECT desktop;\n\t\t(*pGetClientRect)(dxw.GethWnd(), &desktop);\n\t\txfactor = (xfactor * desktop.right) / dxw.GetScreenWidth();\n\t\tyfactor = (yfactor * desktop.bottom) / dxw.GetScreenHeight();\n\t\tOutTraceDW(\"glPixelZoom: FIXED x,y factor=(%f,%f)\\n\", xfactor, yfactor);\n\t}\n\t(*pglPixelZoom)(xfactor, yfactor);\n\tif ((glerr=extglGetError())!= GL_NO_ERROR) OutTraceE(\"GLERR %d ad %d\\n\", glerr, __LINE__);\n\treturn;\n}\n\nvoid WINAPI extglBegin(GLenum mode)\n{\n\tGLenum glerr;\n\tOutTraceOGL(\"glBegin: mode=%x\\n\", mode);\n\n\t//if(mode == GL_QUADS) mode = GL_TRIANGLES;\n\t(*pglBegin)(mode);\n\tif ((glerr=extglGetError())!= GL_NO_ERROR) OutTraceE(\"GLERR %d ad %d\\n\", glerr, __LINE__);\n\treturn;\n}\n\nvoid WINAPI extglBindTexture(GLenum target, GLuint texture)\n{\n\tGLenum glerr;\n\tOutTraceOGL(\"glBindTexture: target=%x(%s) texture=%x\\n\", target, ExplainTarget(target), texture);\n\n\tif(dxw.dwFlags7 & FIXBINDTEXTURE) {\n\t\tstatic GLuint uiLastTex = 0;\n\t\tif(uiLastTex) (*pglBindTexture)(target, 0);\n\t\tuiLastTex = texture;\n\t}\n\n\t(*pglBindTexture)(target, texture);\n\tif ((glerr=extglGetError())!= GL_NO_ERROR) OutTraceE(\"GLERR %d ad %d\\n\", glerr, __LINE__);\n\treturn;\n}\n\nvoid WINAPI extglPixelStorei(GLenum pname,  GLint param)\n{\n\tGLenum glerr;\n\tOutTraceOGL(\"glPixelStorei: pname=%x param=%x\\n\", pname, param);\n\n\t(*pglPixelStorei)(pname, param);\n\tif ((glerr=extglGetError())!= GL_NO_ERROR) OutTrace(\"GLERR %d ad %d\\n\", glerr, __LINE__);\n\treturn;\n}\n\nvoid WINAPI extglutFullScreen(void)\n{\n\tOutTraceOGL(\"glutFullScreen: void\\n\");\n\tif(!dxw.Windowize) return (*pglutFullScreen)();\n\tOutTraceDW(\"glutFullScreen BYPASS\\n\");\n\tdxw.SetFullScreen(TRUE);\n}\n\nvoid extglutInitWindowSize(int width, int height)\n{\n\tint dummy1, dummy2;\n\tOutTraceOGL(\"glutInitWindowSize: size=(%dx%d)\\n\", width, height);\n\tif(dxw.Windowize){\n\t\tdummy1=0;\n\t\tdummy2=0;\n\t\tdxw.MapWindow(&dummy1, &dummy2, &width, &height);\t\n\t\tOutTraceDW(\"glutInitWindowSize: FIXED width=%d height=%d\\n\", width, height);\n\t}\n\t(*pglutInitWindowSize)(width, height);\n}\n\nvoid extglutInitWindowPosition(int x, int y)\n{\n\tint dummy1, dummy2;\n\tOutTraceOGL(\"glutInitWindowPosition: pos=(%d,%d)\\n\", x, y);\n\tif(dxw.Windowize){\n\t\tdummy1=0;\n\t\tdummy2=0;\n\t\tdxw.MapWindow(&x, &y, &dummy1, &dummy2);\n\t\tOutTraceDW(\"glutInitWindowPosition: FIXED pos=(%d,%d)\\n\", x, y);\n\t}\n\t(*pglutInitWindowPosition)(x, y);\n}\n\nvoid WINAPI extglutSetWindow(HWND win)\n{\n\tOutTraceOGL(\"glutSetWindow: win=%x\\n\", win);\n\tif(dxw.Windowize && dxw.IsRealDesktop(win)) win=dxw.GethWnd();\n\t(*pglutSetWindow)(win);\n}\n\nstatic char *glStringName(GLenum name)\n{\n\tchar *ret;\n\tswitch(name){\n\t\tcase GL_VENDOR: ret=\"GL_VENDOR\"; break;\n\t\tcase GL_RENDERER: ret=\"GL_RENDERER\"; break;\n\t\tcase GL_VERSION: ret=\"GL_VERSION\"; break;\n\t\tcase GL_SHADING_LANGUAGE_VERSION: ret=\"GL_SHADING_LANGUAGE_VERSION\"; break;\n\t\tcase GL_EXTENSIONS: ret=\"GL_EXTENSIONS\"; break;\n\t\tdefault: ret=\"unknown\"; break;\n\t}\n\treturn ret;\n}\n\nconst  GLubyte* WINAPI extglGetString(GLenum name)\n{\n\tconst GLubyte* ret;\n\tOutTraceOGL(\"glGetString: name=%s\\n\", name);\n\tret = (*pglGetString)(name);\n\tif(IsTraceDW){\n\t\tif(strlen((const char *)ret)<80)\n\t\t\tOutTrace(\"glGetString: name=%x(%s) ret=\\\"%.80s\\\"\\n\", name, glStringName(name), ret);\n\t\telse{\n\t\t\tconst GLubyte *p = ret;\n\t\t\tOutTrace(\"glGetString: name=%x(%s) ret=(%d)\\n\", name, glStringName(name), strlen((const char *)ret));\n\t\t\twhile(strlen((const char *)p)>80){\n\t\t\t\tOutTrace(\"glGetString: \\\"%.80s\\\" +\\n\", p);\n\t\t\t\tp += 80;\n\t\t\t}\n\t\t\tOutTrace(\"glGetString: \\\"%.80s\\\"\\n\", p);\n\t\t}\n\t}\n\treturn ret;\n}\n\nchar* WINAPI extwglGetExtensionsStringEXT(void)\n{\n\tchar *ret;\n\tOutTraceOGL(\"wglGetExtensionsStringEXT: void\\n\");\n\tret = (*pwglGetExtensionsStringEXT)();\n\tif(IsTraceDW){\n\t\tif(strlen((const char *)ret)<80)\n\t\t\tOutTrace(\"wglGetExtensionsStringEXT: ret=\\\"%.80s\\\"\\n\", ret);\n\t\telse{\n\t\t\tconst char *p = ret;\n\t\t\tOutTrace(\"wglGetExtensionsStringEXT: ret=(%d)\\n\", strlen((const char *)ret));\n\t\t\twhile(strlen((const char *)p)>80){\n\t\t\t\tOutTrace(\"wglGetExtensionsStringEXT: \\\"%.80s\\\" +\\n\", p);\n\t\t\t\tp += 80;\n\t\t\t}\n\t\t\tOutTrace(\"wglGetExtensionsStringEXT: \\\"%.80s\\\"\\n\", p);\n\t\t}\n\t}\n\treturn ret;\n}\n\nconst GLubyte* WINAPI extgluGetString(GLenum name)\n{\n\tconst GLubyte* ret;\n\tOutTraceOGL(\"gluGetString: name=%s\\n\", name);\n\tret = (*pgluGetString)(name);\n\tif(IsTraceDW){\n\t\tif(strlen((const char *)ret)<80)\n\t\t\tOutTrace(\"gluGetString: name=%x(%s) ret=\\\"%.80s\\\"\\n\", name, glStringName(name), ret);\n\t\telse{\n\t\t\tconst GLubyte *p = ret;\n\t\t\tOutTrace(\"gluGetString: name=%x(%s) ret=(%d)\\n\", name, glStringName(name), strlen((const char *)ret));\n\t\t\twhile(strlen((const char *)p)>80){\n\t\t\t\tOutTrace(\"gluGetString: \\\"%.80s\\\" +\\n\", p);\n\t\t\t\tp += 80;\n\t\t\t}\n\t\t\tOutTrace(\"gluGetString: \\\"%.80s\\\"\\n\", p);\n\t\t}\n\t}\n\treturn ret;\n}\n                    "
  },
  {
    "path": "dll/queryint.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n#include <windows.h>\n#include <d3d.h>\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"dxhook.h\"\n#include \"syslibs.h\"\n#include \"dxhelper.h\"\n#include \"hddraw.h\"\n\nextern void HookDDSurface(LPDIRECTDRAWSURFACE *, int, BOOL);\nextern void HookGammaControl(LPVOID *);\nextern void HookDDSession(LPDIRECTDRAW *, int);\nextern void HookDirect3DSession(LPDIRECTDRAW *, int);\nextern void HookDirect3DDevice(LPVOID *, int);\nextern void HookViewport(LPDIRECT3DVIEWPORT *, int);\nextern void HookDDClipper(LPDIRECTDRAWCLIPPER FAR *);\n\n// extQueryInterfaceDX: this is the single procedure that manages all QueryInterface methods within the DirectX classes\n// it is better to have it unique because of the transitive and reflexive properties of QueryInterface, that means\n// that every DirectX COM object can QueryInterface itself to become another object type belonging to this family.\n\n// some unhandled interfaces in emulation mode:\n// REFIID={84e63de0-46aa-11cf-816f-0000c020156e}: IID_IDirect3DHALDevice\n\ntypedef enum {\n\tTYPE_OBJECT_UNKNOWN = 0,\n\tTYPE_OBJECT_DIRECTDRAW,\n\tTYPE_OBJECT_DDRAWSURFACE,\n\tTYPE_OBJECT_CLIPPER,\n\tTYPE_OBJECT_DIRECT3D,\n\tTYPE_OBJECT_D3DDEVICE,\n\tTYPE_OBJECT_GAMMARAMP,\n\tTYPE_OBJECT_TEXTURE,\n\tTYPE_OBJECT_VIEWPORT };\n\nHRESULT WINAPI extQueryInterfaceDX(int dxversion, QueryInterface_Type pQueryInterface, void *lpdds, REFIID riid, LPVOID *obp)\n{\n\tHRESULT res;\n\tBOOL IsPrim;\n\tBOOL IsBack;\n\tint iObjectType;\n\tint iObjectVersion;\n\textern LPDIRECTDRAWSURFACE lpDDSEmu_Prim;\n\tDWORD caps;\n\n\tIsPrim=dxwss.IsAPrimarySurface((LPDIRECTDRAWSURFACE)lpdds);\n\tIsBack=dxwss.IsABackBufferSurface((LPDIRECTDRAWSURFACE)lpdds);\n\tOutTraceDDRAW(\"QueryInterface(%d): lpdds=%x%s REFIID=%x(%s)\\n\",\n\t\tdxversion, lpdds, dxwss.ExplainSurfaceRole((LPDIRECTDRAWSURFACE)lpdds), riid.Data1, ExplainGUID((GUID *)&riid));\t\n\n\tiObjectVersion = 0;\n\tiObjectType = TYPE_OBJECT_UNKNOWN;\n\tswitch(riid.Data1){\n\t// DirectDraw\n\tcase 0xD7B70EE0: // CLSID_DirectDraw\n\t\tiObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=1; break;\n\tcase 0x3c305196: // CLSID_DirectDraw7\n\t\tiObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=7; break;\n\tcase 0x6C14DB80: // IID_IDirectDraw\n\t\tiObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=1; break;\n\tcase 0xB3A6F3E0: // IID_IDirectDraw2\n\t\tiObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=2; break;\n\tcase 0x618f8ad4: // IID_IDirectDraw3\n\t\tiObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=3; break;\t\t\n\tcase 0x9c59509a: // IID_IDirectDraw4\n\t\tiObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=4; break;\n\tcase 0x15e65ec0: // IID_IDirectDraw7\n\t\tiObjectType=TYPE_OBJECT_DIRECTDRAW; iObjectVersion=7; break;\n\t// DirectDrawSurface\n\tcase 0x6C14DB81:\n\t\tiObjectType=TYPE_OBJECT_DDRAWSURFACE; iObjectVersion=1; break;\n\tcase 0x57805885:\t\t//DDSurface2 - WIP (Dark Reign)\n\t\tiObjectType=TYPE_OBJECT_DDRAWSURFACE; iObjectVersion=2; break;\n\tcase 0xDA044E00:\t\t\n\t\tiObjectType=TYPE_OBJECT_DDRAWSURFACE; iObjectVersion=3; break;\n\tcase 0x0B2B8630:\n\t\tiObjectType=TYPE_OBJECT_DDRAWSURFACE; iObjectVersion=4; break;\n\tcase 0x06675a80:\n\t\tiObjectType=TYPE_OBJECT_DDRAWSURFACE; iObjectVersion=7; break;\n\tcase 0x6C14DB84:\n\t\tOutTraceDW(\"QueryInterface: IID_IDirectDrawPalette\\n\");\n\t\tbreak;           \n\t// Direct3D\n\tcase 0x3BBA0080: // IID_IDirect3D\n\t\tiObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=1; break;\n\tcase 0x6aae1ec1: // IID_IDirect3D2\n\t\tiObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=2; break;\n\tcase 0xbb223240: // IID_IDirect3D3\n\t\tiObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=3; break;\n\tcase 0xf5049e77: // IID_IDirect3D7\n\t\tiObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=7; break;\n\t// Direct3DDevice \n\tcase 0x84e63de0: // IID_IDirect3DHALDevice\n\t\tiObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=1; break;\n\tcase 0xA4665C60: // IID_IDirect3DRGBDevice\n\t\tiObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=1; break;\n\tcase 0xF2086B20: // IID_IDirect3DRampDevice\n\t\tiObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=1; break;\n\tcase 0x881949a1: // IID_IDirect3DMMXDevice\n\t\tiObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=1; break;\n\tcase 0x50936643: // IID_IDirect3DRefDevice    \n\t\tiObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=2; break;\n\tcase 0x8767df22: // IID_IDirect3DNullDevice\n\t\tiObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=2; break;\n\tcase 0xf5049e78: // IID_IDirect3DTnLHalDevice, \n\t\tiObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=3; break;\n\tcase 0x64108800: // IID_IDirect3DDevice       \n\t\tiObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=1; break;\n\tcase 0x93281501: // IID_IDirect3DDevice2\n\t\tiObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=2; break;\n\tcase 0xb0ab3b60: // IID_IDirect3DDevice3 \n\t\tiObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=3; break;\n\tcase 0xf5049e79: // IID_IDirect3DDevice7  \n\t\tiObjectType=TYPE_OBJECT_D3DDEVICE; iObjectVersion=7; break;\n\tcase 0x4B9F0EE0:\n\t\tOutTraceDW(\"QueryInterface: IID_IDirectDrawColorControl\\n\");\n\t\tbreak;\n\tcase 0x6C14DB85:\n\t\tOutTraceDW(\"QueryInterface: IID_IDirectDrawClipper\\n\");\n\t\tbreak;\n\tcase 0x69C11C3E:\n\t\tiObjectType=TYPE_OBJECT_GAMMARAMP; iObjectVersion=1; break;\n\t// textures\n\tcase 0x2CDCD9E0:\n\t\tiObjectType=TYPE_OBJECT_TEXTURE; iObjectVersion=1; break;\n\tcase 0x93281502:\n\t\tiObjectType=TYPE_OBJECT_TEXTURE; iObjectVersion=2; break;\n\tcase 0x4417C146: //IID_IDirect3DViewport\n\t\tiObjectType=TYPE_OBJECT_VIEWPORT; iObjectVersion=1; break;\n\tcase 0x93281500: //IID_IDirect3DViewport2\n\t\tiObjectType=TYPE_OBJECT_VIEWPORT; iObjectVersion=2; break;\n\tcase 0xb0ab3b61: //IID_IDirect3DViewport3\n\t\tiObjectType=TYPE_OBJECT_VIEWPORT; iObjectVersion=3; break;\n\tcase 0x593817A0: //CLSID_DirectDrawClipper \n\t\tiObjectType=TYPE_OBJECT_CLIPPER; iObjectVersion=1; break;\n\t} \n\n\tchar *sLabel;\n\tswitch(iObjectType){\n\t\tcase TYPE_OBJECT_UNKNOWN: sLabel = \"(unknown)\"; break;\n\t\tcase TYPE_OBJECT_DIRECTDRAW: sLabel = \"IID_IDirectDraw\"; break;\n\t\tcase TYPE_OBJECT_DDRAWSURFACE: sLabel = \"IID_IDirectDrawSurface\"; break;\n\t\tcase TYPE_OBJECT_CLIPPER: sLabel = \"CLSID_DirectDrawClipper\"; break;\n\t\tcase TYPE_OBJECT_DIRECT3D: sLabel = \"IID_IDirect3D\"; break;\n\t\tcase TYPE_OBJECT_D3DDEVICE: sLabel = \"IID_IDirect3DDevice\"; break;\n\t\tcase TYPE_OBJECT_GAMMARAMP: sLabel = \"IID_IDirectDrawGammaRamp\"; break;\n\t\tcase TYPE_OBJECT_TEXTURE: sLabel = \"IID_IDirect3DTexture\"; break;\n\t\tcase TYPE_OBJECT_VIEWPORT: sLabel = \"IID_IDirect3DViewport\"; break;\n\t}\n\tOutTraceDW(\"QueryInterface: Got interface for %s version %d\\n\", sLabel, iObjectVersion);\n\n\tswitch(iObjectType){\n\t\t// simulate unavailable interfaces (useful?)\n\t\tcase TYPE_OBJECT_DIRECTDRAW:\n\t\t\tif (iObjectVersion > (int)dxw.dwMaxDDVersion) {\n\t\t\t\t*obp = NULL;\n\t\t\t\tOutTraceDW(\"QueryInterface: DDVersion=%d SUPPRESS lpdds=%x(%s) REFIID=%x obp=(NULL) ret=0 at %d\\n\",\n\t\t\t\t\tiObjectVersion, lpdds, IsPrim?\"\":\"(PRIM)\", riid.Data1, __LINE__);\n\t\t\t\treturn(0);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase TYPE_OBJECT_DDRAWSURFACE:\n\t\t\tif (iObjectVersion > (int)dxw.dwMaxDDVersion) {\n\t\t\t\t*obp = NULL;\n\t\t\t\tOutTraceDW(\"QueryInterface: DDSVersion=%d SUPPRESS lpdds=%x(%s) REFIID=%x obp=(NULL) ret=0 at %d\\n\",\n\t\t\t\t\tiObjectVersion, lpdds, IsPrim?\"\":\"(PRIM)\", riid.Data1, __LINE__);\n\t\t\t\treturn(0);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase TYPE_OBJECT_GAMMARAMP:\n\t\t\t// fix the target for gamma ramp creation: if it is a primary surface, use the real one!!\n\t\t\t// v2.03.37: do this just when in esurface emulated mode!! \n\t\t\tif((dxw.dwFlags1 & EMULATESURFACE) && \n\t\t\t\tdxwss.IsAPrimarySurface((LPDIRECTDRAWSURFACE)lpdds)) \n\t\t\t\tlpdds = lpDDSEmu_Prim; \n\t\t\tbreak;\n#ifdef YEARDEAD\n\t\t//case TYPE_OBJECT_UNKNOWN:\n\t\t//\tOutTraceDW(\"QueryInterface: returning same object\\n\");\n\t\t//\t((LPDIRECTDRAWSURFACE)lpdds)->AddRef();\n\t\t//\t*obp = lpdds;\n\t\t//\treturn DD_OK;\n#endif\n\t}\n\n\tres = (*pQueryInterface)(lpdds, riid, obp);\n\n\tif(res) {\n\t\tOutTraceDW(\"QueryInterface: ERROR lpdds=%x%s REFIID=%x obp=%x ret=%x(%s) at %d\\n\",\n\t\t\tlpdds, IsPrim?\"(PRIM)\":\"\", riid.Data1, *obp, res, ExplainDDError(res), __LINE__);\n\t\treturn res;\n\t}\n\n\tif (! *obp) {\n\t\tOutTraceDW(\"QueryInterface: Interface for object %x not found\\n\", riid.Data1);\n\t\treturn res;\n\t}\n\n\t// added trace\n\tOutTraceDW(\"QueryInterface: lpdds=%x REFIID=%x obp=%x obj=%s version=%d ret=0\\n\",\n\t\tlpdds, riid.Data1, *obp, sLabel, iObjectVersion);\n\n\t// v2.04.19.fx1: Beware! \"Need for Speed 5\" performs QueryInterface of one sorface on top of itself!\n\t// This is allowed, but in this case calling dxwss.PopSurface before dxwss.DuplicateSurface would\n\t// clear the capabilities to be copied over to the (not) new surface.\n\t// fixed by inserting an \"if\" statement before PopSurface\n\n\tswitch(iObjectType){\n\t\tcase TYPE_OBJECT_UNKNOWN:\n\t\t\tif(caps=dxwss.DuplicateSurface((LPDIRECTDRAWSURFACE)lpdds, (LPDIRECTDRAWSURFACE)*obp, iObjectVersion)){\n\t\t\t\tOutTraceDW(\"QueryInterface: MOVE caps=%x(%s)\\n\", caps, ExplainDDSCaps(caps));\n\t\t\t}\n\t\t\tbreak;\n\t\tcase TYPE_OBJECT_DIRECTDRAW:\n\t\t\tHookDDSession((LPDIRECTDRAW *)obp, iObjectVersion);\n\t\t\tbreak;\n\t\tcase TYPE_OBJECT_DDRAWSURFACE:\n\t\t\tdxw.dwDDVersion=iObjectVersion;\n\t\t\tif(caps=dxwss.DuplicateSurface((LPDIRECTDRAWSURFACE)lpdds, (LPDIRECTDRAWSURFACE)*obp, iObjectVersion)){\n\t\t\t\tOutTraceDW(\"QueryInterface: MOVE caps=%x(%s)\\n\", caps, ExplainDDSCaps(caps));\n\t\t\t}\n\t\t\tif(IsPrim){\n\t\t\t\tOutTraceDW(\"QueryInterface(S): primary=%x new=%x\\n\", lpdds, *obp);\n\t\t\t\tHookDDSurface((LPDIRECTDRAWSURFACE *)obp, dxw.dwDDVersion, TRUE);\n\t\t\t}\n\t\t\telse{\n\t\t\t\t// v2.02.13: seems that hooking inconditionally gives troubles. What is the proper safe hook condition?\n\t\t\t\tHookDDSurface((LPDIRECTDRAWSURFACE *)obp, dxw.dwDDVersion, FALSE);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase TYPE_OBJECT_CLIPPER:\n\t\t\tHookDDClipper((LPDIRECTDRAWCLIPPER *)obp); // there is a single Clipper intrface!\n\t\t\tbreak;\n\t\tcase TYPE_OBJECT_DIRECT3D:\n\t\t\tHookDirect3DSession((LPDIRECTDRAW *)obp, iObjectVersion);\n\t\t\tbreak;\n\t\tcase TYPE_OBJECT_D3DDEVICE:\n\t\t\tHookDirect3DDevice(obp, iObjectVersion);\n\t\t\tbreak;\n\t\tcase TYPE_OBJECT_GAMMARAMP:\n\t\t\tHookGammaControl(obp);\n\t\t\tbreak;\n\t\tcase TYPE_OBJECT_TEXTURE:\n\t\t\tHookTexture(obp, iObjectVersion);\n\t\t\tbreak;\n\t\tcase TYPE_OBJECT_VIEWPORT:\n\t\t\tHookViewport((LPDIRECT3DVIEWPORT *)obp, iObjectVersion);\n\t\t\tbreak;\n\t}\n\n\treturn res;\n}\n"
  },
  {
    "path": "dll/rad.h",
    "content": "#ifndef __RAD__\n#define __RAD__\n\n#define RADCOPYRIGHT \"Copyright (C) 1994-98 RAD Game Tools, Inc.\"\n\n#ifndef __RADRES__\n\n//  __RADDOS__ means DOS code (16 or 32 bit)\n//  __RAD16__ means 16 bit code (Win16)\n//  __RAD32__ means 32 bit code (DOS, Win386, Win32s, Mac)\n//  __RADWIN__ means Windows code (Win16, Win386, Win32s)\n//  __RADWINEXT__ means Windows 386 extender (Win386)\n//  __RADNT__ means Win32s code\n//  __RADMAC__ means Macintosh\n//  __RAD68K__ means 68K Macintosh\n//  __RADPPC__ means PowerMac\n\n\n#if (defined(__MWERKS__) && !defined(__INTEL__)) || defined(THINK_C) || defined(powerc) || defined(macintosh) || defined(__powerc)\n\n  #define __RADMAC__\n  #if defined(powerc) || defined(__powerc)\n    #define __RADPPC__\n  #else\n    #define __RAD68K__\n  #endif\n\n  #define __RAD32__\n\n#else \n\n  #ifdef __DOS__\n    #define __RADDOS__\n  #endif\n\n  #ifdef __386__\n    #define __RAD32__\n  #endif\n\n  #ifdef _Windows    //For Borland\n    #ifdef __WIN32__\n      #define WIN32\n    #else\n      #define __WINDOWS__\n    #endif\n  #endif\n\n  #ifdef _WINDOWS    //For MS\n    #ifndef _WIN32\n      #define __WINDOWS__\n    #endif\n  #endif\n\n  #ifdef _WIN32           \n    #define __RADWIN__\n    #define __RADNT__\n    #define __RAD32__\n  #else\n    #ifdef __NT__\n      #define __RADWIN__\n      #define __RADNT__\n      #define __RAD32__\n    #else\n      #ifdef __WINDOWS_386__\n        #define __RADWIN__\n        #define __RADWINEXT__\n        #define __RAD32__\n      #else\n        #ifdef __WINDOWS__\n          #define __RADWIN__\n          #define __RAD16__\n        #else\n          #ifdef WIN32\n            #define __RADWIN__\n            #define __RADNT__\n            #define __RAD32__\n          #endif\n        #endif\n      #endif\n    #endif\n  #endif\n\n#endif\n\n#if (!defined(__RADDOS__) && !defined(__RADWIN__) && !defined(__RADMAC__))\n  #error RAD.H did not detect your platform.  Define __DOS__, __WINDOWS__, WIN32, macintosh, or powerc.\n#endif\n\n#ifdef __RADMAC__\n\n  // this define is for CodeWarrior 11's stupid new libs (even though\n  //   we don't use longlong's).\n\n  #define __MSL_LONGLONG_SUPPORT__\n\n  #define RADLINK\n  #define RADEXPLINK\n\n  #ifdef __CFM68K__\n    #ifdef __RADINDLL__\n      #define RADEXPFUNC RADDEFFUNC __declspec(export)\n    #else\n      #define RADEXPFUNC RADDEFFUNC __declspec(import)\n    #endif\n  #else\n    #define RADEXPFUNC RADDEFFUNC\n  #endif\n  #define RADASMLINK\n\n#else\n\n  #ifdef __RADNT__\n    #ifndef _WIN32\n      #define _WIN32\n    #endif\n    #ifndef WIN32\n      #define WIN32\n    #endif\n  #endif\n\n  #ifdef __RADWIN__\n    #ifdef __RAD32__\n      #ifdef __RADNT__\n\n        #define RADLINK __stdcall\n        #define RADEXPLINK __stdcall\n\n        #ifdef __RADINEXE__\n          #define RADEXPFUNC RADDEFFUNC\n        #else\n          #ifndef __RADINDLL__\n            #define RADEXPFUNC RADDEFFUNC __declspec(dllimport)\n            #ifdef __BORLANDC__\n              #if __BORLANDC__<=0x460\n                #undef RADEXPFUNC\n                #define RADEXPFUNC RADDEFFUNC\n              #endif\n            #endif\n          #else\n            #define RADEXPFUNC RADDEFFUNC __declspec(dllexport)\n          #endif\n        #endif\n      #else\n        #define RADLINK __pascal\n        #define RADEXPLINK __far __pascal\n        #define RADEXPFUNC RADDEFFUNC\n      #endif\n    #else\n      #define RADLINK __pascal\n      #define RADEXPLINK __far __pascal __export\n      #define RADEXPFUNC RADDEFFUNC\n    #endif\n  #else\n    #define RADLINK __pascal\n    #define RADEXPLINK __pascal\n    #define RADEXPFUNC RADDEFFUNC\n  #endif\n\n  #define RADASMLINK __cdecl\n\n#endif\n\n#ifdef __RADWIN__\n  #ifndef _WINDOWS\n    #define _WINDOWS\n  #endif\n#endif\n\n#ifdef __cplusplus\n  #define RADDEFFUNC extern \"C\"\n  #define RADDEFSTART extern \"C\" {\n  #define RADDEFEND }\n#else\n  #define RADDEFFUNC\n  #define RADDEFSTART\n  #define RADDEFEND\n#endif\n\n\nRADDEFSTART\n\n#define s8 signed char\n#define u8 unsigned char\n#define u32 unsigned long\n#define s32 signed long\n#define u64 unsigned __int64\n#define s64 signed __int64\n\n#ifdef __RAD32__\n  #define PTR4\n\n  #define u16 unsigned short\n  #define s16 signed short\n\n  #ifdef __RADMAC__\n\n    #include <string.h>\n    #include <memory.h>\n    #include <OSUtils.h>\n\n    #define radstrlen strlen\n\n    #define radmemset memset\n\n    #define radmemcmp memcmp\n\n    #define radmemcpy(dest,source,size) BlockMoveData((Ptr)(source),(Ptr)(dest),size)\n\n    #define radmemcpydb(dest,source,size) BlockMoveData((Ptr)(source),(Ptr)(dest),size)\n\n    #define radstrcat strcat\n\n    #define radstrcpy strcpy\n\n    static u32 inline radsqr(s32 a) {  return(a*a);  }\n   \n    #ifdef __RAD68K__\n\n      #pragma parameter __D0 mult64anddiv(__D0,__D1,__D2)\n      u32 mult64anddiv(u32 m1,u32 m2,u32 d) ={0x4C01,0x0C01,0x4C42,0x0C01};\n      //  muls.l d1,d1:d0  divs.l d2,d1:d0\n               \n      #pragma parameter radconv32a(__A0,__D0)\n      void radconv32a(void* p,u32 n) ={0x4A80,0x600C,0x2210,0xE059,0x4841,0xE059,0x20C1,0x5380,0x6EF2};\n      // tst.l d0  bra.s @loope  @loop:  move.l (a0),d1  ror.w #8,d1  swap d1 ror.w #8,d1  move.l d1,(a0)+  sub.l #1,d0  bgt.s @loop  @loope:\n      \n    #else\n\n      u32 mult64anddiv(u32 m1,u32 m2,u32 d);\n\n      void radconv32a(void* p,u32 n);\n\n    #endif\n\n  #else\n\n    #ifdef __WATCOMC__\n\n      u32 radsqr(s32 a);\n      #pragma aux radsqr = \"mul eax\" parm [eax] modify [EDX eax];\n\n      u32 mult64anddiv(u32 m1,u32 m2,u32 d);\n      #pragma aux mult64anddiv = \"mul ecx\" \"div ebx\" parm [eax] [ecx] [ebx] modify [EDX eax];\n\n      s32 radabs(s32 ab);\n      #pragma aux radabs = \"test eax,eax\" \"jge skip\" \"neg eax\" \"skip:\" parm [eax];\n\n      #define radabs32 radabs\n\n      u32 DOSOut(const char* str);\n      #pragma aux DOSOut = \"cld\" \"mov ecx,0xffffffff\" \"xor eax,eax\" \"mov edx,edi\" \"repne scasb\" \"not ecx\" \"dec ecx\" \"mov ebx,1\" \"mov ah,0x40\" \"int 0x21\" parm [EDI] modify [EAX EBX ECX EDX EDI] value [ecx];\n    \n      void DOSOutNum(const char* str,u32 len);\n      #pragma aux DOSOutNum = \"mov ah,0x40\" \"mov ebx,1\" \"int 0x21\" parm [edx] [ecx] modify [eax ebx];\n\n      u32 ErrOut(const char* str);\n      #pragma aux ErrOut = \"cld\" \"mov ecx,0xffffffff\" \"xor eax,eax\" \"mov edx,edi\" \"repne scasb\" \"not ecx\" \"dec ecx\" \"xor ebx,ebx\" \"mov ah,0x40\" \"int 0x21\" parm [EDI] modify [EAX EBX ECX EDX EDI] value [ecx];\n    \n      void ErrOutNum(const char* str,u32 len);\n      #pragma aux ErrOutNum = \"mov ah,0x40\" \"xor ebx,ebx\" \"int 0x21\" parm [edx] [ecx] modify [eax ebx];\n\n      void radmemset16(void* dest,u16 value,u32 size);\n      #pragma aux radmemset16 = \"cld\" \"mov bx,ax\" \"shl eax,16\" \"mov ax,bx\" \"mov bl,cl\" \"shr ecx,1\" \"rep stosd\" \"mov cl,bl\" \"and cl,1\" \"rep stosw\" parm [EDI] [EAX] [ECX] modify [EAX EDX EBX ECX EDI];\n    \n      void radmemset(void* dest,u8 value,u32 size);\n      #pragma aux radmemset = \"cld\" \"mov ah,al\" \"mov bx,ax\" \"shl eax,16\" \"mov ax,bx\" \"mov bl,cl\" \"shr ecx,2\" \"and bl,3\" \"rep stosd\" \"mov cl,bl\" \"rep stosb\" parm [EDI] [AL] [ECX] modify [EAX EDX EBX ECX EDI];\n\n      void radmemset32(void* dest,u32 value,u32 size);\n      #pragma aux radmemset32 = \"cld\" \"rep stosd\" parm [EDI] [EAX] [ECX] modify [EAX EDX EBX ECX EDI];\n\n      void radmemcpy(void* dest,const void* source,u32 size);\n      #pragma aux radmemcpy = \"cld\" \"mov bl,cl\" \"shr ecx,2\" \"rep movsd\" \"mov cl,bl\" \"and cl,3\" \"rep movsb\" parm [EDI] [ESI] [ECX] modify [EBX ECX EDI ESI];\n\n      void __far *radfmemcpy(void __far* dest,const void __far* source,u32 size);\n      #pragma aux radfmemcpy = \"cld\" \"push es\" \"push ds\" \"mov es,cx\" \"mov ds,dx\" \"mov ecx,eax\" \"shr ecx,2\" \"rep movsd\" \"mov cl,al\" \"and cl,3\" \"rep movsb\" \"pop ds\" \"pop es\" parm [CX EDI] [DX ESI] [EAX] modify [ECX EDI ESI] value [CX EDI];\n\n      void radmemcpydb(void* dest,const void* source,u32 size);  //Destination bigger\n      #pragma aux radmemcpydb = \"std\" \"mov bl,cl\" \"lea esi,[esi+ecx-4]\" \"lea edi,[edi+ecx-4]\" \"shr ecx,2\" \"rep movsd\" \"and bl,3\" \"jz dne\" \"add esi,3\" \"add edi,3\" \"mov cl,bl\" \"rep movsb\" \"dne:\" \"cld\" parm [EDI] [ESI] [ECX] modify [EBX ECX EDI ESI];\n\n      char* radstrcpy(void* dest,const void* source);\n      #pragma aux radstrcpy = \"cld\" \"mov edx,edi\" \"lp:\" \"mov al,[esi]\" \"inc esi\" \"mov [edi],al\" \"inc edi\" \"cmp al,0\" \"jne lp\" parm [EDI] [ESI] modify [EAX EDX EDI ESI] value [EDX];\n\n      char __far* radfstrcpy(void __far* dest,const void __far* source);\n      #pragma aux radfstrcpy = \"cld\" \"push es\" \"push ds\" \"mov es,cx\" \"mov ds,dx\" \"mov edx,edi\" \"lp:\" \"lodsb\" \"stosb\" \"test al,0xff\" \"jnz lp\" \"pop ds\" \"pop es\" parm [CX EDI] [DX ESI] modify [EAX EDX EDI ESI] value [CX EDX];\n\n      char* radstpcpy(void* dest,const void* source);\n      #pragma aux radstpcpy = \"cld\" \"lp:\" \"mov al,[esi]\" \"inc esi\" \"mov [edi],al\" \"inc edi\" \"cmp al,0\" \"jne lp\" \"dec edi\" parm [EDI] [ESI] modify [EAX EDI ESI] value [EDI];\n\n      char* radstpcpyrs(void* dest,const void* source);\n      #pragma aux radstpcpyrs = \"cld\" \"lp:\" \"mov al,[esi]\" \"inc esi\" \"mov [edi],al\" \"inc edi\" \"cmp al,0\" \"jne lp\" \"dec esi\" parm [EDI] [ESI] modify [EAX EDI ESI] value [ESI];\n\n      u32 radstrlen(const void* dest);\n      #pragma aux radstrlen = \"cld\" \"mov ecx,0xffffffff\" \"xor eax,eax\" \"repne scasb\" \"not ecx\" \"dec ecx\" parm [EDI] modify [EAX ECX EDI] value [ECX];\n    \n      char* radstrcat(void* dest,const void* source);\n      #pragma aux radstrcat = \"cld\" \"mov ecx,0xffffffff\" \"mov edx,edi\" \"xor eax,eax\" \"repne scasb\" \"dec edi\" \"lp:\" \"lodsb\" \"stosb\" \"test al,0xff\" \"jnz lp\" \\\n      parm [EDI] [ESI] modify [EAX ECX EDI ESI] value [EDX];\n    \n      char* radstrchr(const void* dest,char chr);\n      #pragma aux radstrchr = \"cld\" \"lp:\" \"lodsb\" \"cmp al,dl\" \"je fnd\" \"cmp al,0\" \"jnz lp\" \"mov esi,1\" \"fnd:\" \"dec esi\" parm [ESI] [DL] modify [EAX ESI] value [esi];\n\n      s8 radmemcmp(const void* s1,const void* s2,u32 len);\n      #pragma aux radmemcmp = \"cld\" \"rep cmpsb\" \"setne al\" \"jbe end\" \"neg al\" \"end:\"  parm [EDI] [ESI] [ECX] modify [ECX EDI ESI];\n\n      s8 radstrcmp(const void* s1,const void* s2);\n      #pragma aux radstrcmp = \"lp:\" \"mov al,[esi]\" \"mov ah,[edi]\" \"cmp al,ah\" \"jne set\" \"cmp al,0\" \"je set\" \"inc esi\" \"inc edi\" \"jmp lp\" \"set:\" \"setne al\" \"jbe end\" \"neg al\" \"end:\" \\\n      parm [EDI] [ESI] modify [EAX EDI ESI];\n\n      s8 radstricmp(const void* s1,const void* s2);                                                                       \n      #pragma aux radstricmp = \"lp:\" \"mov al,[esi]\" \"mov ah,[edi]\" \"cmp al,'a'\" \"jb c1\" \"cmp al,'z'\" \"ja c1\" \"sub al,32\" \"c1:\" \"cmp ah,'a'\" \"jb c2\" \"cmp ah,'z'\" \"ja c2\" \"sub ah,32\" \"c2:\" \"cmp al,ah\" \"jne set\" \"cmp al,0\" \"je set\" \\\n     \"inc esi\" \"inc edi\" \"jmp lp\" \"set:\" \"setne al\" \"jbe end\" \"neg al\" \"end:\" \\\n      parm [EDI] [ESI] modify [EAX EDI ESI];\n\n      s8 radstrnicmp(const void* s1,const void* s2,u32 len);\n      #pragma aux radstrnicmp = \"lp:\" \"mov al,[esi]\" \"mov ah,[edi]\" \"cmp al,'a'\" \"jb c1\" \"cmp al,'z'\" \"ja c1\" \"sub al,32\" \"c1:\" \"cmp ah,'a'\" \"jb c2\" \"cmp ah,'z'\" \"ja c2\" \"sub ah,32\" \"c2:\" \"cmp al,ah\" \"jne set\" \"cmp al,0\" \"je set\" \\\n      \"dec ecx\" \"jz set\" \"inc esi\" \"inc edi\" \"jmp lp\" \"set:\" \"setne al\" \"jbe end\" \"neg al\" \"end:\" \\\n      parm [EDI] [ESI] [ECX] modify [EAX ECX EDI ESI];\n\n      char* radstrupr(void* s1);\n      #pragma aux radstrupr = \"mov ecx,edi\" \"lp:\" \"mov al,[edi]\" \"cmp al,'a'\" \"jb c1\" \"cmp al,'z'\" \"ja c1\" \"sub [edi],32\" \"c1:\" \"inc edi\" \"cmp al,0\" \"jne lp\" parm [EDI] modify [EAX EDI] value [ecx];\n\n      char* radstrlwr(void* s1);\n      #pragma aux radstrlwr = \"mov ecx,edi\" \"lp:\" \"mov al,[edi]\" \"cmp al,'A'\" \"jb c1\" \"cmp al,'Z'\" \"ja c1\" \"add [edi],32\" \"c1:\" \"inc edi\" \"cmp al,0\" \"jne lp\" parm [EDI] modify [EAX EDI] value [ecx];\n\n      u32 radstru32(const void* dest);\n        #pragma aux radstru32 = \"cld\" \"xor ecx,ecx\" \"xor ebx,ebx\" \"xor edi,edi\" \"lodsb\" \"cmp al,45\" \"jne skip2\" \"mov edi,1\" \"jmp skip\" \"lp:\" \"mov eax,10\" \"mul ecx\" \"lea ecx,[eax+ebx]\" \\\n        \"skip:\" \"lodsb\" \"skip2:\" \"cmp al,0x39\" \"ja dne\" \"cmp al,0x30\" \"jb dne\" \"mov bl,al\" \"sub bl,0x30\" \"jmp lp\" \"dne:\" \"test edi,1\" \"jz pos\" \"neg ecx\" \"pos:\" \\\n        parm [ESI] modify [EAX EBX EDX EDI ESI] value [ecx];\n                                                             \n      u16 GetDS();\n      #pragma aux GetDS = \"mov ax,ds\" value [ax];\n\n      #ifdef __RADWINEXT__\n    \n        #define _16To32(ptr16) ((void*)(((GetSelectorBase((u16)(((u32)(ptr16))>>16))+((u16)(u32)(ptr16)))-GetSelectorBase(GetDS()))))\n\n      #endif\n\n      #ifndef __RADWIN__\n        #define int86 int386\n        #define int86x int386x\n      #endif\n    \n      #define u32regs x\n      #define u16regs w\n    \n    #else\n\n      #define radstrcpy strcpy\n      #define radstrcat strcat\n      #define radmemcpy memcpy\n      #define radmemcpydb memmove\n      #define radmemcmp memcmp\n      #define radmemset memset\n      #define radstrlen strlen\n      #define radstrchr strchr\n      #define radtoupper toupper\n      #define radstru32(s) ((u32)atol(s))\n      #define radstricmp _stricmp\n      #define radstrcmp strcmp\n      #define radstrupr _strupr\n      #define radstrlwr _strlwr\n      #define BreakPoint() _asm {int 3}\n\n      #ifdef _MSC_VER\n\n        #pragma warning( disable : 4035)\n\n        typedef char* RADPCHAR;\n\n        u32 __inline radsqr(u32 m) { \n          _asm { \n            mov eax,[m] \n            mul eax \n          }\n        }\n\n        u32 __inline mult64anddiv(u32 m1,u32 m2, u32 d) { \n          _asm { \n            mov eax,[m1] \n            mov ecx,[m2] \n            mul ecx \n            mov ecx,[d] \n            div ecx \n          } \n        }\n\n        s32 __inline radabs(s32 ab) { \n          _asm { \n            mov eax,[ab] \n            test eax,eax \n            jge skip \n            neg eax \n           skip:\n          } \n        }\n\n        u8 __inline radinp(u16 p) { \n          _asm { \n            mov dx,[p] \n            in al,dx \n          } \n        }\n\n        void __inline radoutp(u16 p,u8 v) { \n          _asm { \n            mov dx,[p] \n            mov al,[v] \n            out dx,al \n          } \n        }\n\n        RADPCHAR __inline radstpcpy(char* p1, char* p2) { \n          _asm { \n             mov edx,[p1] \n             mov ecx,[p2] \n             cld \n            lp: \n             mov al,[ecx] \n             inc ecx \n             mov [edx],al \n             inc edx \n             cmp al,0 \n             jne lp \n             dec edx \n             mov eax,edx \n          } \n        }\n        \n        RADPCHAR __inline radstpcpyrs(char* p1, char* p2) { \n          _asm { \n            mov edx,[p1] \n            mov ecx,[p2] \n            cld \n           lp: \n            mov al,[ecx] \n            inc ecx \n            mov [edx],al\n            inc edx \n            cmp al,0 \n            jne lp \n            dec ecx \n            mov eax,ecx \n          } \n        }\n\n        void __inline radmemset16(void* dest,u16 value,u32 sizeb) {\n          _asm { \n            mov edi,[dest] \n            mov ax,[value] \n            mov ecx,[sizeb] \n            shl eax,16 \n            cld \n            mov ax,[value] \n            mov bl,cl \n            shr ecx,1 \n            rep stosd \n            mov cl,bl \n            and cl,1 \n            rep stosw\n          }\n        }\n\n        void __inline radmemset32(void* dest,u32 value,u32 sizeb) {\n          _asm {\n            mov edi,[dest]\n            mov eax,[value]\n            mov ecx,[sizeb]\n            cld\n            rep stosd\n          }\n        }\n\n        u32 __inline __stdcall RADsqrt(u32 sq) {\n          _asm {\n            fild dword ptr [sq]\n            fsqrt\n            fistp word ptr [sq]\n            movzx eax,word ptr [sq]\n          }\n        }\n\n        void __inline RADCycleTimerStartAddr(u32* addr)\n        {\n          _asm {\n            mov ecx,[addr]\n            __asm __emit 0fh __asm __emit 031h\n            mov [ecx],eax\n          }\n        }\n\n        u32 __inline RADCycleTimerDeltaAddr(u32* addr)\n        {\n          _asm {\n            __asm __emit 0fh __asm __emit 031h\n            mov ecx,[addr]\n            sub eax,[ecx]\n          }\n        }\n\n        #define RADCycleTimerStart(var) RADCycleTimerStartAddr(&var)\n        #define RADCycleTimerDelta(var) RADCycleTimerDeltaAddr(&var)\n\n        #pragma warning( default : 4035)\n\n      #endif\n\n    #endif\n\n  #endif\n\n#else\n\n  #define PTR4 __far\n  \n  #define u16 unsigned int\n  #define s16 signed int\n\n  #ifdef __WATCOMC__\n    \n    u32 radsqr(s32 a);\n    #pragma aux radsqr = \"shl edx,16\" \"mov dx,ax\" \"mov eax,edx\" \"xor edx,edx\" \"mul eax\" \"shld edx,eax,16\" parm [dx ax] modify [DX ax] value [dx ax];\n\n    s16 radabs(s16 ab);\n    #pragma aux radabs = \"test ax,ax\" \"jge skip\" \"neg ax\" \"skip:\" parm [ax] value [ax];\n    \n    s32 radabs32(s32 ab);\n    #pragma aux radabs32 = \"test dx,dx\" \"jge skip\" \"neg dx\" \"neg ax\" \"sbb dx,0\" \"skip:\" parm [dx ax] value [dx ax];\n    \n    u32 DOSOut(const char far* dest);\n    #pragma aux DOSOut = \"cld\" \"and edi,0xffff\" \"mov dx,di\" \"mov ecx,0xffffffff\" \"xor eax,eax\" 0x67 \"repne scasb\" \"not ecx\" \"dec ecx\" \"mov bx,1\" \"push ds\" \"push es\" \"pop ds\" \"mov ah,0x40\" \"int 0x21\" \"pop ds\" \"movzx eax,cx\" \"shr ecx,16\" \\\n       parm [ES DI] modify [AX BX CX DX DI ES] value [CX AX];\n    \n    void DOSOutNum(const char far* str,u16 len);\n    #pragma aux DOSOutNum = \"push ds\" \"mov ds,cx\" \"mov cx,bx\" \"mov ah,0x40\" \"mov bx,1\" \"int 0x21\" \"pop ds\" parm [cx dx] [bx] modify [ax bx cx];\n\n    u32 ErrOut(const char far* dest);\n    #pragma aux ErrOut = \"cld\" \"and edi,0xffff\" \"mov dx,di\" \"mov ecx,0xffffffff\" \"xor eax,eax\" 0x67 \"repne scasb\" \"not ecx\" \"dec ecx\" \"xor bx,bx\" \"push ds\" \"push es\" \"pop ds\" \"mov ah,0x40\" \"int 0x21\" \"pop ds\" \"movzx eax,cx\" \"shr ecx,16\" \\\n       parm [ES DI] modify [AX BX CX DX DI ES] value [CX AX];\n    \n    void ErrOutNum(const char far* str,u16 len);\n    #pragma aux ErrOutNum = \"push ds\" \"mov ds,cx\" \"mov cx,bx\" \"mov ah,0x40\" \"xor bx,bx\" \"int 0x21\" \"pop ds\" parm [cx dx] [bx] modify [ax bx cx];\n\n    void radmemset(void far *dest,u8 value,u32 size);\n    #pragma aux radmemset = \"cld\" \"and edi,0ffffh\" \"shl ecx,16\" \"mov cx,bx\" \"mov ah,al\" \"mov bx,ax\" \"shl eax,16\" \"mov ax,bx\" \"mov bl,cl\" \"shr ecx,2\" 0x67 \"rep stosd\" \"mov cl,bl\" \"and cl,3\" \"rep stosb\" parm [ES DI] [AL] [CX BX];\n    \n    void radmemset16(void far* dest,u16 value,u32 size);\n    #pragma aux radmemset16 = \"cld\" \"and edi,0ffffh\" \"shl ecx,16\" \"mov cx,bx\" \"mov bx,ax\" \"shl eax,16\" \"mov ax,bx\" \"mov bl,cl\" \"shr ecx,1\" \"rep stosd\" \"mov cl,bl\" \"and cl,1\" \"rep stosw\" parm [ES DI] [AX] [CX BX];\n\n    void radmemcpy(void far* dest,const void far* source,u32 size);\n    #pragma aux radmemcpy = \"cld\" \"push ds\" \"mov ds,dx\" \"and esi,0ffffh\" \"and edi,0ffffh\" \"shl ecx,16\" \"mov cx,bx\" \"shr ecx,2\" 0x67 \"rep movsd\" \"mov cl,bl\" \"and cl,3\" \"rep movsb\" \"pop ds\" parm [ES DI] [DX SI] [CX BX] modify [CX SI DI ES];\n    \n    s8 radmemcmp(const void far* s1,const void far* s2,u32 len);\n    #pragma aux radmemcmp = \"cld\" \"push ds\" \"mov ds,dx\" \"shl ecx,16\" \"mov cx,bx\" \"rep cmpsb\" \"setne al\" \"jbe end\" \"neg al\" \"end:\" \"pop ds\"  parm [ES DI] [DX SI] [CX BX] modify [CX SI DI ES];\n\n    char far* radstrcpy(void far* dest,const void far* source);\n    #pragma aux radstrcpy = \"cld\" \"push ds\" \"mov ds,dx\" \"and esi,0xffff\" \"and edi,0xffff\" \"mov dx,di\" \"lp:\" \"lodsb\" \"stosb\" \"test al,0xff\" \"jnz lp\" \"pop ds\" parm [ES DI] [DX SI] modify [AX DX DI SI ES] value [es dx];\n\n    char far* radstpcpy(void far* dest,const void far* source);\n    #pragma aux radstpcpy = \"cld\" \"push ds\" \"mov ds,dx\" \"and esi,0xffff\" \"and edi,0xffff\" \"lp:\" \"lodsb\" \"stosb\" \"test al,0xff\" \"jnz lp\" \"dec di\" \"pop ds\" parm [ES DI] [DX SI] modify [DI SI ES] value [es di];\n\n    u32 radstrlen(const void far* dest);\n    #pragma aux radstrlen = \"cld\" \"and edi,0xffff\" \"mov ecx,0xffffffff\" \"xor eax,eax\" 0x67 \"repne scasb\" \"not ecx\" \"dec ecx\" \"movzx eax,cx\" \"shr ecx,16\" parm [ES DI] modify [AX CX DI ES] value [CX AX];\n    \n    char far* radstrcat(void far* dest,const void far* source);\n    #pragma aux radstrcat = \"cld\" \"and edi,0xffff\" \"mov ecx,0xffffffff\" \"and esi,0xffff\" \"push ds\" \"mov ds,dx\" \"mov dx,di\" \"xor eax,eax\" 0x67 \"repne scasb\" \"dec edi\" \"lp:\" \"lodsb\" \"stosb\" \"test al,0xff\" \"jnz lp\" \"pop ds\" \\\n      parm [ES DI] [DX SI] modify [AX CX DI SI ES] value [es dx];\n    \n    char far* radstrchr(const void far* dest,char chr);\n    #pragma aux radstrchr = \"cld\" \"lp:\" 0x26 \"lodsb\" \"cmp al,dl\" \"je fnd\" \"cmp al,0\" \"jnz lp\" \"xor ax,ax\" \"mov es,ax\" \"mov si,1\" \"fnd:\" \"dec si\" parm [ES SI] [DL] modify [AX SI ES] value [es si];\n    \n    s8 radstricmp(const void far* s1,const void far* s2);                                                                       \n    #pragma aux radstricmp = \"and edi,0xffff\" \"push ds\" \"mov ds,dx\" \"and esi,0xffff\" \"lp:\" \"mov al,[esi]\" \"mov ah,[edi]\" \"cmp al,'a'\" \"jb c1\" \"cmp al,'z'\" \"ja c1\" \"sub al,32\" \"c1:\" \\\n      \"cmp ah,'a'\" \"jb c2\" \"cmp ah,'z'\" \"ja c2\" \"sub ah,32\" \"c2:\" \"cmp al,ah\" \"jne set\" \"cmp al,0\" \"je set\" \\\n      \"inc esi\" \"inc edi\" \"jmp lp\" \"set:\" \"setne al\" \"jbe end\" \"neg al\" \"end:\" \"pop ds\" \\\n      parm [ES DI] [DX SI] modify [AX DI SI];\n\n    u32 radstru32(const void far* dest);\n    #pragma aux radstru32 = \"cld\" \"xor ecx,ecx\" \"xor ebx,ebx\" \"xor edi,edi\" 0x26 \"lodsb\" \"cmp al,45\" \"jne skip2\" \"mov edi,1\" \"jmp skip\" \"lp:\" \"mov eax,10\" \"mul ecx\" \"lea ecx,[eax+ebx]\" \\\n      \"skip:\" 0x26 \"lodsb\" \"skip2:\" \"cmp al,0x39\" \"ja dne\" \"cmp al,0x30\" \"jb dne\" \"mov bl,al\" \"sub bl,0x30\" \"jmp lp\" \"dne:\" \"test edi,1\" \"jz pos\" \"neg ecx\" \"pos:\" \\\n      \"movzx eax,cx\" \"shr ecx,16\" parm [ES SI] modify [AX BX DX DI SI] value [cx ax];\n\n    u32 mult64anddiv(u32 m1,u32 m2,u32 d);\n    #pragma aux mult64anddiv = \"shl ecx,16\" \"mov cx,ax\" \"shrd eax,edx,16\" \"mov ax,si\" \"mul ecx\" \"shl edi,16\" \"mov di,bx\" \"div edi\" \"shld edx,eax,16\" \"and edx,0xffff\" \"and eax,0xffff\" parm [cx ax] [dx si] [di bx] \\\n      modify [ax bx cx dx si di] value [dx ax];\n    \n  #endif\n\n#endif\n\nRADDEFEND\n\n#define u32neg1 ((u32)(s32)-1)\n#define RAD_align(var) var; u8 junk##var[4-(sizeof(var)&3)]; \n#define RAD_align_after(var) u8 junk##var[4-(sizeof(var)&3)]={0}; \n#define RAD_align_init(var,val) var=val; u8 junk##var[4-(sizeof(var)&3)]={0};\n#define RAD_align_array(var,num) var[num]; u8 junk##var[4-(sizeof(var)&3)];\n#define RAD_align_string(var,str) char var[]=str; u8 junk##var[4-(sizeof(var)&3)]={0};\n\nRADEXPFUNC void PTR4* RADEXPLINK radmalloc(u32 numbytes);\nRADEXPFUNC void RADEXPLINK radfree(void PTR4* ptr);\n\n#ifdef __WATCOMC__\n\n  char bkbhit();\n  #pragma aux bkbhit = \"mov ah,1\" \"int 0x16\" \"lahf\" \"shr eax,14\" \"and eax,1\" \"xor al,1\" ;\n\n  char bgetch();\n  #pragma aux bgetch = \"xor ah,ah\" \"int 0x16\" \"test al,0xff\" \"jnz done\" \"mov al,ah\" \"or al,0x80\" \"done:\" modify [AX];\n\n  void BreakPoint();\n  #pragma aux BreakPoint = \"int 3\";\n\n  u8 radinp(u16 p);\n  #pragma aux radinp = \"in al,dx\" parm [DX];\n    \n  u8 radtoupper(u8 p);\n  #pragma aux radtoupper = \"cmp al,'a'\" \"jb c1\" \"cmp al,'z'\" \"ja c1\" \"sub al,32\" \"c1:\" parm [al] value [al];\n    \n  void radoutp(u16 p,u8 v);\n  #pragma aux radoutp = \"out dx,al\" parm [DX] [AL];\n\n#endif\n\n// for multi-processor machines\n\n#ifdef __RADNT__\n  #define LockedIncrement(var) _asm { lock inc [var] }\n  #define LockedDecrement(var) _asm { lock dec [var] }\n#else\n  #define LockedIncrement(var) _asm { inc [var] }\n  #define LockedDecrement(var) _asm { dec [var] }\n#endif\n\n#endif\n\n#endif\n\n"
  },
  {
    "path": "dll/resource.h",
    "content": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by dxwnd.rc\n//\n#define IDB_BANNER                      101\n#define IDB_CROSS                       102\n#define IDB_FIRE1                       103\n#define IDB_FIRE2                       104\n#define IDB_FIRE3                       105\n#define IDB_JOYCENTER\t\t\t\t\t106\n\n// Next default values for new objects\n// \n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NEXT_RESOURCE_VALUE        106\n#define _APS_NEXT_COMMAND_VALUE         40001\n#define _APS_NEXT_CONTROL_VALUE         1001\n#define _APS_NEXT_SYMED_VALUE           101\n#endif\n#endif\n"
  },
  {
    "path": "dll/shareddc.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n\n#include <stdio.h>\n#include <d3d9.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhelper.h\"\n#include \"resource.h\"\n#include \"hddraw.h\"\n#include \"shareddc.hpp\"\n\n//#define D3D9TRY\n#define SHAREDDCDEBUG FALSE\n#if SHAREDDCDEBUG\n#define _Warn(s) {char cap[80]; sprintf(cap, \"Warn at %d\", __LINE__); MessageBox(NULL, (s), cap, MB_OK);}\n#else\n#define _Warn(s) \n#endif\n\nextern HandleDDThreadLock_Type pReleaseDDThreadLock;\nextern GetDC_Type pGetDCMethod();\nextern ReleaseDC_Type pReleaseDCMethod();\n\n/*---------------------------------------------------------------------------------+\n|                                                                                  |\n| Constructor, Desctructor                                                         |\n|                                                                                  |\n+---------------------------------------------------------------------------------*/\n\ndxwSDC::dxwSDC()\n{\n\tOutTraceB(\"dxwSDC::dxwSDC: Initialize\\n\");\n\tPrimaryDC = NULL;\n\tlpDDSPrimary = NULL;\n\tLastScreenWidth = LastScreenHeight = 0;\n\tLastHDC = NULL;\n\tCurrenthWnd = NULL;\n}\n \ndxwSDC::~dxwSDC()\n{\n\t//OutTraceB(\"dxwSDC::~dxwSDC: Destroy\\n\");\n}\n\n/*---------------------------------------------------------------------------------+\n|                                                                                  |\n| GetPrimaryDC: builds a suitable DC to write to, according to the input DC        |\n|                                                                                  |\n+---------------------------------------------------------------------------------*/\n\nstatic IDirect3DSurface9 *pDestSurface = NULL;\n\nHDC dxwSDC::GetPrimaryDC(HDC hdc)\n{\n\treturn GetPrimaryDC(hdc, NULL);\n}\n\nHDC dxwSDC::GetPrimaryDC(HDC hdc, HDC hdcsrc)\n{\n\tHRESULT res;\n\textern HandleDDThreadLock_Type pReleaseDDThreadLock;\n\textern void *lpD3DActiveDevice;\n\n\tOutTraceB(\"dxwSDC::GetPrimaryDC: hdc=%x\\n\", hdc);\n\n\tCurrentHDCSrc = hdcsrc;\n\tCurrentHDC = hdc;\n\n\t// look for ddraw first\n\t//if(pReleaseDDThreadLock)(*pReleaseDDThreadLock)();\n\tlpDDSPrimary = dxwss.GetPrimarySurface();\n\tif (lpDDSPrimary) { \n\t\tif(pReleaseDDThreadLock)(*pReleaseDDThreadLock)();\n\t\tres=((*pGetDCMethod())(lpDDSPrimary, &PrimaryDC));\n\t\twhile((PrimaryDC == NULL) && lpDDSPrimary) { \n\t\t\tOutTraceB(\"dxwSDC::GetPrimaryDC: found primary surface with no DC, unref lpdds=%x\\n\", lpDDSPrimary);\n\t\t\tdxwss.UnrefSurface(lpDDSPrimary);\n\t\t\tlpDDSPrimary = dxwss.GetPrimarySurface();\n\t\t\tif (lpDDSPrimary) (*pGetDCMethod())(lpDDSPrimary, &PrimaryDC);\n\t\t}\n\t\tif (!PrimaryDC) {\n\t\t\t_Warn(\"No primary DC\");\n\t\t\tOutTraceB(\"dxwSDC::GetPrimaryDC: no ddraw primary DC\\n\");\n\t\t\treturn NULL;\n\t\t}\n\t\t// avoid double Getdc on same hdc and lock\n\t\t// if(PrimaryDC == hdc) (*pReleaseDC)(lpDDSPrimary, PrimaryDC);\n\t\tOutTraceB(\"dxwSDC::GetPrimaryDC: ddraw PrimaryDC=%x\\n\", PrimaryDC);\n\t\tVirtualSurfaceType = VIRTUAL_ON_DDRAW;\n\t}\n\telse {\n\t\t// finally, search GDI DC\n\t\tPrimaryDC = (*pGDIGetDC)(dxw.GethWnd());\n\t\tif (!PrimaryDC) {\n\t\t\t_Warn(\"No window DC\");\n\t\t\tOutTraceB(\"dxwSDC::GetPrimaryDC: no windows DC\\n\");\n\t\t\treturn NULL;\n\t\t}\n\t\tOutTraceB(\"dxwSDC::GetPrimaryDC: gdi PrimaryDC=%x\\n\", PrimaryDC);\n\t\tVirtualSurfaceType = VIRTUAL_ON_WINDOW;\n\t}\t\n\n\t// whenever the hdc changes, rebuild the virtual DC\n\tif(hdc != LastHDC) do {\n\t\tLastHDC = hdc;\n\t\tRECT client;\n\t\tif(VirtualHDC){\n\t\t\t//(*pGDIReleaseDC)(dxw.GethWnd(), VirtualHDC);\n\t\t\tDeleteObject(VirtualHDC);\n\t\t}\n\n\t\tif(!(VirtualHDC=(*pGDICreateCompatibleDC)(PrimaryDC))){\n\t\t\tOutTraceE(\"CreateCompatibleDC: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t_Warn(\"CreateCompatibleDC ERROR\");\n\t\t\tbreak;\n\t\t}\n\n\t\tif(!(CurrenthWnd = WindowFromDC(hdc))){\n\t\t\tOutTraceE(\"dxwSDC::GetPrimaryDC: WindowFromDC ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t_Warn(\"WindowFromDC ERROR\");\n\t\t\tbreak;\n\t\t}\n\n\t\tif(!(*pGetClientRect)(CurrenthWnd, &client)){\n\t\t\tOutTraceE(\"dxwSDC::GetPrimaryDC: GetClietError ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t_Warn(\"GetClietError ERROR\");\n\t\t\tbreak;\n\t\t}\n\n\t\tdxw.UnmapClient(&client);\n\t\tScreenWidth = client.right;\n\t\tScreenHeight = client.bottom;\n\n\t\tOutTraceB(\"dxwSDC::GetPrimaryDC: VirtualHDC INITIALIZE size=(%dx%d)\\n\", LastScreenWidth, LastScreenHeight);\n\n\t\tif(!(VirtualPic=(*pCreateCompatibleBitmap)(PrimaryDC, ScreenWidth, ScreenHeight))){\n\t\t\tOutTraceE(\"dxwSDC::GetPrimaryDC: CreateCompatibleBitmap ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t_Warn(\"CreateCompatibleBitmap ERROR\");\n\t\t}\n\n\t\tif(!(*pSelectObject)(VirtualHDC, VirtualPic)){\n\t\t\tOutTraceE(\"dxwSDC::GetPrimaryDC: SelectObject ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t_Warn(\"SelectObject ERROR\");\n\t\t}\n\n\t\tDeleteObject(VirtualPic);\n\t\tVirtualPic = 0;\n\t} while(0);\n\n\tif(CurrenthWnd && CurrenthWnd!=dxw.GethWnd()){\n\t\tPOINT zero1 = {0, 0};\n\t\tPOINT zero2 = {0, 0};\n\t\t(*pClientToScreen)(CurrenthWnd, &zero1);\n\t\t(*pClientToScreen)(dxw.GethWnd(), &zero2);\n\t\tWinOffset.x = zero1.x - zero2.x;\n\t\tWinOffset.y = zero1.y - zero2.y;\n\t\tVirtualOffset = WinOffset;\n\t\tdxw.UnmapClient(&VirtualOffset);\n\t\tOutTraceB(\"dxwSDC::GetPrimaryDC: WinOffset=(%d,%d)->(%d,%d)\\n\", WinOffset.x, WinOffset.y, VirtualOffset.x, VirtualOffset.y);\n\t}\n\telse {\n\t\tWinOffset.x = 0;\n\t\tWinOffset.y = 0;\n\t\tVirtualOffset.x = 0;\n\t\tVirtualOffset.y = 0;\n\t\tOutTraceB(\"dxwSDC::GetPrimaryDC: same window\\n\");\n\t}\n\n\tif(PrimaryDC){\n\t\tswitch(VirtualSurfaceType){\n\t\t\tcase VIRTUAL_ON_DDRAW:\n\t\t\t\tif(!(*pGDIBitBlt)(VirtualHDC, 0, 0, ScreenWidth, ScreenHeight, PrimaryDC, VirtualOffset.x, VirtualOffset.y, SRCCOPY)){\n\t\t\t\t\tOutTraceE(\"dxwSDC::GetPrimaryDC: BitBlt ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t\t\t_Warn(\"BitBlt ERROR\");\n\t\t\t\t}\n\t\t\t\tOutTraceB(\"dxwSDC::GetPrimaryDC: fill=(0,0)-(%dx%d) from=(%d,%d)\\n\", ScreenWidth, ScreenHeight, VirtualOffset.x, VirtualOffset.y);\n\t\t\t\tbreak;\n\t\t\tcase VIRTUAL_ON_WINDOW:\n\t\t\t\tint w, h;\n\t\t\t\tdxw.MapClient(&VirtualOffset);\n\t\t\t\tw = ScreenWidth;\n\t\t\t\th = ScreenHeight;\n\t\t\t\tdxw.MapClient(&w, &h);\n\t\t\t\tif(!(*pGDIStretchBlt)(VirtualHDC, 0, 0, ScreenWidth, ScreenHeight, PrimaryDC, VirtualOffset.x, VirtualOffset.y, w, h, SRCCOPY)){\n\t\t\t\t\tOutTraceE(\"dxwSDC::GetPrimaryDC: StretchBlt ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t\t\t\t_Warn(\"StretchBlt ERROR\");\n\t\t\t\t}\n\t\t\t\tOutTraceB(\"dxwSDC::GetPrimaryDC: fill=(0,0)-(%dx%d) from=(%d,%d)-(%dx%d)\\n\", ScreenWidth, ScreenHeight, VirtualOffset.x, VirtualOffset.y, w, h);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tPOINT origin = {};\n\tPOINT mainwin = {};\n\t(*pGetDCOrgEx)(hdc, &origin);\n\t(*pGetDCOrgEx)((*pGDIGetDC)(dxw.GethWnd()), &mainwin);\n\torigin.x -= mainwin.x;\n\torigin.y -= mainwin.y;\n\tOutTraceB(\"dxwSDC::GetPrimaryDC: origin=(%d,%d)\\n\", origin.x, origin.y);\n\n\tcopyDcAttributes(VirtualHDC, hdc, origin);\n\tsetClippingRegion(VirtualHDC, hdc, origin); \n\n\treturn VirtualHDC;\n}\n\nvoid dxwSDC::SetOrigin(int x, int y)\n{\n\tHybridX = x;\n\tHybridY = y;\n}\n\n/*---------------------------------------------------------------------------------+\n|                                                                                  |\n| GetHdc: returns the DC to write for the GDI call                                 |\n|                                                                                  |\n+---------------------------------------------------------------------------------*/\n\nHDC\tdxwSDC::GetHdc(void)\n{\n\treturn VirtualHDC;\n}\n\n/*---------------------------------------------------------------------------------+\n|                                                                                  |\n| PutPrimaryDC: transfers the DC content to the primary surface and the screen     |\n|                                                                                  |\n+---------------------------------------------------------------------------------*/\n\nBOOL dxwSDC::PutPrimaryDC(HDC hdc, BOOL UpdateScreen, int XDest, int YDest, int nDestWidth, int nDestHeight)\n{\n\textern Unlock1_Type pUnlock1;\n\tBOOL ret;\n\tHRESULT res;\n\n\tret = TRUE;\n\tif (nDestWidth == 0) nDestWidth=ScreenWidth-XDest;\n\tif (nDestHeight == 0) nDestHeight=ScreenHeight-YDest;\n\n\tif (IsDebug){\n\t\tchar sRect[81];\n\t\tif(UpdateScreen) sprintf(sRect, \"pos=(%d,%d) size=(%dx%d) winoffset=(%d,%d) virtoffset=(%d,%d)\", \n\t\t\tXDest, YDest, nDestWidth, nDestHeight, WinOffset.x, WinOffset.y, VirtualOffset.x, VirtualOffset.y);\n\t\telse strcpy(sRect, \"\");\n\t\tchar *sType;\n\t\tswitch(VirtualSurfaceType){\n\t\t\tcase VIRTUAL_ON_D3D: sType=\"D3D\"; break;\n\t\t\tcase VIRTUAL_ON_DDRAW: sType=\"DDRAW\"; break;\n\t\t\tcase VIRTUAL_ON_WINDOW: sType=\"WINDOW\"; break;\n\t\t\tdefault: sType=\"???\"; break;\n\t\t}\n\t\tOutTrace(\"dxwSDC::PutPrimaryDC: hdc=%x type=%s update=%x %s\\n\", hdc, sType, UpdateScreen, sRect);\n\t}\n\n\tif(UpdateScreen){\n\t\tswitch(VirtualSurfaceType){\n\t\t\tcase VIRTUAL_ON_DDRAW: \n\n\t\t\t\tret=(*pGDIBitBlt)(PrimaryDC, XDest+VirtualOffset.x, YDest+VirtualOffset.y, nDestWidth, nDestHeight, VirtualHDC, XDest, YDest, SRCCOPY);\n\t\t\t\tif(!ret || (ret==GDI_ERROR)) {\n\t\t\t\t\tOutTraceE(\"dxwSDC::PutPrimaryDC: BitBlt ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\t\t\t\t}\n\t\t\t\tres=(*pReleaseDCMethod())(lpDDSPrimary, PrimaryDC);\n\t\t\t\tif(res){\n\t\t\t\t\tOutTraceE(\"dxwSDC::PutPrimaryDC: ReleaseDC ERROR res=%x\\n\", res); \n\t\t\t\t}\n\t\t\t\tdxw.ScreenRefresh();\n\n\t\t\t\t// trick: duplicate the operation using the stretched mode to blit over clipped areas.\n\t\t\t\t// good for \"Star Treck: Armada\".\n\t\t\t\tif((dxw.dwFlags8 & SHAREDDCHYBRID) && CurrentHDCSrc && (WindowFromDC(CurrentHDC)!=dxw.GethWnd())){\n\t\t\t\t\tint nWDest, nHDest, nXDest, nYDest;\n\t\t\t\t\tOutTraceB(\"dxwSDC::PutPrimaryDC: StretchBlt over ddraw\\n\");\n\t\t\t\t\tnXDest= XDest;\n\t\t\t\t\tnYDest= YDest;\n\t\t\t\t\tnWDest= nDestWidth;\n\t\t\t\t\tnHDest= nDestHeight;\n\t\t\t\t\tdxw.MapClient(&nXDest, &nYDest, &nWDest, &nHDest);\n\t\t\t\t\tres=(*pGDIStretchBlt)(\n\t\t\t\t\t\tCurrentHDC, nXDest, nYDest, nWDest, nHDest, \n\t\t\t\t\t\tCurrentHDCSrc, HybridX, HybridY, nDestWidth, nDestHeight, SRCCOPY);\n\t\t\t\t\tif(!res) OutTraceE(\"dxwSDC::PutPrimaryDC: StretchBlt ERROR err=%d\\n\", GetLastError()); \n\t\t\t\t\t//RECT rect = {nXDest, nYDest, nXDest+nWDest, nYDest+nHDest};\n\t\t\t\t\t//res = (*pFrameRect)(CurrentHDC, &rect, 0);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\tcase VIRTUAL_ON_WINDOW:\n\n\t\t\t\tSetStretchBltMode(PrimaryDC, HALFTONE);\n\t\t\t\tRECT RealArea, VirtualArea;\n\t\t\t\t// some fullscreen games (\"Imperialism II\") blitted from negative coordinates -2,-2 !!\n\t\t\t\tif(XDest < 0) {\n\t\t\t\t\tnDestWidth += XDest;\n\t\t\t\t\tXDest=0;\n\t\t\t\t}\n\t\t\t\tif(YDest < 0) {\n\t\t\t\t\tnDestHeight += YDest;\n\t\t\t\t\tYDest=0;\n\t\t\t\t}\n\t\t\t\tVirtualArea.left = XDest;\n\t\t\t\tVirtualArea.top = YDest;\n\t\t\t\tVirtualArea.right = nDestWidth;\n\t\t\t\tVirtualArea.bottom = nDestHeight;\n\t\t\t\tRealArea = VirtualArea;\n\t\t\t\tdxw.MapClient(&RealArea);\n\t\t\t\tOffsetRect(&RealArea, WinOffset.x, WinOffset.y);\n\t\t\t\tret=TRUE;\n\t\t\t\tif(PrimaryDC)ret=(*pGDIStretchBlt)(PrimaryDC, RealArea.left, RealArea.top, RealArea.right, RealArea.bottom, VirtualHDC, VirtualArea.left, VirtualArea.top, VirtualArea.right, VirtualArea.bottom, SRCCOPY);\n\t\t\t\tret=(*pGDIReleaseDC)(dxw.GethWnd(), PrimaryDC);\n\t\t\t\tbreak;\n\n\t\t}\n\t}\n\telse {\n\t\tswitch(VirtualSurfaceType){\n\t\t\tcase VIRTUAL_ON_DDRAW: \n\t\t\t\tres=(*pReleaseDCMethod())(lpDDSPrimary, PrimaryDC);\n\t\t\t\tif(res){\n\t\t\t\t\tOutTraceE(\"dxwSDC::PutPrimaryDC: ReleaseDC ERROR res=%x\\n\", res); \n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase VIRTUAL_ON_WINDOW:\n\t\t\t\tret=(*pGDIReleaseDC)(dxw.GethWnd(), PrimaryDC);\n\t\t\t\tif(!ret){\n\t\t\t\t\tOutTraceE(\"dxwSDC::PutPrimaryDC: ReleaseDC ERROR err=%d\\n\", GetLastError()); \n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tOutTraceB(\"dxwSDC::PutPrimaryDC: hdc=%x PrimaryDC=%x ret=%x\\n\", hdc, PrimaryDC, ret);\n\treturn ret;\n}\n\nBOOL dxwSDC::PutPrimaryDC(HDC hdc, BOOL UpdateScreen)\n{\n\treturn PutPrimaryDC(hdc, UpdateScreen, 0, 0, LastScreenWidth, LastScreenHeight);\n}\n\n/*---------------------------------------------------------------------------------+\n|                                                                                  |\n| Service routines                                                                 |\n|                                                                                  |\n+---------------------------------------------------------------------------------*/\n\nvoid dxwSDC::copyDcAttributes(HDC destDC, HDC origDc, POINT origin)\n{\n\torigFont = (*pSelectObject)(destDC, GetCurrentObject(origDc, OBJ_FONT));\n\torigBrush = (*pSelectObject)(destDC, GetCurrentObject(origDc, OBJ_BRUSH));\n\torigPen = (*pSelectObject)(destDC, GetCurrentObject(origDc, OBJ_PEN));\n\n\tif (GM_ADVANCED == GetGraphicsMode(origDc)){\n\t\tSetGraphicsMode(destDC, GM_ADVANCED);\n\t\tXFORM transform = {};\n\t\tGetWorldTransform(origDc, &transform);\n\t\tSetWorldTransform(destDC, &transform);\n\t}\n\n\tSetMapMode(destDC, GetMapMode(origDc));\n\n\tPOINT viewportOrg = {};\n\tGetViewportOrgEx(origDc, &viewportOrg);\n\tSetViewportOrgEx(destDC, viewportOrg.x + origin.x, viewportOrg.y + origin.y, NULL);\n\tSIZE viewportExt = {};\n\tGetViewportExtEx(origDc, &viewportExt);\n\tSetViewportExtEx(destDC, viewportExt.cx, viewportExt.cy, NULL);\n\n\tPOINT windowOrg = {};\n\tGetWindowOrgEx(origDc, &windowOrg);\n\tSetWindowOrgEx(destDC, windowOrg.x, windowOrg.y, NULL);\n\tSIZE windowExt = {};\n\tGetWindowExtEx(origDc, &windowExt);\n\tSetWindowExtEx(destDC, windowExt.cx, windowExt.cy, NULL);\n\n\tSetArcDirection(destDC, GetArcDirection(origDc));\n\tSetBkColor(destDC, GetBkColor(origDc));\n\tSetBkMode(destDC, GetBkMode(origDc));\n\tSetDCBrushColor(destDC, GetDCBrushColor(origDc));\n\tSetDCPenColor(destDC, GetDCPenColor(origDc));\n\tSetLayout(destDC, GetLayout(origDc));\n\tSetPolyFillMode(destDC, GetPolyFillMode(origDc));\n\tSetROP2(destDC, GetROP2(origDc));\n\tSetStretchBltMode(destDC, GetStretchBltMode(origDc));\n\tSetTextAlign(destDC, GetTextAlign(origDc));\n\tSetTextCharacterExtra(destDC, GetTextCharacterExtra(origDc));\n\tSetTextColor(destDC, GetTextColor(origDc));\n\n\tOutTraceB(\"dxwSDC::copyDcAttributes: orig=(%d,%d)\\n\", origin.x, origin.y);\n\tif(!(*pSetWindowOrgEx)(destDC, -origin.x, -origin.y, NULL))\n\t\tOutTraceE(\"dxwSDC::copyDcAttributes: SetWindowOrgEx ERROR orig=(%d,%d) err=%d\\n\", origin.x, origin.y, GetLastError());\n\n\tPOINT brushOrg = {};\n\tGetBrushOrgEx(origDc, &brushOrg);\n\tSetBrushOrgEx(destDC, brushOrg.x, brushOrg.y, NULL);\n\n\tPOINT currentPos = {};\n\t(*pGetCurrentPositionEx)(origDc, &currentPos);\n\tdxw.MapClient(&currentPos);\n\t(*pMoveToEx)(destDC, currentPos.x, currentPos.y, NULL);\n}\n\ntypedef struct \n{\n\tHDC compatDc;\n\tPOINT origin;\n\tHWND rootWnd;\n} ExcludeClipRectsData_Type;\n\nstatic BOOL CALLBACK excludeClipRectsForOverlappingWindows(HWND hwnd, LPARAM lParam)\n{\n\tExcludeClipRectsData_Type *excludeClipRectsData = (ExcludeClipRectsData_Type *)lParam;\n\tif (!IsWindowVisible(hwnd)) return TRUE; // go ahead\n\tif (hwnd == excludeClipRectsData->rootWnd) return FALSE; // stop \n\tif(dxw.IsDesktop(hwnd)) return FALSE;\n\n\tRECT rect = {};\n\t(*pGetClientRect)(hwnd, &rect);\n\tOffsetRect(&rect, -excludeClipRectsData->origin.x, -excludeClipRectsData->origin.y);\n\tExcludeClipRect(excludeClipRectsData->compatDc, rect.left, rect.top, rect.right, rect.bottom);\n\tOutTraceB(\"dxwSDC::excludeClipRects: hwnd=%x rect=(%d,%d)-(%d,%d)\\n\", hwnd, rect.left, rect.top, rect.right, rect.bottom);\n\treturn TRUE;\n}\n\nvoid dxwSDC::setClippingRegion(HDC compatDc, HDC origDc, POINT origin)\n{\n\tOutTraceB(\"dxwSDC::setClippingRegion: compdc=%x origdc=%x origin=(%d,%d)\\n\", compatDc, origDc, origin.x, origin.y);\n\tHRGN clipRgn = CreateRectRgn(0, 0, 0, 0);\n\tconst bool isEmptyClipRgn = (1 != GetRandomRgn(origDc, clipRgn, SYSRGN));\n\tOutTraceB(\"dxwSDC::setClippingRegion: isEmptyClipRgn=%x\\n\", isEmptyClipRgn);\n\t// scale clip region\n\tPOINT upleft={0, 0};\n\t//(*pClientToScreen)(dxw.GethWnd(), &upleft);\n\t(*pClientToScreen)(CurrenthWnd, &upleft);\n\tif(IsDebug){\n\t\tOutTraceB(\"dxwSDC::setClippingRegion: hwnd=%x upleft=(%d,%d)\\n\", CurrenthWnd, upleft.x, upleft.y);\n\t}\n\tOffsetRgn(clipRgn, -upleft.x, -upleft.y);\n\tif(IsDebug){\n\t\tRECT RgnBox;\n\t\tGetRgnBox(clipRgn, &RgnBox);\n\t\tOutTraceB(\"dxwSDC::setClippingRegion: RgnBox=(%d,%d)-(%d,%d) size=(%dx%d)\\n\", \n\t\t\tRgnBox.left, RgnBox.top, RgnBox.right, RgnBox.bottom, RgnBox.right-RgnBox.left, RgnBox.bottom-RgnBox.top);\n\t}\n\t// end of scaling\n\t(*pSelectClipRgn)(compatDc, isEmptyClipRgn ? NULL : clipRgn);\n\tDeleteObject(clipRgn);\n\n\tHRGN origClipRgn = (*pCreateRectRgn)(0, 0, 0, 0);\n\tif (1 == GetClipRgn(origDc, origClipRgn))\n\t{\n\t\tOutTraceB(\"dxwSDC::setClippingRegion: GetClipRgn==1\\n\");\n\t\tOffsetRgn(origClipRgn, origin.x, origin.y);\n\t\tExtSelectClipRgn(compatDc, origClipRgn, RGN_AND);\n\t\tif(IsDebug){\n\t\t\tRECT RgnBox;\n\t\t\tGetRgnBox(origClipRgn, &RgnBox); // for logging only\n\t\t\tOutTraceB(\"dxwSDC::setClippingRegion: OrigRgnBox=(%d,%d)-(%d,%d)\\n\", RgnBox.left, RgnBox.top, RgnBox.right, RgnBox.bottom);\n\t\t}\n\t}\n\tDeleteObject(origClipRgn);\n\n\tif(dxw.dwFlags7 & FIXCLIPPERAREA){\n\t\t// to finish .....\n\t\t// on Win10 this part seems unnecessary and giving troubles .....\n\t\tif (!isEmptyClipRgn){\n\t\t\tOutTraceB(\"dxwSDC::setClippingRegion: isEmptyClipRgn FALSE\\n\");\n\t\t\tHWND hwnd = WindowFromDC(origDc);\n\t\t\tif (hwnd && (!dxw.IsDesktop(hwnd))){\n\t\t\t\tExcludeClipRectsData_Type excludeClipRectsData = { compatDc, origin, dxw.GethWnd() };\n\t\t\t\t//ExcludeClipRectsData_Type excludeClipRectsData = { compatDc, origin, GetAncestor(hwnd, GA_ROOT) };\n\t\t\t\tOutTraceB(\"dxwSDC::setClippingRegion: compatdc=%x origin=(%d,%d) ancestor=%x\\n\", \n\t\t\t\t\tcompatDc, origin.x, origin.y, dxw.GethWnd());\n\t\t\t\tEnumWindows(&excludeClipRectsForOverlappingWindows,(LPARAM)(&excludeClipRectsData));\n\t\t\t}\n\t\t}\n\t}\n}\n\n"
  },
  {
    "path": "dll/shareddc.hpp",
    "content": "#include <windows.h>\n#include \"syslibs.h\"\n\ntypedef enum {\n\tVIRTUAL_UNDEFINED = 0,\n\tVIRTUAL_ON_WINDOW,\n\tVIRTUAL_ON_DDRAW,\n\tVIRTUAL_ON_D3D,\n\tVIRTUAL_ON_OPENGL,\n\tVIRTUAL_ERROR\n} Virtual_type;\n\nclass dxwSDC\n{\n// Construction/destruction\npublic:\n    dxwSDC();\n    virtual ~dxwSDC();\n\n// Operations\npublic: // methods\n\tHDC\t\tGetPrimaryDC(HDC);\n\tHDC\t\tGetPrimaryDC(HDC, HDC);\n\tHDC\t\tGetHdc(void);\n\tBOOL\tPutPrimaryDC(HDC, BOOL, int, int, int, int);\n\tBOOL\tPutPrimaryDC(HDC, BOOL);\n\tvoid\tSetOrigin(int, int);\n\nprivate:\n\tvoid copyDcAttributes(HDC, HDC, POINT);\n\tvoid setClippingRegion(HDC, HDC, POINT);\n\n\tHDC PrimaryDC;\n\tHDC VirtualHDC;\n\tHDC CurrentHDC;\n\tHDC CurrentHDCSrc;\n\tHWND CurrenthWnd;\n\tLPDIRECTDRAWSURFACE lpDDSPrimary;\n\tHBITMAP VirtualPic;\n\tHGDIOBJ origFont;\n\tHGDIOBJ origBrush;\n\tHGDIOBJ origPen;\n\tPOINT WinOffset;\n\tPOINT VirtualOffset;\n\tint ScreenWidth, ScreenHeight;\n\tint LastScreenWidth, LastScreenHeight;\n\tHDC LastHDC;\n\tVirtual_type VirtualSurfaceType;\n\tstruct ExcludeClipRectsData\n\t{\n\t\tHDC compatDc;\n\t\tPOINT origin;\n\t\tHWND rootWnd;\n\t};\n\tint HybridX;\n\tint HybridY;\n\n};\n\nextern dxwSDC sdc;"
  },
  {
    "path": "dll/smack.cpp",
    "content": "#define  _CRT_SECURE_NO_WARNINGS\n\n#include <windows.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhook.h\"\n\n#include \"smack.h\"\n\ntypedef Smack * (WINAPI *SmackOpen_Type)(HANDLE, UINT32, INT32);\ntypedef Smack * (WINAPI *Smacker_Type)(Smack *);\ntypedef Smack * (WINAPI *Smacker2_Type)(Smack *, UINT32);\ntypedef Smack * (WINAPI *SmackColorRemap_Type)(Smack *, const void PTR4 *, u32, u32);\ntypedef Smack * (WINAPI *SmackColorRemapWithTrans_Type)(Smack *, const void PTR4 *, u32, u32, u32);\ntypedef u32\t\t(RADEXPLINK *SmackSetSystemRes_Type)(u32);\n\nSmackOpen_Type pSmackOpen;\nSmacker_Type pSmackClose, pSmackWait, pSmackDoFrame, pSmackNextFrame, pSmackSoundUseMSS, pSmackSoundUseDirectSound;\nSmacker2_Type pSmackSoundOnOff, pSmackGoto;\nSmackColorRemap_Type pSmackColorRemap;\nSmackColorRemapWithTrans_Type pSmackColorRemapWithTrans;\nSmackSetSystemRes_Type pSmackSetSystemRes;\n\nSmack * WINAPI extSmackOpen(HANDLE, UINT32, INT32);\nSmack * WINAPI extSmackClose(Smack *);\nSmack * WINAPI extSmackWait(Smack *);\nSmack * WINAPI extSmackDoFrame(Smack *);\nSmack * WINAPI extSmackNextFrame(Smack *);\nSmack * WINAPI extSmackSoundUseMSS(Smack *);\nSmack * WINAPI extSmackSoundUseDirectSound(Smack *);\nSmack * WINAPI extSmackSoundOnOff(Smack *, UINT32);\nSmack * WINAPI extSmackGoto(Smack *, UINT32);\nSmack * WINAPI extSmackColorRemap(Smack *, const void PTR4 *, u32, u32);\nSmack * WINAPI extSmackColorRemapWithTrans(Smack *, const void PTR4 *, u32, u32, u32);\nu32 RADEXPLINK extSmackSetSystemRes(u32 mode);\n\nstatic HookEntryEx_Type Hooks[]={\n\t{HOOK_IAT_CANDIDATE, 0x000E, \"_SmackOpen@12\", (FARPROC)NULL, (FARPROC *)&pSmackOpen, (FARPROC)extSmackOpen},\n\t{HOOK_IAT_CANDIDATE, 0x0012, \"_SmackClose@4\", (FARPROC)NULL, (FARPROC *)&pSmackClose, (FARPROC)extSmackClose},\n\t//{HOOK_IAT_CANDIDATE, 0x0020, \"_SmackWait@4\", (FARPROC)NULL, (FARPROC *)&pSmackWait, (FARPROC)extSmackWait},\n\t{HOOK_IAT_CANDIDATE, 0x0013, \"_SmackDoFrame@4\", (FARPROC)NULL, (FARPROC *)&pSmackDoFrame, (FARPROC)extSmackDoFrame},\n\t{HOOK_IAT_CANDIDATE, 0x0021, \"_SmackSoundUseMSS@4\", (FARPROC)NULL, (FARPROC *)&pSmackSoundUseMSS, (FARPROC)extSmackSoundUseMSS},\n\t{HOOK_IAT_CANDIDATE, 0x0011, \"_SmackSoundOnOff@8\", (FARPROC)NULL, (FARPROC *)&pSmackSoundOnOff, (FARPROC)extSmackSoundOnOff},\n\t{HOOK_IAT_CANDIDATE, 0x001B, \"_SmackGoto@8\", (FARPROC)NULL, (FARPROC *)&pSmackGoto, (FARPROC)extSmackGoto},\n\t{HOOK_IAT_CANDIDATE, 0x0015, \"_SmackNextFrame@4\", (FARPROC)NULL, (FARPROC *)&pSmackNextFrame, (FARPROC)extSmackNextFrame},\n\t{HOOK_IAT_CANDIDATE, 0x0026, \"_SmackSoundUseDirectSound@4\", (FARPROC)NULL, (FARPROC *)&pSmackSoundUseDirectSound, (FARPROC)extSmackSoundUseDirectSound},\n\t{HOOK_IAT_CANDIDATE, 0x0000, \"_SmackColorRemap@16\", (FARPROC)NULL, (FARPROC *)&pSmackColorRemap, (FARPROC)extSmackColorRemap},\n\t{HOOK_IAT_CANDIDATE, 0x0000, \"_SmackColorRemapWithTrans@20\", (FARPROC)NULL, (FARPROC *)&pSmackColorRemapWithTrans, (FARPROC)extSmackColorRemapWithTrans},\n\t{HOOK_IAT_CANDIDATE, 0x0000, \"_SmackSetSystemRes@4\", (FARPROC)NULL, (FARPROC *)&pSmackSetSystemRes, (FARPROC)extSmackSetSystemRes},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nFARPROC Remap_smack_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tif(!(dxw.dwFlags7 & HOOKSMACKW32)) return NULL;\n\tif (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\t// NULL -> keep the original call address\n\treturn NULL;\n}\n\nstatic char *libname = \"smackw32.dll\";\n\nvoid HookSmackW32(HMODULE hModule)\n{\n\tif(!(dxw.dwFlags7 & HOOKSMACKW32)) return;\n\tHookLibraryEx(hModule, Hooks, libname);\n\treturn;\n}\n\nchar *ExplainSmackFlags(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"SMACK\");\n\tif (c & SMACKNEEDPAN) strcat(eb, \"NEEDPAN+\");\n\tif (c & SMACKNEEDVOLUME) strcat(eb, \"NEEDVOLUME+\");\n\tif (c & SMACKFRAMERATE) strcat(eb, \"FRAMERATE+\");\n\tif (c & SMACKLOADEXTRA) strcat(eb, \"LOADEXTRA+\");\n\tif (c & SMACKPRELOADALL) strcat(eb, \"PRELOADALL+\");\n\tif (c & SMACKNOSKIP) strcat(eb, \"NOSKIP+\");\n\tif (c & SMACKSIMULATE) strcat(eb, \"SIMULATE+\");\n\tif (c & SMACKTRACK1) strcat(eb, \"TRACK1+\");\n\tif (c & SMACKTRACK2) strcat(eb, \"TRACK2+\");\n\tif (c & SMACKTRACK3) strcat(eb, \"TRACK3+\");\n\tif (c & SMACKTRACK4) strcat(eb, \"TRACK4+\");\n\tif (c & SMACKTRACK5) strcat(eb, \"TRACK5+\");\n\tif (c & SMACKTRACK6) strcat(eb, \"TRACK6+\");\n\tif (c & SMACKTRACK7) strcat(eb, \"TRACK7+\");\n\tif (c & SMACKBUFFERREVERSED) strcat(eb, \"BUFFERREVERSED+\");\n\tif (c & SMACKFILEISSMK) strcat(eb, \"FILEISSMK+\");\n\tif ((c & SMACKBUFFER16) == SMACKBUFFER555) strcat(eb, \"BUFFER555+\");\n\tif ((c & SMACKBUFFER16) == SMACKBUFFER565) strcat(eb, \"BUFFER565+\");\n\tif ((c & SMACKYNONE) == SMACKYNONE) strcat(eb, \"YNONE+\");\n\tif ((c & SMACKYNONE) == SMACKYDOUBLE) strcat(eb, \"YDOUBLE+\");\n\tif ((c & SMACKYNONE) == SMACKYINTERLACE) strcat(eb, \"YINTERLACE+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"SMACK\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nstatic void DumpSmack(Smack *s)\n{\n\tif(!IsDebug) return;\n\tOutTrace(\"Smack_%x: size=(%dx%d) frame=%d/%d rate=%d type=%x palette=%x rect=(%d,%d)(%d-%d) offset=(%d,%d) err=%x\\n\",\n\t\ts, s->Width, s->Height, s->FrameNum, s->Frames, s->MSPerFrame, s->SmackerType, s->NewPalette,\n\t\ts->LastRectx, s->LastRecty, s->LastRectw, s->LastRecth, s->LeftOfs, s->TopOfs, s->ReadError);\n}\n\nSmack * WINAPI extSmackOpen(HANDLE SmackFile, UINT32 flags, INT32 extrabuf)\n{\n\tSmack *h;\n\tOutTraceDW(\"SmackOpen: SmackFile=%x flags=%x(%s) extrabuf=%x\\n\", SmackFile, flags, ExplainSmackFlags(flags), extrabuf);\n\tif(!pSmackOpen) OutTraceE(\"ASSERT: NULL pSmackOpen\\n\");\n\th=(*pSmackOpen)(SmackFile, flags, extrabuf);\n\tOutTraceDW(\"SmackOpen: ret=%x\\n\", h);\n\tif (!h) return NULL;\n\t\t\n\tDumpSmack(h);\n\tif(dxw.dwFlags6 & NOMOVIES) {\n\t\tOutTraceDW(\"SmackOpen: NOMOVIES\\n\");\n\t\th->Frames = 1; // returning NULL or a frame counter below 1 is risky!\n\t\treturn h;\n\t}\n\treturn h;\n}\n\nSmack * WINAPI extSmackClose(Smack *h)\n{\n\tOutTraceDW(\"SmackClose: h=%x\\n\", h);\n\treturn (*pSmackClose)(h);\n}\n\nSmack * WINAPI extSmackWait(Smack *h)\n{\n\tOutTraceDW(\"SmackWait: h=%x\\n\", h);\n\tDumpSmack((Smack *)h);\n\treturn (*pSmackWait)(h);\n}\n\nSmack * WINAPI extSmackDoFrame(Smack *h)\n{\n\tSmack *ret;\n\tOutTraceDW(\"SmackDoFrame: h=%x\\n\", h);\n\tDumpSmack((Smack *)h);\n\tret = (*pSmackDoFrame)(h);\n\tif(dxw.dwFlags7 & FIXSMACKLOOP){\n\t\tdxw.MessagePump();\n\t\tdxw.ScreenRefresh();\n\t}\n\treturn ret;\n}\n\nSmack * WINAPI extSmackNextFrame(Smack *h)\n{\n\tOutTraceDW(\"SmackNextFrame: h=%x\\n\", h);\n\tDumpSmack(h);\n\treturn (*pSmackNextFrame)(h);\n}\n\nSmack * WINAPI extSmackSoundUseMSS(Smack *h)\n{\n\tOutTraceDW(\"SmackSoundUseMSS: h=%x\\n\", h);\n\tDumpSmack(h);\n\treturn (*pSmackSoundUseMSS)(h);\n}\n\nSmack * WINAPI extSmackSoundUseDirectSound(Smack *h)\n{\n\tOutTraceDW(\"SmackSoundUseDirectSound: h=%x\\n\", h);\n\tDumpSmack(h);\n\treturn (*pSmackSoundUseDirectSound)(h);\n}\n\nSmack * WINAPI extSmackSoundOnOff(Smack *h, UINT32 flag)\n{\n\tOutTraceDW(\"SmackSoundOnOff: h=%x flag=%x\\n\", h, flag);\n\tDumpSmack(h);\n\treturn (*pSmackSoundOnOff)(h, flag);\n}\n\nSmack * WINAPI extSmackGoto(Smack *h, UINT32 flag)\n{\n\tOutTraceDW(\"SmackGoto: h=%x flag=%x\\n\", h, flag);\n\tDumpSmack(h);\n\treturn (*pSmackGoto)(h, flag);\n}\n\nSmack * WINAPI extSmackColorRemap(Smack *h, const void PTR4 *remappal, u32 numcolors, u32 paltype)\n{\n\tOutTraceDW(\"SmackColorRemap: h=%x numcolors=%d paltype=%d\\n\", h, numcolors, paltype);\n\tDumpSmack(h);\n\t// BYPASS the call to avoid resolution changes\n\t//return (*pSmackColorRemap)(h, remappal, numcolors, paltype);\n\treturn h;\n}\n\nSmack * WINAPI extSmackColorRemapWithTrans(Smack *h, const void PTR4 *remappal, u32 numcolors, u32 paltype, u32 transindex)\n{\n\tOutTraceDW(\"SmackColorRemapWithTrans: h=%x numcolors=%d paltype=%d transindex=%d\\n\", h, numcolors, paltype, transindex);\n\tDumpSmack(h);\n\t// BYPASS the call to avoid resolution changes\n\t//return (*pSmackColorRemapWithTrans)(h, remappal, numcolors, paltype);\n\treturn h;\n}\n\n/* ---------------------------------------------------------------\n#define SMACKRESRESET    0\n#define SMACKRES640X400  1\n#define SMACKRES640X480  2\n#define SMACKRES800X600  3\n#define SMACKRES1024X768 4\n\nRADEXPFUNC u32 RADEXPLINK SmackSetSystemRes(u32 mode);  // use SMACKRES* values\n\n#define SMACKNOCUSTOMBLIT        128\n#define SMACKSMOOTHBLIT          256\n#define SMACKINTERLACEBLIT 512\n/* ------------------------------------------------------------ */\n\nu32 RADEXPLINK extSmackSetSystemRes(u32 mode)\n{\n\tchar *modes[5]={\"reset\", \"640X400\", \"640X480\", \"800X600\", \"1024X768\"};\n\tint width, height;\n\tstatic int prevwidth, prevheight;\n\tOutTraceDW(\"SmackSetSystemRes: mode=%x(%s)\\n\", mode, modes[mode % 5]);\n\t// BYPASS the call to avoid resolution changes\n\t//return (*pSmackSetSystemRes)(h);\n\tmode = mode % 5;\n\t// save previous screen resolution for later mode=0 usage\n\tif(mode){\n\t\tprevwidth=dxw.GetScreenWidth();\n\t\tprevheight=dxw.GetScreenHeight();\n\t\tdxw.SetFullScreen(TRUE);\n\t}\n\tswitch(mode){\n\t\tcase 0: width=prevwidth; height=prevheight; break;\n\t\tcase 1: width=640; height=400; break;\n\t\tcase 2: width=640; height=480; break;\n\t\tcase 3: width=800; height=600; break;\n\t\tcase 4: width=1024; height=768; break;\n\t}\n\tdxw.SetScreenSize(width, height);\n\tif(dxw.Windowize && dxw.GethWnd()) AdjustWindowFrame(dxw.GethWnd(), width, height);\n\treturn 0;\n}\n/* ---------------------------------------------------------------\nUsed by M2 Tank Platoon II:\nOrdinal 0x0015 name _SmackNextFrame@4\nOrdinal 0x000E name _SmackOpen@12\nOrdinal 0x0026 name _SmackSoundUseDirectSound@4\nOrdinal 0x0012 name _SmackClose@4\nOrdinal 0x0013 name _SmackDoFrame@4\nOrdinal 0x0017 name _SmackToBuffer@28\nOrdinal 0x0020 name _SmackWait@4\n/* ------------------------------------------------------------ */\n\n"
  },
  {
    "path": "dll/smack.h",
    "content": "#ifndef SMACKH\n#define SMACKH\n\n#define SMACKVERSION \"3.2f\"\n\n#ifndef __RADRES__\n\n#include \"rad.h\"\n\nRADDEFSTART\n\ntypedef struct SmackTag {\n  u32 Version;           // SMK2 only right now\n  u32 Width;             // Width (1 based, 640 for example)\n  u32 Height;            // Height (1 based, 480 for example)\n  u32 Frames;            // Number of frames (1 based, 100 = 100 frames)\n  u32 MSPerFrame;        // Frame Rate\n  u32 SmackerType;       // bit 0 set=ring frame\n  u32 LargestInTrack[7]; // Largest single size for each track\n  u32 tablesize;         // Size of the init tables\n  u32 codesize;          // Compression info   \n  u32 absize;            // ditto\n  u32 detailsize;        // ditto\n  u32 typesize;          // ditto\n  u32 TrackType[7];      // high byte=0x80-Comp,0x40-PCM data,0x20-16 bit,0x10-stereo\n  u32 extra;             // extra value (should be zero)\n  u32 NewPalette;        // set to one if the palette changed\n  u8  Palette[772];      // palette data\n  u32 PalType;           // type of palette\n  u32 FrameNum;          // Frame Number to be displayed\n  u32 FrameSize;         // The current frame's size in bytes\n  u32 SndSize;           // The current frame sound tracks' size in bytes\n  s32 LastRectx;         // Rect set in from SmackToBufferRect (X coord)\n  s32 LastRecty;         // Rect set in from SmackToBufferRect (Y coord)\n  s32 LastRectw;         // Rect set in from SmackToBufferRect (Width)\n  s32 LastRecth;         // Rect set in from SmackToBufferRect (Height)\n  u32 OpenFlags;         // flags used on open\n  u32 LeftOfs;           // Left Offset used in SmackTo\n  u32 TopOfs;            // Top Offset used in SmackTo\n  u32 LargestFrameSize;  // Largest frame size\n  u32 Highest1SecRate;   // Highest 1 sec data rate\n  u32 Highest1SecFrame;  // Highest 1 sec data rate starting frame\n  u32 ReadError;         // Set to non-zero if a read error has ocurred\n  u32 addr32;            // translated address for 16 bit interface\n} Smack;              \n\n#define SmackHeaderSize(smk) ((((u8*)&((smk)->extra))-((u8*)(smk)))+4)\n\ntypedef struct SmackSumTag {\n  u32 TotalTime;         // total time\n  u32 MS100PerFrame;     // MS*100 per frame (100000/MS100PerFrame=Frames/Sec)\n  u32 TotalOpenTime;     // Time to open and prepare for decompression\n  u32 TotalFrames;       // Total Frames displayed\n  u32 SkippedFrames;     // Total number of skipped frames\n  u32 SoundSkips;        // Total number of sound skips\n  u32 TotalBlitTime;     // Total time spent blitting\n  u32 TotalReadTime;     // Total time spent reading \n  u32 TotalDecompTime;   // Total time spent decompressing\n  u32 TotalBackReadTime; // Total time spent reading in background\n  u32 TotalReadSpeed;    // Total io speed (bytes/second)\n  u32 SlowestFrameTime;  // Slowest single frame time\n  u32 Slowest2FrameTime; // Second slowest single frame time\n  u32 SlowestFrameNum;   // Slowest single frame number\n  u32 Slowest2FrameNum;  // Second slowest single frame number\n  u32 AverageFrameSize;  // Average size of the frame\n  u32 HighestMemAmount;  // Highest amount of memory allocated\n  u32 TotalExtraMemory;  // Total extra memory allocated\n  u32 HighestExtraUsed;  // Highest extra memory actually used\n} SmackSum;\n\n\n//=======================================================================\n#define SMACKNEEDPAN    0x00020L // Will be setting the pan\n#define SMACKNEEDVOLUME 0x00040L // Will be setting the volume\n#define SMACKFRAMERATE  0x00080L // Override fr (call SmackFrameRate first)\n#define SMACKLOADEXTRA  0x00100L // Load the extra buffer during SmackOpen\n#define SMACKPRELOADALL 0x00200L // Preload the entire animation\n#define SMACKNOSKIP     0x00400L // Don't skip frames if falling behind\n#define SMACKSIMULATE   0x00800L // Simulate the speed (call SmackSim first)\n#define SMACKFILEHANDLE 0x01000L // Use when passing in a file handle\n#define SMACKTRACK1     0x02000L // Play audio track 1\n#define SMACKTRACK2     0x04000L // Play audio track 2\n#define SMACKTRACK3     0x08000L // Play audio track 3\n#define SMACKTRACK4     0x10000L // Play audio track 4\n#define SMACKTRACK5     0x20000L // Play audio track 5\n#define SMACKTRACK6     0x40000L // Play audio track 6\n#define SMACKTRACK7     0x80000L // Play audio track 7\n#define SMACKTRACKS (SMACKTRACK1|SMACKTRACK2|SMACKTRACK3|SMACKTRACK4|SMACKTRACK5|SMACKTRACK6|SMACKTRACK7)\n\n#define SMACKBUFFERREVERSED 0x00000001\n#define SMACKBUFFER555      0x80000000\n#define SMACKBUFFER565      0xc0000000\n#define SMACKBUFFER16       (SMACKBUFFER555|SMACKBUFFER565)\n\n#define SMACKYINTERLACE 0x100000L // Force interleaving Y scaling\n#define SMACKYDOUBLE    0x200000L // Force doubling Y scaling\n#define SMACKYNONE  (SMACKYINTERLACE|SMACKYDOUBLE) // Force normal Y scaling\n#define SMACKFILEISSMK 0x2000000L // Internal flag for 16 to 32 bit thunking\n\n#define SMACKAUTOEXTRA 0xffffffffL // NOT A FLAG! - Use as extrabuf param \n//=======================================================================\n\n#define SMACKSURFACEFAST             0\n#define SMACKSURFACESLOW             1\n#define SMACKSURFACEDIRECT           2\n\nRADEXPFUNC Smack PTR4* RADEXPLINK SmackOpen(const char PTR4* name,u32 flags,u32 extrabuf);\n\n#ifdef __RADMAC__\n  #include <files.h>\n\n  RADEXPFUNC Smack PTR4* RADEXPLINK SmackMacOpen(FSSpec* fsp,u32 flags,u32 extrabuf);\n#endif\n\nRADEXPFUNC u32  RADEXPLINK SmackDoFrame(Smack PTR4* smk);\nRADEXPFUNC void RADEXPLINK SmackNextFrame(Smack PTR4* smk);\nRADEXPFUNC u32  RADEXPLINK SmackWait(Smack PTR4* smk);\nRADEXPFUNC void RADEXPLINK SmackClose(Smack PTR4* smk);\n\nRADEXPFUNC void RADEXPLINK SmackVolumePan(Smack PTR4* smk, u32 trackflag,u32 volume,u32 pan);\n\nRADEXPFUNC void RADEXPLINK SmackSummary(Smack PTR4* smk,SmackSum PTR4* sum);\n\nRADEXPFUNC u32  RADEXPLINK SmackSoundInTrack(Smack PTR4* smk,u32 trackflags);\nRADEXPFUNC u32  RADEXPLINK SmackSoundOnOff(Smack PTR4* smk,u32 on);\n\n#ifndef __RADMAC__\nRADEXPFUNC void RADEXPLINK SmackToScreen(Smack PTR4* smk,u32 left,u32 top,u32 BytePS,const u16 PTR4* WinTbl,void* SetBank,u32 Flags);\n#endif\n\nRADEXPFUNC void RADEXPLINK SmackToBuffer(Smack PTR4* smk,u32 left,u32 top,u32 Pitch,u32 destheight,const void PTR4* buf,u32 Flags);\nRADEXPFUNC u32  RADEXPLINK SmackToBufferRect(Smack PTR4* smk, u32 SmackSurface);\n\nRADEXPFUNC void RADEXPLINK SmackGoto(Smack PTR4* smk,u32 frame);\nRADEXPFUNC void RADEXPLINK SmackColorRemapWithTrans(Smack PTR4* smk,const void PTR4* remappal,u32 numcolors,u32 paltype,u32 transindex);\n#define SmackColorRemap(smk,remappal,numcolors,paltype) SmackColorRemapWithTrans(smk,remappal,numcolors,paltype,1000)\nRADEXPFUNC void RADEXPLINK SmackColorTrans(Smack PTR4* smk,const void PTR4* trans);\nRADEXPFUNC void RADEXPLINK SmackFrameRate(u32 forcerate);\nRADEXPFUNC void RADEXPLINK SmackSimulate(u32 sim);\n\nRADEXPFUNC u32  RADEXPLINK SmackGetTrackData(Smack PTR4* smk,void PTR4* dest,u32 trackflag);\n\nRADEXPFUNC void RADEXPLINK SmackSoundCheck(void);\n\n\n//======================================================================\n\n// the functions for the new SmackBlit API \n\ntypedef struct _SMACKBLIT PTR4* HSMACKBLIT;\n\ntypedef struct _SMACKBLIT {\n  u32 Flags;\n  u8 PTR4* Palette;\n  u32 PalType;\n  u16 PTR4* SmoothTable;\n  u16 PTR4* Conv8to16Table;\n  u32 whichmode;\n  u32 palindex;\n  u32 t16index;\n  u32 smoothindex;\n  u32 smoothtype;\n  u32 firstpalette;\n} SMACKBLIT;\n\n#define SMACKBLIT1X                1\n#define SMACKBLIT2X                2\n#define SMACKBLIT2XSMOOTHING       4\n#define SMACKBLIT2XINTERLACE       8\n\nRADEXPFUNC HSMACKBLIT RADEXPLINK SmackBlitOpen(u32 flags);\nRADEXPFUNC void RADEXPLINK SmackBlitSetPalette(HSMACKBLIT sblit, void PTR4* Palette,u32 PalType);\nRADEXPFUNC u32 RADEXPLINK SmackBlitSetFlags(HSMACKBLIT sblit,u32 flags);\nRADEXPFUNC void RADEXPLINK SmackBlit(HSMACKBLIT sblit,void PTR4* dest, u32 destpitch, u32 destx, u32 desty, void PTR4* src, u32 srcpitch, u32 srcx, u32 srcy, u32 srcw, u32 srch);\nRADEXPFUNC void RADEXPLINK SmackBlitClear(HSMACKBLIT sblit,void PTR4* dest, u32 destpitch, u32 destx, u32 desty, u32 destw, u32 desth, s32 color);\nRADEXPFUNC void RADEXPLINK SmackBlitClose(HSMACKBLIT sblit);\nRADEXPFUNC void RADEXPLINK SmackBlitTrans(HSMACKBLIT sblit,void PTR4* dest, u32 destpitch, u32 destx, u32 desty, void PTR4* src, u32 srcpitch, u32 srcx, u32 srcy, u32 srcw, u32 srch, u32 trans);\nRADEXPFUNC void RADEXPLINK SmackBlitMask(HSMACKBLIT sblit,void PTR4* dest, u32 destpitch, u32 destx, u32 desty, void PTR4* src, u32 srcpitch, u32 srcx, u32 srcy, u32 srcw, u32 srch, u32 trans,void PTR4* mask);\nRADEXPFUNC void RADEXPLINK SmackBlitMerge(HSMACKBLIT sblit,void PTR4* dest, u32 destpitch, u32 destx, u32 desty, void PTR4* src, u32 srcpitch, u32 srcx, u32 srcy, u32 srcw, u32 srch, u32 trans,void PTR4* back);\nRADEXPFUNC char PTR4* RADEXPLINK SmackBlitString(HSMACKBLIT sblit,char PTR4* dest);\n\n#ifndef __RADMAC__\nRADEXPFUNC u32 RADEXPLINK SmackUseMMX(u32 flag); //0=off, 1=on, 2=query current\n#endif\n\n//======================================================================\n#ifdef __RADDOS__\n\n  #define SMACKSOUNDNONE -1\n\n  extern void* SmackTimerSetupAddr;\n  extern void* SmackTimerReadAddr;\n  extern void* SmackTimerDoneAddr;\n\n  typedef void RADEXPLINK (*SmackTimerSetupType)(void);\n  typedef u32 RADEXPLINK (*SmackTimerReadType)(void);\n  typedef void RADEXPLINK (*SmackTimerDoneType)(void);\n\n  #define SmackTimerSetup() ((SmackTimerSetupType)(SmackTimerSetupAddr))()\n  #define SmackTimerRead() ((SmackTimerReadType)(SmackTimerReadAddr))()\n  #define SmackTimerDone() ((SmackTimerDoneType)(SmackTimerDoneAddr))()\n\n  RADEXPFUNC u8 RADEXPLINK SmackSoundUseMSS(void* DigDriver);\n\n  #ifndef AIL_startup\n    #ifdef __SW_3R\n      extern s32 cdecl AIL_startup_reg(void);\n      #define AIL_startup AIL_startup_reg\n    #else\n      extern s32 cdecl AIL_startup_stack(void);\n      #define AIL_startup AIL_startup_stack\n    #endif\n  #endif\n  #define SmackSoundMSSLiteInit() SmackSoundMSSLiteInitWithStart(&AIL_startup);\n  RADEXPFUNC void RADEXPLINK SmackSoundMSSLiteInitWithStart(void* start);\n  RADEXPFUNC void RADEXPLINK SmackSoundMSSLiteDone(void);\n\n  RADEXPFUNC u8 RADEXPLINK SmackSoundUseSOS3r(u32 SOSDriver,u32 MaxTimerSpeed);\n  RADEXPFUNC u8 RADEXPLINK SmackSoundUseSOS3s(u32 SOSDriver,u32 MaxTimerSpeed);\n  RADEXPFUNC u8 RADEXPLINK SmackSoundUseSOS4r(u32 SOSDriver,u32 MaxTimerSpeed);\n  RADEXPFUNC u8 RADEXPLINK SmackSoundUseSOS4s(u32 SOSDriver,u32 MaxTimerSpeed);\n\n  #ifdef __SW_3R\n    #define SmackSoundUseSOS3 SmackSoundUseSOS3r\n    #define SmackSoundUseSOS4 SmackSoundUseSOS4r\n  #else\n    #define SmackSoundUseSOS3 SmackSoundUseSOS3s\n    #define SmackSoundUseSOS4 SmackSoundUseSOS4s\n  #endif\n\n#else\n\n  #define SMACKRESRESET    0\n  #define SMACKRES640X400  1\n  #define SMACKRES640X480  2\n  #define SMACKRES800X600  3\n  #define SMACKRES1024X768 4\n\n  RADEXPFUNC u32 RADEXPLINK SmackSetSystemRes(u32 mode);  // use SMACKRES* values\n\n  #define SMACKNOCUSTOMBLIT        128\n  #define SMACKSMOOTHBLIT          256\n  #define SMACKINTERLACEBLIT       512\n\n  #ifdef __RADMAC__\n\n    #include <windows.h>\n    #include <palettes.h>\n    #include <qdoffscreen.h>\n\n    #define SmackTimerSetup()\n    #define SmackTimerDone()\n    RADEXPFUNC u32 RADEXPLINK SmackTimerRead(void);\n\n    RADEXPFUNC s32 RADEXPLINK SmackGDSurfaceType( GDHandle gd );\n\n    #define SMACKAUTOBLIT          0\n    #define SMACKDIRECTBLIT        1\n    #define SMACKGWORLDBLIT        2\n\n    typedef struct SmackBufTag {\n      u32 Reversed;\n      u32 SurfaceType;    // SMACKSURFACExxxxxx\n      u32 BlitType;       // SMACKxxxxxBLIT\n      u32 Width;\n      u32 Height;\n      u32 Pitch;\n      u32 Zoomed;\n      u32 ZWidth;\n      u32 ZHeight;\n      u32 DispColors;     // colors on screen\n      u32 MaxPalColors;\n      u32 PalColorsInUse;\n      u32 StartPalColor;\n      u32 EndPalColor;\n      void* Buffer;\n      void* Palette;\n      u32 PalType;\n      u32 SoftwareCursor;\n\n      WindowPtr wp;\n      GWorldPtr gwp;\n      CTabHandle cth;\n      PaletteHandle palh;\n\n      GDHandle gd;\n      u32 gdSurfaceType;\n      HSMACKBLIT sblit;\n      void * ScreenAddr;\n      u32 ScreenPitch;\n      \n      s32 manyblits;\n      s32 PTR4* blitrects;\n      s32 PTR4* rectsptr;\n      s32 maxrects;\n      s32 numrects;\n\n    } SmackBuf;\n\n  #else\n\n    #ifdef __RADWIN__\n\n      #define INCLUDE_MMSYSTEM_H\n      #include \"windows.h\"\n      #include \"windowsx.h\"\n\n      #ifdef __RADNT__          // to combat WIN32_LEAN_AND_MEAN\n\n        #include \"mmsystem.h\"\n\n        RADEXPFUNC s32 RADEXPLINK SmackDDSurfaceType(void* lpDDS);\n\n      #endif\n\n      #define SMACKAUTOBLIT              0\n      #define SMACKFULL320X240BLIT       1\n      #define SMACKFULL320X200BLIT       2\n      #define SMACKFULL320X200DIRECTBLIT 3\n      #define SMACKSTANDARDBLIT          4\n      #define SMACKWINGBLIT              5\n      #define SMACKDIBSECTIONBLIT        5\n\n      #define WM_SMACKACTIVATE WM_USER+0x5678\n\n      typedef struct SmackBufTag {\n        u32 Reversed;             // 1 if the buffer is upside down\n        u32 SurfaceType;          // SMACKSURFACExxxx defines\n        u32 BlitType;             // SMACKxxxxBLIT defines\n        u32 FullScreen;           // 1 if full-screen\n        u32 Width;\n        u32 Height;\n        u32 Pitch;\n        u32 Zoomed;\n        u32 ZWidth;\n        u32 ZHeight;\n        u32 DispColors;           // colors on the screen\n        u32 MaxPalColors;         // total possible colors in palette (usually 256)\n        u32 PalColorsInUse;       // Used colors in palette (usually 236)\n        u32 StartPalColor;        // first usable color index (usually 10)\n        u32 EndPalColor;          // last usable color index (usually 246)\n        RGBQUAD Palette[256];\n        u32 PalType;\n        u32 forceredraw;  // force a complete redraw on next blit (for >8bit)\n        u32 didapalette;  // force an invalidate on the next palette change\n\n        void PTR4* Buffer;\n        void PTR4* DIBRestore;\n        u32 OurBitmap;\n        u32 OrigBitmap;\n        u32 OurPalette;\n        u32 WinGDC;\n        u32 FullFocused;\n        u32 ParentHwnd;\n        u32 OldParWndProc;\n        u32 OldDispWndProc;\n        u32 DispHwnd;\n        u32 WinGBufHandle;\n        void PTR4* lpDD;\n        void PTR4* lpDDSP;\n        u32 DDSurfaceType;\n        HSMACKBLIT DDblit;\n        s32 ddSoftwarecur;\n        s32 didaddblit;\n        s32 lastwasdd;\n        RECT ddscreen;\n        s32 manyblits;\n        s32 PTR4* blitrects;\n        s32 PTR4* rectsptr;\n        s32 maxrects;\n        s32 numrects;\n        HDC lastdc;\n      } SmackBuf;\n\n      RADEXPFUNC void RADEXPLINK SmackGet(Smack PTR4* smk,void PTR4* dest);\n      RADEXPFUNC void RADEXPLINK SmackBufferGet( SmackBuf PTR4* sbuf, void PTR4* dest);\n      \n      RADEXPFUNC u8 RADEXPLINK SmackSoundUseMSS(void PTR4* dd);\n      RADEXPFUNC u8 RADEXPLINK SmackSoundUseDirectSound(void PTR4* dd); // NULL=Create\n      RADEXPFUNC void RADEXPLINK SmackSoundSetDirectSoundHWND(HWND hw);\n      RADEXPFUNC u8 RADEXPLINK SmackSoundUseDW(u32 openfreq, u32 openbits, u32 openchans);\n\n      #define SmackTimerSetup()\n      #define SmackTimerDone()\n      #define SmackTimerRead timeGetTime\n\n    #endif\n\n  #endif\n\n  #ifdef __RADMAC__\n    RADEXPFUNC SmackBuf PTR4* RADEXPLINK SmackBufferOpen( WindowPtr wp, u32 BlitType, u32 width, u32 height, u32 ZoomW, u32 ZoomH );\n    RADEXPFUNC u32  RADEXPLINK SmackBufferBlit( SmackBuf PTR4* sbuf, s32 hwndx, s32 hwndy, s32 subx, s32 suby, s32 subw, s32 subh );\n    RADEXPFUNC void RADEXPLINK SmackBufferFromScreen( SmackBuf PTR4* destbuf, s32 x, s32 y);\n\n    RADEXPFUNC s32 RADEXPLINK SmackIsSoftwareCursor(GDHandle gd);\n    RADEXPFUNC s32 RADEXPLINK SmackCheckCursor(WindowPtr wp,s32 x,s32 y,s32 w,s32 h);\n    RADEXPFUNC void RADEXPLINK SmackRestoreCursor(s32 checkcount);\n  #else\n    RADEXPFUNC SmackBuf PTR4* RADEXPLINK SmackBufferOpen( HWND wnd, u32 BlitType, u32 width, u32 height, u32 ZoomW, u32 ZoomH );\n    RADEXPFUNC u32  RADEXPLINK SmackBufferBlit( SmackBuf PTR4* sbuf, HDC dc, s32 hwndx, s32 hwndy, s32 subx, s32 suby, s32 subw, s32 subh );\n    RADEXPFUNC void RADEXPLINK SmackBufferFromScreen( SmackBuf PTR4* destbuf, HWND hw, s32 x, s32 y);\n\n    RADEXPFUNC s32 RADEXPLINK SmackIsSoftwareCursor(void* lpDDSP,HCURSOR cur);\n    RADEXPFUNC s32 RADEXPLINK SmackCheckCursor(HWND wnd,s32 x,s32 y,s32 w,s32 h);\n    RADEXPFUNC void RADEXPLINK SmackRestoreCursor(s32 checkcount);\n  #endif\n\n  RADEXPFUNC void RADEXPLINK SmackBufferStartMultipleBlits( SmackBuf PTR4* sbuf );\n  RADEXPFUNC void RADEXPLINK SmackBufferEndMultipleBlits( SmackBuf PTR4* sbuf );\n\n  RADEXPFUNC char PTR4* RADEXPLINK SmackBufferString(SmackBuf PTR4* sb,char PTR4* dest);\n\n  RADEXPFUNC void RADEXPLINK SmackBufferNewPalette( SmackBuf PTR4* sbuf, const void PTR4* pal, u32 paltype );\n  RADEXPFUNC u32  RADEXPLINK SmackBufferSetPalette( SmackBuf PTR4* sbuf );\n  RADEXPFUNC void RADEXPLINK SmackBufferClose( SmackBuf PTR4* sbuf );\n \n  RADEXPFUNC void RADEXPLINK SmackBufferClear( SmackBuf PTR4* destbuf, u32 color);\n\n  RADEXPFUNC void RADEXPLINK SmackBufferToBuffer( SmackBuf PTR4* destbuf, s32 destx, s32 desty, const SmackBuf PTR4* sourcebuf,s32 sourcex,s32 sourcey,s32 sourcew,s32 sourceh);\n  RADEXPFUNC void RADEXPLINK SmackBufferToBufferTrans( SmackBuf PTR4* destbuf, s32 destx, s32 desty, const SmackBuf PTR4* sourcebuf,s32 sourcex,s32 sourcey,s32 sourcew,s32 sourceh,u32 TransColor);\n  RADEXPFUNC void RADEXPLINK SmackBufferToBufferMask( SmackBuf PTR4* destbuf, s32 destx, s32 desty, const SmackBuf PTR4* sourcebuf,s32 sourcex,s32 sourcey,s32 sourcew,s32 sourceh,u32 TransColor,const SmackBuf PTR4* maskbuf);\n  RADEXPFUNC void RADEXPLINK SmackBufferToBufferMerge( SmackBuf PTR4* destbuf, s32 destx, s32 desty, const SmackBuf PTR4* sourcebuf,s32 sourcex,s32 sourcey,s32 sourcew,s32 sourceh,u32 TransColor,const SmackBuf PTR4* mergebuf);\n  RADEXPFUNC void RADEXPLINK SmackBufferCopyPalette( SmackBuf PTR4* destbuf, SmackBuf PTR4* sourcebuf, u32 remap);\n\n  RADEXPFUNC u32  RADEXPLINK SmackBufferFocused( SmackBuf PTR4* sbuf);\n\n#endif\n\nRADDEFEND\n\n#endif\n\n#endif\n"
  },
  {
    "path": "dll/stb_dxt.h",
    "content": "// stb_dxt.h - Real-Time DXT1/DXT5 compressor \n// Based on original by fabian \"ryg\" giesen v1.04\n// Custom version, modified by Yann Collet\n//\n/*\n   BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)\n\n   Redistribution and use in source and binary forms, with or without\n   modification, are permitted provided that the following conditions are\n   met:\n\n       * Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n       * Redistributions in binary form must reproduce the above\n   copyright notice, this list of conditions and the following disclaimer\n   in the documentation and/or other materials provided with the\n   distribution.\n\n   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n   You can contact the author at :\n   - RygsDXTc source repository : http://code.google.com/p/rygsdxtc/\n\n*/\n// use '#define STB_DXT_IMPLEMENTATION' before including to create the implementation\n//\n// USAGE:\n//   call stb_compress_dxt_block() for every block (you must pad)\n//     source should be a 4x4 block of RGBA data in row-major order;\n//     A is ignored if you specify alpha=0; you can turn on dithering\n//     and \"high quality\" using mode.\n//\n// version history:\n//   v1.06  - (cyan) implement Fabian Giesen's comments\n//   v1.05  - (cyan) speed optimizations\n//   v1.04  - (ryg) default to no rounding bias for lerped colors (as per S3TC/DX10 spec);\n//            single color match fix (allow for inexact color interpolation);\n//            optimal DXT5 index finder; \"high quality\" mode that runs multiple refinement steps.\n//   v1.03  - (stb) endianness support\n//   v1.02  - (stb) fix alpha encoding bug\n//   v1.01  - (stb) fix bug converting to RGB that messed up quality, thanks ryg & cbloom\n//   v1.00  - (stb) first release\n\n#ifndef STB_INCLUDE_STB_DXT_H\n#define STB_INCLUDE_STB_DXT_H\n\n\n//*******************************************************************\n// Enable custom Optimisations\n// Comment this define if you want to revert to ryg's original code\n#define NEW_OPTIMISATIONS\n//*******************************************************************\n\n// compression mode (bitflags)\n#define STB_DXT_NORMAL    0\n#define STB_DXT_DITHER    1   // use dithering. dubious win. never use for normal maps and the like!\n#define STB_DXT_HIGHQUAL  2   // high quality mode, does two refinement steps instead of 1. ~30-40% slower.\n\nvoid rygCompress( unsigned char *dst, unsigned char *src, int w, int h, int isDxt5 );\n\n// TODO remove these, not working properly..\nvoid rygCompressYCoCg( unsigned char *dst, unsigned char *src, int w, int h );\nvoid linearize( unsigned char * dst, const unsigned char * src, int n );\n\nvoid stb_compress_dxt_block(unsigned char *dest, const unsigned char *src, int alpha, int mode);\n#define STB_COMPRESS_DXT_BLOCK\n\n#ifdef STB_DXT_IMPLEMENTATION\n\n// configuration options for DXT encoder. set them in the project/makefile or just define\n// them at the top.\n\n// STB_DXT_USE_ROUNDING_BIAS\n//     use a rounding bias during color interpolation. this is closer to what \"ideal\"\n//     interpolation would do but doesn't match the S3TC/DX10 spec. old versions (pre-1.03)\n//     implicitly had this turned on. \n//\n//     in case you're targeting a specific type of hardware (e.g. console programmers):\n//     NVidia and Intel GPUs (as of 2010) as well as DX9 ref use DXT decoders that are closer\n//     to STB_DXT_USE_ROUNDING_BIAS. AMD/ATI, S3 and DX10 ref are closer to rounding with no bias.\n//     you also see \"(a*5 + b*3) / 8\" on some old GPU designs.\n// #define STB_DXT_USE_ROUNDING_BIAS\n\n#include <stdlib.h>\n#include <math.h>\n#include <stddef.h>\n#include <string.h> // memset\n#include <assert.h>\n#include <iostream>\n#include <algorithm>\n\n\nstatic unsigned char stb__Expand5[32];\nstatic unsigned char stb__Expand6[64];\nstatic unsigned char stb__OMatch5[256][2];\nstatic unsigned char stb__OMatch6[256][2];\nstatic unsigned char stb__QuantRBTab[256+16];\nstatic unsigned char stb__QuantGTab[256+16];\n\nstatic int stb__Mul8Bit(int a, int b)\n{\n  int t = a*b + 128;\n  return (t + (t >> 8)) >> 8;\n}\n\nstatic void stb__From16Bit(unsigned char *out, unsigned short v)\n{\n   int rv = (v & 0xf800) >> 11;\n   int gv = (v & 0x07e0) >>  5;\n   int bv = (v & 0x001f) >>  0;\n\n   out[0] = stb__Expand5[rv];\n   out[1] = stb__Expand6[gv];\n   out[2] = stb__Expand5[bv];\n   out[3] = 0;\n}\n\nstatic unsigned short stb__As16Bit(int r, int g, int b)\n{\n   return (stb__Mul8Bit(r,31) << 11) + (stb__Mul8Bit(g,63) << 5) + stb__Mul8Bit(b,31);\n}\n\n// linear interpolation at 1/3 point between a and b, using desired rounding type\nstatic int stb__Lerp13(int a, int b)\n{\n#ifdef STB_DXT_USE_ROUNDING_BIAS\n   // with rounding bias\n   return a + stb__Mul8Bit(b-a, 0x55);\n#else\n   // without rounding bias\n   // replace \"/ 3\" by \"* 0xaaab) >> 17\" if your compiler sucks or you really need every ounce of speed.\n   return (2*a + b) / 3;\n#endif\n}\n\n// lerp RGB color\nstatic void stb__Lerp13RGB(unsigned char *out, unsigned char *p1, unsigned char *p2)\n{\n   out[0] = stb__Lerp13(p1[0], p2[0]);\n   out[1] = stb__Lerp13(p1[1], p2[1]);\n   out[2] = stb__Lerp13(p1[2], p2[2]);\n}\n\n/****************************************************************************/\n\n// compute table to reproduce constant colors as accurately as possible\nstatic void stb__PrepareOptTable(unsigned char *Table,const unsigned char *expand,int size)\n{\n   int i,mn,mx;\n   for (i=0;i<256;i++) {\n      int bestErr = 256;\n      for (mn=0;mn<size;mn++) {\n         for (mx=0;mx<size;mx++) {\n            int mine = expand[mn];\n            int maxe = expand[mx];\n            int err = abs(stb__Lerp13(maxe, mine) - i);\n            \n            // DX10 spec says that interpolation must be within 3% of \"correct\" result,\n            // add this as error term. (normally we'd expect a random distribution of\n            // +-1.5% error, but nowhere in the spec does it say that the error has to be\n            // unbiased - better safe than sorry).\n            err += abs(maxe - mine) * 3 / 100;\n            \n            if(err < bestErr)\n            { \n               Table[i*2+0] = mx;\n               Table[i*2+1] = mn;\n               bestErr = err;\n            }\n         }\n      }\n   }\n}\n\nstatic void stb__EvalColors(unsigned char *color,unsigned short c0,unsigned short c1)\n{\n   stb__From16Bit(color+ 0, c0);\n   stb__From16Bit(color+ 4, c1);\n   stb__Lerp13RGB(color+ 8, color+0, color+4);\n   stb__Lerp13RGB(color+12, color+4, color+0);\n}\n\n// Block dithering function. Simply dithers a block to 565 RGB.\n// (Floyd-Steinberg)\nstatic void stb__DitherBlock(unsigned char *dest, unsigned char *block)\n{\n  int err[8],*ep1 = err,*ep2 = err+4, *et;\n  int ch,y;\n\n  // process channels seperately\n  for (ch=0; ch<3; ++ch) {\n      unsigned char *bp = block+ch, *dp = dest+ch;\n      unsigned char *quant = (ch == 1) ? stb__QuantGTab+8 : stb__QuantRBTab+8;\n      memset(err, 0, sizeof(err));\n      for(y=0; y<4; ++y) {\n         dp[ 0] = quant[bp[ 0] + ((3*ep2[1] + 5*ep2[0]) >> 4)];\n         ep1[0] = bp[ 0] - dp[ 0];\n         dp[ 4] = quant[bp[ 4] + ((7*ep1[0] + 3*ep2[2] + 5*ep2[1] + ep2[0]) >> 4)];\n         ep1[1] = bp[ 4] - dp[ 4];\n         dp[ 8] = quant[bp[ 8] + ((7*ep1[1] + 3*ep2[3] + 5*ep2[2] + ep2[1]) >> 4)];\n         ep1[2] = bp[ 8] - dp[ 8];\n         dp[12] = quant[bp[12] + ((7*ep1[2] + 5*ep2[3] + ep2[2]) >> 4)];\n         ep1[3] = bp[12] - dp[12];\n         bp += 16;\n         dp += 16;\n         et = ep1, ep1 = ep2, ep2 = et; // swap\n      }\n   }\n}\n\n// The color matching function\nstatic unsigned int stb__MatchColorsBlock(unsigned char *block, unsigned char *color,int dither)\n{\n   unsigned int mask = 0;\n   int dirr = color[0*4+0] - color[1*4+0];\n   int dirg = color[0*4+1] - color[1*4+1];\n   int dirb = color[0*4+2] - color[1*4+2];\n   int dots[16];\n   int stops[4];\n   int i;\n   int c0Point, halfPoint, c3Point;\n\n   for(i=0;i<16;i++)\n      dots[i] = block[i*4+0]*dirr + block[i*4+1]*dirg + block[i*4+2]*dirb;\n\n   for(i=0;i<4;i++)\n      stops[i] = color[i*4+0]*dirr + color[i*4+1]*dirg + color[i*4+2]*dirb;\n\n   // think of the colors as arranged on a line; project point onto that line, then choose\n   // next color out of available ones. we compute the crossover points for \"best color in top\n   // half\"/\"best in bottom half\" and then the same inside that subinterval.\n   //\n   // relying on this 1d approximation isn't always optimal in terms of euclidean distance,\n   // but it's very close and a lot faster.\n   // http://cbloomrants.blogspot.com/2008/12/12-08-08-dxtc-summary.html\n   \n   c0Point   = (stops[1] + stops[3]) >> 1;\n   halfPoint = (stops[3] + stops[2]) >> 1;\n   c3Point   = (stops[2] + stops[0]) >> 1;\n\n   if(!dither) \n   {\n      // the version without dithering is straightforward\n\n#ifdef NEW_OPTIMISATIONS\n      const int indexMap[8] = { 0 << 30,2 << 30,0 << 30,2 << 30,3 << 30,3 << 30,1 << 30,1 << 30 };\n\n      for(int i=0;i<16;i++)\n      {\n        int dot = dots[i];\n        mask >>= 2;\n\n        int bits =( (dot < halfPoint) ? 4 : 0 )\n                | ( (dot < c0Point) ? 2 : 0 )\n                | ( (dot < c3Point) ? 1 : 0 );\n\n        mask |= indexMap[bits];\n      }\n\n#else\n      for (i=15;i>=0;i--) {\n         int dot = dots[i];\n         mask <<= 2;\n\n         if(dot < halfPoint)\n           mask |= (dot < c0Point) ? 1 : 3;\n         else\n           mask |= (dot < c3Point) ? 2 : 0;\n      }\n#endif\n\n  } else {\n      // with floyd-steinberg dithering\n      int err[8],*ep1 = err,*ep2 = err+4;\n      int *dp = dots, y;\n\n      c0Point   <<= 4;\n      halfPoint <<= 4;\n      c3Point   <<= 4;\n      for(i=0;i<8;i++)\n         err[i] = 0;\n\n      for(y=0;y<4;y++)\n      {\n         int dot,lmask,step;\n\n         dot = (dp[0] << 4) + (3*ep2[1] + 5*ep2[0]);\n         if(dot < halfPoint)\n           step = (dot < c0Point) ? 1 : 3;\n         else\n           step = (dot < c3Point) ? 2 : 0;\n         ep1[0] = dp[0] - stops[step];\n         lmask = step;\n\n         dot = (dp[1] << 4) + (7*ep1[0] + 3*ep2[2] + 5*ep2[1] + ep2[0]);\n         if(dot < halfPoint)\n           step = (dot < c0Point) ? 1 : 3;\n         else\n           step = (dot < c3Point) ? 2 : 0;\n         ep1[1] = dp[1] - stops[step];\n         lmask |= step<<2;\n\n         dot = (dp[2] << 4) + (7*ep1[1] + 3*ep2[3] + 5*ep2[2] + ep2[1]);\n         if(dot < halfPoint)\n           step = (dot < c0Point) ? 1 : 3;\n         else\n           step = (dot < c3Point) ? 2 : 0;\n         ep1[2] = dp[2] - stops[step];\n         lmask |= step<<4;\n\n         dot = (dp[3] << 4) + (7*ep1[2] + 5*ep2[3] + ep2[2]);\n         if(dot < halfPoint)\n           step = (dot < c0Point) ? 1 : 3;\n         else\n           step = (dot < c3Point) ? 2 : 0;\n         ep1[3] = dp[3] - stops[step];\n         lmask |= step<<6;\n\n         dp += 4;\n         mask |= lmask << (y*8);\n         { int *et = ep1; ep1 = ep2; ep2 = et; } // swap\n      }\n   }\n\n   return mask;\n}\n\n// The color optimization function. (Clever code, part 1)\nstatic void stb__OptimizeColorsBlock(unsigned char *block, unsigned short *pmax16, unsigned short *pmin16)\n{\n  unsigned char *minp, *maxp;\n  double magn;\n  int v_r,v_g,v_b;\n  static const int nIterPower = 4;\n  float covf[6],vfr,vfg,vfb;\n\n  // determine color distribution\n  int cov[6];\n  int mu[3],min[3],max[3];\n  int ch,i,iter;\n\n  for(ch=0;ch<3;ch++)\n  {\n    const unsigned char *bp = ((const unsigned char *) block) + ch;\n    int muv,minv,maxv;\n\n#ifdef NEW_OPTIMISATIONS\n#   define MIN(a,b)      (int)a + ( ((int)b-a) & ( ((int)b-a) >> 31 ) )\n#   define MAX(a,b)      (int)a + ( ((int)b-a) & ( ((int)a-b) >> 31 ) )\n#   define RANGE(a,b,n)  int min##n = MIN(a,b); int max##n = a+b - min##n; muv += a+b;\n#   define MINMAX(a,b,n) int min##n = MIN(min##a, min##b); int max##n = MAX(max##a, max##b); \n\n\tmuv = 0;\n\tRANGE(bp[0],  bp[4],  1);\n\tRANGE(bp[8],  bp[12], 2);\n\tRANGE(bp[16], bp[20], 3);\n\tRANGE(bp[24], bp[28], 4);\n\tRANGE(bp[32], bp[36], 5);\n\tRANGE(bp[40], bp[44], 6);\n\tRANGE(bp[48], bp[52], 7);\n\tRANGE(bp[56], bp[60], 8);\n\n\tMINMAX(1,2,9);\n\tMINMAX(3,4,10);\n\tMINMAX(5,6,11);\n\tMINMAX(7,8,12);\n\n\tMINMAX(9,10,13);\n\tMINMAX(11,12,14);\n\n\tminv = MIN(min13,min14);\n\tmaxv = MAX(max13,max14);\n\n#else\n\tmuv = minv = maxv = bp[0];\n    for(i=4;i<64;i+=4)\n    {\n      muv += bp[i];\n      if (bp[i] < minv) minv = bp[i];\n      else if (bp[i] > maxv) maxv = bp[i];\n    }\n#endif\n\n    mu[ch] = (muv + 8) >> 4;\n    min[ch] = minv;\n    max[ch] = maxv;\n  }\n\n  // determine covariance matrix\n  for (i=0;i<6;i++)\n     cov[i] = 0;\n\n  for (i=0;i<16;i++)\n  {\n    int r = block[i*4+0] - mu[0];\n    int g = block[i*4+1] - mu[1];\n    int b = block[i*4+2] - mu[2];\n\n    cov[0] += r*r;\n    cov[1] += r*g;\n    cov[2] += r*b;\n    cov[3] += g*g;\n    cov[4] += g*b;\n    cov[5] += b*b;\n  }\n\n  // convert covariance matrix to float, find principal axis via power iter\n  for(i=0;i<6;i++)\n    covf[i] = cov[i] / 255.0f;\n\n  vfr = (float) (max[0] - min[0]);\n  vfg = (float) (max[1] - min[1]);\n  vfb = (float) (max[2] - min[2]);\n\n  for(iter=0;iter<nIterPower;iter++)\n  {\n    float r = vfr*covf[0] + vfg*covf[1] + vfb*covf[2];\n    float g = vfr*covf[1] + vfg*covf[3] + vfb*covf[4];\n    float b = vfr*covf[2] + vfg*covf[4] + vfb*covf[5];\n\n    vfr = r;\n    vfg = g;\n    vfb = b;\n  }\n\n  magn = fabs(vfr);\n  if (fabs(vfg) > magn) magn = fabs(vfg);\n  if (fabs(vfb) > magn) magn = fabs(vfb);\n\n   if(magn < 4.0f) \n   { // too small, default to luminance\n      v_r = 299; // JPEG YCbCr luma coefs, scaled by 1000.\n      v_g = 587;\n      v_b = 114;\n   } else {\n      magn = 512.0 / magn;\n      v_r = (int) (vfr * magn);\n      v_g = (int) (vfg * magn);\n      v_b = (int) (vfb * magn);\n   }\n\n\n#ifdef NEW_OPTIMISATIONS\n   // Pick colors at extreme points\n   int mind, maxd;\n   mind = maxd = block[0]*v_r + block[1]*v_g + block[2]*v_b;\n   minp = maxp = block;\n   for(i=1;i<16;i++)\n   {\n      int dot = block[i*4+0]*v_r + block[i*4+1]*v_g + block[i*4+2]*v_b;\n\n      if (dot < mind) {\n         mind = dot;\n         minp = block+i*4;\n\t\t continue;\n      }\n\n      if (dot > maxd) {\n         maxd = dot;\n         maxp = block+i*4;\n      }\n   }\n#else\n   int mind = 0x7fffffff,maxd = -0x7fffffff;\n   // Pick colors at extreme points\n   for(i=0;i<16;i++)\n   {\n      int dot = block[i*4+0]*v_r + block[i*4+1]*v_g + block[i*4+2]*v_b;\n\n      if (dot < mind) {\n         mind = dot;\n         minp = block+i*4;\n      }\n\n      if (dot > maxd) {\n         maxd = dot;\n         maxp = block+i*4;\n      }\n   }\n#endif\n\n   *pmax16 = stb__As16Bit(maxp[0],maxp[1],maxp[2]);\n   *pmin16 = stb__As16Bit(minp[0],minp[1],minp[2]);\n}\n\ninline static int stb__sclamp(float y, int p0, int p1)\n{\n   int x = (int) y;\n\n#ifdef NEW_OPTIMISATIONS\n\tx = x>p1 ? p1 : x;\n    return x<p0 ? p0 : x;\n#else\n   if (x < p0) return p0;\n   if (x > p1) return p1;\n   return x;\n#endif\n}\n\n// The refinement function. (Clever code, part 2)\n// Tries to optimize colors to suit block contents better.\n// (By solving a least squares system via normal equations+Cramer's rule)\nstatic int stb__RefineBlock(unsigned char *block, unsigned short *pmax16, unsigned short *pmin16, unsigned int mask)\n{\n   static const int w1Tab[4] = { 3,0,2,1 };\n   static const int prods[4] = { 0x090000,0x000900,0x040102,0x010402 };\n   // ^some magic to save a lot of multiplies in the accumulating loop...\n   // (precomputed products of weights for least squares system, accumulated inside one 32-bit register)\n\n   float frb,fg;\n   unsigned short oldMin, oldMax, min16, max16;\n   int i, akku = 0, xx,xy,yy;\n   int At1_r,At1_g,At1_b;\n   int At2_r,At2_g,At2_b;\n   unsigned int cm = mask;\n\n   oldMin = *pmin16;\n   oldMax = *pmax16;\n\n   if((mask ^ (mask<<2)) < 4) // all pixels have the same index?\n   {\n      // yes, linear system would be singular; solve using optimal\n      // single-color match on average color\n      int r = 8, g = 8, b = 8;\n      for (i=0;i<16;++i) {\n         r += block[i*4+0];\n         g += block[i*4+1];\n         b += block[i*4+2];\n      }\n\n      r >>= 4; g >>= 4; b >>= 4;\n\n      max16 = (stb__OMatch5[r][0]<<11) | (stb__OMatch6[g][0]<<5) | stb__OMatch5[b][0];\n      min16 = (stb__OMatch5[r][1]<<11) | (stb__OMatch6[g][1]<<5) | stb__OMatch5[b][1];\n   } else {\n      At1_r = At1_g = At1_b = 0;\n      At2_r = At2_g = At2_b = 0;\n      for (i=0;i<16;++i,cm>>=2) \n\t  {\n         int step = cm&3;\n         int w1 = w1Tab[step];\n         int r = block[i*4+0];\n         int g = block[i*4+1];\n         int b = block[i*4+2];\n\n         akku    += prods[step];\n         At1_r   += w1*r;\n         At1_g   += w1*g;\n         At1_b   += w1*b;\n         At2_r   += r;\n         At2_g   += g;\n         At2_b   += b;\n      }\n\n      At2_r = 3*At2_r - At1_r;\n      At2_g = 3*At2_g - At1_g;\n      At2_b = 3*At2_b - At1_b;\n\n      // extract solutions and decide solvability\n      xx = akku >> 16;\n      yy = (akku >> 8) & 0xff;\n      xy = (akku >> 0) & 0xff;\n\n      frb = 3.0f * 31.0f / 255.0f / (xx*yy - xy*xy);\n      fg = frb * 63.0f / 31.0f;\n\n      // solve.\n      max16 =   stb__sclamp((At1_r*yy - At2_r*xy)*frb+0.5f,0,31) << 11;\n      max16 |=  stb__sclamp((At1_g*yy - At2_g*xy)*fg +0.5f,0,63) << 5;\n      max16 |=  stb__sclamp((At1_b*yy - At2_b*xy)*frb+0.5f,0,31) << 0;\n\n      min16 =   stb__sclamp((At2_r*xx - At1_r*xy)*frb+0.5f,0,31) << 11;\n      min16 |=  stb__sclamp((At2_g*xx - At1_g*xy)*fg +0.5f,0,63) << 5;\n      min16 |=  stb__sclamp((At2_b*xx - At1_b*xy)*frb+0.5f,0,31) << 0;\n   }\n\n   *pmin16 = min16;\n   *pmax16 = max16;\n   return oldMin != min16 || oldMax != max16;\n}\n\n// Color block compression\nstatic void stb__CompressColorBlock(unsigned char *dest, unsigned char *block, int mode)\n{\n   unsigned int mask;\n   int i;\n   int dither;\n   int refinecount;\n   unsigned short max16, min16;\n   unsigned char dblock[16*4],color[4*4];\n   \n   dither = mode & STB_DXT_DITHER;\n   refinecount = (mode & STB_DXT_HIGHQUAL) ? 2 : 1;\n\n   // check if block is constant\n   for (i=1;i<16;i++)\n      if (((unsigned int *) block)[i] != ((unsigned int *) block)[0])\n         break;\n\n   if(i == 16) \n   { // constant color\n      int r = block[0], g = block[1], b = block[2];\n      mask  = 0xaaaaaaaa;\n      max16 = (stb__OMatch5[r][0]<<11) | (stb__OMatch6[g][0]<<5) | stb__OMatch5[b][0];\n      min16 = (stb__OMatch5[r][1]<<11) | (stb__OMatch6[g][1]<<5) | stb__OMatch5[b][1];\n   } else \n   {\n      // first step: compute dithered version for PCA if desired\n      if(dither)\n         stb__DitherBlock(dblock,block);\n\n      // second step: pca+map along principal axis\n      stb__OptimizeColorsBlock(dither ? dblock : block,&max16,&min16);\n      if (max16 != min16) \n\t  {\n         stb__EvalColors(color,max16,min16);\n         mask = stb__MatchColorsBlock(block,color,dither);\n      } else\n         mask = 0;\n\n      // third step: refine (multiple times if requested)\n      for (i=0;i<refinecount;i++) {\n         unsigned int lastmask = mask;\n         \n         if (stb__RefineBlock(dither ? dblock : block,&max16,&min16,mask)) \n\t\t {\n            if (max16 != min16) \n\t\t\t{\n               stb__EvalColors(color,max16,min16);\n               mask = stb__MatchColorsBlock(block,color,dither);\n            } else \n\t\t\t{\n               mask = 0;\n               break;\n            }\n         }\n         \n         if(mask == lastmask)\n            break;\n      }\n  }\n\n  // write the color block\n  if(max16 < min16)\n  {\n     unsigned short t = min16;\n     min16 = max16;\n     max16 = t;\n     mask ^= 0x55555555;\n  }\n\n  dest[0] = (unsigned char) (max16);\n  dest[1] = (unsigned char) (max16 >> 8);\n  dest[2] = (unsigned char) (min16);\n  dest[3] = (unsigned char) (min16 >> 8);\n  dest[4] = (unsigned char) (mask);\n  dest[5] = (unsigned char) (mask >> 8);\n  dest[6] = (unsigned char) (mask >> 16);\n  dest[7] = (unsigned char) (mask >> 24);\n}\n\n// Alpha block compression (this is easy for a change)\nstatic void stb__CompressAlphaBlock(unsigned char *dest,unsigned char *src,int mode)\n{\n   int i,dist,bias,dist4,dist2,bits,mask;\n\n   // find min/max color\n   int mn,mx;\n\n   mn = mx = src[3];\n   for (i=1;i<16;i++)\n   {\n      if (src[i*4+3] < mn) mn = src[i*4+3];\n      else if (src[i*4+3] > mx) mx = src[i*4+3];\n   }\n\n   // encode them\n   ((unsigned char *)dest)[0] = mx;\n   ((unsigned char *)dest)[1] = mn;\n   dest += 2;\n\n#ifdef NEW_OPTIMISATIONS\n   // mono-alpha shortcut\n   if (mn==mx)\n   {\n\t   *(unsigned short*)dest = 0;\n\t   dest += 2;\n\t   *(unsigned int*)dest = 0;\n\t   return;\n   }\n#endif\n\n\t// determine bias and emit color indices\n\t// given the choice of mx/mn, these indices are optimal:\n\t// http://fgiesen.wordpress.com/2009/12/15/dxt5-alpha-block-index-determination/\n\tdist = mx-mn;\n\t//printf(\"mn = %i; mx = %i; dist = %i\\n\", mn, mx, dist);\n\tdist4 = dist*4;\n\tdist2 = dist*2;\n\tbias = (dist < 8) ? (dist - 1) : (dist/2 + 2);\n\tbias -= mn * 7;\n\tbits = 0, mask=0;\n   \n\tfor (i=0;i<16;i++) \n\t{\n\t\tint a = src[i*4+3]*7 + bias;\n\t\tint ind,t;\n\n\t\t// select index. this is a \"linear scale\" lerp factor between 0 (val=min) and 7 (val=max).\n\t\tt = (a >= dist4) ? -1 : 0; ind =  t & 4; a -= dist4 & t;\n\t\tt = (a >= dist2) ? -1 : 0; ind += t & 2; a -= dist2 & t;\n\t\tind += (a >= dist);\n      \n\t\t// turn linear scale into DXT index (0/1 are extremal pts)\n\t\tind = -ind & 7;\n\t\tind ^= (2 > ind);\n\n\t\t// write index\n\t\tmask |= ind << bits;\n\t\tif((bits += 3) >= 8) \n\t\t{\n\t\t\t*dest++ = mask; \n\t\t\tmask >>= 8;     \n\t\t\tbits -= 8;\n\t\t}\n\t}\n}\n\n\nstatic void stb__InitDXT()\n{\n   int i;\n   for(i=0;i<32;i++)\n      stb__Expand5[i] = (i<<3)|(i>>2);\n\n   for(i=0;i<64;i++)\n      stb__Expand6[i] = (i<<2)|(i>>4);\n\n   for(i=0;i<256+16;i++)\n   {\n      int v = i-8 < 0 ? 0 : i-8 > 255 ? 255 : i-8;\n      stb__QuantRBTab[i] = stb__Expand5[stb__Mul8Bit(v,31)];\n      stb__QuantGTab[i] = stb__Expand6[stb__Mul8Bit(v,63)];\n   }\n\n   stb__PrepareOptTable(&stb__OMatch5[0][0],stb__Expand5,32);\n   stb__PrepareOptTable(&stb__OMatch6[0][0],stb__Expand6,64);\n}\n\n\nvoid stb_compress_dxt_block(unsigned char *dest, const unsigned char *src, int alpha, int mode)\n{\n   static int init=1;\n   if (init) \n   {\n      stb__InitDXT();\n      init=0;\n   }\n\n   if (alpha) \n   {\n      stb__CompressAlphaBlock(dest,(unsigned char*) src,mode);\n      dest += 8;\n   }\n\n   stb__CompressColorBlock(dest,(unsigned char*) src,mode);\n}\n\nint imin(int x, int y) { return (x < y) ? x : y; }\n\n\n\n\n\nstatic void extractBlock(const unsigned char *src, int x, int y,\n                          int w, int h, unsigned char *block)\n{\n   int i, j;\n\n#ifdef NEW_OPTIMISATIONS\n   if ((w-x >=4) && (h-y >=4))\n   {\n\t   // Full Square shortcut\n\t   src += x*4;\n\t   src += y*w*4;\n\t   for (i=0; i < 4; ++i)\n\t   {\n\t\t   *(unsigned int*)block = *(unsigned int*) src; block += 4; src += 4;\n\t\t   *(unsigned int*)block = *(unsigned int*) src; block += 4; src += 4;\n\t\t   *(unsigned int*)block = *(unsigned int*) src; block += 4; src += 4;\n\t\t   *(unsigned int*)block = *(unsigned int*) src; block += 4; \n\t\t   src += (w*4) - 12;\n\t   }\n\t   return;\n   }\n#endif\n\n   int bw = imin(w - x, 4);\n   int bh = imin(h - y, 4);\n   int bx, by;\n   \n   const int rem[] =\n   {\n      0, 0, 0, 0,\n      0, 1, 0, 1,\n      0, 1, 2, 0,\n      0, 1, 2, 3\n   };\n   \n   for(i = 0; i < 4; ++i)\n   {\n      by = rem[(bh - 1) * 4 + i] + y;\n      for(j = 0; j < 4; ++j)\n      {\n         bx = rem[(bw - 1) * 4 + j] + x;\n         block[(i * 4 * 4) + (j * 4) + 0] =\n            src[(by * (w * 4)) + (bx * 4) + 0];\n         block[(i * 4 * 4) + (j * 4) + 1] =\n            src[(by * (w * 4)) + (bx * 4) + 1];\n         block[(i * 4 * 4) + (j * 4) + 2] =\n            src[(by * (w * 4)) + (bx * 4) + 2];\n         block[(i * 4 * 4) + (j * 4) + 3] =\n            src[(by * (w * 4)) + (bx * 4) + 3];\n      }\n   }\n}\n\n // should be a pretty optimized 0-255 clamper\ninline static unsigned char clamp255( int n )\n{\n  if( n > 255 ) n = 255;\n  if( n < 0 ) n = 0;\n  return n;\n}\n\n\nvoid rgbToYCoCgBlock( unsigned char * dst, const unsigned char * src )\n{\n    // Calculate Co and Cg extents\n    int extents = 0;\n    int n = 0;\n    int iY, iCo, iCg; //, r, g, b;\n    int blockCo[16];\n    int blockCg[16];\n    int i;\n\n    const unsigned char *px = src;\n    for(i=0;i<n;i++)\n    {\n        iCo = (px[0]<<1) - (px[2]<<1);\n        iCg = (px[1]<<1) - px[0] - px[2];\n        if(-iCo > extents) extents = -iCo;\n        if( iCo > extents) extents = iCo;\n        if(-iCg > extents) extents = -iCg;\n        if( iCg > extents) extents = iCg;\n\n        blockCo[n] = iCo;\n        blockCg[n++] = iCg;\n\n        px += 4;\n    }\n\n    // Co = -510..510\n    // Cg = -510..510\n    float scaleFactor = 1.0f;\n    if(extents > 127)\n        scaleFactor = (float)extents * 4.0f / 510.0f;\n\n    // Convert to quantized scalefactor\n    unsigned char scaleFactorQuantized = (unsigned char)(ceil((scaleFactor - 1.0f) * 31.0f / 3.0f));\n\n    // Unquantize\n    scaleFactor = 1.0f + (float)(scaleFactorQuantized / 31.0f) * 3.0f;\n\n    unsigned char bVal = (unsigned char)((scaleFactorQuantized << 3) | (scaleFactorQuantized >> 2));\n\n    unsigned char *outPx = dst;\n\n    n = 0;\n    px = src;\n    /*\n    for(i=0;i<16;i++)\n    {\n        // Calculate components\n        iY = ( px[0] + (px[1]<<1) + px[2] + 2 ) / 4;\n        iCo = ((blockCo[n] / scaleFactor) + 128);\n        iCg = ((blockCg[n] / scaleFactor) + 128);\n\n        if(iCo < 0) iCo = 0; else if(iCo > 255) iCo = 255;\n        if(iCg < 0) iCg = 0; else if(iCg > 255) iCg = 255;\n        if(iY < 0) iY = 0; else if(iY > 255) iY = 255;\n\n        px += 4;\n\n        outPx[0] = (unsigned char)iCo;\n        outPx[1] = (unsigned char)iCg;\n        outPx[2] = bVal;\n        outPx[3] = (unsigned char)iY;\n\n        outPx += 4;\n    }*/\n    for(i=0;i<16;i++)\n    {\n        // Calculate components\n        int r = px[0];\n        int g = (px[1] + 1) >> 1;\n        int b = px[2];\n        int tmp = (2 + r + b) >> 2;\n        \n        // Co\n        iCo = clamp255( 128 + ((r - b + 1) >> 1) );\n        // Y\n        iY = clamp255( g + tmp );\n        // Cg\n        iCg = clamp255( 128 + g - tmp );\n\n        px += 4;\n\n        outPx[0] = (unsigned char)iCo;\n        outPx[1] = (unsigned char)iCg;\n        outPx[2] = bVal;\n        outPx[3] = (unsigned char)iY;\n\n        outPx += 4;\n    }\n\n}\n\n\nvoid rygCompress( unsigned char *dst, unsigned char *src, int w, int h, int isDxt5 )\n{\n   \n   unsigned char block[64];\n   int x, y;\n   \n   for(y = 0; y < h; y += 4)\n   {\n      for(x = 0; x < w; x += 4)\n      {\n         extractBlock(src, x, y, w, h, block);\n         stb_compress_dxt_block(dst, block, isDxt5, 10);\n         dst += isDxt5 ? 16 : 8;\n      }\n   }\n}\n\nvoid rygCompressYCoCg( unsigned char *dst, unsigned char *src, int w, int h )\n{\n    unsigned char block[64];\n   unsigned char ycocgblock[64];\n   int x, y;\n   \n   for(y = 0; y < h; y += 4)\n   {\n      for(x = 0; x < w; x += 4)\n      {\n         extractBlock(src, x, y, w, h, block);\n         rgbToYCoCgBlock(ycocgblock,block);\n         stb_compress_dxt_block(dst, ycocgblock, 1, 10);\n         dst += 16;\n      }\n   }\n\n}\n\nstatic void stbgl__compress(unsigned char *p, unsigned char *rgba, int w, int h, int isDxt5)\n{\n   int i,j,y,y2;\n   int alpha = isDxt5;\n   \n   for (j=0; j < w; j += 4) {\n      int x=4;\n      for (i=0; i < h; i += 4) {\n         unsigned char block[16*4];\n         if (i+3 >= w) x = w-i;\n         for (y=0; y < 4; ++y) {\n            if (j+y >= h) break;\n            memcpy(block+y*16, rgba + w*4*(j+y) + i*4, x*4);\n         }\n         if (x < 4) {\n            switch (x) {\n               case 0: assert(0);\n               case 1:\n                  for (y2=0; y2 < y; ++y2) {\n                     memcpy(block+y2*16+1*4, block+y2*16+0*4, 4);\n                     memcpy(block+y2*16+2*4, block+y2*16+0*4, 8);\n                  }\n                  break;\n               case 2:\n                  for (y2=0; y2 < y; ++y2)\n                     memcpy(block+y2*16+2*4, block+y2*16+0*4, 8);\n                  break;\n               case 3:\n                  for (y2=0; y2 < y; ++y2)\n                     memcpy(block+y2*16+3*4, block+y2*16+1*4, 4);\n                  break;\n            }\n         }\n         y2 = 0;\n         for(; y<4; ++y,++y2)\n            memcpy(block+y*16, block+y2*16, 4*4);\n         stb_compress_dxt_block(p, block, alpha, 10);\n         p += alpha ? 16 : 8;\n      }\n   }\n  // assert(p <= end);\n}\n\nstatic inline unsigned char linearize(unsigned char inByte)\n{\n    float srgbVal = ((float)inByte) / 255.0f;\n    float linearVal;\n\n    if(srgbVal < 0.04045)\n        linearVal = srgbVal / 12.92f;\n    else\n        linearVal = pow( (srgbVal + 0.055f) / 1.055f, 2.4f);\n\n    return (unsigned char)(floor(sqrt(linearVal)* 255.0 + 0.5));\n}\n\nvoid linearize( unsigned char * dst, const unsigned char * src, int n )\n{\n  n*=4;\n  for( int i = 0; i < n; i++ )\n    dst[i] = linearize(src[i]);\n}\n\n\n\n#endif // STB_DXT_IMPLEMENTATION\n\n#endif // STB_INCLUDE_STB_DXT_H\n"
  },
  {
    "path": "dll/supmodes.cpp",
    "content": "#include \"dxwnd.h\"\n\nSupportedRes_Type SupportedSVGARes[12]= {\n\t{320,200},\n\t{320,240},\n\t{512,384},\t\t// needed by \"Outcast\" loading screen\n\t{640,400},\n\t{640,480},\n\t{720,480},\n\t{800,600},\n\t{1024,768},\t\t// XGA\n\t{1280,800},\t\t// WXGA\n\t{1280,1024},\t\n\t{1600,1200},\t// UXGA, needed by \"LEGO Star Wars\" in high res mode\n\t{0,0}\n};\n\nSupportedRes_Type SupportedHDTVRes[11]= {\n\t{640,360},\t\t// nHD\n\t{720,480},\t\t// DVD\n\t{720,576},\t\t// DV-PAL\n\t{960,540},\t\t// qHD\n\t{1176,1000},\n\t{1280,720},\t\t// HD\n\t{1440,900},\t\t// Swat 3 hack\n\t{1440,960},\n\t{1600,900},\t\t// HD+\n\t{1920,1080},\t// FHD\n\t{0,0}\n};\n\nint SupportedDepths[5]={8,16,24,32,0};\n"
  },
  {
    "path": "dll/syslibs.h",
    "content": "/* ===================================================================\n\nsyslibs.h: contains typedef definition and extern pointer declarations\nfor all system calls hooked by DxWnd:\nGDI32.dll\nKernel32.dll\nole32.dll\nuser32.dll\n\n====================================================================*/\n\n#include \"Mmsystem.h\"\n\n/* ===================================================================\ntype definitions\n====================================================================*/\n\n// advapi32.dll\n\ntypedef LONG\t(WINAPI *RegCloseKey_Type)(HKEY);\ntypedef LONG\t(WINAPI *RegCreateKey_Type)(HKEY, LPCTSTR, PHKEY);\ntypedef LONG\t(WINAPI *RegCreateKeyEx_Type)(HKEY, LPCTSTR, DWORD, LPTSTR, DWORD, REGSAM, LPSECURITY_ATTRIBUTES, PHKEY, LPDWORD);\ntypedef LONG\t(WINAPI *RegOpenKeyEx_Type)(HKEY, LPCTSTR, DWORD, REGSAM, PHKEY);\ntypedef LONG\t(WINAPI *RegQueryValue_Type)(HKEY, LPCTSTR, LPTSTR, PLONG);\ntypedef LONG\t(WINAPI *RegQueryValueEx_Type)(HKEY, LPCTSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD);\ntypedef LONG\t(WINAPI *RegSetValueEx_Type)(HKEY, LPCTSTR, DWORD, DWORD, const BYTE *, DWORD);\n\n// ImmLib.dll:\n\ntypedef BOOL\t(WINAPI *ImmNotifyIME_Type)(HIMC, DWORD, DWORD, DWORD);\ntypedef HIMC\t(WINAPI *ImmCreateContext_Type)(void);\ntypedef BOOL\t(WINAPI *ImmDestroyContext_Type)(HIMC);\ntypedef BOOL\t(WINAPI *ImmSetOpenStatus_Type)(HIMC, BOOL);\ntypedef HIMC\t(WINAPI *ImmAssociateContext_Type)(HWND, HIMC);\ntypedef BOOL\t(WINAPI *ImmSetCompositionWindow_Type)(HIMC, LPCOMPOSITIONFORM);\ntypedef BOOL\t(WINAPI *ImmSetCompositionString_Type)(HIMC, DWORD, LPVOID, DWORD, LPVOID, DWORD);\ntypedef BOOL\t(WINAPI *ImmGetOpenStatus_Type)(HIMC);\n\n// GDI32.dll:\ntypedef BOOL\t(WINAPI *BitBlt_Type)(HDC, int, int, int, int, HDC, int, int, DWORD);\ntypedef HDC\t\t(WINAPI *CreateCompatibleDC_Type)(HDC);\ntypedef HDC\t\t(WINAPI *CreateDCA_Type)(LPCSTR, LPCSTR, LPCSTR, const DEVMODE *);\ntypedef HDC\t\t(WINAPI *CreateDCW_Type)(LPWSTR, LPWSTR, LPWSTR, const DEVMODE *);\ntypedef HFONT\t(WINAPI *CreateFont_Type)(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCTSTR);\ntypedef HFONT\t(WINAPI *CreateFontIndirect_Type)(const LOGFONT*);\ntypedef HDC\t\t(WINAPI *CreateICA_Type)(LPCTSTR, LPCTSTR, LPCTSTR, const DEVMODE *);\ntypedef HPALETTE(WINAPI *GDICreatePalette_Type)(CONST LOGPALETTE *);\ntypedef HDWP\t(WINAPI *DeferWindowPos_Type)(HDWP, HWND, HWND, int, int, int, int, UINT);\ntypedef BOOL\t(WINAPI *DeleteDC_Type)(HDC);\ntypedef BOOL\t(WINAPI *ExtTextOutW_Type)(HDC, int, int, UINT, const RECT *, LPCWSTR, UINT, const INT *);\ntypedef BOOL\t(WINAPI *ExtTextOutA_Type)(HDC, int, int, UINT, const RECT *, LPCSTR, UINT, const INT *);\ntypedef int\t\t(WINAPI *GetClipBox_Type)(HDC, LPRECT);\ntypedef BOOL\t(WINAPI *GetDCOrgEx_Type)(HDC, LPPOINT);\ntypedef int\t\t(WINAPI *GetRgnBox_Type)(HRGN, LPRECT);\ntypedef DWORD\t(WINAPI *GetRegionData_Type)(HRGN, DWORD, LPRGNDATA);\ntypedef int\t\t(WINAPI *GetDeviceCaps_Type)(HDC, int);\ntypedef BOOL\t(WINAPI *GetDeviceGammaRamp_Type)(HDC, LPVOID);\ntypedef BOOL\t(WINAPI *GetSystemPaletteEntries_Type)(HDC, UINT, UINT, LPPALETTEENTRY);\ntypedef UINT\t(WINAPI *GetPaletteEntries_Type)(HPALETTE, UINT, UINT, LPPALETTEENTRY);\ntypedef int\t\t(WINAPI *IntersectClipRect_Type)(HDC, int, int, int, int);\ntypedef UINT\t(WINAPI *GetSystemPaletteUse_Type)(HDC);\ntypedef BOOL\t(WINAPI *PatBlt_Type)(HDC, int, int, int, int, DWORD);\ntypedef BOOL\t(WINAPI *Polyline_Type)(HDC, const POINT *, int);\ntypedef UINT\t(WINAPI *RealizePalette_Type)(HDC);\ntypedef BOOL\t(WINAPI *Rectangle_Type)(HDC, int, int, int, int);\ntypedef BOOL\t(WINAPI *RestoreDC_Type)(HDC, int);\ntypedef int\t\t(WINAPI *SaveDC_Type)(HDC);\ntypedef BOOL\t(WINAPI *ScaleWindowExtEx_Type)(HDC, int, int, int, int, LPSIZE);\ntypedef HPALETTE(WINAPI *SelectPalette_Type)(HDC, HPALETTE, BOOL);\ntypedef COLORREF (WINAPI *SetBkColor_Type)(HDC, COLORREF);\ntypedef BOOL\t(WINAPI *SetDeviceGammaRamp_Type)(HDC, LPVOID);\ntypedef COLORREF(WINAPI *SetTextColor_Type)(HDC, COLORREF);\ntypedef BOOL\t(WINAPI *StretchBlt_Type)(HDC, int, int, int, int, HDC, int, int, int, int, DWORD);\ntypedef int\t\t(WINAPI *StretchDIBits_Type)(HDC, int, int, int, int, int, int, int, int, const VOID *, const BITMAPINFO *, UINT, DWORD);\ntypedef BOOL\t(WINAPI *TextOutA_Type)(HDC, int, int, LPCTSTR, int);\ntypedef BOOL\t(WINAPI *TextOutW_Type)(HDC, int, int, LPCWSTR, int);\ntypedef BOOL\t(WINAPI *PolyBezier_Type)(HDC, const POINT *, DWORD);\ntypedef BOOL\t(WINAPI *PolyBezierTo_Type)(HDC, const POINT *, DWORD);\ntypedef BOOL\t(WINAPI *PolylineTo_Type)(HDC, const POINT *, DWORD);\ntypedef BOOL\t(WINAPI *PolyDraw_Type)(HDC, const POINT *, const BYTE *, int);\ntypedef BOOL\t(WINAPI *MoveToEx_Type)(HDC, int, int, LPPOINT);\ntypedef BOOL\t(WINAPI *ArcTo_Type)(HDC, int, int, int, int, int, int, int, int);\ntypedef BOOL\t(WINAPI *LineTo_Type)(HDC, int, int);\ntypedef int\t\t(WINAPI *SetDIBitsToDevice_Type)(HDC, int, int, DWORD, DWORD, int, int, UINT, UINT, const VOID *, const BITMAPINFO *, UINT);\ntypedef BOOL\t(WINAPI *SetRectRgn_Type)(HRGN, int, int, int, int);\ntypedef HBITMAP (WINAPI *CreateCompatibleBitmap_Type)(HDC, int, int);\ntypedef COLORREF(WINAPI *SetPixel_Type)(HDC, int, int, COLORREF);\ntypedef BOOL\t(WINAPI *Ellipse_Type)(HDC, int, int, int, int);\ntypedef BOOL\t(WINAPI *Polygon_Type)(HDC, const POINT *, int);\ntypedef BOOL\t(WINAPI *Arc_Type)(HDC, int, int, int, int, int, int, int, int);\ntypedef HRGN\t(WINAPI *CreateEllipticRgn_Type)(int, int, int, int);\ntypedef HRGN\t(WINAPI *CreateEllipticRgnIndirect_Type)(const RECT *);\ntypedef HRGN\t(WINAPI *CreateRectRgn_Type)(int, int, int, int);\ntypedef HRGN\t(WINAPI *CreateRectRgnIndirect_Type)(const RECT *);\ntypedef HRGN\t(WINAPI *CreatePolygonRgn_Type)(const POINT *, int, int);\ntypedef BOOL\t(WINAPI *MaskBlt_Type)(HDC, int, int, int, int, HDC, int, int, HBITMAP, int, int, DWORD);\ntypedef BOOL\t(WINAPI *SetViewportOrgEx_Type)(HDC, int, int, LPPOINT);\ntypedef BOOL\t(WINAPI *SetViewportExtEx_Type)(HDC, int, int, LPSIZE);\ntypedef BOOL\t(WINAPI *GetViewportOrgEx_Type)(HDC, LPPOINT);\ntypedef BOOL\t(WINAPI *GetViewportExtEx_Type)(HDC, LPPOINT);\ntypedef BOOL\t(WINAPI *GetWindowOrgEx_Type)(HDC, LPPOINT);\ntypedef BOOL\t(WINAPI *SetWindowExtEx_Type)(HDC, int, int, LPPOINT);\ntypedef BOOL\t(WINAPI *SetWindowOrgEx_Type)(HDC, int, int, LPPOINT);\ntypedef BOOL\t(WINAPI *GetCurrentPositionEx_Type)(HDC, LPPOINT);\ntypedef BOOL\t(WINAPI *AnimatePalette_Type)(HPALETTE, UINT, UINT, const PALETTEENTRY *);\ntypedef UINT\t(WINAPI *SetSystemPaletteUse_Type)(HDC, UINT);\ntypedef BOOL\t(WINAPI *GDISetPixelFormat_Type)(HDC, int, const PIXELFORMATDESCRIPTOR *);\ntypedef BOOL\t(WINAPI *GDIGetPixelFormat_Type)(HDC);\ntypedef int\t\t(WINAPI *ChoosePixelFormat_Type)(HDC, const PIXELFORMATDESCRIPTOR *);\ntypedef int\t\t(WINAPI *DescribePixelFormat_Type)(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR);\ntypedef DWORD\t(WINAPI *GetObjectType_Type)(HGDIOBJ);\ntypedef int\t\t(WINAPI *SetDIBits_Type)(HDC, HBITMAP, UINT, UINT, const VOID *, const BITMAPINFO *, UINT);\ntypedef int\t\t(WINAPI *OffsetRgn_Type)(HRGN, int, int);\ntypedef COLORREF (WINAPI *GetPixel_Type)(HDC, int, int);\ntypedef BOOL\t(WINAPI *PlgBlt_Type)(HDC, const POINT *, HDC, int, int, int, int, HBITMAP, int, int);\ntypedef BOOL\t(WINAPI *SetPixelV_Type)(HDC, int, int, COLORREF);\ntypedef BOOL\t(WINAPI *Chord_Type)(HDC, int, int, int, int, int, int, int, int);\ntypedef BOOL\t(WINAPI *PolyTextOutA_Type)(HDC, const POLYTEXTA *, int);\ntypedef BOOL\t(WINAPI *PolyTextOutW_Type)(HDC, const POLYTEXTW *, int);\ntypedef int\t\t(WINAPI *GetDIBits_Type)(HDC, HBITMAP, UINT, UINT, LPVOID, LPBITMAPINFO, UINT);\ntypedef HBITMAP (WINAPI *CreateDIBitmap_Type)(HDC, BITMAPINFOHEADER *, DWORD, const VOID *, const BITMAPINFO *, UINT);\ntypedef HBITMAP (WINAPI *CreateDIBSection_Type)(HDC, const BITMAPINFO *, UINT, VOID **, HANDLE, DWORD);\ntypedef HBITMAP (WINAPI *CreateDiscardableBitmap_Type)(HDC, int, int);\ntypedef BOOL\t(WINAPI *ExtFloodFill_Type)(HDC, int, int, COLORREF, UINT);\ntypedef BOOL\t(WINAPI *GdiAlphaBlend_Type)(HDC, int, int, int, int, HDC, int, int, int, int, BLENDFUNCTION);\ntypedef BOOL\t(WINAPI *GdiGradientFill_Type)(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG);\ntypedef BOOL\t(WINAPI *GdiTransparentBlt_Type)(HDC, int, int, int, int, HDC, int, int, int, int, UINT);\ntypedef BOOL\t(WINAPI *Pie_Type)(HDC, int, int, int, int, int, int, int, int);\ntypedef BOOL\t(WINAPI *AngleArc_Type)(HDC, int, int, DWORD, FLOAT, FLOAT);\ntypedef BOOL\t(WINAPI *PolyPolyline_Type)(HDC, const POINT *, const DWORD *, DWORD);\ntypedef BOOL\t(WINAPI *FillRgn_Type)(HDC, HRGN, HBRUSH);\ntypedef BOOL\t(WINAPI *FrameRgn_Type)(HDC, HRGN, HBRUSH, int, int);\ntypedef BOOL\t(WINAPI *InvertRgn_Type)(HDC, HRGN);\ntypedef BOOL\t(WINAPI *PaintRgn_Type)(HDC, HRGN);\ntypedef int\t\t(WINAPI *SetMapMode_Type)(HDC, int);\ntypedef BOOL\t(WINAPI *RoundRect_Type)(HDC, int, int, int, int, int, int);\ntypedef BOOL\t(WINAPI *PolyPolygon_Type)(HDC, const POINT *, const INT *, int);\n//typedef BOOL\t(WINAPI *DPtoLP_Type)(HDC, LPPOINT, int);\ntypedef BOOL\t(WINAPI *PlayEnhMetaFile_Type)(HDC, HENHMETAFILE, const RECT *);\ntypedef UINT\t(WINAPI *SetPaletteEntries_Type)(HPALETTE, UINT, UINT, const PALETTEENTRY *);\ntypedef int\t\t(WINAPI *SetROP2_Type)(HDC, int);\ntypedef int\t\t(WINAPI *EnumFontsA_Type)(HDC, LPCSTR, FONTENUMPROC, LPARAM);\ntypedef BOOL\t(WINAPI *GetTextExtentPointA_Type)(HDC, LPCTSTR, int, LPSIZE);\ntypedef BOOL\t(WINAPI *GetTextExtentPoint32A_Type)(HDC, LPCTSTR, int, LPSIZE);\ntypedef HGDIOBJ (WINAPI *SelectObject_Type)(HDC, HGDIOBJ);\ntypedef BOOL\t(WINAPI *DeleteObject_Type)(HGDIOBJ);\ntypedef int\t\t(WINAPI *SelectClipRgn_Type)(HDC, HRGN);\n\n// Kernel32.dll:\ntypedef BOOL\t(WINAPI *GetDiskFreeSpaceA_Type)(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD);\ntypedef UINT\t(WINAPI *GetDriveType_Type)(LPCSTR);\ntypedef DWORD\t(WINAPI *GetLogicalDrives_Type)(void);\ntypedef void\t(WINAPI *GetLocalTime_Type)(LPSYSTEMTIME);\ntypedef FARPROC (WINAPI *GetProcAddress_Type)(HMODULE, LPCSTR);\ntypedef void\t(WINAPI *GetSystemTime_Type)(LPSYSTEMTIME);\ntypedef void\t(WINAPI *GetSystemTimeAsFileTime_Type)(LPFILETIME);\ntypedef UINT\t(WINAPI *GetTempFileName_Type)(LPCTSTR, LPCTSTR, UINT, LPTSTR);\ntypedef DWORD\t(WINAPI *GetTickCount_Type)(void);\ntypedef DWORD\t(WINAPI *GetVersion_Type)(void);\ntypedef BOOL\t(WINAPI *GetVersionExA_Type)(LPOSVERSIONINFOA);\ntypedef BOOL\t(WINAPI *GetVersionExW_Type)(LPOSVERSIONINFOW);\ntypedef void\t(WINAPI *GlobalMemoryStatus_Type)(LPMEMORYSTATUS);\ntypedef HMODULE (WINAPI *LoadLibraryA_Type)(LPCTSTR);\ntypedef HMODULE (WINAPI *LoadLibraryExA_Type)(LPCTSTR, HANDLE, DWORD);\ntypedef HMODULE (WINAPI *LoadLibraryW_Type)(LPCWSTR);\ntypedef HMODULE (WINAPI *LoadLibraryExW_Type)(LPCWSTR, HANDLE, DWORD);\ntypedef BOOL\t(WINAPI *ReadFile_Type)(HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED);\ntypedef LPTOP_LEVEL_EXCEPTION_FILTER \n\t\t\t\t(WINAPI *SetUnhandledExceptionFilter_Type)(LPTOP_LEVEL_EXCEPTION_FILTER);\ntypedef void\t(WINAPI *Sleep_Type)(DWORD);\ntypedef DWORD\t(WINAPI *SleepEx_Type)(DWORD, BOOL);\ntypedef BOOL\t(WINAPI *CreateScalableFontResourceA_Type)(DWORD, LPCTSTR, LPCTSTR, LPCTSTR);\ntypedef BOOL\t(WINAPI *CreateScalableFontResourceW_Type)(DWORD, LPCWSTR, LPCWSTR, LPCWSTR);\ntypedef int\t\t(WINAPI *AddFontResourceA_Type)(LPCTSTR);\ntypedef int\t\t(WINAPI *AddFontResourceW_Type)(LPCWSTR);\ntypedef HANDLE  (WINAPI *CreateFile_Type)(LPCTSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE);\ntypedef DWORD\t(WINAPI *SetFilePointer_Type)(HANDLE, LONG, PLONG, DWORD);\ntypedef BOOL\t(WINAPI *CloseHandle_Type)(HANDLE);\ntypedef BOOL\t(WINAPI *QueryPerformanceFrequency_Type)(LARGE_INTEGER *);\ntypedef BOOL\t(WINAPI *QueryPerformanceCounter_Type)(LARGE_INTEGER *);\ntypedef BOOL\t(WINAPI *QueryPerformanceFrequency_Type)(LARGE_INTEGER *);\ntypedef BOOL\t(WINAPI *GetExitCodeProcess_Type)(HANDLE, LPDWORD);\ntypedef BOOL\t(WINAPI *FreeLibrary_Type)(HMODULE);\n\n// ole32.dll:\ntypedef HRESULT (STDAPICALLTYPE *CoCreateInstance_Type)(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID FAR*);\ntypedef HRESULT (STDAPICALLTYPE *CoCreateInstanceEx_Type)(REFCLSID, IUnknown *, DWORD, COSERVERINFO *, DWORD, MULTI_QI *);\ntypedef HRESULT (STDAPICALLTYPE *CoInitialize_Type)(LPVOID);\ntypedef void (STDAPICALLTYPE *CoUninitialize_Type)(void);\n\n// user32.dll:\ntypedef HDC\t\t(WINAPI *BeginPaint_Type)(HWND, LPPAINTSTRUCT);\ntypedef LRESULT (WINAPI *CallWindowProc_Type)(WNDPROC, HWND, UINT, WPARAM, LPARAM);\ntypedef LONG\t(WINAPI *ChangeDisplaySettingsA_Type)(DEVMODEA *, DWORD);\ntypedef LONG\t(WINAPI *ChangeDisplaySettingsExA_Type)(LPCTSTR, DEVMODEA *, HWND, DWORD, LPVOID);\ntypedef LONG\t(WINAPI *ChangeDisplaySettingsW_Type)(DEVMODEW *, DWORD);\ntypedef LONG\t(WINAPI *ChangeDisplaySettingsExW_Type)(LPCTSTR, DEVMODEW *, HWND, DWORD, LPVOID);\ntypedef BOOL\t(WINAPI *ClientToScreen_Type)(HWND, LPPOINT);\ntypedef BOOL\t(WINAPI *ClipCursor_Type)(const RECT *);\ntypedef HWND\t(WINAPI *CreateDialogIndirectParam_Type)(HINSTANCE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM);\ntypedef HWND\t(WINAPI *CreateDialogParam_Type)(HINSTANCE, LPCTSTR, HWND, DLGPROC, LPARAM);\ntypedef HWND\t(WINAPI *CreateWindowExA_Type)(DWORD, LPCTSTR, LPCTSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID);\ntypedef HWND\t(WINAPI *CreateWindowExW_Type)(DWORD, LPCWSTR, LPCWSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID);\ntypedef LRESULT (WINAPI *DefWindowProc_Type)(HWND, UINT, WPARAM, LPARAM);\ntypedef int\t\t(WINAPI *DrawTextA_Type)(HDC, LPCTSTR, int, LPRECT, UINT);\ntypedef int\t\t(WINAPI *DrawTextW_Type)(HDC, LPCWSTR, int, LPRECT, UINT);\ntypedef int\t\t(WINAPI *DrawTextExA_Type)(HDC, LPCTSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS);\ntypedef int\t\t(WINAPI *DrawTextExW_Type)(HDC, LPCWSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS);\ntypedef BOOL\t(WINAPI *EndPaint_Type)(HWND, const PAINTSTRUCT *);\ntypedef LONG\t(WINAPI *EnumDisplaySettings_Type)(LPCTSTR, DWORD, LPDEVMODEA);\ntypedef int\t\t(WINAPI *FillRect_Type)(HDC, const RECT *, HBRUSH);\ntypedef int\t\t(WINAPI *FrameRect_Type)(HDC, const RECT *, HBRUSH);\ntypedef BOOL\t(WINAPI *GetClientRect_Type)(HWND, LPRECT);\ntypedef BOOL\t(WINAPI *GetClipCursor_Type)(LPRECT);\ntypedef BOOL\t(WINAPI *GetCursorPos_Type)(LPPOINT);\ntypedef HDC\t\t(WINAPI *GDIGetDC_Type)(HWND);\ntypedef HWND\t(WINAPI *GetDesktopWindow_Type)(void);\ntypedef BOOL\t(WINAPI *GetMessage_Type)(LPMSG, HWND, UINT, UINT);\ntypedef BOOL\t(WINAPI *GetMonitorInfo_Type)(HMONITOR, LPMONITORINFO);\ntypedef int\t\t(WINAPI *GetSystemMetrics_Type)(int);\ntypedef HWND\t(WINAPI *GetTopWindow_Type)(HWND);\ntypedef int\t\t(WINAPI *GetUpdateRgn_Type)(HWND, HRGN, BOOL);\ntypedef LONG\t(WINAPI *GetWindowLong_Type)(HWND, int);\ntypedef BOOL\t(WINAPI *GetWindowRect_Type)(HWND, LPRECT);\ntypedef BOOL\t(WINAPI *InvalidateRect_Type)(HWND, CONST RECT *, BOOL);\ntypedef int\t\t(WINAPI *MapWindowPoints_Type)(HWND, HWND, LPPOINT, UINT);\ntypedef BOOL\t(WINAPI *MoveWindow_Type)(HWND, int, int, int, int, BOOL);\ntypedef BOOL\t(WINAPI *PeekMessage_Type)(LPMSG, HWND, UINT, UINT, UINT);\ntypedef BOOL\t(WINAPI *RedrawWindow_Type)(HWND, const RECT *, HRGN, UINT);\ntypedef ATOM\t(WINAPI *RegisterClassExA_Type)(WNDCLASSEXA *);\ntypedef ATOM\t(WINAPI *RegisterClassA_Type)(WNDCLASSA *);\ntypedef ATOM\t(WINAPI *RegisterClassExW_Type)(WNDCLASSEXW *);\ntypedef ATOM\t(WINAPI *RegisterClassW_Type)(WNDCLASSW *);\ntypedef int\t\t(WINAPI *GDIReleaseDC_Type)(HWND, HDC);\ntypedef BOOL\t(WINAPI *ScreenToClient_Type)(HWND, LPPOINT);\ntypedef LRESULT (WINAPI *SendMessage_Type)(HWND, UINT, WPARAM, LPARAM);\ntypedef HCURSOR (WINAPI *SetCursor_Type)(HCURSOR);\ntypedef BOOL\t(WINAPI *SetCursorPos_Type)(int, int);\ntypedef UINT_PTR(WINAPI *SetTimer_Type)(HWND, UINT_PTR, UINT, TIMERPROC);\ntypedef LONG\t(WINAPI *SetWindowLong_Type)(HWND, int, LONG);\ntypedef BOOL\t(WINAPI *SetWindowPos_Type)(HWND, HWND, int, int, int, int, UINT);\ntypedef int\t\t(WINAPI *ShowCursor_Type)(BOOL);\ntypedef BOOL\t(WINAPI *ShowWindow_Type)(HWND, int);\ntypedef LONG\t(WINAPI *TabbedTextOutA_Type)(HDC, int, int, LPCTSTR, int, int, const LPINT, int);\ntypedef LONG\t(WINAPI *TabbedTextOutW_Type)(HDC, int, int, LPCWSTR, int, int, const LPINT, int);\ntypedef BOOL\t(WINAPI *DestroyWindow_Type)(HWND);\ntypedef BOOL\t(WINAPI *CloseWindow_Type)(HWND);\ntypedef BOOL\t(WINAPI *SetSysColors_Type)(int, const INT *, const COLORREF *);\ntypedef HDC\t\t(WINAPI *GetDCEx_Type)(HWND, HRGN, DWORD);\ntypedef BOOL\t(WINAPI *UpdateWindow_Type)(HWND);\ntypedef BOOL\t(WINAPI *GetWindowPlacement_Type)(HWND, WINDOWPLACEMENT *);\ntypedef BOOL\t(WINAPI *SetWindowPlacement_Type)(HWND, WINDOWPLACEMENT *);\ntypedef HWND\t(WINAPI *SetCapture_Type)(HWND);\ntypedef HWND\t(WINAPI *GetForegroundWindow_Type)(void);\ntypedef HWND\t(WINAPI *GetActiveWindow_Type)(void);\ntypedef BOOL\t(WINAPI *IsWindowVisible_Type)(HWND);\ntypedef BOOL\t(WINAPI *SystemParametersInfo_Type)(UINT, UINT, PVOID, UINT);\ntypedef BOOL\t(WINAPI *KillTimer_Type)(HWND, UINT_PTR);\ntypedef BOOL\t(WINAPI *GetUpdateRect_Type)(HWND, LPRECT, BOOL);\ntypedef BOOL\t(WINAPI *GetCursorInfo_Type)(PCURSORINFO);\ntypedef HWND\t(WINAPI *WindowFromPoint_Type)(POINT);\ntypedef HWND\t(WINAPI *ChildWindowFromPoint_Type)(HWND, POINT);\ntypedef HWND\t(WINAPI *ChildWindowFromPointEx_Type)(HWND, POINT, UINT);\ntypedef int\t\t(WINAPI *GetWindowTextA_Type)(HWND, LPTSTR, int);\ntypedef BOOL\t(WINAPI *BringWindowToTop_Type)(HWND);\ntypedef BOOL\t(WINAPI *SetForegroundWindow_Type)(HWND);\ntypedef HHOOK\t(WINAPI *SetWindowsHookEx_Type)(int, HOOKPROC, HINSTANCE, DWORD);\ntypedef HRESULT (WINAPI *MessageBoxTimeoutA_Type)(HWND, LPCSTR, LPCSTR, UINT, WORD, DWORD);\ntypedef HRESULT (WINAPI *MessageBoxTimeoutW_Type)(HWND, LPCWSTR, LPCWSTR, UINT, WORD, DWORD);\ntypedef BOOL\t(WINAPI *IsIconic_Type)(HWND);\ntypedef BOOL\t(WINAPI *IsZoomed_Type)(HWND);\ntypedef HDESK\t(WINAPI *CreateDesktop_Type)(LPCTSTR, LPCTSTR, DEVMODE *, DWORD, ACCESS_MASK, LPSECURITY_ATTRIBUTES);\ntypedef BOOL\t(WINAPI *SwitchDesktop_Type)(HDESK);\ntypedef HDESK\t(WINAPI *OpenDesktop_Type)(LPTSTR, DWORD, BOOL, ACCESS_MASK);\ntypedef BOOL\t(WINAPI *CloseDesktop_Type)(HDESK);\ntypedef int\t\t(WINAPI *ValidateRect_Type)(HWND, const RECT *);\ntypedef BOOL\t(WINAPI *ScrollWindow_Type)(HWND, int, int, const RECT *, const RECT *);\ntypedef INT_PTR (WINAPI *DialogBoxParamA_Type)(HINSTANCE, LPCTSTR, HWND, DLGPROC, LPARAM);\ntypedef HWND\t(WINAPI *GetParent_Type)(HWND);\ntypedef BOOL\t(WINAPI *InvalidateRgn_Type)(HWND, HRGN, BOOL);\ntypedef BOOL\t(WINAPI *InvertRect_Type)(HDC, const RECT *);\ntypedef BOOL\t(WINAPI *ScrollDC_Type)(HDC, int, int, const RECT *, const RECT *, HRGN, LPRECT);\ntypedef BOOL\t(WINAPI *DrawIcon_Type)(HDC hDC, int X, int Y, HICON hIcon); \ntypedef BOOL\t(WINAPI *DrawIconEx_Type)(HDC, int, int, HICON, int, int, UINT, HBRUSH, UINT);\ntypedef BOOL\t(WINAPI *DrawCaption_Type)(HWND, HDC, LPCRECT, UINT);\ntypedef BOOL\t(WINAPI *PaintDesktop_Type)(HDC);\ntypedef VOID\t(WINAPI *mouse_event_Type)(DWORD, DWORD, DWORD, DWORD, ULONG_PTR);\ntypedef BOOL\t(WINAPI *ShowScrollBar_Type)(HWND, int, BOOL);\ntypedef BOOL\t(WINAPI *DrawMenuBar_Type)(HWND);\n//typedef BOOL (WINAPI *TranslateMessage_Type)(MSG *);\ntypedef BOOL\t(WINAPI *EnumDisplayDevicesA_Type)(LPCSTR, DWORD, PDISPLAY_DEVICE, DWORD);\ntypedef BOOL\t(WINAPI *EnumDisplayDevicesW_Type)(LPCWSTR, DWORD, PDISPLAY_DEVICEW, DWORD);\ntypedef INT_PTR (WINAPI *DialogBoxIndirectParamA_Type)(HINSTANCE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM);\ntypedef HWND\t(WINAPI *GetFocus_Type)(void);\n//typedef HWND (WINAPI *GetTopWindow_Type)(HWND);\ntypedef DWORD\t(WINAPI *GetWindowThreadProcessId_Type)(HWND, LPDWORD);\ntypedef HWND\t(WINAPI *GetWindow_Type)(HWND, UINT);\ntypedef BOOL\t(WINAPI *IsWindow_Type)(HWND);\ntypedef HWND\t(WINAPI *SetFocus_Type)(HWND);\ntypedef HBITMAP (WINAPI *LoadBitmapA_Type)(HINSTANCE, LPCSTR);\ntypedef BOOL\t(WINAPI *EnumWindows_Type)(WNDENUMPROC, LPARAM);\ntypedef BOOL\t(WINAPI *GetMessage_Type)(LPMSG, HWND, UINT, UINT);\ntypedef BOOL\t(WINAPI *PostMessage_Type)(HWND, UINT, WPARAM, LPARAM);\ntypedef BOOL\t(WINAPI *AdjustWindowRect_Type)(LPRECT, DWORD, BOOL);\ntypedef BOOL\t(WINAPI *AdjustWindowRectEx_Type)(LPRECT, DWORD, BOOL, DWORD);\n\n// Winmm.dll:\ntypedef MCIERROR(WINAPI *mciSendCommand_Type)(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR);\ntypedef MCIERROR(WINAPI *mciSendStringA_Type)(LPCTSTR, LPTSTR, UINT, HANDLE);\ntypedef MCIERROR(WINAPI *mciSendStringW_Type)(LPCWSTR, LPWSTR, UINT, HANDLE);\ntypedef DWORD\t(WINAPI *timeGetTime_Type)(void);\ntypedef MMRESULT(WINAPI *timeKillEvent_Type)(UINT);\ntypedef MMRESULT(WINAPI *timeSetEvent_Type)(UINT, UINT, LPTIMECALLBACK, DWORD_PTR, UINT);\n\n/* ===================================================================\nhooked APIs real pointers\n====================================================================*/\n\n#ifdef DXWDECLARATIONS \n#undef DXWEXTERN\n#undef DXWINITIALIZED\n#define DXWEXTERN\n//#define DXWINITIALIZED = NULL\n#define DXWINITIALIZED\n#else\n#undef DXWEXTERN\n#undef DXWINITIALIZED\n#define DXWEXTERN extern\n#define DXWINITIALIZED\n#endif\n\n// advapi32.dll\n\nDXWEXTERN RegCloseKey_Type pRegCloseKey DXWINITIALIZED;\nDXWEXTERN RegCreateKey_Type pRegCreateKey DXWINITIALIZED;\nDXWEXTERN RegCreateKeyEx_Type pRegCreateKeyEx DXWINITIALIZED;\nDXWEXTERN RegOpenKeyEx_Type pRegOpenKeyEx DXWINITIALIZED;\nDXWEXTERN RegQueryValue_Type pRegQueryValue DXWINITIALIZED;\nDXWEXTERN RegQueryValueEx_Type pRegQueryValueEx DXWINITIALIZED;\nDXWEXTERN RegSetValueEx_Type pRegSetValueEx DXWINITIALIZED;\n\n// ImmLib.dll\n\nDXWEXTERN ImmNotifyIME_Type pImmNotifyIME DXWINITIALIZED;\nDXWEXTERN ImmCreateContext_Type pImmCreateContext DXWINITIALIZED;\nDXWEXTERN ImmDestroyContext_Type pImmDestroyContext DXWINITIALIZED;\nDXWEXTERN ImmSetOpenStatus_Type pImmSetOpenStatus DXWINITIALIZED;\nDXWEXTERN ImmAssociateContext_Type pImmAssociateContext DXWINITIALIZED;\nDXWEXTERN ImmSetCompositionWindow_Type pImmSetCompositionWindow DXWINITIALIZED;\nDXWEXTERN ImmSetCompositionString_Type pImmSetCompositionString DXWINITIALIZED;\nDXWEXTERN ImmGetOpenStatus_Type pImmGetOpenStatus DXWINITIALIZED;\n\n// GDI32.dll:\nDXWEXTERN BitBlt_Type pGDIBitBlt DXWINITIALIZED;\nDXWEXTERN CreateCompatibleDC_Type pGDICreateCompatibleDC DXWINITIALIZED;\nDXWEXTERN CreateDCA_Type pGDICreateDCA DXWINITIALIZED;\nDXWEXTERN CreateDCW_Type pGDICreateDCW DXWINITIALIZED;\nDXWEXTERN CreateFont_Type pGDICreateFont DXWINITIALIZED;\nDXWEXTERN CreateFontIndirect_Type pGDICreateFontIndirect DXWINITIALIZED;\nDXWEXTERN CreateICA_Type pCreateICA DXWINITIALIZED;\nDXWEXTERN GDICreatePalette_Type pGDICreatePalette DXWINITIALIZED;\nDXWEXTERN DeferWindowPos_Type pGDIDeferWindowPos DXWINITIALIZED;\nDXWEXTERN DeleteDC_Type pGDIDeleteDC DXWINITIALIZED;\nDXWEXTERN ExtTextOutW_Type pExtTextOutW DXWINITIALIZED;\nDXWEXTERN ExtTextOutA_Type pExtTextOutA DXWINITIALIZED;\nDXWEXTERN GetClipBox_Type pGDIGetClipBox DXWINITIALIZED;\nDXWEXTERN GetRgnBox_Type pGetRgnBox DXWINITIALIZED;\nDXWEXTERN GetRegionData_Type pGetRegionData DXWINITIALIZED;\nDXWEXTERN GetDCOrgEx_Type pGetDCOrgEx DXWINITIALIZED;\nDXWEXTERN GetDeviceCaps_Type pGDIGetDeviceCaps DXWINITIALIZED;\nDXWEXTERN GetDeviceGammaRamp_Type pGDIGetDeviceGammaRamp DXWINITIALIZED;\nDXWEXTERN GetSystemPaletteEntries_Type pGDIGetSystemPaletteEntries DXWINITIALIZED;\nDXWEXTERN GetPaletteEntries_Type pGetPaletteEntries DXWINITIALIZED;\nDXWEXTERN GetSystemPaletteUse_Type pGetSystemPaletteUse DXWINITIALIZED;\nDXWEXTERN IntersectClipRect_Type pIntersectClipRect DXWINITIALIZED;\nDXWEXTERN PatBlt_Type pGDIPatBlt DXWINITIALIZED;\nDXWEXTERN Polyline_Type pPolyline DXWINITIALIZED;\nDXWEXTERN RealizePalette_Type pGDIRealizePalette DXWINITIALIZED;\nDXWEXTERN Rectangle_Type pGDIRectangle DXWINITIALIZED;\nDXWEXTERN RestoreDC_Type pGDIRestoreDC DXWINITIALIZED;\nDXWEXTERN SaveDC_Type pGDISaveDC DXWINITIALIZED;\nDXWEXTERN ScaleWindowExtEx_Type pGDIScaleWindowExtEx DXWINITIALIZED;\nDXWEXTERN SelectPalette_Type pGDISelectPalette DXWINITIALIZED;\nDXWEXTERN SetBkColor_Type pGDISetBkColor DXWINITIALIZED;\nDXWEXTERN SetDeviceGammaRamp_Type pGDISetDeviceGammaRamp DXWINITIALIZED;\nDXWEXTERN SetTextColor_Type pGDISetTextColor DXWINITIALIZED;\nDXWEXTERN StretchBlt_Type pGDIStretchBlt DXWINITIALIZED;\nDXWEXTERN StretchDIBits_Type pStretchDIBits DXWINITIALIZED;\nDXWEXTERN TextOutA_Type pGDITextOutA DXWINITIALIZED;\nDXWEXTERN TextOutW_Type pGDITextOutW DXWINITIALIZED;\nDXWEXTERN LineTo_Type pLineTo DXWINITIALIZED;\nDXWEXTERN ArcTo_Type pArcTo DXWINITIALIZED;\nDXWEXTERN MoveToEx_Type pMoveToEx DXWINITIALIZED;\nDXWEXTERN PolyDraw_Type pPolyDraw DXWINITIALIZED;\nDXWEXTERN PolylineTo_Type pPolylineTo DXWINITIALIZED;\nDXWEXTERN PolyBezier_Type pPolyBezier DXWINITIALIZED;\nDXWEXTERN PolyBezierTo_Type pPolyBezierTo DXWINITIALIZED;\nDXWEXTERN SetDIBitsToDevice_Type pSetDIBitsToDevice DXWINITIALIZED;\nDXWEXTERN CreateCompatibleBitmap_Type pCreateCompatibleBitmap DXWINITIALIZED;\nDXWEXTERN SetPixel_Type pSetPixel DXWINITIALIZED;\nDXWEXTERN Ellipse_Type pEllipse DXWINITIALIZED;\nDXWEXTERN Polygon_Type pPolygon DXWINITIALIZED;\nDXWEXTERN Arc_Type pArc DXWINITIALIZED;\nDXWEXTERN CreateEllipticRgn_Type pCreateEllipticRgn DXWINITIALIZED;\nDXWEXTERN CreateEllipticRgnIndirect_Type pCreateEllipticRgnIndirect DXWINITIALIZED;\nDXWEXTERN CreateRectRgn_Type pCreateRectRgn DXWINITIALIZED;\nDXWEXTERN CreateRectRgnIndirect_Type pCreateRectRgnIndirect DXWINITIALIZED;\nDXWEXTERN CreatePolygonRgn_Type pCreatePolygonRgn DXWINITIALIZED;\nDXWEXTERN MaskBlt_Type pMaskBlt DXWINITIALIZED;\nDXWEXTERN SetRectRgn_Type pSetRectRgn DXWINITIALIZED;\nDXWEXTERN SetViewportOrgEx_Type pSetViewportOrgEx DXWINITIALIZED;\nDXWEXTERN SetViewportExtEx_Type pSetViewportExtEx DXWINITIALIZED;\nDXWEXTERN GetViewportOrgEx_Type pGetViewportOrgEx DXWINITIALIZED;\nDXWEXTERN GetViewportExtEx_Type pGetViewportExtEx DXWINITIALIZED;\nDXWEXTERN SetWindowOrgEx_Type pSetWindowExtEx DXWINITIALIZED;\nDXWEXTERN GetWindowOrgEx_Type pGetWindowOrgEx DXWINITIALIZED;\nDXWEXTERN SetWindowOrgEx_Type pSetWindowOrgEx DXWINITIALIZED;\nDXWEXTERN GetCurrentPositionEx_Type pGetCurrentPositionEx DXWINITIALIZED;\nDXWEXTERN CreateScalableFontResourceA_Type pCreateScalableFontResourceA DXWINITIALIZED;\nDXWEXTERN CreateScalableFontResourceW_Type pCreateScalableFontResourceW DXWINITIALIZED;\nDXWEXTERN AddFontResourceA_Type pAddFontResourceA DXWINITIALIZED;\nDXWEXTERN AddFontResourceW_Type pAddFontResourceW DXWINITIALIZED;\nDXWEXTERN AddFontResourceA_Type pRemoveFontResourceA DXWINITIALIZED;\nDXWEXTERN AddFontResourceW_Type pRemoveFontResourceW DXWINITIALIZED;\nDXWEXTERN AnimatePalette_Type pAnimatePalette DXWINITIALIZED;\nDXWEXTERN SetSystemPaletteUse_Type pSetSystemPaletteUse DXWINITIALIZED;\nDXWEXTERN GDISetPixelFormat_Type pGDISetPixelFormat DXWINITIALIZED;\nDXWEXTERN GDIGetPixelFormat_Type pGDIGetPixelFormat DXWINITIALIZED;\nDXWEXTERN ChoosePixelFormat_Type pChoosePixelFormat DXWINITIALIZED;\nDXWEXTERN DescribePixelFormat_Type pDescribePixelFormat DXWINITIALIZED;\nDXWEXTERN GetObjectType_Type pGetObjectType DXWINITIALIZED;\nDXWEXTERN SetDIBits_Type pSetDIBits DXWINITIALIZED;\nDXWEXTERN OffsetRgn_Type pOffsetRgn DXWINITIALIZED;\nDXWEXTERN GetPixel_Type pGetPixel DXWINITIALIZED;\nDXWEXTERN PlgBlt_Type pPlgBlt DXWINITIALIZED;\nDXWEXTERN SetPixelV_Type pSetPixelV DXWINITIALIZED;\nDXWEXTERN Chord_Type pChord DXWINITIALIZED;\nDXWEXTERN PolyTextOutA_Type pPolyTextOutA DXWINITIALIZED;\nDXWEXTERN PolyTextOutW_Type pPolyTextOutW DXWINITIALIZED;\nDXWEXTERN GetDIBits_Type pGetDIBits DXWINITIALIZED;\nDXWEXTERN CreateDIBitmap_Type pCreateDIBitmap DXWINITIALIZED;\nDXWEXTERN CreateDIBSection_Type pCreateDIBSection DXWINITIALIZED;\nDXWEXTERN CreateDiscardableBitmap_Type pCreateDiscardableBitmap DXWINITIALIZED;\nDXWEXTERN ExtFloodFill_Type pExtFloodFill DXWINITIALIZED;\nDXWEXTERN GdiAlphaBlend_Type pGdiAlphaBlend DXWINITIALIZED;\nDXWEXTERN GdiGradientFill_Type pGdiGradientFill DXWINITIALIZED;\nDXWEXTERN GdiTransparentBlt_Type pGdiTransparentBlt DXWINITIALIZED;\nDXWEXTERN Pie_Type pPie DXWINITIALIZED;\nDXWEXTERN AngleArc_Type pAngleArc DXWINITIALIZED;\nDXWEXTERN PolyPolyline_Type pPolyPolyline DXWINITIALIZED;\nDXWEXTERN FillRgn_Type pFillRgn DXWINITIALIZED;\nDXWEXTERN FrameRgn_Type pFrameRgn DXWINITIALIZED;\nDXWEXTERN InvertRgn_Type pInvertRgn DXWINITIALIZED;\nDXWEXTERN PaintRgn_Type pPaintRgn DXWINITIALIZED;\nDXWEXTERN SetMapMode_Type pSetMapMode DXWINITIALIZED;\nDXWEXTERN RoundRect_Type pRoundRect DXWINITIALIZED;\nDXWEXTERN PolyPolygon_Type pPolyPolygon DXWINITIALIZED;\n//DXWEXTERN DPtoLP_Type pDPtoLP DXWINITIALIZED;\nDXWEXTERN PlayEnhMetaFile_Type pPlayEnhMetaFile DXWINITIALIZED;\nDXWEXTERN SetPaletteEntries_Type pSetPaletteEntries DXWINITIALIZED;\nDXWEXTERN SetROP2_Type pSetROP2 DXWINITIALIZED;\nDXWEXTERN EnumFontsA_Type pEnumFontsA DXWINITIALIZED;\nDXWEXTERN GetTextExtentPointA_Type pGetTextExtentPointA DXWINITIALIZED;\nDXWEXTERN GetTextExtentPoint32A_Type pGetTextExtentPoint32A DXWINITIALIZED;\nDXWEXTERN SelectObject_Type pSelectObject DXWINITIALIZED;\nDXWEXTERN DeleteObject_Type pDeleteObject DXWINITIALIZED;\nDXWEXTERN SelectClipRgn_Type pSelectClipRgn DXWINITIALIZED;\n\n\n// Kernel32.dll:\nDXWEXTERN GetDiskFreeSpaceA_Type pGetDiskFreeSpaceA DXWINITIALIZED;\nDXWEXTERN GetDriveType_Type pGetDriveType DXWINITIALIZED;\nDXWEXTERN GetLogicalDrives_Type pGetLogicalDrives DXWINITIALIZED;\nDXWEXTERN GetLocalTime_Type pGetLocalTime DXWINITIALIZED;\nDXWEXTERN GetProcAddress_Type pGetProcAddress DXWINITIALIZED;\nDXWEXTERN GetSystemTime_Type pGetSystemTime DXWINITIALIZED;\nDXWEXTERN GetSystemTimeAsFileTime_Type pGetSystemTimeAsFileTime DXWINITIALIZED;\nDXWEXTERN GetTempFileName_Type pGetTempFileName DXWINITIALIZED;\nDXWEXTERN GetTickCount_Type pGetTickCount DXWINITIALIZED;\nDXWEXTERN GetVersion_Type pGetVersion DXWINITIALIZED;\nDXWEXTERN GetVersionExA_Type pGetVersionExA DXWINITIALIZED;\nDXWEXTERN GetVersionExW_Type pGetVersionExW DXWINITIALIZED;\nDXWEXTERN GlobalMemoryStatus_Type pGlobalMemoryStatus DXWINITIALIZED;\nDXWEXTERN LoadLibraryA_Type pLoadLibraryA DXWINITIALIZED;\nDXWEXTERN LoadLibraryExA_Type pLoadLibraryExA DXWINITIALIZED;\nDXWEXTERN LoadLibraryW_Type pLoadLibraryW DXWINITIALIZED;\nDXWEXTERN LoadLibraryExW_Type pLoadLibraryExW DXWINITIALIZED;\nDXWEXTERN ReadFile_Type pReadFile DXWINITIALIZED;\nDXWEXTERN SetUnhandledExceptionFilter_Type pSetUnhandledExceptionFilter DXWINITIALIZED;\nDXWEXTERN Sleep_Type pSleep DXWINITIALIZED;\nDXWEXTERN SleepEx_Type pSleepEx DXWINITIALIZED;\nDXWEXTERN CreateFile_Type pCreateFile DXWINITIALIZED;\nDXWEXTERN SetFilePointer_Type pSetFilePointer DXWINITIALIZED;\nDXWEXTERN CloseHandle_Type pCloseHandle DXWINITIALIZED;\nDXWEXTERN QueryPerformanceFrequency_Type pQueryPerformanceFrequency DXWINITIALIZED;\nDXWEXTERN QueryPerformanceCounter_Type pQueryPerformanceCounter DXWINITIALIZED;\nDXWEXTERN GetExitCodeProcess_Type pGetExitCodeProcess DXWINITIALIZED;\nDXWEXTERN FreeLibrary_Type pFreeLibrary DXWINITIALIZED;\n\n// ole32.dll:\nDXWEXTERN CoCreateInstance_Type pCoCreateInstance DXWINITIALIZED;\nDXWEXTERN CoCreateInstanceEx_Type pCoCreateInstanceEx DXWINITIALIZED;\nDXWEXTERN CoInitialize_Type pCoInitialize DXWINITIALIZED;\nDXWEXTERN CoUninitialize_Type pCoUninitialize DXWINITIALIZED;\n\n// user32.dll:\nDXWEXTERN BeginPaint_Type pBeginPaint DXWINITIALIZED;\nDXWEXTERN CallWindowProc_Type pCallWindowProcA DXWINITIALIZED;\nDXWEXTERN CallWindowProc_Type pCallWindowProcW DXWINITIALIZED;\nDXWEXTERN ChangeDisplaySettingsA_Type pChangeDisplaySettingsA DXWINITIALIZED;\nDXWEXTERN ChangeDisplaySettingsExA_Type pChangeDisplaySettingsExA DXWINITIALIZED;\nDXWEXTERN ChangeDisplaySettingsW_Type pChangeDisplaySettingsW DXWINITIALIZED;\nDXWEXTERN ChangeDisplaySettingsExW_Type pChangeDisplaySettingsExW DXWINITIALIZED;\nDXWEXTERN ClientToScreen_Type pClientToScreen DXWINITIALIZED;\nDXWEXTERN ClipCursor_Type pClipCursor DXWINITIALIZED;\nDXWEXTERN CreateDialogIndirectParam_Type pCreateDialogIndirectParam DXWINITIALIZED;\nDXWEXTERN CreateDialogParam_Type pCreateDialogParam DXWINITIALIZED;\nDXWEXTERN CreateWindowExA_Type pCreateWindowExA DXWINITIALIZED;\nDXWEXTERN CreateWindowExW_Type pCreateWindowExW DXWINITIALIZED;\nDXWEXTERN DefWindowProc_Type pDefWindowProcA DXWINITIALIZED;\nDXWEXTERN DefWindowProc_Type pDefWindowProcW DXWINITIALIZED;\nDXWEXTERN DrawTextA_Type pDrawTextA DXWINITIALIZED;\nDXWEXTERN DrawTextW_Type pDrawTextW DXWINITIALIZED;\nDXWEXTERN DrawTextExA_Type pDrawTextExA DXWINITIALIZED;\nDXWEXTERN DrawTextExW_Type pDrawTextExW DXWINITIALIZED;\nDXWEXTERN EndPaint_Type pEndPaint DXWINITIALIZED;\nDXWEXTERN EnumDisplaySettings_Type pEnumDisplaySettings DXWINITIALIZED;\nDXWEXTERN FillRect_Type pFillRect DXWINITIALIZED;\nDXWEXTERN FrameRect_Type pFrameRect DXWINITIALIZED;\nDXWEXTERN GetClientRect_Type pGetClientRect DXWINITIALIZED;\nDXWEXTERN GetClipCursor_Type pGetClipCursor DXWINITIALIZED;\nDXWEXTERN GetCursorPos_Type pGetCursorPos DXWINITIALIZED;\nDXWEXTERN GDIGetDC_Type pGDIGetDC DXWINITIALIZED;\nDXWEXTERN GetDesktopWindow_Type pGetDesktopWindow DXWINITIALIZED;\nDXWEXTERN GetMonitorInfo_Type pGetMonitorInfoA DXWINITIALIZED;\nDXWEXTERN GetMonitorInfo_Type pGetMonitorInfoW DXWINITIALIZED;\nDXWEXTERN GetSystemMetrics_Type pGetSystemMetrics DXWINITIALIZED;\nDXWEXTERN GetTopWindow_Type pGetTopWindow DXWINITIALIZED;\nDXWEXTERN GDIGetDC_Type pGDIGetWindowDC DXWINITIALIZED;\nDXWEXTERN GetUpdateRgn_Type pGetUpdateRgn DXWINITIALIZED;\nDXWEXTERN GetWindowLong_Type pGetWindowLongA DXWINITIALIZED;\nDXWEXTERN GetWindowLong_Type pGetWindowLongW DXWINITIALIZED;\nDXWEXTERN GetWindowRect_Type pGetWindowRect DXWINITIALIZED;\nDXWEXTERN InvalidateRect_Type pInvalidateRect DXWINITIALIZED;\nDXWEXTERN MapWindowPoints_Type pMapWindowPoints DXWINITIALIZED;\nDXWEXTERN MoveWindow_Type pMoveWindow DXWINITIALIZED;\nDXWEXTERN PeekMessage_Type pPeekMessageA DXWINITIALIZED;\nDXWEXTERN PeekMessage_Type pPeekMessageW DXWINITIALIZED;\nDXWEXTERN RedrawWindow_Type pRedrawWindow DXWINITIALIZED;\nDXWEXTERN RegisterClassExA_Type pRegisterClassExA DXWINITIALIZED;\nDXWEXTERN RegisterClassA_Type pRegisterClassA DXWINITIALIZED;\nDXWEXTERN RegisterClassExW_Type pRegisterClassExW DXWINITIALIZED;\nDXWEXTERN RegisterClassW_Type pRegisterClassW DXWINITIALIZED;\nDXWEXTERN GDIReleaseDC_Type pGDIReleaseDC DXWINITIALIZED;\nDXWEXTERN ScreenToClient_Type pScreenToClient DXWINITIALIZED;\nDXWEXTERN SendMessage_Type pSendMessageA DXWINITIALIZED;\nDXWEXTERN SendMessage_Type pSendMessageW DXWINITIALIZED;\nDXWEXTERN SetCursor_Type pSetCursor DXWINITIALIZED;\nDXWEXTERN SetCursorPos_Type pSetCursorPos DXWINITIALIZED;\nDXWEXTERN SetTimer_Type pSetTimer DXWINITIALIZED;\nDXWEXTERN SetWindowLong_Type pSetWindowLongA DXWINITIALIZED;\nDXWEXTERN SetWindowLong_Type pSetWindowLongW DXWINITIALIZED;\nDXWEXTERN SetWindowPos_Type pSetWindowPos DXWINITIALIZED;\nDXWEXTERN ShowCursor_Type pShowCursor DXWINITIALIZED;\nDXWEXTERN ShowWindow_Type pShowWindow DXWINITIALIZED;\nDXWEXTERN TabbedTextOutA_Type pTabbedTextOutA DXWINITIALIZED;\nDXWEXTERN TabbedTextOutW_Type pTabbedTextOutW DXWINITIALIZED;\nDXWEXTERN DestroyWindow_Type pDestroyWindow DXWINITIALIZED;\nDXWEXTERN CloseWindow_Type pCloseWindow DXWINITIALIZED;\nDXWEXTERN SetSysColors_Type pSetSysColors DXWINITIALIZED;\nDXWEXTERN GetDCEx_Type pGDIGetDCEx DXWINITIALIZED;\nDXWEXTERN UpdateWindow_Type pUpdateWindow DXWINITIALIZED;\nDXWEXTERN GetWindowPlacement_Type pGetWindowPlacement DXWINITIALIZED;\nDXWEXTERN SetWindowPlacement_Type pSetWindowPlacement DXWINITIALIZED;\nDXWEXTERN SetCapture_Type pSetCapture DXWINITIALIZED;\nDXWEXTERN GetForegroundWindow_Type pGetForegroundWindow DXWINITIALIZED;\nDXWEXTERN GetActiveWindow_Type pGetActiveWindow DXWINITIALIZED;\nDXWEXTERN IsWindowVisible_Type pIsWindowVisible DXWINITIALIZED;\nDXWEXTERN SystemParametersInfo_Type pSystemParametersInfoA DXWINITIALIZED;\nDXWEXTERN SystemParametersInfo_Type pSystemParametersInfoW DXWINITIALIZED;\nDXWEXTERN KillTimer_Type pKillTimer DXWINITIALIZED;\nDXWEXTERN GetUpdateRect_Type pGetUpdateRect DXWINITIALIZED;\nDXWEXTERN GetCursorInfo_Type pGetCursorInfo DXWINITIALIZED;\nDXWEXTERN WindowFromPoint_Type pWindowFromPoint DXWINITIALIZED;\nDXWEXTERN ChildWindowFromPoint_Type pChildWindowFromPoint DXWINITIALIZED;\nDXWEXTERN ChildWindowFromPointEx_Type pChildWindowFromPointEx DXWINITIALIZED;\nDXWEXTERN GetWindowTextA_Type pGetWindowTextA DXWINITIALIZED;\nDXWEXTERN BringWindowToTop_Type pBringWindowToTop DXWINITIALIZED;\nDXWEXTERN SetForegroundWindow_Type pSetForegroundWindow DXWINITIALIZED;\nDXWEXTERN SetWindowsHookEx_Type pSetWindowsHookExA DXWINITIALIZED;\nDXWEXTERN SetWindowsHookEx_Type pSetWindowsHookExW DXWINITIALIZED;\nDXWEXTERN MessageBoxTimeoutA_Type pMessageBoxTimeoutA DXWINITIALIZED;\nDXWEXTERN MessageBoxTimeoutW_Type pMessageBoxTimeoutW DXWINITIALIZED;\nDXWEXTERN IsIconic_Type pIsIconic DXWINITIALIZED;\nDXWEXTERN IsZoomed_Type pIsZoomed DXWINITIALIZED;\nDXWEXTERN CreateDesktop_Type pCreateDesktop DXWINITIALIZED;\nDXWEXTERN SwitchDesktop_Type pSwitchDesktop DXWINITIALIZED;\nDXWEXTERN OpenDesktop_Type pOpenDesktop DXWINITIALIZED;\nDXWEXTERN CloseDesktop_Type pCloseDesktop DXWINITIALIZED;\nDXWEXTERN ValidateRect_Type pValidateRect DXWINITIALIZED;\nDXWEXTERN ScrollWindow_Type pScrollWindow DXWINITIALIZED;\nDXWEXTERN DialogBoxParamA_Type pDialogBoxParamA DXWINITIALIZED;\nDXWEXTERN GetParent_Type pGetParent DXWINITIALIZED;\nDXWEXTERN InvalidateRgn_Type pInvalidateRgn DXWINITIALIZED;\nDXWEXTERN InvertRect_Type pInvertRect DXWINITIALIZED;\nDXWEXTERN ScrollDC_Type pScrollDC DXWINITIALIZED;\nDXWEXTERN DrawIcon_Type pDrawIcon DXWINITIALIZED;\nDXWEXTERN DrawIconEx_Type pDrawIconEx DXWINITIALIZED;\nDXWEXTERN DrawCaption_Type pDrawCaption DXWINITIALIZED;\nDXWEXTERN PaintDesktop_Type pPaintDesktop DXWINITIALIZED;\nDXWEXTERN mouse_event_Type pmouse_event DXWINITIALIZED;\nDXWEXTERN ShowScrollBar_Type pShowScrollBar DXWINITIALIZED;\nDXWEXTERN DrawMenuBar_Type pDrawMenuBar DXWINITIALIZED;\n//TranslateMessage_Type pTranslateMessage DXWINITIALIZED;\nDXWEXTERN EnumDisplayDevicesA_Type pEnumDisplayDevicesA DXWINITIALIZED;\nDXWEXTERN EnumDisplayDevicesW_Type pEnumDisplayDevicesW DXWINITIALIZED;\nDXWEXTERN DialogBoxIndirectParamA_Type pDialogBoxIndirectParamA DXWINITIALIZED;\nDXWEXTERN GetFocus_Type pGetFocus DXWINITIALIZED;\n//GetTopWindow_Type pGetTopWindow DXWINITIALIZED;\nDXWEXTERN GetWindowThreadProcessId_Type pGetWindowThreadProcessId DXWINITIALIZED;\nDXWEXTERN GetWindow_Type pGetWindow DXWINITIALIZED;\nDXWEXTERN IsWindow_Type pIsWindow DXWINITIALIZED;\nDXWEXTERN SetFocus_Type pSetFocus DXWINITIALIZED;\nDXWEXTERN LoadBitmapA_Type pLoadBitmapA DXWINITIALIZED;\nDXWEXTERN EnumWindows_Type pEnumWindows DXWINITIALIZED;\nDXWEXTERN GetMessage_Type pGetMessageA, pGetMessageW DXWINITIALIZED;\nDXWEXTERN PostMessage_Type pPostMessageA, pPostMessageW DXWINITIALIZED;\nDXWEXTERN AdjustWindowRect_Type pAdjustWindowRect DXWINITIALIZED;\nDXWEXTERN AdjustWindowRectEx_Type pAdjustWindowRectEx DXWINITIALIZED;\n\n// Winmm.dll:\nDXWEXTERN mciSendCommand_Type pmciSendCommandA DXWINITIALIZED;\nDXWEXTERN mciSendCommand_Type pmciSendCommandW DXWINITIALIZED;\nDXWEXTERN mciSendStringA_Type pmciSendStringA DXWINITIALIZED;\nDXWEXTERN mciSendStringW_Type pmciSendStringW DXWINITIALIZED;\nDXWEXTERN timeGetTime_Type ptimeGetTime DXWINITIALIZED;\nDXWEXTERN timeKillEvent_Type ptimeKillEvent DXWINITIALIZED;\nDXWEXTERN timeSetEvent_Type ptimeSetEvent DXWINITIALIZED;\n\n/* ===================================================================\nhook procedures (possibly more tnan one per each API...)\n====================================================================*/\n\n// advapi32.dll\n\nextern LONG\tWINAPI extRegCloseKey(HKEY);\nextern LONG\tWINAPI extRegCreateKey(HKEY, LPCTSTR, PHKEY);\nextern LONG\tWINAPI extRegCreateKeyEx(HKEY, LPCTSTR, DWORD, LPTSTR, DWORD, REGSAM, LPSECURITY_ATTRIBUTES, PHKEY, LPDWORD);\nextern LONG\tWINAPI extRegOpenKeyEx(HKEY, LPCTSTR, DWORD, REGSAM, PHKEY);\nextern LONG\tWINAPI extRegQueryValue(HKEY, LPCTSTR, LPTSTR, PLONG);\nextern LONG\tWINAPI extRegQueryValueEx(HKEY, LPCTSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD);\nextern LONG\tWINAPI extRegSetValueEx(HKEY, LPCTSTR, DWORD, DWORD, const BYTE *, DWORD);\n\n// ImmLib.dll\n\nextern BOOL WINAPI extImmNotifyIME(HIMC, DWORD, DWORD, DWORD);\nextern HIMC\tWINAPI extImmCreateContext(void);\nextern BOOL\tWINAPI extImmDestroyContext(HIMC);\nextern BOOL\tWINAPI extImmSetOpenStatus(HIMC, BOOL);\nextern HIMC WINAPI extImmAssociateContext(HWND, HIMC);\nextern BOOL WINAPI extImmSetCompositionWindow(HIMC, LPCOMPOSITIONFORM);\nextern BOOL WINAPI extImmSetCompositionString(HIMC, DWORD, LPVOID, DWORD, LPVOID, DWORD);\nextern BOOL WINAPI extImmGetOpenStatus(HIMC);\n\n// GDI32.dll:\nextern BOOL WINAPI extGDIBitBlt(HDC, int, int, int, int, HDC, int, int, DWORD);\nextern HDC WINAPI extGDICreateCompatibleDC(HDC);\nextern HDC WINAPI extGDICreateDCA(LPSTR, LPSTR, LPSTR, CONST DEVMODE *);\nextern HDC WINAPI extGDICreateDCW(LPWSTR, LPWSTR, LPWSTR, CONST DEVMODE *);\nextern HFONT WINAPI extCreateFont(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCTSTR);\nextern HFONT WINAPI extCreateFontIndirect(const LOGFONT*);\nextern HDC WINAPI extCreateICA(LPCTSTR, LPCTSTR, LPCTSTR, const DEVMODE *);\nextern HPALETTE WINAPI extGDICreatePalette(CONST LOGPALETTE *);\nextern HDWP WINAPI extDeferWindowPos(HDWP, HWND, HWND, int, int, int, int, UINT);\nextern BOOL WINAPI extExtTextOutW(HDC, int, int, UINT, const RECT *, LPCWSTR, UINT, const INT *);\nextern BOOL WINAPI extExtTextOutA(HDC, int, int, UINT, const RECT *, LPCSTR, UINT, const INT *);\nextern BOOL WINAPI extGDIDeleteDC(HDC);\nextern int WINAPI extGetClipBox(HDC, LPRECT);\nextern BOOL WINAPI extGetDCOrgEx(HDC, LPPOINT);\nextern int WINAPI extGetRgnBox(HRGN, LPRECT);\nextern DWORD WINAPI extGetRegionData(HRGN, DWORD, LPRGNDATA);\nextern int WINAPI extGetDeviceCaps(HDC, int);\nextern BOOL WINAPI extGetDeviceGammaRamp(HDC, LPVOID);\nextern UINT WINAPI extGetSystemPaletteEntries(HDC, UINT, UINT, LPPALETTEENTRY);\nextern UINT WINAPI extGetPaletteEntries(HPALETTE, UINT, UINT, LPPALETTEENTRY);\nextern UINT WINAPI extGetSystemPaletteUse(HDC);\nextern BOOL WINAPI extGDIPatBlt(HDC, int, int, int, int, DWORD);\nextern int WINAPI extIntersectClipRect(HDC, int, int, int, int);\nextern BOOL WINAPI extPolyline(HDC, const POINT *, int);\nextern UINT WINAPI extRealizePalette(HDC);\nextern BOOL WINAPI extRectangle(HDC, int, int, int, int);\nextern BOOL WINAPI extGDIRestoreDC(HDC, int);\nextern int WINAPI extGDISaveDC(HDC);\nextern BOOL WINAPI extScaleWindowExtEx(HDC, int, int, int, int, LPSIZE);\nextern HPALETTE WINAPI extSelectPalette(HDC, HPALETTE, BOOL);\nextern BOOL WINAPI extSetDeviceGammaRamp(HDC, LPVOID);\nextern BOOL WINAPI extGDIStretchBlt(HDC, int, int, int, int, HDC, int, int, int, int, DWORD);\nextern int WINAPI extStretchDIBits(HDC, int, int, int, int, int, int, int, int, const VOID *, const BITMAPINFO *, UINT, DWORD);\nextern BOOL WINAPI extTextOutA(HDC, int, int, LPCTSTR, int);\nextern BOOL WINAPI extTextOutW(HDC, int, int, LPCWSTR, int);\nextern BOOL WINAPI extPolyBezier(HDC, const POINT *, DWORD);\nextern BOOL WINAPI extPolyBezierTo(HDC, const POINT *, DWORD);\nextern BOOL WINAPI extPolylineTo(HDC, const POINT *, DWORD);\nextern BOOL WINAPI extPolyDraw(HDC, const POINT *, const BYTE *, int);\nextern BOOL WINAPI extMoveToEx(HDC, int, int, LPPOINT);\nextern BOOL WINAPI extArcTo(HDC, int, int, int, int, int, int, int, int);\nextern BOOL WINAPI extLineTo(HDC, int, int);\nextern int WINAPI extSetDIBitsToDevice(HDC, int, int, DWORD, DWORD, int, int, UINT, UINT, const VOID *, const BITMAPINFO *, UINT);\nextern HBITMAP WINAPI extCreateCompatibleBitmap(HDC, int, int);\nextern COLORREF WINAPI extSetPixel(HDC, int, int, COLORREF);\nextern BOOL WINAPI extEllipse(HDC, int, int, int, int);\nextern BOOL WINAPI extPolygon(HDC, const POINT *, int);\nextern BOOL WINAPI extArc(HDC, int, int, int, int, int, int, int, int);\nextern HRGN WINAPI extCreateEllipticRgn(int, int, int, int);\nextern HRGN WINAPI extCreateEllipticRgnIndirect(const RECT *);\nextern HRGN WINAPI extCreateRectRgn(int, int, int, int);\nextern HRGN WINAPI extCreateRectRgnIndirect(const RECT *);\nextern HRGN WINAPI extCreatePolygonRgn(const POINT *, int, int);\nextern BOOL WINAPI extMaskBlt(HDC, int, int, int, int, HDC, int, int, HBITMAP, int, int, DWORD);\nextern BOOL WINAPI extSetRectRgn(HRGN, int, int, int, int);\nextern BOOL WINAPI extSetViewportOrgEx(HDC, int, int, LPPOINT);\nextern BOOL WINAPI extSetViewportExtEx(HDC, int, int, LPSIZE);\nextern BOOL WINAPI extGetViewportOrgEx(HDC, LPPOINT);\nextern BOOL WINAPI extGetViewportExtEx(HDC, LPPOINT);\nextern BOOL WINAPI extGetWindowOrgEx(HDC, LPPOINT);\nextern BOOL WINAPI extSetWindowExtEx(HDC, int, int, LPPOINT);\nextern BOOL WINAPI extSetWindowOrgEx(HDC, int, int, LPPOINT);\nextern BOOL WINAPI extGetCurrentPositionEx(HDC, LPPOINT);\nextern BOOL WINAPI extCreateScalableFontResourceA(DWORD, LPCTSTR, LPCTSTR, LPCTSTR);\nextern int WINAPI extAddFontResourceA(LPCTSTR);\nextern int WINAPI extAddFontResourceW(LPCWSTR);\nextern int WINAPI extRemoveFontResourceA(LPCTSTR);\nextern int WINAPI extRemoveFontResourceW(LPCWSTR);\nextern BOOL WINAPI extCreateScalableFontResourceW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR);\nextern BOOL WINAPI extAnimatePalette(HPALETTE, UINT, UINT, const PALETTEENTRY *);\nextern UINT WINAPI extSetSystemPaletteUse(HDC, UINT);\nextern BOOL WINAPI extGDISetPixelFormat(HDC, int, const PIXELFORMATDESCRIPTOR *);\nextern int WINAPI extGDIGetPixelFormat(HDC);\nextern int WINAPI extChoosePixelFormat(HDC, const PIXELFORMATDESCRIPTOR *);\nextern int WINAPI extDescribePixelFormat(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR);\nextern DWORD WINAPI extGetObjectType(HGDIOBJ);\nextern int WINAPI extSetDIBits(HDC, HBITMAP, UINT, UINT, const VOID *, const BITMAPINFO *, UINT);\nextern int WINAPI extOffsetRgn(HRGN, int, int);\nextern COLORREF WINAPI extGetPixel(HDC, int, int);\nextern BOOL WINAPI extPlgBlt(HDC, const POINT *, HDC, int, int, int, int, HBITMAP, int, int);\nextern BOOL WINAPI extSetPixelV(HDC, int, int, COLORREF);\nextern BOOL WINAPI extChord(HDC, int, int, int, int, int, int, int, int);\nextern BOOL WINAPI extPolyTextOutA(HDC, const POLYTEXTA *, int);\nextern BOOL WINAPI extPolyTextOutW(HDC, const POLYTEXTW *, int);\nextern int WINAPI extGetDIBits(HDC, HBITMAP, UINT, UINT, LPVOID, LPBITMAPINFO, UINT);\nextern HBITMAP WINAPI extCreateDIBitmap(HDC, BITMAPINFOHEADER *, DWORD, const VOID *, const BITMAPINFO *, UINT);\nextern HBITMAP WINAPI extCreateDIBSection(HDC, const BITMAPINFO *, UINT, VOID **, HANDLE, DWORD);\nextern BOOL WINAPI extExtFloodFill(HDC, int, int, COLORREF, UINT);\nextern HBITMAP WINAPI extCreateDiscardableBitmap(HDC, int, int);\nextern BOOL WINAPI extGdiAlphaBlend(HDC, int, int, int, int, HDC, int, int, int, int, BLENDFUNCTION);\nextern BOOL WINAPI extGdiGradientFill(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG);\nextern BOOL WINAPI extGdiTransparentBlt(HDC, int, int, int, int, HDC, int, int, int, int, UINT);\nextern BOOL WINAPI extPie(HDC, int, int, int, int, int, int, int, int);\nextern BOOL WINAPI extAngleArc(HDC, int, int, DWORD, FLOAT, FLOAT);\nextern BOOL WINAPI extPolyPolyline(HDC, const POINT *, const DWORD *, DWORD);\nextern BOOL WINAPI extFillRgn(HDC, HRGN, HBRUSH);\nextern BOOL WINAPI extFrameRgn(HDC, HRGN, HBRUSH, int, int);\nextern BOOL WINAPI extInvertRgn(HDC, HRGN);\nextern BOOL WINAPI extPaintRgn(HDC, HRGN);\nextern int WINAPI extSetMapMode(HDC, int);\nextern BOOL WINAPI extRoundRect(HDC, int, int, int, int, int, int);\nextern BOOL WINAPI extPolyPolygon(HDC, const POINT *, const INT *, int);\n//extern BOOL WINAPI extDPtoLP(HDC, LPPOINT, int);\nextern BOOL WINAPI extPlayEnhMetaFile(HDC, HENHMETAFILE, const RECT *);\nextern UINT WINAPI extSetPaletteEntries(HPALETTE, UINT, UINT, const PALETTEENTRY *);\nextern int WINAPI extSetROP2(HDC, int);\nextern int WINAPI extEnumFontsA(HDC, LPCSTR, FONTENUMPROC, LPARAM);\nextern BOOL WINAPI extGetTextExtentPointA(HDC, LPCTSTR, int, LPSIZE);\nextern BOOL WINAPI extGetTextExtentPoint32A(HDC, LPCTSTR, int, LPSIZE);\nextern HGDIOBJ WINAPI extSelectObject(HDC, HGDIOBJ);\nextern BOOL WINAPI extDeleteObject(HGDIOBJ);\nextern int WINAPI extSelectClipRgn(HDC, HRGN);\n\n// Kernel32.dll:\nextern BOOL WINAPI extGetDiskFreeSpaceA(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD);\nextern UINT WINAPI extGetDriveType(LPCSTR);\nextern DWORD WINAPI extGetLogicalDrives(void);\nextern void WINAPI extGetLocalTime(LPSYSTEMTIME);\nextern FARPROC WINAPI extGetProcAddress(HMODULE, LPCSTR);\nextern void WINAPI extGetSystemTime(LPSYSTEMTIME);\nextern void WINAPI extGetSystemTimeAsFileTime(LPFILETIME);\nextern UINT WINAPI extGetTempFileName(LPCTSTR, LPCTSTR, UINT, LPTSTR);\nextern DWORD WINAPI extGetTickCount(void);\nextern DWORD WINAPI extGetVersion(void);\nextern BOOL WINAPI extGetVersionExA(LPOSVERSIONINFOA);\nextern BOOL WINAPI extGetVersionExW(LPOSVERSIONINFOW);\nextern void WINAPI extGlobalMemoryStatus(LPMEMORYSTATUS);\nextern int WINAPI extIsDebuggerPresent(void);\nextern BOOL WINAPI extCheckRemoteDebuggerPresent(HANDLE, PBOOL);\nextern HMODULE WINAPI extLoadLibraryA(LPCTSTR);\nextern HMODULE WINAPI extLoadLibraryExA(LPCTSTR, HANDLE, DWORD);\nextern HMODULE WINAPI extLoadLibraryW(LPCWSTR);\nextern HMODULE WINAPI extLoadLibraryExW(LPCWSTR, HANDLE, DWORD);\nextern BOOL WINAPI extReadFile(HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED);\nextern LPTOP_LEVEL_EXCEPTION_FILTER WINAPI extSetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER);\nextern void WINAPI extSleep(DWORD);\nextern DWORD WINAPI extSleepEx(DWORD, BOOL);\nextern HANDLE WINAPI extCreateFile(LPCTSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE);\nextern DWORD WINAPI extSetFilePointer(HANDLE, LONG, PLONG, DWORD);\nextern BOOL WINAPI extCloseHandle(HANDLE);\nextern BOOL WINAPI extCreateProcessA(LPCTSTR, LPTSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPCTSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION);\nextern BOOL WINAPI extGetExitCodeProcess(HANDLE, LPDWORD);\nextern BOOL WINAPI extQueryPerformanceFrequency(LARGE_INTEGER *);\nextern BOOL WINAPI extQueryPerformanceCounter(LARGE_INTEGER *);\nextern BOOL WINAPI extFreeLibrary(HMODULE);\n\n// ole32.dll:\nextern HRESULT STDAPICALLTYPE extCoCreateInstance(REFCLSID, LPUNKNOWN, DWORD, REFIID, LPVOID FAR*);\nextern HRESULT STDAPICALLTYPE extCoCreateInstanceEx(REFCLSID, IUnknown *, DWORD, COSERVERINFO *, DWORD, MULTI_QI *);\nextern HRESULT STDAPICALLTYPE extCoInitialize(LPVOID);\nextern void STDAPICALLTYPE extCoUninitialize(void);\n\n// user32.dll:\nextern HDC WINAPI extBeginPaint(HWND, LPPAINTSTRUCT);\nextern LRESULT WINAPI extCallWindowProcA(WNDPROC, HWND, UINT, WPARAM, LPARAM);\nextern LRESULT WINAPI extCallWindowProcW(WNDPROC, HWND, UINT, WPARAM, LPARAM);\nextern LONG WINAPI extChangeDisplaySettingsA(DEVMODEA *, DWORD);\nextern LONG WINAPI extChangeDisplaySettingsExA(LPCTSTR, DEVMODEA *, HWND, DWORD, LPVOID);\nextern LONG WINAPI extChangeDisplaySettingsW(DEVMODEW *, DWORD);\nextern LONG WINAPI extChangeDisplaySettingsExW(LPCTSTR, DEVMODEW *, HWND, DWORD, LPVOID);\nextern BOOL WINAPI extClientToScreen(HWND, LPPOINT);\nextern BOOL WINAPI extClipCursor(LPRECT);\nextern HWND WINAPI extCreateDialogIndirectParam(HINSTANCE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM);\nextern HWND WINAPI extCreateDialogParam(HINSTANCE, LPCSTR, HWND, DLGPROC, LPARAM);\nextern HWND WINAPI extCreateWindowExA(DWORD, LPCTSTR, LPCTSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID);\nextern HWND WINAPI extCreateWindowExW(DWORD, LPCWSTR, LPCWSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID);\nextern LRESULT WINAPI extDefWindowProcA(HWND, UINT, WPARAM, LPARAM);\nextern LRESULT WINAPI extDefWindowProcW(HWND, UINT, WPARAM, LPARAM);\nextern int WINAPI extDrawTextA(HDC, LPCTSTR, int, LPRECT, UINT);\nextern int WINAPI extDrawTextExA(HDC, LPTSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS);\nextern int WINAPI extDrawTextW(HDC, LPCWSTR, int, LPRECT, UINT);\nextern int WINAPI extDrawTextExW(HDC, LPCWSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS);\nextern BOOL WINAPI extEndPaint(HWND, const PAINTSTRUCT *);\nextern LONG WINAPI extEnumDisplaySettings(LPCTSTR, DWORD, DEVMODE *);\nextern int WINAPI extFillRect(HDC, const RECT *, HBRUSH);\nextern int WINAPI extFrameRect(HDC, const RECT *, HBRUSH);\nextern BOOL WINAPI extGetClientRect(HWND, LPRECT);\nextern BOOL WINAPI extGetClipCursor(LPRECT);\nextern BOOL WINAPI extGetCursorPos(LPPOINT);\nextern HDC WINAPI extGDIGetDC(HWND);\nextern HWND WINAPI extGetDesktopWindow(void);\nextern BOOL\tWINAPI extGetMonitorInfoA(HMONITOR, LPMONITORINFO);\nextern BOOL\tWINAPI extGetMonitorInfoW(HMONITOR, LPMONITORINFO);\nextern int WINAPI extGetSystemMetrics(int);\nextern HWND WINAPI extGetTopWindow(HWND);\nextern int WINAPI extGetUpdateRgn(HWND, HRGN, BOOL);\nextern HDC WINAPI extGDIGetWindowDC(HWND);\nextern LONG WINAPI extGetWindowLongA(HWND, int);\nextern LONG WINAPI extGetWindowLongW(HWND, int);\nextern BOOL WINAPI extGetWindowRect(HWND, LPRECT);\nextern BOOL WINAPI extInvalidateRect(HWND, RECT *, BOOL);\nextern int WINAPI extMapWindowPoints(HWND, HWND, LPPOINT, UINT);\nextern BOOL WINAPI extMoveWindow(HWND, int, int, int, int, BOOL);\nextern BOOL WINAPI extPeekMessageA(LPMSG, HWND, UINT, UINT, UINT);\nextern BOOL WINAPI extPeekMessageW(LPMSG, HWND, UINT, UINT, UINT);\nextern BOOL\tWINAPI extRedrawWindow(HWND, const RECT *, HRGN, UINT);\nextern ATOM WINAPI extRegisterClassExA(WNDCLASSEXA *);\nextern ATOM WINAPI extRegisterClassA(WNDCLASSA *);\nextern ATOM WINAPI extRegisterClassExW(WNDCLASSEXW *);\nextern ATOM WINAPI extRegisterClassW(WNDCLASSW *);\nextern int WINAPI extGDIReleaseDC(HWND, HDC);\nextern BOOL WINAPI extScreenToClient(HWND, LPPOINT);\nextern LRESULT WINAPI extSendMessageA(HWND, UINT, WPARAM, LPARAM);\nextern LRESULT WINAPI extSendMessageW(HWND, UINT, WPARAM, LPARAM);\nextern HCURSOR WINAPI extSetCursor(HCURSOR);\nextern BOOL WINAPI extSetCursorPos(int, int);\nextern UINT_PTR WINAPI extSetTimer(HWND, UINT_PTR, UINT, TIMERPROC);\nextern LONG WINAPI extSetWindowLongA(HWND, int, LONG);\nextern LONG WINAPI extSetWindowLongW(HWND, int, LONG);\nextern BOOL WINAPI extSetWindowPos(HWND, HWND, int, int, int, int, UINT);\nextern int WINAPI extShowCursor(BOOL);\nextern BOOL WINAPI extShowWindow(HWND, int);\nextern LONG WINAPI extTabbedTextOutA(HDC, int, int, LPCTSTR, int, int, const LPINT, int);\nextern LONG WINAPI extTabbedTextOutW(HDC, int, int, LPCWSTR, int, int, const LPINT, int);\nextern BOOL WINAPI extDestroyWindow(HWND);\nextern BOOL WINAPI extCloseWindow(HWND);\nextern BOOL WINAPI extSetSysColors(int, const INT *, const COLORREF *);\nextern HDC WINAPI extGDIGetDCEx(HWND, HRGN, DWORD);\nextern BOOL WINAPI extUpdateWindow(HWND);\nextern BOOL WINAPI extGetWindowPlacement(HWND, WINDOWPLACEMENT *);\nextern BOOL WINAPI extSetWindowPlacement(HWND, WINDOWPLACEMENT *);\nextern HWND WINAPI extSetCapture(HWND);\nextern HWND WINAPI extGetForegroundWindow(void);\nextern HWND WINAPI extGetActiveWindow(void);\nextern BOOL WINAPI extIsWindowVisible(HWND);\nextern BOOL WINAPI extSystemParametersInfoA(UINT, UINT, PVOID, UINT);\nextern BOOL WINAPI extSystemParametersInfoW(UINT, UINT, PVOID, UINT);\nextern BOOL WINAPI extKillTimer(HWND, UINT_PTR);\nextern BOOL WINAPI extGetUpdateRect(HWND, LPRECT, BOOL);\nextern BOOL WINAPI extGetCursorInfo(PCURSORINFO);\nextern HWND WINAPI extWindowFromPoint(POINT);\nextern HWND WINAPI extChildWindowFromPoint(HWND, POINT);\nextern HWND WINAPI extChildWindowFromPointEx(HWND, POINT, UINT);\n//extern int WINAPI extGetWindowTextA(HWND, LPTSTR, int);\nextern BOOL WINAPI extBringWindowToTop(HWND);\nextern BOOL WINAPI extSetForegroundWindow(HWND);\nextern HHOOK WINAPI extSetWindowsHookExA(int, HOOKPROC, HINSTANCE, DWORD);\nextern HHOOK WINAPI extSetWindowsHookExW(int, HOOKPROC, HINSTANCE, DWORD);\nextern HRESULT WINAPI extMessageBoxTimeoutA(HWND, LPCSTR, LPCSTR, UINT, WORD, DWORD);\nextern HRESULT WINAPI extMessageBoxTimeoutW(HWND, LPCWSTR, LPCWSTR, UINT, WORD, DWORD);\nextern BOOL WINAPI extIsIconic(HWND);\nextern BOOL WINAPI extIsZoomed(HWND);\nextern HDESK WINAPI extCreateDesktop(LPCTSTR, LPCTSTR, DEVMODE *, DWORD, ACCESS_MASK, LPSECURITY_ATTRIBUTES);\nextern BOOL WINAPI extSwitchDesktop(HDESK);\nextern HDESK WINAPI extOpenDesktop(LPTSTR, DWORD, BOOL, ACCESS_MASK);\nextern BOOL WINAPI extCloseDesktop(HDESK);\nextern int WINAPI extValidateRect(HWND, const RECT *);\nextern BOOL extScrollWindow(HWND, int, int, const RECT *, const RECT *);\nextern INT_PTR WINAPI extDialogBoxParamA(HINSTANCE, LPCTSTR, HWND, DLGPROC, LPARAM);\nextern HWND WINAPI extGetParent(HWND);\nextern BOOL WINAPI extInvalidateRgn(HWND, HRGN, BOOL);\nextern BOOL WINAPI extInvertRect(HDC, const RECT *);\nextern BOOL WINAPI extScrollDC(HDC, int, int, const RECT *, const RECT *, HRGN, LPRECT);\nextern BOOL WINAPI extDrawIcon(HDC hDC, int X, int Y, HICON hIcon); \nextern BOOL WINAPI extDrawIconEx(HDC, int, int, HICON, int, int, UINT, HBRUSH, UINT);\nextern BOOL WINAPI extDrawCaption(HWND, HDC, LPCRECT, UINT);\nextern BOOL WINAPI extPaintDesktop(HDC);\nextern VOID WINAPI extmouse_event(DWORD, DWORD, DWORD, DWORD, ULONG_PTR);\nextern BOOL WINAPI extShowScrollBar(HWND, int, BOOL);\nextern BOOL WINAPI extDrawMenuBar(HWND);\n//extern BOOL WINAPI extTranslateMessage(MSG *);\nextern BOOL WINAPI extEnumDisplayDevicesA(LPCSTR, DWORD, PDISPLAY_DEVICE, DWORD);\nextern BOOL WINAPI extEnumDisplayDevicesW(LPCWSTR, DWORD, PDISPLAY_DEVICEW, DWORD);\nextern INT_PTR WINAPI extDialogBoxIndirectParamA(HINSTANCE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM);\nextern HWND WINAPI extGetFocus(void);\n//extern HWND WINAPI extGetTopWindow(HWND);\nextern DWORD WINAPI extGetWindowThreadProcessId(HWND, LPDWORD);\nextern HWND WINAPI extGetWindow(HWND, UINT);\nextern BOOL WINAPI extIsWindow(HWND);\nextern HWND WINAPI extSetFocus(HWND);\nextern HBITMAP WINAPI extLoadBitmapA(HINSTANCE, LPCSTR);\nextern BOOL WINAPI extEnumWindows(WNDENUMPROC, LPARAM);\nextern BOOL\tWINAPI extGetMessageA(LPMSG, HWND, UINT, UINT);\nextern BOOL\tWINAPI extGetMessageW(LPMSG, HWND, UINT, UINT);\nextern BOOL\tWINAPI extPostMessageA(HWND, UINT, WPARAM, LPARAM);\nextern BOOL\tWINAPI extPostMessageW(HWND, UINT, WPARAM, LPARAM);\nextern BOOL WINAPI extAdjustWindowRect(LPRECT, DWORD, BOOL);\nextern BOOL WINAPI extAdjustWindowRectEx(LPRECT, DWORD, BOOL, DWORD);\n\n// Winmm.dll:\nextern MCIERROR WINAPI extmciSendCommandA(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR);\nextern MCIERROR WINAPI extmciSendCommandW(MCIDEVICEID, UINT, DWORD_PTR, DWORD_PTR);\nextern MCIERROR WINAPI extmciSendStringW(LPCWSTR, LPWSTR, UINT, HANDLE);\nextern MCIERROR WINAPI extmciSendStringA(LPCTSTR, LPTSTR, UINT, HANDLE);\nextern DWORD WINAPI exttimeGetTime(void);\nextern MMRESULT WINAPI exttimeSetEvent(UINT, UINT, LPTIMECALLBACK, DWORD_PTR, UINT);\nextern MMRESULT WINAPI exttimeKillEvent(UINT);\n\n// extern function declaration\n\nextern void\tHookKernel32Init();\nextern void\tHookUser32Init();\nextern void\tHookGDI32Init();\nextern void\tHookWinG32Init();\nextern void HookImagehlpInit();\n\n/* eof */\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "dll/toggle_fs.cpp",
    "content": "#define _WIN32_WINNT 0x0600\n#define WIN32_LEAN_AND_MEAN\n#define _CRT_SECURE_NO_DEPRECATE 1\n\n#include <windows.h>\n#include <stdio.h>\n#include <stdarg.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"dxhelper.h\"\n\nextern void RecoverScreenMode();\nextern void RestoreDDrawSurfaces();\nextern void RestoreD3DSurfaces(BOOL);\n\nvoid dx_FullScreenToggle(HWND hwnd)\n{\n\tstatic BOOL bFullScreen = FALSE;\n\tstatic RECT WinRect = {0, 0, 0, 0};\n\tstatic DWORD OldStyle, OldExtStyle;\n\tstatic DEVMODE oldDisplayMode;\n\tstatic DWORD OrigFlags;\n\tstatic char szDevice[32];\n\n\t// toggle ....\n\tif (bFullScreen){\n\t\tOutTraceDW(\"DxWnd: exiting fullscreen mode: style=%x extstyle=%x pos=(%d,%d)-(%d,%d)\\n\",\n\t\t\tOldStyle, OldExtStyle, WinRect.left, WinRect.top, WinRect.right, WinRect.bottom);\n\t\tint ChangeDisplayResult = (*pChangeDisplaySettingsExA)(szDevice, &oldDisplayMode, NULL, CDS_FULLSCREEN, NULL);\n\t\tif(ChangeDisplayResult != DISP_CHANGE_SUCCESSFUL){\n\t\t\tOutTraceE(\"ChangeDisplaySettingsEx ERROR: res=%d at %d\\n\", ChangeDisplayResult, __LINE__);\n\t\t\tMessageBox(NULL,\"Error: Failed to recover display mode.\", \"Error\", 0);\n\t\t}\n\t\t// MoveWindow doesn't recover the exact position!!!\n\t\t(*pSetWindowLong)(hwnd, GWL_STYLE, OldStyle);\n\t\t(*pSetWindowLong)(hwnd, GWL_EXSTYLE, OldExtStyle);\n\t\t(*pSetWindowPos)(hwnd, HWND_TOP, \n\t\t\tWinRect.left, WinRect.top, (WinRect.right-WinRect.left), (WinRect.bottom-WinRect.top), \n\t\t\tSWP_DRAWFRAME|SWP_FRAMECHANGED|SWP_SHOWWINDOW);\n\t\tmemset(&WinRect, 0, sizeof(WinRect));\n\t}\n\telse {\n\t\tOutTraceDW(\"DxWnd: entering fullscreen mode\\n\");\n\t\tint BestIndex, iCost, iBestCost;\n\t\t(*pGetWindowRect)(hwnd, &WinRect);\n\t\tOldStyle = (*pGetWindowLongA)(hwnd, GWL_STYLE);\n\t\tOldExtStyle = (*pGetWindowLongA)(hwnd, GWL_EXSTYLE);\n\t\t(*pSetWindowLong)(hwnd, GWL_STYLE, WS_VISIBLE|WS_CLIPSIBLINGS|WS_OVERLAPPED);\n\t\t(*pSetWindowLong)(hwnd, GWL_EXSTYLE, 0);\n\n\t\tDEVMODE DisplayMode;\n\t\tHMONITOR hBestMonitor;\n\t\thBestMonitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);\n\t\tMONITORINFOEX mi;\n\t\tmemset(&mi, 0, sizeof(mi));\n\t\tmi.cbSize=sizeof(mi);\n\t\tGetMonitorInfo(hBestMonitor, &mi);\n\t\tOutTraceDW(\"Using monitor=\\\"%s\\\", rect=(%d,%d)-(%d,%d) type=%s\\n\",\n\t\t\tmi.szDevice, \n\t\t\tmi.rcMonitor.left, mi.rcMonitor.top, mi.rcMonitor.right, mi.rcMonitor.bottom,\n\t\t\t(mi.dwFlags & MONITORINFOF_PRIMARY) ? \"PRIMARY\" : \"SECONDARY\");\n\t\tmemset(&oldDisplayMode, 0, sizeof(DEVMODE));\n\t\tif(!(*pEnumDisplaySettings)(mi.szDevice, ENUM_CURRENT_SETTINGS, &oldDisplayMode)){\n\t\t\tMessageBox(NULL, \"EnumDisplaySettings Failed ???\", \"Error!\", 0);\n\t\t}\n\t\tiBestCost=1000000; // huge\n\t\tfor (int i=0; ;i++){\n\t\t\tiCost=0;\n\t\t\tmemset(&DisplayMode, 0, sizeof(DEVMODE));\n\t\t\tDisplayMode.dmSize = sizeof(DEVMODE);\n\t\t\tif(!(*pEnumDisplaySettings)(mi.szDevice, i, &DisplayMode))break; // no more modes\n\t\t\tif(DisplayMode.dmPelsWidth < dxw.GetScreenWidth()) continue; // bad: too narrow\n\t\t\tif(DisplayMode.dmPelsHeight < dxw.GetScreenHeight()) continue; // bad: too low\n\t\t\tif (DisplayMode.dmBitsPerPel != oldDisplayMode.dmBitsPerPel) continue; // bad: different color depth\n\t\t\tiCost = \n\t\t\t\t(DisplayMode.dmPelsWidth - dxw.GetScreenWidth()) +\n\t\t\t\t(DisplayMode.dmPelsHeight - dxw.GetScreenHeight()) +\n\t\t\t\t(DisplayMode.dmDisplayFrequency == oldDisplayMode.dmDisplayFrequency) ? 1 : 0;\n\t\t\tif(iCost < iBestCost){\n\t\t\t\tiBestCost = iCost;\n\t\t\t\tBestIndex = i;\n\t\t\t}\n\t\t\tif(iBestCost == 0) break; // got the perfect one!\n\t\t}\n\t\tmemset(&DisplayMode, 0, sizeof(DEVMODE));\n\t\tstrncpy(szDevice, mi.szDevice, 32);\n\t\t(*pEnumDisplaySettings)(mi.szDevice, BestIndex, &DisplayMode);\n\t\tOutTraceDW(\"DxWnd: selected mode bpp=%d size=(%dx%d) freq=%d\\n\",\n\t\t\tDisplayMode.dmBitsPerPel, DisplayMode.dmPelsWidth, DisplayMode.dmPelsHeight, DisplayMode.dmDisplayFrequency);\n\t\tDisplayMode.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFLAGS|DM_DISPLAYFREQUENCY|DM_POSITION;\n\t\tint ChangeDisplayResult = (*pChangeDisplaySettingsExA)(mi.szDevice, &DisplayMode, NULL, CDS_FULLSCREEN, NULL);\n\t\tif(ChangeDisplayResult != DISP_CHANGE_SUCCESSFUL){\n\t\t\tOutTraceE(\"ChangeDisplaySettingsEx ERROR: res=%d at %d\\n\", ChangeDisplayResult, __LINE__);\n\t\t\tMessageBox(NULL,\"Error: Failed to change display mode.\", \"Error\", 0);\n\t\t} \n\t\t// query again the NEW screen coordinates ....\n\t\tmemset(&mi, 0, sizeof(mi));\n\t\tmi.cbSize=sizeof(mi);\n\t\tGetMonitorInfo(hBestMonitor, &mi);\n\t\tOutTraceDW(\"Updated monitor=\\\"%s\\\", rect=(%d,%d)-(%d,%d) type=%s\\n\",\n\t\t\tmi.szDevice, \n\t\t\tmi.rcMonitor.left, mi.rcMonitor.top, mi.rcMonitor.right, mi.rcMonitor.bottom,\n\t\t\t(mi.dwFlags & MONITORINFOF_PRIMARY) ? \"PRIMARY\" : \"SECONDARY\");\n\t\t(*pMoveWindow)(hwnd, \n\t\t\tmi.rcMonitor.left, mi.rcMonitor.top,\t// x, y\n\t\t\tDisplayMode.dmPelsWidth,\t\t\t\t// width\n\t\t\tDisplayMode.dmPelsHeight,\t\t\t\t// height\n\t\t\tTRUE);\n\t}\n\t(*pUpdateWindow)(hwnd);\n\tRestoreDDrawSurfaces();\n\t//RestoreD3DSurfaces(bFullScreen);\n\tbFullScreen = !bFullScreen; // switch toggle\n}\n\nvoid dx_DesktopToggle(HWND hwnd, BOOL bWorkArea)\n{\n\tstatic BOOL bDesktopToggle = FALSE;\n\tstatic RECT WinRect = {0, 0, 0, 0};\n\tstatic DWORD OldStyle, OldExtStyle;\n\n\tif (bDesktopToggle){ \t// toggle ....\n\t\tOutTraceDW(\"DxWnd: exiting desktop mode: style=%x extstyle=%x pos=(%d,%d)-(%d,%d)\\n\",\n\t\t\tOldStyle, OldExtStyle, WinRect.left, WinRect.top, WinRect.right, WinRect.bottom);\n\t\t(*pSetWindowLong)(hwnd, GWL_STYLE, OldStyle);\n\t\t(*pSetWindowLong)(hwnd, GWL_EXSTYLE, OldExtStyle);\n\t\t// MoveWindow doesn't recover the exact position!!!\n\t\t(*pSetWindowPos)(hwnd, HWND_TOP, \n\t\t\tWinRect.left, WinRect.top, (WinRect.right-WinRect.left), (WinRect.bottom-WinRect.top), \n\t\t\tSWP_DRAWFRAME|SWP_FRAMECHANGED|SWP_SHOWWINDOW);\n\t\tmemset(&WinRect, 0, sizeof(WinRect));\n\t}\n\telse {\n\t\tRECT DesktopRect;\n\t\tHWND DesktopWnd;\n\t\tHDC hClientDC;\n\t\tOutTraceDW(\"DxWnd: entering desktop mode\\n\");\n\t\tif((WinRect.left==0) && (WinRect.right==0) && (WinRect.top==0) && (WinRect.bottom==0)) (*pGetWindowRect)(hwnd, &WinRect);\n\t\tOldStyle = (*pGetWindowLongA)(hwnd, GWL_STYLE);\n\t\tOldExtStyle = (*pGetWindowLongA)(hwnd, GWL_EXSTYLE);\n\t\t(*pSetWindowLong)(hwnd, GWL_STYLE, WS_VISIBLE|WS_CLIPSIBLINGS|WS_OVERLAPPED);\n\t\t(*pSetWindowLong)(hwnd, GWL_EXSTYLE, 0);\n\t\t(*pUpdateWindow)(hwnd);\n\t\tDesktopWnd = (*pGetDesktopWindow)();\n\t\thClientDC=(*pGDIGetDC)(hwnd);\n\n\t\tHMONITOR hBestMonitor;\n\t\thBestMonitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);\n\t\tMONITORINFOEX mi;\n\t\tmemset(&mi, 0, sizeof(mi));\n\t\tmi.cbSize=sizeof(mi);\n\t\tGetMonitorInfo(hBestMonitor, &mi);\n\t\tOutTraceDW(\"Using monitor=\\\"%s\\\", rect=(%d,%d)-(%d,%d) type=%s\\n\",\n\t\t\tmi.szDevice, \n\t\t\tmi.rcMonitor.left, mi.rcMonitor.top, mi.rcMonitor.right, mi.rcMonitor.bottom,\n\t\t\t(mi.dwFlags & MONITORINFOF_PRIMARY) ? \"PRIMARY\" : \"SECONDARY\");\n\n\t\tDesktopRect = bWorkArea ? mi.rcWork : mi.rcMonitor;\n\t\tOutTraceDW(\"DxWnd: desktop=(%d,%d)-(%d,%d)\\n\");\n\t\t(*pSetWindowPos)(hwnd, HWND_TOP, \n\t\t\tDesktopRect.left, DesktopRect.top, (DesktopRect.right-DesktopRect.left), (DesktopRect.bottom-DesktopRect.top), \n\t\t\tSWP_DRAWFRAME|SWP_FRAMECHANGED|SWP_SHOWWINDOW);\n\t\t(*pGDIBitBlt)(hClientDC, DesktopRect.left, DesktopRect.top,  DesktopRect.right, DesktopRect.bottom, NULL, 0, 0, BLACKNESS);\n\t}\n\tbDesktopToggle = !bDesktopToggle; // switch toggle\n\t(*pUpdateWindow)(hwnd);\n\tdxw.ScreenRefresh();\n\t(*pInvalidateRect)(hwnd, NULL, FALSE); // force window update\n}\n"
  },
  {
    "path": "dll/user32.cpp",
    "content": "#define _WIN32_WINNT 0x0600\n#define WIN32_LEAN_AND_MEAN\n#define _CRT_SECURE_NO_WARNINGS\n#define _CRT_NON_CONFORMING_SWPRINTFS\n\n#include <stdio.h>\n#include <stdlib.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhook.h\"\n#include \"hddraw.h\"\n#include \"dxhelper.h\"\n#include \"shareddc.hpp\"\n#include <Wingdi.h>\n#include <Winuser.h>\n\n#define FIXCHILDSIZE FALSE\n//#define TRANSLATEMESSAGEHOOK\n\n#ifdef TRANSLATEMESSAGEHOOK\ntypedef BOOL (WINAPI *TranslateMessage_Type)(MSG *);\nBOOL WINAPI extTranslateMessage(MSG *);\nTranslateMessage_Type pTranslateMessage;\n#endif\n\n#define _Warn(s) MessageBox(0, s, \"to do\", MB_ICONEXCLAMATION)\n\nBOOL IsChangeDisplaySettingsHotPatched = FALSE;\nBOOL InMainWinCreation = FALSE;\n\nextern BOOL bFlippedDC;\nextern HDC hFlippedDC;\n\n//typedef BOOL (WINAPI *EnumDisplayMonitors_Type)(HDC, LPCRECT, MONITORENUMPROC, LPARAM);\n//EnumDisplayMonitors_Type pEnumDisplayMonitors = NULL;\n//BOOL WINAPI extEnumDisplayMonitors(HDC, LPCRECT, MONITORENUMPROC, LPARAM);\n\ntypedef BOOL (WINAPI *ValidateRgn_Type)(HWND, HRGN);\nValidateRgn_Type pValidateRgn;\nBOOL WINAPI extValidateRgn(HWND, HRGN);\n\n#ifdef TRACEPALETTE\ntypedef UINT (WINAPI *GetDIBColorTable_Type)(HDC, UINT, UINT, RGBQUAD *);\nGetDIBColorTable_Type pGetDIBColorTable = NULL;\nUINT WINAPI extGetDIBColorTable(HDC, UINT, UINT, RGBQUAD *);\ntypedef UINT (WINAPI *SetDIBColorTable_Type)(HDC, UINT, UINT, const RGBQUAD *);\nSetDIBColorTable_Type pSetDIBColorTable = NULL;\nUINT WINAPI extSetDIBColorTable(HDC, UINT, UINT, const RGBQUAD *);\n#endif\n\nstatic HookEntryEx_Type Hooks[]={\n#ifdef TRANSLATEMESSAGEHOOK\t\n\t{HOOK_IAT_CANDIDATE, 0, \"TranslateMessage\", (FARPROC)TranslateMessage, (FARPROC *)&pTranslateMessage, (FARPROC)extTranslateMessage}, \n#endif\n\t{HOOK_IAT_CANDIDATE, 0, \"UpdateWindow\", (FARPROC)UpdateWindow, (FARPROC *)&pUpdateWindow, (FARPROC)extUpdateWindow}, // v2.04.04: needed for \"Hide Desktop\" option\n\t//{HOOK_IAT_CANDIDATE, 0, \"GetWindowPlacement\", (FARPROC)NULL, (FARPROC *)&pGetWindowPlacement, (FARPROC)extGetWindowPlacement},\n\t//{HOOK_IAT_CANDIDATE, 0, \"SetWindowPlacement\", (FARPROC)NULL, (FARPROC *)&pSetWindowPlacement, (FARPROC)extSetWindowPlacement},\n\t{HOOK_HOT_CANDIDATE, 0x25, \"ChangeDisplaySettingsA\", (FARPROC)ChangeDisplaySettingsA, (FARPROC *)&pChangeDisplaySettingsA, (FARPROC)extChangeDisplaySettingsA},\n\t{HOOK_HOT_CANDIDATE, 0x26, \"ChangeDisplaySettingsExA\", (FARPROC)ChangeDisplaySettingsExA, (FARPROC *)&pChangeDisplaySettingsExA, (FARPROC)extChangeDisplaySettingsExA},\n\t{HOOK_HOT_CANDIDATE, 0x28, \"ChangeDisplaySettingsW\", (FARPROC)NULL, (FARPROC *)&pChangeDisplaySettingsW, (FARPROC)extChangeDisplaySettingsW}, // ref. by Knights of Honor\n\t{HOOK_HOT_CANDIDATE, 0x27, \"ChangeDisplaySettingsExW\", (FARPROC)NULL, (FARPROC *)&pChangeDisplaySettingsExW, (FARPROC)extChangeDisplaySettingsExW},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetMonitorInfoA\", (FARPROC)GetMonitorInfoA, (FARPROC *)&pGetMonitorInfoA, (FARPROC)extGetMonitorInfoA},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetMonitorInfoW\", (FARPROC)GetMonitorInfoW, (FARPROC *)&pGetMonitorInfoW, (FARPROC)extGetMonitorInfoW},\n\t{HOOK_HOT_CANDIDATE, 0, \"ShowCursor\", (FARPROC)ShowCursor, (FARPROC *)&pShowCursor, (FARPROC)extShowCursor},\n\t{HOOK_IAT_CANDIDATE, 0, \"CreateDialogIndirectParamA\", (FARPROC)CreateDialogIndirectParamA, (FARPROC *)&pCreateDialogIndirectParam, (FARPROC)extCreateDialogIndirectParam},\n\t{HOOK_IAT_CANDIDATE, 0, \"CreateDialogParamA\", (FARPROC)CreateDialogParamA, (FARPROC *)&pCreateDialogParam, (FARPROC)extCreateDialogParam},\n\t{HOOK_IAT_CANDIDATE, 0, \"MoveWindow\", (FARPROC)MoveWindow, (FARPROC *)&pMoveWindow, (FARPROC)extMoveWindow},\n\t{HOOK_HOT_CANDIDATE, 0, \"EnumDisplaySettingsA\", (FARPROC)EnumDisplaySettingsA, (FARPROC *)&pEnumDisplaySettings, (FARPROC)extEnumDisplaySettings},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetClipCursor\", (FARPROC)GetClipCursor, (FARPROC*)&pGetClipCursor, (FARPROC)extGetClipCursor},\n\t{HOOK_HOT_CANDIDATE, 0, \"ClipCursor\", (FARPROC)ClipCursor, (FARPROC *)&pClipCursor, (FARPROC)extClipCursor},\n\t{HOOK_IAT_CANDIDATE, 0, \"DefWindowProcA\", (FARPROC)DefWindowProcA, (FARPROC *)&pDefWindowProcA, (FARPROC)extDefWindowProcA},\n\t{HOOK_IAT_CANDIDATE, 0, \"DefWindowProcW\", (FARPROC)DefWindowProcW, (FARPROC *)&pDefWindowProcW, (FARPROC)extDefWindowProcW},\n\t{HOOK_HOT_CANDIDATE, 0, \"CreateWindowExA\", (FARPROC)CreateWindowExA, (FARPROC *)&pCreateWindowExA, (FARPROC)extCreateWindowExA},\n\t{HOOK_HOT_CANDIDATE, 0, \"CreateWindowExW\", (FARPROC)CreateWindowExW, (FARPROC *)&pCreateWindowExW, (FARPROC)extCreateWindowExW},\n\t{HOOK_IAT_CANDIDATE, 0, \"RegisterClassExA\", (FARPROC)RegisterClassExA, (FARPROC *)&pRegisterClassExA, (FARPROC)extRegisterClassExA},\n\t{HOOK_IAT_CANDIDATE, 0, \"RegisterClassA\", (FARPROC)RegisterClassA, (FARPROC *)&pRegisterClassA, (FARPROC)extRegisterClassA},\n\t{HOOK_IAT_CANDIDATE, 0, \"RegisterClassExW\", (FARPROC)RegisterClassExW, (FARPROC *)&pRegisterClassExW, (FARPROC)extRegisterClassExW},\n\t{HOOK_IAT_CANDIDATE, 0, \"RegisterClassW\", (FARPROC)RegisterClassW, (FARPROC *)&pRegisterClassW, (FARPROC)extRegisterClassW},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetSystemMetrics\", (FARPROC)GetSystemMetrics, (FARPROC *)&pGetSystemMetrics, (FARPROC)extGetSystemMetrics},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetDesktopWindow\", (FARPROC)GetDesktopWindow, (FARPROC *)&pGetDesktopWindow, (FARPROC)extGetDesktopWindow},\n\t{HOOK_IAT_CANDIDATE, 0, \"CloseWindow\", (FARPROC)NULL, (FARPROC *)&pCloseWindow, (FARPROC)extCloseWindow},\n\t{HOOK_IAT_CANDIDATE, 0, \"DestroyWindow\", (FARPROC)NULL, (FARPROC *)&pDestroyWindow, (FARPROC)extDestroyWindow},\n\t{HOOK_IAT_CANDIDATE, 0, \"SetSysColors\", (FARPROC)NULL, (FARPROC *)&pSetSysColors, (FARPROC)extSetSysColors},\n\t{HOOK_IAT_CANDIDATE, 0, \"SetCapture\", (FARPROC)NULL, (FARPROC *)&pSetCapture, (FARPROC)extSetCapture},\n\t{HOOK_HOT_CANDIDATE, 0, \"SetWindowLongA\", (FARPROC)SetWindowLongA, (FARPROC *)&pSetWindowLongA, (FARPROC)extSetWindowLongA},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetWindowLongA\", (FARPROC)GetWindowLongA, (FARPROC *)&pGetWindowLongA, (FARPROC)extGetWindowLongA}, \n\t{HOOK_HOT_CANDIDATE, 0, \"SetWindowLongW\", (FARPROC)SetWindowLongW, (FARPROC *)&pSetWindowLongW, (FARPROC)extSetWindowLongW},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetWindowLongW\", (FARPROC)GetWindowLongW, (FARPROC *)&pGetWindowLongW, (FARPROC)extGetWindowLongW}, \n\t{HOOK_IAT_CANDIDATE, 0, \"IsWindowVisible\", (FARPROC)IsWindowVisible, (FARPROC *)&pIsWindowVisible, (FARPROC)extIsWindowVisible}, // ref. in dxw.SetClipper, CreateWindowCommon\n\t{HOOK_IAT_CANDIDATE, 0, \"GetTopWindow\", (FARPROC)GetTopWindow, (FARPROC *)&pGetTopWindow, (FARPROC)extGetTopWindow},\n\t// hot by MinHook since v2.03.07\n\t{HOOK_HOT_CANDIDATE, 0, \"SystemParametersInfoA\", (FARPROC)SystemParametersInfoA, (FARPROC *)&pSystemParametersInfoA, (FARPROC)extSystemParametersInfoA},\n\t{HOOK_HOT_CANDIDATE, 0, \"SystemParametersInfoW\", (FARPROC)SystemParametersInfoW, (FARPROC *)&pSystemParametersInfoW, (FARPROC)extSystemParametersInfoW},\n\n#ifdef GALAPAGOSTEST\n\t// test for Galapagos\n\t{HOOK_HOT_CANDIDATE, 0, \"GetFocus\", (FARPROC)GetFocus, (FARPROC *)&pGetFocus, (FARPROC)extGetFocus},\n\t{HOOK_HOT_CANDIDATE, 0, \"SetFocus\", (FARPROC)SetFocus, (FARPROC *)&pSetFocus, (FARPROC)extSetFocus},\n\t{HOOK_HOT_CANDIDATE, 0, \"IsWindow\", (FARPROC)IsWindow, (FARPROC *)&pIsWindow, (FARPROC)extIsWindow},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetWindow\", (FARPROC)GetWindow, (FARPROC *)&pGetWindow, (FARPROC)extGetWindow},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetWindowThreadProcessId\", (FARPROC)GetWindowThreadProcessId, (FARPROC *)&pGetWindowThreadProcessId, (FARPROC)extGetWindowThreadProcessId},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetFocus\", (FARPROC)GetFocus, (FARPROC *)&pGetFocus, (FARPROC)extGetFocus},\n#endif\n\n\t//{HOOK_IAT_CANDIDATE, 0, \"GetWindowTextA\", (FARPROC)GetWindowTextA, (FARPROC *)&pGetWindowTextA, (FARPROC)extGetWindowTextA},\n\t//{HOOK_HOT_CANDIDATE, 0, \"EnumDisplayMonitors\", (FARPROC)EnumDisplayMonitors, (FARPROC *)&pEnumDisplayMonitors, (FARPROC)extEnumDisplayMonitors},\n#ifdef TRACEPALETTE\n\t{HOOK_HOT_CANDIDATE, 0, \"GetDIBColorTable\", (FARPROC)GetDIBColorTable, (FARPROC *)&pGetDIBColorTable, (FARPROC)extGetDIBColorTable},\n\t{HOOK_HOT_CANDIDATE, 0, \"SetDIBColorTable\", (FARPROC)SetDIBColorTable, (FARPROC *)&pSetDIBColorTable, (FARPROC)extSetDIBColorTable},\n#endif\n\t \n\t{HOOK_HOT_CANDIDATE, 0, \"BringWindowToTop\", (FARPROC)BringWindowToTop, (FARPROC *)&pBringWindowToTop, (FARPROC)extBringWindowToTop},\n\t{HOOK_HOT_CANDIDATE, 0, \"SetForegroundWindow\", (FARPROC)SetForegroundWindow, (FARPROC *)&pSetForegroundWindow, (FARPROC)extSetForegroundWindow},\n\t{HOOK_HOT_CANDIDATE, 0, \"ChildWindowFromPoint\", (FARPROC)ChildWindowFromPoint, (FARPROC *)&pChildWindowFromPoint, (FARPROC)extChildWindowFromPoint},\n\t{HOOK_HOT_CANDIDATE, 0, \"ChildWindowFromPointEx\", (FARPROC)ChildWindowFromPointEx, (FARPROC *)&pChildWindowFromPointEx, (FARPROC)extChildWindowFromPointEx},\n\t{HOOK_HOT_CANDIDATE, 0, \"WindowFromPoint\", (FARPROC)WindowFromPoint, (FARPROC *)&pWindowFromPoint, (FARPROC)extWindowFromPoint},\n\t{HOOK_HOT_REQUIRED,  0 ,\"SetWindowsHookExA\", (FARPROC)SetWindowsHookExA, (FARPROC *)&pSetWindowsHookExA, (FARPROC)extSetWindowsHookExA},\n\t{HOOK_HOT_REQUIRED,  0 ,\"SetWindowsHookExW\", (FARPROC)SetWindowsHookExW, (FARPROC *)&pSetWindowsHookExW, (FARPROC)extSetWindowsHookExW},\n\n\t//{HOOK_HOT_CANDIDATE, 0, \"MessageBoxTimeoutA\", (FARPROC)NULL, (FARPROC *)&pMessageBoxTimeoutA, (FARPROC)extMessageBoxTimeoutA},\n\t//{HOOK_HOT_CANDIDATE, 0, \"MessageBoxTimeoutW\", (FARPROC)NULL, (FARPROC *)&pMessageBoxTimeoutW, (FARPROC)extMessageBoxTimeoutW},\n\n\t{HOOK_IAT_CANDIDATE, 0, \"GetDC\", (FARPROC)GetDC, (FARPROC *)&pGDIGetDC, (FARPROC)extGDIGetDC},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetDCEx\", (FARPROC)GetDCEx, (FARPROC *)&pGDIGetDCEx, (FARPROC)extGDIGetDCEx},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetWindowDC\", (FARPROC)GetWindowDC, (FARPROC *)&pGDIGetWindowDC, (FARPROC)extGDIGetWindowDC}, \n\t{HOOK_IAT_CANDIDATE, 0, \"ReleaseDC\", (FARPROC)ReleaseDC, (FARPROC *)&pGDIReleaseDC, (FARPROC)extGDIReleaseDC},\n\n\t{HOOK_HOT_CANDIDATE, 0, \"BeginPaint\", (FARPROC)BeginPaint, (FARPROC *)&pBeginPaint, (FARPROC)extBeginPaint},\n\t{HOOK_HOT_CANDIDATE, 0, \"EndPaint\", (FARPROC)EndPaint, (FARPROC *)&pEndPaint, (FARPROC)extEndPaint},\n\n\t{HOOK_IAT_CANDIDATE, 0, \"DialogBoxParamA\", (FARPROC)NULL, (FARPROC *)&pDialogBoxParamA, (FARPROC)extDialogBoxParamA},\n\n\t//{HOOK_IAT_CANDIDATE, 0, \"IsZoomed\", (FARPROC)NULL, (FARPROC *)&pIsZoomed, (FARPROC)extIsZoomed},\n\t//{HOOK_HOT_CANDIDATE, 0, \"IsIconic\", (FARPROC)IsIconic, (FARPROC *)&pIsIconic, (FARPROC)extIsIconic},\n\t{HOOK_HOT_CANDIDATE, 0, \"ScrollDC\", (FARPROC)NULL, (FARPROC *)&pScrollDC, (FARPROC)extScrollDC},\n\n\t// both added to fix the Galapagos menu bar, but with no success !!!!\n\t{HOOK_HOT_CANDIDATE, 0, \"ShowScrollBar\", (FARPROC)ShowScrollBar, (FARPROC *)&pShowScrollBar, (FARPROC)extShowScrollBar},\n\t{HOOK_HOT_CANDIDATE, 0, \"DrawMenuBar\", (FARPROC)DrawMenuBar, (FARPROC *)&pDrawMenuBar, (FARPROC)extDrawMenuBar},\n\n\t// EnumDisplayDevicesW used by \"Battleground Europe\" ...\n\t{HOOK_HOT_CANDIDATE, 0, \"EnumDisplayDevicesA\", (FARPROC)EnumDisplayDevicesA, (FARPROC *)&pEnumDisplayDevicesA, (FARPROC)extEnumDisplayDevicesA},\n\t{HOOK_HOT_CANDIDATE, 0, \"EnumDisplayDevicesW\", (FARPROC)EnumDisplayDevicesW, (FARPROC *)&pEnumDisplayDevicesW, (FARPROC)extEnumDisplayDevicesW},\n\t\n\t//{HOOK_IAT_CANDIDATE, 0, \"LoadBitmapA\", (FARPROC)NULL, (FARPROC *)&pLoadBitmapA, (FARPROC)extLoadBitmapA},\n\n\t{HOOK_IAT_CANDIDATE, 0, \"EnumWindows\", (FARPROC)NULL, (FARPROC *)&pEnumWindows, (FARPROC)extEnumWindows},\n\t{HOOK_IAT_CANDIDATE, 0, \"AdjustWindowRect\", (FARPROC)NULL, (FARPROC *)&pAdjustWindowRect, (FARPROC)extAdjustWindowRect},\n\t{HOOK_IAT_CANDIDATE, 0, \"AdjustWindowRectEx\", (FARPROC)AdjustWindowRectEx, (FARPROC *)&pAdjustWindowRectEx, (FARPROC)extAdjustWindowRectEx},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetActiveWindow\", (FARPROC)NULL, (FARPROC *)&pGetActiveWindow, (FARPROC)extGetActiveWindow},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetForegroundWindow\", (FARPROC)GetForegroundWindow, (FARPROC *)&pGetForegroundWindow, (FARPROC)extGetForegroundWindow},\n\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type RemapHooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"ScreenToClient\", (FARPROC)ScreenToClient, (FARPROC *)&pScreenToClient, (FARPROC)extScreenToClient},\n\t{HOOK_HOT_CANDIDATE, 0, \"ClientToScreen\", (FARPROC)ClientToScreen, (FARPROC *)&pClientToScreen, (FARPROC)extClientToScreen},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetClientRect\", (FARPROC)GetClientRect, (FARPROC *)&pGetClientRect, (FARPROC)extGetClientRect},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetWindowRect\", (FARPROC)GetWindowRect, (FARPROC *)&pGetWindowRect, (FARPROC)extGetWindowRect},\n\t{HOOK_HOT_CANDIDATE, 0, \"MapWindowPoints\", (FARPROC)MapWindowPoints, (FARPROC *)&pMapWindowPoints, (FARPROC)extMapWindowPoints},\n\t{HOOK_HOT_CANDIDATE, 0, \"GetUpdateRgn\", (FARPROC)GetUpdateRgn, (FARPROC *)&pGetUpdateRgn, (FARPROC)extGetUpdateRgn},\n\t//{HOOK_IAT_CANDIDATE, 0, \"GetUpdateRect\", (FARPROC)GetUpdateRect, (FARPROC *)&pGetUpdateRect, (FARPROC)extGetUpdateRect},\n\t{HOOK_IAT_CANDIDATE, 0, \"RedrawWindow\", (FARPROC)RedrawWindow, (FARPROC *)&pRedrawWindow, (FARPROC)extRedrawWindow},\n\t{HOOK_HOT_CANDIDATE, 0, \"InvalidateRect\", (FARPROC)InvalidateRect, (FARPROC *)&pInvalidateRect, (FARPROC)extInvalidateRect},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type SyscallHooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"FrameRect\", (FARPROC)FrameRect, (FARPROC *)&pFrameRect, (FARPROC)extFrameRect}, \n\t// commented ot, dangerous: see comments\n\t{HOOK_IAT_CANDIDATE, 0, \"GetParent\", (FARPROC)GetParent, (FARPROC *)&pGetParent, (FARPROC)extGetParent},\n\t{HOOK_HOT_CANDIDATE, 0, \"InvalidateRgn\", (FARPROC)InvalidateRgn, (FARPROC *)&pInvalidateRgn, (FARPROC)extInvalidateRgn},\n\t{HOOK_IAT_CANDIDATE, 0, \"TabbedTextOutA\", (FARPROC)TabbedTextOutA, (FARPROC *)&pTabbedTextOutA, (FARPROC)extTabbedTextOutA},\n\t{HOOK_IAT_CANDIDATE, 0, \"TabbedTextOutW\", (FARPROC)TabbedTextOutW, (FARPROC *)&pTabbedTextOutW, (FARPROC)extTabbedTextOutW},\n\t{HOOK_IAT_CANDIDATE, 0, \"ScrollDC\", (FARPROC)ScrollDC, (FARPROC *)&pScrollDC, (FARPROC)extScrollDC},\n\t{HOOK_IAT_CANDIDATE, 0, \"DrawTextA\", (FARPROC)DrawTextA, (FARPROC *)&pDrawTextA, (FARPROC)extDrawTextA},\n\t{HOOK_IAT_CANDIDATE, 0, \"DrawTextExA\", (FARPROC)DrawTextExA, (FARPROC *)&pDrawTextExA, (FARPROC)extDrawTextExA},\n\t{HOOK_IAT_CANDIDATE, 0, \"DrawTextW\", (FARPROC)DrawTextW, (FARPROC *)&pDrawTextW, (FARPROC)extDrawTextW},\n\t{HOOK_IAT_CANDIDATE, 0, \"DrawTextExW\", (FARPROC)DrawTextExW, (FARPROC *)&pDrawTextExW, (FARPROC)extDrawTextExW},\n\t{HOOK_HOT_CANDIDATE, 0, \"FillRect\", (FARPROC)NULL, (FARPROC *)&pFillRect, (FARPROC)extFillRect},\n\t{HOOK_HOT_CANDIDATE, 0, \"InvertRect\", (FARPROC)NULL, (FARPROC *)&pInvertRect, (FARPROC)extInvertRect},\n\t{HOOK_HOT_CANDIDATE, 0, \"DrawIcon\", (FARPROC)NULL, (FARPROC *)&pDrawIcon, (FARPROC)extDrawIcon},\n\t{HOOK_IAT_CANDIDATE, 0, \"DrawIconEx\", (FARPROC)NULL, (FARPROC *)&pDrawIconEx, (FARPROC)extDrawIconEx},\n\t{HOOK_HOT_CANDIDATE, 0, \"DrawCaption\", (FARPROC)NULL, (FARPROC *)&pDrawCaption, (FARPROC)extDrawCaption},\n\t//TODO {HOOK_HOT_CANDIDATE, 0, \"DrawEdge\", (FARPROC)NULL, (FARPROC *)&pDrawEdge, (FARPROC)extDrawEdge},\n\t//TODO {HOOK_HOT_CANDIDATE, 0, \"DrawFocusRect\", (FARPROC)NULL, (FARPROC *)&pDrawFocusRect, (FARPROC)extDrawFocusRect},\n\t//TODO {HOOK_HOT_CANDIDATE, 0, \"DrawFrameControl\", (FARPROC)NULL, (FARPROC *)&pDrawFrameControl, (FARPROC)extDrawFrameControl},\n\t//TODO {HOOK_HOT_CANDIDATE, 0, \"DrawStateA\", (FARPROC)NULL, (FARPROC *)&pDrawStateA, (FARPROC)extDrawStateA},\n\t//TODO {HOOK_HOT_CANDIDATE, 0, \"DrawStateW\", (FARPROC)NULL, (FARPROC *)&pDrawStateW, (FARPROC)extDrawStateW},\n\t//TODO {HOOK_HOT_CANDIDATE, 0, \"GrayStringA\", (FARPROC)NULL, (FARPROC *)&pGrayStringA, (FARPROC)extGrayStringA},\n\t//TODO {HOOK_HOT_CANDIDATE, 0, \"GrayStringW\", (FARPROC)NULL, (FARPROC *)&pGrayStringW, (FARPROC)extGrayStringW},\n\t//TODO {HOOK_HOT_CANDIDATE, 0, \"PaintDesktop\", (FARPROC)NULL, (FARPROC *)&pPaintDesktop, (FARPROC)extPaintDesktop},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type ScaledHooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"ValidateRect\", (FARPROC)ValidateRect, (FARPROC *)&pValidateRect, (FARPROC)extValidateRect},\n\t{HOOK_HOT_CANDIDATE, 0, \"ValidateRgn\", (FARPROC)ValidateRgn, (FARPROC *)&pValidateRgn, (FARPROC)extValidateRgn},\n\t{HOOK_IAT_CANDIDATE, 0, \"ScrollWindow\", (FARPROC)ScrollWindow, (FARPROC *)&pScrollWindow, (FARPROC)extScrollWindow},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type MouseHooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"GetCursorPos\", (FARPROC)GetCursorPos, (FARPROC *)&pGetCursorPos, (FARPROC)extGetCursorPos},\n\t{HOOK_HOT_CANDIDATE, 0, \"SetCursorPos\", (FARPROC)SetCursorPos, (FARPROC *)&pSetCursorPos, (FARPROC)extSetCursorPos},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetCursorInfo\", (FARPROC)GetCursorInfo, (FARPROC *)&pGetCursorInfo, (FARPROC)extGetCursorInfo},\n\t{HOOK_IAT_CANDIDATE, 0, \"SetCursor\", (FARPROC)SetCursor, (FARPROC *)&pSetCursor, (FARPROC)extSetCursor},\n\t{HOOK_IAT_CANDIDATE, 0, \"SendMessageA\", (FARPROC)SendMessageA, (FARPROC *)&pSendMessageA, (FARPROC)extSendMessageA}, \n\t{HOOK_IAT_CANDIDATE, 0, \"SendMessageW\", (FARPROC)SendMessageW, (FARPROC *)&pSendMessageW, (FARPROC)extSendMessageW}, \n\t{HOOK_IAT_CANDIDATE, 0, \"mouse_event\", (FARPROC)mouse_event, (FARPROC *)&pmouse_event, (FARPROC)extmouse_event}, \n\t//{HOOK_IAT_CANDIDATE, 0, \"SetPhysicalCursorPos\", NULL, (FARPROC *)&pSetCursor, (FARPROC)extSetCursor}, // ???\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type WinHooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"ShowWindow\", (FARPROC)ShowWindow, (FARPROC *)&pShowWindow, (FARPROC)extShowWindow},\n\t{HOOK_HOT_CANDIDATE, 0, \"SetWindowPos\", (FARPROC)SetWindowPos, (FARPROC *)&pSetWindowPos, (FARPROC)extSetWindowPos},\n\t{HOOK_HOT_CANDIDATE, 0, \"DeferWindowPos\", (FARPROC)DeferWindowPos, (FARPROC *)&pGDIDeferWindowPos, (FARPROC)extDeferWindowPos},\n\t{HOOK_HOT_CANDIDATE, 0, \"CallWindowProcA\", (FARPROC)CallWindowProcA, (FARPROC *)&pCallWindowProcA, (FARPROC)extCallWindowProcA},\n\t{HOOK_HOT_CANDIDATE, 0, \"CallWindowProcW\", (FARPROC)CallWindowProcW, (FARPROC *)&pCallWindowProcW, (FARPROC)extCallWindowProcW},\n\t{HOOK_HOT_CANDIDATE, 0, \"DialogBoxIndirectParamA\", (FARPROC)DialogBoxIndirectParamA, (FARPROC *)&pDialogBoxIndirectParamA, (FARPROC)extDialogBoxIndirectParamA},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type TimeHooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"SetTimer\", (FARPROC)SetTimer, (FARPROC *)&pSetTimer, (FARPROC)extSetTimer},\n\t{HOOK_IAT_CANDIDATE, 0, \"KillTimer\", (FARPROC)KillTimer, (FARPROC *)&pKillTimer, (FARPROC)extKillTimer},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type DesktopHooks[]={ // currently unused, needed for X-Files\n\t{HOOK_IAT_CANDIDATE, 0, \"CreateDesktopA\", (FARPROC)CreateDesktopA, (FARPROC *)&pCreateDesktop, (FARPROC)extCreateDesktop},\n\t{HOOK_IAT_CANDIDATE, 0, \"SwitchDesktop\", (FARPROC)SwitchDesktop, (FARPROC *)&pSwitchDesktop, (FARPROC)extSwitchDesktop},\n\t{HOOK_IAT_CANDIDATE, 0, \"OpenDesktopA\", (FARPROC)OpenDesktopA, (FARPROC *)&pOpenDesktop, (FARPROC)extOpenDesktop},\n\t{HOOK_IAT_CANDIDATE, 0, \"CloseDesktop\", (FARPROC)CloseDesktop, (FARPROC *)&pCloseDesktop, (FARPROC)extCloseDesktop},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type MsgLoopHooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"PeekMessageA\", (FARPROC)PeekMessageA, (FARPROC *)&pPeekMessageA, (FARPROC)extPeekMessageA},\n\t{HOOK_IAT_CANDIDATE, 0, \"PeekMessageW\", (FARPROC)PeekMessageW, (FARPROC *)&pPeekMessageW, (FARPROC)extPeekMessageW},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetMessageA\", (FARPROC)GetMessageA, (FARPROC *)&pGetMessageA, (FARPROC)extGetMessageA},\n\t{HOOK_IAT_CANDIDATE, 0, \"GetMessageW\", (FARPROC)GetMessageW, (FARPROC *)&pGetMessageW, (FARPROC)extGetMessageW},\n\t{HOOK_IAT_CANDIDATE, 0, \"PostMessageA\", (FARPROC)PostMessageA, (FARPROC *)&pPostMessageA, (FARPROC)extPostMessageA},\n\t{HOOK_IAT_CANDIDATE, 0, \"PostMessageW\", (FARPROC)PostMessageW, (FARPROC *)&pPostMessageW, (FARPROC)extPostMessageW},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic char *libname = \"user32.dll\";\n\nvoid HookUser32(HMODULE hModule)\n{\n\n\tHookLibraryEx(hModule, Hooks, libname);\n\tHookLibraryEx(hModule, WinHooks, libname);\n\tHookLibraryEx(hModule, MsgLoopHooks, libname);\n\n\tif (dxw.GDIEmulationMode != GDIMODE_NONE) HookLibraryEx(hModule, SyscallHooks, libname);\n\tif (dxw.dwFlags2 & GDISTRETCHED)\tHookLibraryEx(hModule, ScaledHooks, libname);\n\tif (dxw.dwFlags1 & CLIENTREMAPPING) HookLibraryEx(hModule, RemapHooks, libname);\n\tif ((dxw.dwFlags1 & (MODIFYMOUSE|SLOWDOWN|KEEPCURSORWITHIN)) || (dxw.dwFlags2 & KEEPCURSORFIXED)) HookLibraryEx(hModule, MouseHooks, libname);\n\tif (dxw.dwFlags2 & TIMESTRETCH) HookLibraryEx(hModule, TimeHooks, libname);\n\n\tIsChangeDisplaySettingsHotPatched = IsHotPatchedEx(Hooks, \"ChangeDisplaySettingsExA\") || IsHotPatchedEx(Hooks, \"ChangeDisplaySettingsExW\");\n\treturn;\n}\n\nvoid HookUser32Init()\n{\n\tHookLibInitEx(Hooks);\n\tHookLibInitEx(SyscallHooks);\n\tHookLibInitEx(ScaledHooks);\n\tHookLibInitEx(RemapHooks);\n\tHookLibInitEx(MouseHooks);\n\tHookLibInitEx(WinHooks);\n}\n\nFARPROC Remap_user32_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tif (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\tif (addr=RemapLibraryEx(proc, hModule, WinHooks)) return addr;\n\tif (addr=RemapLibraryEx(proc, hModule, MsgLoopHooks)) return addr;\n\n\tif (dxw.dwFlags1 & CLIENTREMAPPING) \n\t\tif (addr=RemapLibraryEx(proc, hModule, RemapHooks)) return addr;\n\tif (dxw.GDIEmulationMode != GDIMODE_NONE) \n\t\tif(addr=RemapLibraryEx(proc, hModule, SyscallHooks)) return addr;\n\tif (dxw.dwFlags2 & GDISTRETCHED) \n\t\tif (addr=RemapLibraryEx(proc, hModule, ScaledHooks)) return addr;  \n\tif ((dxw.dwFlags1 & (MODIFYMOUSE|SLOWDOWN|KEEPCURSORWITHIN)) || (dxw.dwFlags2 & KEEPCURSORFIXED)) \n\t\tif (addr=RemapLibraryEx(proc, hModule, MouseHooks)) return addr;\n\tif((dxw.dwFlags2 & TIMESTRETCH) && (dxw.dwFlags4 & STRETCHTIMERS)) \n\t\tif (addr=RemapLibraryEx(proc, hModule, TimeHooks)) return addr;\n\n\treturn NULL;\n}\n\n/* ------------------------------------------------------------------------------ */\n// auxiliary (static) functions\n/* ------------------------------------------------------------------------------ */\n\nstatic void Stopper(char *s, int line)\n{\n\tchar sMsg[81];\n\tsprintf(sMsg,\"break: \\\"%s\\\"\", s);\n\tMessageBox(0, sMsg, \"break\", MB_OK | MB_ICONEXCLAMATION);\n}\n\n//#define STOPPER_TEST // comment out to eliminate\n#ifdef STOPPER_TEST\n#define STOPPER(s) Stopper(s, __LINE__)\n#else\n#define STOPPER(s)\n#endif\n\nstatic LPCSTR sTemplateName(LPCSTR tn)\n{\n\tstatic char sBuf[20+1];\n\tif((DWORD)tn >> 16)\n\t\treturn tn;\n\telse {\n\t\tsprintf(sBuf, \"ID:(%x)\", ((DWORD)tn & 0x0000FFFF));\n\t\treturn sBuf;\n\t}\n}\n\n// --------------------------------------------------------------------------\n//\n// globals, externs, static functions...\n//\n// --------------------------------------------------------------------------\n\n// PrimHDC: DC handle of the selected DirectDraw primary surface. NULL when invalid.\nHDC PrimHDC=NULL;\n\nLPRECT lpClipRegion=NULL;\nRECT ClipRegion;\nint LastCurPosX, LastCurPosY;\n\nextern GetDC_Type pGetDC;\nextern ReleaseDC_Type pReleaseDC1;\nextern HRESULT WINAPI sBlt(int, Blt_Type, char *, LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPDDBLTFX, BOOL);\n\nLONG WINAPI MyChangeDisplaySettings(char *fname, BOOL WideChar, void *lpDevMode, DWORD dwflags)\n{\n\tHRESULT res;\n\tDWORD dmFields, dmBitsPerPel, dmPelsWidth, dmPelsHeight;\n\n\tif(dwflags & CDS_TEST) {\n\t\tOutTraceDW(\"%s: TEST res=DISP_CHANGE_SUCCESSFUL\\n\", fname);\n\t\treturn DISP_CHANGE_SUCCESSFUL;\n\t}\n\n\t// v2.02.32: reset the emulated DC used in GDIEMULATEDC mode\n\tdxw.ResetEmulatedDC();\n\n\tif(lpDevMode){\n\t\tif(WideChar){\n\t\t\tdmFields=((DEVMODEW *)lpDevMode)->dmFields;\n\t\t\tdmPelsWidth=((DEVMODEW *)lpDevMode)->dmPelsWidth;\n\t\t\tdmPelsHeight=((DEVMODEW *)lpDevMode)->dmPelsHeight;\n\t\t\tdmBitsPerPel=((DEVMODEW *)lpDevMode)->dmBitsPerPel;\n\t\t}\n\t\telse{\n\t\t\tdmFields=((DEVMODEA *)lpDevMode)->dmFields;\n\t\t\tdmPelsWidth=((DEVMODEA *)lpDevMode)->dmPelsWidth;\n\t\t\tdmPelsHeight=((DEVMODEA *)lpDevMode)->dmPelsHeight;\n\t\t\tdmBitsPerPel=((DEVMODEA *)lpDevMode)->dmBitsPerPel;\n\t\t}\n\t}\n\n\t// save desired settings first v.2.1.89\n\t// v2.1.95 protect when lpDevMode is null (closing game... Jedi Outcast)\n\t// v2.2.23 consider new width/height only when dmFields flags are set.\n\tif(lpDevMode && (dmFields & (DM_PELSWIDTH | DM_PELSHEIGHT))){\n\t\tRECT client;\n\t\tdxw.SetScreenSize(dmPelsWidth, dmPelsHeight);\n\n\t\t// v2.02.31: when main win is bigger that expected resolution, you're in windowed fullscreen mode\n\t\t//(*pGetClientRect)((dxw.dwFlags1 & FIXPARENTWIN) ? dxw.hParentWnd : dxw.GethWnd(), &client);\n\t\t(*pGetClientRect)(dxw.GethWnd(), &client);\n\t\tOutTraceDW(\"%s: current hWnd=%x size=(%d,%d)\\n\", fname, dxw.GethWnd(), client.right, client.bottom);\n\t\tif((client.right>=(LONG)dmPelsWidth) && (client.bottom>=(LONG)dmPelsHeight)) {\n\t\t\tOutTraceDW(\"%s: entering FULLSCREEN mode\\n\", fname);\n\t\t\tdxw.SetFullScreen(TRUE);\n\t\t}\n\t}\n\t\n\t// v2.03.61: bypass display mode changes also for CDS_UPDATEREGISTRY flag\n\t// used by \"Severance: Blade of Darkness\" OpenGL renderer\n\tif ((dwflags==0 || dwflags==CDS_FULLSCREEN || dwflags==CDS_UPDATEREGISTRY) && lpDevMode){\n\t\tif (dxw.dwFlags1 & EMULATESURFACE || !(dmFields & DM_BITSPERPEL)){\n\t\t\tOutTraceDW(\"%s: BYPASS res=DISP_CHANGE_SUCCESSFUL\\n\", fname);\n\t\t\treturn DISP_CHANGE_SUCCESSFUL;\n\t\t}\n\t\telse{\n\t\t\tDEVMODEA NewMode;\n\t\t\tif(dwflags==CDS_FULLSCREEN) dwflags=0; // no FULLSCREEN\n\t\t\t(*pEnumDisplaySettings)(NULL, ENUM_CURRENT_SETTINGS, &NewMode);\n\t\t\tOutTraceDW(\"ChangeDisplaySettings: CURRENT wxh=(%dx%d) BitsPerPel=%d -> %d\\n\", \n\t\t\t\tNewMode.dmPelsWidth, NewMode.dmPelsHeight, NewMode.dmBitsPerPel, dmBitsPerPel);\n\t\t\tNewMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;\n\t\t\tNewMode.dmBitsPerPel = dmBitsPerPel;\n\t\t\tres=(*pChangeDisplaySettingsExA)(NULL, &NewMode, NULL, 0, NULL);\n\t\t\tif(res) OutTraceE(\"ChangeDisplaySettings: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t\t\treturn res;\n\t\t}\n\t}\n\telse{\n\t\tif(WideChar)\n\t\t\treturn (*pChangeDisplaySettingsExW)(NULL, (LPDEVMODEW)lpDevMode, NULL, dwflags, NULL);\n\t\telse\n\t\t\treturn (*pChangeDisplaySettingsExA)(NULL, (LPDEVMODEA)lpDevMode, NULL, dwflags, NULL);\n\t}\n\n\tif(dxw.bAutoScale) dxw.AutoScale();\n}\n\nvoid dxwFixWindowPos(char *ApiName, HWND hwnd, LPARAM lParam)\n{\n\tLPWINDOWPOS wp;\n\tint MaxX, MaxY;\n\twp = (LPWINDOWPOS)lParam;\n\tMaxX = dxw.iSizX;\n\tMaxY = dxw.iSizY;\n\tif (!MaxX) MaxX = dxw.GetScreenWidth();\n\tif (!MaxY) MaxY = dxw.GetScreenHeight();\n\tstatic int iLastCX, iLastCY;\n\tstatic int BorderX=-1;\n\tstatic int BorderY=-1;\n\tint cx, cy;\n\n\tOutTraceDW(\"%s: GOT hwnd=%x pos=(%d,%d) dim=(%d,%d) Flags=%x(%s)\\n\", \n\t\tApiName, hwnd, wp->x, wp->y, wp->cx, wp->cy, wp->flags, ExplainWPFlags(wp->flags));\n\n\t// if nothing to be moved, do nothing\n\tif ((wp->flags & (SWP_NOMOVE|SWP_NOSIZE))==(SWP_NOMOVE|SWP_NOSIZE)) return; //v2.02.13\n\n\tif (dxw.dwFlags1 & PREVENTMAXIMIZE){\n\t\tint UpdFlag = 0;\n\t\tWINDOWPOS MaxPos;\n\t\tdxw.CalculateWindowPos(hwnd, MaxX, MaxY, &MaxPos);\n\n\t\tif(wp->cx>MaxPos.cx) { wp->cx=MaxPos.cx; UpdFlag=1; }\n\t\tif(wp->cy>MaxPos.cy) { wp->cy=MaxPos.cy; UpdFlag=1; }\n\t\tif (UpdFlag) \n\t\t\tOutTraceDW(\"%s: SET max size=(%dx%d)\\n\", ApiName, wp->cx, wp->cy);\n\t}\n\n\tif (dxw.IsFullScreen() && (hwnd==dxw.GethWnd())){\n\t\tif (dxw.dwFlags1 & LOCKWINPOS){ \n\t\t\tdxw.CalculateWindowPos(hwnd, MaxX, MaxY, wp);\n\t\t\tOutTraceDW(\"%s: LOCK pos=(%d,%d) size=(%dx%d)\\n\", ApiName, wp->x, wp->y, wp->cx, wp->cy);\n\t\t}\n\t\t// v2.03.95: locked size\n\t\tif (dxw.dwFlags2 & LOCKEDSIZE){ \n\t\t\tWINDOWPOS MaxPos;\n\t\t\tdxw.CalculateWindowPos(hwnd, MaxX, MaxY, &MaxPos);\n\t\t\twp->cx = MaxPos.cx;\n\t\t\twp->cy = MaxPos.cy;\n\t\t\tOutTraceDW(\"%s: SET locked size=(%dx%d)\\n\", ApiName, wp->cx, wp->cy);\n\t\t}\n\t\tif (dxw.dwFlags7 & ANCHORED){ \n\t\t\tWINDOWPOS MaxPos;\n\t\t\tdxw.CalculateWindowPos(hwnd, MaxX, MaxY, &MaxPos);\n\t\t\twp->cx = MaxPos.cx;\n\t\t\twp->cy = MaxPos.cy;\n\t\t\twp->x  = MaxPos.x;\n\t\t\twp->y  = MaxPos.y;\n\t\t\tOutTraceDW(\"%s: SET anchored pos=(%d,%d) size=(%dx%d)\\n\", ApiName, wp->x, wp->y, wp->cx, wp->cy);\n\t\t}\t\n\t}\n\n\tif ((dxw.dwFlags2 & KEEPASPECTRATIO) && dxw.IsFullScreen() && (hwnd==dxw.GethWnd())){ \n\t\t// note: while keeping aspect ration, resizing from one corner doesn't tell\n\t\t// which coordinate is prevalent to the other. We made an arbitrary choice.\n\t\t// note: v2.1.93: compensation must refer to the client area, not the wp\n\t\t// window dimensions that include the window borders.\n\t\tif(BorderX==-1){\n\t\t\t// v2.02.92: Fixed for AERO mode, where GetWindowRect substantially LIES!\n\t\t\tRECT client, full;\n\t\t\tLONG dwStyle, dwExStyle;\n\t\t\tHMENU hMenu;\n\t\t\textern GetWindowLong_Type pGetWindowLong;\n\t\t\t(*pGetClientRect)(hwnd, &client);\n\t\t\tfull=client;\n\t\t\tdwStyle=(*pGetWindowLong)(hwnd, GWL_STYLE);\n\t\t\tdwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE);\n\t\t\thMenu = (dwStyle & WS_CHILD) ? NULL : GetMenu(hwnd);\t\n\t\t\t(*pAdjustWindowRectEx)(&full, dwStyle, (hMenu!=NULL), dwExStyle);\n\t\t\tif (hMenu && (hMenu != (HMENU)-1)) __try {CloseHandle(hMenu);} __except(EXCEPTION_EXECUTE_HANDLER){};\n\t\t\tBorderX= full.right - full.left - client.right;\n\t\t\tBorderY= full.bottom - full.top - client.bottom;\n\t\t\tOutTraceDW(\"%s: KEEPASPECTRATIO window borders=(%d,%d)\\n\", ApiName, BorderX, BorderY);\n\t\t}\n\t\textern LRESULT LastCursorPos;\n\t\tswitch (LastCursorPos){\n\t\t\tcase HTBOTTOM:\n\t\t\tcase HTTOP:\n\t\t\tcase HTBOTTOMLEFT:\n\t\t\tcase HTBOTTOMRIGHT:\n\t\t\tcase HTTOPLEFT:\n\t\t\tcase HTTOPRIGHT:\n\t\t\t\tcx = BorderX + ((wp->cy - BorderY) * dxw.iRatioX) / dxw.iRatioY;\n\t\t\t\tif(cx!=wp->cx){\n\t\t\t\t\tOutTraceDW(\"%s: KEEPASPECTRATIO adjusted cx=%d->%d\\n\", ApiName, wp->cx, cx);\n\t\t\t\t\twp->cx = cx;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase HTLEFT:\n\t\t\tcase HTRIGHT:\n\t\t\t\tcy = BorderY + ((wp->cx - BorderX) * dxw.iRatioY) / dxw.iRatioX;\n\t\t\t\tif(cy!=wp->cy){\n\t\t\t\t\tOutTraceDW(\"%s: KEEPASPECTRATIO adjusted cy=%d->%d\\n\", ApiName, wp->cy, cy);\n\t\t\t\t\twp->cy = cy;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif ((dxw.dwFlags5 & CENTERTOWIN) && dxw.IsFullScreen() && (hwnd==dxw.GethWnd())){ \n\t\tRECT wrect;\n\t\tLONG dwStyle, dwExStyle;\n\t\tHMENU hMenu;\n\t\tint minx, miny;\n\t\twrect = dxw.GetScreenRect();\n\t\tdwStyle=(*pGetWindowLong)(hwnd, GWL_STYLE);\n\t\tdwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE);\n\t\thMenu = (dwStyle & WS_CHILD) ? NULL : GetMenu(hwnd);\t\n\t\t(*pAdjustWindowRectEx)(&wrect, dwStyle, (hMenu!=NULL), dwExStyle);\n\t\tminx = wrect.right - wrect.left;\n\t\tminy = wrect.bottom - wrect.top;\n\t\tif(wp->cx < minx) wp->cx = minx;\n\t\tif(wp->cy < miny) wp->cy = miny;\n\t}\n\n\tiLastCX= wp->cx;\n\tiLastCY= wp->cy;\n}\n\nvoid dxwFixMinMaxInfo(char *ApiName, HWND hwnd, LPARAM lParam)\n{\n\tif (dxw.dwFlags1 & PREVENTMAXIMIZE){\n\t\tLPMINMAXINFO lpmmi;\n\t\tlpmmi=(LPMINMAXINFO)lParam;\n\t\tOutTraceDW(\"%s: GOT MaxPosition=(%d,%d) MaxSize=(%d,%d)\\n\", ApiName, \n\t\t\tlpmmi->ptMaxPosition.x, lpmmi->ptMaxPosition.y, lpmmi->ptMaxSize.x, lpmmi->ptMaxSize.y);\n\t\tlpmmi->ptMaxPosition.x=0;\n\t\tlpmmi->ptMaxPosition.y=0;\n\t\tlpmmi->ptMaxSize.x = dxw.GetScreenWidth();\n\t\tlpmmi->ptMaxSize.y = dxw.GetScreenHeight();\n\n\t\tOutTraceDW(\"%s: SET PREVENTMAXIMIZE MaxPosition=(%d,%d) MaxSize=(%d,%d)\\n\", ApiName, \n\t\t\tlpmmi->ptMaxPosition.x, lpmmi->ptMaxPosition.y, lpmmi->ptMaxSize.x, lpmmi->ptMaxSize.y);\n\t}\n\n\t// v2.1.75: added logic to fix win coordinates to selected ones. \n\t// fixes the problem with \"Achtung Spitfire\", that can't be managed through PREVENTMAXIMIZE flag.\n\tif (dxw.dwFlags1 & LOCKWINPOS){\n\t\tLPMINMAXINFO lpmmi;\n\t\tlpmmi=(LPMINMAXINFO)lParam;\n\t\tOutTraceDW(\"%s: GOT MaxPosition=(%d,%d) MaxSize=(%d,%d)\\n\", ApiName, \n\t\t\tlpmmi->ptMaxPosition.x, lpmmi->ptMaxPosition.y, lpmmi->ptMaxSize.x, lpmmi->ptMaxSize.y);\n\t\tlpmmi->ptMaxPosition.x=dxw.iPosX;\n\t\tlpmmi->ptMaxPosition.y=dxw.iPosY;\n\t\tlpmmi->ptMaxSize.x = dxw.iSizX ? dxw.iSizX : dxw.GetScreenWidth();\n\t\tlpmmi->ptMaxSize.y = dxw.iSizY ? dxw.iSizY : dxw.GetScreenHeight();\n\t\tOutTraceDW(\"%s: SET LOCKWINPOS MaxPosition=(%d,%d) MaxSize=(%d,%d)\\n\", ApiName, \n\t\t\tlpmmi->ptMaxPosition.x, lpmmi->ptMaxPosition.y, lpmmi->ptMaxSize.x, lpmmi->ptMaxSize.y);\n\t}\n}\n\nstatic LRESULT WINAPI FixWindowProc(char *ApiName, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM *lpParam)\n{\n\tLPARAM lParam;\n\n\tlParam=*lpParam;\n\tOutTraceW(\"%s: hwnd=%x msg=[0x%x]%s(%x,%x)\\n\",\n\t\tApiName, hwnd, Msg, ExplainWinMessage(Msg), wParam, lParam);\n\n\tswitch(Msg){\n\tcase WM_NCHITTEST:\n\t\t// v2.02.71 fix: when processing WM_NCHITTEST messages whith fixed coordinates avoid calling\n\t\t// the *pDefWindowProc call \n\t\t// fixes \"Microsoft Motocross Madness\" mouse handling\n\t\tif((dxw.dwFlags2 & FIXNCHITTEST) && (dxw.dwFlags1 & MODIFYMOUSE)){ // mouse processing \n\t\t\tOutTraceDW(\"%s: suppress WM_NCHITTEST\\n\", ApiName);\n\t\t\treturn TRUE;\n\t\t}\n\t\tbreak;\n\tcase WM_ERASEBKGND:\n\t\tOutTraceDW(\"%s: prevent erase background\\n\", ApiName);\n\t\treturn TRUE; // 1=erased\n\t\tbreak; // useless\n\tcase WM_GETMINMAXINFO:\n\t\tdxwFixMinMaxInfo(ApiName, hwnd, lParam);\n\t\tbreak;\n\tcase WM_WINDOWPOSCHANGING:\n\tcase WM_WINDOWPOSCHANGED:\n\t\tdxwFixWindowPos(ApiName, hwnd, lParam);\n\t\tbreak;\n\tcase WM_STYLECHANGING:\n\tcase WM_STYLECHANGED:\n\t\tdxw.FixStyle(ApiName, hwnd, wParam, lParam);\n\t\tbreak;\n\tcase WM_SIZE:\n\t\tif ((dxw.dwFlags1 & LOCKWINPOS) && dxw.IsFullScreen()) return 0;\n\t\tif (dxw.dwFlags1 & PREVENTMAXIMIZE){\n\t\t\tif ((wParam == SIZE_MAXIMIZED)||(wParam == SIZE_MAXSHOW)){\n\t\t\t\tOutTraceDW(\"%s: prevent screen SIZE to fullscreen wparam=%d(%s) size=(%d,%d)\\n\", ApiName,\n\t\t\t\t\twParam, ExplainResizing(wParam), HIWORD(lParam), LOWORD(lParam));\n\t\t\t\treturn 0; // checked\n\t\t\t\t//lParam = MAKELPARAM(dxw.GetScreenWidth(), dxw.GetScreenHeight()); \n\t\t\t\t//OutTraceDW(\"%s: updated SIZE wparam=%d(%s) size=(%d,%d)\\n\", ApiName,\n\t\t\t\t//\twParam, ExplainResizing(wParam), HIWORD(lParam), LOWORD(lParam));\n\t\t\t}\n\t\t}\n\t\tbreak;\t\n\tdefault:\n\t\tbreak;\n\t}\n\n\t// marker to run hooked function\n\treturn(-1);\n}\n\n// --------------------------------------------------------------------------\n//\n// user32 API hookers\n//\n// --------------------------------------------------------------------------\n\n\nBOOL WINAPI extInvalidateRect(HWND hwnd, RECT *lpRect, BOOL bErase)\n{\n\tif(IsTraceDW){\n\t\tchar sRect[81];\n\t\tif(lpRect) sprintf(sRect, \"(%d,%d)-(%d,%d)\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t\telse strcpy(sRect, \"NULL\");\n\t\tOutTrace(\"InvalidateRect: hwnd=%x rect=%s erase=%x\\n\", hwnd, sRect, bErase);\n\t}\n\n\tif(dxw.Windowize){\n\t\tif(dxw.IsRealDesktop(hwnd)){\n\t\t\thwnd = dxw.GethWnd();\n\t\t}\n\n\t\tRECT ScaledRect;\n\t\tif(dxw.IsFullScreen()) { \n\t\t\tswitch(dxw.GDIEmulationMode){\n\t\t\t\tcase GDIMODE_STRETCHED:\n\t\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\t\tif(lpRect) {\n\t\t\t\t\t\t// v2.03.55: the lpRect area must NOT be altered by the call\n\t\t\t\t\t\t// effect visible in partial updates of Deadlock 2 main menu buttons\n\t\t\t\t\t\tScaledRect = *lpRect;\n\t\t\t\t\t\tdxw.MapClient(&ScaledRect);\n\t\t\t\t\t\tlpRect = &ScaledRect;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn (*pInvalidateRect)(hwnd, lpRect, bErase);\n}\n\nBOOL WINAPI extShowWindow(HWND hwnd, int nCmdShow)\n{\n\tBOOL res;\n\textern HWND hTrayWnd;\n\tstatic long iLastSizX, iLastSizY;\n\tint nOrigCmd;\n\t//static long iLastPosX, iLastPosY;\n\n\tOutTraceDW(\"ShowWindow: hwnd=%x, CmdShow=%x(%s)\\n\", hwnd, nCmdShow, ExplainShowCmd(nCmdShow));\n\n\tif(dxw.Windowize && (hwnd == hTrayWnd) && (nCmdShow == SW_HIDE)){\n\t\t// v2.03.85: suppress attempts to hide the tray window\n\t\tOutTraceDW(\"ShowWindow: suppress tray window hide\\n\");\n\t\treturn TRUE;\n\t}\n\n\tif(dxw.Windowize && dxw.IsFullScreen() && dxw.IsDesktop(hwnd)){\n\t\tif(dxw.dwFlags1 & CLIPCURSOR){\n\t\t\tOutTraceDW(\"ShowWindow: clipper on main win %s\\n\", (nCmdShow==SW_HIDE)?\"OFF\":\"ON\");\n\t\t\t(nCmdShow==SW_HIDE) ? dxw.EraseClipCursor() : dxw.SetClipCursor();\n\t\t}\n\t}\n\n\tnOrigCmd = nCmdShow;\n\tif (dxw.dwFlags1 & PREVENTMAXIMIZE){\n\t\tif(nCmdShow==SW_MAXIMIZE){\n\t\t\tOutTraceDW(\"ShowWindow: suppress SW_MAXIMIZE maximize\\n\");\n\t\t\tnCmdShow=SW_SHOWNORMAL;\n\t\t}\n\t\tif(nCmdShow==SW_SHOWDEFAULT){\n\t\t\tSTARTUPINFO StartupInfo;\n\t\t\tGetStartupInfo(&StartupInfo);\n\t\t\tOutTraceDW(\"DEBUG: StartupInfo dwFlags=%x ShowWindow=%x\\n\", StartupInfo.dwFlags, StartupInfo.wShowWindow);\n\t\t\tif((StartupInfo.dwFlags & STARTF_USESHOWWINDOW) && (StartupInfo.wShowWindow == SW_MAXIMIZE)){\n\t\t\t\tOutTraceDW(\"ShowWindow: suppress SW_SHOWDEFAULT maximize\\n\");\n\t\t\t\tnCmdShow=SW_SHOWNORMAL;\n\t\t\t}\n\t\t}\n\t}\t\n\n\tres=(*pShowWindow)(hwnd, nCmdShow);\n\t// v2.03.95: force zero size when minimize and refresh window coordinates\n\tif(hwnd == dxw.GethWnd()){\n\t\tif(nCmdShow==SW_MINIMIZE) {\n\t\t\tdxw.IsVisible = FALSE;\n\t\t\tiLastSizX = dxw.iSizX;\n\t\t\tiLastSizY = dxw.iSizY;\n\t\t\tdxw.iSizX = dxw.iSizY = 0;\n\t\t}\n\t\telse {\n\t\t\tdxw.IsVisible = TRUE;\n\t\t\tif((dxw.iSizX == 0) && (dxw.iSizY == 0)){\n\t\t\t\tdxw.iSizX = iLastSizX;\n\t\t\t\tdxw.iSizY = iLastSizY;\n\t\t\t}\n\t\t}\n\t}\n\n\t//dxw.UpdateDesktopCoordinates();\n\tOutTraceDW(\"ShowWindow: res=%x\\n\", res);\n\n\treturn res;\n}\n\nLONG WINAPI extGetWindowLong(GetWindowLong_Type pGetWindowLong, char *ApiName, HWND hwnd, int nIndex)\n{\n\tLONG res;\n\n\tres=(*pGetWindowLong)(hwnd, nIndex);\n\n\tOutTraceB(\"%s: hwnd=%x, Index=%x(%s) res=%x\\n\", ApiName, hwnd, nIndex, ExplainSetWindowIndex(nIndex), res);\n\n\tif((nIndex==GWL_WNDPROC)||(nIndex==DWL_DLGPROC)){\n\t\tWNDPROC wp;\n\t\twp=dxwws.GetProc(hwnd);\n\t\tOutTraceDW(\"%s: remapping WindowProc res=%x -> %x\\n\", ApiName, res, (LONG)wp);\n\t\tif(wp) res=(LONG)wp; // if not found, don't alter the value.\n\t}\n\n\treturn res;\n}\n\nLONG WINAPI extGetWindowLongA(HWND hwnd, int nIndex)\n{\n\treturn extGetWindowLong(pGetWindowLongA, \"GetWindowLongA\", hwnd, nIndex);\n}\n\nLONG WINAPI extGetWindowLongW(HWND hwnd, int nIndex)\n{\n\treturn extGetWindowLong(pGetWindowLongW, \"GetWindowLongW\", hwnd, nIndex);\n}\n\nLONG WINAPI extSetWindowLong(HWND hwnd, int nIndex, LONG dwNewLong, SetWindowLong_Type pSetWindowLong, GetWindowLong_Type pGetWindowLong)\n{\n\tLONG res;\n\n\tOutTraceDW(\"SetWindowLong: hwnd=%x, Index=%x(%s) Val=%x\\n\", \n\t\thwnd, nIndex, ExplainSetWindowIndex(nIndex), dwNewLong);\n\n\tif (dxw.Windowize){\n\t\tif(dxw.dwFlags1 & LOCKWINSTYLE){\n\t\t\tif(nIndex==GWL_STYLE){\n\t\t\t\tOutTraceDW(\"SetWindowLong: Lock GWL_STYLE=%x\\n\", dwNewLong);\n\t\t\t\treturn (*pGetWindowLong)(hwnd, nIndex);\n\t\t\t}\n\t\t\tif(nIndex==GWL_EXSTYLE){\n\t\t\t\tOutTraceDW(\"SetWindowLong: Lock GWL_EXSTYLE=%x\\n\", dwNewLong);\n\t\t\t\treturn (*pGetWindowLong)(hwnd, nIndex);\n\t\t\t}\n\t\t}\n\n\t\tif (dxw.dwFlags1 & PREVENTMAXIMIZE){\n\t\t\tif(nIndex==GWL_STYLE){\n\t\t\t\tdwNewLong &= ~WS_MAXIMIZE; \n\t\t\t\tif(dxw.IsDesktop(hwnd)){\n\t\t\t\t\tOutTraceDW(\"SetWindowLong: GWL_STYLE %x suppress MAXIMIZE\\n\", dwNewLong);\n\t\t\t\t\tdwNewLong |= WS_OVERLAPPEDWINDOW; \n\t\t\t\t\tdwNewLong &= ~(WS_DLGFRAME|WS_MAXIMIZE|WS_VSCROLL|WS_HSCROLL|WS_CLIPSIBLINGS); \n\t\t\t\t}\n\t\t\t}\n\t\t\t// v2.02.32: disable topmost for main window only\n\t\t\tif(dxw.IsDesktop(hwnd) && (nIndex==GWL_EXSTYLE)){\n\t\t\t\tif(dxw.dwFlags5 & UNLOCKZORDER) {\n\t\t\t\t\tOutTraceDW(\"SetWindowLong: GWL_EXSTYLE %x suppress TOPMOST\\n\", dwNewLong);\n\t\t\t\t\tdwNewLong = dwNewLong & ~(WS_EX_TOPMOST); \n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (dxw.dwFlags1 & FIXWINFRAME){\n\t\t\t//if((nIndex==GWL_STYLE) && !(dwNewLong & WS_CHILD)){\n\t\t\tif((nIndex==GWL_STYLE) && !(dwNewLong & WS_CHILD) && dxw.IsDesktop(hwnd)){\n\t\t\t\tOutTraceDW(\"SetWindowLong: GWL_STYLE %x force OVERLAPPEDWINDOW\\n\", dwNewLong);\n\t\t\t\tdwNewLong |= WS_OVERLAPPEDWINDOW; \n\t\t\t\tdwNewLong &= ~WS_CLIPSIBLINGS; \n\t\t\t}\n\t\t}\n\n\t\tif (dxw.dwFlags1 & FIXTHINFRAME){\n\t\t\t//if((nIndex==GWL_STYLE) && !(dwNewLong & WS_CHILD)){\n\t\t\tif((nIndex==GWL_STYLE) && !(dwNewLong & WS_CHILD) && dxw.IsDesktop(hwnd)){\n\t\t\t\tOutTraceDW(\"SetWindowLong: GWL_STYLE %x force OVERLAPPEDWINDOW\\n\", dwNewLong);\n\t\t\t\tdwNewLong |= WS_OVERLAPPEDTHIN; \n\t\t\t\tdwNewLong &= ~WS_CLIPSIBLINGS; \n\t\t\t}\n\t\t}\n\t}\n\n\t// v2.03.94.fx2: removed dxw.IsFullScreen() check here ... WinProc routine must be verified in all conditions\n\t// fixes \"Nascar Racing 3\" that was setting the WinProc while still in non fullscreen mode!\n\tif ((nIndex==GWL_WNDPROC)||(nIndex==DWL_DLGPROC)) { \n\t\tLONG lres;\n\t\tWNDPROC OldProc;\n\t\tDWORD WinStyle;\n\t\tBOOL bHooked = FALSE;\n\n\t\t// fix ....\n\t\textern LRESULT CALLBACK dw_Hider_Message_Handler(HWND, UINT, WPARAM, LPARAM);\n\t\tif(dwNewLong==(LONG)dw_Hider_Message_Handler) {\n\t\t\treturn (*pSetWindowLong)(hwnd, nIndex, (LONG)dw_Hider_Message_Handler);\n\t\t}\n\n\t\t// GPL fix\n\t\t// v2.03.94.fx2: moved dxw.IsFullScreen() check here ...\n\t\tif(dxw.IsRealDesktop(hwnd) && dxw.Windowize && dxw.IsFullScreen()) {\n\t\t\thwnd=dxw.GethWnd();\n\t\t\tOutTraceDW(\"SetWindowLong: DESKTOP hwnd, FIXING hwnd=%x\\n\",hwnd);\n\t\t}\n\t\t// end of GPL fix\n\n\t\tOldProc = (WNDPROC)(*pGetWindowLong)(hwnd, nIndex);\n\t\tWinStyle = (*pGetWindowLong)(hwnd, GWL_STYLE);\n\n\t\twhile(TRUE){ // fake loop\n\t\t\tlres = -1; // initialize with not 0 value since 0 means error\n\t\t\tif(!(dxw.dwFlags6 & NOWINDOWHOOKS)){\n\t\t\t\t// hook extWindowProc to main win ....\n\t\t\t\tif(dxw.IsDesktop(hwnd)){\n\t\t\t\t\tif(OldProc==extWindowProc) OldProc=dxwws.GetProc(hwnd);\n\t\t\t\t\tdxwws.PutProc(hwnd, (WNDPROC)dwNewLong);\n\t\t\t\t\tres=(LONG)OldProc;\n\t\t\t\t\tSetLastError(0);\n\t\t\t\t\tlres=(*pSetWindowLong)(hwnd, nIndex, (LONG)extWindowProc);\n\t\t\t\t\tOutTraceDW(\"SetWindowLong: DESKTOP hooked %x->%x\\n\", dwNewLong, extWindowProc);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// hook extDlgWindowProc to dialog win ....\n\t\t\t\tif((WinStyle & DWL_DLGPROC) && (dxw.dwFlags8 & HOOKDLGWIN)){\n\t\t\t\t\tif(OldProc==extDialogWindowProc) OldProc=dxwws.GetProc(hwnd);\n\t\t\t\t\tdxwws.PutProc(hwnd, (WNDPROC)dwNewLong);\n\t\t\t\t\tres=(LONG)OldProc;\n\t\t\t\t\tSetLastError(0);\n\t\t\t\t\tlres=(*pSetWindowLong)(hwnd, nIndex, (LONG)extDialogWindowProc);\n\t\t\t\t\tOutTraceDW(\"SetWindowLong: DIALOG hooked %x->%x\\n\", dwNewLong, extDialogWindowProc);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// hook extChildWindowProc to child win ....\n\t\t\t\tif((WinStyle & WS_CHILD) && (dxw.dwFlags1 & HOOKCHILDWIN)){\n\t\t\t\t\tif(OldProc==extChildWindowProc) OldProc=dxwws.GetProc(hwnd);\n\t\t\t\t\tdxwws.PutProc(hwnd, (WNDPROC)dwNewLong);\n\t\t\t\t\tres=(LONG)OldProc;\n\t\t\t\t\tSetLastError(0);\n\t\t\t\t\tlres=(*pSetWindowLong)(hwnd, nIndex, (LONG)extChildWindowProc);\n\t\t\t\t\tOutTraceDW(\"SetWindowLong: CHILD hooked %x->%x\\n\", dwNewLong, extChildWindowProc);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// hook dwNewLong if not done otherwise\n\t\t\tres = (*pSetWindowLong)(hwnd, nIndex, dwNewLong);\n\t\t\tbreak;\n\t\t}\n\t\tif(!lres && GetLastError()) OutTraceE(\"SetWindowLong: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t}\n\telse{\n\t\t// through here for any message different from GWL_WNDPROC or DWL_DLGPROC\n\t\tres=(*pSetWindowLong)(hwnd, nIndex, dwNewLong);\n\t}\n\n\tOutTraceDW(\"SetWindowLong: hwnd=%x, nIndex=%x, Val=%x, res=%x\\n\", hwnd, nIndex, dwNewLong, res);\n\treturn res;\n}\n\nLONG WINAPI extSetWindowLongA(HWND hwnd, int nIndex, LONG dwNewLong)\n{\n\treturn extSetWindowLong(hwnd, nIndex, dwNewLong, pSetWindowLongA, pGetWindowLongA);\n}\n\nLONG WINAPI extSetWindowLongW(HWND hwnd, int nIndex, LONG dwNewLong)\n{\n\treturn extSetWindowLong(hwnd, nIndex, dwNewLong, pSetWindowLongW, pGetWindowLongW);\n}\n\nBOOL WINAPI extSetWindowPos(HWND hwnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags)\n{\n\tBOOL res;\n\n\tOutTraceDW(\"SetWindowPos: hwnd=%x%s pos=(%d,%d) dim=(%d,%d) Flags=%x\\n\", \n\t\thwnd, dxw.IsFullScreen()?\"(FULLSCREEN)\":\"\", X, Y, cx, cy, uFlags);\n\n\t// when not in fullscreen mode, just proxy the call\n\tif (!dxw.IsFullScreen()){\n\t\tres=(*pSetWindowPos)(hwnd, hWndInsertAfter, X, Y, cx, cy, uFlags);\n\t\tif(!res)OutTraceE(\"SetWindowPos: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t\treturn res;\n\t}\n\n\t// in fullscreen, but a child window inside .....\n\tif (!dxw.IsDesktop(hwnd) && !InMainWinCreation){\n\t\tRECT r;\n\t\tr.left = X;\n\t\tr.right = X + cx;\n\t\tr.top = Y;\n\t\tr.bottom = Y + cy;\n\t\tif ((*pGetWindowLong)(hwnd, GWL_STYLE) & WS_CHILD){\n\t\t\tr = dxw.MapClientRect(&r);\n\t\t}\n\t\telse {\n\t\t\t//r = dxw.MapWindowRect(&r);\n\t\t}\t\t\n\t\tX = r.left;\n\t\tY = r.top;\n\t\tcx = r.right - r.left;\n\t\tcy = r.bottom - r.top;\n\n\t\tres=(*pSetWindowPos)(hwnd, hWndInsertAfter, X, Y, cx, cy, uFlags);\n\t\tif(!res)OutTraceE(\"SetWindowPos: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t\treturn res;\n\t}\n\n\tif (dxw.dwFlags1 & LOCKWINPOS){\n\t\t// Note: any attempt to change the window position, no matter where and how, through the\n\t\t// SetWindowPos API is causing resizing to the default 1:1 pixed size in Commandos. \n\t\t// in such cases, there is incompatibility between LOCKWINPOS and LOCKWINSTYLE.\n\t\tOutTraceDW(\"SetWindowPos: locked position\\n\");\n\t\treturn 1;\n\t}\n\n\tif (dxw.dwFlags1 & PREVENTMAXIMIZE){\n\t\tint UpdFlag =0;\n\t\tint MaxX, MaxY;\n\t\t// v2.03.96: in PREVENTMAXIMIZE mode don't exceed the initial size\n\t\tMaxX = dxw.iSiz0X;\n\t\tMaxY = dxw.iSiz0Y;\n\t\tif (!MaxX) MaxX = dxw.GetScreenWidth();\n\t\tif (!MaxY) MaxY = dxw.GetScreenHeight();\n\t\tif(cx>MaxX) { cx=MaxX; UpdFlag=1; }\n\t\tif(cy>MaxY) { cy=MaxY; UpdFlag=1; }\n\t\tif (UpdFlag) \n\t\t\tOutTraceDW(\"SetWindowPos: using max dim=(%d,%d)\\n\", cx, cy);\n\t}\n\n\t// useful??? to be demonstrated....\n\t// when altering main window in fullscreen mode, fix the coordinates for borders\n\tDWORD dwCurStyle, dwExStyle;\n\tHMENU hMenu;\n\tRECT rect;\n\trect.top=rect.left=0;\n\trect.right=cx; rect.bottom=cy;\n\tdwCurStyle=(*pGetWindowLong)(hwnd, GWL_STYLE);\n\tdwExStyle=(*pGetWindowLong)(hwnd, GWL_EXSTYLE);\n\t// BEWARE: from MSDN -  If the window is a child window, the return value is undefined. \n\thMenu = (dwCurStyle & WS_CHILD) ? NULL : GetMenu(hwnd);\t\n\t(*pAdjustWindowRectEx)(&rect, dwCurStyle, (hMenu!=NULL), dwExStyle);\n\tif (hMenu && (hMenu != (HMENU)-1)) __try {CloseHandle(hMenu);} __except(EXCEPTION_EXECUTE_HANDLER){};\n\tcx=rect.right; cy=rect.bottom;\n\tOutTraceDW(\"SetWindowPos: main form hwnd=%x fixed size=(%d,%d)\\n\", hwnd, cx, cy);\n\n\tres=(*pSetWindowPos)(hwnd, hWndInsertAfter, X, Y, cx, cy, uFlags);\n\tif(!res)OutTraceE(\"SetWindowPos: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\tif(dxw.bAutoScale) dxw.AutoScale();\n\treturn res;\n}\n\nHDWP WINAPI extDeferWindowPos(HDWP hWinPosInfo, HWND hwnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags)\n{\n\t// v2.02.31: heavily used by \"Imperialism II\" !!!\n\tHDWP res;\n\n\tOutTraceDW(\"DeferWindowPos: hwnd=%x%s pos=(%d,%d) dim=(%d,%d) Flags=%x\\n\", \n\t\thwnd, dxw.IsFullScreen()?\"(FULLSCREEN)\":\"\", X, Y, cx, cy, uFlags);\n\n\tif(dxw.IsFullScreen()){\n\t\tdxw.MapClient(&X, &Y, &cx, &cy);\n\t\tOutTraceDW(\"DeferWindowPos: remapped pos=(%d,%d) dim=(%d,%d)\\n\", X, Y, cx, cy);\n\t}\n\n\tres=(*pGDIDeferWindowPos)(hWinPosInfo, hwnd, hWndInsertAfter, X, Y, cx, cy, uFlags);\n\tif(!res)OutTraceE(\"DeferWindowPos: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\tif(dxw.bAutoScale) dxw.AutoScale();\n\treturn res;\n}\n\nLRESULT WINAPI extSendMessage(char *apiname, SendMessage_Type pSendMessage, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)\n{\n\tLRESULT ret;\n\tOutTraceW(\"%s: hwnd=%x WinMsg=[0x%x]%s(%x,%x)\\n\", \n\t\tapiname, hwnd, Msg, ExplainWinMessage(Msg), wParam, lParam);\n\n\tif(dxw.dwFlags1 & MODIFYMOUSE){\n\t\tswitch (Msg){\n\t\tcase WM_MOUSEMOVE:\n\t\tcase WM_MOUSEWHEEL:\n\t\tcase WM_LBUTTONDOWN:\n\t\tcase WM_LBUTTONUP:\n\t\tcase WM_LBUTTONDBLCLK:\n\t\tcase WM_RBUTTONDOWN:\n\t\tcase WM_RBUTTONUP:\n\t\tcase WM_RBUTTONDBLCLK:\n\t\tcase WM_MBUTTONDOWN:\n\t\tcase WM_MBUTTONUP:\n\t\tcase WM_MBUTTONDBLCLK:\n\t\t\t// revert here the WindowProc mouse correction\n\t\t\tPOINT prev, curr;\n\t\t\tRECT rect;\n\t\t\tprev.x = LOWORD(lParam);\n\t\t\tprev.y = HIWORD(lParam);\n\t\t\t(*pGetClientRect)(dxw.GethWnd(), &rect);\n\t\t\tcurr.x = (prev.x * rect.right) / dxw.GetScreenWidth();\n\t\t\tcurr.y = (prev.y * rect.bottom) / dxw.GetScreenHeight();\n\t\t\tif (Msg == WM_MOUSEWHEEL){ // v2.02.33 mousewheel fix\n\t\t\t\tPOINT upleft={0,0};\n\t\t\t\t(*pClientToScreen)(dxw.GethWnd(), &upleft);\n\t\t\t\tcurr = dxw.AddCoordinates(curr, upleft);\n\t\t\t}\n\t\t\tlParam = MAKELPARAM(curr.x, curr.y); \n\t\t\tOutTraceC(\"%s: hwnd=%x pos XY=(%d,%d)->(%d,%d)\\n\", apiname, hwnd, prev.x, prev.y, curr.x, curr.y);\n\t\t\tbreak;\n\t\tcase WM_FONTCHANGE:\n\t\t\t// suppress WM_FONTCHANGE avoids \"Warhammer: Shadow of the Horned Rat\" crash when entering battle\n\t\t\treturn 0;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t}\n\tret=(*pSendMessage)(hwnd, Msg, wParam, lParam);\n\tOutTraceW(\"%s: lresult=%x\\n\", apiname, ret); \n\treturn ret;\n}\n\nLRESULT WINAPI extSendMessageA(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)\n{ return extSendMessage(\"SendMessageA\", pSendMessageA, hwnd, Msg, wParam, lParam); }\nLRESULT WINAPI extSendMessageW(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)\n{ return extSendMessage(\"SendMessageW\", pSendMessageW, hwnd, Msg, wParam, lParam); }\n\nHCURSOR WINAPI extSetCursor(HCURSOR hCursor)\n{\n\tHCURSOR ret;\n\n\tret=(*pSetCursor)(hCursor);\n\tOutTraceB(\"GDI.SetCursor: Cursor=%x, ret=%x\\n\", hCursor, ret);\n\treturn ret;\n}\n\nBOOL WINAPI extGetCursorPos(LPPOINT lppoint)\n{\n\tHRESULT res;\n\tstatic int PrevX, PrevY;\n\tPOINT prev;\n\n\tif(dxw.dwFlags1 & SLOWDOWN) dxw.DoSlow(2);\n\n\tif (pGetCursorPos) {\n\t\tres=(*pGetCursorPos)(lppoint);\n\t}\n\telse {\n\t\tlppoint->x =0; lppoint->y=0;\n\t\tres=1;\n\t}\n\n\tif(dxw.dwFlags1 & MODIFYMOUSE){\n\t\tdxw.UpdateDesktopCoordinates();\n\t\tprev=*lppoint;\n\t\t*lppoint=dxw.ScreenToClient(*lppoint);\n\t\t//OutTraceC(\"GetCursorPos: REMAPPED pos=(%d,%d)->(%d,%d)\\n\", prev.x, prev.y, lppoint->x, lppoint->y);\n\t\t*lppoint=dxw.FixCursorPos(*lppoint);\n\t\tOutTraceC(\"GetCursorPos: FIXED pos=(%d,%d)->(%d,%d)\\n\", prev.x, prev.y, lppoint->x, lppoint->y);\n\t}\n\telse {\n\t\tOutTraceC(\"GetCursorPos: pos=(%d,%d)\\n\", lppoint->x, lppoint->y);\n\t}\n\tGetHookInfo()->CursorX=(short)lppoint->x;\n\tGetHookInfo()->CursorY=(short)lppoint->y;\n\n\tif((dxw.dwFlags1 & HIDEHWCURSOR) && dxw.IsFullScreen()) while((*pShowCursor)(0) >= 0);\n\tif(dxw.dwFlags2 & SHOWHWCURSOR) while((*pShowCursor)(1) < 0);\n\n\treturn res;\n}\n\nBOOL WINAPI extSetCursorPos(int x, int y)\n{\n\tBOOL res;\n\tint PrevX, PrevY;\n\n\tPrevX=x;\n\tPrevY=y;\n\n\tif(dxw.dwFlags2 & KEEPCURSORFIXED) {\n\t\tOutTraceC(\"SetCursorPos: FIXED pos=(%d,%d)\\n\", x, y);\n\t\tLastCurPosX=x;\n\t\tLastCurPosY=y;\n\t\treturn 1;\n\t}\n\n\tif(dxw.dwFlags1 & SLOWDOWN) dxw.DoSlow(2);\n\n\tif(dxw.dwFlags1 & KEEPCURSORWITHIN){\n\t\t// Intercept SetCursorPos outside screen boundaries (used as Cursor OFF in some games)\n\t\tif ((y<0)||(y>=(int)dxw.GetScreenHeight())||(x<0)||(x>=(int)dxw.GetScreenWidth())) return 1;\n\t}\n\n\tif(dxw.dwFlags1 & MODIFYMOUSE){\n\t\t// v2.03.41\n\t\tPOINT cur;\n\t\tdxw.UpdateDesktopCoordinates();\n\t\tcur.x = x;\n\t\tcur.y = y;\n\t\tdxw.MapWindow(&cur);\n\t\tx = cur.x;\n\t\ty = cur.y;\n\t}\n\n\tres=0;\n\tif (pSetCursorPos) res=(*pSetCursorPos)(x,y);\n\n\tOutTraceC(\"SetCursorPos: res=%x XY=(%d,%d)->(%d,%d)\\n\", res, PrevX, PrevY, x, y);\n\treturn res;\n}\n\nstatic BOOL WINAPI extPeekMessage(PeekMessage_Type pPeekMessage, LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg)\n{\n\tBOOL res;\n\tchar *sLabel;\n\n\tif(dxw.dwFlags3 & PEEKALLMESSAGES){\n\t\tsLabel=\"(ANY) \";\n\t\tif((wMsgFilterMin==0) && (wMsgFilterMax == 0)){\n\t\t\t// no filtering, everything is good\n\t\t\tres=(*pPeekMessage)(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, (wRemoveMsg & 0x000F));\n\t\t}\n\t\telse {\n\t\t\tMSG Dummy;\n\t\t\t// better eliminate all messages before and after the selected range !!!!\n\t\t\t//if(wMsgFilterMin)(*pPeekMessage)(&Dummy, hwnd, 0, wMsgFilterMin-1, TRUE);\n\t\t\tif(wMsgFilterMin>0x0F)(*pPeekMessage)(&Dummy, hwnd, 0x0F, wMsgFilterMin-1, TRUE);\n\t\t\tres=(*pPeekMessage)(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, (wRemoveMsg & 0x000F));\n\t\t\tif(wMsgFilterMax<WM_KEYFIRST)(*pPeekMessage)(&Dummy, hwnd, wMsgFilterMax+1, WM_KEYFIRST-1, TRUE); // don't touch above WM_KEYFIRST !!!!\n\t\t}\n\n\t}\n\telse {\n\t\tsLabel=\"\";\n\t\tres=(*pPeekMessage)(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, (wRemoveMsg & 0x000F));\n\t}\n\tif(res)\n\t\tOutTraceW(\"PeekMessage: %slpmsg=%x hwnd=%x filter=(%x-%x) remove=%x(%s) msg=%x(%s) wparam=%x, lparam=%x pt=(%d,%d) res=%x\\n\", \n\t\t\tsLabel, lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg, ExplainPeekRemoveMsg(wRemoveMsg),\n\t\t\tlpMsg->message, ExplainWinMessage(lpMsg->message & 0xFFFF), \n\t\t\tlpMsg->wParam, lpMsg->lParam, lpMsg->pt.x, lpMsg->pt.y, res);\n\telse\n\t\tOutTraceW(\"PeekMessage: %slpmsg=%x hwnd=%x filter=(%x-%x) remove=%x(%s) res=%x\\n\", \n\t\t\tsLabel, lpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg, ExplainPeekRemoveMsg(wRemoveMsg), res);\n\n\tif((dxw.dwFlags1 & MODIFYMOUSE) && dxw.GethWnd()){\n\t\tPOINT point;\n\t\t//res=(*pGetCursorPos)(&point); // can't do this. Why?\n\t\tpoint = lpMsg->pt;\n\t\tpoint=dxw.ScreenToClient(point);\n\t\tpoint=dxw.FixCursorPos(point);\n\t\tOutTraceC(\"GetCursorPos: FIXED pos=(%d,%d)->(%d,%d)\\n\", lpMsg->pt.x, lpMsg->pt.y, point.x, point.y);\n\t\tlpMsg->pt = point;\n\t}\n\n\t// to do? syncronize with extWindowProc code ....\n\t//if(dxw.dwFlags2 & FORCEWINRESIZE){\n\t//\textern BOOL IsWindowMovingMessage(int);\n\t//\tif(IsWindowMovingMessage(lpMsg->message)){\n\t//\t\t(*pGetMessageA)(lpMsg, hwnd, lpMsg->message, lpMsg->message);\n\t//\t\tTranslateMessage(lpMsg);\n\t//\t\tDispatchMessage(lpMsg);\n\t//\t\treturn 0;\n\t//\t}\n\t//}\n\n\tif(dxw.dwFlags1 & SLOWDOWN) dxw.DoSlow(1);\n\n\treturn res;\n}\n\nBOOL WINAPI extPeekMessageA(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg)\n{ return extPeekMessage(pPeekMessageA, lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg); }\nBOOL WINAPI extPeekMessageW(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg)\n{ return extPeekMessage(pPeekMessageW, lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg); }\n\nstatic BOOL WINAPI extGetMessage(GetMessage_Type pGetMessage, LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax)\n{\n\tBOOL res;\n\n\tres=(*pGetMessage)(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax);\n\tOutTraceW(\"GetMessage: lpmsg=%x hwnd=%x filter=(%x-%x) msg=%x(%s) wparam=%x, lparam=%x pt=(%d,%d) res=%x\\n\", \n\t\tlpMsg, lpMsg->hwnd, wMsgFilterMin, wMsgFilterMax, \n\t\tlpMsg->message, ExplainWinMessage(lpMsg->message & 0xFFFF), \n\t\tlpMsg->wParam, lpMsg->lParam, lpMsg->pt.x, lpMsg->pt.y, res);\n\n\tif(dxw.dwFlags1 & MODIFYMOUSE){\n\t\t extGetCursorPos(&(lpMsg->pt));\n\t}\n\n\treturn res;\n}\n\nBOOL WINAPI extGetMessageA(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax)\n{ return extGetMessage(pGetMessageA, lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax); }\nBOOL WINAPI extGetMessageW(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax)\n{ return extGetMessage(pGetMessageW, lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax); }\n\nBOOL WINAPI extPostMessage(PostMessage_Type pPostMessage, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)\n{\n\tBOOL res;\n\tres = (*pPostMessage)(hWnd, Msg, wParam, lParam);\n\tOutTraceW(\"PostMessage: hwnd=%x msg=%x(%s) wparam=%x, lparam=%x res=%x\\n\", \n\t\thWnd, Msg, ExplainWinMessage(Msg), wParam, lParam, res);\n\treturn res;\n}\n\nBOOL WINAPI extPostMessageA(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)\n{ return extPostMessage(pPostMessageA, hwnd, Msg, wParam, lParam); }\nBOOL WINAPI extPostMessageW(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)\n{ return extPostMessage(pPostMessageW, hwnd, Msg, wParam, lParam); }\n\nBOOL WINAPI extClientToScreen(HWND hwnd, LPPOINT lppoint)\n{\n\t// v2.02.10: fully revised to handle scaled windows\n\tBOOL res;\n\n\tOutTraceB(\"ClientToScreen: hwnd=%x hWnd=%x FullScreen=%x point=(%d,%d)\\n\", \n\t\thwnd, dxw.GethWnd(), dxw.IsFullScreen(), lppoint->x, lppoint->y);\n\tif (lppoint && dxw.IsFullScreen()){\n\t\t// optimization: in fullscreen mode, coordinate conversion for the desktop window \n\t\t// should always keep the same values inaltered\n\t\tif(hwnd != dxw.GethWnd()){\n\t\t\t*lppoint = dxw.AddCoordinates(*lppoint, dxw.ClientOffset(hwnd));\n\t\t}\n\t\tOutTraceB(\"ClientToScreen: FIXED point=(%d,%d)\\n\", lppoint->x, lppoint->y);\n\t\tres=TRUE;\n\t}\n\telse {\n\t\tres=(*pClientToScreen)(hwnd, lppoint);\n\t}\n\treturn res;\n}\n\nBOOL WINAPI extScreenToClient(HWND hwnd, LPPOINT lppoint)\n{\n\t// v2.02.10: fully revised to handle scaled windows\n\tBOOL res;\n\tOutTraceB(\"ScreenToClient: hwnd=%x hWnd=%x FullScreen=%x point=(%d,%d)\\n\", \n\t\thwnd, dxw.GethWnd(), dxw.IsFullScreen(), lppoint->x, lppoint->y);\n\n\tif (lppoint && (lppoint->x == -32000) && (lppoint->y == -32000)) return 1;\n\n\tif (lppoint && dxw.IsFullScreen()){\n\t\t// optimization: in fullscreen mode, coordinate conversion for the desktop window \n\t\t// should always keep the same values inaltered\n\t\tif(hwnd != dxw.GethWnd()){\n\t\t\t*lppoint = dxw.SubCoordinates(*lppoint, dxw.ClientOffset(hwnd));\n\t\t\tOutTraceB(\"ScreenToClient: FIXED point=(%d,%d)\\n\", lppoint->x, lppoint->y);\n\t\t}\n\t\tres=TRUE;\n\t}\n\telse {\n\t\tres=(*pScreenToClient)(hwnd, lppoint);\n\t}\n\tOutTraceB(\"ScreenToClient: returned point=(%d,%d)\\n\", lppoint->x, lppoint->y);\n\treturn res;\n}\n\nBOOL WINAPI extGetClientRect(HWND hwnd, LPRECT lpRect)\n{\n\tBOOL ret;\n\tOutTraceB(\"GetClientRect: whnd=%x FullScreen=%x\\n\", hwnd, dxw.IsFullScreen());\n\n\tif(!lpRect) return 0;\n\n\t// proxed call\n\tret=(*pGetClientRect)(hwnd, lpRect);\n\tif(!ret) {\n\t\tOutTraceE(\"GetClientRect: ERROR hwnd=%x err=%d at %d\\n\", hwnd, GetLastError(), __LINE__);\n\t\treturn ret;\n\t}\n\tOutTraceB(\"GetClientRect: actual rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\n\tif (dxw.IsDesktop(hwnd)){\n\t\t*lpRect = dxw.GetScreenRect();\n\t\tOutTraceB(\"GetClientRect: desktop rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t}\n\telse \n\tif (dxw.IsFullScreen()){\n\t\tint w, h;\n\t\tif(FIXCHILDSIZE){\n\t\t\tif(dxwws.GetSize(hwnd, &w, &h)){\n\t\t\t\tlpRect->top=lpRect->left=0;\n\t\t\t\tlpRect->right=w;\n\t\t\t\tlpRect->bottom=h;\n\t\t\t\tOutTraceB(\"GetClientRect: fixed rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t\t\t\treturn TRUE;\n\t\t\t}\n\t\t}\n\t\t*lpRect=dxw.GetClientRect(*lpRect);\n\t\tOutTraceB(\"GetClientRect: fixed rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t}\n\treturn ret;\n}\n\nBOOL WINAPI extGetWindowRect(HWND hwnd, LPRECT lpRect)\n{\n\tBOOL ret;\n\tOutTraceB(\"GetWindowRect: hwnd=%x hWnd=%x FullScreen=%x\\n\", hwnd, dxw.GethWnd(), dxw.IsFullScreen());\n\n\tif(dxw.IsRealDesktop(hwnd)) {\n\t\t// v2.03.52, v2.03.61: fix for \"Storm Angel\" and \"Geneforge\" :\n\t\t// replace the real desktop with the virtual one only if that doesn't cause troubles.\n\t\tHWND hwnd_try = dxw.GethWnd();\n\t\tif ((*pGetWindowRect)(hwnd, lpRect)) hwnd = hwnd_try;\n\t}\n\n\tret=(*pGetWindowRect)(hwnd, lpRect);\n\tif(!ret) {\n\t\tOutTraceE(\"GetWindowRect: GetWindowRect hwnd=%x error %d at %d\\n\", hwnd, GetLastError(), __LINE__);\n\t\treturn ret;\n\t}\n\tOutTraceB(\"GetWindowRect: rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t\n\t// minimized windows behaviour\n\tif((lpRect->left == -32000)||(lpRect->top == -32000)) return ret;\n\n\tif (dxw.IsDesktop(hwnd)){\n\t\t// to avoid keeping track of window frame\n\t\t*lpRect = dxw.GetScreenRect();\n\t\tOutTraceB(\"GetWindowRect: desktop rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t}\n\telse\n\tif (dxw.IsFullScreen()){\n\t\t*lpRect=dxw.GetWindowRect(*lpRect);\n\n\t\t// Diablo fix: it retrieves coordinates for the explorer window, that are as big as the real desktop!!!\n\t\tif(lpRect->left < 0) lpRect->left=0;\n//\t\tif(lpRect->left > (LONG)dxw.GetScreenWidth()) lpRect->left=dxw.GetScreenWidth();\n//\t\tif(lpRect->right < 0) lpRect->right=0;\n\t\tif(lpRect->right > (LONG)dxw.GetScreenWidth()) lpRect->right=dxw.GetScreenWidth();\n\t\tif(lpRect->top < 0) lpRect->top=0;\n//\t\tif(lpRect->top > (LONG)dxw.GetScreenHeight()) lpRect->top=dxw.GetScreenHeight();\n//\t\tif(lpRect->bottom < 0) lpRect->bottom=0;\n\t\tif(lpRect->bottom > (LONG)dxw.GetScreenHeight()) lpRect->bottom=dxw.GetScreenHeight();\n\n\t\tOutTraceB(\"GetWindowRect: fixed rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t}\n\n\treturn ret;\n}\n\n\nint WINAPI extMapWindowPoints(HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints, UINT cPoints)\n{\n\tUINT pi;\n\tint ret;\n\t// a rarely used API, but responsible for a painful headache: needs hooking for \"Commandos 2\", \"Alien Nations\".\n\t// used also in \"Full Pipe\" activemovie\n\t// used also in \"NBA Live 99\" menu screen\t\n\n\tOutTraceDW(\"MapWindowPoints: hWndFrom=%x%s hWndTo=%x%s cPoints=%d FullScreen=%x\\n\", \n\t\thWndFrom, dxw.IsDesktop(hWndFrom)?\"(DESKTOP)\":\"\",\n\t\thWndTo, dxw.IsDesktop(hWndTo)?\"(DESKTOP)\":\"\",\n\t\tcPoints, dxw.IsFullScreen());\n\tif(IsDebug){\n\t\tOutTrace(\"Points: \");\n\t\tfor(pi=0; pi<cPoints; pi++) OutTrace(\"(%d,%d)\", lpPoints[pi].x, lpPoints[pi].y);\n\t\tOutTrace(\"\\n\");\n\t}\n\n\tif(dxw.IsFullScreen()){\n\t\tif(dxw.IsRealDesktop(hWndTo)) hWndTo=dxw.GethWnd();\n\t\tif(dxw.IsRealDesktop(hWndFrom)) hWndFrom=dxw.GethWnd();\n\t}\n\t\n\tret=(*pMapWindowPoints)(hWndFrom, hWndTo, lpPoints, cPoints);\n\t// v2.03.16: now must scale every point (fixes \"NBA Live 99\")\n\t// v2.03.18: in some cases it should not! \"New Your Race\"...\n\t// v2.03.56: scale only on scaled modes\n\tswitch(dxw.GDIEmulationMode){\n\t\tcase GDIMODE_SHAREDDC:\n\t\tcase GDIMODE_EMULATED:\n\t\tdefault:\n\t\t\tbreak;\n\t\tcase GDIMODE_STRETCHED:\n\t\t\tfor(pi=0; pi<cPoints; pi++){\n\t\t\t\tdxw.UnmapClient(&lpPoints[pi]);\n\t\t\t}\t\t\t\n\t\t\tif(IsDebug){\n\t\t\t\tOutTrace(\"Mapped points: \");\n\t\t\t\tfor(pi=0; pi<cPoints; pi++) OutTrace(\"(%d,%d)\", lpPoints[pi].x, lpPoints[pi].y);\n\t\t\t\tOutTrace(\"\\n\");\n\t\t\t}\n\t\t\tbreak;\n\t}\n\n\t// If the function succeeds, the low-order word of the return value is the number of pixels \n\t// added to the horizontal coordinate of each source point in order to compute the horizontal \n\t// coordinate of each destination point. (In addition to that, if precisely one of hWndFrom \n\t// and hWndTo is mirrored, then each resulting horizontal coordinate is multiplied by -1.) \n\t// The high-order word is the number of pixels added to the vertical coordinate of each source\n\t// point in order to compute the vertical coordinate of each destination point.\n\n\tOutTraceDW(\"MapWindowPoints: ret=%x (%d,%d)\\n\", ret, (ret&0xFFFF0000)>>16, ret&0x0000FFFF);\n\treturn ret;\n}\n\nHWND WINAPI extGetDesktopWindow(void)\n{\n\tHWND res;\n\n\tif((!dxw.Windowize) || (dxw.dwFlags5 & DIABLOTWEAK)) {\n\t\tHWND ret;\n\t\tret = (*pGetDesktopWindow)();\n\t\tOutTraceDW(\"GetDesktopWindow: BYPASS ret=%x\\n\", ret);\n\t\treturn ret;\n\t}\n\n\tOutTraceDW(\"GetDesktopWindow: FullScreen=%x\\n\", dxw.IsFullScreen());\n\t// v2.04.01.fx4: do not return the main window if we still don't have one (dxw.GethWnd() == NULL)\n\tif (dxw.IsFullScreen() && dxw.GethWnd()){ \n\t\tOutTraceDW(\"GetDesktopWindow: returning main window hwnd=%x\\n\", dxw.GethWnd());\n\t\treturn dxw.GethWnd();\n\t}\n\telse{\n\t\tres=(*pGetDesktopWindow)();\n\t\tOutTraceDW(\"GetDesktopWindow: returning desktop window hwnd=%x\\n\", res);\n\t\treturn res;\n\t}\n}\n\nint WINAPI extGetSystemMetrics(int nindex)\n{\n\tHRESULT res;\n\n\tres=(*pGetSystemMetrics)(nindex);\n\tOutTraceDW(\"GetSystemMetrics: index=%x(%s), res=%d\\n\", nindex, ExplainsSystemMetrics(nindex), res);\n\n\tif(!dxw.Windowize){\n\t\t// v2.02.95: if not in window mode, just implement the HIDEMULTIMONITOR flag\n\t\tif( (nindex ==SM_CMONITORS) &&\n\t\t\t(dxw.dwFlags2 & HIDEMULTIMONITOR) && \n\t\t\tres>1) {\n\t\t\tres=1;\n\t\t\tOutTraceDW(\"GetSystemMetrics: fix SM_CMONITORS=%d\\n\", res);\n\t\t}\n\t\treturn res;\n\t}\n\n\tswitch(nindex){\n\tcase SM_CXFULLSCREEN:\n\tcase SM_CXSCREEN:\n\tcase SM_CXVIRTUALSCREEN: // v2.02.31\n\t\tres= dxw.GetScreenWidth();\n\t\tOutTraceDW(\"GetSystemMetrics: fix SM_CXSCREEN=%d\\n\", res);\n\t\tbreak;\n\tcase SM_CYFULLSCREEN:\n\tcase SM_CYSCREEN:\n\tcase SM_CYVIRTUALSCREEN: // v2.02.31\n\t\tres= dxw.GetScreenHeight();\n\t\tOutTraceDW(\"GetSystemMetrics: fix SM_CYSCREEN=%d\\n\", res);\n\t\tbreak;\n\tcase SM_CMONITORS:\n\t\tif((dxw.dwFlags2 & HIDEMULTIMONITOR) && res>1) {\n\t\t\tres=1;\n\t\t\tOutTraceDW(\"GetSystemMetrics: fix SM_CMONITORS=%d\\n\", res);\n\t\t}\n\t\tbreak;\n\t}\n\n\treturn res;\n}\n\nATOM WINAPI extRegisterClassExA(WNDCLASSEXA *lpwcx)\n{\n\tATOM ret;\n\tOutTraceDW(\"RegisterClassExA: PROXED ClassName=\\\"%s\\\" style=%x(%s) WndProc=%x cbClsExtra=%d cbWndExtra=%d hInstance=%x\\n\", \n\t\tlpwcx->lpszClassName, lpwcx->style, ExplainStyle(lpwcx->style), lpwcx->lpfnWndProc, lpwcx->cbClsExtra, lpwcx->cbWndExtra, lpwcx->hInstance);\n\tret = (*pRegisterClassExA)(lpwcx);\n\tOutTraceDW(\"RegisterClassExA: atom=%x\\n\", ret);\n\treturn ret;\n}\n\nATOM WINAPI extRegisterClassA(WNDCLASSA *lpwcx)\n{\n\tATOM ret;\n\t// referenced by Syberia, together with RegisterClassExA\n\tOutTraceDW(\"RegisterClassA: PROXED ClassName=\\\"%s\\\" style=%x(%s) WndProc=%x cbClsExtra=%d cbWndExtra=%d hInstance=%x\\n\", \n\t\tlpwcx->lpszClassName, lpwcx->style, ExplainStyle(lpwcx->style), lpwcx->lpfnWndProc, lpwcx->cbClsExtra, lpwcx->cbWndExtra, lpwcx->hInstance);\n\tret = (*pRegisterClassA)(lpwcx);\n\tOutTraceDW(\"RegisterClassA: atom=%x\\n\", ret);\n\treturn ret;\n}\n\nATOM WINAPI extRegisterClassExW(WNDCLASSEXW *lpwcx)\n{\n\tATOM ret;\n\tOutTraceDW(\"RegisterClassExW: PROXED ClassName=\\\"%ls\\\" style=%x(%s) WndProc=%x cbClsExtra=%d cbWndExtra=%d hInstance=%x\\n\", \n\t\tlpwcx->lpszClassName, lpwcx->style, ExplainStyle(lpwcx->style), lpwcx->lpfnWndProc, lpwcx->cbClsExtra, lpwcx->cbWndExtra, lpwcx->hInstance);\n\tret = (*pRegisterClassExW)(lpwcx);\n\tOutTraceDW(\"RegisterClassExW: atom=%x\\n\", ret);\n\treturn ret;\n}\n\nATOM WINAPI extRegisterClassW(WNDCLASSW *lpwcx)\n{\n\tATOM ret;\n\tOutTraceDW(\"RegisterClassW: PROXED ClassName=\\\"%ls\\\" style=%x(%s) WndProc=%x cbClsExtra=%d cbWndExtra=%d hInstance=%x\\n\", \n\t\tlpwcx->lpszClassName, lpwcx->style, ExplainStyle(lpwcx->style), lpwcx->lpfnWndProc, lpwcx->cbClsExtra, lpwcx->cbWndExtra, lpwcx->hInstance);\n\tret = (*pRegisterClassW)(lpwcx);\n\tOutTraceDW(\"RegisterClassW: atom=%x\\n\", ret);\n\treturn ret;\n}\n\nstatic void HookChildWndProc(HWND hwnd, DWORD dwStyle, LPCTSTR ApiName)\n{\n\t// child window inherit the father's windproc, so if it's redirected to\n\t// a hooker (either extWindowProc or extChildWindowProc) you have to retrieve\n\t// the correct value (dxwws.GetProc) before saving it (dxwws.PutProc).\n\tlong res;\n\tWNDPROC pWindowProc;\n\n\tif(dxw.dwFlags6 & NOWINDOWHOOKS) return;\n\n\tpWindowProc = (WNDPROC)(*pGetWindowLong)(hwnd, GWL_WNDPROC);\n\n\textern LRESULT CALLBACK dw_Hider_Message_Handler(HWND, UINT, WPARAM, LPARAM);\n\tif(pWindowProc==dw_Hider_Message_Handler) return;\n\n\tif((pWindowProc == extWindowProc) || \n\t\t(pWindowProc == extChildWindowProc) ||\n\t\t(pWindowProc == extDialogWindowProc)){ // avoid recursions \n\t\tHWND Father;\n\t\tWNDPROC pFatherProc;\n\t\tFather=(*pGetParent)(hwnd);\n\t\tpFatherProc=dxwws.GetProc(Father);\n\t\tOutTraceDW(\"%s: WndProc=%s father=%x WndProc=%x\\n\", ApiName, \n\t\t\t(pWindowProc == extWindowProc) ? \"extWindowProc\" : ((pWindowProc == extChildWindowProc) ? \"extChildWindowProc\" : \"extDialogWindowProc\"), \n\t\t\tFather, pFatherProc);\n\t\tpWindowProc = pFatherProc;\n\t}\n\tdxwws.PutProc(hwnd, pWindowProc);\n\tif(dwStyle & WS_CHILD){\n\t\tOutTraceDW(\"%s: Hooking CHILD hwnd=%x father WindowProc %x->%x\\n\", ApiName, hwnd, pWindowProc, extChildWindowProc);\n\t\tres=(*pSetWindowLong)(hwnd, GWL_WNDPROC, (LONG)extChildWindowProc);\n\t}\n\telse { // must be dwStyle & WS_DLGFRAME\n\t\tOutTraceDW(\"%s: Hooking DLGFRAME hwnd=%x father WindowProc %x->%x\\n\", ApiName, hwnd, pWindowProc, extDialogWindowProc);\n\t\tres=(*pSetWindowLong)(hwnd, GWL_WNDPROC, (LONG)extDialogWindowProc);\n\t}\n\tif(!res) OutTraceE(\"%s: SetWindowLong ERROR %x\\n\", ApiName, GetLastError());\n}\n\nHWND hControlParentWnd = NULL;\n\n// see https://msdn.microsoft.com/en-us/library/windows/desktop/ms632679%28v=vs.85%29.aspx\n\nstatic BOOL IsFullscreenWindow(\n\tvoid *lpClassName, \n\tDWORD dwStyle, \n\tDWORD dwExStyle, \n\tHWND hWndParent,\n\tint x, \n\tint y, \n\tint nWidth, \n\tint nHeight)\n{\n\tif (dwExStyle & WS_EX_CONTROLPARENT) return FALSE; // \"Diablo\" fix\n\tif ((dwStyle & WS_CHILD) && (!dxw.IsDesktop(hWndParent))) return FALSE; // Diablo fix\n\t// if maximized. \n\tif(dwStyle & WS_MAXIMIZE) return TRUE; \n\t// go through here only when WS_CHILD of desktop window\n\tif((x == CW_USEDEFAULT) && (dwStyle & (WS_POPUP|WS_CHILD))) x = y = 0;\n\tif(nWidth == CW_USEDEFAULT){\n\t\tif (dwStyle & (WS_POPUP|WS_CHILD)) nWidth = nHeight = 0;\n\t\telse nWidth = dxw.GetScreenWidth() - x;\n\t\t}\n\t// msdn undocumented case: x,y=(-1000, CW_USEDEFAULT) w,h=(CW_USEDEFAULT,CW_USEDEFAULT) in \"Imperialism\"\n\tif(nHeight == CW_USEDEFAULT){\n\t\ty = 0;\n\t\tnHeight = dxw.GetScreenHeight();\n\t\t}\n\t// if bigger than screen ...\n\tif((x<=0)&&\n\t\t(y<=0)&&\n\t\t(nWidth>=(int)dxw.GetScreenWidth())&&\n\t\t(nHeight>=(int)dxw.GetScreenHeight())) return TRUE;\n\treturn FALSE;\n}\n\nstatic HWND hLastFullScrWin = 0;\nstatic DDPIXELFORMAT ddpLastPixelFormat;\n#define SAFEWINDOWCREATION TRUE\n\ntypedef HWND (WINAPI *CreateWindow_Type)(DWORD, LPVOID, LPVOID, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID);\n\nstatic HWND WINAPI CreateWindowCommon(\n  LPCTSTR ApiName,\n  CreateWindow_Type pCreateWindow,\n  DWORD dwExStyle,\n  void *lpClassName,\n  void *lpWindowName,\n  DWORD dwStyle,\n  int x,\n  int y,\n  int nWidth,\n  int nHeight,\n  HWND hWndParent,\n  HMENU hMenu,\n  HINSTANCE hInstance,\n  LPVOID lpParam) \n{\n\tHWND hwnd;\n\tBOOL isValidHandle=TRUE;\n\tBOOL isNewDesktop;\n\tint iOrigW, iOrigH;\n\textern void GetMonitorWorkarea(int, LPRECT, BOOL);\n\tint origx, origy, origw, origh;\n\tDWORD origstyle, origexstyle;\n\torigx = x;\n\torigy = y;\n\torigw = nWidth;\n\torigh = nHeight;\n\torigstyle = dwStyle;\n\torigexstyle = dwExStyle;\n\n\tiOrigW=nWidth;\n\tiOrigH=nHeight;\n\tif(!dxw.Windowize || (hWndParent == HWND_MESSAGE)){ // v2.02.87: don't process message windows (hWndParent == HWND_MESSAGE)\n\t\thwnd= (*pCreateWindow)(dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);\n\t\tif ((dxw.dwFlags1 & HOOKCHILDWIN) && (dwStyle & (WS_CHILD|WS_DLGFRAME)))\n\t\t\tHookChildWndProc(hwnd, dwStyle, ApiName);\n\n\t\tOutTraceDW(\"%s: ret=%x\\n\", ApiName, hwnd);\n\t\treturn hwnd;\n\t}\n\n\t// no maximized windows in any case\n\tif (dxw.dwFlags1 & PREVENTMAXIMIZE){\n\t\tOutTraceDW(\"%s: handling PREVENTMAXIMIZE mode\\n\", ApiName);\n\t\tdwStyle &= ~WS_MAXIMIZE;\n\t}\n\n\t// v2.1.92: fixes size & position for auxiliary big window, often used\n\t// for intro movies etc. : needed for ......\n\t// evidently, this was supposed to be a fullscreen window....\n\t// v2.1.100: fixes for \"The Grinch\": this game creates a new main window for OpenGL\n\t// rendering using CW_USEDEFAULT placement and 800x600 size while the previous\n\t// main win was 640x480 only!\n\t// v2.02.13: if it's a WS_CHILD window, don't reposition the x,y, placement for BIG win.\n\t// v2.02.30: fix (Fable - lost chapters) Fable creates a bigger win with negative x,y coordinates. \n\t// v2.03.53: revised code, logic moved to IsFullscreenWindow\n\n\tif(isNewDesktop=IsFullscreenWindow(lpClassName, dwStyle, dwExStyle, hWndParent, x, y, nWidth, nHeight)){\n\t\tOutTraceB(\"%s: ASSERT IsFullscreenWindow==TRUE\\n\", ApiName);\n\n\t\t// if already in fullscreen mode, save previous settings\n\t\tif(dxw.IsFullScreen() && dxw.GethWnd()){\n\t\t\thLastFullScrWin = dxw.GethWnd();\n\t\t\tddpLastPixelFormat = dxw.VirtualPixelFormat;\n\t\t}\n\n\t\t// update virtual screen size if it has grown \n\t\t// v2.03.58 fix: don't consider CW_USEDEFAULT as a big unsigned integer!! Fixes \"Imperialism\".\n\t\tif((nWidth != CW_USEDEFAULT) && (nHeight != CW_USEDEFAULT)) dxw.SetScreenSize(nWidth, nHeight);\n\n\t\t// inserted some checks here, since the main window could be destroyed\n\t\t// or minimized (see \"Jedi Outcast\") so that you may get a dangerous \n\t\t// zero size. In this case, better renew the hWnd assignement and its coordinates.\n\t\tisValidHandle = dxw.IsValidMainWindow();\n\t\tif (!(dwStyle & WS_CHILD) || (dxw.IsRealDesktop(hWndParent))){ \n\t\t\tx=dxw.iPosX;\n\t\t\ty=dxw.iPosY;\n\t\t}\n\t\tnWidth=dxw.iSizX;\n\t\tnHeight=dxw.iSizY;\n\t\tOutTraceDW(\"%s: fixed client pos=(%d,%d) size=(%d,%d) valid=%x\\n\", \n\t\t\tApiName, x, y, nWidth, nHeight, isValidHandle);\n\t\tdxw.SetFullScreen(TRUE);\n\t}\n\n\tif(dxw.dwFlags5 & UNLOCKZORDER) dwExStyle &= ~WS_EX_TOPMOST ;\n\n\tif(!dxw.IsFullScreen()){ // v2.1.63: needed for \"Monster Truck Madness\"\n\t\thwnd= (*pCreateWindow)(dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);\n\t\tOutTraceDW(\"%s: windowed mode ret=%x\\n\", ApiName, hwnd);\n\t\treturn hwnd;\n\t}\n\n\t// from here on, fullscreen is garanteed\n\n\tif(!isNewDesktop){\n\t\tif ((dwStyle & WS_CHILD) && !dxw.IsRealDesktop(hWndParent)){\n\t\t\t// tested on Gangsters: coordinates must be window-relative!!!\n\t\t\t// Age of Empires....\n\t\t\tdxw.MapClient(&x, &y, &nWidth, &nHeight);\n\t\t\tOutTraceDW(\"%s: fixed WS_CHILD pos=(%d,%d) size=(%d,%d)\\n\",\n\t\t\tApiName, x, y, nWidth, nHeight);\n\t\t}\n\t\telse {\n\t\t\t// needed for \"Diablo\", that creates a new WS_EX_CONTROLPARENT window that must be\n\t\t\t// overlapped to the directdraw surface.\n\t\t\t// needed for \"Riven\", that creates a new WS_POPUP window with the menu bar that must be\n\t\t\t// overlapped to the directdraw surface.\n\t\t\tdxw.MapWindow(&x, &y, &nWidth, &nHeight);\n\t\t\tOutTraceDW(\"%s: fixed ABSOLUTE pos=(%d,%d) size=(%d,%d)\\n\",\n\t\t\tApiName, x, y, nWidth, nHeight);\n\t\t}\n\t}\n\n\tOutTraceB(\"%s: fixed pos=(%d,%d) size=(%d,%d) Style=%x(%s) ExStyle=%x(%s)\\n\",\n\t\tApiName, x, y, nWidth, nHeight, dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle));\n\n\t// v2.04.02: InMainWinCreation semaphore, signals to the CreateWin callback that the window to be created will be a main window,\n\t// so rules about LOCKWINPOS etc. must be applied. Fixes \"Civil War 2 Generals\" main window displacement. \n\t// v2.04.05: the semaphore must be a counter, since within the CreateWin callback there could be other CreateWin calls.\n\t// happens in \"Warhammer: Shadow of the Horned Rat\" !\n\tInMainWinCreation++;\n#if 1\n\t// SAFEWINDOWCREATION mode: fixes problems of \"Warhammer shadow of the Horned rat\", but also allows \"Diablo\" to run in fake fullscreen high-res mode.\n\t// this way, any creation callback routine invoked within the window creation will receive only the original call parameters, while the new scaled\n\t// values and adjusted styles will be applied only after the creation.\n\thwnd= (*pCreateWindow)(origexstyle, lpClassName, lpWindowName, origstyle, origx, origy, origw, origh, hWndParent, hMenu, hInstance, lpParam);\n\tif (hwnd) {\n\t\t(*pSetWindowLong)(hwnd, GWL_STYLE, dwStyle);\n\t\t(*pSetWindowLong)(hwnd, GWL_EXSTYLE, dwExStyle);\n\t\t(*pMoveWindow)(hwnd, x, y, nWidth, nHeight, FALSE);\n\t}\n#endif\n#if 0\n\thwnd= (*pCreateWindow)(dwExStyle, lpClassName, lpWindowName, dwStyle, origx, origy, origw, origh, hWndParent, hMenu, hInstance, lpParam);\n\tif (hwnd)(*pMoveWindow)(hwnd, x, y, nWidth, nHeight, FALSE);\n#endif\n#if 0\n\thwnd= (*pCreateWindow)(dwExStyle, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);\n#endif\n\tInMainWinCreation--;\n\n\tif (hwnd==(HWND)NULL){\n\t\tOutTraceE(\"%s: ERROR err=%d Style=%x(%s) ExStyle=%x\\n\",\n\t\t\tApiName, GetLastError(), dwStyle, ExplainStyle(dwStyle), dwExStyle);\n\t\treturn hwnd;\n\t}\n\n\tif (dwExStyle & WS_EX_CONTROLPARENT) hControlParentWnd=hwnd;\n\n\t// replace the invalid main win with the new one\n\tif ((!isValidHandle) && dxw.IsFullScreen()){\n\t\tdxw.SethWnd(hwnd);\n\t\textern void AdjustWindowPos(HWND, DWORD, DWORD);\n\t\t(*pSetWindowLong)(hwnd, GWL_STYLE, dxw.FixWinStyle(dwStyle));\n\t\t(*pSetWindowLong)(hwnd, GWL_EXSTYLE, dxw.FixWinExStyle(dwExStyle)); \n\t\tOutTraceDW(\"%s: hwnd=%x, set style\\n\", ApiName, hwnd); \n\t\tAdjustWindowPos(hwnd, nWidth, nHeight);\n\t\t(*pShowWindow)(hwnd, SW_SHOWNORMAL);\n\t}\n\n\t//if (isNewDesktop) dxw.SethWnd(hwnd);\n\n\tif ((dxw.dwFlags1 & FIXWINFRAME) && !(dwStyle & WS_CHILD) && dxw.IsDesktop(hwnd))\n\t\tdxw.FixWindowFrame(hwnd);\n\n\tif ((dxw.dwFlags1 & HOOKCHILDWIN) && (dwStyle & (WS_CHILD|WS_DLGFRAME)))\n\t\tHookChildWndProc(hwnd, dwStyle, ApiName);\n\n\tif ((FIXCHILDSIZE) && (dwStyle & (WS_CHILD|WS_DLGFRAME)))\n\t\tdxwws.PutSize(hwnd, iOrigW, iOrigH);\n\n\t// \"Hoyle Casino Empire\" needs to be in a maximized state to continue after the intro movie.\n\t// Sending a SW_MAXIMIZE message intercepted by the PREVENTMAXIMIZE handling fixes the problem.\n\t//if (dxw.IsFullScreen() && (dxw.dwFlags1 & PREVENTMAXIMIZE)){\n\tif ((hwnd == dxw.GethWnd()) && dxw.IsFullScreen() && (dxw.dwFlags1 & PREVENTMAXIMIZE)){\n\t\tOutTraceDW(\"%s: entering maximized state\\n\", ApiName); \n\t\tdxw.IsVisible = TRUE;\n\t\t(*pShowWindow)(hwnd, SW_MAXIMIZE);\n\t}\n\n\tif(dxw.dwFlags1 & CLIPCURSOR) dxw.SetClipCursor();\n\tif(dxw.dwFlags4 & HIDEDESKTOP) dxw.HideDesktop(hwnd);\n\n\tOutTraceDW(\"%s: ret=%x\\n\", ApiName, hwnd);\n\treturn hwnd;\n}\n\nstatic LPCSTR ClassToStr(LPCSTR Class)\n{\n\tstatic char AtomBuf[20+1];\n\tif(((DWORD)Class & 0xFFFF0000) == 0){\n\t\tsprintf(AtomBuf, \"ATOM(%X)\", (DWORD)Class);\n\t\treturn AtomBuf;\n\t}\n\treturn Class;\n}\n\nstatic LPCWSTR ClassToWStr(LPCWSTR Class)\n{\n\tstatic WCHAR AtomBuf[20+1];\n\tif(((DWORD)Class & 0xFFFF0000) == 0){\n\t\tswprintf(AtomBuf, L\"ATOM(%X)\", (DWORD)Class);\n\t\treturn AtomBuf;\n\t}\n\treturn Class;\n}\n// to do: implement and use ClassToWStr() for widechar call\n\nHWND WINAPI extCreateWindowExW(\n  DWORD dwExStyle,\n  LPCWSTR lpClassName,\n  LPCWSTR lpWindowName,\n  DWORD dwStyle,\n  int x,\n  int y,\n  int nWidth,\n  int nHeight,\n  HWND hWndParent,\n  HMENU hMenu,\n  HINSTANCE hInstance,\n  LPVOID lpParam) \n{\n\tif(IsTraceDW){\n\t\tchar xString[20], yString[20], wString[20], hString[20];\n\t\tif (x==CW_USEDEFAULT) strcpy(xString,\"CW_USEDEFAULT\"); \n\t\telse sprintf(xString,\"%d\", x);\n\t\tif (y==CW_USEDEFAULT) strcpy(yString,\"CW_USEDEFAULT\"); \n\t\telse sprintf(yString,\"%d\", y);\n\t\tif (nWidth==CW_USEDEFAULT) strcpy(wString,\"CW_USEDEFAULT\"); \n\t\telse sprintf(wString,\"%d\", nWidth);\n\t\tif (nHeight==CW_USEDEFAULT) strcpy(hString,\"CW_USEDEFAULT\"); \n\t\telse sprintf(hString,\"%d\", nHeight);\n\t\tOutTrace(\"CreateWindowExW: class=\\\"%ls\\\" wname=\\\"%ls\\\" pos=(%s,%s) size=(%s,%s) Style=%x(%s) ExStyle=%x(%s) hWndParent=%x%s hMenu=%x depth=%d\\n\",\n\t\t\tClassToWStr(lpClassName), lpWindowName, xString, yString, wString, hString, \n\t\t\tdwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle),\n\t\t\thWndParent, hWndParent==HWND_MESSAGE?\"(HWND_MESSAGE)\":\"\", hMenu, InMainWinCreation);\n\t}\n\tOutTraceB(\"CreateWindowExW: DEBUG fullscreen=%x mainwin=%x screen=(%d,%d)\\n\", \n\t\tdxw.IsFullScreen(), dxw.GethWnd(), dxw.GetScreenWidth(), dxw.GetScreenHeight());\n\n\tif((dxw.dwFlags6 & STRETCHMOVIES) && !wcscmp(lpWindowName, L\"ActiveMovie Window\")){\n\t\tRECT MainWin;\n\t\t(*pGetClientRect)(dxw.GethWnd(), &MainWin);\n\t\tnWidth = MainWin.right;\n\t\tnHeight = MainWin.bottom;\n\t}\n\n\treturn CreateWindowCommon(\"CreateWindowExW\", (CreateWindow_Type)pCreateWindowExW, dwExStyle, (void *)lpClassName, (void *)lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam); \n}\n\n// GHO: pro Diablo\nHWND WINAPI extCreateWindowExA(\n  DWORD dwExStyle,\n  LPCTSTR lpClassName,\n  LPCTSTR lpWindowName,\n  DWORD dwStyle,\n  int x,\n  int y,\n  int nWidth,\n  int nHeight,\n  HWND hWndParent,\n  HMENU hMenu,\n  HINSTANCE hInstance,\n  LPVOID lpParam) \n{\n\tif(IsTraceDW){\n\t\tchar xString[20], yString[20], wString[20], hString[20];\n\t\tif (x==CW_USEDEFAULT) strcpy(xString,\"CW_USEDEFAULT\"); \n\t\telse sprintf(xString,\"%d\", x);\n\t\tif (y==CW_USEDEFAULT) strcpy(yString,\"CW_USEDEFAULT\"); \n\t\telse sprintf(yString,\"%d\", y);\n\t\tif (nWidth==CW_USEDEFAULT) strcpy(wString,\"CW_USEDEFAULT\"); \n\t\telse sprintf(wString,\"%d\", nWidth);\n\t\tif (nHeight==CW_USEDEFAULT) strcpy(hString,\"CW_USEDEFAULT\"); \n\t\telse sprintf(hString,\"%d\", nHeight);\n\t\tOutTrace(\"CreateWindowExA: class=\\\"%s\\\" wname=\\\"%s\\\" pos=(%s,%s) size=(%s,%s) Style=%x(%s) ExStyle=%x(%s) hWndParent=%x%s hMenu=%x depth=%d\\n\",\n\t\t\tClassToStr(lpClassName), lpWindowName, xString, yString, wString, hString, \n\t\t\tdwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle),\n\t\t\thWndParent, hWndParent==HWND_MESSAGE?\"(HWND_MESSAGE)\":\"\", hMenu, InMainWinCreation);\n\t}\n\tOutTraceB(\"CreateWindowExA: DEBUG fullscreen=%x mainwin=%x screen=(%d,%d)\\n\", \n\t\tdxw.IsFullScreen(), dxw.GethWnd(), dxw.GetScreenWidth(), dxw.GetScreenHeight());\n\n\tif((dxw.dwFlags6 & STRETCHMOVIES) && !strcmp(lpWindowName, \"ActiveMovie Window\")){\n\t\tRECT MainWin;\n\t\t(*pGetClientRect)(dxw.GethWnd(), &MainWin);\n\t\tnWidth = MainWin.right;\n\t\tnHeight = MainWin.bottom;\n\t}\n\n\treturn CreateWindowCommon(\"CreateWindowExA\", (CreateWindow_Type)pCreateWindowExA, dwExStyle, (void *)lpClassName, (void *)lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam); \n}\n\nextern void ExplainMsg(char *, HWND, UINT, WPARAM, LPARAM);\n\nLRESULT WINAPI extCallWindowProcA(WNDPROC lpPrevWndFunc, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)\n{\n\t// v2.02.30: fix (Imperialism II): apply to main window only !!!\n\tHRESULT res;\n\n\tif(IsTraceW) ExplainMsg(\"CallWindowProcA\", hwnd, Msg, wParam, lParam);\n\tres = -1;\n\tif(hwnd == dxw.GethWnd()) res=FixWindowProc(\"CallWindowProcA\", hwnd, Msg, wParam, &lParam);\n\n\tif((dxw.dwFlags1 & FIXTEXTOUT) && (Msg == WM_SETFONT)){\n\t\twParam = (WPARAM)fontdb.GetScaledFont((HFONT)wParam);\n\t\tOutTraceDW(\"CallWindowProcA: replaced scaled font hfnt=%x\\n\", wParam);\n\t}\n\n\tif (res==(HRESULT)-1)\n\t\treturn (*pCallWindowProcA)(lpPrevWndFunc, hwnd, Msg, wParam, lParam);\n\telse\n\t\treturn res;\n}\n\nLRESULT WINAPI extCallWindowProcW(WNDPROC lpPrevWndFunc, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)\n{\n\t// v2.02.30: fix (Imperialism II): apply to main window only !!!\n\tHRESULT res;\n\n\tif(IsTraceW) ExplainMsg(\"CallWindowProcW\", hwnd, Msg, wParam, lParam);\n\tres = -1;\n\tif(hwnd == dxw.GethWnd()) res=FixWindowProc(\"CallWindowProcW\", hwnd, Msg, wParam, &lParam);\n\n\tif((dxw.dwFlags1 & FIXTEXTOUT) && (Msg == WM_SETFONT)){\n\t\twParam = (WPARAM)fontdb.GetScaledFont((HFONT)wParam);\n\t\tOutTraceDW(\"CallWindowProcA: replaced scaled font hfnt=%x\\n\", wParam);\n\t}\n\n\tif (res==(HRESULT)-1)\n\t\treturn (*pCallWindowProcW)(lpPrevWndFunc, hwnd, Msg, wParam, lParam);\n\telse\n\t\treturn res;\n}\n\nstatic LRESULT WINAPI DefWindowProcCommon(char *Label, DefWindowProc_Type pDefWindowProc, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)\n{\n\t// v2.02.30: fix (Imperialism II): apply to main window only !!!\n\t// v2.03.50: fix - do clip cursor only after the window has got focus\n\t// v2.04.14: fix - erase clip cursor when window loses focus !!!\n\tHRESULT res;\n\tres = (HRESULT)-1;\n\tif(IsTraceW) ExplainMsg(Label, hwnd, Msg, wParam, lParam);\n\tif(hwnd == dxw.GethWnd()) res=FixWindowProc(Label, hwnd, Msg, wParam, &lParam);\n\tif (res==(HRESULT)-1) res = (*pDefWindowProc)(hwnd, Msg, wParam, lParam);\n\tif(dxw.dwFlags1 & CLIPCURSOR){\n\t\tswitch(Msg){\n\t\t\tcase WM_SETFOCUS: dxw.SetClipCursor(); break;\n\t\t\tcase WM_KILLFOCUS: dxw.EraseClipCursor(); break; // v2.04.14: forgotten case ....\n\t\t}\n\t}\n\treturn res;\n}\n\nLRESULT WINAPI extDefWindowProcW(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)\n{ return DefWindowProcCommon(\"DefWindowProcW\", pDefWindowProcW, hwnd, Msg, wParam, lParam); }\nLRESULT WINAPI extDefWindowProcA(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)\n{ return DefWindowProcCommon(\"DefWindowProcA\", pDefWindowProcA, hwnd, Msg, wParam, lParam); }\n\nstatic int HandleRect(char *ApiName, void *pFun, HDC hdc, const RECT *lprc, HBRUSH hbr)\n{\n\t// used for both FillRect and FrameRect calls\n\tint res;\n\tRECT rc;\n\tOutTraceDW(\"%s: hdc=%x hbrush=%x rect=(%d,%d)-(%d,%d)\\n\", ApiName, hdc, hbr, lprc->left, lprc->top, lprc->right, lprc->bottom);\n\n\tif(dxw.dwFlags4 & NOFILLRECT) {\n\t\tOutTraceDW(\"%s: SUPPRESS\\n\", ApiName, hdc, hbr, lprc->left, lprc->top, lprc->right, lprc->bottom);\n\t\treturn TRUE;\n\t}\n\n\tmemcpy(&rc, lprc, sizeof(rc));\n\n\t// Be careful: when you call CreateCompatibleDC with NULL DC, it is created a memory DC\n\t// with same characteristics as desktop. That would return true from the call to\n\t// dxw.IsRealDesktop(WindowFromDC(hdc)) because WindowFromDC(hdc) is null.\n\t// So, it's fundamental to check also the hdc type (OBJ_DC is a window's DC)\n\n\tif((dxw.IsRealDesktop(WindowFromDC(hdc)) && (OBJ_DC == (*pGetObjectType)(hdc)))) {\n\t\tHWND VirtualDesktop;\n\t\tVirtualDesktop=dxw.GethWnd();\n\t\tif(VirtualDesktop==NULL){\n\t\t\tOutTraceDW(\"%s: no virtual desktop\\n\", ApiName);\n\t\t\treturn TRUE;\n\t\t}\n\t\tOutTraceDW(\"%s: remapped hdc to virtual desktop hwnd=%x\\n\", ApiName, dxw.GethWnd());\n\t\thdc=(*pGDIGetDC)(dxw.GethWnd());\n\t}\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tif(rc.left < 0) rc.left = 0;\n\t\tif(rc.top < 0) rc.top = 0;\n\t\tif((DWORD)rc.right > dxw.GetScreenWidth()) rc.right = dxw.GetScreenWidth();\n\t\tif((DWORD)rc.bottom > dxw.GetScreenHeight()) rc.bottom = dxw.GetScreenHeight();\n\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tres=(*(FillRect_Type)pFun)(sdc.GetHdc(), &rc, hbr);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top);\n\t\t\t\treturn res;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&rc);\n\t\t\t\tOutTraceDW(\"%s: fixed rect=(%d,%d)-(%d,%d)\\n\", ApiName, rc.left, rc.top, rc.right, rc.bottom);\t\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse {\n\t\t// when not in fullscreen mode, just proxy the call\n\t\t// but check coordinates: some games may use excessive coordinates: see \"Premier Manager 98\"\n\t\tRECT client;\n\t\tHWND hwnd;\n\t\thwnd=WindowFromDC(hdc);\n\t\t// v2.03.76 fix: sometimes WindowFromDC returns NULL with unpredictable results\n\t\t// if NULL, try to bount within the main window rect\n\t\tif(!hwnd) hwnd=dxw.GethWnd();\n\t\t// if still NULL, avoid doing changes\n\t\tif(hwnd){\n\t\t\t(*pGetClientRect)(hwnd, &client);\n\t\t\tif(rc.left < client.left) rc.left=client.left;\n\t\t\tif(rc.top < client.top) rc.top=client.top;\n\t\t\tif(rc.right > client.right) rc.right=client.right;\n\t\t\tif(rc.bottom > client.bottom) rc.bottom=client.bottom;\n\t\t\tOutTraceDW(\"%s: remapped hdc from hwnd=%x to rect=(%d,%d)-(%d,%d)\\n\", ApiName, hwnd, rc.left, rc.top, rc.right, rc.bottom);\n\t\t}\n\t}\n\n\tres=(*(FillRect_Type)pFun)(hdc, &rc, hbr);\n\treturn res;\n}\n\nint WINAPI extFillRect(HDC hdc, const RECT *lprc, HBRUSH hbr)\n{ return HandleRect(\"FillRect\", (void *)pFillRect, hdc, lprc, hbr); }\nint WINAPI extFrameRect(HDC hdc, const RECT *lprc, HBRUSH hbr)\n{ return HandleRect(\"FrameRect\", (void *)pFrameRect, hdc, lprc, hbr); }\n\nBOOL WINAPI extInvertRect(HDC hdc, const RECT *lprc)\n{\n\tint res;\n\tRECT rc;\n\tOutTraceDW(\"InvertRect: hdc=%x rect=(%d,%d)-(%d,%d)\\n\", hdc, lprc->left, lprc->top, lprc->right, lprc->bottom);\n\n\tmemcpy(&rc, lprc, sizeof(rc));\n\n\tif(dxw.IsToRemap(hdc)) {\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tres=(*pInvertRect)(sdc.GetHdc(), &rc);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top);\n\t\t\t\treturn res;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&rc);\n\t\t\t\tOutTraceDW(\"InvertRect: fixed rect=(%d,%d)-(%d,%d)\\n\", rc.left, rc.top, rc.right, rc.bottom);\t\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tres=(*pInvertRect)(hdc, &rc);\n\treturn res;\n}\n\nint WINAPI extValidateRect(HWND hwnd, const RECT *lprc)\n{\n\t// v2.03.91: manages the possibility of a NULL lprc value\n\tint res;\n\tRECT rc;\n\n\tif(IsTraceDW){\n\t\tif (lprc)\n\t\t\tOutTrace(\"ValidateRect: hwnd=%x rect=(%d,%d)-(%d,%d)\\n\", \n\t\t\t\thwnd, lprc->left, lprc->top, lprc->right, lprc->bottom);\n\t\telse \n\t\t\tOutTrace(\"ValidateRect: hwnd=%x rect=(NULL)\\n\", hwnd);\n\t}\n\n\tif(lprc){\n\t\t// avoid changing the pointed RECT structure!!\n\t\tmemcpy(&rc, lprc, sizeof(rc));\n\t\tlprc = &rc;\n\t}\n\n\tif(dxw.IsFullScreen()) {\n\t\tif(dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd();\t\t\n\t\tif(lprc) dxw.MapClient((LPRECT)lprc);\n\t\tif (lprc) {\n\t\t\tOutTraceDW(\"ValidateRect: fixed rect=(%d,%d)-(%d,%d)\\n\", \n\t\t\t\tlprc->left, lprc->top, lprc->right, lprc->bottom);\n\t\t}\n\t}\n\n\tres=(*pValidateRect)(hwnd, lprc);\n\treturn res;\n}\n\nBOOL WINAPI extClipCursor(RECT *lpRectArg)\n{\n\t// reference: hooking and setting ClipCursor is mandatori in \"Emergency: Fighters for Life\"\n\t// where the application expects the cursor to be moved just in a inner rect within the \n\t// main window surface.\n\n\tBOOL res;\n\tRECT *lpRect;\n\tRECT Rect;\n\n\tif(IsTraceC){\n\t\tif (lpRectArg)\n\t\t\tOutTrace(\"ClipCursor: rect=(%d,%d)-(%d,%d)\\n\", \n\t\t\t\tlpRectArg->left,lpRectArg->top,lpRectArg->right,lpRectArg->bottom);\n\t\telse \n\t\t\tOutTrace(\"ClipCursor: rect=(NULL)\\n\");\n\t}\n\n \tif (!(dxw.dwFlags1 & DISABLECLIPPING)) return TRUE;\n\tif ((dxw.dwFlags8 & CLIPLOCKED) && (lpRectArg == NULL)) return TRUE;\n\n\tif(lpRectArg){\n\t\tRect=*lpRectArg;\n\t\tlpRect=&Rect;\n\t}\n\telse\n\t\tlpRect=NULL;\n\n\tif(dxw.dwFlags1 & CLIENTREMAPPING){ //v2.03.61\n\t\t// save desired clip region\n\t\t// v2.02.39: fix - do not attempt to write to NULL lpRect\n\t\tif (lpRect) {\n\t\t\tClipRegion=*lpRectArg;\n\t\t\tlpClipRegion=&ClipRegion;\n\t\t\t*lpRect=dxw.MapWindowRect(lpRect);\n\t\t}\n\t\telse\n\t\t\tlpClipRegion=NULL;\n\t}\n\n\tif (pClipCursor) res=(*pClipCursor)(lpRect);\n\tif (lpRect) OutTraceDW(\"ClipCursor: REMAPPED rect=(%d,%d)-(%d,%d) res=%x\\n\", lpRect->left,lpRect->top,lpRect->right,lpRect->bottom, res);\n\n\treturn TRUE;\n}\n\nBOOL WINAPI extGetClipCursor(LPRECT lpRect)\n{\n\t// v2.1.93: if DISABLECLIPPING, return the saved clip rect coordinates\n\n\tBOOL ret;\n\n\t// proxy....\n\tif (!(dxw.dwFlags1 & DISABLECLIPPING)) {\n\t\tret=(*pGetClipCursor)(lpRect);\n\t\t// v2.03.11: fix for \"SubCulture\" mouse movement\n\t\tif(lpRect && dxw.Windowize)\t*lpRect = dxw.GetScreenRect();\n\t\tif(IsTraceDDRAW){\n\t\t\tif (lpRect)\n\t\t\t\tOutTrace(\"GetClipCursor: rect=(%d,%d)-(%d,%d) ret=%d\\n\", \n\t\t\t\t\tlpRect->left,lpRect->top,lpRect->right,lpRect->bottom, ret);\n\t\t\telse \n\t\t\t\tOutTrace(\"GetClipCursor: rect=(NULL) ret=%d\\n\", ret);\n\t\t}\t\t\n\t\treturn ret;\n\t}\n\n\tif(lpRect){\n\t\tif(lpClipRegion)\n\t\t\t*lpRect=ClipRegion;\n\t\telse \n\t\t\t*lpRect=dxw.GetScreenRect();\n\t\tOutTraceDW(\"GetClipCursor: rect=(%d,%d)-(%d,%d) ret=%d\\n\", \n\t\t\tlpRect->left,lpRect->top,lpRect->right,lpRect->bottom, TRUE);\n\t}\n\n\treturn TRUE;\n}\n\nLONG WINAPI extEnumDisplaySettings(LPCTSTR lpszDeviceName, DWORD iModeNum, DEVMODE *lpDevMode)\n{\n\tLONG res;\n\tOSVERSIONINFO osinfo;\n\n\tosinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);\n\t(*pGetVersionExA)(&osinfo);\n\tOutTraceDW(\"EnumDisplaySettings: Devicename=%s ModeNum=%x OS=%d.%d\\n\", lpszDeviceName, iModeNum, osinfo.dwMajorVersion, osinfo.dwMinorVersion);\n\n\tif(dxw.dwFlags4 & NATIVERES){\n\t\t// lists video card native resolutions, though faking emulated color resolutions\n\t\tif((osinfo.dwMajorVersion >= 6) && (dxw.dwFlags1 & EMULATESURFACE)){\n\t\t\tswitch(iModeNum){\n\t\t\tcase ENUM_CURRENT_SETTINGS: \n\t\t\tcase ENUM_REGISTRY_SETTINGS: // lie ...\n\t\t\t\tres=(*pEnumDisplaySettings)(lpszDeviceName, iModeNum, lpDevMode);\n\t\t\t\tif(dxw.dwFlags2 & INIT8BPP) lpDevMode->dmBitsPerPel = 8;\n\t\t\t\tif(dxw.dwFlags2 & INIT16BPP) lpDevMode->dmBitsPerPel = 16;\n\t\t\t\tif(dxw.dwFlags3 & FORCE16BPP) lpDevMode->dmBitsPerPel = 16;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tres=(*pEnumDisplaySettings)(lpszDeviceName, iModeNum / SUPPORTED_DEPTHS_NUMBER, lpDevMode);\n\t\t\t\tlpDevMode->dmBitsPerPel = (DWORD)SupportedDepths[iModeNum % SUPPORTED_DEPTHS_NUMBER];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tres=(*pEnumDisplaySettings)(lpszDeviceName, iModeNum, lpDevMode);\n\n\t}\n\telse { // simulated modes: VGA or HDTV\n\t\t//int SupportedDepths[5]={8,16,24,32,0};\n\t\tSupportedRes_Type *SupportedRes;\n\t\tSupportedRes = (dxw.dwFlags4 & SUPPORTHDTV) ? &SupportedHDTVRes[0] : &SupportedSVGARes[0];\n\t\tres=(*pEnumDisplaySettings)(lpszDeviceName, ENUM_CURRENT_SETTINGS, lpDevMode);\n\t\tswitch(iModeNum){\n\t\tcase ENUM_CURRENT_SETTINGS: \n\t\tcase ENUM_REGISTRY_SETTINGS: // lie ...\n\t\t\tlpDevMode->dmPelsHeight = 600;\n\t\t\tlpDevMode->dmPelsWidth = 800;\n\t\t\tif(dxw.dwFlags2 & INIT8BPP) lpDevMode->dmBitsPerPel = 8;\n\t\t\tif(dxw.dwFlags2 & INIT16BPP) lpDevMode->dmBitsPerPel = 16;\n\t\t\tif(dxw.dwFlags3 & FORCE16BPP) lpDevMode->dmBitsPerPel = 16;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tlpDevMode->dmPelsHeight = SupportedRes[iModeNum / 4].h;\n\t\t\tlpDevMode->dmPelsWidth  = SupportedRes[iModeNum / 4].w;\n\t\t\tlpDevMode->dmBitsPerPel = SupportedDepths[iModeNum % 4];\n\t\t\tif(lpDevMode->dmPelsHeight == 0) res = 0; // end of list\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif(dxw.dwFlags4 & LIMITSCREENRES){\n\t\t#define HUGE 100000\n\t\tDWORD maxw, maxh;\n\t\tmaxw = maxh = HUGE;\n\t\tswitch(dxw.MaxScreenRes){\n\t\t\tcase DXW_NO_LIMIT: maxw=HUGE; maxh=HUGE; break;\n\t\t\tcase DXW_LIMIT_320x200: maxw=320; maxh=200; break;\n\t\t\tcase DXW_LIMIT_640x480: maxw=640; maxh=480; break;\n\t\t\tcase DXW_LIMIT_800x600: maxw=800; maxh=600; break;\n\t\t\tcase DXW_LIMIT_1024x768: maxw=1024; maxh=768; break;\n\t\t\tcase DXW_LIMIT_1280x960: maxw=1280; maxh=960; break;\n\t\t}\n\t\tif((lpDevMode->dmPelsWidth > maxw) || (lpDevMode->dmPelsHeight > maxh)){\n\t\t\tOutTraceDW(\"EnumDisplaySettings: limit device size=(%d,%d)\\n\", maxw, maxh);\n\t\t\tlpDevMode->dmPelsWidth = maxw;\n\t\t\tlpDevMode->dmPelsHeight = maxh;\n\t\t}\n\t}\n\tif(dxw.dwFlags7 & MAXIMUMRES){\n\t\tif((lpDevMode->dmPelsWidth > (DWORD)dxw.iMaxW) || (lpDevMode->dmPelsHeight > (DWORD)dxw.iMaxH)){\n\t\t\tOutTraceDW(\"EnumDisplaySettings: limit device size=(%d,%d)\\n\", dxw.iMaxW, dxw.iMaxH);\n\t\t\tlpDevMode->dmPelsWidth = dxw.iMaxW;\n\t\t\tlpDevMode->dmPelsHeight = dxw.iMaxH;\n\t\t}\n\t}\n\n\tOutTraceDW(\"EnumDisplaySettings: color=%dBPP size=(%dx%d) refresh=%dHz\\n\", \n\t\tlpDevMode->dmBitsPerPel, lpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmDisplayFrequency);\n\treturn res;\n}\n\nLONG WINAPI extChangeDisplaySettingsA(DEVMODEA *lpDevMode, DWORD dwflags)\n{\n\tif(IsTraceDDRAW){\n\t\tchar sInfo[1024];\n\t\tstrcpy(sInfo, \"\");\n\t\t// v2.04.04: dmDeviceName not printed since it could be not initialized (Warhammer SOTHR)\n\t\tif (lpDevMode) sprintf(sInfo, \" fields=%x(%s) size=(%d x %d) bpp=%d\", \n\t\t\tlpDevMode->dmFields, ExplainDevModeFields(lpDevMode->dmFields),\n\t\t\tlpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmBitsPerPel);\n\t\tOutTrace(\"ChangeDisplaySettingsA: lpDevMode=%x flags=%x(%s)%s\\n\", \n\t\t\tlpDevMode, dwflags, ExplainChangeDisplaySettingsFlags(dwflags), sInfo);\n\t}\n\n\tif(dxw.Windowize)\n\t\treturn MyChangeDisplaySettings(\"ChangeDisplaySettingsA\", FALSE, lpDevMode, dwflags);\n\telse\n\t\treturn (*pChangeDisplaySettingsExA)(NULL, lpDevMode, NULL, dwflags, NULL);\n}\n\nLONG WINAPI extChangeDisplaySettingsW(DEVMODEW *lpDevMode, DWORD dwflags)\n{\n\tif(IsTraceDDRAW){\n\t\tchar sInfo[1024];\n\t\tstrcpy(sInfo, \"\");\n\t\t// v2.04.04: dmDeviceName not printed since it could be not initialized (Warhammer SOTHR)\n\t\tif (lpDevMode) sprintf(sInfo, \"fields=%x(%s) size=(%d x %d) bpp=%d\", \n\t\t\tlpDevMode->dmFields, ExplainDevModeFields(lpDevMode->dmFields),\n\t\t\tlpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmBitsPerPel);\n\t\tOutTrace(\"ChangeDisplaySettingsW: lpDevMode=%x flags=%x(%s)%s\\n\", \n\t\t\tlpDevMode, dwflags, ExplainChangeDisplaySettingsFlags(dwflags), sInfo);\n\t}\n\n\tif(dxw.Windowize)\n\t\treturn MyChangeDisplaySettings(\"ChangeDisplaySettingsW\", TRUE, lpDevMode, dwflags);\n\telse\n\t\treturn (*pChangeDisplaySettingsW)(lpDevMode, dwflags);\n}\n\nLONG WINAPI extChangeDisplaySettingsExA(LPCTSTR lpszDeviceName, DEVMODEA *lpDevMode, HWND hwnd, DWORD dwflags, LPVOID lParam)\n{\n\tif(IsTraceDDRAW){\n\t\tchar sInfo[1024];\n\t\tstrcpy(sInfo, \"\");\n\t\tif (lpDevMode) sprintf(sInfo, \" DeviceName=%s fields=%x(%s) size=(%d x %d) bpp=%d\", \n\t\t\tlpDevMode->dmDeviceName, lpDevMode->dmFields, ExplainDevModeFields(lpDevMode->dmFields),\n\t\t\tlpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmBitsPerPel);\n\t\tOutTrace(\"ChangeDisplaySettingsExA: DeviceName=%s lpDevMode=%x flags=%x(%s)%s\\n\", \n\t\t\tlpszDeviceName, lpDevMode, dwflags, ExplainChangeDisplaySettingsFlags(dwflags), sInfo);\n\t}\n\n\tif(dxw.Windowize)\n\t\treturn MyChangeDisplaySettings(\"ChangeDisplaySettingsExA\", FALSE, lpDevMode, dwflags);\n\telse\n\t\treturn (*pChangeDisplaySettingsExA)(lpszDeviceName, lpDevMode, hwnd, dwflags, lParam);\n}\n\nLONG WINAPI extChangeDisplaySettingsExW(LPCTSTR lpszDeviceName, DEVMODEW *lpDevMode, HWND hwnd, DWORD dwflags, LPVOID lParam)\n{\n\tif(IsTraceDDRAW){\n\t\tchar sInfo[1024];\n\t\tstrcpy(sInfo, \"\");\n\t\tif (lpDevMode) sprintf(sInfo, \" DeviceName=%ls fields=%x(%s) size=(%d x %d) bpp=%d\", \n\t\t\tlpDevMode->dmDeviceName, lpDevMode->dmFields, ExplainDevModeFields(lpDevMode->dmFields),\n\t\t\tlpDevMode->dmPelsWidth, lpDevMode->dmPelsHeight, lpDevMode->dmBitsPerPel);\n\t\tOutTrace(\"ChangeDisplaySettingsExW: DeviceName=%ls lpDevMode=%x flags=%x(%s)%s\\n\", \n\t\t\tlpszDeviceName, lpDevMode, dwflags, ExplainChangeDisplaySettingsFlags(dwflags), sInfo);\n\t}\n\n\tif(dxw.Windowize)\n\t\treturn MyChangeDisplaySettings(\"ChangeDisplaySettingsExW\", TRUE, lpDevMode, dwflags);\n\telse\n\t\treturn (*pChangeDisplaySettingsExW)(lpszDeviceName, lpDevMode, hwnd, dwflags, lParam);\n}\n\nstatic HDC WINAPI sGetDC(HWND hwnd, char *ApiName)\n{\n\t// to do: add parameter and reference to pGDIGetDCEx to merge properly GetDC and GetDCEx\n\tHDC ret;\n\tHWND lochwnd;\n\n\tif(!dxw.IsFullScreen()) return(*pGDIGetDC)(hwnd);\t\n\n\tlochwnd=hwnd;\n\n\tif (dxw.IsRealDesktop(hwnd)) {\n\t\tOutTraceDW(\"%s: desktop remapping hwnd=%x->%x\\n\", ApiName, hwnd, dxw.GethWnd());\n\t\tlochwnd=dxw.GethWnd();\n\t}\n\n\tswitch(dxw.GDIEmulationMode){\n\t\tcase GDIMODE_EMULATED:\n\t\t\tret=dxw.AcquireEmulatedDC(lochwnd);\n\t\t\tbreak;\n\t\tcase GDIMODE_SHAREDDC:\n\t\tcase GDIMODE_STRETCHED:\n\t\tdefault:\n\t\t\tret=(*pGDIGetDC)(lochwnd);\n\t\t\tbreak;\n\t}\n\n\tif(ret){\n\t\tOutTraceDW(\"%s: hwnd=%x ret=%x\\n\", ApiName, lochwnd, ret);\n\t}\n\telse{\n\t\tint err;\n\t\terr=GetLastError();\n\t\tOutTraceE(\"%s ERROR: hwnd=%x err=%d at %d\\n\", ApiName, lochwnd, err, __LINE__);\n\t\tif((err==ERROR_INVALID_WINDOW_HANDLE) && (lochwnd!=hwnd)){\n\t\t\tret=(*pGDIGetDC)(hwnd);\t\n\t\t\tif(ret)\n\t\t\t\tOutTraceDW(\"%s: hwnd=%x ret=%x\\n\", ApiName, hwnd, ret);\n\t\t\telse\n\t\t\t\tOutTraceE(\"%s ERROR: hwnd=%x err=%d at %d\\n\", ApiName, hwnd, GetLastError(), __LINE__);\n\t\t}\n\t}\n\n\treturn ret;\n}\n\nHDC WINAPI extGDIGetDC(HWND hwnd)\n{\n\tOutTraceDW(\"GDI.GetDC: hwnd=%x\\n\", hwnd);\n\treturn sGetDC(hwnd, \"GDI.GetDC\");\n}\n\nHDC WINAPI extGDIGetDCEx(HWND hwnd, HRGN hrgnClip, DWORD flags)\n{\n\t// used by Star Wars Shadow of the Empire\n\tOutTraceDW(\"GDI.GetDCEx: hwnd=%x hrgnClip=%x flags=%x(%s)\\n\", hwnd, hrgnClip, flags, ExplainGetDCExFlags(flags));\n\treturn sGetDC(hwnd, \"GDI.GetDCEx\");\n}\n\nHDC WINAPI extGDIGetWindowDC(HWND hwnd)\n{\n\tOutTraceDW(\"GDI.GetWindowDC: hwnd=%x\\n\", hwnd);\n\n\t// if not fullscreen or not desktop win, just proxy the call\n\tif(!dxw.IsFullScreen() || !dxw.IsDesktop(hwnd)){\n\t\tHDC ret;\n\t\tret=(*pGDIGetWindowDC)(hwnd);\n\t\tOutTraceDW(\"GDI.GetWindowDC: hwnd=%x hdc=%x\\n\", hwnd, ret);\n\t\treturn ret;\n\t}\n\n\treturn sGetDC(hwnd, \"GDI.GetWindowDC\");\n}\n\nint WINAPI extGDIReleaseDC(HWND hwnd, HDC hDC)\n{\n\tint res;\n\n\tOutTraceDW(\"GDI.ReleaseDC: hwnd=%x hdc=%x\\n\", hwnd, hDC);\n\n\tif (dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd();\n\tif(hwnd == 0) return(TRUE);\n\n\tswitch(dxw.GDIEmulationMode){\n\t\tcase GDIMODE_EMULATED:\n\t\t\tres=dxw.ReleaseEmulatedDC(hwnd);\n\t\t\tbreak;\n\t\tcase GDIMODE_SHAREDDC:\n\t\tcase GDIMODE_STRETCHED:\n\t\tdefault:\n\t\t\tres=(*pGDIReleaseDC)(hwnd, hDC);\n\t\t\tbreak;\n\t}\n\n\tif (!res) OutTraceE(\"GDI.ReleaseDC ERROR: err=%d at %d\\n\", GetLastError(), __LINE__);\n\treturn(res);\n}\n\nHDC WINAPI extBeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint)\n{\n\tHDC hdc;\n\n\tOutTraceDW(\"GDI.BeginPaint: hwnd=%x lpPaint=%x FullScreen=%x\\n\", hwnd, lpPaint, dxw.IsFullScreen());\n\n\t// avoid access to real desktop\n\tif(dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd();\n\n\thdc=(*pBeginPaint)(hwnd, lpPaint);\n\n\t// if not in fullscreen mode, that's all!\n\tif(!dxw.IsFullScreen()) return hdc;\n\n\tswitch(dxw.GDIEmulationMode){\n\t\tcase GDIMODE_STRETCHED:\n\t\t\tif(dxw.dwFlags1 & CLIENTREMAPPING) dxw.UnmapClient(&(RECT)(lpPaint->rcPaint));\n\t\t\tbreak;\n\t\tcase GDIMODE_EMULATED:\n\t\t\tHDC EmuHDC; \n\t\t\tEmuHDC = dxw.AcquireEmulatedDC(hwnd); \n\t\t\tif(!DeleteObject(lpPaint->hdc)) \n\t\t\t\tOutTraceE(\"BeginPaint: DeleteObject ERROR hdc=%x err=%d at %d\\n\", lpPaint->hdc, GetLastError(), __LINE__);\n\t\t\tlpPaint->hdc=EmuHDC;\n\t\t\thdc = EmuHDC;\n\t\t\tbreak;\n\t\tcase GDIMODE_SHAREDDC:\n#if 0\n\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\tlpPaint->hdc = sdc.GetHdc();\n\t\t\t(*pBeginPaint)(hwnd, lpPaint);\n\t\t\tlpPaint->hdc = hdc;\n\t\t\tsdc.PutPrimaryDC(hdc, FALSE);\n#endif\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\tOutTraceDW(\"GDI.BeginPaint: hdc=%x rcPaint=(%d,%d)-(%d,%d)\\n\", \n\t\thdc, lpPaint->rcPaint.left, lpPaint->rcPaint.top, lpPaint->rcPaint.right, lpPaint->rcPaint.bottom);\n\treturn hdc;\n}\n\nBOOL WINAPI extEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint)\n{\n\tBOOL ret;\n\n\tOutTraceDW(\"GDI.EndPaint: hwnd=%x lpPaint=%x lpPaint.hdc=%x lpPaint.rcpaint=(%d,%d)-(%d,%d)\\n\", \n\t\thwnd, lpPaint, lpPaint->hdc, lpPaint->rcPaint.left, lpPaint->rcPaint.top, lpPaint->rcPaint.right, lpPaint->rcPaint.bottom);\n\n\t// if not fullscreen or not desktop win, just proxy the call\n\tif(!dxw.IsFullScreen()){\n\t\tret=(*pEndPaint)(hwnd, lpPaint);\n\t\treturn ret;\n\t}\n\n\t// avoid access to real desktop\n\tif(dxw.IsRealDesktop(hwnd)) hwnd=dxw.GethWnd();\n\t\tdxw.HandleFPS(); // handle refresh delays\n\t\tswitch(dxw.GDIEmulationMode){\n\t\tcase GDIMODE_EMULATED:\n\t\t\tret=dxw.ReleaseEmulatedDC(hwnd);\n\t\t\tbreak;\n\t\tcase GDIMODE_SHAREDDC:\n#if 1\n\t\t\tif(lpPaint) dxw.MapClient((LPRECT)&(lpPaint->rcPaint));\n\t\t\tret=(*pEndPaint)(hwnd, lpPaint);\n#else\n\t\t\tPAINTSTRUCT Paint;\n\t\t\tPaint = *lpPaint;\n\t\t\tPaint.hdc = sdc.GetHdc();\n\t\t\t(*pEndPaint)(hwnd, &Paint);\n\t\t\tif(lpPaint) dxw.MapClient((LPRECT)&(lpPaint->rcPaint));\n\t\t\tret=(*pEndPaint)(hwnd, lpPaint);\n#endif\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tret=(*pEndPaint)(hwnd, lpPaint);\n\t\t\tbreak;\n\t}\n\n\tif(ret){\n\t\tOutTraceDW(\"GDI.EndPaint: hwnd=%x ret=%x\\n\", hwnd, ret);\n\t}\n\telse{\n\t\tOutTraceE(\"GDI.EndPaint ERROR: err=%d at %d\\n\", GetLastError(), __LINE__);\n\t}\n\n\treturn ret;\n}\n\nHWND WINAPI extCreateDialogIndirectParam(HINSTANCE hInstance, LPCDLGTEMPLATE lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM lParamInit)\n{\n\tHWND RetHWND;\n\n\tOutTraceDW(\"CreateDialogIndirectParam: hInstance=%x lpTemplate=(style=%x extstyle=%x items=%d pos=(%d,%d) size=(%dx%d)) hWndParent=%x lpDialogFunc=%x lParamInit=%x\\n\",\n\t\thInstance, \n\t\tlpTemplate->style, lpTemplate->dwExtendedStyle, lpTemplate->cdit, lpTemplate->x, lpTemplate->y, lpTemplate->cx, lpTemplate->cy,\n\t\thWndParent, lpDialogFunc, lParamInit);\n\t\n\tif(dxw.IsFullScreen() && dxw.IsRealDesktop(hWndParent)) hWndParent=dxw.GethWnd();\n\t\n\tRetHWND=(*pCreateDialogIndirectParam)(hInstance, lpTemplate, hWndParent, lpDialogFunc, lParamInit);\n\n\t// v2.02.73: redirect lpDialogFunc only when it is nor NULL: fix for \"LEGO Stunt Rally\"\n\tif(lpDialogFunc && (dxw.dwFlags8 & HOOKDLGWIN)){\t// v2.03.41 - debug option\n\t\tdxwws.PutProc(RetHWND, (WNDPROC)lpDialogFunc);\n\t\tif(!(*pSetWindowLong)(RetHWND, DWL_DLGPROC, (LONG)extDialogWindowProc))\n\t\t\tOutTraceE(\"SetWindowLong: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t}\n\n\tOutTraceDW(\"CreateDialogIndirectParam: hwnd=%x\\n\", RetHWND);\n\treturn RetHWND;\n}\n\nHWND WINAPI extCreateDialogParam(HINSTANCE hInstance, LPCTSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM lParamInit)\n{\n\tHWND RetHWND;\n\tOutTraceDW(\"CreateDialogParam: hInstance=%x lpTemplateName=%s hWndParent=%x lpDialogFunc=%x lParamInit=%x\\n\",\n\t\thInstance, sTemplateName(lpTemplateName), hWndParent, lpDialogFunc, lParamInit);\n\t\n\tif(dxw.IsFullScreen() && dxw.IsRealDesktop(hWndParent)) hWndParent=dxw.GethWnd();\n\t\n\tRetHWND=(*pCreateDialogParam)(hInstance, lpTemplateName, hWndParent, lpDialogFunc, lParamInit);\n\n\t// v2.02.73: redirect lpDialogFunc only when it is nor NULL: fix for \"LEGO Stunt Rally\"\n\t// v2.04.18: HOOKDLGWIN (not to be checked to fix \"PBA Bowling 2\")\n\tif(lpDialogFunc && (dxw.dwFlags8 & HOOKDLGWIN)){\t// v2.03.41 - debug option\n\t\tdxwws.PutProc(RetHWND, (WNDPROC)lpDialogFunc);\n\t\tif(!(*pSetWindowLong)(RetHWND, DWL_DLGPROC, (LONG)extDialogWindowProc))\n\t\t\tOutTraceE(\"SetWindowLong: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\t}\n\n\tOutTraceDW(\"CreateDialogParam: hwnd=%x\\n\", RetHWND);\n\treturn RetHWND;\n}\n\nBOOL WINAPI extMoveWindow(HWND hwnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint)\n{\n\tBOOL ret;\n\tOutTraceDW(\"MoveWindow: hwnd=%x xy=(%d,%d) size=(%d,%d) repaint=%x fullscreen=%x\\n\",\n\t\thwnd, X, Y, nWidth, nHeight, bRepaint, dxw.IsFullScreen());\n\n\tif(dxw.Windowize && !InMainWinCreation){\n\t\tif(dxw.IsDesktop(hwnd)){\n\t\t\t// v2.1.93: happens in \"Emergency Fighters for Life\" ...\n\t\t\t// what is the meaning of this? is it related to video stretching?\n\t\t\t\tOutTraceDW(\"MoveWindow: prevent moving desktop win\\n\");\n\t\t\t\treturn TRUE;\n\t\t\t}\n\n\t\tif((hwnd==dxw.GethWnd()) || (hwnd==dxw.hParentWnd)){\n\t\t\t\tOutTraceDW(\"MoveWindow: prevent moving main win\\n\");\n\t\t\t\treturn TRUE;\n\t\t\t}\n\n\t\tif (dxw.IsFullScreen() && (dxw.dwFlags1 & CLIENTREMAPPING)){\n\t\t\tPOINT upleft={0,0};\n\t\t\tRECT client;\n\t\t\tBOOL isChild;\n\t\t\t(*pClientToScreen)(dxw.GethWnd(),&upleft);\n\t\t\t(*pGetClientRect)(dxw.GethWnd(),&client);\n\t\t\tif ((*pGetWindowLong)(hwnd, GWL_STYLE) & WS_CHILD){\n\t\t\t\tisChild=TRUE;\n\t\t\t\t// child coordinate adjustement\n\t\t\t\tX = (X * client.right) / dxw.GetScreenWidth();\n\t\t\t\tY = (Y * client.bottom) / dxw.GetScreenHeight();\n\t\t\t\tnWidth = (nWidth * client.right) / dxw.GetScreenWidth();\n\t\t\t\tnHeight = (nHeight * client.bottom) / dxw.GetScreenHeight();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tisChild=FALSE;\n\t\t\t\t// regular win coordinate adjustement\n\t\t\t\tX = upleft.x + (X * client.right) / dxw.GetScreenWidth();\n\t\t\t\tY = upleft.y + (Y * client.bottom) / dxw.GetScreenHeight();\n\t\t\t\tnWidth = (nWidth * client.right) / dxw.GetScreenWidth();\n\t\t\t\tnHeight = (nHeight * client.bottom) / dxw.GetScreenHeight();\n\t\t\t}\n\t\t\tOutTraceDW(\"MoveWindow: DEBUG client=(%d,%d) screen=(%d,%d)\\n\",\n\t\t\t\tclient.right, client.bottom, dxw.GetScreenWidth(), dxw.GetScreenHeight());\n\t\t\tOutTraceDW(\"MoveWindow: hwnd=%x child=%x relocated to xy=(%d,%d) size=(%d,%d)\\n\",\n\t\t\t\thwnd, isChild, X, Y, nWidth, nHeight);\n\t\t}\n\t\telse{\n\t\t\tif((X==0)&&(Y==0)&&(nWidth==dxw.GetScreenWidth())&&(nHeight==dxw.GetScreenHeight())){\n\t\t\t\t// evidently, this was supposed to be a fullscreen window....\n\t\t\t\tRECT screen;\n\t\t\t\tDWORD dwStyle;\n\t\t\t\tPOINT upleft = {0,0};\n\t\t\t\tchar *sStyle;\n\t\t\t\t(*pGetClientRect)(dxw.GethWnd(),&screen);\n\t\t\t\t(*pClientToScreen)(dxw.GethWnd(),&upleft);\n\t\t\t\tif((dwStyle=(*pGetWindowLong)(hwnd, GWL_STYLE)) && WS_CHILDWINDOW){\n\t\t\t\t\t// Big main child window: see \"Reah\"\n\t\t\t\t\tX=Y=0;\n\t\t\t\t\tsStyle=\"(child) \";\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\t// Regular big main window, usual case.\n\t\t\t\t\tX=upleft.x;\n\t\t\t\t\tY=upleft.y;\n\t\t\t\t\tsStyle=\"\";\n\t\t\t\t}\n\t\t\t\tnWidth=screen.right;\n\t\t\t\tnHeight=screen.bottom;\n\t\t\t\tif (dxw.dwFlags7 & ANCHORED){ \n\t\t\t\t\tWINDOWPOS MaxPos;\n\t\t\t\t\tdxw.CalculateWindowPos(hwnd, dxw.iSizX, dxw.iSizY, &MaxPos);\n\t\t\t\t\tnWidth = MaxPos.cx;\n\t\t\t\t\tnHeight = MaxPos.cy;\n\t\t\t\t\tX  = MaxPos.x;\n\t\t\t\t\tY  = MaxPos.y;\n\t\t\t\t}\t\n\t\t\t\tOutTraceDW(\"MoveWindow: fixed BIG %swin pos=(%d,%d) size=(%d,%d)\\n\", sStyle, X, Y, nWidth, nHeight);\n\t\t\t}\n\t\t}\n\t}\n\n\tret=(*pMoveWindow)(hwnd, X, Y, nWidth, nHeight, bRepaint);\n\tif(!ret) OutTraceE(\"MoveWindow: ERROR err=%d at %d\\n\", GetLastError(), __LINE__);\n\tif(dxw.bAutoScale) dxw.AutoScale();\n\treturn ret;\n} \n\nint WINAPI extShowCursor(BOOL bShow)\n{\n\tstatic int iFakeCounter;\n\tint ret;\n\n\tOutTraceC(\"ShowCursor: bShow=%x\\n\", bShow);\n\tif (bShow){\n\t\tif (dxw.dwFlags1 & HIDEHWCURSOR){\n\t\t\tiFakeCounter++;\n\t\t\tOutTraceC(\"ShowCursor: HIDEHWCURSOR ret=%x\\n\", iFakeCounter);\n\t\t\treturn iFakeCounter;\n\t\t}\n\t}\n\telse {\n\t\tif (dxw.dwFlags2 & SHOWHWCURSOR){\n\t\t\tiFakeCounter--;\n\t\t\tOutTraceC(\"ShowCursor: SHOWHWCURSOR ret=%x\\n\", iFakeCounter);\n\t\t\treturn iFakeCounter;\n\t\t}\n\t}\n\tret=(*pShowCursor)(bShow);\n\tOutTraceC(\"ShowCursor: ret=%x\\n\", ret);\n\treturn ret;\n}\n\nBOOL WINAPI extDrawFocusRect(HDC hDC, const RECT *lprc)\n{\n\treturn TRUE;\n}\n\nBOOL WINAPI extScrollDC(HDC hdc, int dx, int dy, const RECT *lprcScroll, const RECT *lprcClip, HRGN hrgnUpdate, LPRECT lprcUpdate)\n{\n\tBOOL res;\n\tif(IsTraceDW){\n\t\tchar sRect[81];\n\t\tif(lprcScroll) sprintf(sRect, \"(%d,%d)-(%d,%d)\", lprcScroll->left, lprcScroll->top, lprcScroll->right, lprcScroll->bottom);\n\t\telse strcpy(sRect, \"NULL\");\n\t\tchar sClip[81];\n\t\tif(lprcClip) sprintf(sClip, \"(%d,%d)-(%d,%d)\", lprcClip->left, lprcClip->top, lprcClip->right, lprcClip->bottom);\n\t\telse strcpy(sClip, \"NULL\");\n\t\tOutTraceDW(\"ScrollDC: hdc=%x dxy=(%d,%d) scrollrect=%s cliprect=%s hrgn=%x\\n\", \n\t\t\thdc, dx, dy, sRect, sClip, hrgnUpdate);\n\t}\n\n\tif(dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tres=(*pScrollDC)(sdc.GetHdc(), dx, dy, lprcScroll, lprcClip, hrgnUpdate, lprcUpdate);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, lprcUpdate->left, lprcUpdate->top, lprcUpdate->right-lprcUpdate->left, lprcUpdate->bottom-lprcUpdate->top);\n\t\t\t\treturn res;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n#if 0\n\t\t\t\t// not working with 688(I) sonar !!!\n\t\t\t\tif(dxw.IsVirtual(hdc)){\n\t\t\t\t\tRECT rcScroll, rcClip;\n\t\t\t\t\tif(lprcScroll) {\n\t\t\t\t\t\trcScroll = *lprcScroll;\n\t\t\t\t\t\tOffsetRect(&rcScroll, dxw.VirtualOffsetX, dxw.VirtualOffsetY);\n\t\t\t\t\t}\n\t\t\t\t\tif(lprcClip) {\n\t\t\t\t\t\trcClip = *lprcClip;\n\t\t\t\t\t\tOffsetRect(&rcClip, dxw.VirtualOffsetX, dxw.VirtualOffsetY);\n\t\t\t\t\t}\n\t\t\t\t\tres=(*pScrollDC)(hdc, dx, dy, &rcScroll, &rcClip, hrgnUpdate, lprcUpdate);\n\t\t\t\t\treturn res;\t\n\t\t\t\t}\n#endif\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tres=(*pScrollDC)(hdc, dx, dy, lprcScroll, lprcClip, hrgnUpdate, lprcUpdate);\n\treturn res;\t\n}\n\nHWND WINAPI extGetTopWindow(HWND hwnd)\n{\n\tHWND ret;\n\tOutTraceDW(\"GetTopWindow: hwnd=%x fullscreen=%x\\n\", hwnd, dxw.IsFullScreen()); \n\t// a fullscreen program is supposed to be always top Z-order on the desktop!\n\tret = (dxw.IsFullScreen() && dxw.IsDesktop(hwnd) && (dxw.dwFlags8 & PRETENDVISIBLE)) ? dxw.GethWnd() : (*pGetTopWindow)(hwnd);\n\tOutTraceDW(\"GetTopWindow: ret=%x\\n\", ret); \n\treturn ret;\n}\n\nLONG WINAPI extTabbedTextOutA(HDC hdc, int X, int Y, LPCTSTR lpString, int nCount, int nTabPositions, const LPINT lpnTabStopPositions, int nTabOrigin)\n{\n\tBOOL res;\n\tOutTraceDW(\"TabbedTextOut: hdc=%x xy=(%d,%d) nCount=%d nTP=%d nTOS=%d str=(%d)\\\"%s\\\"\\n\", \n\t\thdc, X, Y, nCount, nTabPositions, nTabOrigin, lpString);\n\n\tif(dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tres=(*pTabbedTextOutA)(sdc.GetHdc(), X, Y, lpString, nCount, nTabPositions, lpnTabStopPositions, nTabOrigin);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn res;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&X, &Y);\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\tif(dxw.IsVirtual(hdc)){\n\t\t\t\t\tX+=dxw.VirtualOffsetX;\n\t\t\t\t\tY+=dxw.VirtualOffsetY;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tOutTraceDW(\"TabbedTextOutA: fixed dest=(%d,%d)\\n\", X, Y);\n\t}\n\n\tres=(*pTabbedTextOutA)(hdc, X, Y, lpString, nCount, nTabPositions, lpnTabStopPositions, nTabOrigin);\n\treturn res;\n}\n\nLONG WINAPI extTabbedTextOutW(HDC hdc, int X, int Y, LPCWSTR lpString, int nCount, int nTabPositions, const LPINT lpnTabStopPositions, int nTabOrigin)\n{\n\tBOOL res;\n\tOutTraceDW(\"TabbedTextOutW: hdc=%x xy=(%d,%d) nCount=%d nTP=%d nTOS=%d str=(%d)\\\"%ls\\\"\\n\", \n\t\thdc, X, Y, nCount, nTabPositions, nTabOrigin, lpString);\n\n\tif(dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tres=(*pTabbedTextOutW)(sdc.GetHdc(), X, Y, lpString, nCount, nTabPositions, lpnTabStopPositions, nTabOrigin);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn res;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&X, &Y);\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_EMULATED:\n\t\t\t\tif(dxw.IsVirtual(hdc)){\n\t\t\t\t\tX+=dxw.VirtualOffsetX;\n\t\t\t\t\tY+=dxw.VirtualOffsetY;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tOutTraceDW(\"TabbedTextOutW: fixed dest=(%d,%d)\\n\", X, Y);\n\t}\n\n\tres=(*pTabbedTextOutW)(hdc, X, Y, lpString, nCount, nTabPositions, lpnTabStopPositions, nTabOrigin);\n\treturn res;\n}\n\nBOOL WINAPI extDestroyWindow(HWND hWnd)\n{\n\t// v2.02.43: \"Empire Earth\" builds test surfaces that must be destroyed!\n\t// v2.03.20: \"Prince of Persia 3D\" destroys the main window that must be preserved! \n\tBOOL res;\n\n\tOutTraceB(\"DestroyWindow: hwnd=%x\\n\", hWnd);\n\tif (hWnd == dxw.GethWnd()) {\n\t\tOutTraceDW(\"DestroyWindow: destroy main hwnd=%x\\n\", hWnd);\n\t\tif(hLastFullScrWin){\n\t\t\tOutTraceDW(\"DestroyWindow: revert to main hwnd=%x bpp=%d\\n\", \n\t\t\t\thWnd, ddpLastPixelFormat.dwRGBBitCount);\n\t\t\tdxw.SethWnd(hLastFullScrWin);\n\t\t\thLastFullScrWin = NULL;\n\t\t\tdxw.VirtualPixelFormat = ddpLastPixelFormat;\n\t\t\textern int iBakBufferVersion;\n\t\t\tSetBltTransformations(iBakBufferVersion);\n\t\t}\n\t\telse {\n\t\t\tOutTraceDW(\"DestroyWindow: destroy main hwnd=%x\\n\", hWnd);\n\t\t\tdxw.SethWnd(NULL);\n\t\t}\n\n\t\tif(dxw.dwFlags6 & NODESTROYWINDOW) {\n\t\t\tOutTraceDW(\"DestroyWindow: do NOT destroy main hwnd=%x\\n\", hWnd);\n\t\t\treturn TRUE;\n\t\t}\n\t}\n\tif (hControlParentWnd && (hWnd == hControlParentWnd)) {\n\t\tOutTraceDW(\"DestroyWindow: destroy control parent hwnd=%x\\n\", hWnd);\n\t\thControlParentWnd = NULL;\n\t}\n\tres=(*pDestroyWindow)(hWnd);\n\tif(!res)OutTraceE(\"DestroyWindow: ERROR err=%d\\n\", GetLastError());\n\n\tif(dxw.dwFlags7 & NOWINERRORS) return TRUE; // v2.03.69: suppress unessential errors\n\treturn res;\n}\n\nstatic char *ExplainTAAlign(UINT c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"TA_\");\n\tstrcat(eb, (c & TA_UPDATECP) ? \"UPDATECP+\" : \"NOUPDATECP+\");\n\tstrcat(eb, (c & TA_RIGHT) ? (((c & TA_CENTER) == TA_CENTER) ? \"CENTER+\" : \"RIGHT+\") : \"LEFT+\");\n\tstrcat(eb, (c & TA_BOTTOM) ? \"BOTTOM+\" : \"TOP+\");\n\tif ((c & TA_BASELINE)==TA_BASELINE) strcat(eb, \"BASELINE+\");\n\tif (c & TA_RTLREADING) strcat(eb, \"RTLREADING+\");\n\tl=strlen(eb);\n\teb[l-1]=0; \n\treturn(eb);\n}\n\nstatic char *ExplainDTFormat(UINT c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"DT_\");\n\tif(!(c & (DT_CENTER|DT_RIGHT))) strcat(eb, \"LEFT+\");\n\tif(c & DT_CENTER) strcat(eb, \"CENTER+\");\n\tif(c & DT_RIGHT) strcat(eb, \"RIGHT+\");\n\tif(!(c & (DT_VCENTER|DT_BOTTOM))) strcat(eb, \"TOP+\");\n\tif(c & DT_VCENTER) strcat(eb, \"VCENTER+\");\n\tif(c & DT_BOTTOM) strcat(eb, \"BOTTOM+\");\n\tif(c & DT_WORDBREAK) strcat(eb, \"WORDBREAK+\");\n\tif(c & DT_SINGLELINE) strcat(eb, \"SINGLELINE+\");\n\tif(c & DT_EXPANDTABS) strcat(eb, \"EXPANDTABS+\");\n\tif(c & DT_TABSTOP) strcat(eb, \"TABSTOP+\");\n\tif(c & DT_NOCLIP) strcat(eb, \"NOCLIP+\");\n\tif(c & DT_EXTERNALLEADING) strcat(eb, \"EXTERNALLEADING+\");\n\tif(c & DT_CALCRECT) strcat(eb, \"CALCRECT+\");\n\tif(c & DT_NOPREFIX) strcat(eb, \"NOPREFIX+\");\n\tif(c & DT_INTERNAL) strcat(eb, \"INTERNAL+\");\n\tl=strlen(eb);\n\teb[l-1]=0; \n\treturn(eb);\n}\n\nBOOL gFixed;\n\nint WINAPI extDrawTextA(HDC hdc, LPCTSTR lpchText, int nCount, LPRECT lpRect, UINT uFormat)\n{\n\tint ret;\n\tOutTraceDW(\"DrawTextA: hdc=%x rect=(%d,%d)-(%d,%d) Format=%x(%s) Text=(%d)\\\"%s\\\"\\n\", \n\t\thdc, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, uFormat, ExplainDTFormat(uFormat), nCount, lpchText);\n    gFixed = TRUE; // semaphore to avoid multiple scaling with HOT patching\n\tif(dxw.IsToRemap(hdc)){\n\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pDrawTextA)(sdc.GetHdc(), lpchText, nCount, lpRect, uFormat);\n\t\t\t\tif(nCount)\n\t\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, lpRect->left, lpRect->top, lpRect->right-lpRect->left, lpRect->bottom-lpRect->top);\n\t\t\t\telse {\n\t\t\t\t\tsdc.PutPrimaryDC(hdc, FALSE); // Diablo makes a DrawText of null string in the intro ...\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient((RECT *)lpRect);\n\t\t\t\tOutTraceDW(\"DrawTextA: fixed rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t\t\t\tret=(*pDrawTextA)(hdc, lpchText, nCount, lpRect, uFormat);\n\t\t\t\tdxw.UnmapClient((RECT *)lpRect);\n\t\t\t\tOutTraceDW(\"DrawTextA: fixed output rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tret=(*pDrawTextA)(hdc, lpchText, nCount, lpRect, uFormat);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse {\n\t\tret=(*pDrawTextA)(hdc, lpchText, nCount, lpRect, uFormat);\n\t}\n\tgFixed = FALSE;\n\n\t// if nCount is zero, DrawRect returns 0 as text heigth, but this is not an error! (ref. \"Imperialism II\")\n\tif(nCount && !ret) OutTraceE(\"DrawTextA: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nint WINAPI extDrawTextExA(HDC hdc, LPTSTR lpchText, int nCount, LPRECT lpRect, UINT dwDTFormat, LPDRAWTEXTPARAMS lpDTParams)\n{\n\tint ret;\n\tOutTraceDW(\"DrawTextExA: hdc=%x rect=(%d,%d)-(%d,%d) DTFormat=%x Text=(%d)\\\"%s\\\"\\n\", \n\t\thdc, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, dwDTFormat, nCount, lpchText);\n\tif (IsDebug){\n        if(lpDTParams)\n              OutTrace(\"DTParams: size=%d (L,R)margins=(%d,%d) TabLength=%d lDrawn=%d\\n\",\n              lpDTParams->cbSize, lpDTParams->iLeftMargin, lpDTParams->iRightMargin,\n              lpDTParams->iTabLength, lpDTParams->uiLengthDrawn);\n        else\n              OutTrace(\"DTParams: NULL\\n\");\n\t}\n\n    gFixed = TRUE; // semaphore to avoid multiple scaling with HOT patching\n\tif(dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pDrawTextExA)(sdc.GetHdc(), lpchText, nCount, lpRect, dwDTFormat, lpDTParams);\n\t\t\t\tif(nCount)\n\t\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, lpRect->left, lpRect->top, lpRect->right-lpRect->left, lpRect->bottom-lpRect->top);\n\t\t\t\telse\n\t\t\t\t\tsdc.PutPrimaryDC(hdc, FALSE); // in cases like Diablo that makes a DrawText of null string in the intro ...\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient((RECT *)lpRect);\n\t\t\t\tOutTraceDW(\"DrawTextA: fixed rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t\t\t\tret=(*pDrawTextExA)(hdc, lpchText, nCount, lpRect, dwDTFormat, lpDTParams);\n\t\t\t\tdxw.UnmapClient((RECT *)lpRect);\n\t\t\t\tOutTraceDW(\"DrawTextA: fixed output rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tret=(*pDrawTextExA)(hdc, lpchText, nCount, lpRect, dwDTFormat, lpDTParams);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse {\n\t\tret=(*pDrawTextExA)(hdc, lpchText, nCount, lpRect, dwDTFormat, lpDTParams);\n\t}\n\tgFixed = FALSE;\n\n\t// if nCount is zero, DrawRect returns 0 as text heigth, but this is not an error! (ref. \"Imperialism II\")\n\tif(nCount && !ret) OutTraceE(\"DrawTextA: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nint WINAPI extDrawTextW(HDC hdc, LPCWSTR lpchText, int nCount, LPRECT lpRect, UINT uFormat)\n{\n\tint ret;\n\tOutTraceDW(\"DrawTextW: hdc=%x rect=(%d,%d)-(%d,%d) Format=%x(%s) Text=(%d)\\\"%ls\\\"\\n\", \n\t\thdc, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, uFormat, ExplainDTFormat(uFormat), nCount, lpchText);\n\n    gFixed = TRUE; // semaphore to avoid multiple scaling with HOT patching\n\tif(dxw.IsToRemap(hdc)){\n\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pDrawTextW)(sdc.GetHdc(), lpchText, nCount, lpRect, uFormat);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, lpRect->left, lpRect->top, lpRect->right-lpRect->left, lpRect->bottom-lpRect->top);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient((RECT *)lpRect);\n\t\t\t\tOutTraceDW(\"DrawTextW: fixed rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t\t\t\tret=(*pDrawTextW)(hdc, lpchText, nCount, lpRect, uFormat);\n\t\t\t\tdxw.UnmapClient((RECT *)lpRect);\n\t\t\t\tOutTraceDW(\"DrawTextW: fixed output rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tret=(*pDrawTextW)(hdc, lpchText, nCount, lpRect, uFormat);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse {\n\t\tret=(*pDrawTextW)(hdc, lpchText, nCount, lpRect, uFormat);\n\t}\n\tgFixed = FALSE;\n\n\t// if nCount is zero, DrawRect returns 0 as text heigth, but this is not an error! (ref. \"Imperialism II\")\n\tif(nCount && !ret) OutTraceE(\"DrawTextW: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nint WINAPI extDrawTextExW(HDC hdc, LPCWSTR lpchText, int nCount, LPRECT lpRect, UINT dwDTFormat, LPDRAWTEXTPARAMS lpDTParams)\n{\n\tint ret;\n\tOutTraceDW(\"DrawTextExW: hdc=%x rect=(%d,%d)-(%d,%d) DTFormat=%x Text=(%d)\\\"%ls\\\"\\n\", \n\t\thdc, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, dwDTFormat, nCount, lpchText);\n       if (IsDebug){\n            if(lpDTParams)\n                  OutTrace(\"DTParams: size=%d (L,R)margins=(%d,%d) TabLength=%d lDrawn=%d\\n\",\n                  lpDTParams->cbSize, lpDTParams->iLeftMargin, lpDTParams->iRightMargin,\n                  lpDTParams->iTabLength, lpDTParams->uiLengthDrawn);\n            else\n                  OutTrace(\"DTParams: NULL\\n\");\n      }\n\n    gFixed = TRUE; // semaphore to avoid multiple scaling with HOT patching\n\tif(dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC:\n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pDrawTextExW)(sdc.GetHdc(), lpchText, nCount, lpRect, dwDTFormat, lpDTParams);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, lpRect->left, lpRect->top, lpRect->right-lpRect->left, lpRect->bottom-lpRect->top);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient((RECT *)lpRect);\n\t\t\t\tOutTraceDW(\"DrawTextExW: fixed rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t\t\t\tret=(*pDrawTextExW)(hdc, lpchText, nCount, lpRect, dwDTFormat, lpDTParams);\n\t\t\t\tdxw.UnmapClient((RECT *)lpRect);\n\t\t\t\tOutTraceDW(\"DrawTextExW: fixed output rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tret=(*pDrawTextExW)(hdc, lpchText, nCount, lpRect, dwDTFormat, lpDTParams);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\telse {\n\t\tret=(*pDrawTextExW)(hdc, lpchText, nCount, lpRect, dwDTFormat, lpDTParams);\n\t}\n\tgFixed = FALSE;\n\n\t// if nCount is zero, DrawRect returns 0 as text heigth, but this is not an error! (ref. \"Imperialism II\")\n\tif(nCount && !ret) OutTraceE(\"DrawTextExW: ERROR ret=%x err=%d\\n\", ret, GetLastError()); \n\treturn ret;\n}\n\nBOOL WINAPI extCloseWindow(HWND hWnd)\n{\n\t// from MSDN: Minimizes (but does not destroy) the specified window.\n\tBOOL res;\n\tOutTraceB(\"CloseWindow: hwnd=%x\\n\", hWnd);\n\tif (hWnd == dxw.GethWnd()) {\n\t\tOutTraceDW(\"CloseWindow: close main hwnd=%x\\n\", hWnd);\n\t\t// do not delete the reference to main hWnd.\n\t}\n\tres=(*pCloseWindow)(hWnd);\n\tif(!res)OutTraceE(\"CloseWindow: ERROR err=%d\\n\", GetLastError());\n\treturn res;\n}\n\nBOOL WINAPI extSetSysColors(int cElements, const INT *lpaElements, const COLORREF *lpaRgbValues)\n{\n\t// v2.02.32: added to avoid SysColors changes by \"Western Front\"\n\tBOOL ret;\n\tOutTraceDW(\"SetSysColors: Elements=%d\\n\", cElements);\n\n\tif(dxw.dwFlags3 & LOCKSYSCOLORS) return TRUE;\n\n\tret=(*pSetSysColors)(cElements, lpaElements, lpaRgbValues);\n\tif(!ret) OutTraceE(\"SetSysColors: ERROR er=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extUpdateWindow(HWND hwnd)\n{\n\tBOOL ret;\n\tOutTraceDW(\"UpdateWindow: hwnd=%x\\n\", hwnd);\n\n\tif(dxw.Windowize && dxw.IsRealDesktop(hwnd)){\n\t\tOutTraceDW(\"UpdateWindow: remapping hwnd=%x->%x\\n\", hwnd, dxw.GethWnd());\n\t\thwnd=dxw.GethWnd();\n\t}\n\n\tret=(*pUpdateWindow)(hwnd);\n\tif(!ret) OutTraceE(\"UpdateWindow: ERROR err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nstatic char *sRedrawFlags(UINT flags)\n{\n\tstatic char s[256];\n\tstrcpy(s, \"RDW_\");\n\tif(flags & RDW_ERASE) strcat(s, \"ERASE+\");\n\tif(flags & RDW_FRAME) strcat(s, \"FRAME+\");\n\tif(flags & RDW_INTERNALPAINT) strcat(s, \"INTERNALPAINT+\");\n\tif(flags & RDW_INVALIDATE) strcat(s, \"INVALIDATE+\");\n\tif(flags & RDW_NOERASE) strcat(s, \"NOERASE+\");\n\tif(flags & RDW_NOFRAME) strcat(s, \"NOFRAME+\");\n\tif(flags & RDW_NOINTERNALPAINT) strcat(s, \"NOINTERNALPAINT+\");\n\tif(flags & RDW_VALIDATE) strcat(s, \"VALIDATE+\");\n\tif(flags & RDW_ERASENOW) strcat(s, \"ERASENOW+\");\n\tif(flags & RDW_UPDATENOW) strcat(s, \"UPDATENOW+\");\n\tif(flags & RDW_ALLCHILDREN) strcat(s, \"ALLCHILDREN+\");\n\tif(flags & RDW_NOCHILDREN) strcat(s, \"NOCHILDREN+\");\n\tif(strlen(s)>strlen(\"RDW_\")) s[strlen(s)-1]=0;\n\telse s[0]=0;\n\treturn s;\n}\n\nBOOL WINAPI extRedrawWindow(HWND hWnd, const RECT *lprcUpdate, HRGN hrgnUpdate, UINT flags)\n{\n\tRECT rcUpdate;\n\tBOOL ret;\n\n\tOutTraceDW(\"RedrawWindow: hwnd=%x hrgn=%x flags=%x(%s)\\n\", hWnd, hrgnUpdate, flags, sRedrawFlags(flags));\n\n\t// v2.03.64 fix: if hrgnUpdate is set, lprcUpdate is ignored, so it can't be scaled\n\t// beware: they both could be null, and that means the whole window\n\tif (!hrgnUpdate && lprcUpdate) rcUpdate = *lprcUpdate;\n\t// avoid redrawing the whole desktop\n\tif(dxw.Windowize && dxw.IsRealDesktop(hWnd)) hWnd=dxw.GethWnd();\n\tif(dxw.IsFullScreen()){\n\t\t// v2.03.64 fix: if hrgnUpdate is set, lprcUpdate is ignored, so it can't be scaled\n\t\tif (!hrgnUpdate && lprcUpdate) rcUpdate = dxw.MapClientRect((LPRECT)lprcUpdate);\n\t}\n\n\tret = (*pRedrawWindow)(hWnd, lprcUpdate ? &rcUpdate : NULL, hrgnUpdate, flags);\n\tif(ret) OutTraceE(\"RedrawWindow ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\n\nBOOL WINAPI extGetWindowPlacement(HWND hwnd, WINDOWPLACEMENT *lpwndpl)\n{\n\tBOOL ret;\n\tOutTraceDW(\"GetWindowPlacement: hwnd=%x\\n\", hwnd);\n\n\tif(dxw.IsRealDesktop(hwnd)){\n\t\tOutTraceDW(\"GetWindowPlacement: remapping hwnd=%x->%x\\n\", hwnd, dxw.GethWnd());\n\t\thwnd=dxw.GethWnd();\n\t}\n\n\tret=(*pGetWindowPlacement)(hwnd, lpwndpl);\n\tOutTraceDW(\"GetWindowPlacement: flags=%x showCmd=%x MinPosition=(%d,%d) MaxPosition=(%d,%d) NormalPosition=(%d,%d)-(%d,%d)\\n\",\n\t\tlpwndpl->flags, lpwndpl->showCmd, \n\t\tlpwndpl->ptMinPosition.x, lpwndpl->ptMinPosition.y,\n\t\tlpwndpl->ptMaxPosition.x, lpwndpl->ptMaxPosition.y,\n\t\tlpwndpl->rcNormalPosition.left, lpwndpl->rcNormalPosition.top, lpwndpl->rcNormalPosition.right, lpwndpl->rcNormalPosition.bottom);\n\n\tif (ret && dxw.Windowize && dxw.IsFullScreen()){\n\t\tlpwndpl->showCmd = SW_SHOWNORMAL;\n\t\tlpwndpl->ptMinPosition.x = -1; lpwndpl->ptMinPosition.y = -1;\n\t\tlpwndpl->ptMaxPosition.x = -1; lpwndpl->ptMaxPosition.y = -1;\n\t\tOutTrace(\"GetWindowPlacement: FIXED showCmd=%x MinPosition=(%d,%d) MaxPosition=(%d,%d) NormalPosition=(%d,%d)-(%d,%d)\\n\",\n\t\t\tlpwndpl->showCmd, \n\t\t\tlpwndpl->ptMinPosition.x, lpwndpl->ptMinPosition.y,\n\t\t\tlpwndpl->ptMaxPosition.x, lpwndpl->ptMaxPosition.y,\n\t\t\tlpwndpl->rcNormalPosition.left, lpwndpl->rcNormalPosition.top, \n\t\t\tlpwndpl->rcNormalPosition.right, lpwndpl->rcNormalPosition.bottom);\n\t}\n\n\tif(!ret) OutTraceE(\"GetWindowPlacement: ERROR er=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extSetWindowPlacement(HWND hwnd, WINDOWPLACEMENT *lpwndpl)\n{\n\tBOOL ret;\n\tOutTraceDW(\"SetWindowPlacement: hwnd=%x\\n\", hwnd);\n\n\tif(dxw.IsRealDesktop(hwnd)){\n\t\tOutTraceDW(\"SetWindowPlacement: remapping hwnd=%x->%x\\n\", hwnd, dxw.GethWnd());\n\t\thwnd=dxw.GethWnd();\n\t}\n\n\tOutTraceDW(\"SetWindowPlacement: flags=%x showCmd=%x MinPosition=(%d,%d) MaxPosition=(%d,%d) NormalPosition=(%d,%d)-(%d,%d)\\n\",\n\t\tlpwndpl->flags, lpwndpl->showCmd, \n\t\tlpwndpl->ptMinPosition.x, lpwndpl->ptMinPosition.y,\n\t\tlpwndpl->ptMaxPosition.x, lpwndpl->ptMaxPosition.y,\n\t\tlpwndpl->rcNormalPosition.left, lpwndpl->rcNormalPosition.top, lpwndpl->rcNormalPosition.right, lpwndpl->rcNormalPosition.bottom);\n\n\tswitch (lpwndpl->showCmd){\n\tcase SW_MAXIMIZE:\n\t\tif (dxw.IsFullScreen()){\n\t\t\tlpwndpl->showCmd = SW_SHOW;\n\t\t\tOutTraceDW(\"SetWindowPlacement: forcing SW_SHOW state\\n\");\n\t\t}\n\t\tbreak;\n\t}\n\tret=(*pSetWindowPlacement)(hwnd, lpwndpl);\n\tif(!ret) OutTraceE(\"SetWindowPlacement: ERROR er=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nHWND WINAPI extSetCapture(HWND hwnd)\n{\n\tHWND ret;\n\tOutTraceDW(\"SetCapture: hwnd=%x\\n\", hwnd);\n\tret=(*pSetCapture)(hwnd);\n\tOutTraceDW(\"SetCapture: ret=%x\\n\", ret);\n\treturn ret;\n}\n\nHWND WINAPI extGetActiveWindow(void)\n{\n\tHWND ret;\n\tret=(*pGetActiveWindow)();\n\tOutTraceDW(\"GetActiveWindow: ret=%x\\n\", ret);\n\tif((dxw.dwFlags8 & WININSULATION) && dxw.Windowize && dxw.IsFullScreen()) {\n\t\tOutTraceDW(\"GetActiveWindow: ret=%x->%x\\n\", ret, dxw.GethWnd());\n\t\treturn dxw.GethWnd();\n\t}\n\treturn ret;\n}\n\nHWND WINAPI extGetForegroundWindow(void)\n{\n\tHWND ret;\n\tret=(*pGetForegroundWindow)();\n\tif((dxw.dwFlags8 & WININSULATION) && dxw.Windowize && dxw.IsFullScreen()) {\n\t\tOutTraceDW(\"GetForegroundWindow: ret=%x->%x\\n\", ret, dxw.GethWnd());\n\t\treturn dxw.GethWnd();\n\t}\n\treturn ret;\n}\n\nHWND WINAPI extGetFocus(void)\n{\n\tHWND ret;\n\tret=(*pGetFocus)();\n\tOutTraceDW(\"GetFocus: ret=%x\\n\", ret);\n\treturn ret;\n}\n\nDWORD WINAPI extGetWindowThreadProcessId(HWND hWnd, LPDWORD lpdwProcessId)\n{\n\tDWORD ret;\n\tret=(*pGetWindowThreadProcessId)(hWnd, lpdwProcessId);\n\tif(lpdwProcessId) OutTraceDW(\"GetWindowThreadProcessId: pid=%x\\n\", *lpdwProcessId);\n\tOutTraceDW(\"GetWindowThreadProcessId: hwnd=%x ret=%x\\n\", hWnd, ret);\n\treturn ret;\n}\n\nHWND WINAPI extGetWindow(HWND hWnd, UINT uCmd)\n{\n\tHWND ret;\n\tret=(*pGetWindow)(hWnd, uCmd);\n\tOutTraceDW(\"GetWindow: hwnd=%x cmd=%x ret=%x\\n\", hWnd, uCmd, ret);\n\treturn ret;\n}\n\nBOOL WINAPI extIsWindow(HWND hWnd)\n{\n\tBOOL ret;\n\tret=(*pIsWindow)(hWnd);\n\tOutTraceDW(\"IsWindow: hwnd=%x ret=%x\\n\", hWnd, ret);\n\treturn ret;\n}\n\nHWND WINAPI extSetFocus(HWND hWnd)\n{\n\tHWND ret;\n\tret=(*pSetFocus)(hWnd);\n\tOutTraceDW(\"SetFocus: hwnd=%x ret=%x\\n\", hWnd, ret);\n\treturn ret;\n}\n\nBOOL WINAPI extIsWindowVisible(HWND hwnd)\n{\n\tBOOL ret;\n\tret=(*pIsWindowVisible)(hwnd);\n\tOutTraceB(\"IsWindowVisible: hwnd=%x ret=%x\\n\", hwnd, ret);\n\tif(dxw.IsDesktop(hwnd) && (dxw.dwFlags8 & PRETENDVISIBLE) && !ret){\n\t\tOutTraceDW(\"IsWindowVisible: FORCING ret=TRUE\\n\");\n\t\tret=TRUE;\n\t}\n\treturn ret;\n}\n\nBOOL WINAPI extSystemParametersInfoA(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni)\n{\n\tBOOL ret;\n\tOutTraceDW(\"SystemParametersInfoA: Action=%x Param=%x WinIni=%x\\n\", uiAction, uiParam, fWinIni);\n\tswitch(uiAction){\n\t\tcase SPI_SETKEYBOARDDELAY:\n\t\tcase SPI_SETKEYBOARDSPEED:\n\t\tcase SPI_SETSCREENSAVERRUNNING: // v2.03.75 used by Dethkarz, but not really necessary\n\t\t\tOutTraceDW(\"SystemParametersInfoA: bypass action=%x\\n\", uiAction);\n\t\t\treturn TRUE;\n\t\t\tbreak;\n\t}\n\tret=(*pSystemParametersInfoA)(uiAction, uiParam, pvParam, fWinIni);\n\tif(uiAction==SPI_GETWORKAREA){\n\t\tLPRECT cli = (LPRECT)pvParam;\n\t\t*cli = dxw.GetScreenRect();\n\t\tOutTraceDW(\"SystemParametersInfoA: resized client workarea rect=(%d,%d)-(%d,%d)\\n\", cli->left, cli->top, cli->right, cli->bottom);\n\t}\n\tif(!ret) OutTraceE(\"SystemParametersInfoA ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extSystemParametersInfoW(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni)\n{\n\tBOOL ret;\n\tOutTraceDW(\"SystemParametersInfoW: Action=%x Param=%x WinIni=%x\\n\", uiAction, uiParam, fWinIni);\n\tswitch(uiAction){\n\t\tcase SPI_SETKEYBOARDDELAY:\n\t\tcase SPI_SETKEYBOARDSPEED:\n\t\t\tOutTraceDW(\"SystemParametersInfoW: bypass action=%x\\n\", uiAction);\n\t\t\treturn TRUE;\n\t\t\tbreak;\n\t}\n\tret=(*pSystemParametersInfoW)(uiAction, uiParam, pvParam, fWinIni);\n\tif(uiAction==SPI_GETWORKAREA){\n\t\tLPRECT cli = (LPRECT)pvParam;\n\t\t*cli = dxw.GetScreenRect();\n\t\tOutTraceDW(\"SystemParametersInfoW: resized client workarea rect=(%d,%d)-(%d,%d)\\n\", cli->left, cli->top, cli->right, cli->bottom);\n\t}\n\tif(!ret) OutTraceE(\"SystemParametersInfoW ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\n#undef OutTraceDW\n#define OutTraceDW OutTrace\n\nUINT_PTR WINAPI extSetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc)\n{\n\tUINT uShiftedElapse;\n\tUINT_PTR ret;\n\t// beware: the quicker the time flows, the more the time clicks are incremented,\n\t// and the lesser the pauses must be lasting! Shift operations are reverted in\n\t// GetSystemTime vs. Sleep or SetTimer\n\tuShiftedElapse = dxw.StretchTime(uElapse);\n\tOutTraceDW(\"SetTimer: hwnd=%x TimerFunc=%x elapse=%d->%d timeshift=%d\\n\", hWnd, lpTimerFunc, uElapse, uShiftedElapse, dxw.TimeShift);\n\tret = (*pSetTimer)(hWnd, nIDEvent, uShiftedElapse, lpTimerFunc);\n\tif(ret) dxw.PushTimer(hWnd, ret, uElapse, lpTimerFunc);\n\tOutTraceDW(\"SetTimer: IDEvent=%x ret=%x\\n\", nIDEvent, ret);\n\treturn ret;\n}\n\nBOOL WINAPI extKillTimer(HWND hWnd, UINT_PTR uIDEvent)\n{\n\tBOOL ret;\n\tOutTraceDW(\"KillTimer: hwnd=%x IDEvent=%x\\n\", hWnd, uIDEvent); \n\tret = (*pKillTimer)(hWnd, uIDEvent);\n\tOutTraceDW(\"KillTimer: ret=%x\\n\", ret);\n\tif(ret) dxw.PopTimer(hWnd, uIDEvent);\n\treturn ret;\n}\n\nBOOL WINAPI extGetUpdateRect(HWND hWnd, LPRECT lpRect, BOOL bErase)\n{\n\tBOOL ret;\n\tOutTraceDW(\"GetUpdateRect: hwnd=%x Erase=%x\\n\", hWnd, bErase); \n\tret = (*pGetUpdateRect)(hWnd, lpRect, bErase);\n\tif(ret){\n\t\tOutTraceDW(\"GetUpdateRect: rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t\tif(dxw.IsFullScreen()){\n\t\t\tdxw.UnmapClient(lpRect);\n\t\t\tOutTraceDW(\"GetUpdateRect: FIXED rect=(%d,%d)-(%d,%d)\\n\", lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t\t}\n\t}\n\telse\n\t\tOutTraceE(\"GetUpdateRect ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extGetCursorInfo(PCURSORINFO pci)\n{\n\tBOOL ret;\n\tOutTraceDW(\"GetCursorInfo\\n\"); \n\tret = (*pGetCursorInfo)(pci);\n\tif(ret){\n\t\tOutTraceDW(\"GetCursorInfo: flags=%x hcursor=%x pos=(%d,%d)\\n\", pci->flags, pci->hCursor, pci->ptScreenPos.x, pci->ptScreenPos.y);\n\t\tif(dxw.IsFullScreen()){\n\t\t\tdxw.UnmapClient(&(pci->ptScreenPos));\n\t\t\tOutTraceDW(\"GetCursorInfo: FIXED pos=(%d,%d)\\n\", pci->ptScreenPos.x, pci->ptScreenPos.y);\n\t\t}\n\t}\n\telse\n\t\tOutTraceE(\"GetCursorInfo ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nHWND WINAPI extWindowFromPoint(POINT Point)\n{\n\tHWND ret;\n\tOutTraceDW(\"WindowFromPoint: point=(%d,%d)\\n\", Point.x, Point.y); \n\tif(dxw.IsFullScreen()){\n\t\tdxw.MapWindow(&Point); // v2.03.69 fix\n\t\tOutTraceDW(\"WindowFromPoint: FIXED point=(%d,%d)\\n\", Point.x, Point.y);\n\t}\n\tret = (*pWindowFromPoint)(Point);\n\tOutTraceDW(\"WindowFromPoint: hwnd=%x\\n\", ret);\n\treturn ret;\n}\n\nHWND WINAPI extChildWindowFromPoint(HWND hWndParent, POINT Point)\n{\n\tHWND ret;\n\tOutTraceDW(\"ChildWindowFromPoint: hWndParent=%x point=(%d,%d)\\n\", hWndParent, Point.x, Point.y); \n\tif(dxw.IsDesktop(hWndParent) && dxw.IsFullScreen() && dxw.Windowize){\n\t\tdxw.MapClient(&Point);\n\t\tOutTraceDW(\"ChildWindowFromPoint: FIXED point=(%d,%d)\\n\", Point.x, Point.y);\n\t}\n\tret = (*pChildWindowFromPoint)(hWndParent, Point);\n\tOutTraceDW(\"ChildWindowFromPoint: hwnd=%x\\n\", ret);\n\treturn ret;\n}\n\nHWND WINAPI extChildWindowFromPointEx(HWND hWndParent, POINT Point, UINT uFlags)\n{\n\tHWND ret;\n\tOutTraceDW(\"ChildWindowFromPoint: hWndParent=%x point=(%d,%d) flags=%x\\n\", hWndParent, Point.x, Point.y, uFlags); \n\tif(dxw.IsDesktop(hWndParent) && dxw.IsFullScreen() && dxw.Windowize){\n\t\tdxw.UnmapClient(&Point);\n\t\tOutTraceDW(\"ChildWindowFromPointEx: FIXED point=(%d,%d)\\n\", Point.x, Point.y);\n\t}\n\tret = (*pChildWindowFromPointEx)(hWndParent, Point, uFlags);\n\tOutTraceDW(\"ChildWindowFromPointEx: hwnd=%x\\n\", ret);\n\treturn ret;\n}\n\nBOOL extGetMonitorInfo(HMONITOR hMonitor, LPMONITORINFO lpmi, GetMonitorInfo_Type pGetMonitorInfo)\n{\n\tBOOL res;\n\tOutTraceDW(\"GetMonitorInfo: hMonitor=%x mi=MONITORINFO%s\\n\", hMonitor, lpmi->cbSize==sizeof(MONITORINFO)?\"\":\"EX\");\n\tres=(*pGetMonitorInfo)(hMonitor, lpmi);\n\n\t//v2.03.15 - must fix the coordinates also in case of error: that may depend on the windowed mode.\n\tif(dxw.Windowize){\n\t\tOutTraceDW(\"GetMonitorInfo: FIX Work=(%d,%d)-(%d,%d) Monitor=(%d,%d)-(%d,%d) -> (%d,%d)-(%d,%d)\\n\", \n\t\t\tlpmi->rcWork.left, lpmi->rcWork.top, lpmi->rcWork.right, lpmi->rcWork.bottom,\n\t\t\tlpmi->rcMonitor.left, lpmi->rcMonitor.top, lpmi->rcMonitor.right, lpmi->rcMonitor.bottom,\n\t\t\t0, 0, dxw.GetScreenWidth(), dxw.GetScreenHeight());\n\t\tlpmi->rcWork = dxw.GetScreenRect();\n\t\tlpmi->rcMonitor = dxw.GetScreenRect();\n\t\treturn TRUE;\n\t}\n\t\t\n\tif(res) {\n\t\tOutTraceDW(\"GetMonitorInfo: Work=(%d,%d)-(%d,%d) Monitor=(%d,%d)-(%d,%d)\\n\", \n\t\t\tlpmi->rcWork.left, lpmi->rcWork.top, lpmi->rcWork.right, lpmi->rcWork.bottom,\n\t\t\tlpmi->rcMonitor.left, lpmi->rcMonitor.top, lpmi->rcMonitor.right, lpmi->rcMonitor.bottom);\n\t}\n\telse {\n\t\tOutTraceE(\"GetMonitorInfo: ERROR err=%d\\n\", GetLastError());\n\t}\n\n\treturn res;\n}\n\nBOOL WINAPI extGetMonitorInfoA(HMONITOR hMonitor, LPMONITORINFO lpmi)\n{\n\treturn extGetMonitorInfo(hMonitor, lpmi, pGetMonitorInfoA);\n}\n\nBOOL WINAPI extGetMonitorInfoW(HMONITOR hMonitor, LPMONITORINFO lpmi)\n{\n\treturn extGetMonitorInfo(hMonitor, lpmi, pGetMonitorInfoW);\n}\n\nint WINAPI extGetUpdateRgn(HWND hWnd, HRGN hRgn, BOOL bErase)\n{\n\tint regionType;\n\tregionType=(*pGetUpdateRgn)(hWnd, hRgn, bErase);\n\tOutTraceDW(\"GetUpdateRgn: hwnd=%x hrgn=%x erase=%x regionType=%x(%s)\\n\", \n\t\thWnd, hRgn, bErase, regionType, ExplainRegionType(regionType));    \n\n\tif(dxw.IsFullScreen()){\n\t\tif(regionType == SIMPLEREGION){\n\t\t\tRECT rc;\n\t\t\tif(!pGetRgnBox) pGetRgnBox=GetRgnBox;\n\t\t\tregionType = (*pGetRgnBox)(hRgn, &rc);\n\t\t\tOutTraceDW(\"GetUpdateRgn: regionType=%x(%s) box=(%d,%d)-(%d,%d)\\n\", \n\t\t\t\tregionType, ExplainRegionType(regionType), rc.left, rc.top, rc.right, rc.bottom);\n\t\t\tif(regionType == SIMPLEREGION){\n\t\t\t\tdxw.UnmapClient(&rc);\n\t\t\t\tif(SetRectRgn(hRgn, rc.left, rc.top, rc.right, rc.bottom )){\n\t\t\t\t\t// success\n\t\t\t\t\tOutTraceDW(\"GetUpdateRgn: FIXED box=(%d,%d)-(%d,%d)\\n\", rc.left, rc.top, rc.right, rc.bottom);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n#if 0\n\t\tif(regionType == COMPLEXREGION){\n\t\t\tRECT rc;\n\t\t\tif(!pGetRgnBox) pGetRgnBox=GetRgnBox;\n\t\t\tregionType = (*pGetRgnBox)(hRgn, &rc);\n\t\t\tOutTraceDW(\"GetUpdateRgn: regionType=%x(%s) box=(%d,%d)-(%d,%d)\\n\", \n\t\t\t\tregionType, ExplainRegionType(regionType), rc.left, rc.top, rc.right, rc.bottom);\n\t\t\tif(regionType == COMPLEXREGION){\n\t\t\t\t//dxw.UnmapClient(&rc);\n\t\t\t\t//if(SetRectRgn(hRgn, rc.left, rc.top, rc.right, rc.bottom )){\n\t\t\t\tif(SetRectRgn(hRgn, 0, 0, dxw.GetScreenWidth(), dxw.GetScreenHeight())){\n\t\t\t\t\t// success\n\t\t\t\t\tOutTraceDW(\"GetUpdateRgn: FIXED box=(%d,%d)-(%d,%d)\\n\", rc.left, rc.top, rc.right, rc.bottom);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n#endif\n   } \n\n    return regionType; \n}\n\n#ifdef TRACEPALETTE\nUINT WINAPI extGetDIBColorTable(HDC hdc, UINT uStartIndex, UINT cEntries, RGBQUAD *pColors)\n{\n\tUINT ret;\n\tOutTraceDW(\"GetDIBColorTable: hdc=%x start=%d entries=%d\\n\", hdc, uStartIndex, cEntries);\n\n\t//if((OBJ_DC == (*pGetObjectType)(hdc)) && (dxw.dwFlags1 & EMULATESURFACE)){\n\t//\t//extern PALETTEENTRY PalEntries[256];\n\t//\textern DWORD *PaletteEntries;\n\t//\tif((uStartIndex+cEntries) > 256) cEntries = 256 - uStartIndex;\n\t//\tfor(UINT i=0; i<cEntries; i++) {\n\t//\t\tPALETTEENTRY p;\n\t//\t\tmemcpy(&p, &PaletteEntries[i+uStartIndex], sizeof(DWORD));\n\t//\t\tpColors[i].rgbBlue = p.peBlue;\n\t//\t\tpColors[i].rgbGreen = p.peGreen;\n\t//\t\tpColors[i].rgbRed = p.peRed;\n\t//\t\tpColors[i].rgbReserved = p.peFlags;\n\t//\t}\n\t//\tret=cEntries;\n\t//}\n\t//else\n\t//\tret = (*pGetDIBColorTable)(hdc, uStartIndex, cEntries, pColors);\n\n\tret = (*pGetDIBColorTable)(hdc, uStartIndex, cEntries, pColors);\n\tOutTraceDW(\"GetDIBColorTable: ret=%x\\n\", ret);\n\tif(IsDebug) dxw.DumpPalette(cEntries, (PALETTEENTRY *)pColors);\n\treturn ret;\n}\n\nUINT WINAPI extSetDIBColorTable(HDC hdc, UINT uStartIndex, UINT cEntries, const RGBQUAD *pColors)\n{\n\tUINT ret;\n\tOutTraceDW(\"SetDIBColorTable: hdc=%x start=%d entries=%d\\n\", hdc, uStartIndex, cEntries);\n\tif(IsDebug) dxw.DumpPalette(cEntries, (PALETTEENTRY *)pColors);\n\n\t//if((OBJ_DC == GetObjectType(hdc)) && (dxw.dwFlags1 & EMULATESURFACE)){\n\t//\t//extern PALETTEENTRY PalEntries[256];\n\t//\textern DWORD *PaletteEntries;\n\t//\tif((uStartIndex+cEntries) > 256) cEntries = 256 - uStartIndex;\n\t//\tfor(UINT i=0; i<cEntries; i++) {\n\t//\t\tPALETTEENTRY p;\n\t//\t\tmemcpy(&p, &PaletteEntries[i+uStartIndex], sizeof(DWORD));\n\t//\t\tpColors[i].rgbBlue = p.peBlue;\n\t//\t\tpColors[i].rgbGreen = p.peGreen;\n\t//\t\tpColors[i].rgbRed = p.peRed;\n\t//\t\tpColors[i].rgbReserved = p.peFlags;\n\t//\t}\n\t//\tret=cEntries;\n\t//}\n\t//else\n\t//\tret = (*pSetDIBColorTable)(hdc, uStartIndex, cEntries, pColors);\n\t\n\tret = (*pSetDIBColorTable)(hdc, uStartIndex, cEntries, pColors);\n\tOutTraceDW(\"SetDIBColorTable: ret=%x\\n\", ret);\n\treturn ret;\n}\n#endif\n\n#ifdef NOUNHOOKED\nBOOL WINAPI extValidateRect(HWND hWnd, const RECT *lpRect)\n{\n\tBOOL ret;\n\tif(IsTraceDW){\n\t\tif(lpRect)\n\t\t\tOutTrace(\"ValidateRect: hwnd=%x rect=(%d,%d)-(%d,%d)\\n\", \n\t\t\t\thWnd, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t\telse\n\t\t\tOutTrace(\"ValidateRect: hwnd=%x rect=NULL\\n\", hWnd);\n\t}\n\tret = (*pValidateRect)(hWnd, lpRect);\n\treturn ret;\n}\n\nint WINAPI extGetWindowTextA(HWND hWnd, LPTSTR lpString, int nMaxCount)\n{\n\t// purpose of this wrapped call is to clear the FPS indicator (format \" ~ (%d FPS)\") \n\t// from the window title, if present. It crashes games such as \"Panzer General 3 Scorched Earth\"\n\t// when FPS on window title is activated.\n\tint ret;\n\tOutTraceDW(\"GetWindowTextA: hwnd=%x MaxCount=%d\\n\", hWnd, nMaxCount);\n\tret=(*pGetWindowTextA)(hWnd, lpString, nMaxCount);\n\tif(ret) OutTraceDW(\"GetWindowTextA: ret=%d String=\\\"%s\\\"\\n\", ret, lpString);\n\tif (ret && (dxw.dwFlags2 & SHOWFPS) && dxw.ishWndFPS(hWnd)){\n\t\tchar *p;\n\t\tp=strstr(lpString, \" ~ (\");\n\t\tif(p){\n\t\t\t*p = NULL;\n\t\t\tret = strlen(lpString);\n\t\t\tOutTraceDW(\"GetWindowTextA: FIXED ret=%d String=\\\"%s\\\"\\n\", ret, lpString);\n\t\t}\n\t}\n\treturn ret;\n}\n#endif\n\nBOOL WINAPI extBringWindowToTop(HWND hwnd)\n{\n\tBOOL res;\n\tOutTraceDW(\"BringWindowToTop: hwnd=%x\\n\", hwnd);\n\tif(dxw.dwFlags5 & UNLOCKZORDER) return TRUE;\n\tres=(*pBringWindowToTop)(hwnd);\n\treturn res;\n}\n\nBOOL WINAPI extSetForegroundWindow(HWND hwnd)\n{\n\tBOOL res;\n\tOutTraceDW(\"SetForegroundWindow: hwnd=%x\\n\", hwnd);\n\tif(dxw.dwFlags5 & UNLOCKZORDER) return TRUE;\n\tres=(*pSetForegroundWindow)(hwnd);\n\treturn res;\n}\n\n/*\nHOOKPROC glpMouseHookProcessFunction;\nLRESULT CALLBACK extMouseHookProc(int code, WPARAM wParam, LPARAM lParam)\n{\n\tLRESULT ret;\n\tOutTrace(\"HookProc intercepted: code=%x wParam=%x lParam=%x\\n\", code, wParam, lParam);\n    MOUSEHOOKSTRUCT * pMouseStruct = (MOUSEHOOKSTRUCT *)lParam;\n    if (pMouseStruct != NULL){\n\t\tdxw.UnmapWindow(&(pMouseStruct->pt));\n    }\t\n\tret= (*glpMouseHookProcessFunction)(code, wParam, lParam);\n\treturn ret;\n}\n*/\n\nHOOKPROC glpMessageHookProcessFunction;\nHOOKPROC glpMouseHookProcessFunction;\nHOOKPROC glpMouseHookProcessFunctionLL;\n\nLRESULT CALLBACK extMessageHookProc(int code, WPARAM wParam, LPARAM lParam)\n{\n\tLRESULT ret;\n\tOutTrace(\"MessageHookProc: code=%x wParam=%x lParam=%x\\n\", code, wParam, lParam);\n    MSG * pMessage = (MSG *)lParam;\n\tret = NULL;\n\tif(pMessage){\n\t\tUINT message = pMessage->message;\n\t\tif ((message >= 0x600) ||\t\t\t\t\t\t\t\t\t\t\t// custom messages\n\t\t\t((message >= WM_KEYFIRST) && (message <= WM_KEYLAST)) ||\t\t// keyboard messages\n\t\t\t((message >= WM_MOUSEFIRST) && (message <= WM_MOUSELAST))\t\t// mouse messages\n\t\t\t)\t\t\t\n\t\t\tret = (*glpMessageHookProcessFunction)(code, wParam, lParam);\n\t}\n\treturn ret;\n}\n\nstatic POINT FixMousePoint(POINT pt)\n{\n\tdxw.UnmapWindow(&pt);\n\tif(pt.x < 0) pt.x = 0;\n\tif(pt.x >= (LONG)dxw.GetScreenWidth()) pt.x = dxw.GetScreenWidth()-1;\n\tif(pt.y < 0) pt.y = 0;\n\tif(pt.y >= (LONG)dxw.GetScreenHeight()) pt.y = dxw.GetScreenHeight()-1;\n\treturn pt;\n}\n\nLRESULT CALLBACK extMouseHookProc(int code, WPARAM wParam, LPARAM lParam)\n{\n\tOutTraceC(\"MouseHookProc: code=%x wParam=%x lParam=%x\\n\", code, wParam, lParam);\n\tif(code < 0) return CallNextHookEx(0, code, wParam, lParam);\n\n\tif(lParam){\n\t\tMOUSEHOOKSTRUCT MouseStruct = *(MOUSEHOOKSTRUCT *)lParam;\n\t\tMouseStruct.pt = FixMousePoint(MouseStruct.pt);\n\t\tOutTraceC(\"MouseHookProc: event=%s pos=(%d,%d)->(%d,%d)\\n\", \n\t\t\tExplainWinMessage(wParam), \n\t\t\t((MOUSEHOOKSTRUCT *)lParam)->pt.x,  ((MOUSEHOOKSTRUCT *)lParam)->pt.y, \n\t\t\tMouseStruct.pt.x, MouseStruct.pt.y);\n\t\treturn (*glpMouseHookProcessFunction)(code, wParam, (LPARAM)&MouseStruct);\n\t}\n\treturn (*glpMouseHookProcessFunction)(code, wParam, lParam);\n}\n\nLRESULT CALLBACK extMouseHookProcLL(int code, WPARAM wParam, LPARAM lParam)\n{\n\tOutTraceC(\"MouseHookProcLL: code=%x wParam=%x lParam=%x\\n\", code, wParam, lParam);\n\tif(code < 0) return CallNextHookEx(0, code, wParam, lParam);\n\n\tif(lParam){\n\t\tMSLLHOOKSTRUCT MouseStruct = *(MSLLHOOKSTRUCT *)lParam;\n\t\tMouseStruct.pt = FixMousePoint(MouseStruct.pt);\n\t\tOutTraceC(\"MouseHookProcLL: event=%s pos=(%d,%d)->(%d,%d)\\n\", \n\t\t\tExplainWinMessage(wParam), \n\t\t\t((MSLLHOOKSTRUCT *)lParam)->pt.x,  ((MSLLHOOKSTRUCT *)lParam)->pt.y, \n\t\t\tMouseStruct.pt.x, MouseStruct.pt.y);\n\t\treturn (*glpMouseHookProcessFunctionLL)(code, wParam, (LPARAM)&MouseStruct);\n\t}\n    return (*glpMouseHookProcessFunctionLL)(code, wParam, lParam);\n}\n\nstatic HHOOK WINAPI extSetWindowsHookEx(SetWindowsHookEx_Type pSetWindowsHookEx, int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId)\n{\n\tHHOOK ret;\n\n\tOutTraceDW(\"SetWindowsHookEx: id=%x threadid=%x\\n\", idHook, dwThreadId);\n\n\tif(dxw.dwFlags5 & EASPORTSHACK){\n\t\tOutTraceDW(\"SetWindowsHookEx: EASPORTSHACK bypass active\\n\");\n\t\tif(idHook == WH_MOUSE) return NULL;\n\t\tif(idHook == WH_GETMESSAGE) {\n\t\t\tglpMessageHookProcessFunction = lpfn;\n\t\t\tlpfn=extMessageHookProc;\n\t\t}\n\t}\n\n\t// v2.03.39: \"One Must Fall Battlegrounds\" keyboard fix\n\tif((idHook == WH_KEYBOARD) && (dwThreadId == NULL)) {\n\t\tdwThreadId = GetCurrentThreadId();\n\t\tOutTraceDW(\"SetWindowsHookEx: fixing WH_KEYBOARD thread=0->%x\\n\", dwThreadId);\n\t}\n\n\t// v2.04.13: \"Starsiege\" mouse control fix\n\tif((idHook == WH_CBT) && (dwThreadId == NULL)) {\n\t\tdwThreadId = GetCurrentThreadId();\n\t\tOutTraceDW(\"SetWindowsHookEx: fixing WH_CBT thread=0->%x\\n\", dwThreadId);\n\t}\n\n\t// v2.03.54: disable the disable Alt-Tab fix\n\tif((dxw.dwFlags7 & DISABLEDISABLEALTTAB) && (idHook == WH_KEYBOARD_LL)) {\n\t\tOutTraceDW(\"SetWindowsHookEx: DISABLEDISABLEALTTAB bypass active\\n\");\n\t\treturn NULL;\n\t}\n\n\tif(dxw.dwFlags8 & FIXMOUSEHOOK){\n\t\tif(idHook == WH_MOUSE){\n\t\t\tOutTraceDW(\"SetWindowsHookEx: FIXMOUSEHOOK filter active on WH_MOUSE\\n\");\n\t\t\tglpMouseHookProcessFunction = lpfn;\n\t\t\tlpfn=extMouseHookProc;\n\t\t}\n\t\tif (idHook == WH_MOUSE_LL){\n\t\t\tOutTraceDW(\"SetWindowsHookEx: FIXMOUSEHOOK filter active on WH_MOUSE_LL\\n\");\n\t\t\tglpMouseHookProcessFunctionLL = lpfn;\n\t\t\tlpfn=extMouseHookProcLL;\n\t\t}\n\t}\n\n\tret=(*pSetWindowsHookEx)(idHook, lpfn, hMod, dwThreadId);\n\n\treturn ret;\n}\n\nHHOOK WINAPI extSetWindowsHookExA(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId)\n{ return extSetWindowsHookEx(pSetWindowsHookExA, idHook, lpfn, hMod, dwThreadId); }\nHHOOK WINAPI extSetWindowsHookExW(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId)\n{ return extSetWindowsHookEx(pSetWindowsHookExW, idHook, lpfn, hMod, dwThreadId); }\n\nHRESULT WINAPI extMessageBoxTimeoutA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType, WORD wLanguageId, DWORD dwMilliseconds)\n{\n\tHRESULT res;\n\tif(1) dwMilliseconds=1000;\n\tres=(*pMessageBoxTimeoutA)(hWnd, lpText, lpCaption, uType, wLanguageId, dwMilliseconds);\n\treturn res;\n}\n\nHRESULT WINAPI extMessageBoxTimeoutW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType, WORD wLanguageId, DWORD dwMilliseconds)\n{\n\tHRESULT res;\n\tif(1) dwMilliseconds=1000;\n\tres=(*pMessageBoxTimeoutW)(hWnd, lpText, lpCaption, uType, wLanguageId, dwMilliseconds);\n\treturn res;\n}\n\nHDESK WINAPI extCreateDesktop( LPCTSTR lpszDesktop, LPCTSTR lpszDevice, DEVMODE *pDevmode, DWORD dwFlags, ACCESS_MASK dwDesiredAccess, LPSECURITY_ATTRIBUTES lpsa)\n{\n\t//OutTrace(\"CreateDesktop: SUPPRESS Desktop=%s Device=%s flags=%x access=%x\\n\", lpszDesktop, lpszDevice, dwFlags, dwDesiredAccess);\n\tOutTraceDW(\"CreateDesktop: SUPPRESS flags=%x access=%x\\n\", dwFlags, dwDesiredAccess);\n\treturn (HDESK)0xDEADBEEF; // fake handle\n\t//return (HDESK)NULL; // fake handle\n}\n\nBOOL WINAPI extSwitchDesktop(HDESK hDesktop)\n{\n\tOutTraceDW(\"SwitchDesktop: SUPPRESS hDesktop=%x\\n\", hDesktop);\n\treturn TRUE;\n}\n\nHDESK WINAPI extOpenDesktop(LPTSTR lpszDesktop, DWORD dwFlags, BOOL fInherit, ACCESS_MASK dwDesiredAccess)\n{\n\tOutTraceDW(\"OpenDesktop: SUPPRESS flags=%x access=%x\\n\", dwFlags, dwDesiredAccess);\n\treturn (HDESK)0xDEADBEEF; // fake handle\n\t//return (HDESK)NULL; // fake handle\n}\n\nBOOL WINAPI extCloseDesktop(HDESK hDesktop)\n{\n\tOutTraceDW(\"CloseDesktop: SUPPRESS hDesktop=%x\\n\", hDesktop);\n\treturn TRUE;\n}\n\nINT_PTR WINAPI extDialogBoxParamA(HINSTANCE hInstance, LPCTSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam)\n{\n\tBOOL ret;\n\tOutTraceDW(\"DialogBoxParamA: FullScreen=%x TemplateName=\\\"%s\\\" WndParent=%x\\n\", \n\t\tdxw.IsFullScreen(), sTemplateName(lpTemplateName), hWndParent);\n\t// attempt to fix \"Colonial Project 2\" dialog. Doesn't work, but it could be ok.....\n\t//if(FullScreen && dxw.IsRealDesktop(hWndParent)){\n\t//\tOutTraceDW(\"DialogBoxParamA: remap WndParent=%x->%x\\n\", hWndParent, dxw.GethWnd());\n\t//\thWndParent = dxw.GethWnd();\n\t//}\n\t//InMainWinCreation++;\n\tret = (*pDialogBoxParamA)(hInstance, lpTemplateName, hWndParent, lpDialogFunc, dwInitParam);\n\t//InMainWinCreation--;\n\tOutTraceDW(\"DialogBoxParamA: ret=%x\\n\", ret);\n\treturn ret;\n}\n\nBOOL WINAPI extIsZoomed(HWND hWnd)\n{\n\tBOOL ret;\n\tret = (*pIsZoomed)(hWnd);\n\tOutTraceDW(\"IsZoomed: hwnd=%x ret=%x\\n\", hWnd, ret);\n\t//if(dxw.IsFullScreen()) ret = FALSE;\n\treturn ret;\n}\n\nBOOL WINAPI extIsIconic(HWND hWnd)\n{\n\tBOOL ret;\n\tret = (*pIsIconic)(hWnd);\n\tOutTraceDW(\"IsIconic: hwnd=%x ret=%x\\n\", hWnd, ret);\n\t//return FALSE;\n\treturn ret;\n}\n\nBOOL extScrollWindow(HWND hWnd, int XAmount, int YAmount, const RECT *lpRect, const RECT *lpClipRect)\n{\n\tRECT Rect, ClipRect;\n\tBOOL res;\n\n\tOutTraceDW(\"ScrollWindow: hwnd=%x amount=(%d,%d) rect=(%d,%d)-(%d,%d) clip=(%d,%d)-(%d,%d)\\n\",\n\t\thWnd, XAmount, YAmount, \n\t\tlpRect->left, lpRect->top, lpRect->right, lpRect->bottom,\n\t\tlpClipRect->left, lpClipRect->top, lpClipRect->right, lpClipRect->bottom);\n\n\tRect = *lpRect;\n\tClipRect = *lpClipRect;\n\tif(dxw.Windowize && dxw.IsFullScreen()){\n\t\tdxw.MapClient(&XAmount, &YAmount);\n\t\tdxw.MapClient(&Rect);\n\t\tdxw.MapClient(&ClipRect);\n\t}\n\n\tres=(*pScrollWindow)(hWnd, XAmount, YAmount, (const RECT *)&Rect, (const RECT *)&ClipRect);\n\tif(!res) OutTraceE(\"ScrollWindow ERROR: err=%d\\n\", GetLastError());\n\treturn res;\n}\n\n// commented out, too dangerous. Known side effects:\n// 1) Recursion on HOT PATCH mode (or forever loop?)\n// 2) blanked dialog boxes in Galapagos\n// In any case, if useful somehow, it should not be hooked on GDImode != NONE condition\n\n#if 0\nHWND WINAPI extGetParent(HWND hWnd)\n{\n\t// Beware: can cause recursion on HOT PATCH mode\n\tHWND ret;\n\n\tret = (*pGetParent)(hWnd);\n\tOutTraceB(\"GetParent: hwnd=%x ret=%x\\n\", hWnd, ret);\n\n\tif(dxw.IsFullScreen()){\n\t\tif(ret == dxw.GethWnd()) {\n\t\t\tOutTraceB(\"GetParent: setting desktop reached\\n\");\n\t\t\tret = 0; // simulate reaching the desktop\n\t\t}\n\t}\n\n\treturn ret;\n}\n#else\n// just proxy, but the pGetParent pointer must stay initialized\n// P.s.so far, GetParent wrapping is useless, could be eliminated, but \n// replacing *pGetParent with unhooked GetParent invokations.\nHWND WINAPI extGetParent(HWND hWnd)\n{ return (*pGetParent)(hWnd); }\n#endif\n\nBOOL WINAPI extInvalidateRgn(HWND hWnd, HRGN hRgn, BOOL bErase)\n{\n\tOutTraceDW(\"InvalidateRgn: hwnd=%x hrgn=%x erase=%x\\n\", hWnd, hRgn, bErase);\n\n\tif(dxw.IsFullScreen()){\n\t\tif (dxw.IsRealDesktop(hWnd) && bErase) return true;\n\t}\n\n\treturn (*pInvalidateRgn)(hWnd, hRgn, bErase);\n}\n\nBOOL WINAPI extDrawIcon(HDC hdc, int X, int Y, HICON hIcon)\n{\n\tBOOL ret;\n\tOutTraceDW(\"DrawIcon: hdcdest=%x pos=(%d,%d) hicon=%x\\n\", hdc, X, Y, hIcon);\n\tif(dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&X, &Y);\n\t\t\t\tOutTraceDW(\"OffsetRgn: fixed STRETCHED pos=(%d,%d)\\n\", X, Y);\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pDrawIcon)(sdc.GetHdc(),  X, Y, hIcon);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tret = (*pDrawIcon)(hdc, X, Y, hIcon);\n\tif(!ret) OutTraceE(\"DrawIcon ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\n// not working in HOT PATCH mode\nBOOL WINAPI extDrawIconEx( HDC hdc, int xLeft, int yTop, HICON hIcon, int cxWidth, int cyWidth, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags)\n{\n\tBOOL ret;\n\tOutTraceDW(\"DrawIconEx: hdc=%x pos=(%d,%d) hicon=%x size=(%d,%d) istep=%x flags=%x\\n\",\n\t\thdc, xLeft, yTop, hIcon, cxWidth, cyWidth, istepIfAniCur, diFlags);\n\tif(dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient(&xLeft, &yTop, &cxWidth, &cyWidth);\n\t\t\t\tOutTraceDW(\"DrawIconEx: fixed STRETCHED pos=(%d,%d) size=(%d,%d)\\n\", xLeft, yTop, cxWidth, cyWidth);\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pDrawIconEx)(sdc.GetHdc(), xLeft, yTop, hIcon, cxWidth, cyWidth, istepIfAniCur, hbrFlickerFreeDraw, diFlags);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, xLeft, yTop, cxWidth, cyWidth);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t}\n\tret = (*pDrawIconEx)(hdc, xLeft, yTop, hIcon, cxWidth, cyWidth, istepIfAniCur, hbrFlickerFreeDraw, diFlags);\n\tif(!ret) OutTraceE(\"DrawIconEx ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extDrawCaption(HWND hwnd, HDC hdc, LPCRECT lprc, UINT uFlags)\n{\n\tBOOL ret;\n\tOutTraceDW(\"DrawCaption: hwnd=%x hdc=%x rect=(%d,%d)-(%d,%d) flags=%x\\n\", hwnd, hdc, lprc->left, lprc->top, lprc->right, lprc->bottom, uFlags);\n\tif(dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_STRETCHED: \n\t\t\t\tdxw.MapClient((LPRECT)lprc);\n\t\t\t\tOutTraceDW(\"DrawIconEx: fixed STRETCHED rect=(%d,%d)-(%d,%d)\\n\", lprc->left, lprc->top, lprc->right, lprc->bottom);\n\t\t\t\tbreak;\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pDrawCaption)(hwnd, sdc.GetHdc(), lprc, uFlags);\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE, lprc->left, lprc->top, lprc->right, lprc->bottom);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t}\n\tret = (*pDrawCaption)(hwnd, hdc, lprc, uFlags);\n\tif(!ret) OutTraceE(\"DrawCaption ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extPaintDesktop(HDC hdc)\n{\n\tBOOL ret;\n\tOutTraceDW(\"PaintDesktop: hdc=%x\\n\", hdc);\n\tif(dxw.IsToRemap(hdc)){\n\t\tswitch(dxw.GDIEmulationMode){\n\t\t\tcase GDIMODE_SHAREDDC: \n\t\t\t\tsdc.GetPrimaryDC(hdc);\n\t\t\t\tret=(*pPaintDesktop)(sdc.GetHdc());\n\t\t\t\tsdc.PutPrimaryDC(hdc, TRUE);\n\t\t\t\treturn ret;\n\t\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t}\n\tret = (*pPaintDesktop)(hdc);\n\tif(!ret) OutTraceE(\"PaintDesktop ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\n\nchar *ExplainMouseMoveFlags(DWORD c)\n{\n\tstatic char eb[256];\n\tunsigned int l;\n\tstrcpy(eb,\"MOUSEEVENTF_\");\n\tif (c & MOUSEEVENTF_MOVE) strcat(eb, \"MOVE+\");\n\tif (c & MOUSEEVENTF_LEFTDOWN) strcat(eb, \"LEFTDOWN+\");\n\tif (c & MOUSEEVENTF_LEFTUP) strcat(eb, \"LEFTUP+\");\n\tif (c & MOUSEEVENTF_RIGHTDOWN) strcat(eb, \"RIGHTDOWN+\");\n\tif (c & MOUSEEVENTF_RIGHTUP) strcat(eb, \"RIGHTUP+\");\n\tif (c & MOUSEEVENTF_MIDDLEDOWN) strcat(eb, \"MIDDLEDOWN+\");\n\tif (c & MOUSEEVENTF_MIDDLEUP) strcat(eb, \"MIDDLEUP+\");\n\tif (c & MOUSEEVENTF_XDOWN) strcat(eb, \"XDOWN+\");\n\tif (c & MOUSEEVENTF_XUP) strcat(eb, \"XUP+\");\n\tif (c & MOUSEEVENTF_WHEEL) strcat(eb, \"WHEEL+\");\n\tif (c & MOUSEEVENTF_HWHEEL) strcat(eb, \"HWHEEL+\");\n\tif (c & MOUSEEVENTF_ABSOLUTE) strcat(eb, \"ABSOLUTE+\");\n\tl=strlen(eb);\n\tif (l>strlen(\"MOUSEEVENTF_\")) eb[l-1]=0; // delete last '+' if any\n\telse eb[0]=0;\n\treturn(eb);\n}\n\nVOID WINAPI extmouse_event(DWORD dwFlags, DWORD dx, DWORD dy, DWORD dwData, ULONG_PTR dwExtraInfo)\n{\n\tOutTrace(\"mouse_event: flags=%x(%s) xy=(%d,%d) data=%x, extrainfo=%lx\\n\", \n\t\tdwFlags, ExplainMouseMoveFlags(dwFlags), dx, dy, dwData, dwExtraInfo);\n\t\n\tif((dwFlags & MOUSEEVENTF_MOVE) && (dxw.dwFlags2 & KEEPCURSORFIXED)) {\n\t\tOutTraceDW(\"mouse_event: SUPPRESS mouse move\\n\");\n\t\treturn;\n\t}\n\n\tif((dwFlags & MOUSEEVENTF_ABSOLUTE) && dxw.Windowize && (dxw.dwFlags1 & MODIFYMOUSE)){\n\t\t// ???? untested ......\n\t\t//dxw.MapClient((int *)&dx, (int *)&dy);\n\t\tPOINT cursor;\n\t\tcursor.x = dx;\n\t\tcursor.y = dy;\n\t\tcursor = dxw.FixCursorPos(cursor);\n\t\tdx = cursor.x;\n\t\tdy = cursor.y;\n\t}\n\n\treturn (*pmouse_event)(dwFlags, dx, dy, dwData, dwExtraInfo);\n}\n\nBOOL WINAPI extShowScrollBar(HWND hWnd, int wBar, BOOL bShow)\n{\n\tBOOL ret;\n\tOutTraceDW(\"ShowScrollBar: hwnd=%x wBar=%x show=%x\\n\", hWnd, wBar, bShow);\n\tif(dxw.Windowize && dxw.IsRealDesktop(hWnd)) hWnd=dxw.GethWnd();\n\tret=(*pShowScrollBar)(hWnd, wBar, bShow);\n\tif(!ret) OutTraceE(\"ShowScrollBar ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\nBOOL WINAPI extDrawMenuBar(HWND hWnd)\n{\n\tBOOL ret;\n\tOutTraceDW(\"DrawMenuBar: hwnd=%x\\n\", hWnd);\n\tif(dxw.Windowize && dxw.IsRealDesktop(hWnd)) hWnd=dxw.GethWnd();\n\tret=(*pDrawMenuBar)(hWnd);\n\tif(!ret) OutTraceE(\"DrawMenuBar ERROR: err=%d\\n\", GetLastError());\n\treturn ret;\n}\n\n#ifdef TRANSLATEMESSAGEHOOK\nBOOL WINAPI extTranslateMessage(MSG *pMsg)\n{\n\tBOOL ret;\n\tOutTraceDW(\"TranslateMessage: type=%x pos=(%d,%d)\\n\", pMsg->message, pMsg->pt.x, pMsg->pt.y);\n\tif(dxw.Windowize){\n\n\t\tpMsg->pt=dxw.ScreenToClient(pMsg->pt);\n\t\tpMsg->pt=dxw.FixCursorPos(pMsg->pt);\n\t\t\n\t\t//pMsg->pt.x *= 4;\n\t\t//pMsg->pt.y *= 4;\n\t\t//if((pMsg->message <= WM_MOUSELAST) && (pMsg->message >= WM_MOUSEFIRST)) \n\t\t//\tpMsg->lParam = MAKELPARAM(pMsg->pt.x, pMsg->pt.y); \n\t\tOutTraceDW(\"TranslateMessage: new pos=(%d,%d)\\n\", pMsg->pt.x, pMsg->pt.y);\n\t}\n\tret=(*pTranslateMessage)(pMsg);\n\treturn ret;\n}\n#endif\n\nBOOL WINAPI extEnumDisplayDevicesA(LPCSTR lpDevice, DWORD iDevNum, PDISPLAY_DEVICE lpDisplayDevice, DWORD dwFlags)\n{\n\tBOOL ret;\n\tOutTraceDW(\"EnumDisplayDevicesA: device=%s devnum=%i flags=%x\\n\", lpDevice, iDevNum, dwFlags);\n\n\tif((dxw.dwFlags2 & HIDEMULTIMONITOR) && (iDevNum > 0)) {\n\t\tOutTraceDW(\"EnumDisplayDevicesA: HIDEMULTIMONITOR devnum=%i\\n\", iDevNum);\n\t\treturn 0;\n\t}\n\n\tret = (*pEnumDisplayDevicesA)(lpDevice, iDevNum, lpDisplayDevice, dwFlags);\n\n\tif(ret){\n\t\tOutTrace(\"EnumDisplayDevicesA: cb=%x devname=%s devstring=%s stateflags=%x\\n\", \n\t\t\tlpDisplayDevice->cb, lpDisplayDevice->DeviceName, lpDisplayDevice->DeviceString, lpDisplayDevice->StateFlags);\n\t}\n\telse{\n\t\tOutTraceE(\"EnumDisplayDevicesA ERROR: err=%d\\n\", GetLastError());\n\t}\n\treturn ret;\n}\n\nBOOL WINAPI extEnumDisplayDevicesW(LPCWSTR lpDevice, DWORD iDevNum, PDISPLAY_DEVICEW lpDisplayDevice, DWORD dwFlags)\n{\n\tBOOL ret;\n\tOutTraceDW(\"EnumDisplayDevicesW: device=%ls devnum=%i flags=%x\\n\", lpDevice, iDevNum, dwFlags);\n\n\tif((dxw.dwFlags2 & HIDEMULTIMONITOR) && (iDevNum > 0)) {\n\t\tOutTraceDW(\"EnumDisplayDevicesW: HIDEMULTIMONITOR devnum=%i\\n\", iDevNum);\n\t\treturn 0;\n\t}\n\n\tret = (*pEnumDisplayDevicesW)(lpDevice, iDevNum, lpDisplayDevice, dwFlags);\n\n\tif(ret){\n\t\tOutTraceDW(\"EnumDisplayDevicesW: cb=%x devname=%ls devstring=%ls stateflags=%x\\n\", \n\t\t\tlpDisplayDevice->cb, lpDisplayDevice->DeviceName, lpDisplayDevice->DeviceString, lpDisplayDevice->StateFlags);\n\t}\n\telse{\n\t\tOutTraceE(\"EnumDisplayDevicesW ERROR: err=%d\\n\", GetLastError());\n\t}\n\treturn ret;\n}\n\nINT_PTR WINAPI extDialogBoxIndirectParamA(HINSTANCE hInstance, LPCDLGTEMPLATE hDialogTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam)\n{\n\t//INT_PTR ret;\n\t// MessageBox(0, \"DialogBoxIndirectParamA\", \"step\", 0);\n\tOutTraceDW(\"DialogBoxIndirectParamA: hInstance=%x pos=(%d,%d) size=(%dx%d) hWndParent=%x, lpDialogFunc=%x dwInitParam=%x\\n\",\n\t\thInstance, hDialogTemplate->x, hDialogTemplate->y, hDialogTemplate->cx, hDialogTemplate->cy, hWndParent, lpDialogFunc, dwInitParam);\n\treturn (*pDialogBoxIndirectParamA)(hInstance, hDialogTemplate, hWndParent, lpDialogFunc, dwInitParam);\n}\n\nHBITMAP WINAPI extLoadBitmapA(HINSTANCE hInstance, LPCSTR lpBitmapName)\n{\n\tHBITMAP ret;\n\tOutTraceDW(\"LoadBitmapA: hinst=%x name=%s\\n\", hInstance, lpBitmapName);\n\tret = (*pLoadBitmapA)(hInstance, lpBitmapName);\n\tif(ret){\n\t\tOutTraceDW(\"LoadBitmapA: hbitmap=%x\\n\", ret);\n\t}\n\telse{\n\t\tOutTraceE(\"LoadBitmapA: ERROR err=%d\\n\", GetLastError());\n\t}\n\treturn ret;\n}\n\nBOOL WINAPI extEnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)\n{\n\tOutTraceDW(\"EnumerateWindows\\n\");\n\tif(dxw.dwFlags8 & WININSULATION){\n\t\tOutTraceDW(\"EnumerateWindows: BYPASS\\n\");\n\t\treturn TRUE;\n\t}\n\treturn (*pEnumWindows)(lpEnumFunc, lParam);\n}\n\nstatic void RedirectCoordinates(LPRECT lpRect)\n{\n\tWINDOWPOS wp;\n\tdxw.CalculateWindowPos(NULL, dxw.GetScreenWidth(), dxw.GetScreenHeight(), &wp);\n\tlpRect->left = wp.x;\n\tlpRect->right = wp.x + wp.cx;\n\tlpRect->top = wp.y;\n\tlpRect->bottom = wp.y + wp.cy;\n\tOutTraceDW(\"AdjustWindowRect: FIX rect=(%d,%d)-(%d,%d)\\n\",\n\tlpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n}\n\nBOOL WINAPI extAdjustWindowRect(LPRECT lpRect, DWORD dwStyle, BOOL bMenu)\n{\n\tBOOL ret;\n\tOutTraceDW(\"AdjustWindowRect: IN rect=(%d,%d)-(%d,%d) style=%x(%s) menu=%x\\n\",\n\t\tlpRect->left, lpRect->top, lpRect->right, lpRect->bottom,\n\t\tdwStyle, ExplainStyle(dwStyle), bMenu);\n\n\tif(dxw.Windowize && (dxw.dwFlags8 & FIXADJUSTWINRECT)) RedirectCoordinates(lpRect);\n\n\tret = pAdjustWindowRect(lpRect, dwStyle, bMenu);\n\n\tif(ret){\n\t\tOutTraceDW(\"AdjustWindowRect: OUT rect=(%d,%d)-(%d,%d)\\n\",\n\t\tlpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t}\n\telse{\n\t\tOutTraceE(\"AdjustWindowRect ERROR: err=%d\\n\", GetLastError());\n\t}\n\treturn ret;\n}\n\nBOOL WINAPI extAdjustWindowRectEx(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle)\n{\n\tBOOL ret;\n\tOutTraceDW(\"AdjustWindowRectEx: IN rect=(%d,%d)-(%d,%d) style=%x(%s) menu=%x exstyle=%x(%s)\\n\",\n\t\tlpRect->left, lpRect->top, lpRect->right, lpRect->bottom,\n\t\tdwStyle, ExplainStyle(dwStyle), bMenu, dwExStyle, ExplainExStyle(dwExStyle));\n\n\tif(dxw.Windowize && (dxw.dwFlags8 & FIXADJUSTWINRECT)) RedirectCoordinates(lpRect);\n\n\tret = pAdjustWindowRectEx(lpRect, dwStyle, bMenu, dwExStyle);\n\n\tif(ret){\n\t\tOutTraceDW(\"AdjustWindowRectEx: OUT rect=(%d,%d)-(%d,%d)\\n\",\n\t\tlpRect->left, lpRect->top, lpRect->right, lpRect->bottom);\n\t}\n\telse{\n\t\tOutTraceE(\"AdjustWindowRectEx ERROR: err=%d\\n\", GetLastError());\n\t}\n\treturn ret;\n}\n\nBOOL WINAPI extValidateRgn(HWND hwnd, HRGN hrgn)\n{\n\tBOOL ret;\n\tOutTraceDW(\"ValidateRgn: hwnd=%x hrgn=%x\\n\", hwnd, hrgn);\n\n\tret = (*pValidateRgn)(hwnd, hrgn);\n\treturn ret;\n}\n\n// To do:\n// GrayStringA\n// GrayStringW"
  },
  {
    "path": "dll/virtualdc.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS\n#define SYSLIBNAMES_DEFINES\n\n#include <stdio.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhelper.h\"\n#include \"resource.h\"\n#include \"hddraw.h\"\nextern GetDC_Type pGetDC;\nextern ReleaseDC_Type pReleaseDC;\nextern HandleDDThreadLock_Type pReleaseDDThreadLock;\n\n#define OutTraceTMP OutTrace\n\nHDC dxwVDC::GetPrimaryDC()\n{\n\tHDC PrimaryDC;\n\tLPDIRECTDRAWSURFACE lpDDSPrim;\n\tPrimaryDC = NULL;\n\tlpDDSPrim = dxwss.GetPrimarySurface();\n\tif (lpDDSPrim) {\n\t\tif(pReleaseDDThreadLock)(*pReleaseDDThreadLock)();\n\t\t(*pGetDC)(lpDDSPrim, &PrimaryDC);\n\t\twhile((PrimaryDC == NULL) && lpDDSPrim) { \n\t\t\tOutTraceDW(\"GetFlippedDC: found primary surface with no DC, unref lpdds=%x\\n\", lpDDSPrim);\n\t\t\tdxwss.UnrefSurface(lpDDSPrim);\n\t\t\tlpDDSPrim = dxwss.GetPrimarySurface();\n\t\t\tif (lpDDSPrim) (*pGetDC)(lpDDSPrim, &PrimaryDC);\n\t\t}\n\t}\n\tOutTrace(\"GetFlippedDC: return primary surface dc=%x\\n\", PrimaryDC);\n\treturn PrimaryDC;\n}\n\nHDC dxwVDC::AcquireEmulatedDC(HWND hwnd, HDC *PrimaryDC)\n{\n\tHDC wdc;\n\tRECT WinRect;\n\tHDC RealHDC;\n\n/*---------------------------------\n\textern HDC hFlippedDC;\n\tLPDIRECTDRAWSURFACE lpDDSPrim;\n\thFlippedDC = GetPrimaryDC();\n\n----------------------------------*/\n\tif(!(wdc=(*pGDIGetDC)(hwnd))){\n\t\tOutTraceE(\"GetDC: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\treturn NULL;\n\t}\n\tRealHDC=wdc;\n\n\tRECT LastVRect;\n\tLastVRect = VirtualPicRect;\n\n\tif(!(hwnd=WindowFromDC(wdc)))\n\t\tOutTraceE(\"WindowFromDC: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t(*pGetClientRect)(hwnd, &WinRect);\n\tif(dxw.IsDesktop(hwnd)){\n\t\t// when screen resolution changes, better renew service resources\n\t\tVirtualPicRect = dxw.GetScreenRect();\n\t\tif((LastVRect.right != VirtualPicRect.right) || (LastVRect.bottom != VirtualPicRect.bottom)) {\n\t\t\tDeleteObject(VirtualHDC);\n\t\t\tVirtualHDC = NULL;\n\t\t\tDeleteObject(VirtualPic);\n\t\t\tVirtualPic = NULL;\n\t\t}\n\t}\n\telse {\n\t\tVirtualPicRect = WinRect;\n\t\tdxw.UnmapClient(&VirtualPicRect);\n\t}\n\n\n\tOutTraceB(\"AcquireEmulatedDC: hwnd=%x Desktop=%x WinRect=(%d,%d)(%d,%d) VirtRect=(%d,%d)(%d,%d)\\n\",\n\t\thwnd, dxw.IsDesktop(hwnd), \n\t\tWinRect.left, WinRect.top, WinRect.right, WinRect.bottom,\n\t\tVirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom);\n\n\n\tif (!VirtualHDC){\n\t\tOutTraceB(\"AcquireEmulatedDC: INITIALIZE\\n\");\n\t\tif(!(VirtualHDC=CreateCompatibleDC(wdc)))\n\t\t\tOutTraceE(\"CreateCompatibleDC: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\n\t\tif(!(VirtualPic=CreateCompatibleBitmap(wdc, dxw.GetScreenWidth(), dxw.GetScreenHeight())))\n\t\t\tOutTraceE(\"CreateCompatibleBitmap: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\n\t\tif(!SelectObject(VirtualHDC, VirtualPic))\n\t\t\tOutTraceE(\"SelectObject: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\n/*---------------------------------*/\n\t//HRGN hRgn;\n\t//RECT screen;\n\t//screen = dxw.GetScreenRect();\n\t//hRgn = CreateRectRgnIndirect(&screen);\n\t//SelectClipRgn (VirtualHDC, hRgn);\n\t//screen = dxw.GetScreenRect();\n\t//hRgn = CreateRectRgnIndirect(&screen);\n\t//SelectClipRgn (wdc, hRgn);\n/*---------------------------------*/\n/*---------------------------------*/\n\tif (!(hwnd == dxw.GethWnd())) {\n\t\tPOINT father, child, offset;\n\t\tfather.x = father.y = 0;\n\t\tchild.x = child.y = 0;\n\t\t(*pClientToScreen)(dxw.GethWnd(),&father);\n\t\t(*pClientToScreen)(hwnd,&child);\n\t\toffset.x = child.x - father.x;\n\t\toffset.y = child.y - father.y;\n\t\tdxw.UnmapClient(&offset);\n\t\tOutTraceDW(\"AcquireEmulatedDC: child window hwnd=%x offset=(%d,%d)\\n\", hwnd, offset.x, offset.y);\t\t\n\t\t(*pSetViewportOrgEx)(VirtualHDC, offset.x, offset.y, NULL);\n\t}\n\telse\n\t\t(*pSetViewportOrgEx)(VirtualHDC, 0, 0, NULL);\n\n\n\t\tif(*PrimaryDC = GetPrimaryDC()){ // better copy from virtual primary ....\n\t\t\tOutTraceTMP(\"AcquireEmulatedDC: intialize from primary dc=%x\\n\", PrimaryDC);\n\t\t\tif(!(*pGDIBitBlt)(VirtualHDC, 0, 0, VirtualPicRect.right, VirtualPicRect.bottom, *PrimaryDC, 0, 0, SRCCOPY))\n\t\t\t\tOutTraceE(\"StretchBlt: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t}\n\t\telse { // otherwise stretch from current windows DC\n\t\t\tOutTraceTMP(\"AcquireEmulatedDC: intialize from windows dc=%x\\n\", wdc);\n\t\t\tif(!(*pGDIStretchBlt)(VirtualHDC, 0, 0, VirtualPicRect.right, VirtualPicRect.bottom, wdc, 0, 0, WinRect.right, WinRect.bottom, SRCCOPY))\n\t\t\t\tOutTraceE(\"StretchBlt: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\t}\n\t}\n\n\treturn VirtualHDC;\n}\n\nBOOL dxwVDC::ReleaseEmulatedDC(HWND hwnd)\n{\n\tHDC wdc;\n\tRECT WinRect;\n\tHDC PrimaryDC;\n\n\t(*pGetClientRect)(hwnd, &WinRect);\n\n\tOutTraceB(\"ReleaseEmulatedDC: hwnd=%x Desktop=%x WinRect=(%d,%d)(%d,%d) VirtRect=(%d,%d)(%d,%d)\\n\",\n\t\thwnd, dxw.IsDesktop(hwnd), \n\t\tWinRect.left, WinRect.top, WinRect.right, WinRect.bottom,\n\t\tVirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom);\n\n\tif(PrimaryDC = GetPrimaryDC()){ // better copy from virtual primary ....\n\t\tOutTraceTMP(\"AcquireEmulatedDC: flush to from primary dc=%x\\n\", PrimaryDC);\n\t\tif(!(*pGDIBitBlt)(PrimaryDC, VirtualPicRect.left, VirtualPicRect.top, VirtualPicRect.right, VirtualPicRect.bottom, VirtualHDC, 0, 0, SRCCOPY))\n\t\t\tOutTraceE(\"StretchBlt: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t}\n\telse\n\t{\n\t\tif(!(wdc=(*pGDIGetDC)(hwnd)))\n\t\t\tOutTraceE(\"GetDC: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t\tOutTraceTMP(\"AcquireEmulatedDC: flush to windows dc=%x\\n\", wdc);\n\t\tSetStretchBltMode(wdc, HALFTONE);\n\t\tif(!(*pGDIStretchBlt)(wdc, 0, 0, WinRect.right, WinRect.bottom, VirtualHDC, 0, 0, VirtualPicRect.right, VirtualPicRect.bottom, SRCCOPY))\n\t\t\tOutTraceE(\"StretchBlt: ERROR err=%d at=%d\\n\", GetLastError(), __LINE__);\n\t}\n\t(*pGDIReleaseDC)(hwnd, VirtualHDC);\n\n\treturn TRUE;\n}\n\nvoid dxwVDC::ResetEmulatedDC()\n{\n\tVirtualHDC=NULL;\n\tVirtualPic=NULL;\n\tVirtualOffsetX=0;\n\tVirtualOffsetY=0;\n}\n\nBOOL dxwVDC::IsVirtual(HDC hdc)\n{\n\treturn (hdc==VirtualHDC) /* && (dwFlags3 & GDIEMULATEDC)*/;\n}\n\n#if 0\nBOOL dxwCore::ReleaseSharedDC(HWND hwnd, HDC hDC)\n{\n\tHRESULT ret;\n\tLPDIRECTDRAWSURFACE lpDDSPrim;\n\tlpDDSPrim = dxwss.GetPrimarySurface();\n\tif(!lpDDSPrim) return(TRUE);\n\tOutTraceDW(\"GDI.ReleaseDC: releasing flipped GDI hdc=%x\\n\", hDC);\n\tret=(*pReleaseDC)(dxwss.GetPrimarySurface(), hDC);\n\tif (!(hwnd == dxw.GethWnd())) {\n\t\tPOINT father, child, offset;\n\t\tRECT rect;\n\t\tHDC hdc;\n\t\tfather.x = father.y = 0;\n\t\tchild.x = child.y = 0;\n\t\t(*pClientToScreen)(dxw.GethWnd(),&father);\n\t\t(*pClientToScreen)(hwnd,&child);\n\t\toffset.x = child.x - father.x;\n\t\toffset.y = child.y - father.y;\n\t\tif(offset.x || offset.y){\n\t\t\t// if the graphis was blitted to primary but below a modal child window,\n\t\t\t// bring that up to the window surface to make it visible.\n\t\t\tBOOL ret2;\n\t\t\t(*pGetClientRect)(hwnd, &rect);\n\t\t\thdc=(*pGDIGetDC)(hwnd);\n\t\t\tif(!hdc) OutTrace(\"GDI.ReleaseDC: GetDC ERROR=%d at %d\\n\", GetLastError(), __LINE__);\n\t\t\tret2=(*pGDIBitBlt)(hdc, rect.left, rect.top, rect.right, rect.bottom, hDC, offset.x, offset.y, SRCCOPY);\n\t\t\tif(!ret2) OutTrace(\"GDI.ReleaseDC: BitBlt ERROR=%d at %d\\n\", GetLastError(), __LINE__);\n\t\t\tret2=(*pGDIReleaseDC)(hwnd, hdc);\n\t\t\tif(!ret2)OutTrace(\"GDI.ReleaseDC: ReleaseDC ERROR=%d at %d\\n\", GetLastError(), __LINE__);\n\t\t\t// this may flicker ....\n\t\t\t(*pInvalidateRect)(hwnd, NULL, FALSE); \n\t\t}\n\t}\n\tif (ret) OutTraceE(\"GDI.ReleaseDC ERROR: err=%x(%s) at %d\\n\", ret, ExplainDDError(ret), __LINE__);\n\telse dxw.ScreenRefresh();\n\treturn (ret == DD_OK);\n}\n#endif"
  },
  {
    "path": "dll/walkmod.cpp",
    "content": "#include <windows.h>\n#include <stdio.h>\n#include <stdarg.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n\n//#include <windows.h> \n#include <tlhelp32.h> \n//#include <tchar.h> \n//#include \"dxwnd.h\"\n\nextern void HookModule(HMODULE, int);\nextern void HookOpenGLLibs(HMODULE, char *);\nextern void DumpImportTable(HMODULE);\n\nBOOL ListProcessModules(BOOL hook) \n{ \n\tHANDLE hModuleSnap = INVALID_HANDLE_VALUE; \n\tMODULEENTRY32 me32; \n\n\t//  Take a snapshot of all modules in the specified process. \n\thModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId()); \n\tif( hModuleSnap == INVALID_HANDLE_VALUE){ \n\t\tOutTraceD(\"CreateToolhelp32Snapshot ERROR: err=%d\\n\", GetLastError()); \n\t\treturn false;\n\t} \n\n\t//  Set the size of the structure before using it. \n\tme32.dwSize = sizeof( MODULEENTRY32 ); \n \n\t//  Retrieve information about the first module, \n\t//  and exit if unsuccessful \n\tif( !Module32First(hModuleSnap, &me32)){ \n\t\tOutTraceE(\"Module32First ERROR: err=%d\\n\", GetLastError());  // Show cause of failure \n\t\tCloseHandle(hModuleSnap);     // Must clean up the snapshot object! \n\t\treturn false; \n\t} \n \n\t//  Now walk the module list of the process, \n\t//  and display information about each module \n\tdo { \n\t\tif(IsDebug){ \n\t\t\tOutTraceD(\"MODULE NAME:%s\\n\", me32.szModule ); \n\t\t\tOutTraceD(\"     executable     = %s\\n\",         me32.szExePath ); \n\t\t\tOutTraceD(\"     process ID     = 0x%08X\\n\",     me32.th32ProcessID ); \n\t\t\tOutTraceD(\"     ref count (g)  = 0x%04X\\n\",     me32.GlblcntUsage ); \n\t\t\tOutTraceD(\"     ref count (p)  = 0x%04X\\n\",     me32.ProccntUsage ); \n\t\t\tOutTraceD(\"     base address   = 0x%08X\\n\",\t\t(DWORD) me32.modBaseAddr ); \n\t\t\tOutTraceD(\"     base size      = %d\\n\",         me32.modBaseSize ); \n\t\t}\n\n\t\textern void HookSysLibs(HMODULE);\n\t\tif(hook) HookSysLibs((HMODULE)me32.modBaseAddr);\n\t\t\n\t\tif (IsDebug) DumpImportTable((HMODULE)me32.modBaseAddr);\n\t} while( Module32Next( hModuleSnap, &me32 ) ); \n\t//  Do not forget to clean up the snapshot object. \n\tCloseHandle( hModuleSnap ); \n\treturn true; \n} \n "
  },
  {
    "path": "dll/wing32.cpp",
    "content": "/*\n * WinG support\n *\n * Copyright 2007 Dmitry Timoshkov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define _CRT_SECURE_NO_WARNINGS\n\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"hddraw.h\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n#include \"shareddc.hpp\"\n\n#include \"stdio.h\"\n\nextern int WINAPI extFrameRect(HDC, const RECT *, HBRUSH);\n\ntypedef BOOL (WINAPI *WinGBitBlt_Type)(HDC, INT, INT, INT, INT, HDC, INT, INT);\ntypedef BOOL (WINAPI *WinGStretchBlt_Type)(HDC, INT, INT, INT, INT, HDC, INT, INT, INT, INT);\ntypedef HBITMAP (WINAPI *WinGCreateBitmap_Type)(HDC, BITMAPINFO *, void **);\ntypedef HDC (WINAPI *WinGCreateDC_Type)(void);\ntypedef BOOL (WINAPI *WinGRecommendDIBFormat_Type)(BITMAPINFO *);\ntypedef void * (WINAPI *WinGGetDIBPointer_Type)(HBITMAP, BITMAPINFO *);\ntypedef UINT (WINAPI *WinGSetDIBColorTable_Type)(HDC, UINT, UINT, RGBQUAD *);\ntypedef UINT (WINAPI *WinGGetDIBColorTable_Type)(HDC, UINT, UINT, RGBQUAD *);\ntypedef HPALETTE (WINAPI *WinGCreateHalfTonePalette_Type)(void);\n\nWinGBitBlt_Type pWinGBitBlt;\nWinGStretchBlt_Type pWinGStretchBlt;\nWinGCreateBitmap_Type pWinGCreateBitmap;\nWinGCreateDC_Type pWinGCreateDC;\nWinGRecommendDIBFormat_Type pWinGRecommendDIBFormat;\nWinGGetDIBPointer_Type pWinGGetDIBPointer;\nWinGSetDIBColorTable_Type pWinGSetDIBColorTable;\nWinGGetDIBColorTable_Type pWinGGetDIBColorTable;\nWinGCreateHalfTonePalette_Type pWinGCreateHalfTonePalette;\n\nBOOL WINAPI extWinGBitBlt(HDC, INT, INT, INT, INT, HDC, INT, INT);\nBOOL WINAPI extWinGStretchBlt(HDC, INT, INT, INT, INT, HDC, INT, INT, INT, INT);\nHBITMAP WINAPI extWinGCreateBitmap(HDC, BITMAPINFO *, void **);\nHDC WINAPI extWinGCreateDC(void);\nBOOL WINAPI extWinGRecommendDIBFormat(BITMAPINFO *);\nvoid * WINAPI extWinGGetDIBPointer(HBITMAP, BITMAPINFO *);\nUINT WINAPI extWinGSetDIBColorTable(HDC, UINT, UINT, RGBQUAD *);\nUINT WINAPI extWinGGetDIBColorTable(HDC, UINT, UINT, RGBQUAD *);\nHPALETTE WINAPI extWinGCreateHalfTonePalette(void);\n\nstatic HookEntryEx_Type Hooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"WinGBitBlt\", (FARPROC)NULL, (FARPROC *)&pWinGBitBlt, (FARPROC)extWinGBitBlt},\n\t{HOOK_IAT_CANDIDATE, 0, \"WinGStretchBlt\", (FARPROC)NULL, (FARPROC *)&pWinGStretchBlt, (FARPROC)extWinGStretchBlt},\n\t{HOOK_IAT_CANDIDATE, 0, \"WinGCreateBitmap\", (FARPROC)NULL, (FARPROC *)&pWinGCreateBitmap, (FARPROC)extWinGCreateBitmap},\n\t{HOOK_IAT_CANDIDATE, 0, \"WinGCreateDC\", (FARPROC)NULL, (FARPROC *)&pWinGCreateDC, (FARPROC)extWinGCreateDC},\n\t{HOOK_IAT_CANDIDATE, 0, \"WinGRecommendDIBFormat\", (FARPROC)NULL, (FARPROC *)&pWinGRecommendDIBFormat, (FARPROC)extWinGRecommendDIBFormat},\n\t{HOOK_IAT_CANDIDATE, 0, \"WinGGetDIBPointer\", (FARPROC)NULL, (FARPROC *)&pWinGGetDIBPointer, (FARPROC)extWinGGetDIBPointer},\n\t{HOOK_IAT_CANDIDATE, 0, \"WinGSetDIBColorTable\", (FARPROC)NULL, (FARPROC *)&pWinGSetDIBColorTable, (FARPROC)extWinGSetDIBColorTable},\n\t{HOOK_IAT_CANDIDATE, 0, \"WinGGetDIBColorTable\", (FARPROC)NULL, (FARPROC *)&pWinGGetDIBColorTable, (FARPROC)extWinGGetDIBColorTable},\n\t{HOOK_IAT_CANDIDATE, 0, \"WinGCreateHalfTonePalette\", (FARPROC)NULL, (FARPROC *)&pWinGCreateHalfTonePalette, (FARPROC)extWinGCreateHalfTonePalette},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n}; \n\nstatic char *libname = \"wing32.dll\";\n\nvoid HookWinG32Init()\n{\n\t//HookLibInitEx(Hooks);\n}\n\nvoid HookWinG32(HMODULE module)\n{\n\tif (dxw.GDIEmulationMode != GDIMODE_NONE) HookLibraryEx(module, Hooks, libname);\n}\n\nFARPROC Remap_WinG32_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tif (dxw.GDIEmulationMode != GDIMODE_NONE) if(addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\treturn NULL;\n}\n\n// === wrappers ===\n\nHDC WINAPI extWinGCreateDC(void)\n{\n\tOutTraceWG(\"WinGCreateDC\\n\");\n    return extGDICreateCompatibleDC(0);\n}\n\nHBITMAP WINAPI extWinGCreateBitmap(HDC hdc, BITMAPINFO *bmi, void **bits)\n{\n\tHBITMAP ret;\n\tOutTraceWG(\"WinGCreateBitmap: hdc=%x bmi=%x\\n\", hdc, bmi);\n    ret = extCreateDIBSection(hdc, bmi, 0, bits, 0, 0);\n\tOutTraceWG(\"WinGCreateBitmap: ret=%x\\n\", ret);\n\treturn ret;\n}\n\nBOOL WINAPI extWinGBitBlt(HDC hdcDst, INT xDst, INT yDst, INT width, INT height, HDC hdcSrc, INT xSrc, INT ySrc )\n{\n\tBOOL ret;\n\tOutTraceWG(\"WinGBitBlt: hdcdest=%x pos=(%d,%d) size=(%dx%d) hdcsrc=%x pos=(%d,%d)\\n\", \n\t\thdcDst, xDst, yDst, width, height, hdcSrc, xSrc, ySrc);\n    ret = extGDIBitBlt(hdcDst, xDst, yDst, width, height, hdcSrc, xSrc, ySrc, SRCCOPY);\n\n\tif(dxw.dwFlags8 & MARKWING32) dxw.Mark(hdcDst, TRUE, RGB(0, 255, 0), xDst, yDst, width, height);\n\treturn ret;\n}\n\nBOOL WINAPI extWinGStretchBlt(HDC hdcDst, INT xDst, INT yDst, INT widthDst, INT heightDst,\n                            HDC hdcSrc, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc )\n{\n    INT old_blt_mode;\n    BOOL ret;\n\t\n\tOutTraceWG(\"WinGStretchBlt: hdcdest=%x pos=(%d,%d) size=(%dx%d) hdcsrc=%x pos=(%d,%d) size=(%dx%d)\\n\",\n\t\thdcDst, xDst, yDst, widthDst, heightDst, hdcSrc, xSrc, ySrc, widthSrc, heightSrc);\n\t// wing hdc is always a screen DC.\n    old_blt_mode = SetStretchBltMode( hdcDst, COLORONCOLOR );\n    ret = extGDIStretchBlt( hdcDst, xDst, yDst, widthDst, heightDst, \n\t\thdcSrc, xSrc, ySrc, widthSrc, heightSrc, SRCCOPY );\n    SetStretchBltMode( hdcDst, old_blt_mode );\n\n\tif(dxw.dwFlags8 & MARKWING32) dxw.Mark(hdcDst, TRUE, RGB(255, 0, 0), xDst, yDst, widthDst, heightDst);\n    return ret;\n}\n\nBOOL WINAPI extWinGRecommendDIBFormat(BITMAPINFO *bmi)\n{\n\tOutTraceWG(\"WinGRecommendDIBFormat\\n\");\n    if (!bmi) return FALSE;\n\n    bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\n    bmi->bmiHeader.biWidth = 320;\n    bmi->bmiHeader.biHeight = -1;\n    bmi->bmiHeader.biPlanes = 1;\n    bmi->bmiHeader.biBitCount = 8;\n    bmi->bmiHeader.biCompression = BI_RGB;\n    bmi->bmiHeader.biSizeImage = 0;\n    bmi->bmiHeader.biXPelsPerMeter = 0;\n    bmi->bmiHeader.biYPelsPerMeter = 0;\n    bmi->bmiHeader.biClrUsed = 0;\n    bmi->bmiHeader.biClrImportant = 0;\n\n    return TRUE;\n}\n\nvoid * WINAPI extWinGGetDIBPointer(HBITMAP hbmp, BITMAPINFO *bmi)\n{\n    DIBSECTION ds;\n\n\tOutTraceWG(\"WinGGetDIBPointer\\n\");\n\tif (GetObjectW( hbmp, sizeof(ds), &ds ) == sizeof(ds)) {\n        memcpy( &bmi->bmiHeader, &ds.dsBmih, sizeof(*bmi) );\n        return ds.dsBm.bmBits;\n    }\n    return NULL;\n}\n\nUINT WINAPI extWinGSetDIBColorTable(HDC hdc, UINT start, UINT end, RGBQUAD *colors)\n{\n\tOutTraceWG(\"WinGSetDIBColorTable: hdc=%x start=%d end=%d\\n\", hdc, start, end);\n\t(*pInvalidateRect)(dxw.GethWnd(), NULL, FALSE);\n\treturn SetDIBColorTable( hdc, start, end, colors );\n}\n\nUINT WINAPI extWinGGetDIBColorTable(HDC hdc, UINT start, UINT end, RGBQUAD *colors)\n{\n\tOutTraceWG(\"WinGGetDIBColorTable: hdc=%x start=%d end=%d\\n\", hdc, start, end);\n\t(*pInvalidateRect)(dxw.GethWnd(), NULL, FALSE);\n    return GetDIBColorTable( hdc, start, end, colors );\n}\n\nHPALETTE WINAPI extWinGCreateHalfTonePalette(void)\n{\n    HDC hdc;\n    HPALETTE hpal;\n\n\tOutTraceWG(\"WinGCreateHalfTonePalette: void\\n\");\n    hdc = GetDC(0);\n    hpal = CreateHalftonePalette(hdc);\n    ReleaseDC(0, hdc);\n\t(*pInvalidateRect)(dxw.GethWnd(), NULL, FALSE);\n\n    return hpal;\n}\n\nHBRUSH WINAPI extWinGCreateHalfToneBrush(HDC hdc, COLORREF color, INT type)\n{\n\tOutTraceWG(\"WinGCreateHalfToneBrush: hdc=%x color=%x type=%d\\n\", hdc, color, type);\n\treturn CreateSolidBrush(color);\n}\n"
  },
  {
    "path": "dll/winmm.cpp",
    "content": "#define _CRT_SECURE_NO_WARNINGS \n#define _CRT_NON_CONFORMING_SWPRINTFS\n\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n#include \"resource.h\"\n\n#include \"MMSystem.h\"\n#include <stdio.h>\n\n#define SUPPRESSMCIERRORS FALSE\n#define EMULATEJOY TRUE\n#define INVERTJOYAXIS TRUE\n\n//#include \"logall.h\" // comment when not debugging\n\nBOOL IsWithinMCICall = FALSE;\n\ntypedef MMRESULT (WINAPI *timeGetDevCaps_Type)(LPTIMECAPS, UINT);\ntimeGetDevCaps_Type ptimeGetDevCaps = NULL;\nMMRESULT WINAPI exttimeGetDevCaps(LPTIMECAPS, UINT);\ntypedef MCIDEVICEID (WINAPI *mciGetDeviceIDA_Type)(LPCTSTR);\nmciGetDeviceIDA_Type pmciGetDeviceIDA = NULL;\nMCIDEVICEID WINAPI extmciGetDeviceIDA(LPCTSTR);\ntypedef MCIDEVICEID (WINAPI *mciGetDeviceIDW_Type)(LPCWSTR);\nmciGetDeviceIDW_Type pmciGetDeviceIDW = NULL;\nMCIDEVICEID WINAPI extmciGetDeviceIDW(LPCWSTR);\ntypedef DWORD (WINAPI *joyGetNumDevs_Type)(void);\njoyGetNumDevs_Type pjoyGetNumDevs = NULL;\nDWORD WINAPI extjoyGetNumDevs(void);\ntypedef MMRESULT (WINAPI *joyGetDevCapsA_Type)(DWORD, LPJOYCAPS, UINT);\njoyGetDevCapsA_Type pjoyGetDevCapsA = NULL;\nMMRESULT WINAPI extjoyGetDevCapsA(DWORD, LPJOYCAPS, UINT);\ntypedef MMRESULT (WINAPI *joyGetPosEx_Type)(DWORD, LPJOYINFOEX);\njoyGetPosEx_Type pjoyGetPosEx = NULL;\nMMRESULT WINAPI extjoyGetPosEx(DWORD, LPJOYINFOEX);\ntypedef MMRESULT (WINAPI *joyGetPos_Type)(DWORD, LPJOYINFO);\njoyGetPos_Type pjoyGetPos = NULL;\nMMRESULT WINAPI extjoyGetPos(DWORD, LPJOYINFO);\ntypedef MMRESULT (WINAPI *auxGetNumDevs_Type)(void);\nauxGetNumDevs_Type pauxGetNumDevs = NULL;\nMMRESULT WINAPI extauxGetNumDevs(void);\ntypedef BOOL (WINAPI *mciGetErrorStringA_Type)(DWORD, LPCSTR, UINT);\nmciGetErrorStringA_Type pmciGetErrorStringA;\nBOOL WINAPI extmciGetErrorStringA(DWORD, LPCSTR, UINT);\ntypedef MMRESULT (WINAPI *mixerGetLineControlsA_Type)(HMIXEROBJ, LPMIXERLINECONTROLS, DWORD);\nmixerGetLineControlsA_Type pmixerGetLineControlsA;\nMMRESULT WINAPI extmixerGetLineControlsA(HMIXEROBJ, LPMIXERLINECONTROLS, DWORD);\ntypedef UINT (WINAPI *waveOutGetNumDevs_Type)(void);\nwaveOutGetNumDevs_Type pwaveOutGetNumDevs;\nUINT WINAPI extwaveOutGetNumDevs(void);\ntypedef UINT (WINAPI *mixerGetNumDevs_Type)(void);\nmixerGetNumDevs_Type pmixerGetNumDevs;\nUINT WINAPI extmixerGetNumDevs(void);\ntypedef UINT (WINAPI *timeBeginPeriod_Type)(UINT);\ntimeBeginPeriod_Type ptimeBeginPeriod;\nUINT WINAPI exttimeBeginPeriod(UINT);\ntypedef UINT (WINAPI *timeEndPeriod_Type)(UINT);\ntimeEndPeriod_Type ptimeEndPeriod;\nUINT WINAPI exttimeEndPeriod(UINT);\n\n\nstatic HookEntryEx_Type Hooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"mciSendCommandA\", NULL, (FARPROC *)&pmciSendCommandA, (FARPROC)extmciSendCommandA},\n\t{HOOK_IAT_CANDIDATE, 0, \"mciSendCommandW\", NULL, (FARPROC *)&pmciSendCommandW, (FARPROC)extmciSendCommandW},\n\t{HOOK_HOT_CANDIDATE, 0, \"mciGetDeviceIDA\", NULL, (FARPROC *)&pmciGetDeviceIDA, (FARPROC)extmciGetDeviceIDA},\n\t{HOOK_HOT_CANDIDATE, 0, \"mciGetDeviceIDW\", NULL, (FARPROC *)&pmciGetDeviceIDW, (FARPROC)extmciGetDeviceIDW},\n\t//{HOOK_IAT_CANDIDATE, 0, \"auxGetNumDevs\", NULL, (FARPROC *)&pauxGetNumDevs, (FARPROC)extauxGetNumDevs},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type TimeHooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"timeGetTime\", NULL, (FARPROC *)&ptimeGetTime, (FARPROC)exttimeGetTime},\n\t{HOOK_HOT_CANDIDATE, 0, \"timeKillEvent\", NULL, (FARPROC *)&ptimeKillEvent, (FARPROC)exttimeKillEvent},\n\t{HOOK_HOT_CANDIDATE, 0, \"timeSetEvent\", NULL, (FARPROC *)&ptimeSetEvent, (FARPROC)exttimeSetEvent},\n\t{HOOK_HOT_CANDIDATE, 0, \"timeGetDevCaps\", NULL, (FARPROC *)&ptimeGetDevCaps, (FARPROC)exttimeGetDevCaps},\n\t{HOOK_HOT_CANDIDATE, 0, \"timeBeginPeriod\", NULL, (FARPROC *)&ptimeBeginPeriod, (FARPROC)exttimeBeginPeriod},\n\t{HOOK_HOT_CANDIDATE, 0, \"timeEndPeriod\", NULL, (FARPROC *)&ptimeEndPeriod, (FARPROC)exttimeEndPeriod},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type RemapHooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"mciSendStringA\", NULL, (FARPROC *)&pmciSendStringA, (FARPROC)extmciSendStringA},\n\t{HOOK_HOT_CANDIDATE, 0, \"mciSendStringW\", NULL, (FARPROC *)&pmciSendStringW, (FARPROC)extmciSendStringW},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type JoyHooks[]={\n\t{HOOK_HOT_CANDIDATE, 0, \"joyGetNumDevs\", NULL, (FARPROC *)&pjoyGetNumDevs, (FARPROC)extjoyGetNumDevs},\n\t{HOOK_HOT_CANDIDATE, 0, \"joyGetDevCapsA\", NULL, (FARPROC *)&pjoyGetDevCapsA, (FARPROC)extjoyGetDevCapsA},\n\t{HOOK_HOT_CANDIDATE, 0, \"joyGetPosEx\", NULL, (FARPROC *)&pjoyGetPosEx, (FARPROC)extjoyGetPosEx},\n\t{HOOK_HOT_CANDIDATE, 0, \"joyGetPos\", NULL, (FARPROC *)&pjoyGetPos, (FARPROC)extjoyGetPos},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nstatic HookEntryEx_Type DebugHooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"mciGetErrorStringA\", NULL, (FARPROC *)&pmciGetErrorStringA, (FARPROC)extmciGetErrorStringA},\n\t{HOOK_IAT_CANDIDATE, 0, \"mixerGetLineControlsA\", NULL, (FARPROC *)&pmixerGetLineControlsA, (FARPROC)extmixerGetLineControlsA},\n\t{HOOK_IAT_CANDIDATE, 0, \"waveOutGetNumDevs\", NULL, (FARPROC *)&pwaveOutGetNumDevs, (FARPROC)extwaveOutGetNumDevs},\n\t{HOOK_IAT_CANDIDATE, 0, \"auxGetNumDevs\", NULL, (FARPROC *)&pauxGetNumDevs, (FARPROC)extauxGetNumDevs},\n\t{HOOK_IAT_CANDIDATE, 0, \"mixerGetNumDevs\", NULL, (FARPROC *)&pmixerGetNumDevs, (FARPROC)extmixerGetNumDevs},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nvoid HookWinMM(HMODULE module, char *libname)\n{\n\tHookLibraryEx(module, Hooks, libname);\n\tif(dxw.dwFlags2 & TIMESTRETCH) HookLibraryEx(module, TimeHooks, libname);\n\tif(dxw.dwFlags5 & REMAPMCI) HookLibraryEx(module, RemapHooks, libname);\n\tif(dxw.dwFlags6 & VIRTUALJOYSTICK) HookLibraryEx(module, JoyHooks, libname);\n\tif(IsDebug) HookLibraryEx(module, DebugHooks, libname);\n}\n\nFARPROC Remap_WinMM_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\n\tif (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\tif(dxw.dwFlags2 & TIMESTRETCH)\n\t\tif (addr=RemapLibraryEx(proc, hModule, TimeHooks)) return addr;\n\tif(dxw.dwFlags5 & REMAPMCI)\n\t\tif (addr=RemapLibraryEx(proc, hModule, RemapHooks)) return addr;\n\tif(dxw.dwFlags6 & VIRTUALJOYSTICK)\n\t\tif (addr=RemapLibraryEx(proc, hModule, JoyHooks)) return addr;\n\tif(IsDebug)\n\t\tif (addr=RemapLibraryEx(proc, hModule, DebugHooks)) return addr;\n\n\treturn NULL;\n}\n\nMMRESULT WINAPI exttimeGetDevCaps(LPTIMECAPS ptc, UINT cbtc)\n{\n\tMMRESULT res;\n\tres = (*ptimeGetDevCaps)(ptc, cbtc);\n\tif(res) {\n\t\tOutTraceE(\"timeGetDevCaps ERROR: res=%x err=%d\\n\", res, GetLastError());\n\t}\n\telse {\n\t\tOutTraceDW(\"timeGetDevCaps: period min=%d max=%d\\n\", ptc->wPeriodMin, ptc->wPeriodMax);\n\t}\n\treturn MMSYSERR_NOERROR;\n}\n\nDWORD WINAPI exttimeGetTime(void)\n{\n\tDWORD ret;\n\tret = dxw.GetTickCount();\n\t//OutTraceB(\"timeGetTime: time=%x\\n\", ret);\n\treturn ret;\n}\n\nMMRESULT WINAPI exttimeSetEvent(UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, DWORD_PTR dwUser, UINT fuEvent)\n{\n\tMMRESULT res;\n\tUINT NewDelay;\n\tOutTraceDW(\"timeSetEvent: Delay=%d Resolution=%d Event=%x\\n\", uDelay, uResolution, fuEvent);\n\tif(dxw.dwFlags4 & STRETCHTIMERS) NewDelay = dxw.StretchTime(uDelay);\n\telse NewDelay = uDelay;\n\tres=(*ptimeSetEvent)(NewDelay, uResolution, lpTimeProc, dwUser, fuEvent);\n\tif(res) dxw.PushTimer(res, uDelay, uResolution, lpTimeProc, dwUser, fuEvent);\n\tOutTraceDW(\"timeSetEvent: ret=%x\\n\", res);\n\treturn res;\n}\n\nMMRESULT WINAPI exttimeKillEvent(UINT uTimerID)\n{\n\tMMRESULT res;\n\tOutTraceDW(\"timeKillEvent: TimerID=%x\\n\", uTimerID);\n\tres=(*ptimeKillEvent)(uTimerID);\n\tif(res==TIMERR_NOERROR) dxw.PopTimer(uTimerID);\n\tOutTraceDW(\"timeKillEvent: ret=%x\\n\", res);\n\treturn res;\n}\n\nMMRESULT WINAPI exttimeBeginPeriod(UINT uPeriod)\n{\n\tMMRESULT res;\n\tOutTraceDW(\"timeBeginPeriod: period=%d\\n\", uPeriod);\n\tres=(*ptimeBeginPeriod)(uPeriod);\n\tOutTraceDW(\"timeBeginPeriod: ret=%x\\n\", res);\n\treturn res;\n}\n\nMMRESULT WINAPI exttimeEndPeriod(UINT uPeriod)\n{\n\tMMRESULT res;\n\tOutTraceDW(\"timeEndPeriod: period=%d\\n\", uPeriod);\n\tres=(*ptimeEndPeriod)(uPeriod);\n\tOutTraceDW(\"timeEndPeriod: ret=%x\\n\", res);\n\treturn res;\n}\n\n/* MCI_DGV_PUT_FRAME\n\n    The rectangle defined for MCI_DGV_RECT applies to the frame rectangle. \n\tThe frame rectangle specifies the portion of the frame buffer used as the destination of the video images obtained from the video rectangle. \n\tThe video should be scaled to fit within the frame buffer rectangle.\n    The rectangle is specified in frame buffer coordinates. \n\tThe default rectangle is the full frame buffer. \n\tSpecifying this rectangle lets the device scale the image as it digitizes the data. \n\tDevices that cannot scale the image reject this command with MCIERR_UNSUPPORTED_FUNCTION. \n\tYou can use the MCI_GETDEVCAPS_CAN_STRETCH flag with the MCI_GETDEVCAPS command to determine if a device scales the image. A device returns FALSE if it cannot scale the image.\n*/\n\nstatic char *sStatusItem(DWORD dwItem)\n{\n\tchar *s;\n\tswitch(dwItem){\n\t\tcase MCI_STATUS_LENGTH:\t\t\t\ts = \"LENGTH\"; break;\n\t\tcase MCI_STATUS_POSITION:\t\t\ts = \"POSITION\"; break;\n\t\tcase MCI_STATUS_NUMBER_OF_TRACKS:\ts = \"NUMBER_OF_TRACKS\"; break;\n\t\tcase MCI_STATUS_MODE:\t\t\t\ts = \"MODE\"; break;\n\t\tcase MCI_STATUS_MEDIA_PRESENT:\t\ts = \"MEDIA_PRESENT\"; break;\n\t\tcase MCI_STATUS_TIME_FORMAT:\t\ts = \"TIME_FORMAT\"; break;\n\t\tcase MCI_STATUS_READY:\t\t\t\ts = \"READY\"; break;\n\t\tcase MCI_STATUS_CURRENT_TRACK:\t\ts = \"CURRENT_TRACK\"; break;\n\t\tdefault:\t\t\t\t\t\t\ts = \"???\"; break;\n\t}\n\treturn s;\n}\n\nstatic char *sDeviceType(DWORD dt)\n{\n\tchar *s;\n\tswitch(dt){\n\t\tcase MCI_ALL_DEVICE_ID: s=\"ALL_DEVICE_ID\"; break;\n\t\tcase MCI_DEVTYPE_VCR: s=\"VCR\"; break;\n\t\tcase MCI_DEVTYPE_VIDEODISC: s=\"VIDEODISC\"; break;\n\t\tcase MCI_DEVTYPE_OVERLAY: s=\"OVERLAY\"; break;\n\t\tcase MCI_DEVTYPE_CD_AUDIO: s=\"CD_AUDIO\"; break;\n\t\tcase MCI_DEVTYPE_DAT: s=\"DAT\"; break;\n\t\tcase MCI_DEVTYPE_SCANNER: s=\"SCANNER\"; break;\n\t\tcase MCI_DEVTYPE_ANIMATION: s=\"ANIMATION\"; break;\n\t\tcase MCI_DEVTYPE_DIGITAL_VIDEO: s=\"DIGITAL_VIDEO\"; break;\n\t\tcase MCI_DEVTYPE_OTHER: s=\"OTHER\"; break;\n\t\tcase MCI_DEVTYPE_WAVEFORM_AUDIO: s=\"WAVEFORM_AUDIO\"; break;\n\t\tcase MCI_DEVTYPE_SEQUENCER: s=\"SEQUENCER\"; break;\n\t\tdefault: s=\"unknown\"; break;\n\t}\n\treturn s;\n}\n\nstatic char *sTimeFormat(DWORD tf)\n{\n\tchar *s;\n\tswitch(tf){\n\t\tcase MCI_FORMAT_MILLISECONDS: s=\"MILLISECONDS\"; break;\n\t\tcase MCI_FORMAT_HMS: s=\"HMS\"; break;\n\t\tcase MCI_FORMAT_MSF: s=\"MSF\"; break;\n\t\tcase MCI_FORMAT_FRAMES: s=\"FRAMES\"; break;\n\t\tcase MCI_FORMAT_SMPTE_24: s=\"SMPTE_24\"; break;\n\t\tcase MCI_FORMAT_SMPTE_25: s=\"SMPTE_25\"; break;\n\t\tcase MCI_FORMAT_SMPTE_30: s=\"SMPTE_30\"; break;\n\t\tcase MCI_FORMAT_SMPTE_30DROP: s=\"SMPTE_30DROP\"; break;\n\t\tcase MCI_FORMAT_BYTES: s=\"BYTES\"; break;\n\t\tcase MCI_FORMAT_SAMPLES: s=\"SAMPLES\"; break;\n\t\tcase MCI_FORMAT_TMSF: s=\"TMSF\"; break;\n\t\tdefault: s=\"unknown\"; break;\n\t}\n\treturn s;\n}\n\nstatic void DumpMciMessage(char *label, BOOL isAnsi, UINT uMsg, DWORD_PTR fdwCommand, DWORD_PTR dwParam)\n{\n\tchar *api=\"mciSendCommand\";\n\tswitch(uMsg){\n\t\tcase MCI_BREAK: \n\t\t\t{\n\t\t\t\tLPMCI_BREAK_PARMS lpBreak = (LPMCI_BREAK_PARMS)dwParam;\n\t\t\t\tOutTrace(\"%s%s: MCI_BREAK cb=%x virtkey=%d hwndbreak=%x\\n\",\n\t\t\t\t\tapi, label, lpBreak->dwCallback, lpBreak->nVirtKey, lpBreak->hwndBreak);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase MCI_INFO: \n\t\t\t{\n\t\t\t\tLPMCI_INFO_PARMS lpInfo = (LPMCI_INFO_PARMS)dwParam;\n\t\t\t\tOutTrace(\"%s%s: MCI_INFO cb=%x retsize=%x\\n\",\n\t\t\t\t\tapi, label, lpInfo->dwCallback, lpInfo->dwRetSize);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase MCI_PLAY: \n\t\t\t{\n\t\t\t\tLPMCI_PLAY_PARMS lpPlay = (LPMCI_PLAY_PARMS)dwParam;\n\t\t\t\tOutTrace(\"%s%s: MCI_PLAY cb=%x from=%x to=%x\\n\",\n\t\t\t\t\tapi, label, lpPlay->dwCallback, lpPlay->dwFrom, lpPlay->dwTo);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase MCI_GETDEVCAPS:\n\t\t\t{\n\t\t\t\tLPMCI_GETDEVCAPS_PARMS lpDevCaps = (LPMCI_GETDEVCAPS_PARMS)dwParam;\n\t\t\t\tOutTrace(\"%s%s: MCI_GETDEVCAPS cb=%x ret=%x item=%x\\n\",\n\t\t\t\t\tapi, label, lpDevCaps->dwCallback, lpDevCaps->dwReturn, lpDevCaps->dwItem);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase MCI_OPEN: \n\t\t\t{\n\t\t\t\tDWORD dwFlags = (DWORD)fdwCommand;\n\t\t\t\t// how to dump LPMCI_OPEN_PARMS strings without crash?\n\t\t\t\tif(isAnsi){\n\t\t\t\t\tLPMCI_OPEN_PARMSA lpOpen = (LPMCI_OPEN_PARMSA)dwParam;\n\t\t\t\t\tOutTrace(\"%s%s: MCI_OPEN %scb=%x devid=%x devtype=%s elementname=%s alias=%s\\n\",\n\t\t\t\t\t\tapi, label, \n\t\t\t\t\t\t(dwFlags & MCI_OPEN_SHAREABLE) ? \"OPEN_SHAREABLE \" : \"\",\n\t\t\t\t\t\tlpOpen->dwCallback, lpOpen->wDeviceID,\n\t\t\t\t\t\t\"\", //(dwFlags & MCI_OPEN_TYPE) ? lpOpen->lpstrDeviceType : \"\",\n\t\t\t\t\t\t(dwFlags & MCI_OPEN_ELEMENT) ? lpOpen->lpstrElementName : \"\",\n\t\t\t\t\t\t(dwFlags & MCI_OPEN_ALIAS) ? lpOpen->lpstrAlias : \"\");\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tLPMCI_OPEN_PARMSW lpOpen = (LPMCI_OPEN_PARMSW)dwParam;\n\t\t\t\t\tOutTrace(\"%s%s: MCI_OPEN cb=%x devid=%x devtype=%ls elementname=%ls alias=%ls\\n\",\n\t\t\t\t\t\tapi, label, \n\t\t\t\t\t\t(dwFlags & MCI_OPEN_SHAREABLE) ? \"OPEN_SHAREABLE \" : \"\",\n\t\t\t\t\t\tlpOpen->dwCallback, lpOpen->wDeviceID,\n\t\t\t\t\t\tL\"\", //(dwFlags & MCI_OPEN_TYPE) ? lpOpen->lpstrDeviceType : L\"\",\n\t\t\t\t\t\t(dwFlags & MCI_OPEN_ELEMENT) ? lpOpen->lpstrElementName : L\"\",\n\t\t\t\t\t\t(dwFlags & MCI_OPEN_ALIAS) ? lpOpen->lpstrAlias : L\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\tcase MCI_STATUS:\n\t\t\t{\n\t\t\t\tLPMCI_STATUS_PARMS lpStatus = (LPMCI_STATUS_PARMS)dwParam;\n\t\t\t\tOutTrace(\"%s%s: MCI_STATUS cb=%x ret=%x item=%x(%s) track=%x\\n\",\n\t\t\t\t\tapi, label, lpStatus->dwCallback, lpStatus->dwReturn, lpStatus->dwItem, sStatusItem(lpStatus->dwItem), lpStatus->dwTrack);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase MCI_SYSINFO:\n\t\t\t{\n\t\t\t\tLPMCI_SYSINFO_PARMS lpSysInfo = (LPMCI_SYSINFO_PARMS)dwParam;\n\t\t\t\tOutTrace(\"%s%s: MCI_SYSINFO cb=%x retsize=%x number=%x devtype=%x(%s)\\n\",\n\t\t\t\t\tapi, label, lpSysInfo->dwCallback, lpSysInfo->dwRetSize, lpSysInfo->dwNumber, lpSysInfo->wDeviceType, sDeviceType(lpSysInfo->wDeviceType));\n\t\t\t}\n\t\t\tbreak;\n\t\tcase MCI_SET:\n\t\t\t{\n\t\t\t\tLPMCI_SET_PARMS lpSetInfo = (LPMCI_SET_PARMS)dwParam;\n\t\t\t\tOutTrace(\"%s%s: MCI_SET cb=%x audio=%x timeformat=%x(%s)\\n\",\n\t\t\t\t\tapi, label, lpSetInfo->dwCallback, lpSetInfo->dwAudio, lpSetInfo->dwTimeFormat, sTimeFormat(lpSetInfo->dwTimeFormat));\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t{\n\t\t\t\tLPMCI_GENERIC_PARMS lpGeneric = (LPMCI_GENERIC_PARMS)dwParam;\n\t\t\t\tif(lpGeneric)\n\t\t\t\t\tOutTrace(\"%s%s: %s cb=%x\\n\", api, label, ExplainMCICommands(uMsg), lpGeneric->dwCallback);\n\t\t\t\telse\n\t\t\t\t\tOutTrace(\"%s%s: %s params=(NULL)\\n\", api, label, ExplainMCICommands(uMsg));\n\t\t\t}\n\t\t\tbreak;\n\t}\n}\n\nMCIERROR WINAPI extmciSendCommand(BOOL isAnsi, mciSendCommand_Type pmciSendCommand, MCIDEVICEID IDDevice, UINT uMsg, DWORD_PTR fdwCommand, DWORD_PTR dwParam)\n{\n\tRECT saverect;\n\tMCIERROR ret;\n\tLPMCI_ANIM_RECT_PARMS pr;\n\tLPMCI_OVLY_WINDOW_PARMSA pw;\n\tLPMCI_OPEN_PARMSA po;\n\n\tOutTraceDW(\"mciSendCommand%c: IDDevice=%x msg=%x(%s) Command=%x(%s)\\n\",\n\t\tisAnsi ? 'A' : 'W', \n\t\tIDDevice, \n\t\tuMsg, ExplainMCICommands(uMsg), \n\t\tfdwCommand, ExplainMCIFlags(uMsg, fdwCommand));\n\n\tif(IsDebug) DumpMciMessage(\">>\", isAnsi, uMsg, fdwCommand, dwParam);\n\n\tif(dxw.dwFlags6 & BYPASSMCI){\n\t\t//MCI_OPEN_PARMS *op;\n\t\tMCI_STATUS_PARMS *sp;\n\t\tret = 0;\n\t\tswitch(uMsg){\n\t\t\tcase MCI_OPEN:\n\t\t\t\tpo = (MCI_OPEN_PARMSA *)dwParam;\n\t\t\t\tpo->wDeviceID = 1;\n\t\t\t\tbreak;\n\t\t\tcase MCI_STATUS:\n\t\t\t\tif(fdwCommand & MCI_STATUS_ITEM){\n\t\t\t\t\t// fix for Tie Fighter 95: when bypassing, let the caller know you have no CD tracks\n\t\t\t\t\t// otherwise you risk an almost endless loop going through the unassigned returned \n\t\t\t\t\t// number of ghost tracks\n\t\t\t\t\t// fix for \"Emperor of the Fading Suns\": the MCI_STATUS_ITEM is set in .or. with\n\t\t\t\t\t// MCI_TRACK\n\t\t\t\t\tsp = (MCI_STATUS_PARMS *)dwParam;\n\t\t\t\t\tswitch(fdwCommand){\n\t\t\t\t\t\tcase MCI_TRACK:\n\t\t\t\t\t\t\tsp->dwReturn = 1;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tsp->dwTrack = 0;\n\t\t\t\t\t\t\tif(sp->dwItem == MCI_STATUS_CURRENT_TRACK) sp->dwTrack = 1;\n\t\t\t\t\t\t\tif(sp->dwItem == MCI_STATUS_NUMBER_OF_TRACKS) sp->dwTrack = 1;\n\t\t\t\t\t\t\tif(sp->dwItem == MCI_STATUS_LENGTH) sp->dwTrack = 200;\n\t\t\t\t\t\t\tif(sp->dwItem == MCI_STATUS_MEDIA_PRESENT) sp->dwTrack = 1;\n\t\t\t\t\t\t\tsp->dwReturn = 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tif(IsDebug) DumpMciMessage(\"<<\", isAnsi, uMsg, fdwCommand, dwParam);\n\t\treturn ret;\n\t}\n\n\tif(dxw.IsFullScreen()){\n\t\tswitch(uMsg){\n\t\t\tcase MCI_WINDOW:\n\t\t\t\tpw = (MCI_OVLY_WINDOW_PARMSA *)dwParam;\n\t\t\t\tOutTraceB(\"mciSendCommand: hwnd=%x CmdShow=%x\\n\",\n\t\t\t\t\tpw->hWnd, pw->nCmdShow);\n\t\t\t\tif(dxw.IsRealDesktop(pw->hWnd)) {\n\t\t\t\t\tpw->hWnd = dxw.GethWnd();\n\t\t\t\t\tOutTraceB(\"mciSendCommand: REDIRECT hwnd=%x\\n\", pw->hWnd);\n\t\t\t\t}\n\t\t\t\t// attempt to stretch \"Wizardry Chronicle\" intro movie, but it doesn't work ...\n\t\t\t\t//if(1){\n\t\t\t\t//\tfdwCommand &= ~MCI_OVLY_WINDOW_DISABLE_STRETCH;\n\t\t\t\t//\tfdwCommand |= MCI_OVLY_WINDOW_ENABLE_STRETCH;\n\t\t\t\t//\tfdwCommand |= MCI_ANIM_WINDOW_HWND;\n\t\t\t\t//\tOutTraceB(\"mciSendCommand: STRETCH flags=%x hwnd=%x\\n\", fdwCommand, pw->hWnd);\n\t\t\t\t//}\n\t\t\t\tbreak;\n\t\t\tcase MCI_PUT:\n\t\t\t\tRECT client;\n\t\t\t\tpr = (MCI_ANIM_RECT_PARMS *)dwParam;\n\t\t\t\tOutTraceB(\"mciSendCommand: rect=(%d,%d),(%d,%d)\\n\",\n\t\t\t\t\tpr->rc.left, pr->rc.top, pr->rc.right, pr->rc.bottom);\n\t\t\t\t(*pGetClientRect)(dxw.GethWnd(), &client);\n\t\t\t\t//fdwCommand |= MCI_ANIM_PUT_DESTINATION;\n\t\t\t\tfdwCommand |= MCI_ANIM_RECT;\n\t\t\t\tsaverect=pr->rc;\n\t\t\t\tpr->rc.top = (pr->rc.top * client.bottom) / dxw.GetScreenHeight();\n\t\t\t\tpr->rc.bottom = (pr->rc.bottom * client.bottom) / dxw.GetScreenHeight();\n\t\t\t\tpr->rc.left = (pr->rc.left * client.right) / dxw.GetScreenWidth();\n\t\t\t\tpr->rc.right = (pr->rc.right * client.right) / dxw.GetScreenWidth();\n\t\t\t\tOutTraceB(\"mciSendCommand: fixed rect=(%d,%d),(%d,%d)\\n\",\n\t\t\t\t\tpr->rc.left, pr->rc.top, pr->rc.right, pr->rc.bottom);\n\t\t\t\tbreak;\n\t\t\tcase MCI_PLAY:\n\t\t\t\tif(dxw.dwFlags6 & NOMOVIES) return 0; // ???\n\t\t\t\tbreak;\n\t\t\tcase MCI_OPEN:\n\t\t\t\tif(dxw.dwFlags6 & NOMOVIES) return 275; // quite brutal, but working ....\n\t\t\t\tbreak;\n\t\t\tcase MCI_STOP:\n\t\t\t\tif(dxw.dwFlags6 & NOMOVIES) return 0; // ???\n\t\t\t\tbreak;\n\t\t\tcase MCI_CLOSE:\n\t\t\t\tif(dxw.dwFlags6 & NOMOVIES) return 0; // ???\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n#if 0\n\tLPMCI_GENERIC_PARMS lpGeneric = (LPMCI_GENERIC_PARMS)dwParam;\n\tif(HIWORD(lpGeneric->dwCallback) == NULL) {\n\t\tlpGeneric->dwCallback = MAKELONG(dxw.GethWnd(),0);\n\t\tOutTraceB(\"mciSendCommand: REDIRECT dwCallback=%x\\n\", dxw.GethWnd());\n\t}\n#endif\n\n\tret=(*pmciSendCommand)(IDDevice, uMsg, fdwCommand, dwParam);\n\tif(IsDebug) DumpMciMessage(\"<<\", isAnsi, uMsg, fdwCommand, dwParam);\n\n\tif(ret == 0){\n\t\tswitch(uMsg){\n\t\tcase MCI_STATUS:\n\t\t\tMCI_STATUS_PARMS *p = (MCI_STATUS_PARMS *)dwParam;\n\t\t\tOutTraceDW(\"mciSendCommand: Item=%d Track=%d return=%x\\n\", p->dwItem, p->dwTrack, p->dwReturn);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif(dxw.IsFullScreen() && uMsg==MCI_PUT) pr->rc=saverect;\n\tif (ret) OutTraceE(\"mciSendCommand: ERROR res=%d\\n\", ret);\n\treturn ret;\n}\n\nMCIERROR WINAPI extmciSendCommandA(MCIDEVICEID IDDevice, UINT uMsg, DWORD_PTR fdwCommand, DWORD_PTR dwParam)\n{\n\treturn extmciSendCommand(TRUE, pmciSendCommandA, IDDevice, uMsg, fdwCommand, dwParam);\n}\n\nMCIERROR WINAPI extmciSendCommandW(MCIDEVICEID IDDevice, UINT uMsg, DWORD_PTR fdwCommand, DWORD_PTR dwParam)\n{\n\treturn extmciSendCommand(FALSE, pmciSendCommandW, IDDevice, uMsg, fdwCommand, dwParam);\n}\n\nMCIERROR WINAPI extmciSendStringA(LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback)\n{\n\tMCIERROR ret;\n\tif(IsWithinMCICall) return(*pmciSendStringA)(lpszCommand, lpszReturnString, cchReturn, hwndCallback); // just proxy ...\n\tOutTraceDW(\"mciSendStringA: Command=\\\"%s\\\" Return=%x Callback=%x\\n\", lpszCommand, cchReturn, hwndCallback);\n\tchar sMovieNickName[81];\n\tchar sTail[81];\n\tRECT rect;\n\tsTail[0]=0;\n\tif (sscanf(lpszCommand, \"put %s destination at %ld %ld %ld %ld %s\", \n\t\tsMovieNickName, &(rect.left), &(rect.top), &(rect.right), &(rect.bottom), sTail)>=5){\n\t\tchar NewCommand[256];\n\t\t// v2.03.19 height / width fix\n\t\trect.right += rect.left; // convert width to position\n\t\trect.bottom += rect.top; // convert height to position\n\t\trect=dxw.MapClientRect(&rect);\n\t\trect.right -= rect.left; // convert position to width\n\t\trect.bottom -= rect.top; // convert position to height\n\t\tsprintf(NewCommand, \"put %s destination at %d %d %d %d %s\", sMovieNickName, rect.left, rect.top, rect.right, rect.bottom, sTail);\n\t\tlpszCommand=NewCommand;\n\t\tOutTraceDW(\"mciSendStringA: replaced Command=\\\"%s\\\"\\n\", lpszCommand);\n\t}\n\tIsWithinMCICall=TRUE;\n\tret=(*pmciSendStringA)(lpszCommand, lpszReturnString, cchReturn, hwndCallback);\n\tIsWithinMCICall=FALSE;\n\tif(ret) OutTraceDW(\"mciSendStringA ERROR: ret=%x\\n\", ret);\n\tOutTraceDW(\"mciSendStringA: RetString=\\\"%s\\\"\\n\", lpszReturnString);\n\treturn ret;\n}\n\nMCIERROR WINAPI extmciSendStringW(LPCWSTR lpszCommand, LPWSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback)\n{\n\tMCIERROR ret;\n\tWCHAR *target=L\"put movie destination at \";\n\tif(IsWithinMCICall) return(*pmciSendStringW)(lpszCommand, lpszReturnString, cchReturn, hwndCallback); // just proxy ...\n\tOutTraceDW(\"mciSendStringW: Command=\\\"%ls\\\" Return=%x Callback=%x\\n\", lpszCommand, cchReturn, hwndCallback);\n\tWCHAR sMovieNickName[81];\n\tRECT rect;\n\tif (swscanf(lpszCommand, L\"put %ls destination at %ld %ld %ld %ld\", \n\t\tsMovieNickName, &(rect.left), &(rect.top), &(rect.right), &(rect.bottom))==5){\n\t\tWCHAR NewCommand[256];\n\t\t// v2.03.19 height / width fix\n\t\trect.right += rect.left; // convert width to position\n\t\trect.bottom += rect.top; // convert height to position\n\t\trect=dxw.MapClientRect(&rect);\n\t\trect.right -= rect.left; // convert position to width\n\t\trect.bottom -= rect.top; // convert position to height\n\t\tswprintf(NewCommand, L\"put %ls destination at %d %d %d %d\", sMovieNickName, rect.left, rect.top, rect.right, rect.bottom);\n\t\tlpszCommand=NewCommand;\n\t\tOutTraceDW(\"mciSendStringW: replaced Command=\\\"%ls\\\"\\n\", lpszCommand);\n\t}\n\tIsWithinMCICall=TRUE;\n\tret=(*pmciSendStringW)(lpszCommand, lpszReturnString, cchReturn, hwndCallback);\n\tIsWithinMCICall=FALSE;\n\tif(ret) OutTraceDW(\"mciSendStringW ERROR: ret=%x\\n\", ret);\n\tOutTraceDW(\"mciSendStringW: RetString=\\\"%ls\\\"\\n\", lpszReturnString);\n\treturn ret;\n}\n\nMCIDEVICEID WINAPI extmciGetDeviceIDA(LPCTSTR lpszDevice)\n{\n\tMCIDEVICEID ret;\n\tret = (*pmciGetDeviceIDA)(lpszDevice);\n\tOutTraceDW(\"mciGetDeviceIDA: device=\\\"%s\\\" ret=%x\\n\", lpszDevice, ret);\n\treturn ret;\n}\n\nMCIDEVICEID WINAPI extmciGetDeviceIDW(LPCWSTR lpszDevice)\n{\n\tMCIDEVICEID ret;\n\tret = (*pmciGetDeviceIDW)(lpszDevice);\n\tOutTraceDW(\"mciGetDeviceIDW: device=\\\"%ls\\\" ret=%x\\n\", lpszDevice, ret);\n\treturn ret;\n}\n\nDWORD WINAPI extjoyGetNumDevs(void)\n{\n\tOutTraceDW(\"joyGetNumDevs: emulate joystick ret=1\\n\");\n\treturn 1;\n}\n\n#define XSPAN 128\n#define YSPAN 128\nstatic void ShowJoystick(LONG, LONG, DWORD);\n\nMMRESULT WINAPI extjoyGetDevCapsA(DWORD uJoyID, LPJOYCAPS pjc, UINT cbjc)\n{\n\tOutTraceDW(\"joyGetDevCaps: joyid=%d size=%d\\n\", uJoyID, cbjc);\n\tif((uJoyID != -1) && (uJoyID != 0)) {\n\t\tOutTraceDW(\"joyGetDevCaps: ERROR joyid=%d ret=MMSYSERR_NODRIVER\\n\", uJoyID, cbjc);\n\t\treturn MMSYSERR_NODRIVER;\n\t}\n\tif(cbjc != sizeof(JOYCAPS)) {\n\t\tOutTraceDW(\"joyGetDevCaps: ERROR joyid=%d size=%d ret=MMSYSERR_INVALPARAM\\n\", uJoyID, cbjc);\n\t\treturn MMSYSERR_INVALPARAM;\n\t}\n\tuJoyID = 0; // always first (unique) one ...\n\n\t// set Joystick capability structure\n\tmemset(pjc, 0, sizeof(JOYCAPS));\n\tstrncpy(pjc->szPname, \"DxWnd Joystick Emulator\", MAXPNAMELEN);\n\tpjc->wXmin = -XSPAN;\n\tpjc->wXmax = XSPAN;\n\tpjc->wYmin = -YSPAN;\n\tpjc->wYmax = YSPAN;\n\tpjc->wNumButtons = 2;\n\tpjc->wMaxButtons = 2;\n\tpjc->wPeriodMin = 60;\n\tpjc->wPeriodMax = 600;\n\tpjc->wCaps = 0;\n\tpjc->wMaxAxes = 2;\n\tpjc->wNumAxes = 2;\n\n\treturn JOYERR_NOERROR;\n}\n\nBOOL JoyProcessMouseWheelMessage(WPARAM wParam, LPARAM lParam)\n{\n\tint zDelta;\n\tDWORD dwSensivity = GetHookInfo()->VJoySensivity;\n\tDWORD dwJoyStatus =\tGetHookInfo()->VJoyStatus;\n\n\tif(!(dwJoyStatus & VJMOUSEWHEEL)) return FALSE;\n\t\n\tif(!dwSensivity) dwSensivity=100;\n\t//fwKeys = GET_KEYSTATE_WPARAM(wParam);\n\tzDelta = GET_WHEEL_DELTA_WPARAM(wParam);\n\tif(zDelta >  4 * WHEEL_DELTA) zDelta =  4 * WHEEL_DELTA;\n\tif(zDelta < -4 * WHEEL_DELTA) zDelta = -4 * WHEEL_DELTA;\n\tif(zDelta > 0) dwSensivity = (dwSensivity * 110 *  zDelta) / (100 * WHEEL_DELTA);\n\tif(zDelta < 0) dwSensivity = (dwSensivity * 100 * -zDelta) / (110 * WHEEL_DELTA);\n\tif(dwSensivity < 32) dwSensivity = 32;\n\tif(dwSensivity > 250) dwSensivity = 250;\n\tGetHookInfo()->VJoySensivity = dwSensivity;\n\treturn TRUE;\n}\n\nstatic MMRESULT GetJoy(char *apiname, DWORD uJoyID, LPJOYINFO lpj)\n{\n\tOutTraceC(\"%s: joyid=%d\\n\", apiname, uJoyID);\n\tif(uJoyID != 0) return JOYERR_PARMS;\n\tLONG x, y, CenterX, CenterY;\n\tHWND hwnd;\n\tDWORD dwButtons;\n\tstatic BOOL bJoyLock = FALSE;\n\tstatic DWORD dwLastClick = 0;\n\textern DXWNDSTATUS *pStatus;\n\tDWORD dwVJoyStatus;\n\n\tdwVJoyStatus = GetHookInfo()->VJoyStatus;\n\tif(!(dwVJoyStatus & VJOYENABLED)) {\n\t\tlpj->wXpos = 0;\n\t\tlpj->wYpos = 0;\n\t\tlpj->wZpos = 0;\n\t\tpStatus->joyposx = (short)0;\n\t\tpStatus->joyposy = (short)0;\n\t\treturn JOYERR_NOERROR;\n\t}\n\n\tdwButtons = 0;\n\tif ((GetKeyState(VK_LBUTTON) < 0) || (dwVJoyStatus & B1AUTOFIRE)) dwButtons |= JOY_BUTTON1;\n\tif ((GetKeyState(VK_RBUTTON) < 0) || (dwVJoyStatus & B2AUTOFIRE)) dwButtons |= JOY_BUTTON2;\n\tif (GetKeyState(VK_MBUTTON) < 0) dwButtons |= JOY_BUTTON3;\n\tOutTraceB(\"%s: Virtual Joystick buttons=%x\\n\", apiname, dwButtons);\n\n\tif(dwButtons == JOY_BUTTON3){\n\t\tif(((*pGetTickCount)() - dwLastClick) > 200){\n\t\t\tbJoyLock = !bJoyLock;\n\t\t\tdwButtons &= ~JOY_BUTTON3;\n\t\t\tdwLastClick = (*pGetTickCount)();\n\t\t}\n\t}\n\n\t// default: centered position\n\tx=0;\n\ty=0;\n\t// get cursor position and map it to virtual joystick x,y axis\n\tif(hwnd=dxw.GethWnd()){\n\t\tPOINT pt;\n\t\tRECT client;\n\t\tPOINT upleft = {0,0};\n\t\t(*pGetClientRect)(hwnd, &client);\n\t\t(*pClientToScreen)(hwnd, &upleft);\n\t\t(*pGetCursorPos)(&pt);\n\t\tpt.x -= upleft.x;\n\t\tpt.y -= upleft.y;\n\t\tif(bJoyLock || !dxw.bActive){\n\t\t\t// when the joystick is \"locked\" (bJoyLock) or when the window lost focus\n\t\t\t// (dxw.bActive == FALSE) place the joystick in the central position\n\t\t\tOutTraceB(\"%s: CENTERED lock=%x active=%x\\n\", apiname, bJoyLock, dxw.bActive);\n\t\t\tx=0;\n\t\t\ty=0;\n\t\t\tpt.x = client.right >> 1;\n\t\t\tpt.y = client.bottom >> 1;\n\t\t\tdwButtons = JOY_BUTTON3;\n\t\t}\n\t\telse{\n\t\t\tOutTraceB(\"%s: ACTIVE mouse=(%d,%d)\\n\", apiname, pt.x, pt.y);\n\t\t\tCenterX = (client.right - client.left) >> 1;\n\t\t\tCenterY = (client.bottom - client.top) >> 1;\n\n\t\t\tif(dwVJoyStatus & VJMOUSEMAP){\n\t\t\t\tif(pt.x < client.left) pt.x = client.left;\n\t\t\t\tif(pt.x > client.right) pt.x = client.right;\n\t\t\t\tif(pt.y < client.top) pt.y = client.top;\n\t\t\t\tif(pt.y > client.bottom) pt.y = client.bottom;\n\n\t\t\t\tx = ((pt.x - CenterX) * XSPAN) / client.right;\n\t\t\t\ty = ((pt.y - CenterY) * YSPAN) / client.bottom;\n\n\t\t\t\tif(dwVJoyStatus & VJAUTOCENTER) {\n\t\t\t\t\t// autocenter: each time, moves 1/20 distance toward centered 0,0 position\n\t\t\t\t\t// 1/20 = 0.05, changing value changes the autocenter speed (must be >0.0 and <1.0)\n\t\t\t\t\tint x1, y1;\n\t\t\t\t\tx1 = (int)(pt.x + upleft.x - ((pt.x - CenterX) * 0.05));\n\t\t\t\t\ty1 = (int)(pt.y + upleft.y - ((pt.y - CenterY) * 0.05));\n\t\t\t\t\tif((x1 != pt.x+upleft.x) || (y1 != pt.y+upleft.y)) (*pSetCursorPos)(x1, y1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(dwVJoyStatus & VJKEYBOARDMAP){\n\t\t\t\tif (GetKeyState(VK_LEFT) < 0)  x = -XSPAN/2;\n\t\t\t\tif (GetKeyState(VK_RIGHT) < 0) x = +XSPAN/2;\n\t\t\t\tif (GetKeyState(VK_UP) < 0)    y = -YSPAN/2;\n\t\t\t\tif (GetKeyState(VK_DOWN) < 0)  y = +YSPAN/2;\n\t\t\t\tif (GetKeyState(VK_SPACE) < 0)    dwButtons |= JOY_BUTTON1;\n\t\t\t\tif (GetKeyState(VK_LCONTROL) < 0) dwButtons |= JOY_BUTTON2;\n\t\t\t}\n\n\t\t\tif(dwVJoyStatus & INVERTXAXIS) x = -x;\n\t\t\tif(dwVJoyStatus & INVERTYAXIS) y = -y;\n\t\t\t//if(dwVJoyStatus & VJSENSIVITY){\n\t\t\t{\n\t\t\t\tDWORD dwSensivity = GetHookInfo()->VJoySensivity;\n\t\t\t\tif(dwSensivity){\n\t\t\t\t\tx = (x * (LONG)dwSensivity) / 100; \n\t\t\t\t\ty = (y * (LONG)dwSensivity) / 100;\n\t\t\t\t\tif(x > +XSPAN) x = +XSPAN;\n\t\t\t\t\tif(x < -XSPAN) x = -XSPAN;\n\t\t\t\t\tif(y > +YSPAN) y = +YSPAN;\n\t\t\t\t\tif(y < -YSPAN) y = -YSPAN;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (dwVJoyStatus & CROSSENABLED) {\n\t\t\tint jx, jy;\n\t\t\tjx  = CenterX + (x * client.right) / XSPAN;\n\t\t\tjy  = CenterY + (y * client.bottom) / YSPAN;\n\t\t\tShowJoystick(jx, jy, dwButtons);\n\t\t}\n\t}\n\tlpj->wXpos = x;\n\tlpj->wYpos = y;\n\tlpj->wZpos = 0;\n\tlpj->wButtons = dwButtons;\n\tOutTraceC(\"%s: joyid=%d pos=(%d,%d)\\n\", apiname, uJoyID, lpj->wXpos, lpj->wYpos);\n\tpStatus->joyposx = (short)x;\n\tpStatus->joyposy = (short)y;\n\treturn JOYERR_NOERROR;\n}\n\nMMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji)\n{\n\tMMRESULT res;\n\tJOYINFO jinfo;\n\tres=GetJoy(\"joyGetPosEx\", uJoyID, &jinfo);\n\n\t// set Joystick JOYINFOEX info structure\n\tmemset(pji, 0, sizeof(JOYINFOEX));\n\tpji->dwSize = sizeof(JOYINFOEX);\n\tpji->dwFlags = 0;\n\tpji->dwXpos = jinfo.wXpos;\n\tpji->dwYpos = jinfo.wYpos;\n\tpji->dwButtons = jinfo.wButtons;\n\tpji->dwFlags = JOY_RETURNX|JOY_RETURNY|JOY_RETURNBUTTONS;\n\n\treturn res;\n}\n\nMMRESULT WINAPI extjoyGetPos(DWORD uJoyID, LPJOYINFO pji)\n{\n\tMMRESULT res;\n\tres=GetJoy(\"joyGetPos\", uJoyID, pji);\n\treturn res;\n}\n\nstatic void ShowJoystick(LONG x, LONG y, DWORD dwButtons)\n{\n\tstatic BOOL JustOnce=FALSE;\n\textern HMODULE hInst;\n\tBITMAP bm;\n\tHDC hClientDC;\n\tstatic HBITMAP g_hbmJoyCross;\n\tstatic HBITMAP g_hbmJoyFire1;\n\tstatic HBITMAP g_hbmJoyFire2;\n\tstatic HBITMAP g_hbmJoyFire3;\n\tstatic HBITMAP g_hbmJoyCenter;\n\tHBITMAP g_hbmJoy;\n\tRECT client;\n\tRECT win;\n\tPOINT PrevViewPort;\n\n\t//return;\n\n\t// don't show when system cursor is visible\n\tCURSORINFO ci;\n\tci.cbSize = sizeof(CURSORINFO);\n\tGetCursorInfo(&ci);\n\tif(ci.flags == CURSOR_SHOWING) return;\n\n\thClientDC=(*pGDIGetDC)(dxw.GethWnd());\n\t(*pGetClientRect)(dxw.GethWnd(), &client);\n\n\tif(!JustOnce){\n\t\tg_hbmJoyCross = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_CROSS));\n\t\tg_hbmJoyFire1 = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_FIRE1));\n\t\tg_hbmJoyFire2 = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_FIRE2));\n\t\tg_hbmJoyFire3 = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_FIRE3));\n\t\tg_hbmJoyCenter = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_JOYCENTER));\n\t\tJustOnce=TRUE;\n\t}\n\n    HDC hdcMem = CreateCompatibleDC(hClientDC);\n \tswitch(dwButtons){\n\t\tcase 0: g_hbmJoy = g_hbmJoyCross; break;\n\t\tcase JOY_BUTTON1: g_hbmJoy = g_hbmJoyFire1; break;\n\t\tcase JOY_BUTTON2: g_hbmJoy = g_hbmJoyFire2; break;\n\t\tcase JOY_BUTTON1|JOY_BUTTON2: g_hbmJoy = g_hbmJoyFire3; break;\n\t\tcase JOY_BUTTON3: g_hbmJoy = g_hbmJoyCenter; break;\n\t\tdefault: g_hbmJoy = NULL; break;\n\t}\n\n\tif(g_hbmJoy == NULL) return; // show nothing ...\n\n    HBITMAP hbmOld = (HBITMAP)(*pSelectObject)(hdcMem, g_hbmJoy);\n\tGetObject(g_hbmJoy, sizeof(bm), &bm);\n\n\t(*pGetWindowRect)(dxw.GethWnd(), &win);\n\n\t(*pSetViewportOrgEx)(hClientDC, 0, 0, &PrevViewPort);\n\tint w, h;\n\tw=bm.bmWidth;\n\th=bm.bmHeight; \n\t(*pGDIBitBlt)(hClientDC, x-(w>>1), y-(h>>1), w, h, hdcMem, 0, 0, SRCPAINT);\n\n\t(*pSetViewportOrgEx)(hClientDC, PrevViewPort.x, PrevViewPort.y, NULL);\n    (*pSelectObject)(hdcMem, hbmOld);\n    DeleteDC(hdcMem);\n}\n\nMMRESULT WINAPI extauxGetNumDevs(void)\n{\n\tUINT ret;\n\tret = (*pauxGetNumDevs)();\n\tOutTrace(\"auxGetNumDevs: ret=%d\\n\", ret);\n\treturn ret;\n}\n\nBOOL WINAPI extmciGetErrorStringA(DWORD fdwError, LPCSTR lpszErrorText, UINT cchErrorText)\n{\n\tBOOL ret;\n\tret = (*pmciGetErrorStringA)(fdwError, lpszErrorText, cchErrorText);\n\tOutTrace(\"mciGetErrorStringA: ret=%x err=%d text=(%d)\\\"%s\\\"\\n\", ret, fdwError, cchErrorText, lpszErrorText);\n\treturn ret;\n}\n\nMMRESULT WINAPI extmixerGetLineControlsA(HMIXEROBJ hmxobj, LPMIXERLINECONTROLS pmxlc, DWORD fdwControls)\n{\n\tMMRESULT ret;\n\tret = (*pmixerGetLineControlsA)(hmxobj, pmxlc, fdwControls);\n\tOutTrace(\"mixerGetLineControlsA: ret=%x hmxobj=%x Controls=%x\\n\", ret, hmxobj, fdwControls);\n\treturn ret;\n}\n\nUINT WINAPI extwaveOutGetNumDevs(void)\n{\n\tUINT ret;\n\tret = (*pwaveOutGetNumDevs)();\n\tOutTrace(\"waveOutGetNumDevs: ret=%d\\n\", ret);\n\treturn ret;\n}\n\nUINT WINAPI extmixerGetNumDevs(void)\n{\n\tUINT ret;\n\tret = (*pmixerGetNumDevs)();\n\tOutTrace(\"mixerGetNumDevs: ret=%d\\n\", ret);\n\treturn ret;\n}\n"
  },
  {
    "path": "dll/winproc.cpp",
    "content": "#define _WIN32_WINNT 0x0600\n#define WIN32_LEAN_AND_MEAN\n#define _CRT_SECURE_NO_DEPRECATE 1\n\n#include <windows.h>\n#include <stdio.h>\n#include <stdarg.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"dxhelper.h\"\n\nextern void SuppressIMEWindow();\nextern void RecoverScreenMode();\nextern void dx_FullScreenToggle(HWND);\nextern void dx_DesktopToggle(HWND, BOOL);\nextern BOOL JoyProcessMouseWheelMessage(WPARAM, LPARAM);\n\nstatic void dx_ToggleLogging()\n{\n\t// toggle LOGGING\n\tif(dxw.dwTFlags & OUTTRACE){\n\t\tOutTraceDW(\"Toggle logging OFF\\n\");\n\t\tdxw.dwTFlags &= ~OUTTRACE;\n\t}\n\telse {\n\t\tdxw.dwTFlags |= OUTTRACE;\n\t\tOutTraceDW(\"Toggle logging ON\\n\");\n\t}\n\tGetHookInfo()->isLogging=(dxw.dwTFlags & OUTTRACE);\n}\n\nLRESULT CALLBACK extDialogWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)\n{\n\tstatic int i=0;\n\tstatic WINDOWPOS *wp;\n\tWNDPROC pWindowProc;\n\tLRESULT res;\n\tstatic int t = -1;\n\tstatic int iRecursion = 0;\n\n\tif(iRecursion) {\n\t\tiRecursion=0;\n\t\treturn NULL;\n\t}\n\tiRecursion++;\n\n\tif (t == -1)\n\t\tt = (*pGetTickCount)();\n\tint tn = (*pGetTickCount)();\n\n\tOutTraceW(\"DEBUG: DialogWinMsg hwnd=%x msg=[0x%x]%s(%x,%x)\\n\", hwnd, message, ExplainWinMessage(message), wparam, lparam);\n\n\t// optimization: don't invalidate too often!\n\t// 200mSec seems a good compromise.\n\tif (tn-t > 200) {\n\t\tt=tn;\n\t\t(*pInvalidateRect)(hwnd, NULL, TRUE);\n\t}\n\n\tpWindowProc=dxwws.GetProc(hwnd);\n\tif(pWindowProc) {\n\t\tres =(*pCallWindowProcA)(pWindowProc, hwnd, message, wparam, lparam);\n\t}\n\telse {\n\t\tchar *sMsg=\"ASSERT: DialogWinMsg pWindowProc=NULL !!!\\n\";\n\t\tOutTraceDW(sMsg);\n\t\tif (IsAssertEnabled) MessageBox(0, sMsg, \"WindowProc\", MB_OK | MB_ICONEXCLAMATION);\n\t\tres = NULL;\n\t}\n\tiRecursion=0;\n\treturn res;\n}\n\nLRESULT CALLBACK extChildWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)\n{\n\tstatic int i=0;\n\tstatic WINDOWPOS *wp;\n\tWNDPROC pWindowProc;\n\n\tOutTraceW(\"DEBUG: ChildWinMsg hwnd=%x msg=[0x%x]%s(%x,%x)\\n\", hwnd, message, ExplainWinMessage(message), wparam, lparam);\n\n\tif(dxw.Windowize){\n\t\tswitch(message){\n\t\t// Cybermercs: it seems that all game menus are conveniently handled by the WindowProc routine,\n\t\t// while the action screen get messages processed by the ChildWindowProc, that needs some different\n\t\t// setting ..........\n\t\t// Beware: Cybermercs handles some static info about cursor position handling, so that if you resize\n\t\t// a menu it doesn't work correctly until you don't change screen.\n\t\tcase WM_MOUSEMOVE:\n\t\tcase WM_MOUSEWHEEL:\n\t\tcase WM_LBUTTONDOWN:\n\t\tcase WM_LBUTTONUP:\n\t\tcase WM_LBUTTONDBLCLK:\n\t\tcase WM_RBUTTONDOWN:\n\t\tcase WM_RBUTTONUP:\n\t\tcase WM_RBUTTONDBLCLK:\n\t\tcase WM_MBUTTONDOWN:\n\t\tcase WM_MBUTTONUP:\n\t\tcase WM_MBUTTONDBLCLK:\n\t\t\t// if(dxw.dwFlags1 & MODIFYMOUSE){ // mouse processing  \n\t\t\t//if((dxw.dwFlags1 & MODIFYMOUSE) && !(dxw.dwFlags6 & NOMOUSEPROC)){ // mouse processing  \n\t\t\tif((dxw.dwFlags1 & MODIFYMOUSE) && !(dxw.dwFlags1 & MESSAGEPROC)){ // mouse processing  \n\t\t\t\tPOINT prev, curr;\n\t\t\t\t// scale mouse coordinates\n\t\t\t\tprev.x = LOWORD(lparam);\n\t\t\t\tprev.y = HIWORD(lparam);\n\t\t\t\tcurr = prev;\n\t\t\t\tif(message == WM_MOUSEWHEEL){ // v2.02.33 mousewheel fix\n\t\t\t\t\tPOINT upleft={0,0};\n\t\t\t\t\t(*pClientToScreen)(dxw.GethWnd(), &upleft);\n\t\t\t\t\tcurr = dxw.SubCoordinates(curr, upleft);\n\t\t\t\t}\n\t\t\t\t//OutTraceC(\"ChildWindowProc: hwnd=%x pos XY prev=(%d,%d)\\n\", hwnd, prev.x, prev.y);\n\t\t\t\tcurr=dxw.FixCursorPos(curr); // Warn! the correction must refer to the main window hWnd, not the current hwnd one !!!\n\t\t\t\tlparam = MAKELPARAM(curr.x, curr.y); \n\t\t\t\tOutTraceC(\"ChildWindowProc: hwnd=%x pos XY=(%d,%d)->(%d,%d)\\n\", hwnd, prev.x, prev.y, curr.x, curr.y);\n\t\t\t}\n\t\t\tbreak;\t\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tpWindowProc=dxwws.GetProc(hwnd);\n\t\n\t// v2.02.82: use CallWindowProc that handles WinProc handles\n\tif(pWindowProc) return(*pCallWindowProcA)(pWindowProc, hwnd, message, wparam, lparam);\n\t// should never get here ....\n\tOutTraceDW(\"ChildWindowProc: no WndProc for CHILD hwnd=%x\\n\", hwnd);\n\treturn DefWindowProc(hwnd, message, wparam, lparam);\n}\n\nstatic void dx_UpdatePositionLock(HWND hwnd)\n{\n\tRECT rect;\n\tPOINT p={0,0};\n\t(*pGetClientRect)(hwnd,&rect);\n\t(*pClientToScreen)(hwnd,&p);\n\tdxw.dwFlags1 |= LOCKWINPOS;\n\tOutTraceDW(\"Toggle position lock ON\\n\");\n\tdxw.InitWindowPos(p.x, p.y, rect.right-rect.left, rect.bottom-rect.top);\n}\n\nstatic void dx_TogglePositionLock(HWND hwnd)\n{\n\t// toggle position locking\n\tif(dxw.dwFlags1 & LOCKWINPOS){\n\t\t// unlock\n\t\tOutTraceDW(\"Toggle position lock OFF\\n\");\n\t\tdxw.dwFlags1 &= ~LOCKWINPOS;\n\t}\n\telse {\n\t\tOutTraceDW(\"Toggle position lock ON\\n\");\n\t\tdxw.dwFlags1 |= LOCKWINPOS;\n\t\tdx_UpdatePositionLock(hwnd);\n\t}\n}\n\nstatic void dx_ToggleFPS()\n{\n\tif(dxw.dwFlags2 & SHOWFPS){\n\t\tdxw.dwFlags2 &= ~SHOWFPS;\n\t\tOutTrace(\"ToggleFPS: SHOWFPS mode OFF\\n\");\n\t}\n\telse {\n\t\tdxw.dwFlags2 |= SHOWFPS;\n\t\tOutTrace(\"ToggleFPS: SHOWFPS mode ON\\n\");\n\t}\n}\n\nstatic void dx_Cornerize(HWND hwnd)\n{\n\tstatic BOOL bCornerized = FALSE;\n\tstatic RECT WinRect = {0, 0, 0, 0};\n\tstatic DWORD OldStyle, OldExtStyle;\n\n\tif (bCornerized){ \t// toggle ....\n\t\tOutTraceDW(\"DxWnd: exiting corner mode\\n\");\n\t\t(*pSetWindowLong)(hwnd, GWL_STYLE, OldStyle);\n\t\t(*pSetWindowLong)(hwnd, GWL_EXSTYLE, OldExtStyle);\n\t\t(*pMoveWindow)(hwnd, WinRect.left, WinRect.top, WinRect.right, WinRect.bottom, TRUE);\n\t\tmemset(&WinRect, 0, sizeof(WinRect));\n\t}\n\telse {\n\t\tOutTraceDW(\"DxWnd: entering corner mode\\n\");\n\t\t(*pGetWindowRect)(hwnd, &WinRect);\n\t\tOldStyle = (*pGetWindowLong)(hwnd, GWL_STYLE);\n\t\tOldExtStyle = (*pGetWindowLong)(hwnd, GWL_EXSTYLE);\n\t\t(*pSetWindowLong)(hwnd, GWL_STYLE, WS_VISIBLE|WS_CLIPSIBLINGS|WS_OVERLAPPED);\n\t\t(*pSetWindowLong)(hwnd, GWL_EXSTYLE, 0);\n\t\t(*pMoveWindow)(hwnd, 0, 0, dxw.GetScreenWidth(), dxw.GetScreenHeight(), TRUE);\n\t}\n\tbCornerized = !bCornerized; // switch toggle\n\t(*pUpdateWindow)(hwnd);\n\tdxw.ScreenRefresh();\n}\n\nLRESULT LastCursorPos;\n\nvoid SetIdlePriority(BOOL idle)\n{\n\tOutTrace(\"Setting priority class to %s\\n\", idle ? \"IDLE_PRIORITY_CLASS\" : \"NORMAL_PRIORITY_CLASS\");\n\tif(!SetPriorityClass(GetCurrentProcess(), idle ? IDLE_PRIORITY_CLASS : NORMAL_PRIORITY_CLASS))\n\t\tOutTraceE(\"SetPriorityClass ERROR: err=%d at %d\\n\", GetLastError(), __LINE__);\n}\n\nvoid ExplainMsg(char *ApiName, HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)\n{\n\tchar sPos[321];\n\tsPos[320]=0;\n\tsPos[0]=0;\n\tswitch(Msg){\n\tcase WM_WINDOWPOSCHANGING:\n\tcase WM_WINDOWPOSCHANGED:\n\t\tLPWINDOWPOS wp;\n\t\twp = (LPWINDOWPOS)lParam;\n\t\tsprintf_s(sPos, 320, \" pos=(%d,%d) size=(%dx%d) flags=%x(%s)\", wp->x, wp->y, wp->cx, wp->cy, wp->flags, ExplainWPFlags(wp->flags));\n\t\tbreak;\n\tcase WM_MOVE:\n\t\tsprintf_s(sPos, 320, \" pos=(%d,%d)\", HIWORD(lParam), LOWORD(lParam));\n\t\tbreak;\n\tcase WM_STYLECHANGING:\n\tcase WM_STYLECHANGED:\n\t\tLPSTYLESTRUCT style;\n\t\tstyle = (LPSTYLESTRUCT)lParam;\n\t\tif(wParam == GWL_STYLE) sprintf_s(sPos, 320, \"style=%x(%s)->%x(%s)\", \n\t\t\tstyle->styleOld, ExplainStyle(style->styleOld), style->styleNew, ExplainStyle(style->styleNew));\n\t\tif(wParam == GWL_EXSTYLE) sprintf_s(sPos, 320, \"exstyle=%x(%s)->%x(%s)\", \n\t\t\tstyle->styleOld, ExplainExStyle(style->styleOld), style->styleNew, ExplainExStyle(style->styleNew));\n\t\tbreak;\n\tcase WM_SIZE:\n\t\tstatic char *modes[5]={\"RESTORED\", \"MINIMIZED\", \"MAXIMIZED\", \"MAXSHOW\", \"MAXHIDE\"};\n\t\tsprintf_s(sPos, 320, \" mode=SIZE_%s size=(%dx%d)\", modes[wParam % 5], HIWORD(lParam), LOWORD(lParam));\n\t\tbreak;\t\n\t}\n\tOutTrace(\"%s[%x]: WinMsg=[0x%x]%s(%x,%x) %s\\n\", ApiName, hwnd, Msg, ExplainWinMessage(Msg), wParam, lParam, sPos);\n}\n\nstatic BOOL IsWindowMovingMessage(int msg)\n{\n\tswitch(msg){\n\t\t// minimum set for win move/resize on Win10\n\t\tcase WM_NCLBUTTONDOWN:\n\t\tcase WM_NCLBUTTONUP:\n\t\tcase WM_WINDOWPOSCHANGED:\n\t\tcase WM_WINDOWPOSCHANGING:\n\t\tcase WM_STYLECHANGING: \n\t\tcase WM_STYLECHANGED: \n\t\t\treturn TRUE;\n\t\t\tbreak;\n\t}\n\treturn FALSE;\n}\n\nLRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)\n{\n\tPOINT prev, curr;\n\tRECT rect;\n\tstatic int i=0;\n\tWNDPROC pWindowProc;\n\textern void dxwFixWindowPos(char *, HWND, LPARAM);\n\textern LPRECT lpClipRegion;\n\tstatic BOOL DoOnce = TRUE;\n\tstatic BOOL IsToBeLocked;\n\tstatic int LastTimeShift;\n\tstatic int SaveTimeShift;\n\tstatic BOOL TimeShiftToggle=TRUE;\n\textern void DDrawScreenShot(int);\n\n\tif(DoOnce){\n\t\tDoOnce=FALSE;\n\t\tIsToBeLocked=(dxw.dwFlags1 & LOCKWINPOS);\n\t\tLastTimeShift=SaveTimeShift=dxw.TimeShift;\n\t}\n\n\t// v2.1.93: adjust clipping region\n\n\tif(IsTraceW) ExplainMsg(\"WindowProc\", hwnd, message, wparam, lparam);\n\n\tif(dxw.dwFlags3 & (FILTERMESSAGES|DEFAULTMESSAGES)){\n\t\tswitch(message){\n\t\tcase WM_NCMOUSELEAVE: \n\t\tcase WM_NCMOUSEMOVE:\n\t\tcase WM_NCLBUTTONDOWN:\n\t\tcase WM_NCLBUTTONUP:\n\t\tcase WM_NCLBUTTONDBLCLK:\n\t\tcase WM_NCRBUTTONDOWN:\n\t\tcase WM_NCRBUTTONUP:\n\t\tcase WM_NCRBUTTONDBLCLK:\n\t\tcase WM_NCMBUTTONDOWN:\n\t\tcase WM_NCMBUTTONUP:\n\t\tcase WM_NCMBUTTONDBLCLK:\n\t\tcase WM_MOVE:\n\t\tcase WM_MOVING:\n\t\t\tif(dxw.dwFlags3 & FILTERMESSAGES){\n\t\t\t\tOutTraceDW(\"WindowProc[%x]: SUPPRESS WinMsg=[0x%x]%s(%x,%x)\\n\", hwnd, message, ExplainWinMessage(message), wparam, lparam);\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tOutTraceDW(\"WindowProc[%x]: DEFAULT WinMsg=[0x%x]%s(%x,%x)\\n\", hwnd, message, ExplainWinMessage(message), wparam, lparam);\n\t\t\t\treturn (*pDefWindowProcA)(hwnd, message, wparam, lparam);\n\t\t\t}\n\t\t}\n\t}\n\n\t// v2.04.11: the processing of al least WM_WINPOSCHANG-ING/ED for \"Man TT Superbike\" must be placed\n\t// here, before and avoiding the call to the original callback because of the AdjustWindowRect that\n\t// is inside the callback and would keep the position fixed.\n\tif(dxw.dwFlags2 & FORCEWINRESIZE){ \n\t\t//ExplainMsg(\"WindowProc\", hwnd, message, wparam, lparam);\n\t\tif(IsWindowMovingMessage(message)){\n\t\t\treturn (*pDefWindowProcA)(hwnd, message, wparam, lparam);\n\t\t}\n\t}\n\n\tif(LastTimeShift != dxw.TimeShift){\n\t\textern void SetVSyncDelays(int, LPDIRECTDRAW);\n\t\textern LPDIRECTDRAW lpPrimaryDD;\n\t\textern int iBakBufferVersion;\n\t\tif(dxw.dwFlags4 & STRETCHTIMERS) dxw.RenewTimers();\n\t\tif(lpPrimaryDD) SetVSyncDelays(iBakBufferVersion, lpPrimaryDD);\n\t\tLastTimeShift=dxw.TimeShift;\n\t}\n\n\tswitch(message){\n\t// v2.02.13: added WM_GETMINMAXINFO/WM_NCCALCSIZE interception - (see Actua Soccer 3 problems...)\n\t//case WM_NCDESTROY:\n\t//\treturn 0;\n\tcase WM_GETMINMAXINFO: \n\t\tif(dxw.dwFlags1 & LOCKWINPOS){\n\t\t\textern void dxwFixMinMaxInfo(char *, HWND, LPARAM);\n\t\t\tdxwFixMinMaxInfo(\"WindowProc\", hwnd, lparam);\n\t\t\treturn 0;\n\t\t}\n\t\tbreak;\n\tcase WM_NCCALCSIZE:\n\tcase WM_NCPAINT:\n\t\t// v2.02.30: don't alter child and other windows....\n\t\t// v2.04.09: comment inconsistent with code. Added '!' to if expression ....\n\t\tif(!((dxw.dwFlags1 & LOCKWINPOS) && (hwnd == dxw.GethWnd()) && dxw.IsFullScreen())){ \n\t\t\tOutTraceDW(\"WindowProc: %s wparam=%x\\n\", ExplainWinMessage(message), wparam);\n\t\t\treturn (*pDefWindowProcA)(hwnd, message, wparam, lparam);\n\t\t}\n\t\tbreak;\n\tcase WM_NCCREATE:\n\t\tif(dxw.dwFlags2 & SUPPRESSIME) SuppressIMEWindow();\n\t\tbreak;\n\tcase WM_IME_SETCONTEXT:\n\tcase WM_IME_NOTIFY:\n\tcase WM_IME_CONTROL:\n\tcase WM_IME_COMPOSITIONFULL:\n\tcase WM_IME_SELECT:\n\tcase WM_IME_CHAR:\n\tcase WM_IME_REQUEST:\n\tcase WM_IME_KEYDOWN:\n\tcase WM_IME_KEYUP:\n\t\tif(dxw.dwFlags2 & SUPPRESSIME){\n\t\t\tOutTraceDW(\"WindowProc[%x]: SUPPRESS IME WinMsg=[0x%x]%s(%x,%x)\\n\", hwnd, message, ExplainWinMessage(message), wparam, lparam);\n\t\t\treturn 0;\n\t\t}\n\t\tbreak;\n\tcase WM_NCHITTEST:\n\t\t// which one is good ?\n\t\tif((dxw.dwFlags2 & FIXNCHITTEST) && (dxw.dwFlags1 & MODIFYMOUSE)){ // mouse processing \n\t\t//if((dxw.dwFlags2 & FIXNCHITTEST) && (dxw.dwFlags1 & MODIFYMOUSE) && !(dxw.dwFlags1 & MESSAGEPROC)){ // mouse processing \n\t\t\tPOINT cursor;\n\t\t\tLRESULT ret;\n\t\t\tret=(*pDefWindowProcA)(hwnd, message, wparam, lparam);\n\t\t\tif (ret==HTCLIENT) {\n\t\t\t\tcursor.x=LOWORD(lparam);\n\t\t\t\tcursor.y=HIWORD(lparam);\n\t\t\t\tdxw.FixNCHITCursorPos(&cursor);\n\t\t\t\tlparam = MAKELPARAM(cursor.x, cursor.y); \n\t\t\t\tOutTraceC(\"WindowProc[%x]: fixed WM_NCHITTEST pt=(%d,%d)\\n\", hwnd, cursor.x, cursor.y);\n\t\t\t}\n\t\t\telse\n\t\t\t\treturn ret;\n\t\t}\n\t\tbreak;\n\tcase WM_ERASEBKGND:\n\t\t// v2.03.97: fix for Adrenix lost backgrounds, thanks to Riitaoja hunt!\n\t\tif(dxw.Windowize && dxw.IsRealDesktop(hwnd)){ \n\t\t\tOutTraceDW(\"WindowProc: WM_ERASEBKGND(%x,%x) - suppressed\\n\", wparam, lparam);\n\t\t\treturn 1; // 1 == OK, erased\n\t\t}\n\t\tbreak;\n\tcase WM_DISPLAYCHANGE:\n\t\tif (dxw.Windowize && (dxw.dwFlags1 & LOCKWINPOS) && dxw.IsFullScreen()){\n\t\t\tOutTraceDW(\"WindowProc: prevent WM_DISPLAYCHANGE depth=%d size=(%d,%d)\\n\",\n\t\t\t\twparam, LOWORD(lparam), HIWORD(lparam));\n\t\t\t// v2.02.43: unless EMULATESURFACE is set, lock the screen resolution only, but not the color depth!\n\t\t\tif(dxw.dwFlags1 & EMULATESURFACE) return 0;\n\t\t\t// let rparam (color depth) change, but override lparam (screen width & height.)\n\t\t\tlparam = MAKELPARAM((LONG)dxw.GetScreenWidth(), (LONG)dxw.GetScreenHeight());\n\t\t\t//return 0;\n\t\t}\n\t\tbreak;\n\tcase WM_STYLECHANGING:\n\tcase WM_STYLECHANGED:\n\t\tif(dxw.dwFlags1 & LOCKWINSTYLE) {\n\t\t\tOutTraceDW(\"WindowProc: %s - suppressed\\n\", message==WM_STYLECHANGING ? \"WM_STYLECHANGING\" : \"WM_STYLECHANGED\");\n\t\t\treturn 1;\n\t\t}\n\t\tbreak;\n\tcase WM_WINDOWPOSCHANGING:\n\tcase WM_WINDOWPOSCHANGED:\n\t\tif(dxw.Windowize && dxw.IsFullScreen()){\n\t\t\tLPWINDOWPOS wp = (LPWINDOWPOS)lparam;\n\t\t\textern HWND hControlParentWnd;\n\t\t\tif(dxw.dwFlags5 & NOWINPOSCHANGES){\n\t\t\t\tOutTraceDW(\"WindowProc: %s - suppressed\\n\", message==WM_WINDOWPOSCHANGED ? \"WM_WINDOWPOSCHANGED\" : \"WM_WINDOWPOSCHANGING\");\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\twp = (LPWINDOWPOS)lparam;\n\t\t\tdxwFixWindowPos(\"WindowProc\", hwnd, lparam);\n\t\t\tOutTraceDW(\"WindowProc: %s fixed size=(%d,%d)\\n\", \n\t\t\t\t(message == WM_WINDOWPOSCHANGED) ? \"WM_WINDOWPOSCHANGED\" : \"WM_WINDOWPOSCHANGING\", wp->cx, wp->cy);\n\t\t\tif(message==WM_WINDOWPOSCHANGED) {\n\t\t\t\t// try to lock main wind & control parent together\n\t\t\t\tif(dxw.IsDesktop(hwnd) && hControlParentWnd) {\n\t\t\t\t\tPOINT fo = dxw.GetFrameOffset();\n\t\t\t\t\t(*pMoveWindow)(hControlParentWnd, wp->x+fo.x, wp->y+fo.y, wp->cx, wp->cy, TRUE);\n\t\t\t\t}\n\t\t\t\t// v2.03.30: in window mode, it seems that the WM_ACTIVATEAPP message is not sent to the main win.\n\t\t\t\t// this PostMessage call recovers \"Thorgal\" block at the end of intro movie and \"Championship Manager 03 04\" cursor\n\t\t\t\tif (dxw.dwFlags6 & ACTIVATEAPP){\n\t\t\t\t\tPostMessage(hwnd, WM_ACTIVATEAPP, 1, 0);\n\t\t\t\t}\n\t\t\t\t// v2.03.91.fx4: keep position coordinates updated!\n\t\t\t\tif(!(wp->flags & (SWP_NOMOVE|SWP_NOSIZE))) dxw.UpdateDesktopCoordinates();\n\t\t\t}\n\t\t}\n\t\tbreak;\n\tcase WM_ENTERSIZEMOVE:\n\t\tif(IsToBeLocked){\n\t\t\tdxw.dwFlags1 &= ~LOCKWINPOS;\n\t\t}\n\t\twhile((*pShowCursor)(1) < 0);\n\t\tif (\n\t\t\t((dxw.dwFlags1 & CLIPCURSOR) && !(dxw.dwFlags8 & CLIPLOCKED)) ||\n\t\t\t(dxw.dwFlags1 & DISABLECLIPPING)) {\n\t\t\tdxw.EraseClipCursor();\n\t\t}\n\t\tbreak;\n\tcase WM_EXITSIZEMOVE:\n\t\tif(IsToBeLocked){\n\t\t\tdxw.dwFlags1 |= LOCKWINPOS;\n\t\t\tdx_UpdatePositionLock(hwnd);\n\t\t}\n\t\tif((dxw.dwFlags1 & HIDEHWCURSOR) && dxw.IsFullScreen()) while((*pShowCursor)(0) >= 0);\n\t\tif(dxw.dwFlags2 & SHOWHWCURSOR) while((*pShowCursor)(1) < 0);\n\t\tif(dxw.dwFlags1 & DISABLECLIPPING) extClipCursor(lpClipRegion);\n\t\tif(dxw.dwFlags2 & REFRESHONRESIZE) dxw.ScreenRefresh();\n\t\tif(dxw.dwFlags4 & HIDEDESKTOP) dxw.HideDesktop(dxw.GethWnd());\n\t\tif(dxw.dwFlags5 & CENTERTOWIN) {\n\t\t\tHDC thdc;\n\t\t\tHWND w = dxw.GethWnd();\n\t\t\tRECT client;\n\t\t\t(*pGetClientRect)(w, &client);\n\t\t\tthdc=(*pGDIGetDC)(w);\n\t\t\tif(thdc) (*pGDIBitBlt)(thdc, client.left, client.top, client.right, client.bottom, 0, 0, 0, BLACKNESS);\n\t\t}\n\t\tdxw.UpdateDesktopCoordinates();\n\t\tbreak;\n\tcase WM_ACTIVATE:\n\t\t// turn DirectInput bActive flag on & off .....\n\t\tdxw.bActive = (LOWORD(wparam) == WA_ACTIVE || LOWORD(wparam) == WA_CLICKACTIVE) ? 1 : 0;\n\tcase WM_NCACTIVATE:\n\t\t// turn DirectInput bActive flag on & off .....\n\t\tif(message == WM_NCACTIVATE) dxw.bActive = wparam;\n\t\tif(dxw.bActive) (*pSetWindowPos)(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);\n\t\tif(dxw.dwFlags6 & UNACQUIRE){\n\t\t\tToggleAcquiredDevices(dxw.bActive);\n\t\t}\n\t\tif(dxw.dwFlags1 & UNNOTIFY){\n\t\t\tDefWindowProc(hwnd, message, wparam, lparam);\n\t\t\treturn false;\n\t\t}\n\t\tbreak;\n\tcase WM_NCMOUSEMOVE:\n\t\t// Posted to a window when the cursor is moved within the nonclient area of the window. \n\t\t// This message is posted to the window that contains the cursor. \n\t\t// If a window has captured the mouse, this message is not posted.\n\t\t// V2.1.90: on nonclient areas the cursor is always shown.\n\t\twhile((*pShowCursor)(1) < 0);\n\t\tbreak;\n\tcase WM_MOUSEMOVE:\n\t\tif(dxw.Windowize){\n\t\t\tprev.x = LOWORD(lparam);\n\t\t\tprev.y = HIWORD(lparam);\n\t\t\tif(dxw.IsFullScreen()){\n\t\t\t\tif (dxw.dwFlags1 & HIDEHWCURSOR){\n\t\t\t\t\t(*pGetClientRect)(hwnd, &rect);\n\t\t\t\t\tif(prev.x >= 0 && prev.x < rect.right && prev.y >= 0 && prev.y < rect.bottom)\n\t\t\t\t\t\twhile((*pShowCursor)(0) >= 0);\n\t\t\t\t\telse\n\t\t\t\t\t\twhile((*pShowCursor)(1) < 0);\n\t\t\t\t}\n\t\t\t\tif (dxw.dwFlags1 & SHOWHWCURSOR){\n\t\t\t\t\twhile((*pShowCursor)(1) < 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif((dxw.dwFlags1 & MODIFYMOUSE) && !(dxw.dwFlags1 & MESSAGEPROC)){ // mouse processing  \n\t\t\t\t// scale mouse coordinates\n\t\t\t\tcurr=dxw.FixCursorPos(prev); //v2.02.30\n\t\t\t\tlparam = MAKELPARAM(curr.x, curr.y); \n\t\t\t\tOutTraceC(\"WindowProc: hwnd=%x pos XY=(%d,%d)->(%d,%d)\\n\", hwnd, prev.x, prev.y, curr.x, curr.y);\n\t\t\t}\n\t\t\tGetHookInfo()->CursorX=LOWORD(lparam);\n\t\t\tGetHookInfo()->CursorY=HIWORD(lparam);\n\t\t}\n\t\tbreak;\t\n\t// fall through cases:\n\tcase WM_MOUSEWHEEL:\n\t\tif(dxw.dwFlags6 & VIRTUALJOYSTICK) {\n\t\t\tif(dxw.Windowize && (dxw.dwFlags1 & CLIPCURSOR) && !dxw.IsClipCursorActive()) dxw.SetClipCursor();\n\t\t\tif (JoyProcessMouseWheelMessage(wparam, lparam)) return 0;\t\n\t\t} // fall through\n\tcase WM_LBUTTONDOWN:\n\tcase WM_LBUTTONUP:\n\tcase WM_LBUTTONDBLCLK:\n\tcase WM_RBUTTONDOWN:\n\tcase WM_RBUTTONUP:\n\tcase WM_RBUTTONDBLCLK:\n\tcase WM_MBUTTONDOWN:\n\tcase WM_MBUTTONUP:\n\tcase WM_MBUTTONDBLCLK:\n\t\tif(dxw.Windowize){\n\t\t\tif((dxw.dwFlags1 & CLIPCURSOR) && !dxw.IsClipCursorActive()) {\n\t\t\t\tdxw.SetClipCursor();\n\t\t\t}\n\t\t\tif((dxw.dwFlags1 & MODIFYMOUSE) && !(dxw.dwFlags1 & MESSAGEPROC)){ // mouse processing  \n\t\t\t\t// scale mouse coordinates\n\t\t\t\tprev.x = LOWORD(lparam);\n\t\t\t\tprev.y = HIWORD(lparam);\n\t\t\t\tcurr = prev;\n\t\t\t\tif(message == WM_MOUSEWHEEL){ // v2.02.33 mousewheel fix\n\t\t\t\t\tPOINT upleft={0,0};\n\t\t\t\t\t(*pClientToScreen)(dxw.GethWnd(), &upleft);\n\t\t\t\t\tcurr = dxw.SubCoordinates(curr, upleft);\n\t\t\t\t}\n\t\t\t\tcurr=dxw.FixCursorPos(curr); //v2.02.30\n\t\t\t\tlparam = MAKELPARAM(curr.x, curr.y); \n\t\t\t\tOutTraceC(\"WindowProc: hwnd=%x pos XY=(%d,%d)->(%d,%d)\\n\", hwnd, prev.x, prev.y, curr.x, curr.y);\n\t\t\t}\n\t\t\tGetHookInfo()->CursorX=LOWORD(lparam);\n\t\t\tGetHookInfo()->CursorY=HIWORD(lparam);\n\t\t}\n\t\tbreak;\t\n\tcase WM_SETFOCUS:\n\t\tOutTraceDW(\"WindowProc: hwnd=%x GOT FOCUS\\n\", hwnd);\n\t\tif(dxw.dwFlags1 & CLIPCURSOR) {\n\t\t\tdxw.SetClipCursor();\n\t\t}\n\t\tif (dxw.dwFlags1 & DISABLECLIPPING) extClipCursor(lpClipRegion);\n\t\tif (dxw.dwFlags8 & BACKGROUNDPRIORITY) SetIdlePriority(FALSE);\n\t\tbreak;\n\tcase WM_KILLFOCUS:\n\t\tOutTraceDW(\"WindowProc: hwnd=%x LOST FOCUS\\n\", hwnd);\n\t\tif (\n\t\t\t((dxw.dwFlags1 & CLIPCURSOR) && !(dxw.dwFlags8 & CLIPLOCKED)) ||\n\t\t\t(dxw.dwFlags1 & DISABLECLIPPING)){\n\t\t\tdxw.EraseClipCursor();\n\t\t}\n\t\tif (dxw.dwFlags8 & BACKGROUNDPRIORITY) SetIdlePriority(TRUE);\n\t\tbreak;\n\tcase WM_SYSCOMMAND:\n\t\t// v2.03.56.fix1 by FunkyFr3sh: ensure that \"C&C Red Alert 2\" receives the WM_SYSCOMMAND / SC_CLOSE message\n\t\t// that likely is filtered by the application logic\n\t\t// v2.03.91: from msdn - In WM_SYSCOMMAND messages, the four low-order bits of the wParam parameter are used \n\t\t// internally by the system. To obtain the correct result when testing the value of wParam, an application \n\t\t// must combine the value 0xFFF0 with the wParam value by using the bitwise AND operator. \n\t\tif(dxw.Windowize && ((wparam & 0xFFF0)== SC_CLOSE) && (dxw.dwFlags6 & TERMINATEONCLOSE)) {\n\t\t\tLRESULT lres;\n\t\t\tlres = (*pDefWindowProcA)(hwnd, message, wparam, lparam);\n\t\t\treturn lres;\n\t\t}\n\t\tif(dxw.Windowize){\n\t\t\tstatic int iLastX, iLastY, iLastW, iLastH;\n\t\t\tswitch(wparam & 0xFFF0){\n\t\t\t\tcase SC_MINIMIZE:\n\t\t\t\t\tdxw.IsVisible = FALSE;\n\t\t\t\t\tiLastX = dxw.iPosX; iLastY = dxw.iPosY;\n\t\t\t\t\tiLastW = dxw.iSizX; iLastH = dxw.iSizY;\n\t\t\t\t\tdxw.iPosX = dxw.iPosY = dxw.iSizX = dxw.iSizY = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase SC_RESTORE:\n\t\t\t\t\tdxw.IsVisible = TRUE;\n\t\t\t\t\tdxw.iPosX = iLastX; dxw.iPosY = iLastY;\n\t\t\t\t\tdxw.iSizX = iLastW; dxw.iSizY = iLastH;\n\t\t\t\t\tbreak;\n\t\t\t\tcase SC_MAXIMIZE:\n\t\t\t\t\tdxw.IsVisible = TRUE;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tbreak;\n\tcase WM_CLOSE:\n\t\t// Beware: closing main window does not always mean that the program is about to terminate!!!\n\t\textern void gShowHideTaskBar(BOOL);\n\t\tif(dxw.dwFlags6 & CONFIRMONCLOSE){\n\t\t\tOutTraceDW(\"WindowProc: WM_CLOSE - terminating process?\\n\");\n\t\t\tif (MessageBoxA(NULL, \"Do you really want to exit the game?\", \"DxWnd\", MB_YESNO | MB_TASKMODAL) != IDYES) return FALSE;\n\t\t}\t\t\t\n\t\tif(dxw.dwFlags6 & HIDETASKBAR) gShowHideTaskBar(FALSE);\n\t\tif(dxw.dwFlags3 & FORCE16BPP) RecoverScreenMode();\n\t\tif(dxw.dwFlags6 & TERMINATEONCLOSE) TerminateProcess(GetCurrentProcess(),0);\n\t\tbreak;\n\tcase WM_SYSKEYDOWN:\n\t\tif ((dxw.dwFlags1 & HANDLEALTF4) && (wparam == VK_F4)) {\n\t\t\tOutTraceDW(\"WindowProc: WM_SYSKEYDOWN(ALT-F4) - terminating process\\n\");\n\t\t\tTerminateProcess(GetCurrentProcess(),0);\n\t\t}\n\t\t// fall through\n\tcase WM_KEYDOWN:\n\t\tif(!(dxw.dwFlags4 & ENABLEHOTKEYS)) break;\n\t\tOutTraceW(\"event %s wparam=%x lparam=%x\\n\", (message==WM_SYSKEYDOWN)?\"WM_SYSKEYDOWN\":\"WM_KEYDOWN\", wparam, lparam);\n\t\tUINT DxWndKey;\n\t\tDxWndKey=dxw.MapKeysConfig(message, lparam, wparam);\n\t\tswitch (DxWndKey){\n\t\tcase DXVK_CLIPTOGGLE:\n\t\t\tOutTraceDW(\"WindowProc: WM_SYSKEYDOWN key=%x clipper=%x\\n\", wparam, dxw.IsClipCursorActive());\n\t\t\tdxw.IsClipCursorActive() ? dxw.EraseClipCursor() : dxw.SetClipCursor();\n\t\t\tbreak;\n\t\tcase DXVK_REFRESH:\n\t\t\tdxw.ScreenRefresh();\n\t\t\tbreak;\n\t\tcase DXVK_LOGTOGGLE:\n\t\t\tdx_ToggleLogging();\n\t\t\tbreak;\n\t\tcase DXVK_PLOCKTOGGLE:\n\t\t\tdx_TogglePositionLock(hwnd);\n\t\t\tbreak;\n\t\tcase DXVK_FPSTOGGLE:\n\t\t\tdx_ToggleFPS();\n\t\t\tbreak;\n\t\t//case DXVK_FREEZETIME:\n\t\t//\tdxw.ToggleFreezedTime();\n\t\t//\tbreak;\n\t\tcase DXVK_TIMEFAST:\n\t\tcase DXVK_TIMESLOW:\n\t\t\tif (dxw.dwFlags2 & TIMESTRETCH) {\n\t\t\t\tif (DxWndKey == DXVK_TIMESLOW && (dxw.TimeShift <  8)) dxw.TimeShift++;\n\t\t\t\tif (DxWndKey == DXVK_TIMEFAST && (dxw.TimeShift > -8)) dxw.TimeShift--;\n\t\t\t\tGetHookInfo()->TimeShift=dxw.TimeShift;\n\t\t\t\tOutTrace(\"Time Stretch: shift=%d speed=%s\\n\", dxw.TimeShift, dxw.GetTSCaption());\n\t\t\t}\n\t\t\tbreak;\n\t\tcase DXVK_TIMETOGGLE:\n\t\t\tif (dxw.dwFlags2 & TIMESTRETCH) {\n\t\t\t\tif(TimeShiftToggle){\n\t\t\t\t\tSaveTimeShift=dxw.TimeShift;\n\t\t\t\t\tdxw.TimeShift=0;\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tdxw.TimeShift=SaveTimeShift;\n\t\t\t\t}\n\t\t\t\tTimeShiftToggle = !TimeShiftToggle;\n\t\t\t\tGetHookInfo()->TimeShift=dxw.TimeShift;\n\t\t}\n\t\t\tbreak;\n\t\tcase DXVK_ALTF4:\n\t\t\tif (dxw.dwFlags1 & HANDLEALTF4) {\n\t\t\t\tOutTraceDW(\"WindowProc: WM_SYSKEYDOWN(virtual Alt-F4) - terminating process\\n\");\n\t\t\t\tTerminateProcess(GetCurrentProcess(),0);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase DXVK_PRINTSCREEN:\n\t\t\tDDrawScreenShot(dxw.dwDDVersion);\n\t\t\tbreak;\n\t\tcase DXVK_CORNERIZE:\n\t\t\tdx_Cornerize(hwnd);\n\t\t\tbreak;\n\t\tcase DXVK_FULLSCREEN:\n\t\t\tdx_FullScreenToggle(hwnd);\n\t\t\tbreak;\n\t\tcase DXVK_FAKEDESKTOP:\n\t\t\tdx_DesktopToggle(hwnd, FALSE);\n\t\t\tbreak;\n\t\tcase DXVK_FAKEWORKAREA:\n\t\t\tdx_DesktopToggle(hwnd, TRUE);\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\tdefault:\n\t\tbreak;\n\t}\n\tif (dxw.dwFlags1 & AUTOREFRESH) dxw.ScreenRefresh();\n\n\tpWindowProc=dxwws.GetProc(hwnd);\n\t//OutTraceB(\"WindowProc: pWindowProc=%x extWindowProc=%x message=%x(%s) wparam=%x lparam=%x\\n\", \n\t//\t(*pWindowProc), extWindowProc, message, ExplainWinMessage(message), wparam, lparam);\n\tif(pWindowProc) {\n\t\tLRESULT ret;\n\n\t\t// v2.02.36: use CallWindowProc that handles WinProc handles\n\t\tret=(*pCallWindowProcA)(pWindowProc, hwnd, message, wparam, lparam);\n\n\t\tswitch(message){\n\t\t\tcase WM_SIZE:\n\t\t\t//case WM_WINDOWPOSCHANGED: - no good!!!!\n\t\t\t\t// update new coordinates\n\t\t\t\tif (dxw.IsFullScreen()) dxw.UpdateDesktopCoordinates();\n\t\t\t\tbreak;\n\t\t\tcase WM_NCHITTEST:\n\t\t\t\t// save last NCHITTEST cursor position for use with KEEPASPECTRATIO scaling\n\t\t\t\tLastCursorPos=ret;\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// v2.1.89: if FORCEWINRESIZE add standard processing for the missing WM_NC* messages\n\t\tif(dxw.dwFlags2 & FORCEWINRESIZE){ \n\t\t\tswitch(message){\n\t\t\t//case WM_NCHITTEST:\n\t\t\t//case WM_NCPAINT:\n\t\t\t//case WM_NCMOUSEMOVE:\n\t\t\t//case WM_NCCALCSIZE:\n\t\t\t//case WM_NCACTIVATE:\n\t\t\tcase WM_SETCURSOR:\t\t// shows a different cursor when moving on borders\n\t\t\tcase WM_NCLBUTTONDOWN:\t// intercepts mouse down on borders\n\t\t\tcase WM_NCLBUTTONUP:\t// intercepts mouse up on borders\n\t\t\t\tret=(*pDefWindowProcA)(hwnd, message, wparam, lparam);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\t//OutTraceDW(\"ASSERT: WindowProc mismatch hwnd=%x\\n\", hwnd);\n\t// ??? maybe it's a normal condition, whenever you don't have a WindowProc routine\n\t// like in Commandos 2. Flag it?\n\tchar sMsg[81];\n\tsprintf(sMsg,\"ASSERT: WindowProc mismatch hwnd=%x\\n\", hwnd);\n\tOutTraceDW(sMsg);\n\tif (IsAssertEnabled) MessageBox(0, sMsg, \"WindowProc\", MB_OK | MB_ICONEXCLAMATION);\t\n\treturn (*pDefWindowProcA)(hwnd, message, wparam, lparam);\n}"
  },
  {
    "path": "dll/wintrust.cpp",
    "content": "#include <dxdiag.h>\n#include \"dxwnd.h\"\n#include \"dxwcore.hpp\"\n#include \"syslibs.h\"\n#include \"dxhook.h\"\n#include \"dxhelper.h\"\n\ntypedef LONG\t(WINAPI *WinVerifyTrust_Type)(HWND, GUID *, LPVOID);\nWinVerifyTrust_Type pWinVerifyTrust;\nextern LONG WINAPI extWinVerifyTrust(HWND, GUID *, LPVOID);\n\nstatic HookEntryEx_Type Hooks[]={\n\t{HOOK_IAT_CANDIDATE, 0, \"WinVerifyTrust\", NULL, (FARPROC *)&pWinVerifyTrust, (FARPROC)extWinVerifyTrust},\n\t{HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator\n};\n\nvoid HookTrust(HMODULE module)\n{\n\tHookLibraryEx(module, Hooks, \"wintrust.dll\");\n}\n\nFARPROC Remap_trust_ProcAddress(LPCSTR proc, HMODULE hModule)\n{\n\tFARPROC addr;\n\tif (addr=RemapLibraryEx(proc, hModule, Hooks)) return addr;\n\treturn NULL;}\n\nLONG WINAPI extWinVerifyTrust(HWND hWnd, GUID *pgActionID, LPVOID pWVTData)\n{\n\tLONG ret;\n\tOutTraceDW(\"WinVerifyTrust: hwnd=%x pgActionID=%x pWVTData=%x\\n\", hWnd, pgActionID, pWVTData);\n\tret = (*pWinVerifyTrust)(hWnd, pgActionID, pWVTData);\n\tOutTraceDW(\"WinVerifyTrust: ret=%x\\n\", ret);\n\treturn ret;\n}\n"
  },
  {
    "path": "filter/bilinear16_555.cpp",
    "content": "#include <windows.h>\n#include <xmmintrin.h>\n#include <math.h>\n\nstatic int* g_px1a    = NULL;\nstatic int* g_px1c    = NULL;\nstatic int  g_px1a_w  = 0;\nstatic int* g_px1ab   = NULL;\nstatic int  g_px1ab_w = 0;\n\nvoid WINAPI Resize_HQ_2ch555( unsigned char* src, RECT *srcrect, int srcpitch,\n                    unsigned char* dest, RECT *destrect, int destpitch)\n{\n    // Both buffers must be in RGB 565 format.\n\n\tint w1, w2, h1, h2;\n\tw1 = srcrect->right - srcrect->left;\n\th1 = srcrect->bottom - srcrect->top;\n\tw2 = destrect->right - destrect->left;\n\th2 = destrect->bottom - destrect->top;\n\n\tif(!srcpitch) srcpitch=w1<<1;\n\tif(!destpitch) destpitch=w1<<1;\n\n\t// GHO addiction: new variables\n\t// p1, p2: pitch offsets of source and dest surfaces in DWORD offset, that is pitch / sizeof(DWORD)\n\t// beware: current version can operate on displaced source rect, but assumes the dest rect is always the full surface!!\n\tUSHORT p1 = srcpitch >> 1; \n\tUSHORT p2 = destpitch >> 1; \n\tUSHORT *dsrc  = (USHORT *)src + (srcrect->top * p1) + srcrect->left;\n    USHORT *ddest = (USHORT *)dest;\n\n    // arbitrary resize.\n\n    bool bUpsampleX = (w1 < w2);\n    bool bUpsampleY = (h1 < h2);\n\n    // If too many input pixels map to one output pixel, our 32-bit accumulation values\n    // could overflow - so, if we have huge mappings like that, cut down the weights:\n    //    256 max color value\n    //   *256 weight_x\n    //   *256 weight_y\n    //   *256 (16*16) maximum # of input pixels (x,y) - unless we cut the weights down...\n    int weight_shift = 0;\n\n\t//gsky916: weight_shift calculation in bUpsampleX && bUpsampleY cases are not necessary.\n\t//Move to else block to reduce floating point calculations.\n\n    float fh = 256*h1/(float)h2;\n    float fw = 256*w1/(float)w2;\n\n    if (bUpsampleX && bUpsampleY)\n    {\n        // faster to just do 2x2 bilinear interp here\n\n        // cache x1a, x1b for all the columns:\n        // ...and your OS better have garbage collection on process exit :)\n\t\t//gsky916: also cache x1c for better performance\n        if (g_px1a_w < w2)\n        {\n            if (g_px1a) delete [] g_px1a;\n\t\t\tif (g_px1c) delete [] g_px1c;\n            g_px1a = new int[w2*2 * 1];\n \t\t\tg_px1c = new int[w2*2 * 1];\n\t\t\tg_px1a_w = w2*2;\n        }\n        for (int x2=0; x2<w2; x2++)\n        {\n            // find the x-range of input pixels that will contribute:\n            int x1a = (int)(x2*fw);\n            x1a = min(x1a, 256*(w1-1) - 1);\n\t\t\tg_px1c[x2] = x1a >> 8;\n            g_px1a[x2] = x1a & 0xFF;\n\t\t\n\t\t}\n\n        // FOR EVERY OUTPUT PIXEL\n\t\t// gsky916: Use OpenMP to speed up nested for loops (Enable OpenMP support in compiler).\n\t\t#pragma omp parallel for schedule(dynamic)\n        for (int y2=0; y2<h2; y2++)\n        {   \n            // find the y-range of input pixels that will contribute:\n            int y1a = (int)(y2*fh);\n            y1a = min(y1a, 256*(h1-1) - 1);\n            int y1c = y1a >> 8;\n\t\t\tint y1cp = y1c * p1;\n\t\t\ty1a = y1a & 0xFF;  \t\t\n\n            USHORT *ddest = &((USHORT *)dest)[y2*p2 + 0];\n\n            for (int x2=0; x2<w2; x2++)\n            {\n                // find the x-range of input pixels that will contribute:\n                int x1a = g_px1a[x2];//(int)(x2*fw); \n                int x1c = g_px1c[x2];\n\n                USHORT *dsrc2 = &dsrc[y1c*p1 + x1c]; // GHO\n\n                // PERFORM BILINEAR INTERPOLATION on 2x2 pixels\n                UINT r=0, g=0, b=0, a=0;\n                UINT weight_x = 256 - x1a;\n                UINT weight_y = 256 - y1a;\n\n                // gsky916: expand the innermost nested loops for speed improvement,\n\t\t\t\t// and reduce calculation operations...\n\n                UINT c = (UINT)dsrc2[0]; // GHO\n                UINT r_src = (c    ) & 0x1F;\n                UINT g_src = (c>> 5) & 0x1F;\n                UINT b_src = (c>>10) & 0x1F;\n                UINT w = (weight_x * weight_y);\n                r += r_src * w;\n                g += g_src * w;\n                b += b_src * w;\n                UINT weight_x1 = x1a;\n\n                c = (UINT)dsrc2[1]; // GHO\n                r_src = (c    ) & 0x1F;\n                g_src = (c>> 5) & 0x1F;\n                b_src = (c>>10) & 0x1F;\n                w = (weight_x1 * weight_y);\n                r += r_src * w;\n                g += g_src * w;\n                b += b_src * w;\n                UINT weight_y1 = y1a;\n\n                c = (UINT)dsrc2[p1]; // GHO\n                r_src = (c    ) & 0x1F;\n                g_src = (c>> 5) & 0x1F;\n                b_src = (c>>10) & 0x1F;\n                w = (weight_x * weight_y1);\n                r += r_src * w;\n                g += g_src * w;\n                b += b_src * w;\n\n                c = (UINT)dsrc2[p1+1]; // GHO\n                r_src = (c    ) & 0x1F;\n                g_src = (c>> 5) & 0x1F;\n                b_src = (c>>10) & 0x1F;\n                w = (weight_x1 * weight_y1);\n                r += r_src * w;\n                g += g_src * w;\n                b += b_src * w;\n\n\t\t\t\tUINT cc = ((r>>16) & 0x1F) | ((g>>(16-5)) & 0x3E0) | ((b>>(16-10)) & 0x7C00);\n\t\t\t\t*ddest++ = (USHORT)cc;\n            }\n        }\n    }\n    else // either downscale on vertical or horizontal direction ...\n    {\n\t\t//gsky916: weight_shift calculation moved here.\n        float source_texels_per_out_pixel = (   (w1/(float)w2 + 1) \n                                              * (h1/(float)h2 + 1)\n                                            );\n        float weight_per_pixel = source_texels_per_out_pixel * 256 * 256;  //weight_x * weight_y\n        float accum_per_pixel = weight_per_pixel*256; //color value is 0-255\n        float weight_div = accum_per_pixel / 4294967000.0f;\n        if (weight_div > 1)\n            weight_shift = (int)ceilf( logf((float)weight_div)/logf(2.0f) );\n        weight_shift = min(15, weight_shift);  // this could go to 15 and still be ok.\n\n        // cache x1a, x1b for all the columns:\n        // ...and your OS better have garbage collection on process exit :)\n        if (g_px1ab_w < w2)\n        {\n            if (g_px1ab) delete [] g_px1ab;\n            g_px1ab = new int[w2*2 * 2];\n            g_px1ab_w = w2*2;\n        }\n        for (int x2=0; x2<w2; x2++)\n        {\n            // find the x-range of input pixels that will contribute:\n            int x1a = (int)((x2  )*fw); \n            int x1b = (int)((x2+1)*fw); \n            if (bUpsampleX) // map to same pixel -> we want to interpolate between two pixels!\n                x1b = x1a + 256;\n            x1b = min(x1b, 256*w1 - 1);\n            g_px1ab[x2*2+0] = x1a;\n            g_px1ab[x2*2+1] = x1b;\n        }\n\n        // FOR EVERY OUTPUT PIXEL\n        for (int y2=0; y2<h2; y2++)\n        {   \n            // find the y-range of input pixels that will contribute:\n            int y1a = (int)((y2  )*fh); \n            int y1b = (int)((y2+1)*fh); \n            if (bUpsampleY) // map to same pixel -> we want to interpolate between two pixels!\n                y1b = y1a + 256;\n            y1b = min(y1b, 256*h1 - 1);\n            int y1c = y1a >> 8;\n            int y1d = y1b >> 8;\n\n\t\t\tddest = &((USHORT *)dest)[y2*p2 + 0];\n\n            for (int x2=0; x2<w2; x2++)\n            {\n                // find the x-range of input pixels that will contribute:\n                int x1a = g_px1ab[x2*2+0];    // (computed earlier)\n                int x1b = g_px1ab[x2*2+1];    // (computed earlier)\n                int x1c = x1a >> 8;\n                int x1d = x1b >> 8;\n\n                // ADD UP ALL INPUT PIXELS CONTRIBUTING TO THIS OUTPUT PIXEL:\n                UINT r=0, g=0, b=0, a=0;\n                for (int y=y1c; y<=y1d; y++)\n                {\n                    UINT weight_y = 256;\n                    if (y1c != y1d) \n                    {\n                        if (y==y1c)\n                            weight_y = 256 - (y1a & 0xFF);\n                        else if (y==y1d)\n                            weight_y = (y1b & 0xFF);\n                    }\n\n                    USHORT *dsrc2 = &dsrc[y*p1 + x1c]; // GHO\n                    for (int x=x1c; x<=x1d; x++)\n                    {\n                        UINT weight_x = 256;\n                        if (x1c != x1d) \n                        {\n                            if (x==x1c)\n                                weight_x = 256 - (x1a & 0xFF);\n                            else if (x==x1d)\n                                weight_x = (x1b & 0xFF);\n                        }\n\n                        UINT c = dsrc[y*p1 + x];\n                        UINT r_src = (c    ) & 0x1F;\n                        UINT g_src = (c>> 5) & 0x1F;\n                        UINT b_src = (c>>10) & 0x1F;\n                        UINT w = (weight_x * weight_y) >> weight_shift;\n                        r += r_src * w;\n                        g += g_src * w;\n                        b += b_src * w;\n                        a += w;\n                    }\n                }\n\n                // write results\n\t\t\t\tUINT c = ((r/a) & 0x1F) | (((g/a) << 5) & 0x3E0) | (((b/a) << 10) & 0x7C00);\n\t\t\t\t*ddest++ = c;\n            }\n        }\n    }\n}"
  },
  {
    "path": "filter/bilinear16_565.cpp",
    "content": "#include <windows.h>\n#include <xmmintrin.h>\n#include <math.h>\n\nstatic int* g_px1a    = NULL;\nstatic int* g_px1c    = NULL;\nstatic int  g_px1a_w  = 0;\nstatic int* g_px1ab   = NULL;\nstatic int  g_px1ab_w = 0;\n\nvoid WINAPI Resize_HQ_2ch565( unsigned char* src, RECT *srcrect, int srcpitch,\n                    unsigned char* dest, RECT *destrect, int destpitch)\n{\n    // Both buffers must be in RGB 565 format.\n\n\tint w1, w2, h1, h2;\n\tw1 = srcrect->right - srcrect->left;\n\th1 = srcrect->bottom - srcrect->top;\n\tw2 = destrect->right - destrect->left;\n\th2 = destrect->bottom - destrect->top;\n\n\tif(!srcpitch) srcpitch=w1<<1;\n\tif(!destpitch) destpitch=w1<<1;\n\n\t// GHO addiction: new variables\n\t// p1, p2: pitch offsets of source and dest surfaces in DWORD offset, that is pitch / sizeof(DWORD)\n\t// beware: current version can operate on displaced source rect, but assumes the dest rect is always the full surface!!\n\tUSHORT p1 = srcpitch >> 1; \n\tUSHORT p2 = destpitch >> 1; \n\tUSHORT *dsrc  = (USHORT *)src + (srcrect->top * p1) + srcrect->left;\n    USHORT *ddest = (USHORT *)dest;\n\n    // arbitrary resize.\n\n    bool bUpsampleX = (w1 < w2);\n    bool bUpsampleY = (h1 < h2);\n\n    // If too many input pixels map to one output pixel, our 32-bit accumulation values\n    // could overflow - so, if we have huge mappings like that, cut down the weights:\n    //    256 max color value\n    //   *256 weight_x\n    //   *256 weight_y\n    //   *256 (16*16) maximum # of input pixels (x,y) - unless we cut the weights down...\n    int weight_shift = 0;\n\n\t//gsky916: weight_shift calculation in bUpsampleX && bUpsampleY cases are not necessary.\n\t//Move to else block to reduce floating point calculations.\n\n    float fh = 256*h1/(float)h2;\n    float fw = 256*w1/(float)w2;\n\n    if (bUpsampleX && bUpsampleY)\n    {\n        // faster to just do 2x2 bilinear interp here\n\n        // cache x1a, x1b for all the columns:\n        // ...and your OS better have garbage collection on process exit :)\n\t\t//gsky916: also cache x1c for better performance\n        if (g_px1a_w < w2)\n        {\n            if (g_px1a) delete [] g_px1a;\n\t\t\tif (g_px1c) delete [] g_px1c;\n            g_px1a = new int[w2*2 * 1];\n \t\t\tg_px1c = new int[w2*2 * 1];\n\t\t\tg_px1a_w = w2*2;\n        }\n        for (int x2=0; x2<w2; x2++)\n        {\n            // find the x-range of input pixels that will contribute:\n            int x1a = (int)(x2*fw);\n            x1a = min(x1a, 256*(w1-1) - 1);\n\t\t\tg_px1c[x2] = x1a >> 8;\n            g_px1a[x2] = x1a & 0xFF;\n\t\t\n\t\t}\n\n        // FOR EVERY OUTPUT PIXEL\n\t\t// gsky916: Use OpenMP to speed up nested for loops (Enable OpenMP support in compiler).\n\t\t#pragma omp parallel for schedule(dynamic)\n        for (int y2=0; y2<h2; y2++)\n        {   \n            // find the y-range of input pixels that will contribute:\n            int y1a = (int)(y2*fh);\n            y1a = min(y1a, 256*(h1-1) - 1);\n            int y1c = y1a >> 8;\n\t\t\tint y1cp = y1c * p1;\n\t\t\ty1a = y1a & 0xFF;  \t\t\n\n            USHORT *ddest = &((USHORT *)dest)[y2*p2 + 0];\n\n            for (int x2=0; x2<w2; x2++)\n            {\n                // find the x-range of input pixels that will contribute:\n                int x1a = g_px1a[x2];//(int)(x2*fw); \n                int x1c = g_px1c[x2];\n\n                USHORT *dsrc2 = &dsrc[y1c*p1 + x1c]; // GHO\n\n                // PERFORM BILINEAR INTERPOLATION on 2x2 pixels\n                UINT r=0, g=0, b=0, a=0;\n                UINT weight_x = 256 - x1a;\n                UINT weight_y = 256 - y1a;\n\n                // gsky916: expand the innermost nested loops for speed improvement,\n\t\t\t\t// and reduce calculation operations...\n\n                UINT c = (UINT)dsrc2[0]; // GHO\n                UINT r_src = (c    ) & 0x1F;\n                UINT g_src = (c>> 5) & 0x3F;\n                UINT b_src = (c>>11) & 0x1F;\n                UINT w = (weight_x * weight_y);\n                r += r_src * w;\n                g += g_src * w;\n                b += b_src * w;\n                UINT weight_x1 = x1a;\n\n                c = (UINT)dsrc2[1]; // GHO\n                r_src = (c    ) & 0x1F;\n                g_src = (c>> 5) & 0x3F;\n                b_src = (c>>11) & 0x1F;\n                w = (weight_x1 * weight_y);\n                r += r_src * w;\n                g += g_src * w;\n                b += b_src * w;\n                UINT weight_y1 = y1a;\n\n                c = (UINT)dsrc2[p1]; // GHO\n                r_src = (c    ) & 0x1F;\n                g_src = (c>> 5) & 0x3F;\n                b_src = (c>>11) & 0x1F;\n                w = (weight_x * weight_y1);\n                r += r_src * w;\n                g += g_src * w;\n                b += b_src * w;\n\n                c = (UINT)dsrc2[p1+1]; // GHO\n                r_src = (c    ) & 0x1F;\n                g_src = (c>> 5) & 0x3F;\n                b_src = (c>>11) & 0x1F;\n                w = (weight_x1 * weight_y1);\n                r += r_src * w;\n                g += g_src * w;\n                b += b_src * w;\n\n\t\t\t\tUINT cc = ((r>>16) & 0x1F) | ((g>>(16-5)) & 0x7E0) | ((b>>(16-11)) & 0xF800);\n\t\t\t\t*ddest++ = (USHORT)cc;\n            }\n        }\n    }\n    else // either downscale on vertical or horizontal direction ...\n    {\n\t\t//gsky916: weight_shift calculation moved here.\n        float source_texels_per_out_pixel = (   (w1/(float)w2 + 1) \n                                              * (h1/(float)h2 + 1)\n                                            );\n        float weight_per_pixel = source_texels_per_out_pixel * 256 * 256;  //weight_x * weight_y\n        float accum_per_pixel = weight_per_pixel*256; //color value is 0-255\n        float weight_div = accum_per_pixel / 4294967000.0f;\n        if (weight_div > 1)\n            weight_shift = (int)ceilf( logf((float)weight_div)/logf(2.0f) );\n        weight_shift = min(15, weight_shift);  // this could go to 15 and still be ok.\n\n        // cache x1a, x1b for all the columns:\n        // ...and your OS better have garbage collection on process exit :)\n        if (g_px1ab_w < w2)\n        {\n            if (g_px1ab) delete [] g_px1ab;\n            g_px1ab = new int[w2*2 * 2];\n            g_px1ab_w = w2*2;\n        }\n        for (int x2=0; x2<w2; x2++)\n        {\n            // find the x-range of input pixels that will contribute:\n            int x1a = (int)((x2  )*fw); \n            int x1b = (int)((x2+1)*fw); \n            if (bUpsampleX) // map to same pixel -> we want to interpolate between two pixels!\n                x1b = x1a + 256;\n            x1b = min(x1b, 256*w1 - 1);\n            g_px1ab[x2*2+0] = x1a;\n            g_px1ab[x2*2+1] = x1b;\n        }\n\n        // FOR EVERY OUTPUT PIXEL\n        for (int y2=0; y2<h2; y2++)\n        {   \n            // find the y-range of input pixels that will contribute:\n            int y1a = (int)((y2  )*fh); \n            int y1b = (int)((y2+1)*fh); \n            if (bUpsampleY) // map to same pixel -> we want to interpolate between two pixels!\n                y1b = y1a + 256;\n            y1b = min(y1b, 256*h1 - 1);\n            int y1c = y1a >> 8;\n            int y1d = y1b >> 8;\n\n\t\t\tddest = &((USHORT *)dest)[y2*p2 + 0];\n\n            for (int x2=0; x2<w2; x2++)\n            {\n                // find the x-range of input pixels that will contribute:\n                int x1a = g_px1ab[x2*2+0];    // (computed earlier)\n                int x1b = g_px1ab[x2*2+1];    // (computed earlier)\n                int x1c = x1a >> 8;\n                int x1d = x1b >> 8;\n\n                // ADD UP ALL INPUT PIXELS CONTRIBUTING TO THIS OUTPUT PIXEL:\n                UINT r=0, g=0, b=0, a=0;\n                for (int y=y1c; y<=y1d; y++)\n                {\n                    UINT weight_y = 256;\n                    if (y1c != y1d) \n                    {\n                        if (y==y1c)\n                            weight_y = 256 - (y1a & 0xFF);\n                        else if (y==y1d)\n                            weight_y = (y1b & 0xFF);\n                    }\n\n                    USHORT *dsrc2 = &dsrc[y*p1 + x1c]; // GHO\n                    for (int x=x1c; x<=x1d; x++)\n                    {\n                        UINT weight_x = 256;\n                        if (x1c != x1d) \n                        {\n                            if (x==x1c)\n                                weight_x = 256 - (x1a & 0xFF);\n                            else if (x==x1d)\n                                weight_x = (x1b & 0xFF);\n                        }\n\n                        UINT c = dsrc[y*p1 + x];\n                        UINT r_src = (c    ) & 0x1F;\n                        UINT g_src = (c>> 5) & 0x3F;\n                        UINT b_src = (c>>11) & 0x1F;\n                        UINT w = (weight_x * weight_y) >> weight_shift;\n                        r += r_src * w;\n                        g += g_src * w;\n                        b += b_src * w;\n                        a += w;\n                    }\n                }\n\n                // write results\n\t\t\t\tUINT c = ((r/a) & 0x1F) | (((g/a) << 5) & 0x7E0) | (((b/a) << 11) & 0xF800);\n\t\t\t\t*ddest++ = c;\n            }\n        }\n    }\n}"
  },
  {
    "path": "filter/bilinear32.cpp",
    "content": "/* =============================================================================\n\nSource Code for Smooth Image Resampling (Resizing) in C/C++ (Visual Studio)\nby Ryan Geiss - 3 July 2008\n  \n  The code below performs a fairly-well-optimized high-quality resample \n  (smooth resize) of a 3-channel image that is padded to 4 bytes per \n  pixel.  The pixel format is assumed to be ARGB.  If you want to make \n  it handle an alpha channel, the changes should be very straightforward.\n  \n  In general, if the image is being enlarged, bilinear interpolation\n  is used; if the image is being downsized, all input pixels are weighed\n  appropriately to produce the correct result.\n  \n  In order to be efficient, it actually performs 1 of 4 routines.  First, \n  if you are cutting the image size *exactly* in half (common when generating \n  mipmap levels), it will use a specialized routine to do just that.  There\n  are actually two versions of this routine - an MMX one and a non-MMX one.\n  It detects if MMX is present and chooses the right one.\n  \n  If you're not cutting the image perfectly in half, it executes one\n  of two general resize routines.  If upsampling (increasing width and height)\n  on both X and Y, then it executes a faster resize algorithm that just performs\n  a 2x2 bilinear interpolation of the appropriate input pixels, for each output \n  pixel.  \n  \n  If downsampling on either X or Y (or both), though, the general-purpose \n  routine gets run.  It iterates over every output pixel, and for each one, it \n  iterates over the input pixels that map to that output pixel [there will \n  usually be more than 1 in this case].  Each input pixel is properly weighted\n  to produce exactly the right image.  There's a little bit of extra bookkeeping,\n  but in general, it's pretty efficient.\n  \n  Note that on extreme downsizing (2,800 x 2,800 -> 1x1 or greater ratio),\n  the colors can overflow.  If you want to fix this lazily, just break\n  your resize into two passes.\n  \n  Also note that when your program exits, or when you are done using this \n  function, you should delete [] g_px1a and g_px1ab if they have been \n  allocated.\n  \n  I posted this here because this is pretty common code that is a bit of\n  a pain to write; I've written it several times over the years, and I really\n  don't feel like writing it again.  So - here it is - for my reference, and\n  for yours.  Enjoy!\n/* ========================================================================== */\n\n//***********Here DxWnd only adapted general resize routines*************//\n\n#include <windows.h>\n#include <math.h>\n\nstatic int* g_px1a    = NULL;\nstatic int* g_px1c    = NULL;\nstatic int  g_px1a_w  = 0;\nstatic int* g_px1ab   = NULL;\nstatic int  g_px1ab_w = 0;\n\nvoid WINAPI Resize_HQ_4ch( unsigned char* src, RECT *srcrect, int srcpitch,\n                    unsigned char* dest, RECT *destrect, int destpitch)\n{\n    // Both buffers must be in ARGB format, and a scanline should be w*4 bytes.\n\n    // NOTE: THIS WILL OVERFLOW for really major downsizing (2800x2800 to 1x1 or more) \n    // (2800 ~ sqrt(2^23)) - for a lazy fix, just call this in two passes.\n\n\tint w1, w2, h1, h2;\n\tw1 = srcrect->right - srcrect->left;\n\th1 = srcrect->bottom - srcrect->top;\n\tw2 = destrect->right - destrect->left;\n\th2 = destrect->bottom - destrect->top;\n\n\tif(!srcpitch) srcpitch=w1<<2;\n\tif(!destpitch) destpitch=w1<<2;\n\n\t// GHO addiction: new variables\n\t// p1, p2: pitch offsets of source and dest surfaces in DWORD offset, that is pitch / sizeof(DWORD)\n\t// beware: current version can operate on displaced source rect, but assumes the dest rect is always the full surface!!\n\tUINT p1 = srcpitch >> 2; \n\tUINT p2 = destpitch >> 2; \n\tUINT *dsrc  = (UINT *)src + (srcrect->top * p1) + srcrect->left;\n    UINT *ddest = (UINT *)dest;\n\n    // arbitrary resize.\n\n    bool bUpsampleX = (w1 < w2);\n    bool bUpsampleY = (h1 < h2);\n\n    // If too many input pixels map to one output pixel, our 32-bit accumulation values\n    // could overflow - so, if we have huge mappings like that, cut down the weights:\n    //    256 max color value\n    //   *256 weight_x\n    //   *256 weight_y\n    //   *256 (16*16) maximum # of input pixels (x,y) - unless we cut the weights down...\n    int weight_shift = 0;\n\n\t//gsky916: weight_shift calculation in bUpsampleX && bUpsampleY cases are not necessary.\n\t//Move to else block to reduce floating point calculations.\n\n    float fh = 256*h1/(float)h2;\n    float fw = 256*w1/(float)w2;\n\n    if (bUpsampleX && bUpsampleY)\n    {\n        // faster to just do 2x2 bilinear interp here\n\n        // cache x1a, x1b for all the columns:\n        // ...and your OS better have garbage collection on process exit :)\n\t\t//gsky916: also cache x1c for better performance\n        if (g_px1a_w < w2)\n        {\n            if (g_px1a) delete [] g_px1a;\n\t\t\tif (g_px1c) delete [] g_px1c;\n            g_px1a = new int[w2*2 * 1];\n\t\t\tg_px1c = new int[w2*2 * 1];\n            g_px1a_w = w2*2;\n        }\n        for (int x2=0; x2<w2; x2++)\n        {\n            // find the x-range of input pixels that will contribute:\n            int x1a = (int)(x2*fw);\n            x1a = min(x1a, 256*(w1-1) - 1);\n\t\t\tg_px1c[x2] = x1a >> 8;\n            g_px1a[x2] = x1a  & 0xFF;\n\n        }\n\n        // FOR EVERY OUTPUT PIXEL\n\t\t// gsky916: Use OpenMP to speed up nested for loops (Enable OpenMP support in compiler).\n\t\t#pragma omp parallel for schedule(dynamic)\n        for (int y2=0; y2<h2; y2++)\n        {   \n            // find the y-range of input pixels that will contribute:\n            int y1a = (int)(y2*fh);\n            y1a = min(y1a, 256*(h1-1) - 1);\n            int y1c = y1a >> 8;\n\t\t\tint y1cp = y1c * p1;\n\t\t\ty1a = y1a & 0xFF;  \t\t\n\n            UINT *ddest = &((UINT *)dest)[y2*p2];\n\n            for (int x2=0; x2<w2; x2++)\n            {\n                // find the x-range of input pixels that will contribute:\n                int x1a = g_px1a[x2];//(int)(x2*fw); \n                int x1c = g_px1c[x2];\n                UINT *dsrc2 = &dsrc[y1cp + x1c]; // GHO\n\n                // PERFORM BILINEAR INTERPOLATION on 2x2 pixels\n                UINT r=0, g=0, b=0;\n\t\t\t\t\n                UINT weight_x = 256 - x1a;\n\t\t\t    UINT weight_y = 256 - y1a;\t\t\n\n                //gsky916: expand the innermost nested loops for speed improvement,\n\t\t\t\t// and reduce calculation operations...\n\n                UINT c = dsrc2[0]; // GHO\n                UINT r_src = c & 0xFF;\n                UINT g_src = c & 0xFF00;\n                UINT b_src = (c>>16) & 0xFF;\n                UINT w = (weight_x * weight_y);\n                r += r_src * w;\n                g += g_src * w;\n                b += b_src * w;\n\t\t\t\tUINT weight_x1 = x1a;\n\n                c = dsrc2[1]; // GHO\n                r_src = c & 0xFF;\n                g_src = c & 0xFF00;\n                b_src = (c>>16) & 0xFF;\n                w = (weight_x1 * weight_y);\n                r += r_src * w;\n                g += g_src * w;\n                b += b_src * w;\n\t\t\t\tUINT weight_y1 = y1a;\n                \n                c = dsrc2[p1]; // GHO\n                r_src = c & 0xFF;\n                g_src = c & 0xFF00;\n                b_src = (c>>16) & 0xFF;\n                w = (weight_x * weight_y1);\n                r += r_src * w;\n                g += g_src * w;\n                b += b_src * w;\n\n                c = dsrc2[p1 + 1]; // GHO\n                r_src = c & 0xFF;\n                g_src = c & 0xFF00;\n                b_src = (c>>16) & 0xFF;\n                w = (weight_x1 * weight_y1);\n                r += r_src * w;\n                g += g_src * w;\n                b += b_src * w;\n\n                UINT cc = ((r>>16)) | ((g>>16) & 0xFF00) | (b & 0xFF0000);\n\t\t\t\t*ddest++ = cc;\n            }\n        }\n    }\n    else // either downscale on vertical or horizontal direction ...\n    {\n\t\t//gsky916: weight_shift calculation moved here.\n        float source_texels_per_out_pixel = (   (w1/(float)w2 + 1) \n                                              * (h1/(float)h2 + 1)\n                                            );\n        float weight_per_pixel = source_texels_per_out_pixel * 256 * 256;  //weight_x * weight_y\n        float accum_per_pixel = weight_per_pixel*256; //color value is 0-255\n        float weight_div = accum_per_pixel / 4294967000.0f;\n        if (weight_div > 1)\n            weight_shift = (int)ceilf( logf((float)weight_div)/logf(2.0f) );\n        weight_shift = min(15, weight_shift);  // this could go to 15 and still be ok.\n\n        // cache x1a, x1b for all the columns:\n        // ...and your OS better have garbage collection on process exit :)\n        if (g_px1ab_w < w2)\n        {\n            if (g_px1ab) delete [] g_px1ab;\n            g_px1ab = new int[w2*2 * 2];\n            g_px1ab_w = w2*2;\n        }\n        for (int x2=0; x2<w2; x2++)\n        {\n            // find the x-range of input pixels that will contribute:\n            int x1a = (int)((x2  )*fw); \n            int x1b = (int)((x2+1)*fw); \n            if (bUpsampleX) // map to same pixel -> we want to interpolate between two pixels!\n                x1b = x1a + 256;\n            x1b = min(x1b, 256*w1 - 1);\n            g_px1ab[x2*2+0] = x1a;\n            g_px1ab[x2*2+1] = x1b;\n        }\n\n        // FOR EVERY OUTPUT PIXEL\n        for (int y2=0; y2<h2; y2++)\n        {   \n            // find the y-range of input pixels that will contribute:\n            int y1a = (int)((y2  )*fh); \n            int y1b = (int)((y2+1)*fh); \n            if (bUpsampleY) // map to same pixel -> we want to interpolate between two pixels!\n                y1b = y1a + 256;\n            y1b = min(y1b, 256*h1 - 1);\n            int y1c = y1a >> 8;\n            int y1d = y1b >> 8;\n\n\t\t\tddest = &((UINT *)dest)[y2*p2 + 0];\n\n            for (int x2=0; x2<w2; x2++)\n            {\n                // find the x-range of input pixels that will contribute:\n                int x1a = g_px1ab[x2*2+0];    // (computed earlier)\n                int x1b = g_px1ab[x2*2+1];    // (computed earlier)\n                int x1c = x1a >> 8;\n                int x1d = x1b >> 8;\n\n                // ADD UP ALL INPUT PIXELS CONTRIBUTING TO THIS OUTPUT PIXEL:\n                UINT r=0, g=0, b=0, a=0;\n                for (int y=y1c; y<=y1d; y++)\n                {\n                    UINT weight_y = 256;\n                    if (y1c != y1d) \n                    {\n                        if (y==y1c)\n                            weight_y = 256 - (y1a & 0xFF);\n                        else if (y==y1d)\n                            weight_y = (y1b & 0xFF);\n                    }\n\n                    //UINT *dsrc2 = &dsrc[y*w1 + x1c];\n                    UINT *dsrc2 = &dsrc[y*p1 + x1c]; // GHO\n                    for (int x=x1c; x<=x1d; x++)\n                    {\n                        UINT weight_x = 256;\n                        if (x1c != x1d) \n                        {\n                            if (x==x1c)\n                                weight_x = 256 - (x1a & 0xFF);\n                            else if (x==x1d)\n                                weight_x = (x1b & 0xFF);\n                        }\n\n                        //UINT c = *dsrc2++;//dsrc[y*w1 + x];\n                        UINT c = dsrc[y*p1 + x];\n                        UINT r_src = (c    ) & 0xFF;\n                        UINT g_src = (c>> 8) & 0xFF;\n                        UINT b_src = (c>>16) & 0xFF;\n                        UINT w = (weight_x * weight_y) >> weight_shift;\n                        r += r_src * w;\n                        g += g_src * w;\n                        b += b_src * w;\n                        a += w;\n                    }\n                }\n\n                // write results\n                UINT c = ((r/a)) | ((g/a)<<8) | ((b/a)<<16);\n                //*ddest++ = c;//ddest[y2*w2 + x2] = c;\n\t\t\t\t*ddest++ = c;\n\t\t\t\t//ddest+=(w2-p2);\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "filter/filter.def",
    "content": "LIBRARY filter\nEXPORTS\n\t\tResize_HQ_4ch\t\t@1\n\t\tResize_HQ_2ch565\t\t@2\n\t\tResize_HQ_2ch555\t\t@3\n"
  },
  {
    "path": "filter/filter.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"filter\", \"filter.vcproj\", \"{F3E96EF0-AF9C-43C2-8E3E-0DD10B66E0FC}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{F3E96EF0-AF9C-43C2-8E3E-0DD10B66E0FC}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{F3E96EF0-AF9C-43C2-8E3E-0DD10B66E0FC}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{F3E96EF0-AF9C-43C2-8E3E-0DD10B66E0FC}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{F3E96EF0-AF9C-43C2-8E3E-0DD10B66E0FC}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "filter/filter.vcproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"filter\"\n\tProjectGUID=\"{F3E96EF0-AF9C-43C2-8E3E-0DD10B66E0FC}\"\n\tRootNamespace=\"filter\"\n\tKeyword=\"Win32Proj\"\n\tTargetFrameworkVersion=\"0\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\"Debug\"\n\t\t\tIntermediateDirectory=\"Debug\"\n\t\t\tConfigurationType=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS;_USRDLL;MP_EXPORTS;\"\n\t\t\t\tMinimalRebuild=\"false\"\n\t\t\t\tBasicRuntimeChecks=\"0\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tFloatingPointModel=\"2\"\n\t\t\t\tOpenMP=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"true\"\n\t\t\t\tDebugInformationFormat=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"..\\Debug\\mp.dll\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tAdditionalLibraryDirectories=\"\"\n\t\t\t\tModuleDefinitionFile=\".\\filter.def\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\"Release\"\n\t\t\tIntermediateDirectory=\"Release\"\n\t\t\tConfigurationType=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tFavorSizeOrSpeed=\"1\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS;_USRDLL;MP_EXPORTS;\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tBufferSecurityCheck=\"false\"\n\t\t\t\tFloatingPointModel=\"2\"\n\t\t\t\tOpenMP=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"0\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDetect64BitPortabilityProblems=\"false\"\n\t\t\t\tDebugInformationFormat=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"..\\$(OutDir)\\$(ProjectName).dll\"\n\t\t\t\tLinkIncremental=\"0\"\n\t\t\t\tModuleDefinitionFile=\".\\filter.def\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc;xsd\"\n\t\t\tUniqueIdentifier=\"{93995380-89BD-4b04-88EB-625FBE52EBFB}\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx\"\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx\"\n\t\t\tUniqueIdentifier=\"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\bilinear16_555.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\bilinear16_565.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\bilinear32.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\filter.def\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "host/CDragEdit.cpp",
    "content": "#include \"stdafx.h\"\n#include \"CDragEdit.h\"\n\nCDragEdit::CDragEdit()\n{\n}\n\nCDragEdit::~CDragEdit()\n{\n}\n\nBOOL CDragEdit::OnInitDialog()\n{\n\tDragAcceptFiles();\n\treturn TRUE;\n}\n\nvoid CDragEdit::OnDropFiles(HDROP dropInfo)\n{\n\tCString sFile;\n\tDWORD nBuffer = 0;\n\t// Get number of files\n\tUINT nFilesDropped = DragQueryFile(dropInfo, 0xFFFFFFFF, NULL, 0);\n\tif(nFilesDropped > 0){\n\t\tnBuffer = DragQueryFile(dropInfo, 0, NULL, 0);\n\t\tDragQueryFile(dropInfo, 0, sFile.GetBuffer(nBuffer+1), nBuffer+1);\n\t\tSetWindowTextA(sFile.GetBuffer());\n\t\tsFile.ReleaseBuffer();\n\t}\n\tDragFinish(dropInfo);\n}\n\nBEGIN_MESSAGE_MAP(CDragEdit, CEdit)\n\tON_WM_DROPFILES()\nEND_MESSAGE_MAP()\n"
  },
  {
    "path": "host/CDragEdit.h",
    "content": "// CDragEdit class: inherited by DEdit, adds drag & drop of file pathnames \n// within the text field.\n\nclass CDragEdit : public CEdit\n{\npublic:\n\tCDragEdit();\n\tvirtual ~CDragEdit();\n\tBOOL OnInitDialog();\nprivate:\n\tafx_msg void OnDropFiles(HDROP hDropInfo);\n\tDECLARE_MESSAGE_MAP()\n};\n"
  },
  {
    "path": "host/CGlobalSettings.cpp",
    "content": "// CGlobalSettings.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"dxwndhost.h\"\n//#include \"dxwndhostView.h\"\n#include \"CGlobalSettings.h\"\n\nextern char gInitPath[];\nextern BOOL gbDebug;\nextern BOOL gAutoHideMode;\nextern BOOL gWarnOnExit;\n\nKey_Type FKeys[] = {\n\t{IDC_KEY_LABEL1,\t\"Time toggle\",\tIDC_KEY_COMBO1,\t\t\"timetoggle\", 0},\n\t{IDC_KEY_LABEL2,\t\"Time fast\",\tIDC_KEY_COMBO2,\t\t\"timefast\", 0},\n\t{IDC_KEY_LABEL3,\t\"Time slow\",\tIDC_KEY_COMBO3,\t\t\"timeslow\", 0},\n\t{IDC_KEY_LABEL4,\t\"Alt-F4\",\t\tIDC_KEY_COMBO4,\t\t\"altf4\", 0},\n\t{IDC_KEY_LABEL5,\t\"Clip toggle\",\tIDC_KEY_COMBO5,\t\t\"cliptoggle\", 0},\n\t{IDC_KEY_LABEL6,\t\"Refresh\",\t\tIDC_KEY_COMBO6,\t\t\"refresh\", 0},\n\t{IDC_KEY_LABEL7,\t\"Log toggle\",\tIDC_KEY_COMBO7,\t\t\"logtoggle\", 0},\n\t{IDC_KEY_LABEL8,\t\"Position t.\",\tIDC_KEY_COMBO8,\t\t\"plogtoggle\", 0},\n\t{IDC_KEY_LABEL9,\t\"FPS toggle\",\tIDC_KEY_COMBO9,\t\t\"fpstoggle\", 0},\n\t{IDC_KEY_LABEL10,\t\"Print screen\",\tIDC_KEY_COMBO10,\t\"printscreen\", 0},\n\t{IDC_KEY_LABEL11,\t\"Corner tog.\",\tIDC_KEY_COMBO11,\t\"corner\", 0},\n\t{IDC_KEY_LABEL12,\t\"Time freeze\",\tIDC_KEY_COMBO12,\t\"freezetime\", 0},\n\t{IDC_KEY_LABEL13,\t\"Fullscr. t.\",\tIDC_KEY_COMBO13,\t\"fullscreen\", 0},\n\t{IDC_KEY_LABEL14,\t\"Work area t.\",\tIDC_KEY_COMBO14,\t\"workarea\", 0},\n\t{IDC_KEY_LABEL15,\t\"Desktop t.\",\tIDC_KEY_COMBO15,\t\"desktop\", 0},\n\t{0, \"\", 0, 0}\n};\n\nKey_Type HKeys[] = {\n\t{IDC_HKEY_LABEL1,\t\"Minimize\",\t\tIDC_HKEY_COMBO1,\t\"minimize\", 0},\n\t{IDC_HKEY_LABEL2,\t\"Restore\",\t\tIDC_HKEY_COMBO2,\t\"restore\", 0},\n\t{IDC_HKEY_LABEL3,\t\"Kill proc.\",\tIDC_HKEY_COMBO3,\t\"kill\", 0},\n\t{0, \"\", 0, 0}\n};\n\nKeyCombo_Type FKeyCombo[] = {\n\t{-1, \"--\"},\n\t{VK_F1, \"F1\"},\n\t{VK_F2, \"F2\"},\n\t{VK_F3, \"F3\"},\n\t{VK_F5, \"F5\"},\n\t{VK_F6, \"F6\"},\n\t{VK_F7, \"F7\"},\n\t{VK_F8, \"F8\"},\n\t{VK_F9, \"F9\"},\n\t{VK_F10, \"F10\"},\n\t{VK_F11, \"F11\"},\n\t{VK_F12, \"F12\"},\n\t{0, \"\"}\n};\n\nKeyCombo_Type HKeyCombo[] = {\n\t{-1, \"--\"},\n\t{VK_END, \"END\"},\n\t{VK_HOME, \"HOME\"},\n\t{VK_DELETE, \"DEL\"},\n\t{VK_ESCAPE, \"ESC\"},\n\t{VK_F1, \"F1\"},\n\t{VK_F2, \"F2\"},\n\t{VK_F3, \"F3\"},\n\t{VK_F5, \"F5\"},\n\t{VK_F6, \"F6\"},\n\t{VK_F7, \"F7\"},\n\t{VK_F8, \"F8\"},\n\t{VK_F9, \"F9\"},\n\t{VK_F10, \"F10\"},\n\t{VK_F11, \"F11\"},\n\t{VK_F12, \"F12\"},\n\t{0, \"\"}\n};\n\n// CGlobalSettings dialog\n\nIMPLEMENT_DYNAMIC(CGlobalSettings, CDialog)\n\nCGlobalSettings::CGlobalSettings(CWnd* pParent /*=NULL*/)\n\t: CDialog(CGlobalSettings::IDD, pParent)\n{\n\t//m_DebugMode = GetPrivateProfileInt(\"window\", \"debug\", 0, gInitPath);\n\tm_AutoHideMode = GetPrivateProfileInt(\"window\", \"autohide\", 0, gInitPath); \n\tm_CheckAdminRights = GetPrivateProfileInt(\"window\", \"checkadmin\", 0, gInitPath);\n\tm_NameFromFolder = GetPrivateProfileInt(\"window\", \"namefromfolder\", 0, gInitPath);\n\tm_MultiHooks = GetPrivateProfileInt(\"window\", \"multiprocesshook\", 0, gInitPath);\n\tm_WarnOnExit = GetPrivateProfileInt(\"window\", \"warnonexit\", 0, gInitPath);\n\tm_UpdatePaths = GetPrivateProfileInt(\"window\", \"updatepaths\", 1, gInitPath);\n\t// texture limits\n\tm_TexMinX = GetPrivateProfileInt(\"texture\", \"MinTexX\", 0, gInitPath);\n\tm_TexMinY = GetPrivateProfileInt(\"texture\", \"MinTexY\", 0, gInitPath);\n\tm_TexMaxX = GetPrivateProfileInt(\"texture\", \"MaxTexX\", 0, gInitPath);\n\tm_TexMaxY = GetPrivateProfileInt(\"texture\", \"MaxTexY\", 0, gInitPath);\n\t// defaults\n\tm_DefaultCoordinates = GetPrivateProfileInt(\"window\", \"defaultcoord\", 0, gInitPath);\n\tm_DefaultPosX = GetPrivateProfileInt(\"window\", \"defaultposx\", 50, gInitPath);\n\tm_DefaultPosY = GetPrivateProfileInt(\"window\", \"defaultposy\", 50, gInitPath);\n\tm_DefaultSizX = GetPrivateProfileInt(\"window\", \"defaultsizx\", 800, gInitPath);\n\tm_DefaultSizY = GetPrivateProfileInt(\"window\", \"defaultsizy\", 600, gInitPath);\n}\n\nCGlobalSettings::~CGlobalSettings()\n{\n}\n\nvoid CGlobalSettings::DoDataExchange(CDataExchange* pDX)\n{\n\t//char msg[80];\n\t//sprintf(msg, \"DoDataExchange(1) defposx = %d\", m_DefaultPosX);\n\t//MessageBox(msg, \"debug\", 0);\n\tCString sDefaultPosX, sDefaultPosY;\n\tsDefaultPosX.Format(\"%d\", m_DefaultPosX);\n\tsDefaultPosY.Format(\"%d\", m_DefaultPosY);\n\t//DDX_Check(pDX, IDC_CONFIG_DEBUGMODE, m_DebugMode);\n\tDDX_Check(pDX, IDC_CONFIG_AUTOHIDE, m_AutoHideMode);\n\tDDX_Check(pDX, IDC_CONFIG_CHECKADMIN, m_CheckAdminRights);\n\tDDX_Check(pDX, IDC_CONFIG_NAMEFROMFOLDER, m_NameFromFolder);\n\tDDX_Check(pDX, IDC_CONFIG_MULTIHOOKS, m_MultiHooks);\n\tDDX_Check(pDX, IDC_CONFIG_WARNONEXIT, m_WarnOnExit);\n\tDDX_Check(pDX, IDC_CONFIG_SAVEPATHS, m_UpdatePaths);\n\tDDX_Text (pDX, IDC_TEX_MINX, m_TexMinX);\n\tDDX_Text (pDX, IDC_TEX_MINY, m_TexMinY);\n\tDDX_Text (pDX, IDC_TEX_MAXX, m_TexMaxX);\n\tDDX_Text (pDX, IDC_TEX_MAXY, m_TexMaxY);\n\tDDX_Radio(pDX, IDC_DEFAULTCOORDINATES, m_DefaultCoordinates);\n\tDDX_Text(pDX, IDC_DEFAULTPOSX, sDefaultPosX);\n\tDDX_Text(pDX, IDC_DEFAULTPOSY, sDefaultPosY);\n\tDDX_Text(pDX, IDC_DEFAULTSIZX, m_DefaultSizX);\n\tDDX_Text(pDX, IDC_DEFAULTSIZY, m_DefaultSizY);\n\tm_DefaultPosX = atoi(sDefaultPosX);\n\tm_DefaultPosY = atoi(sDefaultPosY);\n\tCDialog::DoDataExchange(pDX);\n\t//sprintf(msg, \"DoDataExchange(2) defposx = %d\", m_DefaultPosX);\n\t//MessageBox(msg, \"debug\", 0);\n}\n\nBEGIN_MESSAGE_MAP(CGlobalSettings, CDialog)\nEND_MESSAGE_MAP()\n\nBOOL CGlobalSettings::OnInitDialog()\n{\n\tIFormat *m_pRelIntegerFormat = new(RelIntegerFormat);\n\tm_EditPosX.SubclassDlgItem(IDC_DEFAULTPOSX, this);\n\tm_EditPosY.SubclassDlgItem(IDC_DEFAULTPOSY, this);\n\tm_EditPosX.SetFormatter(m_pRelIntegerFormat);\n\tm_EditPosY.SetFormatter(m_pRelIntegerFormat);\n\tCDialog::OnInitDialog();\n\tfor(int i=0; FKeys[i].iLabelResourceId; i++){\n\t\tint iCursor = 0;\n\t\tDWORD dwKey;\n\t\tdwKey = GetPrivateProfileInt(\"keymapping\", FKeys[i].sIniLabel, -1, gInitPath);\n\t\tSetDlgItemText(FKeys[i].iLabelResourceId,FKeys[i].sLabel);\n\t\tCComboBox *pCombo=(CComboBox *)GetDlgItem(FKeys[i].iComboResourceId);\n\t\tpCombo->Clear();\n\t\tfor(int j=0; FKeyCombo[j].dwVKeyCode; j++) {\n\t\t\tpCombo->AddString(FKeyCombo[j].sVKeyLabel);\n\t\t\tif(dwKey == FKeyCombo[j].dwVKeyCode) iCursor=j;\n\t\t}\n\t\tpCombo->SetCurSel(iCursor);\n\t}\n\tfor(int i=0; HKeys[i].iLabelResourceId; i++){\n\t\tint iCursor = 0;\n\t\tDWORD dwKey;\n\t\tdwKey = GetPrivateProfileInt(\"keymapping\", HKeys[i].sIniLabel, -1, gInitPath);\n\t\tSetDlgItemText(HKeys[i].iLabelResourceId,HKeys[i].sLabel);\n\t\tCComboBox *pCombo=(CComboBox *)GetDlgItem(HKeys[i].iComboResourceId);\n\t\tpCombo->Clear();\n\t\tfor(int j=0; HKeyCombo[j].dwVKeyCode; j++) {\n\t\t\tpCombo->AddString(HKeyCombo[j].sVKeyLabel);\n\t\t\tif(dwKey == HKeyCombo[j].dwVKeyCode) iCursor=j;\n\t\t}\n\t\tpCombo->SetCurSel(iCursor);\n\t}\n\treturn TRUE;  // return TRUE unless you set the focus to a control\n}\n\nvoid CGlobalSettings::OnOK()\n{\n\tchar val[32];\n\tCDialog::OnOK();\n\t// boolean flags\n\t//sprintf_s(val, sizeof(val), \"%i\", m_DebugMode);\n\t//WritePrivateProfileString(\"window\", \"debug\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", m_AutoHideMode);\n\tWritePrivateProfileString(\"window\", \"autohide\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", m_CheckAdminRights);\n\tWritePrivateProfileString(\"window\", \"checkadmin\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", m_NameFromFolder);\n\tWritePrivateProfileString(\"window\", \"namefromfolder\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", m_MultiHooks);\n\tWritePrivateProfileString(\"window\", \"multiprocesshook\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", m_WarnOnExit);\n\tWritePrivateProfileString(\"window\", \"warnonexit\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", m_UpdatePaths);\n\tWritePrivateProfileString(\"window\", \"updatepaths\", val, gInitPath);\n\t// texture limits\n\tsprintf_s(val, sizeof(val), \"%i\", m_TexMinX);\n\tWritePrivateProfileString(\"texture\", \"MinTexX\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", m_TexMinY);\n\tWritePrivateProfileString(\"texture\", \"MinTexY\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", m_TexMaxX);\n\tWritePrivateProfileString(\"texture\", \"MaxTexX\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", m_TexMaxY);\n\tWritePrivateProfileString(\"texture\", \"MaxTexY\", val, gInitPath);\n\t// defaults\n\tsprintf_s(val, sizeof(val), \"%i\", m_DefaultCoordinates);\n\tWritePrivateProfileString(\"window\", \"defaultcoord\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", m_DefaultPosX);\n\tWritePrivateProfileString(\"window\", \"defaultposx\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", m_DefaultPosY);\n\tWritePrivateProfileString(\"window\", \"defaultposy\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", m_DefaultSizX);\n\tWritePrivateProfileString(\"window\", \"defaultsizx\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", m_DefaultSizY);\n\tWritePrivateProfileString(\"window\", \"defaultsizy\", val, gInitPath);\n\n\t// fkeys\n\tfor(int i=0; FKeys[i].iLabelResourceId; i++){\n\t\tint iCursor = 0;\n\t\tDWORD dwKey;\n\t\tCComboBox *pCombo=(CComboBox *)GetDlgItem(FKeys[i].iComboResourceId);\n\t\tdwKey = FKeyCombo[pCombo->GetCurSel()].dwVKeyCode;\n\t\tif(dwKey != -1) {\n\t\t\tchar sKNum[20];\n\t\t\tsprintf_s(sKNum, sizeof(sKNum), \"%i\", dwKey);\n\t\t\tWritePrivateProfileString(\"keymapping\", FKeys[i].sIniLabel, sKNum, gInitPath);\n\t\t}\n\t\telse \n\t\t\tWritePrivateProfileString(\"keymapping\", FKeys[i].sIniLabel, \"\", gInitPath);\n\t}\n\t// hot keys\n\tfor(int i=0; HKeys[i].iLabelResourceId; i++){\n\t\tint iCursor = 0;\n\t\tDWORD dwKey;\n\t\tCComboBox *pCombo=(CComboBox *)GetDlgItem(HKeys[i].iComboResourceId);\n\t\tdwKey = HKeyCombo[pCombo->GetCurSel()].dwVKeyCode;\n\t\tif(dwKey != -1) {\n\t\t\tchar sKNum[20];\n\t\t\tsprintf_s(sKNum, sizeof(sKNum), \"%i\", dwKey);\n\t\t\tWritePrivateProfileString(\"keymapping\", HKeys[i].sIniLabel, sKNum, gInitPath);\n\t\t}\n\t\telse \n\t\t\tWritePrivateProfileString(\"keymapping\", HKeys[i].sIniLabel, \"\", gInitPath);\n\t}\n\t//(CDxwndhostView *)(this->GetParent())->UpdateHotKeys();\n\t//gbDebug = m_DebugMode;\n\tgAutoHideMode = m_AutoHideMode;\n\tgWarnOnExit = m_WarnOnExit;\n}\n"
  },
  {
    "path": "host/CGlobalSettings.h",
    "content": "#include \"specialedit.h\"\n\n#pragma once\n\ntypedef struct {\n\tint iLabelResourceId;\n\tchar *sLabel;\n\tint iComboResourceId;\n\tchar *sIniLabel;\n\tint iComboSelection;\n} Key_Type;\n\ntypedef struct {\n\tDWORD dwVKeyCode;\n\tchar *sVKeyLabel;\n} KeyCombo_Type;\n\n// CGlobalSettings dialog\n\nclass CGlobalSettings : public CDialog\n{\n\tDECLARE_DYNAMIC(CGlobalSettings)\n\npublic:\n\tCGlobalSettings(CWnd* pParent = NULL);   // standard constructor\n\tvirtual ~CGlobalSettings();\n\n// Dialog Data\n\tenum { IDD = IDD_GLOBAL_CONFIG };\n\nprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\n\t//BOOL m_DebugMode;\n\tBOOL m_UpdatePaths;\n\tBOOL m_AutoHideMode;\n\tBOOL m_CheckAdminRights;\n\tBOOL m_NameFromFolder;\n\tBOOL m_MultiHooks;\n\tBOOL m_WarnOnExit;\n\tint m_TexMinX;\n\tint m_TexMinY;\n\tint m_TexMaxX;\n\tint m_TexMaxY;\n\tint m_DefaultCoordinates;\n\tint m_DefaultPosX;\n\tint m_DefaultPosY;\n\tint m_DefaultSizX;\n\tint m_DefaultSizY;\n\n\tDECLARE_MESSAGE_MAP()\npublic:\npublic:\n\tvirtual BOOL OnInitDialog();\nprotected:\n\tCSpecialEdit m_EditPosX;\n\tCSpecialEdit m_EditPosY;\n\tvirtual void OnOK();\n};\n"
  },
  {
    "path": "host/CoolUtils.cpp",
    "content": "#include \"stdafx.h\"\n#include \"CoolUtils.h\"\n\n/****************************************************************************\n *\tFunction Name\t: gShowHideTaskBar()\t\t\t\t\t\t\t\t\t*\n *\tParameters\t\t: BOOL bHide (flag to toggle Show/Hide of Taskbar)\t\t*\n *\tReturn type\t\t: void\t\t\t\t\t\t\t\t\t\t\t\t\t*\n *\tPurpose\t\t\t: Function is used to Show/Hide the TaskBar\t\t\t\t*\n *\tAuthor\t\t\t: Ashutosh R. Bhatikar (ARB)\t\t\t\t\t\t\t*\n *\tDate written\t: 20th December 2000\t\t\t\t\t\t\t\t\t*\n *\tModification History :\t\t\t\t\t\t\t\t\t\t\t\t\t*\n *\tDate of modification\t\t\t\t\tReason\t\t\t\t\t\t\t*\n *  25th December 2000\t\t\t\tAdded methods to Show/Hide menu\t\t\t*\n ****************************************************************************/\n\nvoid gShowHideTaskBar(BOOL bHide /*=FALSE*/)\n{\n\tCRect rectWorkArea = CRect(0,0,0,0);\n\tCRect rectTaskBar = CRect(0,0,0,0);\n\tstatic HMENU hMenu = NULL;\n\t\n\tCWnd *pWnd = CWnd::FindWindow(\"Shell_TrayWnd\", \"\");\n\t//CWnd *pDesktopWnd = CWnd::GetDesktopWindow();\n\tCWnd *pStart;\n\tpStart = NULL;\n\n\tif( bHide )\n\t{\n\t\t// Code to Hide the System Task Bar\n\t\tSystemParametersInfo(SPI_GETWORKAREA,\n\t\t\t\t\t\t\t 0,\n\t\t\t\t\t\t\t (LPVOID)&rectWorkArea,\n\t\t\t\t\t\t\t 0);\n\t\t\n\t\tif( pWnd )\n\t\t{\n\t\t\tpWnd->GetWindowRect(rectTaskBar);\n\t\t\trectWorkArea.bottom += rectTaskBar.Height();\n\t\t\tSystemParametersInfo(SPI_SETWORKAREA,\n\t\t\t\t\t\t\t\t 0,\n\t\t\t\t\t\t\t\t (LPVOID)&rectWorkArea,\n\t\t\t\t\t\t\t\t 0);\n\n\t\t\tpWnd->ShowWindow(SW_HIDE);\n\n\t\t\t//This will retrieve the Handle of Start Button using the above \n\t\t\t// handle and class name of  start Button.  \n\t\t\t// v2.03.52 fix: Win10 has no such a button!\n\t\t\tpStart = pWnd->FindWindow(\"Button\", NULL);\n\t\t\tif(pStart) pStart->ShowWindow(SW_HIDE);\n\t\t}\n\t}\n\telse\n\t{\n\t\t// Code to Show the System Task Bar\n\t\tSystemParametersInfo(SPI_GETWORKAREA,\n\t\t\t\t\t\t\t 0,\n\t\t\t\t\t\t\t (LPVOID)&rectWorkArea,\n\t\t\t\t\t\t\t 0);\n\t\tif( pWnd )\n\t\t{\n\t\t\tpWnd->GetWindowRect(rectTaskBar);\n\t\t\trectWorkArea.bottom -= rectTaskBar.Height();\n\t\t\tSystemParametersInfo(SPI_SETWORKAREA,\n\t\t\t\t\t\t\t\t 0,\n\t\t\t\t\t\t\t\t (LPVOID)&rectWorkArea,\n\t\t\t\t\t\t\t\t 0);\n\n\t\t\tpWnd->ShowWindow(SW_SHOW);\n\n\t\t\t//This will retrieve the Handle of Start Button using the above \n\t\t\t// handle and class name of  start Button.  \n\t\t\t// v2.03.52 fix: Win10 has no such a button!\n\t\t\tpStart = pWnd->FindWindow(\"Button\", NULL);\n\t\t\tif(pStart) pStart->ShowWindow(SW_SHOW);\n\t\t}\n\t}\n}\n\n/****************************************************************************\n *\tFunction Name\t: gHideMenu()\t\t\t\t\t\t\t\t\t\t\t*\n *\tParameters\t\t: CWnd* pWnd (Window associated with the menu)\t\t\t*\n *\tReturn type\t\t: HMENU\t\t\t\t\t\t\t\t\t\t\t\t\t*\n *\tPurpose\t\t\t: Function hides the menu associated with pWnd\t\t\t*\n *\tAuthor\t\t\t: Ashutosh R. Bhatikar (ARB)\t\t\t\t\t\t\t*\n *\tDate written\t: 25nd December 2000\t\t\t\t\t\t\t\t\t*\n *\tModification History :\t\t\t\t\t\t\t\t\t\t\t\t\t*\n *\tDate of modification\t\t\t\t\tReason\t\t\t\t\t\t\t*\n ****************************************************************************/\n\nHMENU gHideMenu(/*in*/CWnd* pWnd)\n{\n  HMENU hMenu = ::GetMenu(pWnd->GetSafeHwnd());\n  if (hMenu != NULL)\n  {\n    // Invalidate before SetMenu since we are going to replace\n    //  the frame's client area anyway\n    pWnd->Invalidate();\n    pWnd->SetMenu(NULL);\n    if( pWnd->IsKindOf(RUNTIME_CLASS(CFrameWnd)) )\n    {\n       CFrameWnd* pFrameWnd = (CFrameWnd*)pWnd;\n       // avoid any idle menu processing\n       pFrameWnd->m_nIdleFlags &= ~CFrameWnd::idleMenu;\n    }\n    return hMenu;\n  }\n  return NULL;\n}\n\n/****************************************************************************\n *\tFunction Name\t: gShowMenuBack()\t\t\t\t\t\t\t\t\t\t*\n *\tParameters\t\t: HMENU hMenu (Handle of the menu which was hidden)\t\t*\n *\t\t\t\t\t  CWnd* pWnd (Window associated with the menu)\t\t\t*\n *\tReturn type\t\t: BOOL\t\t\t\t\t\t\t\t\t\t\t\t\t*\n *\tPurpose\t\t\t: Function shows back the menu associated with pWnd\t\t*\n *\tAuthor\t\t\t: Ashutosh R. Bhatikar (ARB)\t\t\t\t\t\t\t*\n *\tDate written\t: 25nd December 2000\t\t\t\t\t\t\t\t\t*\n *\tModification History :\t\t\t\t\t\t\t\t\t\t\t\t\t*\n *\tDate of modification\t\t\t\t\tReason\t\t\t\t\t\t\t*\n ****************************************************************************/\n\nBOOL gShowMenuBack(/*in*/HMENU hMenu, /*in*/CWnd* pWnd)\n{\n\t// put the menu back in place if it was removed before\n  if (hMenu != NULL)\n  {\n    // Invalidate before SetMenu since we are going to replace\n    //  the frame's client area anyway\n    pWnd->Invalidate();\n    ::SetMenu(pWnd->GetSafeHwnd(), hMenu);\n    return TRUE;\n  }\n  return FALSE;\n}\n"
  },
  {
    "path": "host/CoolUtils.h",
    "content": "#ifndef __COOLUTILS_H\n#define __COOLUTILS_H\n#include \"stdafx.h\"\n\nvoid gShowHideTaskBar(/*in*/BOOL bHide = FALSE);\n\nHMENU gHideMenu(/*in*/CWnd* pWnd);\n\nBOOL gShowMenuBack(/*in*/HMENU hMenu, /*in*/CWnd* pWnd);\n\n#endif"
  },
  {
    "path": "host/CppUACSelfElevation.cpp",
    "content": "/****************************** Module Header ******************************\\\nModule Name:  CppUACSelfElevation.cpp\nProject:      CppUACSelfElevation\nCopyright (c) Microsoft Corporation.\n\nUser Account Control (UAC) is a new security component in Windows Vista and \nnewer operating systems. With UAC fully enabled, interactive administrators \nnormally run with least user privileges. This example demonstrates how to \ncheck the privilege level of the current process, and how to self-elevate \nthe process by giving explicit consent with the Consent UI. \n\nThis source is subject to the Microsoft Public License.\nSee http://www.microsoft.com/en-us/openness/resources/licenses.aspx#MPL.\nAll other rights reserved.\n\nTHIS CODE AND INFORMATION IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY KIND, \nEITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED \nWARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.\n\\***************************************************************************/\n\n#pragma region Includes and Manifest Dependencies\n\n#include \"stdafx.h\"\n\n#include <stdio.h>\n#include <windows.h>\n#include <windowsx.h>\n#include <strsafe.h>\n#include <shlobj.h>\n#include \"Resource.h\"\n#include <Shellapi.h>\n\n// Enable Visual Style\n#if defined _M_IX86\n#pragma comment(linker,\"/manifestdependency:\\\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\\\"\")\n#elif defined _M_IA64\n#pragma comment(linker,\"/manifestdependency:\\\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\\\"\")\n#elif defined _M_X64\n#pragma comment(linker,\"/manifestdependency:\\\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\\\"\")\n#else\n#pragma comment(linker,\"/manifestdependency:\\\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\\\"\")\n#endif\n#pragma endregion\n\n\n#pragma region \"Helper Functions for Admin Privileges and Elevation Status\"\n\n//\n//   FUNCTION: IsUserInAdminGroup()\n//\n//   PURPOSE: The function checks whether the primary access token of the \n//   process belongs to user account that is a member of the local \n//   Administrators group, even if it currently is not elevated.\n//\n//   RETURN VALUE: Returns TRUE if the primary access token of the process \n//   belongs to user account that is a member of the local Administrators \n//   group. Returns FALSE if the token does not.\n//\n//   EXCEPTION: If this function fails, it throws a C++ DWORD exception which \n//   contains the Win32 error code of the failure.\n//\n//   EXAMPLE CALL:\n//     try \n//     {\n//         if (IsUserInAdminGroup())\n//             wprintf (L\"User is a member of the Administrators group\\n\");\n//         else\n//             wprintf (L\"User is not a member of the Administrators group\\n\");\n//     }\n//     catch (DWORD dwError)\n//     {\n//         wprintf(L\"IsUserInAdminGroup failed w/err %lu\\n\", dwError);\n//     }\n//\nBOOL IsUserInAdminGroup()\n{\n    BOOL fInAdminGroup = FALSE;\n    DWORD dwError = ERROR_SUCCESS;\n    HANDLE hToken = NULL;\n    HANDLE hTokenToCheck = NULL;\n    DWORD cbSize = 0;\n    OSVERSIONINFO osver = { sizeof(osver) };\n\n    // Open the primary access token of the process for query and duplicate.\n    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_DUPLICATE, \n        &hToken))\n    {\n        dwError = GetLastError();\n        goto Cleanup;\n    }\n\n    // Determine whether system is running Windows Vista or later operating \n    // systems (major version >= 6) because they support linked tokens, but \n    // previous versions (major version < 6) do not.\n    if (!GetVersionEx(&osver))\n    {\n        dwError = GetLastError();\n        goto Cleanup;\n    }\n\n    if (osver.dwMajorVersion >= 6)\n    {\n        // Running Windows Vista or later (major version >= 6). \n        // Determine token type: limited, elevated, or default. \n        TOKEN_ELEVATION_TYPE elevType;\n        if (!GetTokenInformation(hToken, TokenElevationType, &elevType, \n            sizeof(elevType), &cbSize))\n        {\n            dwError = GetLastError();\n            goto Cleanup;\n        }\n\n        // If limited, get the linked elevated token for further check.\n        if (TokenElevationTypeLimited == elevType)\n        {\n            if (!GetTokenInformation(hToken, TokenLinkedToken, &hTokenToCheck, \n                sizeof(hTokenToCheck), &cbSize))\n            {\n                dwError = GetLastError();\n                goto Cleanup;\n            }\n        }\n    }\n    \n    // CheckTokenMembership requires an impersonation token. If we just got a \n    // linked token, it already is an impersonation token.  If we did not get \n    // a linked token, duplicate the original into an impersonation token for \n    // CheckTokenMembership.\n    if (!hTokenToCheck)\n    {\n        if (!DuplicateToken(hToken, SecurityIdentification, &hTokenToCheck))\n        {\n            dwError = GetLastError();\n            goto Cleanup;\n        }\n    }\n\n    // Create the SID corresponding to the Administrators group.\n    BYTE adminSID[SECURITY_MAX_SID_SIZE];\n    cbSize = sizeof(adminSID);\n    if (!CreateWellKnownSid(WinBuiltinAdministratorsSid, NULL, &adminSID,  \n        &cbSize))\n    {\n        dwError = GetLastError();\n        goto Cleanup;\n    }\n\n    // Check if the token to be checked contains admin SID.\n    // http://msdn.microsoft.com/en-us/library/aa379596(VS.85).aspx:\n    // To determine whether a SID is enabled in a token, that is, whether it \n    // has the SE_GROUP_ENABLED attribute, call CheckTokenMembership.\n    if (!CheckTokenMembership(hTokenToCheck, &adminSID, &fInAdminGroup)) \n    {\n        dwError = GetLastError();\n        goto Cleanup;\n    }\n\nCleanup:\n    // Centralized cleanup for all allocated resources.\n    if (hToken)\n    {\n        CloseHandle(hToken);\n        hToken = NULL;\n    }\n    if (hTokenToCheck)\n    {\n        CloseHandle(hTokenToCheck);\n        hTokenToCheck = NULL;\n    }\n\n    // Throw the error if something failed in the function.\n    if (ERROR_SUCCESS != dwError)\n    {\n        throw dwError;\n    }\n\n    return fInAdminGroup;\n}\n\n\n// \n//   FUNCTION: IsRunAsAdmin()\n//\n//   PURPOSE: The function checks whether the current process is run as \n//   administrator. In other words, it dictates whether the primary access \n//   token of the process belongs to user account that is a member of the \n//   local Administrators group and it is elevated.\n//\n//   RETURN VALUE: Returns TRUE if the primary access token of the process \n//   belongs to user account that is a member of the local Administrators \n//   group and it is elevated. Returns FALSE if the token does not.\n//\n//   EXCEPTION: If this function fails, it throws a C++ DWORD exception which \n//   contains the Win32 error code of the failure.\n//\n//   EXAMPLE CALL:\n//     try \n//     {\n//         if (IsRunAsAdmin())\n//             wprintf (L\"Process is run as administrator\\n\");\n//         else\n//             wprintf (L\"Process is not run as administrator\\n\");\n//     }\n//     catch (DWORD dwError)\n//     {\n//         wprintf(L\"IsRunAsAdmin failed w/err %lu\\n\", dwError);\n//     }\n//\nBOOL IsRunAsAdmin()\n{\n    BOOL fIsRunAsAdmin = FALSE;\n    DWORD dwError = ERROR_SUCCESS;\n    PSID pAdministratorsGroup = NULL;\n\n    // Allocate and initialize a SID of the administrators group.\n    SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;\n    if (!AllocateAndInitializeSid(\n        &NtAuthority, \n        2, \n        SECURITY_BUILTIN_DOMAIN_RID, \n        DOMAIN_ALIAS_RID_ADMINS, \n        0, 0, 0, 0, 0, 0, \n        &pAdministratorsGroup))\n    {\n        dwError = GetLastError();\n        goto Cleanup;\n    }\n\n    // Determine whether the SID of administrators group is enabled in \n    // the primary access token of the process.\n    if (!CheckTokenMembership(NULL, pAdministratorsGroup, &fIsRunAsAdmin))\n    {\n        dwError = GetLastError();\n        goto Cleanup;\n    }\n\nCleanup:\n    // Centralized cleanup for all allocated resources.\n    if (pAdministratorsGroup)\n    {\n        FreeSid(pAdministratorsGroup);\n        pAdministratorsGroup = NULL;\n    }\n\n    // Throw the error if something failed in the function.\n    if (ERROR_SUCCESS != dwError)\n    {\n        throw dwError;\n    }\n\n    return fIsRunAsAdmin;\n}\n\n\n//\n//   FUNCTION: IsProcessElevated()\n//\n//   PURPOSE: The function gets the elevation information of the current \n//   process. It dictates whether the process is elevated or not. Token \n//   elevation is only available on Windows Vista and newer operating \n//   systems, thus IsProcessElevated throws a C++ exception if it is called \n//   on systems prior to Windows Vista. It is not appropriate to use this \n//   function to determine whether a process is run as administartor.\n//\n//   RETURN VALUE: Returns TRUE if the process is elevated. Returns FALSE if \n//   it is not.\n//\n//   EXCEPTION: If this function fails, it throws a C++ DWORD exception \n//   which contains the Win32 error code of the failure. For example, if \n//   IsProcessElevated is called on systems prior to Windows Vista, the error \n//   code will be ERROR_INVALID_PARAMETER.\n//\n//   NOTE: TOKEN_INFORMATION_CLASS provides TokenElevationType to check the \n//   elevation type (TokenElevationTypeDefault / TokenElevationTypeLimited /\n//   TokenElevationTypeFull) of the process. It is different from \n//   TokenElevation in that, when UAC is turned off, elevation type always \n//   returns TokenElevationTypeDefault even though the process is elevated \n//   (Integrity Level == High). In other words, it is not safe to say if the \n//   process is elevated based on elevation type. Instead, we should use \n//   TokenElevation.\n//\n//   EXAMPLE CALL:\n//     try \n//     {\n//         if (IsProcessElevated())\n//             wprintf (L\"Process is elevated\\n\");\n//         else\n//             wprintf (L\"Process is not elevated\\n\");\n//     }\n//     catch (DWORD dwError)\n//     {\n//         wprintf(L\"IsProcessElevated failed w/err %lu\\n\", dwError);\n//     }\n//\nBOOL IsProcessElevated()\n{\n    BOOL fIsElevated = FALSE;\n    DWORD dwError = ERROR_SUCCESS;\n    HANDLE hToken = NULL;\n\n    // Open the primary access token of the process with TOKEN_QUERY.\n    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))\n    {\n        dwError = GetLastError();\n        goto Cleanup;\n    }\n\n    // Retrieve token elevation information.\n    TOKEN_ELEVATION elevation;\n    DWORD dwSize;\n    if (!GetTokenInformation(hToken, TokenElevation, &elevation, \n        sizeof(elevation), &dwSize))\n    {\n        // When the process is run on operating systems prior to Windows \n        // Vista, GetTokenInformation returns FALSE with the \n        // ERROR_INVALID_PARAMETER error code because TokenElevation is \n        // not supported on those operating systems.\n        dwError = GetLastError();\n        goto Cleanup;\n    }\n\n    fIsElevated = elevation.TokenIsElevated;\n\nCleanup:\n    // Centralized cleanup for all allocated resources.\n    if (hToken)\n    {\n        CloseHandle(hToken);\n        hToken = NULL;\n    }\n\n    // Throw the error if something failed in the function.\n    if (ERROR_SUCCESS != dwError)\n    {\n        throw dwError;\n    }\n\n    return fIsElevated;\n}\n\n\n//\n//   FUNCTION: GetProcessIntegrityLevel()\n//\n//   PURPOSE: The function gets the integrity level of the current process. \n//   Integrity level is only available on Windows Vista and newer operating \n//   systems, thus GetProcessIntegrityLevel throws a C++ exception if it is \n//   called on systems prior to Windows Vista.\n//\n//   RETURN VALUE: Returns the integrity level of the current process. It is \n//   usually one of these values:\n//\n//     SECURITY_MANDATORY_UNTRUSTED_RID (SID: S-1-16-0x0)\n//     Means untrusted level. It is used by processes started by the \n//     Anonymous group. Blocks most write access. \n//\n//     SECURITY_MANDATORY_LOW_RID (SID: S-1-16-0x1000)\n//     Means low integrity level. It is used by Protected Mode Internet \n//     Explorer. Blocks write acess to most objects (such as files and \n//     registry keys) on the system. \n//\n//     SECURITY_MANDATORY_MEDIUM_RID (SID: S-1-16-0x2000)\n//     Means medium integrity level. It is used by normal applications \n//     being launched while UAC is enabled. \n//\n//     SECURITY_MANDATORY_HIGH_RID (SID: S-1-16-0x3000)\n//     Means high integrity level. It is used by administrative applications \n//     launched through elevation when UAC is enabled, or normal \n//     applications if UAC is disabled and the user is an administrator. \n//\n//     SECURITY_MANDATORY_SYSTEM_RID (SID: S-1-16-0x4000)\n//     Means system integrity level. It is used by services and other \n//     system-level applications (such as Wininit, Winlogon, Smss, etc.)  \n//\n//   EXCEPTION: If this function fails, it throws a C++ DWORD exception \n//   which contains the Win32 error code of the failure. For example, if \n//   GetProcessIntegrityLevel is called on systems prior to Windows Vista, \n//   the error code will be ERROR_INVALID_PARAMETER.\n//\n//   EXAMPLE CALL:\n//     try \n//     {\n//         DWORD dwIntegrityLevel = GetProcessIntegrityLevel();\n//     }\n//     catch (DWORD dwError)\n//     {\n//         wprintf(L\"GetProcessIntegrityLevel failed w/err %lu\\n\", dwError);\n//     }\n//\nDWORD GetProcessIntegrityLevel()\n{\n    DWORD dwIntegrityLevel = 0;\n    DWORD dwError = ERROR_SUCCESS;\n    HANDLE hToken = NULL;\n    DWORD cbTokenIL = 0;\n    PTOKEN_MANDATORY_LABEL pTokenIL = NULL;\n\n    // Open the primary access token of the process with TOKEN_QUERY.\n    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))\n    {\n        dwError = GetLastError();\n        goto Cleanup;\n    }\n\n    // Query the size of the token integrity level information. Note that \n    // we expect a FALSE result and the last error ERROR_INSUFFICIENT_BUFFER\n    // from GetTokenInformation because we have given it a NULL buffer. On \n    // exit cbTokenIL will tell the size of the integrity level information.\n    if (!GetTokenInformation(hToken, TokenIntegrityLevel, NULL, 0, &cbTokenIL))\n    {\n        if (ERROR_INSUFFICIENT_BUFFER != GetLastError())\n        {\n            // When the process is run on operating systems prior to Windows \n            // Vista, GetTokenInformation returns FALSE with the \n            // ERROR_INVALID_PARAMETER error code because TokenElevation \n            // is not supported on those operating systems.\n            dwError = GetLastError();\n            goto Cleanup;\n        }\n    }\n\n    // Now we allocate a buffer for the integrity level information.\n    pTokenIL = (TOKEN_MANDATORY_LABEL *)LocalAlloc(LPTR, cbTokenIL);\n    if (pTokenIL == NULL)\n    {\n        dwError = GetLastError();\n        goto Cleanup;\n    }\n\n    // Retrieve token integrity level information.\n    if (!GetTokenInformation(hToken, TokenIntegrityLevel, pTokenIL, \n        cbTokenIL, &cbTokenIL))\n    {\n        dwError = GetLastError();\n        goto Cleanup;\n    }\n\n    // Integrity Level SIDs are in the form of S-1-16-0xXXXX. (e.g. \n    // S-1-16-0x1000 stands for low integrity level SID). There is one and \n    // only one subauthority.\n    dwIntegrityLevel = *GetSidSubAuthority(pTokenIL->Label.Sid, 0);\n\nCleanup:\n    // Centralized cleanup for all allocated resources.\n    if (hToken)\n    {\n        CloseHandle(hToken);\n        hToken = NULL;\n    }\n    if (pTokenIL)\n    {\n        LocalFree(pTokenIL);\n        pTokenIL = NULL;\n        cbTokenIL = 0;\n    }\n\n    // Throw the error if something failed in the function.\n    if (ERROR_SUCCESS != dwError)\n    {\n        throw dwError;\n    }\n\n    return dwIntegrityLevel;\n}\n\n#pragma endregion\n\n\n//\n//   FUNCTION: ReportError(LPWSTR, DWORD)\n//\n//   PURPOSE: Display an error dialog for the failure of a certain function.\n//\n//   PARAMETERS:\n//   * pszFunction - the name of the function that failed.\n//   * dwError - the Win32 error code. Its default value is the calling \n//   thread's last-error code value.\n//\n//   NOTE: The failing function must be immediately followed by the call of \n//   ReportError if you do not explicitly specify the dwError parameter of \n//   ReportError. This is to ensure that the calling thread's last-error code \n//   value is not overwritten by any calls of API between the failing \n//   function and ReportError.\n//\nvoid ReportError(LPCWSTR pszFunction, DWORD dwError = GetLastError())\n{\n    char szMessage[200];\n    if (SUCCEEDED(StringCchPrintf(szMessage, ARRAYSIZE(szMessage), \n        \"%s failed w/err 0x%08lx\", pszFunction, dwError)))\n    {\n        MessageBox(NULL, szMessage, \"Error\", MB_ICONERROR);\n    }\n}\n\n"
  },
  {
    "path": "host/DesktopDialog.cpp",
    "content": "// DesktopDialog.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"dxwndhost.h\"\n#include \"DesktopDialog.h\"\n\n// CDesktopDialog dialog\n\nIMPLEMENT_DYNAMIC(CDesktopDialog, CDialog)\n\nCDesktopDialog::CDesktopDialog(CWnd* pParent /*=NULL*/)\n\t: CDialog(CDesktopDialog::IDD, pParent)\n{\n}\n\nCDesktopDialog::~CDesktopDialog()\n{\n}\n\nvoid CDesktopDialog::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n}\n\n\nBEGIN_MESSAGE_MAP(CDesktopDialog, CDialog)\n\tON_WM_TIMER()\nEND_MESSAGE_MAP()\n\n#define IDDesktopTIMER 2\n\n// CDesktopDialog message handlers\n\nvoid CDesktopDialog::OnTimer(UINT_PTR nIDEvent)\n{\n\tchar sMsg[1024];\n\n\tCDialog::OnTimer(nIDEvent);\n\n\tRECT desktop;\n\tHDC hDC;\n\t// Get a handle to the desktop window\n\tconst CWnd *hDesktop = GetDesktopWindow();\n\t// Get the size of screen to the variable desktop\n\thDesktop->GetWindowRect(&desktop);\n\t// The top left corner will have coordinates (0,0)\n\t// and the bottom right corner will have coordinates\n\t// (horizontal, vertical)\n\thDC = ::GetDC(::GetDesktopWindow());\n\tint iBPP = GetDeviceCaps(hDC, BITSPIXEL);\n\n\tPIXELFORMATDESCRIPTOR pfd;\n\tint  iPixelFormat;\n\t// get the current pixel format index \n#if 0\n\t::DescribePixelFormat(hDC, 1, sizeof(PIXELFORMATDESCRIPTOR), &pfd);\n\tHMODULE ogl;\n\t//ogl=LoadLibrary(\"opengl32\");\n\togl=LoadLibrary(\"gdi32\");\n\ttypedef BOOL (WINAPI *wglGetPixelFormat_Type)(HDC);\n\twglGetPixelFormat_Type pwglGetPixelFormat;\n\t//pwglGetPixelFormat = (wglGetPixelFormat_Type)GetProcAddress(ogl, \"wglGetPixelFormat\");\n\tpwglGetPixelFormat = (wglGetPixelFormat_Type)GetProcAddress(ogl, \"GetPixelFormat\");\n\tiPixelFormat = (*pwglGetPixelFormat)(hDC); \n\tiPixelFormat = (*pwglGetPixelFormat)(NULL); \n\t//iPixelFormat = ::GetPixelFormat(NULL); \n#endif\n\tiPixelFormat = ::GetPixelFormat(hDC); \n\tif(!iPixelFormat) iPixelFormat=1; // why returns 0???\n\tif(iPixelFormat){\n\t\t// obtain a detailed description of that pixel format  \n\t\t::DescribePixelFormat(hDC, iPixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd);\n\t\tsprintf_s(sMsg, 1024, \n\t\t\t\"Desktop size (W x H)=(%d x %d)\\n\" \n\t\t\t\"Color depth = %d (color bits = %d)\\n\"\n\t\t\t\"Pixel format = %d\\n\"\n\t\t\t\"Color bits  (RGBA)=(%d,%d,%d,%d)\\n\" \n\t\t\t\"Color shift (RGBA)=(%d,%d,%d,%d)\\n\"\n\t\t\t, \n\t\t\tdesktop.right, desktop.bottom, \n\t\t\tiBPP, pfd.cColorBits,\n\t\t\tiPixelFormat,\n\t\t\tpfd.cRedBits, pfd.cGreenBits, pfd.cBlueBits, pfd.cAlphaBits,\n\t\t\tpfd.cRedShift, pfd.cGreenShift, pfd.cBlueShift, pfd.cAlphaShift\n\t\t\t);\n\t}\n\telse{\n\t\tsprintf_s(sMsg, 1024, \"error %d\", GetLastError());\n\t}\n\n\tthis->SetDlgItemTextA(IDC_DESKTOPINFO, sMsg);\n}\n\nBOOL CDesktopDialog::OnInitDialog()\n{\n\tCDialog::OnInitDialog();\n\n\tSetTimer(IDDesktopTIMER, 1000, NULL);\n\n\t// TODO:  Add extra initialization here\n\n\treturn TRUE;  // return TRUE unless you set the focus to a control\n\t// EXCEPTION: OCX Property Pages should return FALSE\n}\n\nvoid CDesktopDialog::OnOK()\n{\n\t// TODO: Add your specialized code here and/or call the base class\n\n\tKillTimer(IDDesktopTIMER);\n\t// stop timer\n\n\tCDialog::OnOK();\n}\n"
  },
  {
    "path": "host/DesktopDialog.h",
    "content": "#pragma once\n\n\n// CDesktopDialog dialog\n\nclass CDesktopDialog : public CDialog\n{\n\tDECLARE_DYNAMIC(CDesktopDialog)\n\npublic:\n\tCDesktopDialog(CWnd* pParent = NULL);   // standard constructor\n\tvirtual ~CDesktopDialog();\n\n\t// Dialog Data\n\tenum { IDD = IDD_DESKTOP };\n\nprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\n\tDECLARE_MESSAGE_MAP()\npublic:\n\tafx_msg void OnTimer(UINT_PTR nIDEvent);\npublic:\n\tvirtual BOOL OnInitDialog();\nprotected:\n\tvirtual void OnOK();\n};\n"
  },
  {
    "path": "host/KillProc.cpp",
    "content": "//  Exam28.cpp\n//  9/21/2000  (rk)\n//  Last modified: 3/10/2002  (RK)\n//  test the routine KILL_PROC_BY_NAME to terminate a process\n\n#include \"stdafx.h\"\n#include <windows.h>\n#include <tlhelp32.h>\n\nint KillProcByName(char *sProcessTail, BOOL bKill, BOOL bKillAll)\n// Created: 6/23/2000  (RK)\n// Last modified: 3/10/2002  (RK)\n// Please report any problems or bugs to kochhar@physiology.wisc.edu\n// The latest version of this routine can be found at:\n//     http://www.neurophys.wisc.edu/ravi/software/killproc/\n// Terminate the process \"sProcessTail\" if it is currently running\n// This works for Win/95/98/ME and also Win/NT/2000/XP\n// The process name is case-insensitive, i.e. \"notepad.exe\" and \"NOTEPAD.EXE\"\n// will both work (for sProcessTail)\n// Return codes are as follows:\n//   0   = Process was successfully terminated\n//   603 = Process was not currently running\n//   604 = No permission to terminate process\n//   605 = Unable to load PSAPI.DLL\n//   602 = Unable to terminate process for some other reason\n//   606 = Unable to identify system type\n//   607 = Unsupported OS\n//   632 = Invalid process name\n//   700 = Unable to get procedure address from PSAPI.DLL\n//   701 = Unable to get process list, EnumProcesses failed\n//   702 = Unable to load KERNEL32.DLL\n//   703 = Unable to get procedure address from KERNEL32.DLL\n//   704 = CreateToolhelp32Snapshot failed\n// Change history:\n//   modified 3/8/2002  - Borland-C compatible if BORLANDC is defined as\n//                        suggested by Bob Christensen\n//   modified 3/10/2002 - Removed memory leaks as suggested by\n//\t\t\t\t\t      Jonathan Richard-Brochu (handles to Proc and Snapshot\n//                        were not getting closed properly in some cases)\n{\n\tBOOL bResult;\n\tint iLen,iLenP,indx;\n\tOSVERSIONINFO osvi;\n\tchar szToTermUpper[MAX_PATH];\n\tDWORD iFound=0;\n    HINSTANCE hInstLib;\n\n\t// Transfer Process name into \"szToTermUpper\" and\n\t// convert it to upper case\n\tiLenP=strlen(sProcessTail);\n\tif(iLenP<1 || iLenP>MAX_PATH) return 632;\n\tfor(indx=0;indx<iLenP;indx++) szToTermUpper[indx]=toupper(sProcessTail[indx]);\n\tszToTermUpper[iLenP]=0;\n\n\t// First check what version of Windows we're in\n\tosvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);\n    bResult=GetVersionEx(&osvi);\n\tif(!bResult) return 606;    // Unable to identify system version\n\t    \n\t// At Present we only support Win/NT/2000/XP or Win/9x/ME\n\tif((osvi.dwPlatformId != VER_PLATFORM_WIN32_NT) &&\n\t\t(osvi.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS))\n\t\treturn 607;\n\n    if(osvi.dwPlatformId>=VER_PLATFORM_WIN32_NT){\n\t\t// Win/NT or 2000 or XP or greater\n\n\t\t// PSAPI Function Pointers.\n\t\tBOOL (WINAPI *lpfEnumProcesses)( DWORD *, DWORD cb, DWORD * );\n\t\tBOOL (WINAPI *lpfEnumProcessModules)( HANDLE, HMODULE *, DWORD, LPDWORD );\n\t\tDWORD (WINAPI *lpfGetModuleBaseName)( HANDLE, HMODULE, LPTSTR, DWORD );\n\n\t\tDWORD aiPID[1000],iCb=1000,iNumProc,iV2000=0;\n\t\tDWORD iCbneeded,i;\n\t\tchar szName[MAX_PATH];\n\t\tHANDLE hProc;\n\t\tHMODULE hMod;\n\n\t\t// Load library and get the procedures explicitly. We do\n\t\t// this so that we don't have to worry about modules using\n\t\t// this code failing to load under Windows 9x, because\n\t\t// it can't resolve references to the PSAPI.DLL.\n\t\thInstLib = LoadLibraryA(\"PSAPI.DLL\");\n\t\tif(hInstLib == NULL) return 605;\n\n\t\t// Get procedure addresses.\n\t\tlpfEnumProcesses = (BOOL(WINAPI *)(DWORD *,DWORD,DWORD*))GetProcAddress( hInstLib, \"EnumProcesses\");\n\t\tlpfEnumProcessModules = (BOOL(WINAPI *)(HANDLE, HMODULE *, DWORD, LPDWORD))GetProcAddress( hInstLib, \"EnumProcessModules\");\n\t\tlpfGetModuleBaseName =(DWORD (WINAPI *)(HANDLE, HMODULE, LPTSTR, DWORD )) GetProcAddress( hInstLib, \"GetModuleBaseNameA\");\n\n\t\tif (lpfEnumProcesses == NULL ||\n\t\t\tlpfEnumProcessModules == NULL ||\n\t\t\tlpfGetModuleBaseName == NULL){\n\t\t\tFreeLibrary(hInstLib);\n\t\t\treturn 700;\n\t\t}\n\t\t \n\t\tbResult=lpfEnumProcesses(aiPID,iCb,&iCbneeded);\n\t\tif(!bResult){\n\t\t\t// Unable to get process list, EnumProcesses failed\n            FreeLibrary(hInstLib);\n\t\t\treturn 701;\n\t\t}\n\n\t\t// How many processes are there?\n\t\tiNumProc=iCbneeded/sizeof(DWORD);\n\n\t\t// Get and match the name of each process\n\t\tfor(i=0;i<iNumProc;i++){\n\t\t\t// Get the (module) name for this process\n\t        strcpy(szName,\"Unknown\");\n\t\t\t// First, get a handle to the process\n\t        hProc=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE, aiPID[i]);\n\t        // Now, get the process name\n\t        if(hProc){\n               if(lpfEnumProcessModules(hProc,&hMod,sizeof(hMod),&iCbneeded)){\n                  iLen=lpfGetModuleBaseName(hProc,hMod,szName,MAX_PATH);\n\t\t\t   }\n\t\t\t}\n\t        CloseHandle(hProc);\n\t\t\t// We will match regardless of lower or upper case\n#ifdef BORLANDC\n\t\t\tif(strcmp(strupr(szName),szToTermUpper)==0){\n#else\n\t\t\tif(strcmp(_strupr(szName),szToTermUpper)==0){\n#endif\n\t\t\t\t// Process found, now terminate it\n\t\t\t\tiFound=1;\n\n\t\t\t\tif(!bKill) {\n\t\t\t\t\tFreeLibrary(hInstLib);\n\t\t\t\t\treturn 0; // just tell you found it.\n\t\t\t\t}\n\n\t\t\t\tif(osvi.dwMajorVersion == 5){\n\t\t\t\t\t// First open for termination\n\t\t\t\t\thProc=OpenProcess(PROCESS_TERMINATE,FALSE,aiPID[i]);\n\t\t\t\t\tif(hProc){\n\t\t\t\t\t\tif(TerminateProcess(hProc,0)){\n\t\t\t\t\t\t\t// process terminated\n\t\t\t\t\t\t\tCloseHandle(hProc);\n\t\t\t\t\t\t\tif (!bKillAll) {\n\t\t\t\t\t\t\t\tFreeLibrary(hInstLib);\n\t\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse{\n\t\t\t\t\t\t\t// Unable to terminate process\n\t\t\t\t\t\t\tCloseHandle(hProc);\n\t\t\t\t\t\t\tif (!bKillAll) {\n\t\t\t\t\t\t\t\tFreeLibrary(hInstLib);\n\t\t\t\t\t\t\t\treturn 602;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\t// Unable to open process for termination\n\t\t\t\t\t\tif (!bKillAll) {\n\t\t\t\t\t\t\tFreeLibrary(hInstLib);\n\t\t\t\t\t\t\treturn 604;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// this will kill the whole process tree - though with no feedback retcode.\n\t\t\t\t\textern void KillProcessTree(DWORD);\n\t\t\t\t\tKillProcessTree(aiPID[i]);\n\t\t\t\t\tif (!bKillAll) {\n\t\t\t\t\t\tFreeLibrary(hInstLib);\t\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t//return 0;\n\t}\n\n#if 0 // useless ..... \n\n\tif(osvi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)\n\t{\n\t\t// Win/95 or 98 or ME\n\n\t\t// ToolHelp Function Pointers.\n\t\tBOOL (WINAPI *lpfModule32First)(HANDLE,LPMODULEENTRY32) ;\n\t\tBOOL (WINAPI *lpfModule32Next)(HANDLE,LPMODULEENTRY32) ;\n\t\tBOOL (WINAPI *lpfProcess32First)(HANDLE,LPPROCESSENTRY32) ;\n\t\tBOOL (WINAPI *lpfProcess32Next)(HANDLE,LPPROCESSENTRY32) ;\n\t\tHANDLE (WINAPI *lpfCreateToolhelp32Snapshot)(DWORD,DWORD) ;\n\n\t\tHANDLE hSnapShot,hSnapShotm;\n\t\tBOOL bResultm;\n\t\tPROCESSENTRY32 procentry;      \n\t\tMODULEENTRY32 modentry;\n\t\t\t\n\t\thInstLib = LoadLibraryA(\"Kernel32.DLL\");\n\t\tif( hInstLib == NULL )\n\t\t\treturn 702;\n\n\t\t// Get procedure addresses.\n\t\t// We are linking to these functions of Kernel32\n\t\t// explicitly, because otherwise a module using\n\t\t// this code would fail to load under Windows NT,\n\t\t// which does not have the Toolhelp32\n\t\t// functions in the Kernel 32.\n\t\tlpfCreateToolhelp32Snapshot=\n\t\t\t(HANDLE(WINAPI *)(DWORD,DWORD))\n\t\t\tGetProcAddress( hInstLib,\n\t\t\t\"CreateToolhelp32Snapshot\" ) ;\n\t\tlpfProcess32First=\n\t\t\t(BOOL(WINAPI *)(HANDLE,LPPROCESSENTRY32))\n\t\t\tGetProcAddress( hInstLib, \"Process32First\" ) ;\n\t\tlpfProcess32Next=\n\t\t\t(BOOL(WINAPI *)(HANDLE,LPPROCESSENTRY32))\n\t\t\tGetProcAddress( hInstLib, \"Process32Next\" ) ;\n\t\tlpfModule32First=\n\t\t\t(BOOL(WINAPI *)(HANDLE,LPMODULEENTRY32))\n\t\t\tGetProcAddress( hInstLib, \"Module32First\" ) ;\n\t\tlpfModule32Next=\n\t\t\t(BOOL(WINAPI *)(HANDLE,LPMODULEENTRY32))\n\t\t\tGetProcAddress( hInstLib, \"Module32Next\" ) ;\n\t\tif( lpfProcess32Next == NULL ||\n\t\t\tlpfProcess32First == NULL ||\n\t\t    lpfModule32Next == NULL ||\n\t\t\tlpfModule32First == NULL ||\n\t\t\tlpfCreateToolhelp32Snapshot == NULL )\n\t\t{\n\t\t\tFreeLibrary(hInstLib);\n\t\t\treturn 703;\n\t\t}\n\t\t\t\n\t\t// The Process32.. and Module32.. routines return names in all uppercase\n\n\t\t// Get a handle to a Toolhelp snapshot of all the systems processes.\n\n\t\thSnapShot = lpfCreateToolhelp32Snapshot(\n\t\t\tTH32CS_SNAPPROCESS, 0 ) ;\n\t\tif( hSnapShot == INVALID_HANDLE_VALUE )\n\t\t{\n\t\t\tFreeLibrary(hInstLib);\n\t\t\treturn 704;\n\t\t}\n\t\t\n        // Get the first process' information.\n        procentry.dwSize = sizeof(PROCESSENTRY32);\n        bResult=lpfProcess32First(hSnapShot,&procentry);\n\n        // While there are processes, keep looping and checking.\n        while(bResult)\n        {\n\t\t    // Get a handle to a Toolhelp snapshot of this process.\n\t\t    hSnapShotm = lpfCreateToolhelp32Snapshot(\n\t\t\t    TH32CS_SNAPMODULE, procentry.th32ProcessID) ;\n\t\t    if( hSnapShotm == INVALID_HANDLE_VALUE )\n\t\t\t{\n\t\t\t\tCloseHandle(hSnapShot);\n\t\t\t    FreeLibrary(hInstLib);\n\t\t\t    return 704;\n\t\t\t}\n\t\t\t// Get the module list for this process\n\t\t\tmodentry.dwSize=sizeof(MODULEENTRY32);\n\t\t\tbResultm=lpfModule32First(hSnapShotm,&modentry);\n\n\t\t\t// While there are modules, keep looping and checking\n\t\t\twhile(bResultm)\n\t\t\t{\n\t\t        if(strcmp(modentry.szModule,szToTermUpper)==0)\n\t\t\t\t{\n\t\t\t\t    // Process found, now terminate it\n\t\t\t\t    iFound=1;\n\n\t\t\t\t\tif(!bKill) {\n\t\t\t\t\t    // process terminated\n\t\t\t\t\t\tCloseHandle(hSnapShotm);\n\t\t\t\t\t\tCloseHandle(hSnapShot);\n\t\t\t\t\t\tFreeLibrary(hInstLib);\n\t\t\t\t\t\treturn 0; // just tell you found it.\n\t\t\t\t\t}\n\n\t\t\t\t    // First open for termination\n\t\t\t\t    hProc=OpenProcess(PROCESS_TERMINATE,FALSE,procentry.th32ProcessID);\n\t\t\t\t    if(hProc)\n\t\t\t\t\t{\n\t\t\t\t\t    if(TerminateProcess(hProc,0))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t    // process terminated\n\t\t\t\t\t\t\tCloseHandle(hSnapShotm);\n\t\t\t\t\t\t\tCloseHandle(hSnapShot);\n\t\t\t\t\t\t\tCloseHandle(hProc);\n\t\t\t                FreeLibrary(hInstLib);\n\t\t\t\t\t\t    if (!bKillAll) return 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t    else\n\t\t\t\t\t\t{\n\t\t\t\t\t\t    // Unable to terminate process\n\t\t\t\t\t\t\tCloseHandle(hSnapShotm);\n\t\t\t\t\t\t\tCloseHandle(hSnapShot);\n\t\t\t\t\t\t\tCloseHandle(hProc);\n\t\t\t                FreeLibrary(hInstLib);\n\t\t\t\t\t\t    if (!bKillAll) return 602;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t    else\n\t\t\t\t\t{\n\t\t\t\t\t    // Unable to open process for termination\n\t\t\t\t\t\tCloseHandle(hSnapShotm);\n\t\t\t\t\t\tCloseHandle(hSnapShot);\n\t\t\t            FreeLibrary(hInstLib);\n\t\t\t\t\t    if (!bKillAll) return 604;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{  // Look for next modules for this process\n\t\t\t\t\tmodentry.dwSize=sizeof(MODULEENTRY32);\n\t\t\t\t\tbResultm=lpfModule32Next(hSnapShotm,&modentry);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Keep looking\n\t\t\tCloseHandle(hSnapShotm);\n            procentry.dwSize = sizeof(PROCESSENTRY32);\n            bResult = lpfProcess32Next(hSnapShot,&procentry);\n        }\n\t\tCloseHandle(hSnapShot);\n\t}\n#endif \n\n\tif(iFound==0)\n\t{\n\t\tFreeLibrary(hInstLib);\n\t\treturn 603;\n\t}\n\tFreeLibrary(hInstLib);\n\treturn 0;\n}\n\n// tries to get the full pathname of a running process\n// returning 0 if succeeds.\n\nBOOL GetProcByName(char *sProcessTail, char*sFullPath)\n{\n\tBOOL bResult,bResultm;\n\tDWORD aiPID[1000],iCb=1000,iNumProc,iV2000=0;\n\tDWORD iCbneeded,i,iFound=0;\n\tchar szName[MAX_PATH],szToTermUpper[MAX_PATH];\n\tHANDLE hProc,hSnapShot,hSnapShotm;\n\tOSVERSIONINFO osvi;\n    HINSTANCE hInstLib;\n\tint iLen,iLenP,indx;\n    HMODULE hMod;\n\tPROCESSENTRY32 procentry;      \n\tMODULEENTRY32 modentry;\n\n\t// Transfer Process name into \"szToTermUpper\" and\n\t// convert it to upper case\n\tiLenP=strlen(sProcessTail);\n\tif(iLenP<1 || iLenP>MAX_PATH) return FALSE;\n\tfor(indx=0;indx<iLenP;indx++)\n\t\tszToTermUpper[indx]=toupper(sProcessTail[indx]);\n\tszToTermUpper[iLenP]=0;\n\n     // PSAPI Function Pointers.\n     BOOL (WINAPI *lpfEnumProcesses)( DWORD *, DWORD cb, DWORD * );\n     BOOL (WINAPI *lpfEnumProcessModules)( HANDLE, HMODULE *, DWORD, LPDWORD );\n     DWORD (WINAPI *lpfGetModuleBaseName)( HANDLE, HMODULE, LPTSTR, DWORD );\n     DWORD (WINAPI *lpfGetModuleFileName)( HANDLE, HMODULE, LPTSTR, DWORD );\n\n      // ToolHelp Function Pointers.\n      HANDLE (WINAPI *lpfCreateToolhelp32Snapshot)(DWORD,DWORD) ;\n      BOOL (WINAPI *lpfProcess32First)(HANDLE,LPPROCESSENTRY32) ;\n      BOOL (WINAPI *lpfProcess32Next)(HANDLE,LPPROCESSENTRY32) ;\n      BOOL (WINAPI *lpfModule32First)(HANDLE,LPMODULEENTRY32) ;\n      BOOL (WINAPI *lpfModule32Next)(HANDLE,LPMODULEENTRY32) ;\n\n\t// First check what version of Windows we're in\n\tosvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);\n    bResult=GetVersionEx(&osvi);\n\tif(!bResult)     // Unable to identify system version\n\t    return 606;\n\n\t// At Present we only support Win/NT/2000/XP or Win/9x/ME\n\tif((osvi.dwPlatformId != VER_PLATFORM_WIN32_NT) &&\n\t\t(osvi.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS))\n\t\treturn 607;\n\n    if(osvi.dwPlatformId>=VER_PLATFORM_WIN32_NT)\n\t{\n\t\t// Win/NT or 2000 or XP or greater\n\n         // Load library and get the procedures explicitly. We do\n         // this so that we don't have to worry about modules using\n         // this code failing to load under Windows 9x, because\n         // it can't resolve references to the PSAPI.DLL.\n         hInstLib = LoadLibraryA(\"PSAPI.DLL\");\n         if(hInstLib == NULL)\n            return 605;\n\n         // Get procedure addresses.\n         lpfEnumProcesses = (BOOL(WINAPI *)(DWORD *,DWORD,DWORD*))\n            GetProcAddress( hInstLib, \"EnumProcesses\" ) ;\n         lpfEnumProcessModules = (BOOL(WINAPI *)(HANDLE, HMODULE *,\n            DWORD, LPDWORD)) GetProcAddress( hInstLib,\n            \"EnumProcessModules\" ) ;\n         lpfGetModuleBaseName =(DWORD (WINAPI *)(HANDLE, HMODULE,\n            LPTSTR, DWORD )) GetProcAddress( hInstLib,\n            \"GetModuleBaseNameA\" ) ;\n         lpfGetModuleFileName =(DWORD (WINAPI *)(HANDLE, HMODULE,\n            LPTSTR, DWORD )) GetProcAddress( hInstLib,\n            \"GetModuleFileNameExA\" ) ;\n\n         if(lpfEnumProcesses == NULL ||\n            lpfEnumProcessModules == NULL ||\n            lpfGetModuleBaseName == NULL ||\n            lpfGetModuleFileName == NULL)\n            {\n               FreeLibrary(hInstLib);\n               return 700;\n            }\n\t\t \n\t\tbResult=lpfEnumProcesses(aiPID,iCb,&iCbneeded);\n\t\tif(!bResult)\n\t\t{\n\t\t\t// Unable to get process list, EnumProcesses failed\n            FreeLibrary(hInstLib);\n\t\t\treturn 701;\n\t\t}\n\n\t\t// How many processes are there?\n\t\tiNumProc=iCbneeded/sizeof(DWORD);\n\n\t\t// Get and match the name of each process\n\t\tfor(i=0;i<iNumProc;i++)\n\t\t{\n\t\t\t// Get the (module) name for this process\n\n\t        strcpy(szName,\"Unknown\");\n\t\t\t// First, get a handle to the process\n\t        hProc=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,\n\t\t\t\taiPID[i]);\n\t        // Now, get the process name\n\t        if(hProc)\n\t\t\t{\n               if(lpfEnumProcessModules(hProc,&hMod,sizeof(hMod),&iCbneeded) )\n\t\t\t   {\n                  iLen=lpfGetModuleBaseName(hProc,hMod,szName,MAX_PATH);\n\t\t\t   }\n\t\t\t}\n\t\t\t// We will match regardless of lower or upper case\n#ifdef BORLANDC\n            if(strcmp(strupr(szName),szToTermUpper)==0)\n#else\n\t\t\tif(strcmp(_strupr(szName),szToTermUpper)==0)\n#endif\n\t\t\t{\n\t\t\t\t// Process found\n\t\t\t\tiFound = 1;\n                lpfGetModuleFileName(hProc,hMod,sFullPath,MAX_PATH);\n\t\t\t\tFreeLibrary(hInstLib);\n\t\t\t\tCloseHandle(hProc);\n\t\t\t\treturn 0; // just tell you found it.\n\t\t\t}\n\t        CloseHandle(hProc);\n\t\t}\n\t}\n\n\tif(osvi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)\n\t{\n\t\treturn 999; // untested .....\n\n\t\t// Win/95 or 98 or ME\n\t\t\t\n\t\thInstLib = LoadLibraryA(\"Kernel32.DLL\");\n\t\tif( hInstLib == NULL )\n\t\t\treturn 702;\n\n\t\t// Get procedure addresses.\n\t\t// We are linking to these functions of Kernel32\n\t\t// explicitly, because otherwise a module using\n\t\t// this code would fail to load under Windows NT,\n\t\t// which does not have the Toolhelp32\n\t\t// functions in the Kernel 32.\n\t\tlpfCreateToolhelp32Snapshot=\n\t\t\t(HANDLE(WINAPI *)(DWORD,DWORD))\n\t\t\tGetProcAddress( hInstLib,\n\t\t\t\"CreateToolhelp32Snapshot\" ) ;\n\t\tlpfProcess32First=\n\t\t\t(BOOL(WINAPI *)(HANDLE,LPPROCESSENTRY32))\n\t\t\tGetProcAddress( hInstLib, \"Process32First\" ) ;\n\t\tlpfProcess32Next=\n\t\t\t(BOOL(WINAPI *)(HANDLE,LPPROCESSENTRY32))\n\t\t\tGetProcAddress( hInstLib, \"Process32Next\" ) ;\n\t\tlpfModule32First=\n\t\t\t(BOOL(WINAPI *)(HANDLE,LPMODULEENTRY32))\n\t\t\tGetProcAddress( hInstLib, \"Module32First\" ) ;\n\t\tlpfModule32Next=\n\t\t\t(BOOL(WINAPI *)(HANDLE,LPMODULEENTRY32))\n\t\t\tGetProcAddress( hInstLib, \"Module32Next\" ) ;\n\t\tif( lpfProcess32Next == NULL ||\n\t\t\tlpfProcess32First == NULL ||\n\t\t    lpfModule32Next == NULL ||\n\t\t\tlpfModule32First == NULL ||\n\t\t\tlpfCreateToolhelp32Snapshot == NULL )\n\t\t{\n\t\t\tFreeLibrary(hInstLib);\n\t\t\treturn 703;\n\t\t}\n\t\t\t\n\t\t// The Process32.. and Module32.. routines return names in all uppercase\n\n\t\t// Get a handle to a Toolhelp snapshot of all the systems processes.\n\n\t\thSnapShot = lpfCreateToolhelp32Snapshot(\n\t\t\tTH32CS_SNAPPROCESS, 0 ) ;\n\t\tif( hSnapShot == INVALID_HANDLE_VALUE )\n\t\t{\n\t\t\tFreeLibrary(hInstLib);\n\t\t\treturn 704;\n\t\t}\n\t\t\n        // Get the first process' information.\n        procentry.dwSize = sizeof(PROCESSENTRY32);\n        bResult=lpfProcess32First(hSnapShot,&procentry);\n\n        // While there are processes, keep looping and checking.\n        while(bResult)\n        {\n\t\t    // Get a handle to a Toolhelp snapshot of this process.\n\t\t    hSnapShotm = lpfCreateToolhelp32Snapshot(\n\t\t\t    TH32CS_SNAPMODULE, procentry.th32ProcessID) ;\n\t\t    if( hSnapShotm == INVALID_HANDLE_VALUE )\n\t\t\t{\n\t\t\t\tCloseHandle(hSnapShot);\n\t\t\t    FreeLibrary(hInstLib);\n\t\t\t    return 704;\n\t\t\t}\n\t\t\t// Get the module list for this process\n\t\t\tmodentry.dwSize=sizeof(MODULEENTRY32);\n\t\t\tbResultm=lpfModule32First(hSnapShotm,&modentry);\n\n\t\t\t// While there are modules, keep looping and checking\n\t\t\twhile(bResultm)\n\t\t\t{\n\t\t        if(strcmp(modentry.szModule,szToTermUpper)==0)\n\t\t\t\t{\n\t\t\t\t    // Process found, now terminate it\n\t\t\t\t\tstrcpy(sFullPath, szName);\n\t\t\t\t    // process terminated\n\t\t\t\t\tCloseHandle(hSnapShotm);\n\t\t\t\t\tCloseHandle(hSnapShot);\n\t\t\t\t\tFreeLibrary(hInstLib);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{  // Look for next modules for this process\n\t\t\t\t\tmodentry.dwSize=sizeof(MODULEENTRY32);\n\t\t\t\t\tbResultm=lpfModule32Next(hSnapShotm,&modentry);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Keep looking\n\t\t\tCloseHandle(hSnapShotm);\n            procentry.dwSize = sizeof(PROCESSENTRY32);\n            bResult = lpfProcess32Next(hSnapShot,&procentry);\n        }\n\t\tCloseHandle(hSnapShot);\n\n\t}\n\tif(iFound==0)\n\t{\n\t\tFreeLibrary(hInstLib);\n\t\treturn 603;\n\t}\n\tFreeLibrary(hInstLib);\n\treturn 0;\n}\n\n"
  },
  {
    "path": "host/KillProcTree.cpp",
    "content": "#include \"stdafx.h\"\n#include <windows.h>\n#include <tlhelp32.h>\n\nvoid KillProcessTree(DWORD myprocID)\n{\n\tBOOL bRet = TRUE;\n\tPROCESSENTRY32 pe;\n\n\tmemset(&pe, 0, sizeof(PROCESSENTRY32));\n\tpe.dwSize = sizeof(PROCESSENTRY32);\n\n\tHANDLE hSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);\n\n\tif (::Process32First(hSnap, &pe)){\n\t\tdo { // recursion \n\t\t\tif (pe.th32ParentProcessID == myprocID)\n\t\t\t\tKillProcessTree(pe.th32ProcessID);\n\t\t} while(::Process32Next(hSnap, &pe));\n\t}\n\t\t// kill the main process\n\tHANDLE hProc = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, myprocID);\n\tif (hProc){\n\t\t::TerminateProcess(hProc, 1);\n\t\t::CloseHandle(hProc);\n\t}\n}"
  },
  {
    "path": "host/MainFrm.cpp",
    "content": "/*\nDXWnd/dxwnd.cpp\nDirectX Hook Module\nCopyright(C) 2004-2011 SFB7/GHO\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\n// MainFrm.cpp : CMainFrame defines the class behavior.\n//\n\n#include \"stdafx.h\"\n#include \"dxwndhost.h\"\n\n#include \"MainFrm.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n#define MULTIMONITOR TRUE\n\n/////////////////////////////////////////////////////////////////////////////\n// CMainFrame\n\nIMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)\n\nBEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)\n\t//{{AFX_MSG_MAP(CMainFrame)\n\tON_WM_CREATE()\n\tON_WM_MOVE()\n\tON_WM_SIZE()\n\tON_WM_CLOSE()\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CMainFrame class constructor / destructor\nHANDLE GlobalLocker;\n\nCMainFrame::CMainFrame()\n{\n\t// form constructor starts the service thread responsible to mantain a fixed screen settings\n\t// see above ....\n\t// duplicate activation check\n\tGlobalLocker=CreateSemaphore(NULL, 0, 1, \"DxWnd LOCKER\");\n\tif(GlobalLocker==NULL){\n\t\tMessageBoxLang(DXW_STRING_SEMAPHORE, DXW_STRING_WARNING, MB_OK | MB_ICONEXCLAMATION);\n\t\treturn;\n\t}\n\tif(GetLastError()==ERROR_ALREADY_EXISTS){\n\t\tMessageBoxLang(DXW_STRING_DXWRUNNING, DXW_STRING_WARNING, MB_OK | MB_ICONEXCLAMATION);\n\t\texit(1);\n\t}\n}\n\nCMainFrame::~CMainFrame()\n{\n\tchar val[32];\n\n\t// when in icon tray, skip...\n\tif (!cx || !cy) return;\n\n\t// adjust client win coordinates\n\tRECT rect;\n\trect.top = y;\n\trect.bottom = y + cy;\n\trect.left = x;\n\trect.right = x + cx;\n\tAdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, 1);\n\n\tx = rect.left;\n\ty = rect.top;\n\tcx = rect.right - rect.left;\n\tcy = rect.bottom - rect.top;\n\n\t// save window rect\n\tsprintf_s(val, sizeof(val), \"%i\", x);\n\tWritePrivateProfileString(\"window\", \"posx\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", y);\n\tWritePrivateProfileString(\"window\", \"posy\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", cx);\n\tWritePrivateProfileString(\"window\", \"sizx\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", cy);\n\tWritePrivateProfileString(\"window\", \"sizy\", val, gInitPath);\n}\n\nint CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)\n{\n\tif (CFrameWnd::OnCreate(lpCreateStruct) == -1)\n\t\treturn -1;\n\n\treturn 0;\n}\n\nBOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)\n{\n\tchar InitPath[MAX_PATH];\n\tint iMaxX, iMaxY, iMinX, iMinY;\n\tGetCurrentDirectory(MAX_PATH, InitPath);\n\tstrcat_s(InitPath, sizeof(InitPath), \"\\\\dxwnd.ini\");\n\tcs.x = GetPrivateProfileInt(\"window\", \"posx\", 50, InitPath);\n\tcs.y = GetPrivateProfileInt(\"window\", \"posy\", 50, InitPath);\n\tcs.cx = GetPrivateProfileInt(\"window\", \"sizx\", 320, InitPath);\n\tcs.cy = GetPrivateProfileInt(\"window\", \"sizy\", 200, InitPath);\n\n\t// keep window inside desktop boundaries\n#ifdef MULTIMONITOR\n\tiMinX = ::GetSystemMetrics(SM_XVIRTUALSCREEN);\n\tiMinY = ::GetSystemMetrics(SM_YVIRTUALSCREEN);\n\tiMaxX = iMinX + ::GetSystemMetrics(SM_CXVIRTUALSCREEN);\n\tiMaxY = iMinY + ::GetSystemMetrics(SM_CYVIRTUALSCREEN);\n#else\n\tRECT DesktopRect;\n\t::GetWindowRect(::GetDesktopWindow(), &DesktopRect);\n\tiMaxX = DesktopRect.right;\n\tiMaxY = DesktopRect.bottom;\n#endif\n\tif(cs.cx < 320) cs.cx = 320;\n\tif(cs.cy < 200) cs.cy = 200;\n\tif(cs.x < iMinX) cs.x = iMinX;\n\tif(cs.y < iMinY) cs.y = iMinY;\n\tif(cs.x+cs.cx > iMaxX) cs.x = iMaxX - cs.cx;\n\tif(cs.y+cs.cy > iMaxY) cs.y = iMaxY - cs.cy;\n\n\tif( !CFrameWnd::PreCreateWindow(cs) )\n\t\treturn FALSE;\n\treturn TRUE;\n}\n\nvoid CMainFrame::OnMove(int x, int y)\n{\n\tCFrameWnd::OnMove(x, y);\n\tWINDOWPLACEMENT wndpl;\n\twndpl.length = sizeof(wndpl);\n\tthis->GetWindowPlacement(&wndpl);\n\tif(wndpl.showCmd != SW_SHOWNORMAL) return;\n\n\tthis->x=x;\n\tthis->y=y;\n}\n\nvoid CMainFrame::OnSize(UINT nType, int cx, int cy)\n{\n\tCFrameWnd::OnSize(nType, cx, cy);\n\tWINDOWPLACEMENT wndpl;\n\twndpl.length = sizeof(wndpl);\n\tthis->GetWindowPlacement(&wndpl);\n\tif(wndpl.showCmd != SW_SHOWNORMAL) return;\n\tthis->cx=cx;\n\tthis->cy=cy;\n}\n\t\nvoid CMainFrame::OnClose()\n{\n\textern BOOL gTransientMode;\n\textern BOOL gQuietMode;\n\textern BOOL gWarnOnExit;\n\tif(gTransientMode || gQuietMode) CFrameWnd::OnClose();\n\n\t// check for running apps ....\n\tif (GetHookStatus(NULL)==DXW_RUNNING){\n\t\tif (MessageBoxLang(DXW_STRING_EXIT_BUSY, DXW_STRING_WARNING, MB_OKCANCEL | MB_ICONQUESTION)!=IDOK) return;\n\t\tCFrameWnd::OnClose();\n\t}\n\n\tif(gWarnOnExit){\n\tif(MessageBoxLang(DXW_STRING_EXIT_OK, DXW_STRING_WARNING, MB_OKCANCEL)==IDOK) \n\t\tCFrameWnd::OnClose();\n}\n\telse\n\t\tCFrameWnd::OnClose();\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// CMainFrame Diagnostic Class\n\n#ifdef _DEBUG\nvoid CMainFrame::AssertValid() const\n{\n\tCFrameWnd::AssertValid();\n}\n\nvoid CMainFrame::Dump(CDumpContext& dc) const\n{\n\tCFrameWnd::Dump(dc);\n}\n\n#endif //_DEBUG\n\n/////////////////////////////////////////////////////////////////////////////\n// CMainFrame Message Handler\n\n"
  },
  {
    "path": "host/MainFrm.h",
    "content": "// MainFrm.h : CMainFrame class definition and interface declarations.\n//\n/////////////////////////////////////////////////////////////////////////////\n\n#if !defined(AFX_MAINFRM_H__B2E9EA08_683A_47A3_ADA1_C6EE97866607__INCLUDED_)\n#define AFX_MAINFRM_H__B2E9EA08_683A_47A3_ADA1_C6EE97866607__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n\nclass CMainFrame : public CFrameWnd\n{\n\t\nprotected: // Create from serialization only features.\n\tCMainFrame();\n\tDECLARE_DYNCREATE(CMainFrame)\n\n// Attributes\npublic:\n\n// Operation\npublic:\n\n// Override\n\t// ClassWizard Generates a virtual function overrides.\n\t//{{AFX_VIRTUAL(CMainFrame)\n\tvirtual BOOL PreCreateWindow(CREATESTRUCT& cs);\n\t//}}AFX_VIRTUAL\n\n// Implementation\npublic:\n\tvirtual ~CMainFrame();\n\tint x, y, cx, cy;\n#ifdef _DEBUG\n\tvirtual void AssertValid() const;\n\tvirtual void Dump(CDumpContext& dc) const;\n#endif\n\n// Generated message map functions\nprotected:\n\t//{{AFX_MSG(CMainFrame)\n\tafx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);\n\tafx_msg void OnMove(int, int);\n\tafx_msg void OnSize(UINT, int, int);\n\tafx_msg void OnClose(void);\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n};\n\n/////////////////////////////////////////////////////////////////////////////\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ Will insert additional declarations immediately before the previous line.\n\n#endif // !defined(AFX_MAINFRM_H__B2E9EA08_683A_47A3_ADA1_C6EE97866607__INCLUDED_)\n"
  },
  {
    "path": "host/MessageBox.cpp",
    "content": "#include \"stdafx.h\"\n#include <stdio.h>\n#include <stdarg.h>\n\nextern BOOL gQuietMode;\n\nint MessageBoxLang(UINT iText, UINT iCaption, UINT uType)\n{\n\tWCHAR sBuffer[1024+1];\n\tWCHAR sCaption[48+1];\n\n\tif (gQuietMode) return MB_OK;\n\tLoadStringW(AfxGetResourceHandle(), iText, (LPWSTR)&sBuffer, sizeof(sBuffer));\n\tLoadStringW(AfxGetResourceHandle(), iCaption, (LPWSTR)&sCaption, sizeof(sCaption));\n\n\treturn MessageBoxExW(NULL, sBuffer, sCaption, uType, NULL);\n}\n\nint MessageBoxLangArg(UINT iText, UINT iCaption, UINT uType, ...)\n{\n\tva_list al;\n\tWCHAR sBuffer[1024+1];\n\tWCHAR sFormat[1024+1];\n\tWCHAR sCaption[48+1];\n\n\tif (gQuietMode) return MB_OK;\n\tLoadStringW(AfxGetResourceHandle(), iText, (LPWSTR)&sFormat, sizeof(sFormat));\n\tLoadStringW(AfxGetResourceHandle(), iCaption, (LPWSTR)&sCaption, sizeof(sCaption));\n\n\tva_start(al, uType);\n\tvswprintf(sBuffer, 1024, sFormat, al);\n\tva_end(al);\n\n\treturn MessageBoxExW(NULL, sBuffer, sCaption, uType, NULL);\n}\n\n"
  },
  {
    "path": "host/OutTrace.cpp",
    "content": "#include \"stdafx.h\"\n\n#define DXWMAXLOGSIZE 4096\n\nvoid OutTrace(const char *format, ...)\n{\n\tva_list al;\n\tstatic char path[MAX_PATH];\n\tstatic FILE *fp=NULL; // GHO: thread safe???\n\tchar sBuf[DXWMAXLOGSIZE+1];\n\textern BOOL gbDebug;\n\n\tif (!gbDebug) return;\n\tif (fp == NULL) fp = fopen(\".\\\\dxwnd.log\", \"w+\");\n\n\tva_start(al, format);\n\tvsprintf_s(sBuf, DXWMAXLOGSIZE, format, al);\n\tsBuf[DXWMAXLOGSIZE]=0; // just in case of log truncation\n\tva_end(al);\n\tfputs(sBuf, fp);\n\tfflush(fp); \n}\n"
  },
  {
    "path": "host/PaletteDialog.cpp",
    "content": "// StatusDialog.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"dxwndhost.h\"\n#include \"PaletteDialog.h\"\n#include \"bmpext.h\"\n\n// CPaletteDialog dialog\n\nIMPLEMENT_DYNAMIC(CPaletteDialog, CDialog)\n\nCPaletteDialog::CPaletteDialog(CWnd* pParent /*=NULL*/)\n\t: CDialog(CPaletteDialog::IDD, pParent)\n{\n}\n\nCPaletteDialog::~CPaletteDialog()\n{\n}\n\nvoid CPaletteDialog::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n}\n\n\nBEGIN_MESSAGE_MAP(CPaletteDialog, CDialog)\n\tON_WM_TIMER()\nEND_MESSAGE_MAP()\n\n#define IDPaletteTIMER 2\n\n// CPaletteDialog message handlers\n\nCDib dib;\nCWnd *myWin;\n\nvoid CPaletteDialog::OnTimer(UINT_PTR nIDEvent)\n{\n\tDXWNDSTATUS DxWndStatus;\n\tint DxStatus;\n\t//extern PRIVATEMAP *pTitles; \n\textern TARGETMAP *pTargets;\n\tRECT Rect;\n\tint h, w;\n\tstatic BOOL PaletteUpdated = FALSE;\n\n\tDxStatus=GetHookStatus(&DxWndStatus);\n\tmyWin->GetClientRect(&Rect);\n\th=Rect.bottom - Rect.top;\n\tw=Rect.right - Rect.left;\n\tif((h==0) || (w==0)) return;\n\n\tif(DxStatus==DXW_RUNNING){\n\t\tfor(int row=0; row<16; row++){\n\t\t\tfor(int col=0; col<16; col++){\n\t\t\t\tPALETTEENTRY *pe = &DxWndStatus.Palette[16*row+col];\n\t\t\t\tRGBQUAD rgbq;\n\t\t\t\trgbq.rgbBlue=pe->peBlue;\n\t\t\t\trgbq.rgbGreen=pe->peGreen;\n\t\t\t\trgbq.rgbRed=pe->peRed;\n\t\t\t\trgbq.rgbReserved=0;\n\t\t\t\tdib.SetPixel(col, row, rgbq);\n\t\t\t}\n\t\t}\n\t\tPaletteUpdated = TRUE;\n\t}\n\telse{\n\t\tif (PaletteUpdated) dib.ReadFromResource(IDB_PALETTE);\n\t\tPaletteUpdated = FALSE;\n\t}\n\n\tCDC *dc;\n\tdc=this->GetDC();\n\tif(dc) dib.Draw(dc, CRect(0, 0, w, h), CRect(0, 0, 16, 16));\n\tthis->ReleaseDC(dc);\n}\n\nBOOL CPaletteDialog::OnInitDialog()\n{\n\tCDC *myDC;\n\tCDialog::OnInitDialog();\n\tif((myDC=this->GetDC())==NULL) return FALSE;\n\tif((myWin=myDC->GetWindow())==NULL) return FALSE;\n\tdib.ReadFromResource(IDB_PALETTE);\n\tSetTimer(IDPaletteTIMER, 200, NULL);\n\treturn TRUE;  // return TRUE unless you set the focus to a control\n\t// EXCEPTION: OCX Property Pages should return FALSE\n}\n\nvoid CPaletteDialog::OnOK()\n{\n\t// TODO: Add your specialized code here and/or call the base class\n\t// stop timer\n\tKillTimer(IDPaletteTIMER);\n\t// delete(dib);\n\tCDialog::OnOK();\n}\n"
  },
  {
    "path": "host/PaletteDialog.h",
    "content": "#pragma once\n\n\n// CPaletteDialog dialog\n\nclass CPaletteDialog : public CDialog\n{\n\tDECLARE_DYNAMIC(CPaletteDialog)\n\npublic:\n\tCPaletteDialog(CWnd* pParent = NULL);   // standard constructor\n\tvirtual ~CPaletteDialog();\n\n// Dialog Data\n\tenum { IDD = IDD_PALETTE };\n\nprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\n\tDECLARE_MESSAGE_MAP()\npublic:\n\tafx_msg void OnTimer(UINT_PTR nIDEvent);\npublic:\n\tvirtual BOOL OnInitDialog();\nprotected:\n\tvirtual void OnOK();\n};\n"
  },
  {
    "path": "host/ShimsDialog.cpp",
    "content": "// ShimsDialog.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"dxwndhost.h\"\n#include \"ShimsDialog.h\"\n\n// http://msdn2.microsoft.com/en-us/library/bb432457\n// HSDB WINAPI SdbOpenDatabase(\n//  LPCTSTR pwszPath,\n//  PATH_TYPE eType\n//);\n\n// What is HSDB!? Assuming it is a pointer to somewhere => \"void*\"\ntypedef void* HSDB;\n\n// http://msdn2.microsoft.com/en-us/library/bb432389.aspx\ntypedef enum _PATH_TYPE\n{\n  DOS_PATH,\n  NT_PATH\n}PATH_TYPE;\n\n// http://msdn2.microsoft.com/en-us/library/bb432488\ntypedef DWORD TAGID;\n#define TAGID_NULL (0)\n#define TAGID_ROOT (0)\n\n// TAG !?\ntypedef DWORD TAG;\n\n// http://msdn2.microsoft.com/en-us/library/bb432489\ntypedef DWORD TAGREF;\n#define TAGREF_NULL (0)\n#define TAGREF_ROOT (0)\n\n// http://msdn2.microsoft.com/en-us/library/bb432490\n// TAG-Types:\n#define TAG_TYPE_NULL 0x1000\n#define TAG_TYPE_BYTE 0x2000\n#define TAG_TYPE_WORD 0x3000\n#define TAG_TYPE_DWORD 0x4000\n#define TAG_TYPE_QWORD 0x5000\n#define TAG_TYPE_STRINGREF 0x6000\n#define TAG_TYPE_LIST 0x7000\n#define TAG_TYPE_STRING 0x8000\n#define TAG_TYPE_BINARY 0x9000\n\n// It seems that this type is \"masked\"\n#define TAG_TYPE_MASK 0xF000\n\n// http://msdn2.microsoft.com/en-us/library/bb432487\n#define TAG_APP_NAME_RC_ID (0x24 | TAG_TYPE_DWORD)\n#define TAG_VENDOR_NAME_RC_ID (0x25 | TAG_TYPE_DWORD)\n#define TAG_SUMMARY_MSG_RC_ID (0x26 | TAG_TYPE_DWORD)\n#define TAG_DESCRIPTION_RC_ID (0x28 | TAG_TYPE_DWORD)\n#define TAG_PARAMETER1_RC_ID (0x29 | TAG_TYPE_DWORD)\n\n#define TAG_EXE_ID (0x4 | TAG_TYPE_BINARY)\n#define TAG_DATABASE_ID (0x7 | TAG_TYPE_BINARY)\n#define TAG_FIX_ID (0x10 | TAG_TYPE_BINARY)\n#define TAG_APP_ID (0x11 | TAG_TYPE_BINARY)\n#define CONTEXT_PLATFORM_ID (0x8 | TAG_TYPE_BINARY)\n\n#define HID_DOS_PATHS\t\t\t\t0x00000001\n#define HID_DATABASE_FULLPATH\t\t0x00000002\n#define HID_NO_DATABASE\t\t\t\t0x00000004\n#define HID_DATABASE_TYPE_MASK\t\t0xF00F0000\n\n#define SDB_DATABASE_MAIN_SHIM\t\t0x80030000\n#define SDB_DATABASE_MAIN_MSI\t\t0x80020000\n#define SDB_DATABASE_MAIN_DRIVERS\t0x80040000\n\ntypedef struct TAG_RC_Entry\n{\n  DWORD tag;\n  LPCWSTR szName;\n} TAG_RC_Entry;\n\n// The following tags returns an reference to an resource... (Vista and later)\nstatic TAG_RC_Entry s_TagRcEntries[] =\n{\n  {TAG_APP_NAME_RC_ID, L\"APP_NAME_RC_ID\"},\n  {TAG_VENDOR_NAME_RC_ID, L\"VENDOR_NAME_RC_ID\"},\n  {TAG_SUMMARY_MSG_RC_ID, L\"SUMMARY_MSG_RC_ID\"},\n  {TAG_DESCRIPTION_RC_ID, L\"DESCRIPTION_RC_ID\"},  // at least for this one, MS forgot to add the mapping from TAG to name (SdbTagToString)\n  {TAG_PARAMETER1_RC_ID, L\"PARAMETER1_RC_ID\"},\n};\n\n// The following Tags could be displayed as GUIDs (if the len is 0x10)\nstatic DWORD s_TagGuids[] = \n{\n  TAG_EXE_ID,\n  TAG_DATABASE_ID,\n  TAG_FIX_ID,\n  TAG_APP_ID,\n  CONTEXT_PLATFORM_ID,\n};\n\n// APIs:\n\n// http://msdn.microsoft.com/en-us/library/bb432457.aspx\n//HSDB WINAPI SdbOpenDatabase(\n//  __in  LPCTSTR pwszPath,\n//  __in  PATH_TYPE eType\n//);\ntypedef HSDB (WINAPI *PSdbOpenDatabase)(\n  LPCTSTR pwszPath, // Docu wrong? LPCTSTR shouldn't it be LPCWSTR!?\n  PATH_TYPE eType\n);\nPSdbOpenDatabase pSdbOpenDatabase = NULL;\n\n// http://msdn.microsoft.com/en-us/library/bb432452.aspx\n//HSDB WINAPI SdbInitDatabase(\n//\t__in DWORD\tdwFlags,\n//  __in LPCTSTR pszDatabasePath\n//);\ntypedef HSDB (WINAPI *PSdbInitDatabase)(\n  DWORD dwFlags,\n  LPCTSTR pszDatabasePath \n);\nPSdbInitDatabase pSdbInitDatabase = NULL;\n\n// http://msdn.microsoft.com/en-us/library/cc895520\n//void WINAPI SdbCloseDatabase(\n//  __inout  HSDB pdb\n//);\ntypedef VOID (WINAPI *PSdbCloseDatabase)(\n  HSDB handle  // assuming the passed handle...\n);\nPSdbCloseDatabase pSdbCloseDatabase = NULL;\n\n// http://msdn2.microsoft.com/en-us/library/bb432446\n//TAGID WINAPI SdbGetFirstChild(\n//  HSDB pdb,\n//  TAGID tiParent\n//);\ntypedef TAGID (WINAPI *PSdbGetFirstChild)(\n  HSDB pdb,\n  TAGID tiParent\n);\nPSdbGetFirstChild pSdbGetFirstChild = NULL;\n\n// http://msdn2.microsoft.com/en-us/library/bb432449\n//TAGID WINAPI SdbGetNextChild(\n//  HSDB pdb,\n//  TAGID tiParent,\n//  TAGID tiPrev\n//);\ntypedef TAGID (WINAPI *PSdbGetNextChild)(\n  HSDB pdb,\n  TAGID tiParent,\n  TAGID tiPrev\n);\nPSdbGetNextChild pSdbGetNextChild = NULL;\n\n// http://msdn2.microsoft.com/en-us/library/bb432451\n//TAG WINAPI SdbGetTagFromTagID(\n//  HSDB pdb,\n//  TAGID tiWhich\n//);\ntypedef TAG (WINAPI *PSdbGetTagFromTagID)(\n  HSDB pdb,\n  TAGID tiWhich\n);\nPSdbGetTagFromTagID pSdbGetTagFromTagID = NULL;\n\n// http://msdn2.microsoft.com/en-us/library/bb432470\n//LPCTSTR WINAPI SdbTagToString(\n//  TAG tag\n//);\ntypedef LPCWSTR (WINAPI *PSdbTagToString)( // LPCTSTR => LPCWSTR !?\n  TAG tag\n);\nPSdbTagToString pSdbTagToString = NULL;\n\n// http://msdn2.microsoft.com/en-us/library/bb432464\n//BOOL WINAPI SdbReadStringTag(\n//  HSDB pdb,\n//  TAGID tiWhich,\n//  LPTSTR pwszBuffer,\n//  DWORD cchBufferSize\n//);\ntypedef BOOL (WINAPI *PSdbReadStringTag)(\n  HSDB pdb,\n  TAGID tiWhich,\n  LPTSTR pwszBuffer,\n  DWORD cchBufferSize\n);\nPSdbReadStringTag pSdbReadStringTag = NULL;\n\n// http://msdn2.microsoft.com/en-us/library/bb432450.aspx\n//LPWSTR WINAPI SdbGetStringTagPtr(\n//  HSDB pdb,\n//  TAGID tiWhich\n//);\ntypedef LPWSTR (WINAPI *PSdbGetStringTagPtr)(\n  HSDB pdb,\n  TAGID tiWhich\n);\nPSdbGetStringTagPtr pSdbGetStringTagPtr = NULL;\n\n// http://msdn2.microsoft.com/en-us/library/bb432462.aspx\n//DWORD WINAPI SdbReadDWORDTag(\n//  HSDB pdb,\n//  TAGID tiWhich,\n//  DWORD dwDefault\n//);\ntypedef DWORD (WINAPI *PSdbReadDWORDTag)(\n  HSDB pdb,\n  TAGID tiWhich,\n  DWORD dwDefault\n);\nPSdbReadDWORDTag pSdbReadDWORDTag = NULL;\n\n// http://msdn2.microsoft.com/en-us/library/bb432463.aspx\n//ULONGLONG WINAPI SdbReadQWORDTag(\n//  HSDB pdb,\n//  TAGID tiWhich,\n//  ULONGLONG qwDefault\n//);\ntypedef ULONGLONG (WINAPI *PSdbReadQWORDTag)(\n  HSDB pdb,\n  TAGID tiWhich,\n  ULONGLONG qwDefault\n);\nPSdbReadQWORDTag pSdbReadQWORDTag = NULL;\n\n// http://msdn2.microsoft.com/en-us/library/bb432455\n//HSDB WINAPI SdbOpenApphelpDetailsDatabase(\n//  LPCWSTR pwsDetailsDatabasePath\n//);\ntypedef HSDB (WINAPI *PSdbOpenApphelpDetailsDatabase)(\n  LPCWSTR pwsDetailsDatabasePath\n);\nPSdbOpenApphelpDetailsDatabase pSdbOpenApphelpDetailsDatabase = NULL;\n\n// http://msdn2.microsoft.com/en-us/library/bb432456\n//HMODULE WINAPI SdbOpenApphelpResourceFile(\n//  LPCWSTR pwszACResourceFile\n//);\ntypedef HMODULE (WINAPI *PSdbOpenApphelpResourceFile)(\n  LPCWSTR pwszACResourceFile\n);\nPSdbOpenApphelpResourceFile pSdbOpenApphelpResourceFile = NULL;\n\n// http://msdn.microsoft.com/en-us/library/bb432443\n//PVOID WINAPI SdbGetBinaryTagData(\n//  __in  HSDB pdb,\n//  __in  TAGID tiWhich\n//);\ntypedef PVOID (WINAPI *PSdbGetBinaryTagData)(\n  HSDB pdb,\n  TAGID tiWhich\n);\nPSdbGetBinaryTagData pSdbGetBinaryTagData = NULL;\n\n// ???\n//DWORD WINAPI SdbGetTagDataSize(\n//  __in  HSDB pdb,\n//  __in  TAGID tiWhich\n//);\ntypedef DWORD (WINAPI *PSdbGetTagDataSize)(\n  HSDB pdb,\n  TAGID tiWhich\n);\nPSdbGetTagDataSize pSdbGetTagDataSize = NULL;\n\n// http://msdn.microsoft.com/en-us/library/bb432459\n#define SDB_MAX_EXES 16\n#define SDB_MAX_LAYERS 8\n#define SDB_MAX_SDBS 16\ntypedef struct tagSDBQUERYRESULT {\n  TAGREF atrExes[SDB_MAX_EXES];\n  DWORD  adwExeFlags[SDB_MAX_EXES];\n  TAGREF atrLayers[SDB_MAX_LAYERS];\n  DWORD  dwLayerFlags;\n  TAGREF trApphelp;\n  DWORD  dwExeCount;\n  DWORD  dwLayerCount;\n  GUID   guidID;\n  DWORD  dwFlags;\n  DWORD  dwCustomSDBMap;\n  GUID   rgGuidDB[SDB_MAX_SDBS];\n} SDBQUERYRESULT, *PSDBQUERYRESULT;\n\n// http://msdn.microsoft.com/en-us/library/bb432448\ntypedef BOOL (WINAPI *PSdbGetMatchingExe)(\n  HSDB hSDB,\n  LPCWSTR szPath,\n  LPCWSTR szModuleName,\n  LPCWSTR pszEnvironment,\n  DWORD dwFlags,\n  PSDBQUERYRESULT pQueryResult\n);\nPSdbGetMatchingExe pSdbGetMatchingExe = NULL;\n\n#define SDBGMEF_IGNORE_ENVIRONMENT 1\n\n#define SHIMREG_DISABLE_SHIM 0x1\n#define SHIMREG_DISABLE_APPHELP 0x2\n#define SHIMREG_APPHELP_NOUI 0x4\n#define SHIMREG_APPHELP_CANCEL 0x10000000\n#define SHIMREG_DISABLE_SXS 0x10\n#define SHIMREG_DISABLE_LAYER 0x20\n#define SHIMREG_DISABLE_DRIVER 0x40\n\ntypedef void (WINAPI* PSdbReleaseMatchingExe)(\n  HSDB hSDB,\n  TAGREF trExe\n);\nPSdbReleaseMatchingExe pSdbReleaseMatchingExe = NULL;\n\n\n\n// CShimsDialog dialog\n\nIMPLEMENT_DYNAMIC(CShimsDialog, CDialog)\n\nCShimsDialog::CShimsDialog(CWnd* pParent /*=NULL*/, char *path)\n\t: CDialog(CShimsDialog::IDD, pParent)\n{\n\t//ExePath = (LPWSTR)malloc((strlen(path)+1)*sizeof(WCHAR));\n\t//MultiByteToWideChar(CP_ACP, 0, path, -1, ExePath, strlen(path));\n\tExePath = path;\n\t\n}\n\nCShimsDialog::~CShimsDialog()\n{\n\tfree(ExePath);\n\tExePath=NULL;\n}\n\nvoid CShimsDialog::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n}\n\n\nBEGIN_MESSAGE_MAP(CShimsDialog, CDialog)\nEND_MESSAGE_MAP()\n\n#define IDStatusTIMER 1\n\n// CShimsDialog message handlers\n\nBOOL CShimsDialog::OnInitDialog()\n{\n\tCDialog::OnInitDialog();\n\tchar *MatchExe(char *);\n\tthis->SetDlgItemText(IDC_STATUSINFO, MatchExe(ExePath));\t\n\treturn TRUE;  // return TRUE unless you set the focus to a control\n}\n\nvoid CShimsDialog::OnOK()\n{\n\tCDialog::OnOK();\n} \n\nvoid Flags2String(DWORD dwFlags, char *szFlags, size_t flagsLen)\n{\n\tszFlags[0] = 0;\n\tif (dwFlags & SHIMREG_DISABLE_SHIM)\t\tstrcat_s(szFlags, flagsLen, \"Disable-Shim,\");\n\tif (dwFlags & SHIMREG_DISABLE_APPHELP)\tstrcat_s(szFlags, flagsLen, \"Disable-Apphelp,\");\n\tif (dwFlags & SHIMREG_APPHELP_NOUI)\t\tstrcat_s(szFlags, flagsLen, \"Apphelp-NoUI,\");\n\tif (dwFlags & SHIMREG_APPHELP_CANCEL)\tstrcat_s(szFlags, flagsLen, \"Apphelp-Cancel,\");\n\tif (dwFlags & SHIMREG_DISABLE_SXS)\t\tstrcat_s(szFlags, flagsLen, \"Disable-SxS,\");\n\tif (dwFlags & SHIMREG_DISABLE_LAYER)\tstrcat_s(szFlags, flagsLen, \"Disable-Layer,\");\n\tif (dwFlags & SHIMREG_DISABLE_DRIVER)\tstrcat_s(szFlags, flagsLen, \"Disable-Driver,\");\n\n\tif (szFlags[strlen(szFlags)-1]==',') szFlags[strlen(szFlags)-1]=0; \n}\n\nchar * MatchExe(char *FileName)\n{\n\tSDBQUERYRESULT result;\n\tstatic char sBuf[10000];\n\tLPWSTR szFileName = (LPWSTR)malloc((strlen(FileName)+1)*sizeof(WCHAR));\n\tMultiByteToWideChar(CP_ACP, 0, FileName, -1, szFileName, strlen(FileName));\n\tBOOL bRet;\n\tHSDB hSDB;\n\n\tHINSTANCE hAppHelp = LoadLibrary(_T(\"apphelp.dll\"));\n\tif(!hAppHelp){\n\t\tsprintf(sBuf, \"error %d loading apphelp.dll\\n\", GetLastError());\n\t\treturn sBuf;\n\t}\n\n\tpSdbOpenDatabase = (PSdbOpenDatabase) GetProcAddress(hAppHelp, \"SdbOpenDatabase\");\n\tpSdbInitDatabase = (PSdbInitDatabase) GetProcAddress(hAppHelp, \"SdbInitDatabase\");\n\tpSdbCloseDatabase = (PSdbCloseDatabase) GetProcAddress(hAppHelp, \"SdbCloseDatabase\");\n\tpSdbGetFirstChild = (PSdbGetFirstChild) GetProcAddress(hAppHelp, \"SdbGetFirstChild\");\n\tpSdbGetNextChild = (PSdbGetNextChild) GetProcAddress(hAppHelp, \"SdbGetNextChild\");\n\tpSdbGetTagFromTagID = (PSdbGetTagFromTagID) GetProcAddress(hAppHelp, \"SdbGetTagFromTagID\");\n\tpSdbTagToString = (PSdbTagToString) GetProcAddress(hAppHelp, \"SdbTagToString\");\n\tpSdbGetStringTagPtr = (PSdbGetStringTagPtr) GetProcAddress(hAppHelp, \"SdbGetStringTagPtr\");\n\t//pSdbReadStringTag = (PSdbReadStringTag) GetProcAddress(hAppHelp, \"SdbReadStringTag\");\n\tpSdbReadDWORDTag = (PSdbReadDWORDTag) GetProcAddress(hAppHelp, \"SdbReadDWORDTag\");\n\tpSdbReadQWORDTag = (PSdbReadQWORDTag) GetProcAddress(hAppHelp, \"SdbReadQWORDTag\");\n\t//pSdbOpenApphelpDetailsDatabase = (PSdbOpenApphelpDetailsDatabase) GetProcAddress(hAppHelp, \"SdbOpenApphelpDetailsDatabase\");\n\tpSdbOpenApphelpResourceFile = (PSdbOpenApphelpResourceFile) GetProcAddress(hAppHelp, \"SdbOpenApphelpResourceFile\");\n\n\tpSdbGetBinaryTagData = (PSdbGetBinaryTagData) GetProcAddress(hAppHelp, \"SdbGetBinaryTagData\");\n\tpSdbGetTagDataSize = (PSdbGetTagDataSize) GetProcAddress(hAppHelp, \"SdbGetTagDataSize\");\n\tpSdbGetMatchingExe = (PSdbGetMatchingExe) GetProcAddress(hAppHelp, \"SdbGetMatchingExe\");\n\tpSdbReleaseMatchingExe = (PSdbReleaseMatchingExe) GetProcAddress(hAppHelp, \"SdbReleaseMatchingExe\");\n\n\tif(pSdbGetMatchingExe == NULL){\n\t\t// rough protection: we assume that if this is found, then all fpointers are there.\n\t\tsprintf(sBuf, \"Unsupported Shim DB\\n\", FileName);\n\t\tFreeLibrary(hAppHelp);\n\t\treturn sBuf;\n\t}\n\n\t//hSDB = pSdbInitDatabase(HID_DATABASE_TYPE_MASK|SDB_DATABASE_MAIN_SHIM, NULL);\n\thSDB = pSdbInitDatabase(SDB_DATABASE_MAIN_SHIM, NULL);\n\tif(!hSDB){\n\t\tsprintf(sBuf, \"Can't initialize shims database\\n\");\n\t\treturn (sBuf);\n\t}\n\n\tbRet = pSdbGetMatchingExe(NULL, (LPCWSTR)szFileName, NULL, NULL, 0, &result);\n\tif(!bRet){\n\t\tsprintf(sBuf, \"No Shim found for file: %s\\n\", FileName);\n\t\tFreeLibrary(hAppHelp);\n\t\treturn (sBuf);\n\t}\n\n\tsprintf(sBuf, \"Shim found for file: %s\\n\", FileName);\n\tconst size_t flagsLen = 1024;\n\tchar szFlagsStr[flagsLen];\n\tFlags2String(result.dwFlags, szFlagsStr, flagsLen);\n\tsprintf(sBuf, \"%sFlags: 0x%x: %s\\n\", sBuf, result.dwFlags, szFlagsStr);\n\n\tif (result.trApphelp != TAGREF_NULL) sprintf(sBuf, \"%sAppHelp-Message: 0x%x\\n\", sBuf, result.trApphelp);\n\n\tfor(DWORD i=0; i<result.dwExeCount; i++){\n\t\tsprintf(sBuf, \"%sExe-Shim: 0x%x, \", sBuf, result.atrExes[i]);\n\t\tFlags2String(result.adwExeFlags[i], szFlagsStr, flagsLen);\n\t\tsprintf(sBuf, \"%sFlags: 0x%x: %s\\n\", sBuf, result.adwExeFlags[i], szFlagsStr);\n\t}\n\n\tfor(DWORD i=0; i<result.dwLayerCount; i++){\n\t\tsprintf(sBuf, \"%sLayer-Shim: 0x%x\\n\", sBuf, result.atrLayers[i]);\n\t}\n\n\tFlags2String(result.dwLayerFlags, szFlagsStr, flagsLen);\n\tsprintf(sBuf, \"%sLayer-Flags: 0x%x: %s\\n\", sBuf, result.dwLayerFlags, szFlagsStr);\n\n\tsprintf(sBuf, \"%sCustomSDBMap: 0x%x\\n\", sBuf, result.dwCustomSDBMap);\n\tfor(DWORD i=0; i<SDB_MAX_SDBS; i++){\n\t\tif (result.rgGuidDB[i] != GUID_NULL){\n\t\t\tsprintf(sBuf, \"%sShim-Database: %8.8X-%4.4X-%4.4X-%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X%2.2X\\n\", \n\t\t\tsBuf,\n\t\t\tresult.rgGuidDB[i].Data1,\n\t\t\tresult.rgGuidDB[i].Data2,\n\t\t\tresult.rgGuidDB[i].Data3,\n\t\t\tresult.rgGuidDB[i].Data4[0],\n\t\t\tresult.rgGuidDB[i].Data4[1],\n\t\t\tresult.rgGuidDB[i].Data4[2],\n\t\t\tresult.rgGuidDB[i].Data4[3],\n\t\t\tresult.rgGuidDB[i].Data4[4],\n\t\t\tresult.rgGuidDB[i].Data4[5],\n\t\t\tresult.rgGuidDB[i].Data4[6],\n\t\t\tresult.rgGuidDB[i].Data4[7]\n\t\t\t);\n\t\t}\n\t}\n\n\tpSdbReleaseMatchingExe(hSDB, (TAGREF)&result);\n\tFreeLibrary(hAppHelp);\n\treturn sBuf;\n}\n\n"
  },
  {
    "path": "host/ShimsDialog.h",
    "content": "#pragma once\n\n\n// CShimsDialog dialog\n\nclass CShimsDialog : public CDialog\n{\n\tDECLARE_DYNAMIC(CShimsDialog)\n\npublic:\n\tCShimsDialog(CWnd* pParent = NULL, char *path = NULL);   // standard constructor\n\tvirtual ~CShimsDialog();\n\n// Dialog Data\n\tenum { IDD = IDD_SHIMS };\n\tint iTimeSlider;\n\nprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\tDECLARE_MESSAGE_MAP()\npublic:\n\tvirtual BOOL OnInitDialog();\nprotected:\n\tvirtual void OnOK();\nprivate:\n\tchar *ExePath;\n};\n"
  },
  {
    "path": "host/SpecialEdit.cpp",
    "content": "#include \"stdafx.h\"\n#include \"SpecialEdit.h\"\n\n#include <afxole.h>\n#include <vector>\n#include <algorithm>\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\nBaseFormat::BaseFormat()\n{\n}\n\nBaseFormat::~BaseFormat()\n{\n}\n\nvoid BaseFormat::SetAllowedChars(std::vector<TCHAR> chars)\n{\n\tm_listChars = chars;\n}\n\nvoid BaseFormat::SetAllowedChars(LPCTSTR chars, int size)\n{\n\tm_listChars.erase(m_listChars.begin(), m_listChars.end());\n\tm_listChars.reserve(size);\n\tm_listChars.assign(chars, chars+size);\n}\n\nRelIntegerFormat::RelIntegerFormat()\n{\n\tLPCTSTR format = _T(\"-+0123456789\");\n\tSetAllowedChars(format, _tcslen(format));\t\n}\n\nRelIntegerFormat::~RelIntegerFormat()\n{\n}\n\nbool BaseFormat::IsCharAllowed(TCHAR nChar)\n{\n\tstd::vector<TCHAR>::iterator pos = std::find(m_listChars.begin(), m_listChars.end(), nChar);\n\treturn (pos != m_listChars.end());\t\n}\n\nCSpecialEdit::CSpecialEdit()\n{\n\tm_formatter = NULL;\n}\n\nCSpecialEdit::~CSpecialEdit()\n{\n}\n\nBEGIN_MESSAGE_MAP(CSpecialEdit, CEdit)\n\t//{{AFX_MSG_MAP(CSpecialEdit)\n\tON_WM_CHAR()\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CSpecialEdit message handlers\n\nvoid CSpecialEdit::SetFormatter(IFormat *formatter)\n{\n\tASSERT(formatter != NULL);\n\tm_formatter = formatter;\n}\n\nbool CSpecialEdit::IsCharAllowed(TCHAR nChar)\n{\n\tswitch(nChar){\n\t\tcase _T('\\b'):\n\t\tcase 10:\n\t\tcase 13:\n\t\t\treturn true;\n\t}\n\n\tASSERT(m_formatter != NULL);\t\n\treturn m_formatter->IsCharAllowed(nChar);\n}\n\nbool CSpecialEdit::IsClipboardOK()\n{\n\tbool isOK = true;\n\tCOleDataObject\tobj;\n\n\tif (obj.AttachClipboard()) {\n\t\tHGLOBAL hmem = NULL;\n\t\tTCHAR *pUniText = NULL;\n\t\tDWORD dwLen = 0;\n\t\tbool bText = false;\n\n\t\tif (obj.IsDataAvailable(CF_TEXT)){\n\t\t\thmem = obj.GetGlobalData(CF_TEXT);\n\t\t\t\n\t\t\tchar *pCharText = (char*)::GlobalLock(hmem);\n#ifdef UNICODE\n\t\t\tint lenA = strlen(pCharText);\n\t\t\tint lenW = MultiByteToWideChar(CP_ACP, 0, pCharText, lenA, 0, 0);\n\t\t\tif (lenW > 0){\n\t\t\t\tpUniText = ::SysAllocStringLen(0, lenW);\n\t\t\t\tMultiByteToWideChar(CP_ACP, 0, pCharText, lenA, pUniText, lenW);\n\t\t\t\tbText = true;\n\t\t\t}\n\t\t\telse{\n\t\t\t\t::GlobalUnlock(hmem);\n\t\t\t\treturn false;\n\t\t\t}\n#else\n\t\t\tpUniText = pCharText;\n#endif\n\t\t}\n#ifdef UNICODE\n\t\telse if(obj.IsDataAvailable(CF_UNICODETEXT)){\n\t\t\thmem = obj.GetGlobalData(CF_UNICODETEXT);\n\t\t\tpUniText = (TCHAR*)::GlobalLock(hmem);\n\t\t}\n#endif\n\t\tif(hmem){\t\n\t\t\tDWORD\tdwLen = _tcslen(pUniText);\n\t\t\tfor(DWORD i=0; i<dwLen && isOK; i++)\n\t\t\t\tisOK = IsCharAllowed(pUniText[i]);\n\t\t\t::GlobalUnlock(hmem);\n#ifdef UNICODE\n\t\t\tif(bText)\n\t\t\t\t::SysFreeString(pUniText);\n#endif\n\t\t}\n\t\telse\n\t\t\treturn false;\n\t}\n\treturn isOK;\n}\n\nLRESULT CSpecialEdit::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) \n{\n\tswitch(message){\n\t\tcase WM_PASTE:\n\t\t\tif(!IsClipboardOK()){\n\t\t\t\tMessageBeep(-1);\n\t\t\t\treturn 0;\n\t\t\t}\n\t}\n\t\n\treturn CEdit::WindowProc(message, wParam, lParam);\n}\n\nvoid CSpecialEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) \n{\n\tif(GetKeyState(VK_CONTROL) & 0x80000000){\n\t\tswitch(nChar){\n\t\t\tcase 0x03:\n\t\t\t\tCopy();\n\t\t\t\treturn;\n\t\t\tcase 0x16:\n\t\t\t\tPaste();\n\t\t\t\treturn;\n\t\t\tcase 0x18:\n\t\t\t\tCut();\n\t\t\t\treturn;\n\t\t\tcase 0x1a:\n\t\t\t\tUndo();\n\t\t\t\treturn;\n\t\t}\n\t}\n\t\n\tif(!IsCharAllowed(nChar)){\n\t\tMessageBeep(-1);\n\t\treturn;\n\t}\n\t\n\tCEdit::OnChar(nChar, nRepCnt, nFlags);\n}\n\nIFormat::~IFormat()\n{\n}"
  },
  {
    "path": "host/SpecialEdit.h",
    "content": "#pragma once\n#include <vector>\n\nclass IFormat  \n{\npublic:\n\tvirtual ~IFormat();\n\tvirtual bool IsCharAllowed(TCHAR nChar) = 0;\n};\n\nclass BaseFormat : public IFormat  \n{\nprotected:\n\tstd::vector<TCHAR>\tm_listChars;\n\tBaseFormat();\n\tvirtual ~BaseFormat();\npublic:\n\tvoid SetAllowedChars(std::vector<TCHAR> chars);\n\tvoid SetAllowedChars(LPCTSTR chars, int size);\n\tvirtual bool IsCharAllowed(TCHAR nChar);\n};\n\nclass RelIntegerFormat : public BaseFormat  \n{\npublic:\n\tRelIntegerFormat();\n\tvirtual ~RelIntegerFormat();\n};\n\nclass CSpecialEdit : public CEdit\n{\n\tIFormat\t*m_formatter;\n\tbool IsClipboardOK();\n\tbool IsCharAllowed(TCHAR nChar);\n\npublic:\n\tCSpecialEdit();\n\tvirtual ~CSpecialEdit();\n\tvoid SetFormatter(IFormat *formatter);\n\t\nprotected:\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CSpecialEdit)\n\tvirtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);\n\t//}}AFX_VIRTUAL\n\n\t//{{AFX_MSG(CSpecialEdit)\n\tafx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);\n\t//}}AFX_MSG\n\n\tDECLARE_MESSAGE_MAP()\n};\n"
  },
  {
    "path": "host/StatusDialog.cpp",
    "content": "// StatusDialog.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"dxwndhost.h\"\n#include \"StatusDialog.h\"\n\n// CStatusDialog dialog\n\nIMPLEMENT_DYNAMIC(CStatusDialog, CDialog)\n\nCStatusDialog::CStatusDialog(CWnd* pParent /*=NULL*/)\n\t: CDialog(CStatusDialog::IDD, pParent)\n{\n}\n\nCStatusDialog::~CStatusDialog()\n{\n}\n\nvoid CStatusDialog::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n}\n\n\nBEGIN_MESSAGE_MAP(CStatusDialog, CDialog)\n\tON_WM_TIMER()\nEND_MESSAGE_MAP()\n\n#define IDStatusTIMER 1\n\n// CStatusDialog message handlers\n\nvoid CStatusDialog::OnTimer(UINT_PTR nIDEvent)\n{\n\tint DxStatus;\n\tint IconId;\n\tLPCSTR Status;\n\tchar sMsg[1024];\n\tchar sMsg2[1024];\n\tchar DllVersion[21];\n\tDXWNDSTATUS DxWndStatus;\n\textern PRIVATEMAP *pTitles; \n\textern TARGETMAP *pTargets;\n\tTARGETMAP *Target;\n\textern char *GetTSCaption(int);\n\n\tCDialog::OnTimer(nIDEvent);\n\tGetDllVersion(DllVersion);\n\tDxStatus=GetHookStatus(&DxWndStatus);\n\tswitch (DxStatus){\n\t\tcase DXW_IDLE: IconId=IDI_DXIDLE; Status=\"DISABLED\"; break;\n\t\tcase DXW_ACTIVE: IconId=IDI_DXWAIT; Status=\"READY\"; break;\n\t\tcase DXW_RUNNING: IconId=IDI_DXRUN; Status=\"RUNNING\"; break;\n\t\tdefault: IconId=IDI_DXIDLE; Status=\"???\"; break;\n\t}\n\n\tsprintf_s(sMsg, 1024, \n\t\t\"DxWnd %s\\n\"\n\t\t\"Hook status: %s\", \n\t\tDllVersion, Status);\n\n\tif(DxStatus==DXW_RUNNING){\n\n\t\tTarget=&pTargets[DxWndStatus.TaskIdx];\n\n\t\tsprintf_s(sMsg2, 1024, \n\t\t\t\"\\nTask=(%d): %s\\n\"\n\t\t\t\"pid=%x\\n\"\n\t\t\t\"Screen = (%dx%d) Color BPP=%d\\n\"\n\t\t\t\"FullScreen = %s\\nDX version = %d\\n\"\n\t\t\t\"Logging = %s\\n\"\n\t\t\t\"Cursor = (%d,%d)\",\n\t\t\t(DxWndStatus.OrigIdx+1), pTitles[DxWndStatus.OrigIdx].title,\n\t\t\tDxWndStatus.dwPid,\n\t\t\tDxWndStatus.Width, DxWndStatus.Height, DxWndStatus.ColorDepth, \n\t\t\tDxWndStatus.IsFullScreen ? \"Yes\":\"No\", DxWndStatus.DXVersion,\n\t\t\tDxWndStatus.isLogging?\"ON\":\"OFF\",\n\t\t\tDxWndStatus.CursorX, DxWndStatus.CursorY);\n\t\tstrcat(sMsg, sMsg2);\n\t\tif(DxWndStatus.pfd.dwFlags & DDPF_FOURCC){\n\t\t\tchar *fcc;\n\t\t\tfcc = (char *)&(DxWndStatus.pfd.dwFourCC);\n\t\t\tsprintf_s(sMsg2, 1024, \t\t\t\n\t\t\t\t\"\\nFourCC = %x (%c%c%c%c)\", \n\t\t\t\tDxWndStatus.pfd.dwFourCC, \n\t\t\t\tisprint(fcc[0])?fcc[0]:'.', isprint(fcc[1])?fcc[1]:'.', isprint(fcc[2])?fcc[2]:'.', isprint(fcc[3])?fcc[3]:'.'\t\n\t\t\t);\n\t\t\tstrcat(sMsg, sMsg2);\n\t\t}\n\t\tif(DxWndStatus.pfd.dwSize){\n\t\t\tsprintf_s(sMsg2, 1024, \n\t\t\t\t\"\\nPixel format=%s%s%s%s%s%s\",\n\t\t\t\t(DxWndStatus.pfd.dwFlags & DDPF_ALPHAPIXELS) ? \"ALPHAPIXELS \":\"\",\n\t\t\t\t(DxWndStatus.pfd.dwFlags & DDPF_ALPHA) ? \"ALPHA \":\"\",\n\t\t\t\t(DxWndStatus.pfd.dwFlags & DDPF_FOURCC) ? \"FOURCC \":\"\",\n\t\t\t\t(DxWndStatus.pfd.dwFlags & (DDPF_PALETTEINDEXED4|DDPF_PALETTEINDEXEDTO8|DDPF_PALETTEINDEXED8)) ? \"PALETTEINDEXED \":\"\",\n\t\t\t\t(DxWndStatus.pfd.dwFlags & DDPF_RGB) ? \"RGB \":\"\",\n\t\t\t\t(DxWndStatus.pfd.dwFlags & DDPF_YUV) ? \"YUV \":\"\"\n\t\t\t\t);\n\t\t\tstrcat(sMsg, sMsg2);\n\t\t}\n\t\tif(DxWndStatus.pfd.dwFlags & DDPF_RGB){\n\t\t\tsprintf_s(sMsg2, 1024, \n\t\t\t\t\"\\nColor mask (RGBA)=(%x,%x,%x,%x)\",\n\t\t\t\tDxWndStatus.pfd.dwRBitMask, DxWndStatus.pfd.dwGBitMask, DxWndStatus.pfd.dwBBitMask, DxWndStatus.pfd.dwRGBAlphaBitMask\n\t\t\t);\n\t\t\tstrcat(sMsg, sMsg2);\n\t\t}\n\t\tif(Target->flags2 & (SHOWFPS|SHOWFPSOVERLAY)){\n\t\t\tsprintf(sMsg2, \"\\nFPS = %d\", DxWndStatus.FPSCount);   \n\t\t\tstrcat(sMsg, sMsg2);\n\t\t}\n\t\tif(Target->flags2 & TIMESTRETCH){\n\t\t\tif(DxWndStatus.TimeShift>=-8 && DxWndStatus.TimeShift<=8){\n\t\t\t\tsprintf(sMsg2, \"\\nTime speed %s\", GetTSCaption(DxWndStatus.TimeShift));\n\t\t\t\tstrcat(sMsg, sMsg2);\n\t\t\t}\n\t\t}\n\t}\n\n\tthis->SetDlgItemTextA(IDC_STATUSINFO, sMsg);\n}\n\nBOOL CStatusDialog::OnInitDialog()\n{\n\tCDialog::OnInitDialog();\n\n\tSetTimer(IDStatusTIMER, 1000, NULL);\n\n\t// TODO:  Add extra initialization here\n\n\treturn TRUE;  // return TRUE unless you set the focus to a control\n\t// EXCEPTION: OCX Property Pages should return FALSE\n}\n\nvoid CStatusDialog::OnOK()\n{\n\t// TODO: Add your specialized code here and/or call the base class\n\n\tKillTimer(IDStatusTIMER);\n\t// stop timer\n\n\tCDialog::OnOK();\n}\n"
  },
  {
    "path": "host/StatusDialog.h",
    "content": "#pragma once\n\n\n// CStatusDialog dialog\n\nclass CStatusDialog : public CDialog\n{\n\tDECLARE_DYNAMIC(CStatusDialog)\n\npublic:\n\tCStatusDialog(CWnd* pParent = NULL);   // standard constructor\n\tvirtual ~CStatusDialog();\n\n// Dialog Data\n\tenum { IDD = IDD_STATUS };\n\nprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\n\tDECLARE_MESSAGE_MAP()\npublic:\n\tafx_msg void OnTimer(UINT_PTR nIDEvent);\npublic:\n\tvirtual BOOL OnInitDialog();\nprotected:\n\tvirtual void OnOK();\n};\n"
  },
  {
    "path": "host/StdAfx.cpp",
    "content": "// stdafx.cpp : Source file containing the standard include\n//              dxwndhost.pch : generated precompiled header \n//              stdafx.obj : generated precompiled type information\n\n#include \"stdafx.h\"\n\n\n\n"
  },
  {
    "path": "host/StdAfx.h",
    "content": "// stdafx.h : include file for standard system,\n//            reference number, and rarely changes\n//            Write the project specific include files.\n//\n\n#define _CRT_SECURE_NO_DEPRECATE\n\n#if !defined(AFX_STDAFX_H__9139BF92_2E61_4CBC_AB58_646DE772409F__INCLUDED_)\n#define AFX_STDAFX_H__9139BF92_2E61_4CBC_AB58_646DE772409F__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n\n#define VC_EXTRALEAN\t\t// used to exclude most Windows stuff from the header.\n\n#include <afxwin.h>         // MFC Core and standard components\n#include <afxext.h>         // MFC extension\n#include <afxcview.h>\n#include <afxdisp.h>        // MFC Automation Class\n#include <afxdtctl.h>\t\t// MFC Internet Explorer 4 Common control support\n#ifndef _AFX_NO_AFXCMN_SUPPORT\n#include <afxcmn.h>\t\t\t// MFC Windows Common control support\n#endif // _AFX_NO_AFXCMN_SUPPORT\n#include <stdio.h>\n#include <string.h>\n\n#include \"dxwnd.h\"\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ Will insert additional declarations immediately before the previous line.\n\n#endif // !defined(AFX_STDAFX_H__9139BF92_2E61_4CBC_AB58_646DE772409F__INCLUDED_)\n"
  },
  {
    "path": "host/SystemTray.cpp",
    "content": "/////////////////////////////////////////////////////////////////////////////\n// SystemTray.cpp : implementation file\n//\n// MFC VERSION\n//\n// This is a conglomeration of ideas from the MSJ \"Webster\" application,\n// sniffing round the online docs, and from other implementations such\n// as PJ Naughter's \"CTrayNotifyIcon\" (http://indigo.ie/~pjn/ntray.html)\n// especially the \"CSystemTray::OnTrayNotification\" member function.\n// Joerg Koenig suggested the icon animation stuff\n//\n// This class is a light wrapper around the windows system tray stuff. It\n// adds an icon to the system tray with the specified ToolTip text and \n// callback notification value, which is sent back to the Parent window.\n//\n// The tray icon can be instantiated using either the constructor or by\n// declaring the object and creating (and displaying) it later on in the\n// program. eg.\n//\n//        CSystemTray m_SystemTray;    // Member variable of some class\n//        \n//        ... \n//        // in some member function maybe...\n//        m_SystemTray.Create(pParentWnd, WM_MY_NOTIFY, \"Click here\", \n//                          hIcon, nSystemTrayID);\n//\n// Written by Chris Maunder (cmaunder@mail.com)\n// Copyright (c) 1998-2003.\n//\n// Updated: 25 Jul 1998 - Added icon animation, and derived class\n//                        from CWnd in order to handle messages. (CJM)\n//                        (icon animation suggested by Joerg Koenig.\n//                        Added API to set default menu item. Code provided\n//                        by Enrico Lelina.\n//\n// Updated: 6 June 1999 - SetIcon can now load non-standard sized icons (Chip Calvert)\n//                        Added \"bHidden\" parameter when creating icon\n//                        (Thanks to Michael Gombar for these suggestions)\n//                        Restricted tooltip text to 64 characters.\n//\n// Updated: 9 Nov 1999  - Now works in WindowsCE.\n//                        Fix for use in NT services (Thomas Mooney, TeleProc, Inc)\n//                        Added W2K stuff by Michael Dunn\n//\n// Updated: 1 Jan 2000  - Added tray minimisation stuff.\n// \n// Updated: 21 Sep 2000 - Added GetDoWndAnimation - animation only occurs if the system\n//                        settings allow it (Matthew Ellis). Updated the GetTrayWndRect\n//                        function to include more fallback logic (Matthew Ellis)\n//                        NOTE: Signature of GetTrayWndRect has changed!\n// \n// Updated: 4 Aug 2003 - Fixed bug that was stopping icon from being recreated when\n//                       Explorer crashed\n//                       Fixed resource leak in SetIcon\n//\t\t\t\t\t\t Animate() now checks for empty icon list - Anton Treskunov\n//\t\t\t\t\t\t Added the virutal CustomizeMenu() method - Anton Treskunov\n//                       \n//\n// This code may be used in compiled form in any way you desire. This\n// file may be redistributed unmodified by any means PROVIDING it is \n// not sold for profit without the authors written consent, and \n// providing that this notice and the authors name is included. If \n// the source code in  this file is used in any commercial application \n// then acknowledgement must be made to the author of this file \n// (in whatever form you wish).\n//\n// This file is provided \"as is\" with no expressed or implied warranty.\n// The author accepts no liability for any damage caused through use.\n//\n// Expect bugs.\n// \n// Please use and enjoy. Please let me know of any bugs/mods/improvements \n// that you have found/implemented and I will fix/incorporate them into this\n// file. \n//\n/////////////////////////////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n#include \"SystemTray.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n#ifndef _WIN32_WCE  // Use C++ exception handling instead of structured.\n#undef TRY\n#undef CATCH\n#undef END_CATCH\n#define TRY try\n#define CATCH(ex_class, ex_object) catch(ex_class* ex_object)\n#define END_CATCH\n#endif  // _WIN32_WCE\n\n#ifndef _countof\n#define _countof(x) ( sizeof(x) / sizeof(x[0]) )\n#endif\n\nIMPLEMENT_DYNAMIC(CSystemTray, CWnd)\n\nconst UINT CSystemTray::m_nTimerID    = 4567;\nUINT CSystemTray::m_nMaxTooltipLength  = SYSTRAY_TIPMSGSIZE;     // This may change... \nconst UINT CSystemTray::m_nTaskbarCreatedMsg = ::RegisterWindowMessage(_T(\"TaskbarCreated\"));\nCWnd  CSystemTray::m_wndInvisible;\n\n/////////////////////////////////////////////////////////////////////////////\n// CSystemTray construction/creation/destruction\n\nCSystemTray::CSystemTray()\n{\n    Initialise();\n}\n\nCSystemTray::CSystemTray(CWnd* pParent,             // The window that will recieve tray notifications\n                         UINT uCallbackMessage,     // the callback message to send to parent\n                         LPCTSTR szToolTip,         // tray icon tooltip\n                         HICON icon,                // Handle to icon\n                         UINT uID,                  // Identifier of tray icon\n                         BOOL bHidden /*=FALSE*/,   // Hidden on creation?                  \n                         LPCTSTR szBalloonTip /*=NULL*/,    // Ballon tip (w2k only)\n                         LPCTSTR szBalloonTitle /*=NULL*/,  // Balloon tip title (w2k)\n                         DWORD dwBalloonIcon /*=NIIF_NONE*/,// Ballon tip icon (w2k)\n                         UINT uBalloonTimeout /*=10*/)      // Balloon timeout (w2k)\n{\n    Initialise();\n    Create(pParent, uCallbackMessage, szToolTip, icon, uID, bHidden,\n           szBalloonTip, szBalloonTitle, dwBalloonIcon, uBalloonTimeout);\n}\n\nvoid CSystemTray::Initialise()\n{\n    memset(&m_tnd, 0, sizeof(m_tnd));\n\n    m_bEnabled = FALSE;\n    m_bHidden  = TRUE;\n    m_bRemoved = TRUE;\n\n    m_DefaultMenuItemID    = 0;\n    m_DefaultMenuItemByPos = TRUE;\n\n    m_bShowIconPending = FALSE;\n\n    m_uIDTimer   = 0;\n    m_hSavedIcon = NULL;\n\n\tm_pTargetWnd = NULL;\n\tm_uCreationFlags = 0;\n\n#ifdef SYSTEMTRAY_USEW2K\n    OSVERSIONINFO os = { sizeof(os) };\n    GetVersionEx(&os);\n    m_bWin2K = ( VER_PLATFORM_WIN32_NT == os.dwPlatformId && os.dwMajorVersion >= 5 );\n#else\n    m_bWin2K = FALSE;\n#endif\n}\n\n// update by Michael Dunn, November 1999\n//\n//  New version of Create() that handles new features in Win 2K.\n//\n// Changes:\n//  szTip: Same as old, but can be 128 characters instead of 64.\n//  szBalloonTip: Text for a balloon tooltip that is shown when the icon\n//                is first added to the tray.  Pass \"\" if you don't want\n//                a balloon.\n//  szBalloonTitle: Title text for the balloon tooltip.  This text is shown\n//                  in bold above the szBalloonTip text.  Pass \"\" if you\n//                  don't want a title.\n//  dwBalloonIcon: Specifies which icon will appear in the balloon.  Legal\n//                 values are:\n//                     NIIF_NONE: No icon\n//                     NIIF_INFO: Information\n//                     NIIF_WARNING: Exclamation\n//                     NIIF_ERROR: Critical error (red circle with X)\n//  uBalloonTimeout: Number of seconds for the balloon to remain visible.\n//                   Must be between 10 and 30 inclusive.\n\nBOOL CSystemTray::Create(CWnd* pParent, UINT uCallbackMessage, LPCTSTR szToolTip, \n                         HICON icon, UINT uID, BOOL bHidden /*=FALSE*/,\n                         LPCTSTR szBalloonTip /*=NULL*/, \n                         LPCTSTR szBalloonTitle /*=NULL*/,  \n                         DWORD dwBalloonIcon /*=NIIF_NONE*/,\n                         UINT uBalloonTimeout /*=10*/)\n{\n#ifdef _WIN32_WCE\n    m_bEnabled = TRUE;\n#else\n    // this is only for Windows 95 (or higher)\n    m_bEnabled = (GetVersion() & 0xff) >= 4;\n    if (!m_bEnabled) \n    {\n        ASSERT(FALSE);\n        return FALSE;\n    }\n#endif\n\n    m_nMaxTooltipLength = _countof(m_tnd.szTip);\n    \n    // Make sure we avoid conflict with other messages\n    ASSERT(uCallbackMessage >= WM_APP);\n\n    // Tray only supports tooltip text up to m_nMaxTooltipLength) characters\n    ASSERT(AfxIsValidString(szToolTip));\n    ASSERT(_tcslen(szToolTip) <= m_nMaxTooltipLength);\n\n    // Create an invisible window\n    CWnd::CreateEx(0, AfxRegisterWndClass(0), _T(\"\"), WS_POPUP, 0,0,0,0, NULL, 0);\n\n    // load up the NOTIFYICONDATA structure\n    m_tnd.cbSize = sizeof(NOTIFYICONDATA);\n    m_tnd.hWnd   = pParent->GetSafeHwnd()? pParent->GetSafeHwnd() : m_hWnd;\n    m_tnd.uID    = uID;\n    m_tnd.hIcon  = icon;\n    m_tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;\n    m_tnd.uCallbackMessage = uCallbackMessage;\n    //_tcsncpy(m_tnd.szTip, szToolTip, m_nMaxTooltipLength-1);\n    _tcsncpy_s(m_tnd.szTip, sizeof(m_tnd.szTip)-1, szToolTip, m_nMaxTooltipLength-1);\n\n#ifdef SYSTEMTRAY_USEW2K\n    if (m_bWin2K && szBalloonTip)\n    {\n        // The balloon tooltip text can be up to 255 chars long.\n        ASSERT(AfxIsValidString(szBalloonTip));\n        ASSERT(lstrlen(szBalloonTip) < 256);\n\n        // The balloon title text can be up to 63 chars long.\n        if (szBalloonTitle)\n        {\n            ASSERT(AfxIsValidString(szBalloonTitle));\n            ASSERT(lstrlen(szBalloonTitle) < SYSTRAY_TIPMSGSIZE); \n        }\n\n        // dwBalloonIcon must be valid.\n        ASSERT(NIIF_NONE == dwBalloonIcon    || NIIF_INFO == dwBalloonIcon ||\n               NIIF_WARNING == dwBalloonIcon || NIIF_ERROR == dwBalloonIcon);\n\n        // The timeout must be between 10 and 30 seconds.\n        ASSERT(uBalloonTimeout >= 10 && uBalloonTimeout <= 30);\n\n        m_tnd.uFlags |= NIF_INFO;\n\n        //_tcsncpy(m_tnd.szInfo, szBalloonTip, 255);\n        _tcsncpy_s(m_tnd.szInfo, sizeof(m_tnd.szInfo)-1, szBalloonTip, 255);\n\t\tif (szBalloonTitle){\n            //_tcsncpy(m_tnd.szInfoTitle, szBalloonTitle, 63);\n            _tcsncpy_s(m_tnd.szInfoTitle, sizeof(m_tnd.szInfoTitle)-1, szBalloonTitle, SYSTRAY_TIPMSGSIZE-1);\n            m_tnd.szInfoTitle[SYSTRAY_TIPMSGSIZE-1] = _T('\\0');\t\n\t\t}\n        else\n            m_tnd.szInfoTitle[0] = _T('\\0');\n        m_tnd.uTimeout    = uBalloonTimeout * 1000; // convert time to ms\n        m_tnd.dwInfoFlags = dwBalloonIcon;\n    }\n#endif\n\n    m_bHidden = bHidden;\n\n#ifdef SYSTEMTRAY_USEW2K    \n    if (m_bWin2K && m_bHidden)\n    {\n        m_tnd.uFlags = NIF_STATE;\n        m_tnd.dwState = NIS_HIDDEN;\n        m_tnd.dwStateMask = NIS_HIDDEN;\n    }\n#endif\n\n\tm_uCreationFlags = m_tnd.uFlags;\t// Store in case we need to recreate in OnTaskBarCreate\n\n    BOOL bResult = TRUE;\n    if (!m_bHidden || m_bWin2K)\n    {\n        bResult = Shell_NotifyIcon(NIM_ADD, &m_tnd);\n        m_bShowIconPending = m_bHidden = m_bRemoved = !bResult;\n    }\n    \n#ifdef SYSTEMTRAY_USEW2K    \n    if (m_bWin2K && szBalloonTip)\n    {\n        // Zero out the balloon text string so that later operations won't redisplay\n        // the balloon.\n        m_tnd.szInfo[0] = _T('\\0');\n    }\n#endif\n\n    return bResult;\n}\n\nCSystemTray::~CSystemTray()\n{\n    RemoveIcon();\n    m_IconList.RemoveAll();\n    DestroyWindow();\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// CSystemTray icon manipulation\n\n//////////////////////////////////////////////////////////////////////////\n//\n// Function:    SetFocus()\n//\n// Description:\n//  Sets the focus to the tray icon.  Microsoft's Win 2K UI guidelines\n//  say you should do this after the user dismisses the icon's context\n//  menu.\n//\n// Input:\n//  Nothing.\n//\n// Returns:\n//  Nothing.\n//\n//////////////////////////////////////////////////////////////////////////\n// Added by Michael Dunn, November, 1999\n//////////////////////////////////////////////////////////////////////////\n\nvoid CSystemTray::SetFocus()\n{\n#ifdef SYSTEMTRAY_USEW2K\n    Shell_NotifyIcon ( NIM_SETFOCUS, &m_tnd );\n#endif\n}\n\nBOOL CSystemTray::MoveToRight()\n{\n    RemoveIcon();\n    return AddIcon();\n}\n\nBOOL CSystemTray::AddIcon()\n{\n    if (!m_bRemoved)\n        RemoveIcon();\n\n    if (m_bEnabled)\n    {\n        m_tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;\n        if (!Shell_NotifyIcon(NIM_ADD, &m_tnd))\n            m_bShowIconPending = TRUE;\n        else\n            m_bRemoved = m_bHidden = FALSE;\n    }\n    return (m_bRemoved == FALSE);\n}\n\nBOOL CSystemTray::RemoveIcon()\n{\n    m_bShowIconPending = FALSE;\n\n    if (!m_bEnabled || m_bRemoved)\n        return TRUE;\n\n    m_tnd.uFlags = 0;\n    if (Shell_NotifyIcon(NIM_DELETE, &m_tnd))\n        m_bRemoved = m_bHidden = TRUE;\n\n    return (m_bRemoved == TRUE);\n}\n\nBOOL CSystemTray::HideIcon()\n{\n    if (!m_bEnabled || m_bRemoved || m_bHidden)\n        return TRUE;\n\n#ifdef SYSTEMTRAY_USEW2K\n    if (m_bWin2K)\n    {\n        m_tnd.uFlags = NIF_STATE;\n        m_tnd.dwState = NIS_HIDDEN;\n        m_tnd.dwStateMask = NIS_HIDDEN;\n\n        m_bHidden = Shell_NotifyIcon( NIM_MODIFY, &m_tnd);\n    }\n    else\n#endif\n        RemoveIcon();\n\n    return (m_bHidden == TRUE);\n}\n\nBOOL CSystemTray::ShowIcon()\n{\n    if (m_bRemoved)\n        return AddIcon();\n\n    if (!m_bHidden)\n        return TRUE;\n\n#ifdef SYSTEMTRAY_USEW2K\n    if (m_bWin2K)\n    {\n        m_tnd.uFlags = NIF_STATE;\n        m_tnd.dwState = 0;\n        m_tnd.dwStateMask = NIS_HIDDEN;\n        Shell_NotifyIcon ( NIM_MODIFY, &m_tnd );\n        m_bHidden = FALSE;\n    }\n    else\n#endif\n        AddIcon();\n\n    return (m_bHidden == FALSE);\n}\n\nBOOL CSystemTray::SetIcon(HICON hIcon)\n{\n    if (!m_bEnabled)\n        return FALSE;\n\n    m_tnd.uFlags = NIF_ICON;\n    m_tnd.hIcon = hIcon;\n\n    if (m_bHidden)\n        return TRUE;\n    else\n        return Shell_NotifyIcon(NIM_MODIFY, &m_tnd);\n}\n\nBOOL CSystemTray::SetIcon(LPCTSTR lpszIconName)\n{\n    HICON hIcon = (HICON) ::LoadImage(AfxGetResourceHandle(), \n                                      lpszIconName,\n                                      IMAGE_ICON, \n                                      0, 0,\n                                      LR_DEFAULTCOLOR);\n\tif (!hIcon)\n\t\treturn FALSE;\n\n\tBOOL bSuccess = SetIcon(hIcon);\n\t::DestroyIcon(hIcon);\n\n    return bSuccess;\n}\n\nBOOL CSystemTray::SetIcon(UINT nIDResource)\n{\n    return SetIcon(MAKEINTRESOURCE(nIDResource));\n}\n\nBOOL CSystemTray::SetStandardIcon(LPCTSTR lpIconName)\n{\n    HICON hIcon = LoadIcon(NULL, lpIconName);\n\n    return SetIcon(hIcon);\n}\n\nBOOL CSystemTray::SetStandardIcon(UINT nIDResource)\n{\n\treturn SetStandardIcon(MAKEINTRESOURCE(nIDResource));\n}\n \nHICON CSystemTray::GetIcon() const\n{\n    return (m_bEnabled)? m_tnd.hIcon : NULL;\n}\n\nBOOL CSystemTray::SetIconList(UINT uFirstIconID, UINT uLastIconID) \n{\n\tif (uFirstIconID > uLastIconID)\n        return FALSE;\n\n\tconst CWinApp* pApp = AfxGetApp();\n    if (!pApp)\n    {\n        ASSERT(FALSE);\n        return FALSE;\n    }\n\n    m_IconList.RemoveAll();\n    TRY {\n\t    for (UINT i = uFirstIconID; i <= uLastIconID; i++)\n\t\t    m_IconList.Add(pApp->LoadIcon(i));\n    }\n    CATCH(CMemoryException, e)\n    {\n        e->ReportError();\n        e->Delete();\n        m_IconList.RemoveAll();\n        return FALSE;\n    }\n    END_CATCH\n\n    return TRUE;\n}\n\nBOOL CSystemTray::SetIconList(HICON* pHIconList, UINT nNumIcons)\n{\n    m_IconList.RemoveAll();\n\n    TRY {\n\t    for (UINT i = 0; i < nNumIcons; i++)\n\t\t    m_IconList.Add(pHIconList[i]);\n    }\n    CATCH (CMemoryException, e)\n    {\n        e->ReportError();\n        e->Delete();\n        m_IconList.RemoveAll();\n        return FALSE;\n    }\n    END_CATCH\n\n    return TRUE;\n}\n\nBOOL CSystemTray::Animate(UINT nDelayMilliSeconds, int nNumSeconds /*=-1*/)\n{\n\tif (m_IconList.IsEmpty())\n\t\treturn FALSE;\n\n    StopAnimation();\n\n    m_nCurrentIcon = 0;\n    m_StartTime = COleDateTime::GetCurrentTime();\n    m_nAnimationPeriod = nNumSeconds;\n    m_hSavedIcon = GetIcon();\n\n\t// Setup a timer for the animation\n\tm_uIDTimer = SetTimer(m_nTimerID, nDelayMilliSeconds, NULL);\n\n    return (m_uIDTimer != 0);\n}\n\nBOOL CSystemTray::StepAnimation()\n{\n    if (!m_IconList.GetSize())\n        return FALSE;\n\n    m_nCurrentIcon++;\n    if (m_nCurrentIcon >= m_IconList.GetSize())\n        m_nCurrentIcon = 0;\n\n    return SetIcon(m_IconList[m_nCurrentIcon]);\n}\n\nBOOL CSystemTray::StopAnimation()\n{\n    BOOL bResult = FALSE;\n\n    if (m_uIDTimer)\n\t    bResult = KillTimer(m_uIDTimer);\n    m_uIDTimer = 0;\n\n    if (m_hSavedIcon)\n        SetIcon(m_hSavedIcon);\n    m_hSavedIcon = NULL;\n\n    return bResult;\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// CSystemTray tooltip text manipulation\n\nBOOL CSystemTray::SetTooltipText(LPCTSTR pszTip)\n{\n    ASSERT(AfxIsValidString(pszTip)); // (md)\n\tif(_tcslen(pszTip) >= m_nMaxTooltipLength) \n\t\t((char *)pszTip)[m_nMaxTooltipLength]=(char)0; // V2.1.74: string trimming\n    ASSERT(_tcslen(pszTip) < m_nMaxTooltipLength);\n\n    if (!m_bEnabled) \n        return FALSE;\n\n    m_tnd.uFlags = NIF_TIP;\n\t_tcsncpy_s(m_tnd.szTip, sizeof(m_tnd.szTip), pszTip, m_nMaxTooltipLength-1);\n\n    if (m_bHidden)\n        return TRUE;\n    else\n        return Shell_NotifyIcon(NIM_MODIFY, &m_tnd);\n}\n\nBOOL CSystemTray::SetTooltipText(UINT nID)\n{\n    CString strText;\n    VERIFY(strText.LoadString(nID));\n\n    return SetTooltipText(strText);\n}\n\nCString CSystemTray::GetTooltipText() const\n{\n    CString strText;\n    if (m_bEnabled)\n        strText = m_tnd.szTip;\n\n    return strText;\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// CSystemTray support for Win 2K features.\n\n//////////////////////////////////////////////////////////////////////////\n//\n// Function:    ShowBalloon\n//\n// Description:\n//  Shows a balloon tooltip over the tray icon.\n//\n// Input:\n//  szText: [in] Text for the balloon tooltip.\n//  szTitle: [in] Title for the balloon.  This text is shown in bold above\n//           the tooltip text (szText).  Pass \"\" if you don't want a title.\n//  dwIcon: [in] Specifies an icon to appear in the balloon.  Legal values are:\n//                 NIIF_NONE: No icon\n//                 NIIF_INFO: Information\n//                 NIIF_WARNING: Exclamation\n//                 NIIF_ERROR: Critical error (red circle with X)\n//  uTimeout: [in] Number of seconds for the balloon to remain visible.  Can\n//            be between 10 and 30 inclusive.\n//\n// Returns:\n//  TRUE if successful, FALSE if not.\n//\n//////////////////////////////////////////////////////////////////////////\n// Added by Michael Dunn, November 1999\n//////////////////////////////////////////////////////////////////////////\n\nBOOL CSystemTray::ShowBalloon(LPCTSTR szText,\n                              LPCTSTR szTitle  /*=NULL*/,\n                              DWORD   dwIcon   /*=NIIF_NONE*/,\n                              UINT    uTimeout /*=10*/ )\n{\n#ifndef SYSTEMTRAY_USEW2K\n    return FALSE;\n#else\n    // Bail out if we're not on Win 2K.\n    if (!m_bWin2K)\n        return FALSE;\n\n    // Verify input parameters.\n\n    // The balloon tooltip text can be up to 255 chars long.\n    ASSERT(AfxIsValidString(szText));\n    ASSERT(lstrlen(szText) < 256);\n\n    // The balloon title text can be up to 63 chars long.\n    if (szTitle)\n    {\n        ASSERT(AfxIsValidString( szTitle));\n        ASSERT(lstrlen(szTitle) < SYSTRAY_TIPMSGSIZE); \n    }\n\n    // dwBalloonIcon must be valid.\n    ASSERT(NIIF_NONE == dwIcon    || NIIF_INFO == dwIcon ||\n           NIIF_WARNING == dwIcon || NIIF_ERROR == dwIcon);\n\n    // The timeout must be between 10 and 30 seconds.\n    ASSERT(uTimeout >= 10 && uTimeout <= 30);\n\n\n    m_tnd.uFlags = NIF_INFO;\n    //_tcsncpy(m_tnd.szInfo, szText, 256);\n    _tcsncpy_s(m_tnd.szInfo, sizeof(m_tnd.szInfo)-1, szText, 256);\n\tif (szTitle){\n        //_tcsncpy(m_tnd.szInfoTitle, szTitle, 64);\n        _tcsncpy_s(m_tnd.szInfoTitle, sizeof(m_tnd.szInfoTitle)-1, szTitle, SYSTRAY_TIPMSGSIZE);\n        m_tnd.szInfoTitle[SYSTRAY_TIPMSGSIZE-1] = _T('\\0');\n\t}\n    else\n        m_tnd.szInfoTitle[0] = _T('\\0');\n    m_tnd.dwInfoFlags = dwIcon;\n    m_tnd.uTimeout = uTimeout * 1000;   // convert time to ms\n\n    BOOL bSuccess = Shell_NotifyIcon (NIM_MODIFY, &m_tnd);\n\n    // Zero out the balloon text string so that later operations won't redisplay\n    // the balloon.\n    m_tnd.szInfo[0] = _T('\\0');\n\n    return bSuccess;\n#endif\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// CSystemTray notification window stuff\n\nBOOL CSystemTray::SetNotificationWnd(CWnd* pWnd)\n{\n    if (!m_bEnabled) \n        return FALSE;\n\n    // Make sure Notification window is valid\n    if (!pWnd || !::IsWindow(pWnd->GetSafeHwnd()))\n    {\n        ASSERT(FALSE);\n        return FALSE;\n    }\n\n    m_tnd.hWnd = pWnd->GetSafeHwnd();\n    m_tnd.uFlags = 0;\n\n    if (m_bHidden)\n        return TRUE;\n    else\n        return Shell_NotifyIcon(NIM_MODIFY, &m_tnd);\n}\n\nCWnd* CSystemTray::GetNotificationWnd() const\n{\n    return CWnd::FromHandle(m_tnd.hWnd);\n}\n\n// Hatr added\n\n// Hatr added\n\n// Change or retrive the window to send menu commands to\nBOOL CSystemTray::SetTargetWnd(CWnd* pTargetWnd)\n{\n    m_pTargetWnd = pTargetWnd;\n    return TRUE;\n} // CSystemTray::SetTargetWnd()\n\nCWnd* CSystemTray::GetTargetWnd() const\n{\n    if (m_pTargetWnd)\n        return m_pTargetWnd;\n    else\n        return AfxGetMainWnd();\n} // CSystemTray::GetTargetWnd()\n\n/////////////////////////////////////////////////////////////////////////////\n// CSystemTray notification message stuff\n\nBOOL CSystemTray::SetCallbackMessage(UINT uCallbackMessage)\n{\n    if (!m_bEnabled)\n        return FALSE;\n\n    // Make sure we avoid conflict with other messages\n    ASSERT(uCallbackMessage >= WM_APP);\n\n    m_tnd.uCallbackMessage = uCallbackMessage;\n    m_tnd.uFlags = NIF_MESSAGE;\n\n    if (m_bHidden)\n        return TRUE;\n    else\n        return Shell_NotifyIcon(NIM_MODIFY, &m_tnd);\n}\n\nUINT CSystemTray::GetCallbackMessage() const\n{\n    return m_tnd.uCallbackMessage;\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// CSystemTray menu manipulation\n\nBOOL CSystemTray::SetMenuDefaultItem(UINT uItem, BOOL bByPos)\n{\n#ifdef _WIN32_WCE\n    return FALSE;\n#else\n    if ((m_DefaultMenuItemID == uItem) && (m_DefaultMenuItemByPos == bByPos)) \n        return TRUE;\n\n    m_DefaultMenuItemID = uItem;\n    m_DefaultMenuItemByPos = bByPos;   \n\n    CMenu menu, *pSubMenu;\n\n    if (!menu.LoadMenu(m_tnd.uID))\n        return FALSE;\n\n    pSubMenu = menu.GetSubMenu(0);\n    if (!pSubMenu)\n        return FALSE;\n\n    ::SetMenuDefaultItem(pSubMenu->m_hMenu, m_DefaultMenuItemID, m_DefaultMenuItemByPos);\n\n    return TRUE;\n#endif\n}\n\nvoid CSystemTray::GetMenuDefaultItem(UINT& uItem, BOOL& bByPos)\n{\n    uItem = m_DefaultMenuItemID;\n    bByPos = m_DefaultMenuItemByPos;\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// CSystemTray message handlers\n\nBEGIN_MESSAGE_MAP(CSystemTray, CWnd)\n\t//{{AFX_MSG_MAP(CSystemTray)\n\tON_WM_TIMER()\n\t//}}AFX_MSG_MAP\n#ifndef _WIN32_WCE\n\tON_WM_SETTINGCHANGE()\n#endif\n    ON_REGISTERED_MESSAGE(CSystemTray::m_nTaskbarCreatedMsg, OnTaskbarCreated)\nEND_MESSAGE_MAP()\n\nvoid CSystemTray::OnTimer(UINT nIDEvent) \n{\n    if (nIDEvent != m_uIDTimer)\n    {\n        //ASSERT(FALSE); GHO, v.2.1.69\n        return;\n    }\n\n    COleDateTime CurrentTime = COleDateTime::GetCurrentTime();\n    COleDateTimeSpan period = CurrentTime - m_StartTime;\n\n    if (m_nAnimationPeriod > 0 && m_nAnimationPeriod < period.GetTotalSeconds())\n    {\n        StopAnimation();\n        return;\n    }\n\n    StepAnimation();\n}\n\n// This is called whenever the taskbar is created (eg after explorer crashes\n// and restarts. Please note that the WM_TASKBARCREATED message is only passed\n// to TOP LEVEL windows (like WM_QUERYNEWPALETTE)\nLRESULT CSystemTray::OnTaskbarCreated(WPARAM /*wParam*/, LPARAM /*lParam*/) \n{\n    m_bShowIconPending = TRUE; // !m_bHidden;\n    InstallIconPending();\n\n    return 0L;\n}\n\n#ifndef _WIN32_WCE\nvoid CSystemTray::OnSettingChange(UINT uFlags, LPCTSTR lpszSection) \n{\n\tCWnd::OnSettingChange(uFlags, lpszSection);\n\n    if (uFlags == SPI_SETWORKAREA)\n    {\n        m_bShowIconPending = !m_bHidden;\n        InstallIconPending();\t\n    }\n}\n#endif\n\nLRESULT CSystemTray::OnTrayNotification(UINT wParam, LONG lParam) \n{\n    //Return quickly if its not for this tray icon\n    if (wParam != m_tnd.uID)\n        return 0L;\n\n    CMenu menu, *pSubMenu;\n    CWnd *pTargetWnd = GetTargetWnd();\n    if (!pTargetWnd)\n        return 0L;\n\n    // Clicking with right button brings up a context menu\n#if defined(_WIN32_WCE) //&& _WIN32_WCE < 211\n    BOOL bAltPressed = ((GetKeyState(VK_MENU) & (1 << (sizeof(SHORT)*8-1))) != 0);\n    if (LOWORD(lParam) == WM_LBUTTONUP && bAltPressed)\n#else\n    if (LOWORD(lParam) == WM_RBUTTONUP)\n#endif\n    {    \n        if (!menu.LoadMenu(m_tnd.uID))\n            return 0;\n        \n        pSubMenu = menu.GetSubMenu(0);\n        if (!pSubMenu)\n            return 0;\n\n#ifndef _WIN32_WCE\n        // Make chosen menu item the default (bold font)\n        ::SetMenuDefaultItem(pSubMenu->m_hMenu, m_DefaultMenuItemID, m_DefaultMenuItemByPos);\n#endif\n\n\t\tCustomizeMenu(pSubMenu);\n\n        // Display and track the popup menu\n        CPoint pos;\n#ifdef _WIN32_WCE\n        pos = CPoint(GetMessagePos());\n#else\n        GetCursorPos(&pos);\n#endif\n\n        pTargetWnd->SetForegroundWindow(); \n        \n#ifndef _WIN32_WCE\n        ::TrackPopupMenu(pSubMenu->m_hMenu, 0, pos.x, pos.y, 0, \n                         pTargetWnd->GetSafeHwnd(), NULL);\n#else\n        pSubMenu->TrackPopupMenu(TPM_LEFTALIGN, pos.x, pos.y, pTargetWnd, NULL);\n#endif\n\n        // BUGFIX: See \"PRB: Menus for Notification Icons Don't Work Correctly\"\n        pTargetWnd->PostMessage(WM_NULL, 0, 0);\n\n        menu.DestroyMenu();\n    } \n#if defined(_WIN32_WCE) //&& _WIN32_WCE < 211\n    if (LOWORD(lParam) == WM_LBUTTONDBLCLK && bAltPressed)\n#else\n    else if (LOWORD(lParam) == WM_LBUTTONDBLCLK) \n#endif\n    {\n        // double click received, the default action is to execute default menu item\n        pTargetWnd->SetForegroundWindow();  \n\n        UINT uItem;\n        if (m_DefaultMenuItemByPos)\n        {\n            if (!menu.LoadMenu(m_tnd.uID))\n                return 0;\n            \n            pSubMenu = menu.GetSubMenu(0);\n            if (!pSubMenu)\n                return 0;\n            \n            uItem = pSubMenu->GetMenuItemID(m_DefaultMenuItemID);\n\n\t\t\tmenu.DestroyMenu();\n        }\n        else\n            uItem = m_DefaultMenuItemID;\n        \n        pTargetWnd->PostMessage(WM_COMMAND, uItem, 0);\n    }\n\n    return 1;\n}\n\nLRESULT CSystemTray::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) \n{\n    if (message == m_tnd.uCallbackMessage)\n        return OnTrayNotification(wParam, lParam);\n\t\n\treturn CWnd::WindowProc(message, wParam, lParam);\n}\n\nvoid CSystemTray::InstallIconPending()\n{\n    // Is the icon display pending, and it's not been set as \"hidden\"?\n    if (!m_bShowIconPending || m_bHidden)\n        return;\n\n\t// Reset the flags to what was used at creation\n\tm_tnd.uFlags = m_uCreationFlags;\n\n    // Try and recreate the icon\n    m_bHidden = !Shell_NotifyIcon(NIM_ADD, &m_tnd);\n\n    // If it's STILL hidden, then have another go next time...\n    m_bShowIconPending = m_bHidden;\n\n    // ASSERT(m_bHidden == FALSE); GHO v.2.1.69\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// For minimising/maximising from system tray\n\nBOOL CALLBACK FindTrayWnd(HWND hwnd, LPARAM lParam)\n{\n    TCHAR szClassName[256];\n    GetClassName(hwnd, szClassName, 255);\n\n    // Did we find the Main System Tray? If so, then get its size and keep going\n    if (_tcscmp(szClassName, _T(\"TrayNotifyWnd\")) == 0)\n    {\n        CRect *pRect = (CRect*) lParam;\n        ::GetWindowRect(hwnd, pRect);\n        return TRUE;\n    }\n\n    // Did we find the System Clock? If so, then adjust the size of the rectangle\n    // we have and quit (clock will be found after the system tray)\n    if (_tcscmp(szClassName, _T(\"TrayClockWClass\")) == 0)\n    {\n        CRect *pRect = (CRect*) lParam;\n        CRect rectClock;\n        ::GetWindowRect(hwnd, rectClock);\n        // if clock is above system tray adjust accordingly\n        if (rectClock.bottom < pRect->bottom-5) // 10 = random fudge factor.\n            pRect->top = rectClock.bottom;\n        else\n            pRect->right = rectClock.left;\n        return FALSE;\n    }\n \n    return TRUE;\n}\n \n#ifndef _WIN32_WCE\n// enhanced version by Matthew Ellis <m.t.ellis@bigfoot.com>\nvoid CSystemTray::GetTrayWndRect(LPRECT lprect)\n{\n#define DEFAULT_RECT_WIDTH 150\n#define DEFAULT_RECT_HEIGHT 30\n\n    HWND hShellTrayWnd = ::FindWindow(_T(\"Shell_TrayWnd\"), NULL);\n    if (hShellTrayWnd)\n    {\n        ::GetWindowRect(hShellTrayWnd, lprect);\n        EnumChildWindows(hShellTrayWnd, FindTrayWnd, (LPARAM)lprect);\n        return;\n    }\n    // OK, we failed to get the rect from the quick hack. Either explorer isn't\n    // running or it's a new version of the shell with the window class names\n    // changed (how dare Microsoft change these undocumented class names!) So, we\n    // try to find out what side of the screen the taskbar is connected to. We\n    // know that the system tray is either on the right or the bottom of the\n    // taskbar, so we can make a good guess at where to minimize to\n    APPBARDATA appBarData;\n    appBarData.cbSize=sizeof(appBarData);\n    if (SHAppBarMessage(ABM_GETTASKBARPOS,&appBarData))\n    {\n        // We know the edge the taskbar is connected to, so guess the rect of the\n        // system tray. Use various fudge factor to make it look good\n        switch(appBarData.uEdge)\n        {\n        case ABE_LEFT:\n        case ABE_RIGHT:\n            // We want to minimize to the bottom of the taskbar\n            lprect->top    = appBarData.rc.bottom-100;\n            lprect->bottom = appBarData.rc.bottom-16;\n            lprect->left   = appBarData.rc.left;\n            lprect->right  = appBarData.rc.right;\n            break;\n            \n        case ABE_TOP:\n        case ABE_BOTTOM:\n            // We want to minimize to the right of the taskbar\n            lprect->top    = appBarData.rc.top;\n            lprect->bottom = appBarData.rc.bottom;\n            lprect->left   = appBarData.rc.right-100;\n            lprect->right  = appBarData.rc.right-16;\n            break;\n        }\n        return;\n    }\n    \n    // Blimey, we really aren't in luck. It's possible that a third party shell\n    // is running instead of explorer. This shell might provide support for the\n    // system tray, by providing a Shell_TrayWnd window (which receives the\n    // messages for the icons) So, look for a Shell_TrayWnd window and work out\n    // the rect from that. Remember that explorer's taskbar is the Shell_TrayWnd,\n    // and stretches either the width or the height of the screen. We can't rely\n    // on the 3rd party shell's Shell_TrayWnd doing the same, in fact, we can't\n    // rely on it being any size. The best we can do is just blindly use the\n    // window rect, perhaps limiting the width and height to, say 150 square.\n    // Note that if the 3rd party shell supports the same configuraion as\n    // explorer (the icons hosted in NotifyTrayWnd, which is a child window of\n    // Shell_TrayWnd), we would already have caught it above\n    if (hShellTrayWnd)\n    {\n        ::GetWindowRect(hShellTrayWnd, lprect);\n        if (lprect->right - lprect->left > DEFAULT_RECT_WIDTH)\n            lprect->left = lprect->right - DEFAULT_RECT_WIDTH;\n        if (lprect->bottom - lprect->top > DEFAULT_RECT_HEIGHT)\n            lprect->top = lprect->bottom - DEFAULT_RECT_HEIGHT;\n        \n        return;\n    }\n    \n    // OK. Haven't found a thing. Provide a default rect based on the current work\n    // area\n    SystemParametersInfo(SPI_GETWORKAREA,0, lprect, 0);\n    lprect->left = lprect->right - DEFAULT_RECT_WIDTH;\n    lprect->top  = lprect->bottom - DEFAULT_RECT_HEIGHT;\n}\n\n// Check to see if the animation has been disabled (Matthew Ellis <m.t.ellis@bigfoot.com>)\nBOOL CSystemTray::GetDoWndAnimation()\n{\n  ANIMATIONINFO ai;\n\n  ai.cbSize=sizeof(ai);\n  SystemParametersInfo(SPI_GETANIMATION,sizeof(ai),&ai,0);\n\n  return ai.iMinAnimate?TRUE:FALSE;\n}\n#endif\n\nBOOL CSystemTray::RemoveTaskbarIcon(CWnd* pWnd)\n{\n    LPCTSTR pstrOwnerClass = AfxRegisterWndClass(0);\n\n    // Create static invisible window\n    if (!::IsWindow(m_wndInvisible.m_hWnd))\n    {\n\t\tif (!m_wndInvisible.CreateEx(0, pstrOwnerClass, _T(\"\"), WS_POPUP,\n\t\t\t\tCW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,\n\t\t\t\tNULL, 0))\n\t\t\treturn FALSE;\n    }\n\n    pWnd->SetParent(&m_wndInvisible);\n\n    return TRUE;\n}\n\nvoid CSystemTray::MinimiseToTray(CWnd* pWnd, BOOL bForceAnimation /*= FALSE*/)\n{\n#ifndef _WIN32_WCE\n    if (bForceAnimation || GetDoWndAnimation())\n    {\n        CRect rectFrom, rectTo;\n\n        pWnd->GetWindowRect(rectFrom);\n        GetTrayWndRect(rectTo);\n\n        ::DrawAnimatedRects(pWnd->m_hWnd, IDANI_CAPTION, rectFrom, rectTo);\n    }\n\n    RemoveTaskbarIcon(pWnd);\n    pWnd->ModifyStyle(WS_VISIBLE, 0);\n#endif\n}\n\nvoid CSystemTray::MaximiseFromTray(CWnd* pWnd, BOOL bForceAnimation /*= TRUE*/)\n{\n#ifndef _WIN32_WCE\n    if (bForceAnimation || GetDoWndAnimation())\n    {\n        CRect rectTo;\n        pWnd->GetWindowRect(rectTo);\n\n        CRect rectFrom;\n        GetTrayWndRect(rectFrom);\n\n        pWnd->SetParent(NULL);\n        ::DrawAnimatedRects(pWnd->m_hWnd, IDANI_CAPTION, rectFrom, rectTo);\n    }\n    else\n        pWnd->SetParent(NULL);\n\n    pWnd->ModifyStyle(0, WS_VISIBLE);\n    pWnd->RedrawWindow(NULL, NULL, RDW_UPDATENOW | RDW_ALLCHILDREN | RDW_FRAME |\n                                   RDW_INVALIDATE | RDW_ERASE);\n\n    // Move focus away and back again to ensure taskbar icon is recreated\n    if (::IsWindow(m_wndInvisible.m_hWnd))\n        m_wndInvisible.SetActiveWindow();\n    pWnd->SetActiveWindow();\n    pWnd->SetForegroundWindow();\n#endif\n}"
  },
  {
    "path": "host/SystemTray.h",
    "content": "/////////////////////////////////////////////////////////////////////////////\n// SystemTray.h : header file\n//\n// Written by Chris Maunder (cmaunder@mail.com)\n// Copyright (c) 1998.\n//\n// This code may be used in compiled form in any way you desire. This\n// file may be redistributed unmodified by any means PROVIDING it is \n// not sold for profit without the authors written consent, and \n// providing that this notice and the authors name is included. If \n// the source code in  this file is used in any commercial application \n// then acknowledgement must be made to the author of this file \n// (in whatever form you wish).\n//\n// This file is provided \"as is\" with no expressed or implied warranty.\n//\n// Expect bugs.\n// \n// Please use and enjoy. Please let me know of any bugs/mods/improvements \n// that you have found/implemented and I will fix/incorporate them into this\n// file. \n\n#ifndef _INCLUDED_SYSTEMTRAY_H_\n#define _INCLUDED_SYSTEMTRAY_H_\n\n#ifdef NOTIFYICONDATA_V1_SIZE   // If NOTIFYICONDATA_V1_SIZE, then we can use fun stuff\n#define SYSTEMTRAY_USEW2K\n#else\n#define NIIF_NONE 0\n#endif\n\n// #include <afxwin.h>\n#include <afxtempl.h>\n#include <afxdisp.h>    // COleDateTime\n\n#define SYSTRAY_TIPMSGSIZE 128\n\n/////////////////////////////////////////////////////////////////////////////\n// CSystemTray window\n\nclass CSystemTray : public CWnd\n{\n// Construction/destruction\npublic:\n    CSystemTray();\n    CSystemTray(CWnd* pWnd, UINT uCallbackMessage, LPCTSTR szTip, HICON icon, UINT uID, \n                BOOL bhidden = FALSE,\n                LPCTSTR szBalloonTip = NULL, LPCTSTR szBalloonTitle = NULL, \n                DWORD dwBalloonIcon = NIIF_NONE, UINT uBalloonTimeout = 10);\n    virtual ~CSystemTray();\n\n    DECLARE_DYNAMIC(CSystemTray)\n\n// Operations\npublic:\n    BOOL Enabled() { return m_bEnabled; }\n    BOOL Visible() { return !m_bHidden; }\n\n    // Create the tray icon\n    BOOL Create(CWnd* pParent, UINT uCallbackMessage, LPCTSTR szTip, HICON icon, UINT uID,\n                BOOL bHidden = FALSE,\n                LPCTSTR szBalloonTip = NULL, LPCTSTR szBalloonTitle = NULL, \n                DWORD dwBalloonIcon = NIIF_NONE, UINT uBalloonTimeout = 10);\n\n    // Change or retrieve the Tooltip text\n    BOOL    SetTooltipText(LPCTSTR pszTooltipText);\n    BOOL    SetTooltipText(UINT nID);\n    CString GetTooltipText() const;\n\n    // Change or retrieve the icon displayed\n    BOOL  SetIcon(HICON hIcon);\n    BOOL  SetIcon(LPCTSTR lpszIconName);\n    BOOL  SetIcon(UINT nIDResource);\n    BOOL  SetStandardIcon(LPCTSTR lpIconName);\n    BOOL  SetStandardIcon(UINT nIDResource);\n    HICON GetIcon() const;\n\n    void  SetFocus();\n    BOOL  HideIcon();\n    BOOL  ShowIcon();\n    BOOL  AddIcon();\n    BOOL  RemoveIcon();\n    BOOL  MoveToRight();\n\n    BOOL ShowBalloon(LPCTSTR szText, LPCTSTR szTitle = NULL,\n                     DWORD dwIcon = NIIF_NONE, UINT uTimeout = 10);\n\n    // For icon animation\n    BOOL  SetIconList(UINT uFirstIconID, UINT uLastIconID); \n    BOOL  SetIconList(HICON* pHIconList, UINT nNumIcons); \n    BOOL  Animate(UINT nDelayMilliSeconds, int nNumSeconds = -1);\n    BOOL  StepAnimation();\n    BOOL  StopAnimation();\n\n    // Change menu default item\n    void GetMenuDefaultItem(UINT& uItem, BOOL& bByPos);\n    BOOL SetMenuDefaultItem(UINT uItem, BOOL bByPos);\n\n    // Change or retrieve the window to send notification messages to\n    BOOL  SetNotificationWnd(CWnd* pNotifyWnd);\n    CWnd* GetNotificationWnd() const;\n\n    // Change or retrieve the window to send menu commands to\n    BOOL  SetTargetWnd(CWnd* pTargetWnd);\n    CWnd* GetTargetWnd() const;\n\n    // Change or retrieve  notification messages sent to the window\n    BOOL  SetCallbackMessage(UINT uCallbackMessage);\n    UINT  GetCallbackMessage() const;\n\n    UINT_PTR GetTimerID() const   { return m_nTimerID; }\n\n// Static functions\npublic:\n    static void MinimiseToTray(CWnd* pWnd, BOOL bForceAnimation = FALSE);\n    static void MaximiseFromTray(CWnd* pWnd, BOOL bForceAnimation = FALSE);\n\npublic:\n    // Default handler for tray notification message\n    virtual LRESULT OnTrayNotification(WPARAM uID, LPARAM lEvent);\n\n// Overrides\n    // ClassWizard generated virtual function overrides\n    //{{AFX_VIRTUAL(CSystemTray)\n\tprotected:\n\tvirtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n    void Initialise();\n    void InstallIconPending();\n\n\tvirtual void CustomizeMenu(CMenu*) {}\t// Used for customizing the menu\n\n// Implementation\nprotected:\n    NOTIFYICONDATA  m_tnd;\n    BOOL            m_bEnabled;         // does O/S support tray icon?\n    BOOL            m_bHidden;          // Has the icon been hidden?\n    BOOL            m_bRemoved;         // Has the icon been removed?\n    BOOL            m_bShowIconPending; // Show the icon once tha taskbar has been created\n    BOOL            m_bWin2K;           // Use new W2K features?\n\tCWnd*           m_pTargetWnd;       // Window that menu commands are sent\n\n    CArray<HICON, HICON> m_IconList;\n    UINT_PTR     m_uIDTimer;\n    INT_PTR      m_nCurrentIcon;\n    COleDateTime m_StartTime;\n    UINT         m_nAnimationPeriod;\n    HICON        m_hSavedIcon;\n    UINT         m_DefaultMenuItemID;\n    BOOL         m_DefaultMenuItemByPos;\n\tUINT         m_uCreationFlags;\n\n// Static data\nprotected:\n    static BOOL RemoveTaskbarIcon(CWnd* pWnd);\n\n    static const UINT m_nTimerID;\n    static UINT  m_nMaxTooltipLength;\n    static const UINT m_nTaskbarCreatedMsg;\n    static CWnd  m_wndInvisible;\n\n    static BOOL GetW2K();\n#ifndef _WIN32_WCE\n    static void GetTrayWndRect(LPRECT lprect);\n    static BOOL GetDoWndAnimation();\n#endif\n\n// Generated message map functions\nprotected:\n\t//{{AFX_MSG(CSystemTray)\n\tafx_msg void OnTimer(UINT nIDEvent);\n\t//}}AFX_MSG\n#ifndef _WIN32_WCE\n\tafx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection);\n#endif\n    LRESULT OnTaskbarCreated(WPARAM wParam, LPARAM lParam);\n    DECLARE_MESSAGE_MAP()\n};\n\n\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n"
  },
  {
    "path": "host/TabColor.cpp",
    "content": "// TabLogs.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"TargetDlg.h\"\n#include \"TabColor.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabColor dialog\n\nCTabColor::CTabColor(CWnd* pParent /*=NULL*/)\n\t: CDialog(CTabColor::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTabColor)\n\t\t// NOTE: the ClassWizard will add member initialization here\n\t//}}AFX_DATA_INIT\n}\n\nvoid CTabColor::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\tDDX_Check(pDX, IDC_INIT8BPP, cTarget->m_Init8BPP);\n\tDDX_Check(pDX, IDC_INIT16BPP, cTarget->m_Init16BPP);\n\tDDX_Check(pDX, IDC_DISABLEGAMMARAMP, cTarget->m_DisableGammaRamp);\n\tDDX_Check(pDX, IDC_FORCE16BPP, cTarget->m_Force16BPP);\n\tDDX_Check(pDX, IDC_WIREFRAME, cTarget->m_WireFrame);\n\tDDX_Check(pDX, IDC_BLACKWHITE, cTarget->m_BlackWhite);\n\tDDX_Check(pDX, IDC_USERGB565, cTarget->m_UseRGB565);\n\tDDX_Check(pDX, IDC_LOCKSYSCOLORS, cTarget->m_LockSysColors);\n}\n\nBEGIN_MESSAGE_MAP(CTabColor, CDialog)\n\t//{{AFX_MSG_MAP(CTabColor)\n\t\t// NOTE: the ClassWizard will add message map macros here\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabColor message handlers\n"
  },
  {
    "path": "host/TabColor.h",
    "content": "#if !defined(AFX_TABLOGS_H__7E062B52_3B6E_44C4_B58E_AAD73592C888__INCLUDED_)\n#define AFX_TABLOGS_H__7E062B52_3B6E_44C4_B58E_AAD73592C888__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n// TabColor.h : header file\n//\n#include \"resource.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabLogs dialog\n\nclass CTabColor : public CDialog\n{\n// Construction\npublic:\n\tCTabColor(CWnd* pParent = NULL);   // standard constructor\n\n// Dialog Data\n\t//{{AFX_DATA(CTabLogs)\n\tenum { IDD = IDD_TAB_LOG };\n\t\t// NOTE: the ClassWizard will add data members here\n\t//}}AFX_DATA\n\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CTabLogs)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\n\t// Generated message map functions\n\t//{{AFX_MSG(CTabLogs)\n\t\t// NOTE: the ClassWizard will add member functions here\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n};\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif\n"
  },
  {
    "path": "host/TabCompat.cpp",
    "content": "// TabDirectX.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"TargetDlg.h\"\n#include \"TabCompat.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabCompat dialog\n\nCTabCompat::CTabCompat(CWnd* pParent /*=NULL*/)\n//\t: CTargetDlg(pParent)\n\t: CDialog(CTabCompat::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTabCompat)\n\t\t// NOTE: the ClassWizard will add member initialization here\n\t//}}AFX_DATA_INIT\n}\n\nvoid CTabCompat::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\tDDX_Check(pDX, IDC_FAKEVERSION, cTarget->m_FakeVersion);\n\tDDX_LBIndex(pDX, IDC_LISTFAKE, cTarget->m_FakeVersionId);\n\tDDX_Check(pDX, IDC_SINGLEPROCAFFINITY, cTarget->m_SingleProcAffinity);\n\tDDX_Check(pDX, IDC_USELASTCORE, cTarget->m_UseLastCore);\n\tDDX_Check(pDX, IDC_HANDLEEXCEPTIONS, cTarget->m_HandleExceptions);\n\tDDX_Check(pDX, IDC_VIRTUALHEAP, cTarget->m_VirtualHeap);\n\tDDX_Check(pDX, IDC_LIMITRESOURCES, cTarget->m_LimitResources);\n\tDDX_Check(pDX, IDC_CDROMDRIVETYPE, cTarget->m_CDROMDriveType);\n\tDDX_Check(pDX, IDC_FONTBYPASS, cTarget->m_FontBypass);\n\tDDX_Check(pDX, IDC_BUFFEREDIOFIX, cTarget->m_BufferedIOFix);\n\tDDX_Check(pDX, IDC_NOPERFCOUNTER, cTarget->m_NoPerfCounter);\n\tDDX_Check(pDX, IDC_HIDECDROMEMPTY, cTarget->m_HideCDROMEmpty);\n\tDDX_Check(pDX, IDC_DIABLOTWEAK, cTarget->m_DiabloTweak);\n\tDDX_Check(pDX, IDC_EASPORTSHACK, cTarget->m_EASportsHack);\n\tDDX_Check(pDX, IDC_LEGACYALLOC, cTarget->m_LegacyAlloc);\n\tDDX_Check(pDX, IDC_DISABLEMAXWINMODE, cTarget->m_DisableMaxWinMode);\n\tDDX_Check(pDX, IDC_DISABLEDISABLEALTTAB, cTarget->m_DisableDisableAltTab);\n\tDDX_Check(pDX, IDC_NOIMAGEHLP, cTarget->m_NoImagehlp);\n\tDDX_Check(pDX, IDC_REPLACEPRIVOPS, cTarget->m_ReplacePrivOps);\n\tDDX_Check(pDX, IDC_BLOCKPRIORITYCLASS, cTarget->m_BlockPriorityClass);\n\tDDX_Check(pDX, IDC_COLORFIX, cTarget->m_ColorFix);\n\tDDX_Check(pDX, IDC_FIXGLOBALUNLOCK, cTarget->m_FixGlobalUnlock);\n\tDDX_Check(pDX, IDC_FIXFREELIBRARY, cTarget->m_FixFreeLibrary);\n\tDDX_Check(pDX, IDC_LOADLIBRARYERR, cTarget->m_LoadLibraryErr);\n\tDDX_Check(pDX, IDC_FIXADJUSTWINRECT, cTarget->m_FixAdjustWinRect);\n\tDDX_Check(pDX, IDC_PRETENDVISIBLE, cTarget->m_PretendVisible);\n\tDDX_Check(pDX, IDC_WININSULATION, cTarget->m_WinInsulation);\n\n\t// GOG patches\n\tDDX_Check(pDX, IDC_HOOKGOGLIBS, cTarget->m_HookGOGLibs);\n\tDDX_Check(pDX, IDC_BYPASSGOGLIBS, cTarget->m_BypassGOGLibs);\n}\n\nBEGIN_MESSAGE_MAP(CTabCompat, CDialog)\n\t//{{AFX_MSG_MAP(CTabCompat)\n\t\t// NOTE: the ClassWizard will add message map macros here\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabCompat message handlers\n\nstatic struct {char bMajor; char bMinor; char *sName;} WinVersions[9]=\n{\n\t{4, 0, \"Windows 95\"},\n\t{4,10, \"Windows 98/SE\"},\n\t{4,90, \"Windows ME\"},\n\t{5, 0, \"Windows 2000\"},\n\t{5, 1, \"Windows XP\"},\n\t{5, 2, \"Windows Server 2003\"},\n\t{6, 0, \"Windows Vista\"},\n\t{6, 1, \"Windows 7\"},\n\t{6, 2, \"Windows 8\"}\n};\n\nBOOL CTabCompat::OnInitDialog()\n{\n\tAfxEnableControlContainer();\n\tCListBox *List;\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\tint i;\n\tList=(CListBox *)this->GetDlgItem(IDC_LISTFAKE);\n\tList->ResetContent();\n\tfor(i=0; i<9; i++) List->AddString(WinVersions[i].sName);\n\tList->SetCurSel(cTarget->m_FakeVersion);\n\tCDialog::OnInitDialog();\n\treturn TRUE;\n}"
  },
  {
    "path": "host/TabCompat.h",
    "content": "#if !defined(AFX_TABCOMPAT_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n#define AFX_TABCOMPAT_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n// TabDirectX.h : header file\n//\n#include \"resource.h\"\n#include \"TargetDlg.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabDirectX dialog\n\n//class CTabCompat : public CTargetDlg\nclass CTabCompat : public CDialog\n{\n// Construction\npublic:\n\tCTabCompat(CWnd* pParent = NULL);   // standard constructor\n\n// Dialog Data\n\t//{{AFX_DATA(CTabDirectX)\n\tenum { IDD = IDD_TAB_COMPAT };\n\t\t// NOTE: the ClassWizard will add data members here\n\t//}}AFX_DATA\n\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CTabDirectX)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\tBOOL OnInitDialog();\n\n\t// Generated message map functions\n\t//{{AFX_MSG(CTabDirectX)\n\t\t// NOTE: the ClassWizard will add member functions here\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n};\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif // !defined(AFX_TABTHREE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n"
  },
  {
    "path": "host/TabDebug.cpp",
    "content": "// TabDebug.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"TargetDlg.h\"\n#include \"TabDebug.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabCompat dialog\n\nCTabDebug::CTabDebug(CWnd* pParent /*=NULL*/)\n//\t: CTargetDlg(pParent)\n\t: CDialog(CTabDebug::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTabDebug)\n\t\t// NOTE: the ClassWizard will add member initialization here\n\t//}}AFX_DATA_INIT\n}\n\nvoid CTabDebug::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\tDDX_Check(pDX, IDC_ASSERT, cTarget->m_AssertDialog);\n\tDDX_Check(pDX, IDC_MARKBLIT, cTarget->m_MarkBlit);\n\tDDX_Check(pDX, IDC_MARKLOCK, cTarget->m_MarkLock);\n\tDDX_Check(pDX, IDC_MARKWING32, cTarget->m_MarkWinG32);\n\tDDX_Check(pDX, IDC_MARKGDI32, cTarget->m_MarkGDI32);\n\tDDX_Check(pDX, IDC_DUMPDIBSECTION, cTarget->m_DumpDIBSection);\n\tDDX_Check(pDX, IDC_DUMPDEVCONTEXT, cTarget->m_DumpDevContext);\n\tDDX_Check(pDX, IDC_NOBLT, cTarget->m_NoBlt);\n\tDDX_Check(pDX, IDC_FASTBLT, cTarget->m_FastBlt);\n\tDDX_Check(pDX, IDC_GDICOLORCONV, cTarget->m_GDIColorConv);\n\tDDX_Check(pDX, IDC_ANALYTICMODE, cTarget->m_AnalyticMode);\n\tDDX_Check(pDX, IDC_SURFACEWARN, cTarget->m_SurfaceWarn);\n\tDDX_Check(pDX, IDC_CAPMASK, cTarget->m_CapMask);\n\tDDX_Check(pDX, IDC_NOWINDOWHOOKS, cTarget->m_NoWindowHooks);\n\tDDX_Check(pDX, IDC_NODDRAWBLT, cTarget->m_NoDDRAWBlt);\n\tDDX_Check(pDX, IDC_NODDRAWFLIP, cTarget->m_NoDDRAWFlip);\n\tDDX_Check(pDX, IDC_NOGDIBLT, cTarget->m_NoGDIBlt);\n\tDDX_Check(pDX, IDC_ZBUFFERALWAYS, cTarget->m_ZBufferAlways);\n\tDDX_Check(pDX, IDC_HOTPATCHALWAYS, cTarget->m_HotPatchAlways);\n\tDDX_Check(pDX, IDC_FREEZEINJECTEDSON, cTarget->m_FreezeInjectedSon);\n\tDDX_Check(pDX, IDC_STRESSRESOURCES, cTarget->m_StressResources);\n\tDDX_Check(pDX, IDC_FULLRECTBLT, cTarget->m_FullRectBlt);\n\tDDX_Check(pDX, IDC_CENTERTOWIN, cTarget->m_CenterToWin);\n//\tDDX_Check(pDX, IDC_NOSYSTEMMEMORY, cTarget->m_NoSystemMemory);\n}\n\nBEGIN_MESSAGE_MAP(CTabDebug, CDialog)\n\t//{{AFX_MSG_MAP(CTabCompat)\n\t\t// NOTE: the ClassWizard will add message map macros here\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabCompat message handlers\n\n\n"
  },
  {
    "path": "host/TabDebug.h",
    "content": "#if !defined(AFX_TABCOMPAT_H__12345678_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n#define AFX_TABCOMPAT_H__12345678_C906_446C_822D_322B5AB6C4C4__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n// TabDirectX.h : header file\n//\n#include \"resource.h\"\n#include \"TargetDlg.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabDirectX dialog\n\n//class CTabCompat : public CTargetDlg\nclass CTabDebug : public CDialog\n{\n// Construction\npublic:\n\tCTabDebug(CWnd* pParent = NULL);   // standard constructor\n\n// Dialog Data\n\t//{{AFX_DATA(CTabDirectX)\n\tenum { IDD = IDD_TAB_DEBUG };\n\t\t// NOTE: the ClassWizard will add data members here\n\t//}}AFX_DATA\n\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CTabDirectX)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\t//BOOL OnInitDialog();\n\n\t// Generated message map functions\n\t//{{AFX_MSG(CTabDirectX)\n\t\t// NOTE: the ClassWizard will add member functions here\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\npublic:\n};\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif // !defined(AFX_TABTHREE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n"
  },
  {
    "path": "host/TabDirect3D.cpp",
    "content": "// TabDirect3D.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"TargetDlg.h\"\n#include \"TabDirect3D.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabDirect3D dialog\n\nCTabDirect3D::CTabDirect3D(CWnd* pParent /*=NULL*/)\n\t: CDialog(CTabDirect3D::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTabDirect3D)\n\t\t// NOTE: the ClassWizard will add member initialization here\n\t//}}AFX_DATA_INIT\n}\n\nvoid CTabDirect3D::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\n\t// Direct3D tweaks\n\tDDX_Check(pDX, IDC_ZBUFFERCLEAN, cTarget->m_ZBufferClean);\n\tDDX_Check(pDX, IDC_ZBUFFER0CLEAN, cTarget->m_ZBuffer0Clean);\n\tDDX_Check(pDX, IDC_DYNAMICZCLEAN, cTarget->m_DynamicZClean);\n\tDDX_Check(pDX, IDC_ZBUFFERHARDCLEAN, cTarget->m_ZBufferHardClean);\n\tDDX_Check(pDX, IDC_NOPOWER2FIX, cTarget->m_NoPower2Fix);\n\tDDX_Check(pDX, IDC_NOD3DRESET, cTarget->m_NoD3DReset);\n\tDDX_Check(pDX, IDC_SUPPRESSD3DEXT, cTarget->m_SuppressD3DExt);\n\tDDX_Check(pDX, IDC_ENUM16BITMODES, cTarget->m_Enum16bitModes);\n\tDDX_Check(pDX, IDC_TRIMTEXTUREFORMATS, cTarget->m_TrimTextureFormats);\n\n\t// Direct3D window tweaks\n\tDDX_Check(pDX, IDC_FIXD3DFRAME, cTarget->m_FixD3DFrame);\n\tDDX_Check(pDX, IDC_NOWINDOWMOVE, cTarget->m_NoWindowMove);\n\n\t// Texture management\n\tDDX_Radio(pDX, IDC_TEXTURENONE, cTarget->m_TextureHandling);\n\tDDX_Radio(pDX, IDC_BMPFORMAT, cTarget->m_TextureFileFormat);\n\n\t// 3D Effects\n\tDDX_Check(pDX, IDC_NOTEXTURES, cTarget->m_NoTextures);\n\tDDX_Check(pDX, IDC_WIREFRAME, cTarget->m_WireFrame);\n\tDDX_Check(pDX, IDC_DISABLEFOGGING, cTarget->m_DisableFogging);\n\tDDX_Check(pDX, IDC_CLEARTARGET, cTarget->m_ClearTarget);\n\n\t// Swap Effect\n\tDDX_Check(pDX, IDC_FORCESWAPEFFECT, cTarget->m_ForcesSwapEffect);\n\tDDX_Radio(pDX, IDC_SWAP_DISCARD, cTarget->m_SwapEffect);\n\n\t// Emulations ....\n\tDDX_Check(pDX, IDC_D3D8BACK16, cTarget->m_D3D8Back16);\n}\n\nBEGIN_MESSAGE_MAP(CTabDirect3D, CDialog)\n\t//{{AFX_MSG_MAP(CTabDirect3D)\n\t\t// NOTE: the ClassWizard will add message map macros here\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabDirect3D message handlers\n\n"
  },
  {
    "path": "host/TabDirect3D.h",
    "content": "#if !defined(AFX_TabDirect3D_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n#define AFX_TabDirect3D_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n// TabDirect3D.h : header file\n//\n#include \"resource.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabDirect3D dialog\n\nclass CTabDirect3D : public CDialog\n{\n// Construction\npublic:\n\tCTabDirect3D(CWnd* pParent = NULL);   // standard constructor\n\n// Dialog Data\n\t//{{AFX_DATA(CTabDirect3D)\n\tenum { IDD = IDD_TAB_DIRECTX };\n\t\t// NOTE: the ClassWizard will add data members here\n\t//}}AFX_DATA\n\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CTabDirect3D)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\n\t// Generated message map functions\n\t//{{AFX_MSG(CTabDirect3D)\n\t\t// NOTE: the ClassWizard will add member functions here\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\npublic:\n};\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif\n"
  },
  {
    "path": "host/TabDirectX.cpp",
    "content": "// TabDirectX.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"TargetDlg.h\"\n#include \"TabDirectX.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabDirectX dialog\n\nCTabDirectX::CTabDirectX(CWnd* pParent /*=NULL*/)\n\t: CDialog(CTabDirectX::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTabDirectX)\n\t\t// NOTE: the ClassWizard will add member initialization here\n\t//}}AFX_DATA_INIT\n}\n\nvoid CTabDirectX::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\tDDX_Radio(pDX, IDC_AUTO, cTarget->m_DXVersion);\n\tDDX_Radio(pDX, IDC_NOEMULATESURFACE, cTarget->m_DxEmulationMode);\n\tDDX_Radio(pDX, IDC_DDRAWFILTER, cTarget->m_DxFilterMode);\n\tDDX_Check(pDX, IDC_BLITFROMBACKBUFFER, cTarget->m_BlitFromBackBuffer);\n\tDDX_Check(pDX, IDC_AUTOREFRESH, cTarget->m_AutoRefresh);\n\tDDX_Check(pDX, IDC_INDEPENDENTREFRESH, cTarget->m_IndependentRefresh);\n\tDDX_Check(pDX, IDC_TEXTUREFORMAT, cTarget->m_TextureFormat);\n\tDDX_Check(pDX, IDC_SUPPRESSRELEASE, cTarget->m_SuppressRelease);\n\tDDX_Check(pDX, IDC_VIDEOTOSYSTEMMEM, cTarget->m_VideoToSystemMem);\n\tDDX_Check(pDX, IDC_SUPPRESSDXERRORS, cTarget->m_SuppressDXErrors);\n\tDDX_Check(pDX, IDC_NOPALETTEUPDATE, cTarget->m_NoPaletteUpdate);\n\tDDX_Check(pDX, IDC_NOPIXELFORMAT, cTarget->m_NoPixelFormat);\n\tDDX_Check(pDX, IDC_NOALPHACHANNEL, cTarget->m_NoAlphaChannel);\n\tDDX_Check(pDX, IDC_NOFLIPEMULATION, cTarget->m_NoFlipEmulation);\n\tDDX_Check(pDX, IDC_OFFSCREENZBUFFER, cTarget->m_OffscreenZBuffer);\n\tDDX_Check(pDX, IDC_FLIPEMULATION, cTarget->m_FlipEmulation);\n\tDDX_Check(pDX, IDC_SETCOMPATIBILITY, cTarget->m_SetCompatibility);\n\tDDX_Check(pDX, IDC_AEROBOOST, cTarget->m_AEROBoost);\n\tDDX_Check(pDX, IDC_LOCKCOLORDEPTH, cTarget->m_LockColorDepth);\n}\n\nBEGIN_MESSAGE_MAP(CTabDirectX, CDialog)\n\t//{{AFX_MSG_MAP(CTabDirectX)\n\t\t// NOTE: the ClassWizard will add message map macros here\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabDirectX message handlers\n\n"
  },
  {
    "path": "host/TabDirectX.h",
    "content": "#if !defined(AFX_TABDIRECTX_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n#define AFX_TABDIRECTX_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n// TabDirectX.h : header file\n//\n#include \"resource.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabDirectX dialog\n\nclass CTabDirectX : public CDialog\n{\n// Construction\npublic:\n\tCTabDirectX(CWnd* pParent = NULL);   // standard constructor\n\n// Dialog Data\n\t//{{AFX_DATA(CTabDirectX)\n\tenum { IDD = IDD_TAB_DIRECTX };\n\t\t// NOTE: the ClassWizard will add data members here\n\t//}}AFX_DATA\n\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CTabDirectX)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\n\t// Generated message map functions\n\t//{{AFX_MSG(CTabDirectX)\n\t\t// NOTE: the ClassWizard will add member functions here\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\npublic:\n};\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif\n"
  },
  {
    "path": "host/TabDirectX2.cpp",
    "content": "// TabDirectX2.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"TargetDlg.h\"\n#include \"TabDirectX2.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabDirectX2 dialog\n\nCTabDirectX2::CTabDirectX2(CWnd* pParent /*=NULL*/)\n\t: CDialog(CTabDirectX2::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTabDirectX2)\n\t\t// NOTE: the ClassWizard will add member initialization here\n\t//}}AFX_DATA_INIT\n}\n\nvoid CTabDirectX2::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\n\t// Ddraw tweaks\n\tDDX_Check(pDX, IDC_NOSYSMEMPRIMARY, cTarget->m_NoSysMemPrimary);\n\tDDX_Check(pDX, IDC_NOSYSMEMBACKBUF, cTarget->m_NoSysMemBackBuf);\n\tDDX_Check(pDX, IDC_FIXPITCH, cTarget->m_FixPitch);\n\tDDX_Check(pDX, IDC_POWER2WIDTH, cTarget->m_Power2Width);\n\tDDX_Check(pDX, IDC_FIXREFCOUNTER, cTarget->m_FixRefCounter);\n\tDDX_Check(pDX, IDC_RETURNNULLREF, cTarget->m_ReturnNullRef);\n\tDDX_Check(pDX, IDC_FORCESHEL, cTarget->m_ForcesHEL);\n\tDDX_Check(pDX, IDC_NOHALDEVICE, cTarget->m_NoHALDevice);\n\tDDX_Check(pDX, IDC_MINIMALCAPS, cTarget->m_MinimalCaps);\n\tDDX_Check(pDX, IDC_SETZBUFFERBITDEPTHS, cTarget->m_SetZBufferBitDepths);\n\tDDX_Check(pDX, IDC_DEINTERLACE, cTarget->m_Deinterlace);\n\tDDX_Check(pDX, IDC_LIMITDDRAW, cTarget->m_LimitDdraw);\n\tDDX_Check(pDX, IDC_SUPPRESSOVERLAY, cTarget->m_SuppressOverlay);\n\tDDX_Check(pDX, IDC_BLACKWHITE, cTarget->m_BlackWhite);\n\tDDX_Check(pDX, IDC_USERGB565, cTarget->m_UseRGB565);\n\tDDX_CBIndex(pDX, IDC_DDWAWLIMITCOMBO, cTarget->m_MaxDdrawInterface);\n\tDDX_Check(pDX, IDC_BACKBUFATTACH, cTarget->m_BackBufAttach);\n\tDDX_Check(pDX, IDC_CLEARTEXTUREFOURCC, cTarget->m_ClearTextureFourCC);\n\tDDX_Check(pDX, IDC_NODDEXCLUSIVEMODE, cTarget->m_NoDDExclusiveMode);\n\tDDX_Check(pDX, IDC_CREATEDESKTOP, cTarget->m_CreateDesktop);\n\tDDX_Check(pDX, IDC_ALLOWSYSMEMON3DDEV, cTarget->m_AllowSysmemOn3DDev);\n\n\t// Vsync \n\t//DDX_Check(pDX, IDC_SAVELOAD, cTarget->m_SaveLoad);\n\t//DDX_Check(pDX, IDC_FORCEVSYNC, cTarget->m_ForceVSync);\n\t//DDX_Check(pDX, IDC_FORCENOVSYNC, cTarget->m_ForceNoVSync);\n\t//DDX_Check(pDX, IDC_FORCEWAIT, cTarget->m_ForceWait);\n\t//DDX_Check(pDX, IDC_FORCENOWAIT, cTarget->m_ForceNoWait);\n\tDDX_Radio(pDX, IDC_VSYNCDEFAULT, cTarget->m_VSyncMode);\n\tDDX_Radio(pDX, IDC_WAITDEFAULT, cTarget->m_WaitMode);\n\tDDX_Radio(pDX, IDC_VSYNCHW, cTarget->m_VSyncImpl);\n\tDDX_Text(pDX, IDC_SCANLINE, cTarget->m_ScanLine);\n\n\t// Clipper\n\tDDX_Radio(pDX, IDC_CLIPPERNONE, cTarget->m_ClipperMode);\n\n}\n\nBEGIN_MESSAGE_MAP(CTabDirectX2, CDialog)\n\t//{{AFX_MSG_MAP(CTabDirectX2)\n\t\t// NOTE: the ClassWizard will add message map macros here\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabDirectX2 message handlers\n\n"
  },
  {
    "path": "host/TabDirectX2.h",
    "content": "#if !defined(AFX_TabDirectX2_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n#define AFX_TabDirectX2_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n// TabDirect3D.h : header file\n//\n#include \"resource.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabDirectX2 dialog\n\nclass CTabDirectX2 : public CDialog\n{\n// Construction\npublic:\n\tCTabDirectX2(CWnd* pParent = NULL);   // standard constructor\n\n// Dialog Data\n\t//{{AFX_DATA(CTabDirectX2)\n\tenum { IDD = IDD_TAB_DIRECTX };\n\t\t// NOTE: the ClassWizard will add data members here\n\t//}}AFX_DATA\n\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CTabDirectX2)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\n\t// Generated message map functions\n\t//{{AFX_MSG(CTabDirectX2)\n\t\t// NOTE: the ClassWizard will add member functions here\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\npublic:\n};\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif\n"
  },
  {
    "path": "host/TabHook.cpp",
    "content": "// TabHook.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"TargetDlg.h\"\n#include \"TabHook.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabHook dialog\n\nCTabHook::CTabHook(CWnd* pParent /*=NULL*/)\n//\t: CTargetDlg(pParent)\n\t: CDialog(CTabHook::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTabHook)\n\t\t// NOTE: the ClassWizard will add member initialization here\n\t//}}AFX_DATA_INIT\n}\n\nvoid CTabHook::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\tDDX_Text(pDX, IDC_MODULE, cTarget->m_Module);\n\tDDX_Text(pDX, IDC_STARTFOLDER, cTarget->m_StartFolder);\n\tDDX_Check(pDX, IDC_HOOKENABLED, cTarget->m_HookEnabled);\n\tDDX_Radio(pDX, IDC_INJECT_WINDOWSHOOK, cTarget->m_InjectionMode);\n\tDDX_Check(pDX, IDC_HOTPATCH, cTarget->m_HotPatch);\n\tDDX_Check(pDX, IDC_HOOKDLLS, cTarget->m_HookDLLs);\n\tDDX_Check(pDX, IDC_ANSIWIDE, cTarget->m_AnsiWide);\n\tDDX_Check(pDX, IDC_HOOKNORUN, cTarget->m_HookNoRun);\n\tDDX_Check(pDX, IDC_COPYNOSHIMS, cTarget->m_CopyNoShims);\n\tDDX_Check(pDX, IDC_HOOKNOUPDATE, cTarget->m_HookNoUpdate);\n\tDDX_Check(pDX, IDC_SEQUENCEDIAT, cTarget->m_SequencedIAT);\n\tDDX_Check(pDX, IDC_HOOKCHILDWIN, cTarget->m_HookChildWin);\n\tDDX_Check(pDX, IDC_HOOKDLGWIN, cTarget->m_HookDlgWin);\n\n\t// Kernel32\n\tDDX_Radio(pDX, IDC_SONDEFAULT, cTarget->m_SonProcessMode);\n\n\t// additional hooks\n\tDDX_Check(pDX, IDC_HOOKDIRECTSOUND, cTarget->m_HookDirectSound);\n\tDDX_Check(pDX, IDC_HOOKWING32, cTarget->m_HookWinG32);\n\tDDX_Check(pDX, IDC_HOOKGLIDE, cTarget->m_HookGlide);\n}\n\nBEGIN_MESSAGE_MAP(CTabHook, CDialog)\n\t//{{AFX_MSG_MAP(CTabHook)\n\t\t// NOTE: the ClassWizard will add message map macros here\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabHook message handlers\n"
  },
  {
    "path": "host/TabHook.h",
    "content": "#if !defined(AFX_TABMOUSE_H__12345678_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n#define AFX_TABMOUSE_H__12345678_C906_446C_822D_322B5AB6C4C4__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n// TabHook.h : header file\n//\n#include \"resource.h\"\n#include \"TargetDlg.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabHook dialog\n\n//class CTabHook : public CTargetDlg\nclass CTabHook : public CDialog\n{\n// Construction\npublic:\n\tCTabHook(CWnd* pParent = NULL);   // standard constructor\n\n// Dialog Data\n\t//{{AFX_DATA(CTabDirectX)\n\tenum { IDD = IDD_TAB_HOOK };\n\t\t// NOTE: the ClassWizard will add data members here\n\t//}}AFX_DATA\n\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CTabDirectX)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\n\t// Generated message map functions\n\t//{{AFX_MSG(CTabDirectX)\n\t\t// NOTE: the ClassWizard will add member functions here\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n};\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif // !defined(AFX_TABTHREE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n"
  },
  {
    "path": "host/TabInput.cpp",
    "content": "// TabInput.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"TargetDlg.h\"\n#include \"TabInput.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabInput dialog\n\nCTabInput::CTabInput(CWnd* pParent /*=NULL*/)\n//\t: CTargetDlg(pParent)\n\t: CDialog(CTabInput::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTabInput)\n\t\t// NOTE: the ClassWizard will add member initialization here\n\t//}}AFX_DATA_INIT\n}\n\nvoid CTabInput::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\t// Cursor Visibility \n\tDDX_Radio(pDX, IDC_CURSORAUTOMATIC, cTarget->m_MouseVisibility);\n\t// Cursor Handling\n\tDDX_Check(pDX, IDC_MODIFYMOUSE, cTarget->m_ModifyMouse);\n\t//DDX_Check(pDX, IDC_DISABLECLIPPING, cTarget->m_EnableClipping);\n\t//DDX_Check(pDX, IDC_CLIPCURSOR, cTarget->m_CursorClipping);\n\tDDX_Check(pDX, IDC_KEEPCURSORWITHIN, cTarget->m_KeepCursorWithin);\n\tDDX_Check(pDX, IDC_KEEPCURSORFIXED, cTarget->m_KeepCursorFixed);\n\tDDX_Check(pDX, IDC_MESSAGEPROC, cTarget->m_MessageProc);\n\tDDX_Check(pDX, IDC_FIXMOUSEHOOK, cTarget->m_FixMouseHook);\n\tDDX_Check(pDX, IDC_FIXNCHITTEST, cTarget->m_FixNCHITTEST);\n\tDDX_Check(pDX, IDC_SLOW, cTarget->m_SlowDown);\n\tDDX_Check(pDX, IDC_RELEASEMOUSE, cTarget->m_ReleaseMouse);\n\tDDX_Check(pDX, IDC_VIRTUALJOYSTICK, cTarget->m_VirtualJoystick);\n\t// Cursor Clipper\n\tDDX_Radio(pDX, IDC_CLIPPERAUTO, cTarget->m_MouseClipper);\n\tDDX_Check(pDX, IDC_CLIPMENU, cTarget->m_ClipMenu);\n\t// DirectInput\n\tDDX_Check(pDX, IDC_HOOKDI, cTarget->m_HookDI);\n\tDDX_Check(pDX, IDC_HOOKDI8, cTarget->m_HookDI8);\n\tDDX_Check(pDX, IDC_UNACQUIRE, cTarget->m_Unacquire);\n\tDDX_Check(pDX, IDC_EMULATERELMOUSE, cTarget->m_EmulateRelMouse);\n\tDDX_Check(pDX, IDC_SKIPDEVTYPEHID, cTarget->m_SkipDevTypeHID);\n\tDDX_Check(pDX, IDC_SUPPRESSDIERRORS, cTarget->m_SuppressDIErrors);\n\tDDX_Check(pDX, IDC_SHAREDKEYBOARD, cTarget->m_SharedKeyboard);\n\t// Message processing\n\tDDX_Radio(pDX, IDC_PROCESSALLMESSAGES, cTarget->m_OffendingMessages);\n\t//DDX_Check(pDX, IDC_FILTERMESSAGES, cTarget->m_FilterMessages);\n\tDDX_Check(pDX, IDC_PEEKALLMESSAGES, cTarget->m_PeekAllMessages);\n\tDDX_Check(pDX, IDC_NOWINPOSCHANGES, cTarget->m_NoWinPosChanges);\n\tDDX_Check(pDX, IDC_MESSAGEPUMP, cTarget->m_MessagePump);\n\t// Keyboard handling\n\tDDX_Check(pDX, IDC_ENABLEHOTKEYS, cTarget->m_EnableHotKeys);\n\tDDX_Check(pDX, IDC_HANDLEALTF4, cTarget->m_HandleAltF4);\n}\n\nBEGIN_MESSAGE_MAP(CTabInput, CDialog)\n\t//{{AFX_MSG_MAP(CTabInput)\n\t\t// NOTE: the ClassWizard will add message map macros here\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabInput message handlers\n"
  },
  {
    "path": "host/TabInput.h",
    "content": "#if !defined(AFX_TABMOUSE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n#define AFX_TABMOUSE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n// TabDirectX.h : header file\n//\n#include \"resource.h\"\n#include \"TargetDlg.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabDirectX dialog\n\n//class CTabInput : public CTargetDlg\nclass CTabInput : public CDialog\n{\n// Construction\npublic:\n\tCTabInput(CWnd* pParent = NULL);   // standard constructor\n\n// Dialog Data\n\t//{{AFX_DATA(CTabDirectX)\n\tenum { IDD = IDD_TAB_INPUT };\n\t\t// NOTE: the ClassWizard will add data members here\n\t//}}AFX_DATA\n\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CTabDirectX)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\n\t// Generated message map functions\n\t//{{AFX_MSG(CTabDirectX)\n\t\t// NOTE: the ClassWizard will add member functions here\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n};\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif // !defined(AFX_TABTHREE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n"
  },
  {
    "path": "host/TabLogs.cpp",
    "content": "// TabLogs.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"TargetDlg.h\"\n#include \"TabLogs.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabLogs dialog\n\nCTabLogs::CTabLogs(CWnd* pParent /*=NULL*/)\n\t: CDialog(CTabLogs::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTabLogs)\n\t\t// NOTE: the ClassWizard will add member initialization here\n\t//}}AFX_DATA_INIT\n}\n\n//BOOL CTabLogs::OnInitDialog()\n//{\n//\textern BOOL gbDebug;\n//\tCDialog::OnInitDialog();\n//\t(CButton *)(this->GetDlgItem(IDC_ASSERT))->EnableWindow(gbDebug ? TRUE : FALSE);\n//\treturn TRUE;\n//}\n\nvoid CTabLogs::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\t//extern BOOL gbDebug;\n\tDDX_Radio(pDX, IDC_LOG_NONE, cTarget->m_LogMode);\n\n\tDDX_Check(pDX, IDC_OUTD3DTRACE, cTarget->m_OutD3DTrace);\n\tDDX_Check(pDX, IDC_OUTDDRAWTRACE, cTarget->m_OutDDRAWTrace);\n\tDDX_Check(pDX, IDC_OUTDEBUG, cTarget->m_OutDebug);\n\tDDX_Check(pDX, IDC_CURSORTRACE, cTarget->m_CursorTrace);\n\t//DDX_Check(pDX, IDC_LOGENABLED, cTarget->m_LogEnabled);\n\tDDX_Check(pDX, IDC_OUTDEBUGSTRING, cTarget->m_OutDebugString);\n\t//DDX_Check(pDX, IDC_ERASELOGFILE, cTarget->m_EraseLogFile);\n\tDDX_Check(pDX, IDC_ADDTIMESTAMP, cTarget->m_AddTimeStamp);\n\tDDX_Check(pDX, IDC_ADDRELATIVETIME, cTarget->m_AddRelativeTime);\n\tDDX_Check(pDX, IDC_OUTWINMESSAGES, cTarget->m_OutWinMessages);\n\tDDX_Check(pDX, IDC_OUTDWTRACE, cTarget->m_OutDWTrace);\n\tDDX_Check(pDX, IDC_IMPORTTABLE, cTarget->m_ImportTable);\n\tDDX_Check(pDX, IDC_OUTREGISTRY, cTarget->m_RegistryOp);\n\tDDX_Check(pDX, IDC_TRACEHOOKS, cTarget->m_TraceHooks);\n\tDDX_Check(pDX, IDC_OUTOGLTRACE, cTarget->m_OutOGLTrace);\n\tDDX_Check(pDX, IDC_OUTWGTRACE, cTarget->m_OutWGTrace);\n\tDDX_Check(pDX, IDC_OUTHEXTRACE, cTarget->m_OutHexTrace);\n}\n\nBEGIN_MESSAGE_MAP(CTabLogs, CDialog)\n\t//{{AFX_MSG_MAP(CTabLogs)\n\t\t// NOTE: the ClassWizard will add message map macros here\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabLogs message handlers\n"
  },
  {
    "path": "host/TabLogs.h",
    "content": "#if !defined(AFX_TABLOGS_H__7E062B52_3B6E_44C4_B58E_AAD73592C8E3__INCLUDED_)\n#define AFX_TABLOGS_H__7E062B52_3B6E_44C4_B58E_AAD73592C8E3__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n// TabLogs.h : header file\n//\n#include \"resource.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabLogs dialog\n\nclass CTabLogs : public CDialog\n{\n// Construction\npublic:\n\tCTabLogs(CWnd* pParent = NULL);   // standard constructor\n\t//virtual BOOL OnInitDialog();\n\n// Dialog Data\n\t//{{AFX_DATA(CTabLogs)\n\tenum { IDD = IDD_TAB_LOG };\n\t\t// NOTE: the ClassWizard will add data members here\n\t//}}AFX_DATA\n\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CTabLogs)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\n\t// Generated message map functions\n\t//{{AFX_MSG(CTabLogs)\n\t\t// NOTE: the ClassWizard will add member functions here\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n};\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif\n"
  },
  {
    "path": "host/TabNotes.cpp",
    "content": "// TabNotes.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"TargetDlg.h\"\n#include \"TabNotes.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabNotes dialog\n\nCTabNotes::CTabNotes(CWnd* pParent /*=NULL*/)\n//\t: CTargetDlg(pParent)\n\t: CDialog(CTabNotes::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTabNotes)\n\t\t// NOTE: the ClassWizard will add member initialization here\n\t//}}AFX_DATA_INIT\n}\n\nvoid CTabNotes::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\tDDX_Text(pDX, IDC_NOTES, cTarget->m_Notes);\n}\n\nBEGIN_MESSAGE_MAP(CTabNotes, CDialog)\n\t//{{AFX_MSG_MAP(CTabNotes)\n\t\t// NOTE: the ClassWizard will add message map macros here\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabNotes message handlers\n\n\n//BOOL CTabNotes::OnInitDialog()\n//{\n//\tAfxEnableControlContainer();\n//\tCListBox *List;\n//\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n//\tint i;\n//\tList=(CListBox *)this->GetDlgItem(IDC_LISTFAKE);\n//\tList->ResetContent();\n//\tfor(i=0; i<9; i++) List->AddString(WinVersions[i].sName);\n//\tList->SetCurSel(cTarget->m_FakeVersion);\n//\tCDialog::OnInitDialog();\n//\treturn TRUE;\n//}"
  },
  {
    "path": "host/TabNotes.h",
    "content": "#if !defined(AFX_TABNOTES_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n#define AFX_TABNOTES_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_\n\n#include \"resource.h\"\n#include \"TargetDlg.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabNotes dialog\n\n//class CTabNotes : public CTargetDlg\nclass CTabNotes : public CDialog\n{\n// Construction\npublic:\n\tCTabNotes(CWnd* pParent = NULL);   // standard constructor\n\n// Dialog Data\n\t//{{AFX_DATA(CTabDirectX)\n\tenum { IDD = IDD_TAB_NOTES };\n\t\t// NOTE: the ClassWizard will add data members here\n\t//}}AFX_DATA\n\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CTabDirectX)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\t//BOOL OnInitDialog();\n\n\t// Generated message map functions\n\t//{{AFX_MSG(CTabDirectX)\n\t\t// NOTE: the ClassWizard will add member functions here\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n};\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif // !defined(AFX_TABTHREE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n"
  },
  {
    "path": "host/TabOpenGL.cpp",
    "content": "// TabOpenGL.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"TargetDlg.h\"\n#include \"TabOpenGL.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabOpenGL dialog\n\nCTabOpenGL::CTabOpenGL(CWnd* pParent /*=NULL*/)\n\t: CDialog(CTabOpenGL::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTabOpenGL)\n\t\t// NOTE: the ClassWizard will add member initialization here\n\t//}}AFX_DATA_INIT\n}\n\nvoid CTabOpenGL::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\tDDX_Check(pDX, IDC_HOOKOPENGL, cTarget->m_HookOpenGL);\n\tDDX_Check(pDX, IDC_FORCEHOOKOPENGL, cTarget->m_ForceHookOpenGL);\n\tDDX_Text(pDX, IDC_OPENGLLIB, cTarget->m_OpenGLLib);\n}\n\nBOOL CTabOpenGL::OnInitDialog()\n{\n\tAfxEnableControlContainer();\n\tCDialog::OnInitDialog();\n\treturn TRUE;\n}\n\n\nBEGIN_MESSAGE_MAP(CTabOpenGL, CDialog)\n\t//{{AFX_MSG_MAP(CTabOpenGL)\n\t\t// NOTE: the ClassWizard will add message map macros here\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabOpenGL message handlers\n"
  },
  {
    "path": "host/TabOpenGL.h",
    "content": "#if !defined(AFX_TABOPENGL_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n#define AFX_TABOPENGL_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n// TabOpenGL.h : header file\n//\n#include \"resource.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabOpenGL dialog\n\nclass CTabOpenGL : public CDialog\n{\n// Construction\npublic:\n\tCTabOpenGL(CWnd* pParent = NULL);   // standard constructor\n\tBOOL OnInitDialog();\n\n// Dialog Data\n\t//{{AFX_DATA(CTabOpenGL)\n\tenum { IDD = IDD_TAB_SYSLIBS };\n\t\t// NOTE: the ClassWizard will add data members here\n\t//}}AFX_DATA\n\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CTabOpenGL)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\n\t// Generated message map functions\n\t//{{AFX_MSG(CTabOpenGL)\n\t\t// NOTE: the ClassWizard will add member functions here\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n};\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif "
  },
  {
    "path": "host/TabProgram.cpp",
    "content": "// TabProgram.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"shlwapi.h\"\n#include \"TargetDlg.h\"\n#include \"TabProgram.h\"\n#include \"dxwndhost.h\"\n#include \"specialedit.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n// return TRUE if the path is a valid existing directory, FALSE otherwise\nstatic BOOL dirExists(char *path)\n{\n\tDWORD ftyp = GetFileAttributesA(path);\n\tif (ftyp == INVALID_FILE_ATTRIBUTES) return FALSE;  //something is wrong with your path!\n\tif (ftyp & FILE_ATTRIBUTE_DIRECTORY) return TRUE;   // this is a directory!\n\treturn false;    // this is not a directory!\n}\n\n// Restores the window highlighted by HighlightFoundWindow\nstatic long RefreshWindow(HWND hwndWindowToBeRefreshed)\n{\n\tlong lRet = 0;\n\tInvalidateRect (hwndWindowToBeRefreshed, NULL, TRUE);\n\tUpdateWindow (hwndWindowToBeRefreshed);\n\tRedrawWindow (hwndWindowToBeRefreshed, NULL, NULL, RDW_FRAME | RDW_INVALIDATE | RDW_UPDATENOW | RDW_ALLCHILDREN);\n\treturn lRet;\n}\n\n// Performs a highlighting of a found window.\nstatic long HighlightFoundWindow (HWND hwndFoundWindow)\n{\n\tHDC\t\thWindowDC = NULL;\t// The DC of the found window.\n\tHGDIOBJ\thPrevPen = NULL;\t// Handle of the existing pen in the DC of the found window.\n\tHGDIOBJ\thPrevBrush = NULL;\t// Handle of the existing brush in the DC of the found window.\n\tRECT rect;\t\t\t\t\t// Rectangle area of the found window.\n\tlong lRet = 0;\n\tstatic HPEN\tg_hRectanglePen = NULL;\n\n\t// Get the screen coordinates of the rectangle of the found window.\n\tGetWindowRect (hwndFoundWindow, &rect);\n\n\t// Get the window DC of the found window.\n\thWindowDC = GetWindowDC (hwndFoundWindow);\n\n\tif (g_hRectanglePen == NULL){\n\t\tg_hRectanglePen = CreatePen(PS_SOLID, 5, RGB(255,0,0));\n\t}\n\n\tif (hWindowDC){\n\t\t// Select our created pen into the DC and backup the previous pen.\n\t\thPrevPen = SelectObject (hWindowDC, g_hRectanglePen);\n\n\t\t// Select a transparent brush into the DC and backup the previous brush.\n\t\thPrevBrush = SelectObject (hWindowDC, GetStockObject(HOLLOW_BRUSH));\n\t\t//hPrevBrush = SelectObject (hWindowDC, GetStockObject(LTGRAY_BRUSH));\n\n\t\t// Draw a rectangle in the DC covering the entire window area of the found window.\n\t\tRectangle (hWindowDC, 0, 0, rect.right - rect.left, rect.bottom - rect.top);\n\n\t\t// Reinsert the previous pen and brush into the found window's DC.\n\t\tSelectObject (hWindowDC, hPrevPen);\n\t\tSelectObject (hWindowDC, hPrevBrush);\n\n\t\t// Finally release the DC.\n\t\tReleaseDC (hwndFoundWindow, hWindowDC);\n\t}\n\n\treturn lRet;\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabProgram dialog\n\nCTabProgram::CTabProgram(CWnd* pParent /*=NULL*/)\n\t: CDialog(CTabProgram::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTabProgram)\n\t\t// NOTE: the ClassWizard will add member initialization here\n\t//}}AFX_DATA_INIT\n}\n\nvoid CTabProgram::DoDataExchange(CDataExchange* pDX)\n{\n\tCString sPosX, sPosY;\n\tCDialog::DoDataExchange(pDX);\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\tsPosX.Format(\"%d\", cTarget->m_PosX);\n\tsPosY.Format(\"%d\", cTarget->m_PosY);\n\tDDX_Radio(pDX, IDC_COORDINATES, cTarget->m_Coordinates);\n\tDDX_Control(pDX, IDC_FILE, cTarget->m_File);\n\tDDX_Control(pDX, IDC_LAUNCH, cTarget->m_Launch);\n\tDDX_Text(pDX, IDC_FILE, cTarget->m_FilePath);\n\tDDX_Text(pDX, IDC_LAUNCH, cTarget->m_LaunchPath);\n\tDDX_Text(pDX, IDC_TITLE, cTarget->m_Title);\n\tDDX_Check(pDX, IDC_NEEDADMINCAPS, cTarget->m_NeedAdminCaps);\n\tDDX_Check(pDX, IDC_UNNOTIFY, cTarget->m_UnNotify);\n\tDDX_Check(pDX, IDC_WINDOWIZE, cTarget->m_Windowize);\n\tDDX_Check(pDX, IDC_CONFIRMONCLOSE, cTarget->m_ConfirmOnClose);\n\tDDX_Check(pDX, IDC_TERMINATEONCLOSE, cTarget->m_TerminateOnClose);\n\tDDX_Check(pDX, IDC_FULLSCREENONLY, cTarget->m_FullScreenOnly);\n\tDDX_Check(pDX, IDC_SHOWHINTS, cTarget->m_ShowHints);\n\tDDX_Check(pDX, IDC_BACKGROUNDPRIORITY, cTarget->m_BackgroundPriority);\n\tDDX_Check(pDX, IDC_KEEPASPECTRATIO, cTarget->m_KeepAspectRatio);\n\tDDX_Check(pDX, IDC_NOBANNER, cTarget->m_NoBanner);\n\tDDX_Check(pDX, IDC_HIDEDESKTOP, cTarget->m_HideDesktop);\n\tDDX_CBIndex(pDX, IDC_MONITOR_ID, cTarget->m_MonitorId);\n\tDDX_Text(pDX, IDC_POSX, sPosX);\n\tDDX_Text(pDX, IDC_POSY, sPosY);\n\tDDX_Text(pDX, IDC_SIZX, cTarget->m_SizX);\n\tDDX_Text(pDX, IDC_SIZY, cTarget->m_SizY);\n\tcTarget->m_PosX = atoi(sPosX);\n\tcTarget->m_PosY = atoi(sPosY);\n}\n\nBEGIN_MESSAGE_MAP(CTabProgram, CDialog)\n\t//{{AFX_MSG_MAP(CTabProgram)\n\t// NOTE: the ClassWizard will add message map macros here\n\tON_BN_CLICKED(IDC_OPEN, OnOpen)\n\tON_BN_CLICKED(IDC_OPENLAUNCH, OnOpenLaunch)\n\tON_WM_DROPFILES()\n\t//}}AFX_MSG_MAP\n\tON_STN_CLICKED(IDC_REGISTRY, &CTabProgram::OnStnClickedRegistry)\n\tON_STN_CLICKED(IDC_NOTES, &CTabProgram::OnStnClickedNotes)\n\tON_STN_CLICKED(IDC_XYPICK, &CTabProgram::OnStnClickedXYPick)\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabProgram message handlers\n\nextern void GetFolderFromPath(char *);\n\nBOOL IsWinXP()\n{\n\tOSVERSIONINFO osvi;\n\tZeroMemory(&osvi, sizeof(OSVERSIONINFO));\n\tosvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);\n\tGetVersionEx(&osvi);\n\treturn osvi.dwMajorVersion == 5;\n}\n\nvoid CTabProgram::OnOpen() \n{\n    char path[MAX_PATH];\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\tcTarget->m_File.GetWindowText(path, MAX_PATH);\n\tGetPrivateProfileString(\"window\", \"exepath\", NULL, path, MAX_PATH, gInitPath);\n\tif(!dirExists(path)) strcpy(path, \"\");\n\t// XP fix: path must end with '\\.' \n\tif(IsWinXP()) if((strlen(path) > 2) && (path[strlen(path)-1] == '\\\\')) strcat(path, \".\");\n\twhile(TRUE){\n\t\tint ret;\n\t\tCFileDialog dlg( TRUE, \"*.*\", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,\n\t\t\t\"Program (*.exe)|*.exe|All Files (*.*)|*.*||\",  this);\n\t\tret = dlg.DoModal();\n\t\t//char debug[512];\n\t\t//sprintf(debug, \"ret=%x path=%s\", ret, path);\n\t\t//MessageBox(debug, \"debug\", MB_OK);\n\t\tif(ret==IDOK){ \n\t\t\tcTarget->m_File.SetWindowText(dlg.GetPathName());\n\t\t\tif(GetPrivateProfileInt(\"window\", \"updatepaths\", 1, gInitPath)){\n\t\t\t\tstrcpy(path, dlg.GetPathName());\n\t\t\t\tGetFolderFromPath(path);\n\t\t\t\tWritePrivateProfileString(\"window\", \"exepath\", path, gInitPath);\n\t\t\t}\t\n\t\t\tbreak;\n\t\t}\n\t\tif(ret==IDCANCEL) break;\n\t\t//else\n\t\tstrcpy(path,\"\");\n\t}\n}\n\nvoid CTabProgram::OnOpenLaunch() \n{\n    char path[MAX_PATH];\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\tcTarget->m_File.GetWindowText(path, MAX_PATH);\n\tGetPrivateProfileString(\"window\", \"exepath\", NULL, path, MAX_PATH, gInitPath);\n\tif(!dirExists(path)) strcpy(path, \"\");\n\t// XP fix: path must end with '\\.' \n\tif(IsWinXP()) if((strlen(path) > 2) && (path[strlen(path)-1] == '\\\\')) strcat(path, \".\");\n\twhile(TRUE){\n\t\tint ret;\n\t\tCFileDialog dlg( TRUE, \"*.*\", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,\n\t\t\t\"Program (*.exe)|*.exe|All Files (*.*)|*.*||\",  this);\n\t\tret = dlg.DoModal();\n\t\t//char debug[512];\n\t\t//sprintf(debug, \"ret=%x path=%s\", ret, path);\n\t\t//MessageBox(debug, \"debug\", MB_OK);\n\t\tif(ret==IDOK){ \n\t\t\tcTarget->m_Launch.SetWindowText(dlg.GetPathName());\n\t\t\tif(GetPrivateProfileInt(\"window\", \"updatepaths\", 1, gInitPath)){\n\t\t\t\tstrcpy(path, dlg.GetPathName());\n\t\t\t\tGetFolderFromPath(path);\n\t\t\t\tWritePrivateProfileString(\"window\", \"exepath\", path, gInitPath);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tif(ret==IDCANCEL) break;\n\t\t//else\n\t\tstrcpy(path,\"\");\n\t}\n}\n\nvoid CTabProgram::OnDropFiles(HDROP dropInfo)\n{\n\tCString sFile;\n\tDWORD nBuffer = 0;\n\t// Get number of files\n\tUINT nFilesDropped = DragQueryFile(dropInfo, 0xFFFFFFFF, NULL, 0);\n\tif(nFilesDropped > 0){\n\t\tnBuffer = DragQueryFile(dropInfo, 0, NULL, 0);\n\t\tDragQueryFile(dropInfo, 0, sFile.GetBuffer(nBuffer+1), nBuffer+1);\n\t\t//CTargetDlg *pDlg = (CTargetDlg *)this->GetParent()->GetParent();\n\t\t//pDlg->m_FilePath = sFile;\n\t\tCDragEdit *pEditFile = (CDragEdit *)this->GetDlgItem(IDC_FILE);\n\t\tpEditFile->SetWindowTextA(sFile.GetBuffer());\n\t\t//MessageBox(sFile.GetBuffer(), \"debug\", 0);\n\t\tsFile.ReleaseBuffer();\n\t}\n\tDragFinish(dropInfo);\n}\n\n#include <windows.h>\n#include <tchar.h>\n#include <stdio.h>\n\nvoid _tmain(int argc, TCHAR *argv[])\n{\n   WIN32_FIND_DATA FindFileData;\n   HANDLE hFind;\n\n   if( argc != 2 )\n   {\n      _tprintf(TEXT(\"Usage: %s [target_file]\\n\"), argv[0]);\n      return;\n   }\n\n   _tprintf (TEXT(\"Target file is %s\\n\"), argv[1]);\n   hFind = FindFirstFile(argv[1], &FindFileData);\n   if (hFind == INVALID_HANDLE_VALUE) \n   {\n      printf (\"FindFirstFile failed (%d)\\n\", GetLastError());\n      return;\n   } \n   else \n   {\n      _tprintf (TEXT(\"The first file found is %s\\n\"), \n                FindFileData.cFileName);\n      FindClose(hFind);\n   }\n}\n\n\n\nBOOL CTabProgram::OnInitDialog()\n{\n\tHINSTANCE Hinst;\n\tHICON Icon, PrevIcon;\n\tCStatic *IconBox;\n\tIFormat *m_pRelIntegerFormat = new(RelIntegerFormat);\n\n\tDragAcceptFiles();\n\tCDragEdit *pEditFile;\n\tpEditFile = (CDragEdit *)this->GetDlgItem(IDC_FILE);\n\tpEditFile->DragAcceptFiles();\n\tpEditFile = (CDragEdit *)this->GetDlgItem(IDC_LAUNCH);\n\tpEditFile->DragAcceptFiles();\n\t//m_File.DragAcceptFiles();\n\t//m_Launch.DragAcceptFiles();\n\tCDialog::OnInitDialog();\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\tIconBox=(CStatic *)this->GetDlgItem(IDC_STATIC_ICON);\n\tHinst = ::LoadLibrary(cTarget->m_FilePath);\n\tif(Hinst){\n\t\tIcon = ::ExtractIcon(Hinst, cTarget->m_FilePath, 0);\n\t\tif(Icon){\n\t\t\tPrevIcon = IconBox->SetIcon(Icon);\n\t\t\tif (IconBox->GetIcon() == NULL)\n\t\t\t\tIconBox->SetIcon(::LoadIcon(NULL, IDI_ERROR));  \n\t\t}\n\t\telse{\n\t\t\tWIN32_FIND_DATA FindFileData;\n\t\t\tHANDLE hFind;\n\t\t\tchar SearchPath[MAX_PATH];\n\t\t\tstrcpy(SearchPath, cTarget->m_FilePath); \n\t\t\tPathRemoveFileSpec(SearchPath);\n\t\t\tstrcat(SearchPath, \"\\\\*.ico\");\n\t\t\t//MessageBox(SearchPath, \"debug\", 0);\n\t\t\thFind = FindFirstFile(SearchPath, &FindFileData);\n\t\t\tif ((hFind != INVALID_HANDLE_VALUE) && (hFind != (HANDLE)ERROR_FILE_NOT_FOUND)){\n\t\t\t\tstrcpy(SearchPath, cTarget->m_FilePath); \n\t\t\t\tPathRemoveFileSpec(SearchPath);\n\t\t\t\tstrcat(SearchPath, \"\\\\\");\n\t\t\t\tstrcat(SearchPath, FindFileData.cFileName);\n\t\t\t\t//MessageBox(SearchPath, \"debug\", 0);\n\t\t\t\tIcon = ::ExtractIcon(NULL, SearchPath, 0);\n\t\t\t\tPrevIcon = IconBox->SetIcon(Icon);\n\t\t\t\tif (IconBox->GetIcon() == NULL)\n\t\t\t\t\tIconBox->SetIcon(::LoadIcon(NULL, IDI_ERROR)); \t\t\t\t\n\t\t\t\tFindClose(hFind);\n\t\t\t}\n\t\t\t::FreeLibrary(Hinst);\n\t\t}\n\t\tif(PrevIcon) ::DestroyIcon(PrevIcon);\n\t}\n\n\tIconBox=(CStatic *)this->GetDlgItem(IDC_NOTES);\n\tif(cTarget->m_Notes.IsEmpty()) IconBox->SetBitmap(NULL);\n\n\tIconBox=(CStatic *)this->GetDlgItem(IDC_REGISTRY);\n\tif(cTarget->m_Registry.IsEmpty()) IconBox->SetBitmap(NULL);\n\n\tCComboBox *cScreens = (CComboBox *)this->GetDlgItem(IDC_MONITOR_ID);\n\tcScreens->ResetContent();\n\tint iMonitorCount = ::GetSystemMetrics(SM_CMONITORS);\n\tcScreens->AddString(\"def.\");\n\tfor (int i=1; i<=iMonitorCount; i++){\n\t\tchar sMonitorId[16];\n\t\tsprintf(sMonitorId, \"%d\", i);\n\t\tcScreens->AddString(sMonitorId);\n\t}\n\tcScreens->SetCurSel(cTarget->m_MonitorId);\n\n\tm_EditPosX.SubclassDlgItem(IDC_POSX, this);\n\tm_EditPosY.SubclassDlgItem(IDC_POSY, this);\n\tm_EditPosX.SetFormatter(m_pRelIntegerFormat);\n\tm_EditPosY.SetFormatter(m_pRelIntegerFormat);\n\treturn TRUE;\n}\n\n\nvoid CTabProgram::OnStnClickedRegistry()\n{\n\t// TODO: Add your control notification handler code here\n\tCDXTabCtrl *cTab = (CDXTabCtrl *)this->GetParent();\n\tcTab->SwitchToTab(11);\n}\n\nvoid CTabProgram::OnStnClickedNotes()\n{\n\t// TODO: Add your control notification handler code here\n\tCDXTabCtrl *cTab = (CDXTabCtrl *)this->GetParent();\n\tcTab->SwitchToTab(12);\n}\n\nvoid CTabProgram::OnStnClickedXYPick()\n{\n\t//return;\n\tHCURSOR hPrevCursor;\n\tHCURSOR hViewFinder;\n\tBOOL Looping = TRUE;\n\tBOOL Picked = FALSE;\n\tBOOL bMoved = FALSE;\n\tHWND TargethWnd;\n\tHWND LastHighlightedhWnd = (HWND)-1;\n\tRECT TargetRect = {0, 0, 0, 0};\n\tPOINT UpLeft = {0, 0};\n\tchar sMessage[81];\n\thViewFinder=LoadCursor(NULL, IDC_CROSS);\n\t//hViewFinder=LoadCursor(NULL, IDC_SIZE);\n\thPrevCursor=SetCursor(hViewFinder);\n\tShowCursor(TRUE);\n\tthis->SetCapture();\n\t//MessageBox(\"Pick window coordinates\", \"DxWnd\", 0);\n\twhile(TRUE){\n\t\tPOINT pt;\n\t\tMSG Msg;\n\t\tGetMessage(&Msg, NULL, 0, 0);\n\t\t//if(GetAsyncKeyState(VK_LBUTTON) & 0x8000){\n\t\tif(Msg.message == WM_LBUTTONUP){\n\t\t\tif(bMoved){\n\t\t\t\t::GetClientRect(TargethWnd, &TargetRect);\n\t\t\t\t::ClientToScreen(TargethWnd, &UpLeft);\n\t\t\t\tOffsetRect(&TargetRect, UpLeft.x, UpLeft.y);\n\t\t\t\tPicked = TRUE;\n\t\t\t}\n\t\t\tReleaseCapture();\n\t\t\tif(LastHighlightedhWnd != (HWND)-1) RefreshWindow(LastHighlightedhWnd);\n\t\t\tbreak;\n\t\t}\n\t\tif(Msg.message == WM_LBUTTONDOWN) break;\n\t\tif(Msg.message == WM_MOUSEMOVE) {\n\t\t\tbMoved = TRUE;\n\t\t\tpt = Msg.pt;\n\t\t\tTargethWnd=::WindowFromPoint(pt);\n\t\t\tif(LastHighlightedhWnd != TargethWnd){\n\t\t\t\tHighlightFoundWindow (TargethWnd);\n\t\t\t\tif(LastHighlightedhWnd != (HWND)-1) RefreshWindow(LastHighlightedhWnd);\n\t\t\t\tLastHighlightedhWnd = TargethWnd;\n\t\t\t}\n\t\t}\n\t}\n\n\tif(!Picked) return;\n\tsprintf(sMessage, \"Pick rect=(%d,%d)-(%d,%d) ?\", \n\t\tTargetRect.left, TargetRect.top, TargetRect.right, TargetRect.bottom);\n\tif(MessageBox(sMessage, \"DxWnd\", MB_OKCANCEL)!=IDCANCEL ){\n\t\tthis->SetDlgItemInt(IDC_POSX, TargetRect.left, TRUE);\n\t\tthis->SetDlgItemInt(IDC_POSY, TargetRect.top, TRUE);\n\t\tthis->SetDlgItemInt(IDC_SIZX, TargetRect.right - TargetRect.left, TRUE);\n\t\tthis->SetDlgItemInt(IDC_SIZY, TargetRect.bottom - TargetRect.top, TRUE);\n\t}\n}\n"
  },
  {
    "path": "host/TabProgram.h",
    "content": "#if !defined(AFX_TABPROGRAM_H__4F1DD92C_C67D_48AE_A73F_02D7EDA0580E__INCLUDED_)\n#define AFX_TABPROGRAM_H__4F1DD92C_C67D_48AE_A73F_02D7EDA0580E__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n// TabProgram.h : header file\n//\n#include \"resource.h\"\n#include \"afxwin.h\"\n#include \"specialedit.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabProgram dialog\n\nclass CTabProgram : public CDialog\n{\n// Construction\npublic:\n\tCTabProgram(CWnd* pParent = NULL);   // standard constructor\n\tvoid OnOpen(void);\n\tvoid OnOpenLaunch(void);\n\n// Dialog Data\n\t//{{AFX_DATA(CTabProgram)\n\tenum { IDD = IDD_TAB_PROGRAM };\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CTabProgram)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\n\t// Generated message map functions\n\t//{{AFX_MSG(CTabProgram)\n\t\t// NOTE: the ClassWizard will add member functions here\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\npublic:\n\tBOOL OnInitDialog();\nprotected:\n\tCSpecialEdit m_EditPosX;\n\tCSpecialEdit m_EditPosY;\n\tafx_msg void OnDropFiles(HDROP hDropInfo);\npublic:\n\tafx_msg void OnStnClickedRegistry();\n\tafx_msg void OnStnClickedNotes();\n\tafx_msg void OnStnClickedXYPick();\n};\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif\n"
  },
  {
    "path": "host/TabRegistry.cpp",
    "content": "// TabRegistry.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"TargetDlg.h\"\n#include \"TabRegistry.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabRegistry dialog\n\nCTabRegistry::CTabRegistry(CWnd* pParent /*=NULL*/)\n//\t: CTargetDlg(pParent)\n\t: CDialog(CTabRegistry::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTabRegistry)\n\t\t// NOTE: the ClassWizard will add member initialization here\n\t//}}AFX_DATA_INIT\n}\n\nvoid CTabRegistry::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\n\t// Registry management\n\tDDX_Check(pDX, IDC_EMULATEREGISTRY, cTarget->m_EmulateRegistry);\n\tDDX_Check(pDX, IDC_OVERRIDEREGISTRY, cTarget->m_OverrideRegistry);\n\tDDX_Check(pDX, IDC_WOW64REGISTRY, cTarget->m_Wow64Registry);\n\tDDX_Check(pDX, IDC_WOW32REGISTRY, cTarget->m_Wow32Registry);\n\tDDX_Text(pDX, IDC_REGISTRY, cTarget->m_Registry);\n\n}\n\nBEGIN_MESSAGE_MAP(CTabRegistry, CDialog)\n\t//{{AFX_MSG_MAP(CTabRegistry)\n\t\t// NOTE: the ClassWizard will add message map macros here\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabRegistry message handlers\n"
  },
  {
    "path": "host/TabRegistry.h",
    "content": "#if !defined(AFX_TABNOTES_H__798A9124_C906_446C_822D_322B5AB6F1F1__INCLUDED_)\n#define AFX_TABNOTES_H__798A9124_C906_446C_822D_322B5AB6F1F1__INCLUDED_\n\n#include \"resource.h\"\n#include \"TargetDlg.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabRegistry dialog\n\n//class CTabRegistry : public CTargetDlg\nclass CTabRegistry : public CDialog\n{\n// Construction\npublic:\n\tCTabRegistry(CWnd* pParent = NULL);   // standard constructor\n\n// Dialog Data\n\t//{{AFX_DATA(CTabDirectX)\n\tenum { IDD = IDD_TAB_REGISTRY };\n\t\t// NOTE: the ClassWizard will add data members here\n\t//}}AFX_DATA\n\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CTabDirectX)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\t//BOOL OnInitDialog();\n\n\t// Generated message map functions\n\t//{{AFX_MSG(CTabDirectX)\n\t\t// NOTE: the ClassWizard will add member functions here\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n};\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif // !defined(AFX_TABTHREE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n"
  },
  {
    "path": "host/TabSysLibs.cpp",
    "content": "// TabGDI.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"TargetDlg.h\"\n#include \"TabSysLibs.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabLogs dialog\n\nCTabSysLibs::CTabSysLibs(CWnd* pParent /*=NULL*/)\n\t: CDialog(CTabSysLibs::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTabSysLibs)\n\t\t// NOTE: the ClassWizard will add member initialization here\n\t//}}AFX_DATA_INIT\n}\n\nvoid CTabSysLibs::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\n\t// GDI\n\tDDX_Check(pDX, IDC_CLIENTREMAPPING, cTarget->m_ClientRemapping);\n\tDDX_Radio(pDX, IDC_GDINONE, cTarget->m_DCEmulationMode);\n\tDDX_Check(pDX, IDC_FIXTEXTOUT, cTarget->m_FixTextOut);\n\tDDX_Check(pDX, IDC_QUALITYFONTS, cTarget->m_QualityFonts);\n\tDDX_Check(pDX, IDC_NOFILLRECT, cTarget->m_NoFillRect);\n\tDDX_Check(pDX, IDC_FIXCLIPPERAREA, cTarget->m_FixClipperArea);\n\tDDX_Check(pDX, IDC_SHAREDDCHYBRID, cTarget->m_SharedDCHybrid);\n\tDDX_Check(pDX, IDC_SYNCPALETTE, cTarget->m_SyncPalette);\n\tDDX_Check(pDX, IDC_NOWINERRORS, cTarget->m_NoWinErrors);\n\n\t// OpenGL\n\tDDX_Check(pDX, IDC_HOOKOPENGL, cTarget->m_HookOpenGL); // duplicated\n\tDDX_Check(pDX, IDC_FORCEHOOKOPENGL, cTarget->m_ForceHookOpenGL);\n\tDDX_Check(pDX, IDC_FIXPIXELZOOM, cTarget->m_FixPixelZoom);\n\tDDX_Check(pDX, IDC_FIXBINDTEXTURE, cTarget->m_FixBindTexture);\n\tDDX_Check(pDX, IDC_HOOKGLUT32, cTarget->m_HookGlut32);\n\tDDX_Text(pDX, IDC_OPENGLLIB, cTarget->m_OpenGLLib);\n\n\t// MCI\n\tDDX_Check(pDX, IDC_REMAPMCI, cTarget->m_RemapMCI);\n\tDDX_Check(pDX, IDC_NOMOVIES, cTarget->m_NoMovies);\n\tDDX_Check(pDX, IDC_STRETCHMOVIES, cTarget->m_StretchMovies);\n\tDDX_Check(pDX, IDC_FIXMOVIESCOLOR, cTarget->m_FixMoviesColor);\n\tDDX_Check(pDX, IDC_BYPASSMCI, cTarget->m_BypassMCI);\n\n\t// SmackW32\n\tDDX_Check(pDX, IDC_HOOKSMACKW32, cTarget->m_HookSmackW32);\n\tDDX_Check(pDX, IDC_FIXSMACKLOOP, cTarget->m_FixSmackLoop);\n}\n\nBEGIN_MESSAGE_MAP(CTabSysLibs, CDialog)\n\t//{{AFX_MSG_MAP(CTabLogs)\n\t\t// NOTE: the ClassWizard will add message map macros here\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabLogs message handlers\n"
  },
  {
    "path": "host/TabSysLibs.h",
    "content": "#if !defined(AFX_TABGDI_H__7E062B52_3B6E_44C4_B58E_AAD73592C8E3__INCLUDED_)\n#define AFX_TABGDI_H__7E062B52_3B6E_44C4_B58E_AAD73592C8E3__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n// TabLogs.h : header file\n//\n#include \"resource.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabLogs dialog\n\nclass CTabSysLibs : public CDialog\n{\n// Construction\npublic:\n\tCTabSysLibs(CWnd* pParent = NULL);   // standard constructor\n\n// Dialog Data\n\t//{{AFX_DATA(CTabLogs)\n\tenum { IDD = IDD_TAB_SYSLIBS };\n\t\t// NOTE: the ClassWizard will add data members here\n\t//}}AFX_DATA\n\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CTabLogs)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\n\t// Generated message map functions\n\t//{{AFX_MSG(CTabLogs)\n\t\t// NOTE: the ClassWizard will add member functions here\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n};\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif\n"
  },
  {
    "path": "host/TabTiming.cpp",
    "content": "// TabDirectX.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"TargetDlg.h\"\n#include \"TabTiming.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabTiming dialog\n\n\nCTabTiming::CTabTiming(CWnd* pParent /*=NULL*/)\n\t: CDialog(CTabTiming::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTabTiming)\n\t\t// NOTE: the ClassWizard will add member initialization here\n\t//}}AFX_DATA_INIT\n}\n\n\nvoid CTabTiming::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\tDDX_Check(pDX, IDC_LIMITFPS, cTarget->m_LimitFPS);\n\tDDX_Check(pDX, IDC_SKIPFPS, cTarget->m_SkipFPS);\n\tDDX_Check(pDX, IDC_SHOWFPS, cTarget->m_ShowFPS);\n\tDDX_Check(pDX, IDC_SHOWFPSOVERLAY, cTarget->m_ShowFPSOverlay);\n\tDDX_Check(pDX, IDC_SHOWTIMESTRETCH, cTarget->m_ShowTimeStretch);\n\tDDX_Check(pDX, IDC_TIMESTRETCH, cTarget->m_TimeStretch);\n\tDDX_Check(pDX, IDC_INTERCEPTRDTSC, cTarget->m_InterceptRDTSC);\n\tDDX_Check(pDX, IDC_STRETCHTIMERS, cTarget->m_StretchTimers);\n\tDDX_Check(pDX, IDC_NORMALIZEPERFCOUNT, cTarget->m_NormalizePerfCount);\n\tDDX_Check(pDX, IDC_CPUSLOWDOWN, cTarget->m_CPUSlowDown);\n\tDDX_Check(pDX, IDC_CPUMAXUSAGE, cTarget->m_CPUMaxUsage);\n\tDDX_Check(pDX, IDC_QUARTERBLT, cTarget->m_QuarterBlt);\n\tDDX_Check(pDX, IDC_FINETIMING, cTarget->m_FineTiming);\n\tDDX_Check(pDX, IDC_TIMEFREEZE, cTarget->m_EnableTimeFreeze);\n\tDDX_Text(pDX, IDC_MAXFPS, cTarget->m_MaxFPS);\n\tDDX_Text(pDX, IDC_SLOWRATIO, cTarget->m_SlowRatio);\n\tDDX_LBIndex(pDX, IDC_LISTTS, cTarget->m_InitTS);\n\t//{{AFX_DATA_MAP(CTabTiming)\n\t\t// NOTE: the ClassWizard will add DDX and DDV calls here\n\t//}}AFX_DATA_MAP\n}\n\nBOOL CTabTiming::OnInitDialog()\n{\n\n\tAfxEnableControlContainer();\n\n\tCListBox *List;\n\tCDialog::OnInitDialog();\n\tint i;\n\textern char *GetTSCaption(int);\n\tList=(CListBox *)this->GetDlgItem(IDC_LISTTS);\n\tList->ResetContent();\n\tfor(i=-8; i<=8; i++) List->AddString(GetTSCaption(i));\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\tList->SetCurSel(cTarget->m_InitTS);\n\n\treturn TRUE;\n}\n\n\nBEGIN_MESSAGE_MAP(CTabTiming, CDialog)\n\t//{{AFX_MSG_MAP(CTabTiming)\n\t\t// NOTE: the ClassWizard will add message map macros here\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabTiming message handlers\n"
  },
  {
    "path": "host/TabTiming.h",
    "content": "#if !defined(AFX_TABTIMING_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n#define AFX_TABTIMING_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n// TabTiming.h : header file\n//\n#include \"resource.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabDirectX dialog\n\nclass CTabTiming : public CDialog\n{\n// Construction\npublic:\n\tCTabTiming(CWnd* pParent = NULL);   // standard constructor\n\tBOOL OnInitDialog();\n\n// Dialog Data\n\t//{{AFX_DATA(CTabDirectX)\n\tenum { IDD = IDD_TAB_TIMING };\n\t\t// NOTE: the ClassWizard will add data members here\n\t//}}AFX_DATA\n\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CTabDirectX)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\n\t// Generated message map functions\n\t//{{AFX_MSG(CTabDirectX)\n\t\t// NOTE: the ClassWizard will add member functions here\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n};\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif // !defined(AFX_TABTHREE_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n"
  },
  {
    "path": "host/TabWindow.cpp",
    "content": "// TabOpenGL.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"TargetDlg.h\"\n#include \"TabWindow.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabWindow dialog\n\n\nCTabWindow::CTabWindow(CWnd* pParent /*=NULL*/)\n\t: CDialog(CTabWindow::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTabWindow)\n\t\t// NOTE: the ClassWizard will add member initialization here\n\t//}}AFX_DATA_INIT\n}\n\n\nvoid CTabWindow::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\n\t// window style\n\tDDX_Radio(pDX, IDC_DEFAULTSTYLE, cTarget->m_WindowStyle);\n\tDDX_Check(pDX, IDC_LOCKWINSTYLE, cTarget->m_LockWinStyle);\n\n\t// window management\n\t//DDX_Check(pDX, IDC_FIXWINFRAME, cTarget->m_FixWinFrame);\n\tDDX_Check(pDX, IDC_PREVENTMAXIMIZE, cTarget->m_PreventMaximize);\n\tDDX_Check(pDX, IDC_FIXPARENTWIN, cTarget->m_FixParentWin);\n\t//DDX_Check(pDX, IDC_MODALSTYLE, cTarget->m_ModalStyle);\n\tDDX_Check(pDX, IDC_FORCEWINRESIZE, cTarget->m_ForceWinResize);\n\tDDX_Check(pDX, IDC_HIDEMULTIMONITOR, cTarget->m_HideMultiMonitor);\n\tDDX_Check(pDX, IDC_RECOVERSCREENMODE, cTarget->m_RecoverScreenMode);\n\tDDX_Check(pDX, IDC_REFRESHONRESIZE, cTarget->m_RefreshOnResize);\n\tDDX_Check(pDX, IDC_HIDETASKBAR, cTarget->m_HideTaskbar);\n\tDDX_Check(pDX, IDC_UNLOCKZORDER, cTarget->m_UnlockZOrder);\n\tDDX_Check(pDX, IDC_NODESTROYWINDOW, cTarget->m_NoDestroyWindow);\n\tDDX_Check(pDX, IDC_ACTIVATEAPP, cTarget->m_ActivateApp);\n\tDDX_Check(pDX, IDC_SUPPRESSIME, cTarget->m_SuppressIME);\n\n\tDDX_Radio(pDX, IDC_FREEMOVE, cTarget->m_WinMovementType);\n\n\t// color management\n\tDDX_Radio(pDX, IDC_COLORCURRENT, cTarget->m_InitColorDepth);\n\tDDX_Check(pDX, IDC_DISABLEGAMMARAMP, cTarget->m_DisableGammaRamp);\n\t//DDX_Check(pDX, IDC_FORCE16BPP, cTarget->m_Force16BPP);\n\tDDX_Check(pDX, IDC_LOCKSYSCOLORS, cTarget->m_LockSysColors);\n\tDDX_Check(pDX, IDC_LOCKRESERVEDPALETTE, cTarget->m_LockReservedPalette);\n\n\t// screen resolution management\n\tDDX_Check(pDX, IDC_LIMITSCREENRES, cTarget->m_LimitScreenRes);\n\tDDX_LBIndex(pDX, IDC_LISTRES, cTarget->m_MaxScreenRes);\n\tDDX_Radio(pDX, IDC_SUPPORTSVGA, cTarget->m_ResTypes);\n\tDDX_Check(pDX, IDC_INITIALRES, cTarget->m_InitialRes);\n\tDDX_Check(pDX, IDC_MAXIMUMRES, cTarget->m_MaximumRes);\n\tDDX_Text(pDX, IDC_INITW, cTarget->m_InitResW);\n\tDDX_Text(pDX, IDC_INITH, cTarget->m_InitResH);\n}\n\nstatic char *Resolutions[]={\n\t\"unlimited\",\n\t\"320x200\",\n\t\"400x300\",\n\t\"640x480\",\n\t\"800x600\",\n\t\"1024x768\",\n\t\"1280x960\",\n\t\"1280x1024\",\n\t\"\" // terminator\n};\n\nchar UnlimitedString[20+1];\n\nBOOL CTabWindow::OnInitDialog()\n{\n\n\tAfxEnableControlContainer();\n\n\tCListBox *List;\n\tCTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent()));\n\tint i;\n\tList=(CListBox *)this->GetDlgItem(IDC_LISTRES);\n\tList->ResetContent();\n\tif(LoadString(AfxGetResourceHandle(), DXW_STRING_UNLIMITED, UnlimitedString, sizeof(UnlimitedString))){\n\t\tResolutions[0]=UnlimitedString;\n\t}\n\tfor(i=0; strlen(Resolutions[i]); i++) List->AddString(Resolutions[i]);\n\tList->SetCurSel(cTarget->m_MaxScreenRes);\n\n\tCDialog::OnInitDialog();\n\treturn TRUE;\n}\n\n\nBEGIN_MESSAGE_MAP(CTabWindow, CDialog)\n\t//{{AFX_MSG_MAP(CTabWindow)\n\t\t// NOTE: the ClassWizard will add message map macros here\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabWindow message handlers\n\n\n"
  },
  {
    "path": "host/TabWindow.h",
    "content": "#if !defined(AFX_TABWINDOW_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_)\n#define AFX_TABWINDOW_H__798A9124_C906_446C_822D_322B5AB6C4C4__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n// TabTiming.h : header file\n//\n#include \"resource.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTabWindow dialog\n\nclass CTabWindow : public CDialog\n{\n// Construction\npublic:\n\tCTabWindow(CWnd* pParent = NULL);   // standard constructor\n\tBOOL OnInitDialog();\n\n// Dialog Data\n\t//{{AFX_DATA(CTabWindow)\n\tenum { IDD = IDD_TAB_OUTPUT };\n\t\t// NOTE: the ClassWizard will add data members here\n\t//}}AFX_DATA\n\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CTabWindow)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\n\t// Generated message map functions\n\t//{{AFX_MSG(CTabWindow)\n\t\t// NOTE: the ClassWizard will add member functions here\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n};\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif "
  },
  {
    "path": "host/TargetDlg.cpp",
    "content": "// TargetDlg.cpp : Implementation\n//\n\n#include \"stdafx.h\"\n#include \"shlwapi.h\"\n#include \"dxwndhost.h\"\n#include \"TargetDlg.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\nextern BOOL KillProcByName(char *, BOOL, BOOL);\nextern BOOL gbDebug;\n\n/////////////////////////////////////////////////////////////////////////////\n// CTargetDlg Dialog\n\nCTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)\n\t: CDialog(CTargetDlg::IDD, pParent)\n{\n\t//{{AFX_DATA_INIT(CTargetDlg)\n\tm_DXVersion = 0;\n\tm_MonitorId = 0; // default: the first one, of course ....\n\tm_MaxDdrawInterface = 6;\n\tm_SlowRatio = 2;\n\tm_Coordinates = 0;\n\tm_InitColorDepth = 0; // default: current color depth\n\tm_DxEmulationMode = 3; // default: emulated\n\tm_DxFilterMode = 0; // default: ddraw filtering\n\tm_DCEmulationMode = 0; // default: no emulation\n\tm_MouseVisibility = 0;\n\tm_MouseClipper = 0;\n\tm_OffendingMessages = 0;\n\tm_TextureHandling = 0;\n\tm_HookDI = FALSE;\n\tm_HookDI8 = FALSE;\n\tm_EmulateRelMouse = FALSE; // ??\n\tm_SkipDevTypeHID = FALSE; \n\tm_ModifyMouse = TRUE; // default true !!\n\tm_VirtualJoystick = FALSE; \n\tm_Unacquire = FALSE; \n\t//m_LogEnabled = FALSE;\n\tm_OutDebug = FALSE;\n\tm_RegistryOp = FALSE;\n\tm_CursorTrace = FALSE;\n\tm_OutWinMessages = FALSE;\n\tm_OutDWTrace = FALSE;\n\tm_OutOGLTrace = FALSE;\n\tm_OutHexTrace = FALSE;\n\tm_OutWGTrace = FALSE;\n\tm_OutD3DTrace = FALSE;\n\tm_OutDDRAWTrace = FALSE;\n\tm_OutDebugString = FALSE;\n\t//m_EraseLogFile = FALSE;\n\tm_AddTimeStamp = FALSE;\n\tm_AddRelativeTime = FALSE;\n\tm_ImportTable = FALSE;\n\tm_TraceHooks = FALSE;\n\tm_HandleExceptions = FALSE;\n\tm_VirtualHeap = FALSE;\n\tm_SuppressIME = FALSE;\n\tm_SuppressD3DExt = FALSE;\n\tm_Enum16bitModes = FALSE;\n\tm_TrimTextureFormats = FALSE;\n\tm_D3D8Back16 = FALSE;\n\tm_NoHALDevice = FALSE;\n\t//m_RawFormat = FALSE;\n\tm_TextureFileFormat = 0;\n\tm_SetCompatibility = TRUE; // default true !!\n\tm_AEROBoost = TRUE; // default true !!\n\tm_DiabloTweak = FALSE;\n\tm_HookDirectSound = FALSE;\n\tm_HookWinG32 = FALSE;\n\tm_HookSmackW32 = FALSE;\n\tm_FixSmackLoop = FALSE;\n\tm_BlockPriorityClass = FALSE;\n\tm_EASportsHack = FALSE;\n\tm_LegacyAlloc = FALSE;\n\tm_DisableMaxWinMode = FALSE;\n\tm_DisableDisableAltTab = FALSE;\n\tm_NoImagehlp = FALSE;\n\tm_ReplacePrivOps = FALSE;\n\tm_ForcesHEL = FALSE;\n\tm_MinimalCaps = FALSE;\n\tm_SetZBufferBitDepths = FALSE;\n\tm_ForcesSwapEffect = FALSE;\n\tm_ColorFix = FALSE;\n\tm_FixGlobalUnlock = FALSE;\n\tm_FixFreeLibrary = FALSE;\n\tm_LoadLibraryErr = FALSE;\n\tm_FixAdjustWinRect = FALSE;\n\tm_NoPixelFormat = FALSE;\n\tm_NoAlphaChannel = FALSE;\n\tm_FixRefCounter = TRUE; // default true !!\n\tm_ReturnNullRef = FALSE;\n\tm_NoD3DReset = FALSE;\n\tm_HideDesktop = FALSE;\n\tm_HideTaskbar = FALSE;\n\tm_ActivateApp = FALSE;\n\tm_UnlockZOrder = FALSE;\n\tm_NoDestroyWindow = FALSE;\n\tm_LockSysColors = FALSE;\n\tm_LockReservedPalette = FALSE;\n\tm_LimitScreenRes = FALSE;\n\tm_SingleProcAffinity = FALSE;\n\tm_UseLastCore = FALSE;\n\tm_LimitResources = FALSE;\n\tm_CDROMDriveType = FALSE;\n\tm_HideCDROMEmpty = FALSE;\n\tm_HookGOGLibs = FALSE;\n\tm_BypassGOGLibs = FALSE;\n\tm_FontBypass = FALSE;\n\tm_BufferedIOFix = FALSE;\n\tm_ZBufferClean = FALSE;\n\tm_ZBuffer0Clean = FALSE;\n\tm_DynamicZClean = FALSE;\n\tm_ZBufferHardClean = FALSE;\n\tm_ZBufferAlways = FALSE;\n\tm_HotPatchAlways = FALSE;\n\tm_FreezeInjectedSon = FALSE;\n\tm_StressResources = FALSE;\n\tm_DisableFogging = FALSE;\n\tm_Power2Width = FALSE;\n\tm_ClearTarget = FALSE;\n\tm_FixPitch = FALSE,\n\tm_NoPower2Fix = FALSE;\n\tm_NoPerfCounter = FALSE;\n\tm_UnNotify = FALSE;\n\tm_Windowize = TRUE; // default true !!\n\tm_HotPatch = FALSE; \n\tm_HookDLLs = TRUE; // default true !!\n\tm_AnsiWide = FALSE; \n\tm_HookNoRun = FALSE; \n\tm_CopyNoShims = FALSE; \n\tm_HookNoUpdate = FALSE; \n\tm_SequencedIAT = FALSE; \n\tm_TerminateOnClose = FALSE; \n\tm_ConfirmOnClose = FALSE; \n\tm_HookEnabled = TRUE; // default true !!\n\tm_NeedAdminCaps = FALSE; \n\tm_EmulateRegistry = FALSE; \n\tm_OverrideRegistry = FALSE; \n\tm_Wow64Registry = FALSE; \n\tm_Wow32Registry = FALSE; \n\tm_FullScreenOnly = FALSE; \n\tm_ShowHints = FALSE; \n\tm_BackgroundPriority = FALSE; \n\tm_PeekAllMessages = FALSE; \n\tm_NoWinPosChanges = FALSE; \n\tm_MessagePump = FALSE; \n\tm_ClipMenu = FALSE;\n\tm_NoBanner = FALSE;\n\tm_FilePath = _T(\"\");\n\tm_Module = _T(\"\");\n\tm_SlowDown = FALSE;\n\tm_BlitFromBackBuffer = FALSE;\n\tm_NoFlipEmulation = FALSE;\n\tm_OffscreenZBuffer = FALSE;\n\tm_LockColorDepth = FALSE;\n\tm_DisableGammaRamp = FALSE;\n\tm_AutoRefresh = FALSE;\n\tm_IndependentRefresh = FALSE;\n\tm_TextureFormat = FALSE;\n\t//m_FixWinFrame = FALSE;\n\tm_VideoToSystemMem = FALSE;\n\tm_FixTextOut = FALSE;\n\tm_SharedDC = FALSE; \n\tm_HookGlide = FALSE;\n\tm_RemapMCI = TRUE;\n\tm_NoMovies = FALSE;\n\tm_FixMoviesColor = FALSE;\n\tm_StretchMovies = FALSE;\n\tm_BypassMCI = FALSE;\n\tm_SuppressRelease = FALSE;\n\tm_KeepCursorWithin = FALSE;\n\tm_KeepCursorFixed = FALSE;\n\tm_UseRGB565 = TRUE; // seems the default for 16bit video mode\n\tm_SuppressDXErrors = FALSE;\n\tm_FlipEmulation = TRUE; // better set true default, since this mode is more compatible\n\tm_MarkBlit = FALSE;\n\tm_MarkLock = FALSE;\n\tm_MarkWinG32 = FALSE;\n\tm_MarkGDI32 = FALSE;\n\tm_DumpDIBSection = FALSE;\n\tm_DumpDevContext = FALSE;\n\tm_NoSysMemPrimary = FALSE;\n\tm_NoSysMemBackBuf = FALSE;\n\tm_NoBlt = FALSE;\n\tm_BilinearBlt = FALSE;\n\tm_FastBlt = FALSE;\n\tm_GDIColorConv = FALSE;\n\tm_PreventMaximize = FALSE;\n\tm_ClientRemapping = TRUE; // default true !!\n\tm_LockWinStyle = FALSE;\n\tm_FixParentWin = FALSE;\n\t//m_ModalStyle = FALSE;\n\tm_KeepAspectRatio = FALSE;\n\tm_ForceWinResize = FALSE;\n\tm_HideMultiMonitor = FALSE;\n\tm_FixD3DFrame = FALSE;\n\tm_NoWindowMove = FALSE;\n\tm_HookChildWin = FALSE;\n\tm_HookDlgWin = FALSE;\n\tm_MessageProc = FALSE;\n\tm_FixMouseHook = FALSE;\n\tm_FixNCHITTEST = FALSE;\n\tm_RecoverScreenMode = FALSE;\n\tm_RefreshOnResize = FALSE;\n\tm_Init8BPP = FALSE;\n\tm_Init16BPP = FALSE;\n\tm_BackBufAttach = FALSE;\n\tm_ClearTextureFourCC = FALSE;\n\tm_NoDDExclusiveMode = FALSE;\n\tm_CreateDesktop = FALSE;\n\tm_AllowSysmemOn3DDev = FALSE;\n\tm_VSyncMode = 0;\n\tm_VSyncImpl = 0;\n\tm_WaitMode = 0;\n\tm_HandleAltF4 = FALSE;\n\tm_LimitFPS = FALSE;\n\tm_SkipFPS = FALSE;\n\tm_ShowFPS = FALSE;\n\tm_ShowFPSOverlay = FALSE;\n\tm_ShowTimeStretch = FALSE;\n\tm_TimeStretch = FALSE;\n\tm_StretchTimers = FALSE;\n\tm_NormalizePerfCount = FALSE;\n\tm_CPUSlowDown = FALSE;\n\tm_CPUMaxUsage = FALSE;\n\tm_QuarterBlt = FALSE;\n\tm_FineTiming = FALSE;\n\tm_EnableTimeFreeze = FALSE;\n\tm_ReleaseMouse = FALSE;\n\tm_EnableHotKeys = TRUE; // default true !!\n\tm_InterceptRDTSC = FALSE;\n\tm_HookOpenGL = FALSE;\n\tm_ForceHookOpenGL = FALSE;\n\tm_FixPixelZoom = FALSE;\n\tm_FixBindTexture = FALSE;\n\tm_HookGlut32 = FALSE;\n\tm_FakeVersion = FALSE;\n\tm_FullRectBlt = FALSE;\n\tm_CenterToWin = FALSE;\n\tm_Deinterlace = FALSE;\n\tm_LimitDdraw = FALSE;\n\tm_SuppressOverlay = FALSE;\n\tm_SurfaceWarn = FALSE;\n\tm_CapMask = FALSE;\n\tm_NoWindowHooks = FALSE;\n\tm_NoDDRAWBlt = FALSE;\n\tm_NoDDRAWFlip = FALSE;\n\tm_NoGDIBlt = FALSE;\n\tm_NoFillRect = FALSE;\n\tm_FixClipperArea = FALSE; // ??\n\tm_SharedDCHybrid = FALSE; // ??\n\tm_SyncPalette = FALSE;\n\tm_NoWinErrors = FALSE;\n\tm_PretendVisible = FALSE;\n\tm_WinInsulation = FALSE;\n\tm_QualityFonts = FALSE;\n\tm_AnalyticMode = FALSE;\n\tm_NoPaletteUpdate = FALSE;\n\tm_WireFrame = FALSE;\n\tm_NoTextures = FALSE;\n\tm_BlackWhite = FALSE;\n\tm_AssertDialog = FALSE;\n\tm_InitialRes = FALSE;\n\tm_MaximumRes = FALSE;\n\tm_ClipperMode = 0;\n\tm_PosX = 50;\n\tm_PosY = 50;\n\tm_SizX = 800;\n\tm_SizY = 600;\n\tm_InitResW = 800;\n\tm_InitResH = 600;\n\tm_MaxFPS = 0;\n\tm_InitTS = 8;\n\tm_SwapEffect = 0;\n\tm_InjectionMode = 0;\n\tm_WinMovementType = 1; // \"Floating\" position mode, better than \"Free\"!\n\tm_ScanLine = 0;\n\t//}}AFX_DATA_INIT\n\n}\n\nBOOL CTargetDlg::OnInitDialog()\n{\n\tint i=0;\n\tAfxEnableControlContainer();\n\tCDialog::OnInitDialog();\n\tchar sCaption[48+1];\n\tLoadString(AfxGetResourceHandle(), DXW_TAB_MAIN, sCaption, sizeof(sCaption));\n\tm_tabdxTabCtrl.InsertItem(i++, _T(sCaption));\n\tLoadString(AfxGetResourceHandle(), DXW_TAB_HOOK, sCaption, sizeof(sCaption));\n\tm_tabdxTabCtrl.InsertItem(i++, _T(sCaption));\n\tLoadString(AfxGetResourceHandle(), DXW_TAB_VIDEO, sCaption, sizeof(sCaption));\n\tm_tabdxTabCtrl.InsertItem(i++, _T(sCaption));\n\tLoadString(AfxGetResourceHandle(), DXW_TAB_INPUT, sCaption, sizeof(sCaption));\n\tm_tabdxTabCtrl.InsertItem(i++, _T(sCaption));\n\tLoadString(AfxGetResourceHandle(), DXW_TAB_DIRECTX, sCaption, sizeof(sCaption));\n\tm_tabdxTabCtrl.InsertItem(i++, _T(sCaption));\n\tLoadString(AfxGetResourceHandle(), DXW_TAB_DIRECTX2, sCaption, sizeof(sCaption));\n\tm_tabdxTabCtrl.InsertItem(i++, _T(sCaption));\n\tLoadString(AfxGetResourceHandle(), DXW_TAB_D3D, sCaption, sizeof(sCaption));\n\tm_tabdxTabCtrl.InsertItem(i++, _T(sCaption));\n\tLoadString(AfxGetResourceHandle(), DXW_TAB_TIMING, sCaption, sizeof(sCaption));\n\tm_tabdxTabCtrl.InsertItem(i++, _T(sCaption));\n\tLoadString(AfxGetResourceHandle(), DXW_TAB_LOGS, sCaption, sizeof(sCaption));\n\tm_tabdxTabCtrl.InsertItem(i++, _T(sCaption));\n\tLoadString(AfxGetResourceHandle(), DXW_TAB_LIBS, sCaption, sizeof(sCaption));\n\tm_tabdxTabCtrl.InsertItem(i++, _T(sCaption));\n\tLoadString(AfxGetResourceHandle(), DXW_TAB_COMPAT, sCaption, sizeof(sCaption));\n\tm_tabdxTabCtrl.InsertItem(i++, _T(sCaption));\n\tLoadString(AfxGetResourceHandle(), DXW_TAB_REGISTRY, sCaption, sizeof(sCaption));\n\tm_tabdxTabCtrl.InsertItem(i++, _T(sCaption));\n\tLoadString(AfxGetResourceHandle(), DXW_TAB_NOTES, sCaption, sizeof(sCaption));\n\tm_tabdxTabCtrl.InsertItem(i++, _T(sCaption));\n\tLoadString(AfxGetResourceHandle(), DXW_TAB_DEBUG, sCaption, sizeof(sCaption));\n\tif (gbDebug) m_tabdxTabCtrl.InsertItem(i++, _T(sCaption));\n\tm_tabdxTabCtrl.Init();\n\treturn TRUE;\n}\n\nvoid CTargetDlg::OnOK()\n{\n\tm_tabdxTabCtrl.OnOK();\n\tCDialog::OnOK();\n}\n\nvoid CTargetDlg::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\n\t//{{AFX_DATA_MAP(CTargetDlg)\n\tDDX_Control(pDX, IDC_TABPANEL, m_tabdxTabCtrl);\n\t//}}AFX_DATA_MAP\n}\n\nBEGIN_MESSAGE_MAP(CTargetDlg, CDialog)\n\t//{{AFX_MSG_MAP(CTargetDlg)\n\t//}}AFX_MSG_MAP\n\n\tON_BN_CLICKED(IDTRY, &CTargetDlg::OnBnClickedTry)\n\tON_BN_CLICKED(IDKILL, &CTargetDlg::OnBnClickedKill)\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CTargetDlg Message Handler\n\nvoid CTargetDlg::OnBnClickedTry()\n{\n#if 0\n\tNMHDR nmh;\n\tnmh.code = ID_PRUN;\n\tnmh.idFrom = NULL;\n\tnmh.hwndFrom = NULL;\n\tthis->GetParent()->SendMessage(WM_NOTIFY, 0, (LPARAM)&nmh);\n#else\n\tchar path[MAX_PATH+1];\n\tchar fullpath[MAX_PATH+1];\n\tint iHookStatus;\n\tTARGETMAP RestrictedMaps[2];\n\textern void SetTargetFromDlg(TARGETMAP *, CTargetDlg *);\n\textern BOOL CheckStatus(void);\n\tSTARTUPINFO sinfo;\n\tPROCESS_INFORMATION pinfo;\n\tchar sMsg[81];\n\tTARGETMAP TargetMap;\n\tPRIVATEMAP PrivateMap;\n\tThreadInfo_Type ThreadInfo;\n\n\tstatic BOOL IsLocked = FALSE;\n\tif(IsLocked) return;\n\tif (CheckStatus()) return; // don't try when status is active\n\tIsLocked = TRUE;\n\tm_tabdxTabCtrl.OnOK();\t\n\tSetTargetFromDlg(&RestrictedMaps[0], this);\n\tmemset(&RestrictedMaps[1], 0, sizeof(TARGETMAP));\n\tstrcpy_s(path, sizeof(path), m_FilePath.GetBuffer());\n\tPathRemoveFileSpec(path);\n\tSetTarget(NULL, RestrictedMaps);\t\n\tiHookStatus=GetHookStatus(NULL);\n\tif(iHookStatus == DXW_IDLE) StartHook();\n\tswitch(m_InjectionMode){\n\t\tcase 1:\n\t\t\textern DWORD WINAPI StartDebug(void *);\n\t\t\tstrcpy(TargetMap.path, m_FilePath);\n\t\t\tstrcpy(PrivateMap.launchpath, m_LaunchPath);\n\t\t\tThreadInfo.TM=&TargetMap;\n\t\t\tThreadInfo.PM=&PrivateMap;\n\t\t\tCloseHandle(CreateThread( NULL, 0, StartDebug, &ThreadInfo, 0, NULL)); \n\t\t\tbreak;\n\t\tcase 2:\n\t\t\textern void InjectSuspended(char *, char *);\n\t\t\tstrcpy(TargetMap.path, m_FilePath);\n\t\t\tstrcpy(PrivateMap.launchpath, m_LaunchPath);\n\t\t\tThreadInfo.TM=&TargetMap;\n\t\t\tThreadInfo.PM=&PrivateMap;\n\t\t\tInjectSuspended((strlen(PrivateMap.launchpath)>0) ? PrivateMap.launchpath: TargetMap.path, path); \n\t\t\tbreak;\n\t\tcase 0:\n\t\tdefault:\n\t\t\tZeroMemory(&sinfo, sizeof(sinfo));\n\t\t\tsinfo.cb = sizeof(sinfo);\n\t\t\tstrncpy(fullpath, m_LaunchPath.IsEmpty() ? m_FilePath.GetBuffer() : m_LaunchPath.GetBuffer(), MAX_PATH);\n\t\t\tif(!CreateProcess(NULL, fullpath, \n\t\t\t\t0, 0, false, CREATE_DEFAULT_ERROR_MODE, NULL, path, &sinfo, &pinfo)){\n\t\t\t\tsprintf(sMsg, \"CreateProcess ERROR %d\", GetLastError());\n\t\t\t\tMessageBox(sMsg, \"Error\", MB_ICONEXCLAMATION);\n\t\t\t}\n\t\t\tCloseHandle(pinfo.hProcess); // no longer needed, avoid handle leakage\n\t\t\tCloseHandle(pinfo.hThread); // no longer needed, avoid handle leakage\n\t\t\tbreak;\n\t}\n\t// wait & recover\n\tSleep(5000);\n\t//SetTarget(CDxwndhostView::TargetMaps);\t\n\tif(iHookStatus == DXW_IDLE) EndHook();\n\tIsLocked = FALSE;\n#endif\n}\n\nvoid CTargetDlg::OnBnClickedKill()\n{\n\tchar FilePath[MAX_PATH+1];\n\tchar *lpProcName, *lpNext;\n\tHRESULT res;\n\n\tstrncpy(FilePath, m_FilePath.GetBuffer(), MAX_PATH);\n\tlpProcName=FilePath;\n\twhile (lpNext=strchr(lpProcName,'\\\\')) lpProcName=lpNext+1;\n\n\tif(!KillProcByName(lpProcName, FALSE, FALSE)){\n\t\twchar_t *wcstring = new wchar_t[48+1];\n\t\tmbstowcs_s(NULL, wcstring, 48, lpProcName, _TRUNCATE);\n\t\tres=MessageBoxLangArg(DXW_STRING_KILLTASK, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION, wcstring);\n\t\tif(res!=IDYES) return;\n\t\tKillProcByName(lpProcName, TRUE, FALSE);\n\t}\n\telse{\n\t\tMessageBoxLang(DXW_STRING_NOKILLTASK, DXW_STRING_INFO, MB_ICONEXCLAMATION);\n\t}\n}\n"
  },
  {
    "path": "host/TargetDlg.h",
    "content": "#if !defined(AFX_TARGETDLG_H__683E529D_7282_484C_A403_367A6A90CC57__INCLUDED_)\n#define AFX_TARGETDLG_H__683E529D_7282_484C_A403_367A6A90CC57__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n// TargetDlg.h : Header file\n//\n#include \"dxTabCtrl.h\"\n#include \"SpecialEdit.h\"\n#include \"CDragEdit.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CTargetDlg Dialog\n\nclass CTargetDlg : public CDialog\n{\n// Constructor\npublic:\n\tCTargetDlg(CWnd* pParent = NULL);   // Standard constructor\n\tvoid OnOK();\n\n// Dialog Data\n\t//{{AFX_DATA(CTargetDlg)\n\tenum { IDD = IDD_TARGET };\n\tCDXTabCtrl\tm_tabdxTabCtrl;\n\tCDragEdit\tm_File;\n\tCDragEdit\tm_Launch;\n\tint\t\tm_DXVersion;\n\tint\t\tm_Coordinates;\n\tint\t\tm_InitColorDepth;\n\tint\t\tm_DxEmulationMode;\n\tint\t\tm_DxFilterMode;\n\tint\t\tm_DCEmulationMode;\n\tint\t\tm_MouseVisibility;\n\tint\t\tm_MouseClipper;\n\tint\t\tm_OffendingMessages;\n\tint\t\tm_TextureHandling;\n\tint\t\tm_SonProcessMode;\n\tint\t\tm_MaxDdrawInterface;\n\tint\t\tm_SlowRatio;\n\tint\t\tm_LogMode;\n\tint\t\tm_MonitorId;\n\tint\t\tm_WinMovementType;\n\tint\t\tm_WindowStyle;\n\tBOOL\tm_HookDI;\n\tBOOL\tm_HookDI8;\n\tBOOL\tm_EmulateRelMouse;\n\tBOOL\tm_SkipDevTypeHID;\n\tBOOL\tm_SuppressDIErrors;\n\tBOOL\tm_SharedKeyboard;\n\tBOOL\tm_ModifyMouse;\n\tBOOL\tm_VirtualJoystick;\n\tBOOL\tm_Unacquire;\n\tBOOL\tm_OutDebug;\n\tBOOL\tm_CursorTrace;\n//\tBOOL\tm_LogEnabled;\n//\tBOOL\tm_EraseLogFile;\n\tBOOL\tm_AddTimeStamp;\n\tBOOL\tm_AddRelativeTime;\n\tBOOL\tm_OutDebugString;\n\tBOOL\tm_OutWinMessages;\n\tBOOL\tm_OutDWTrace;\n\tBOOL\tm_OutOGLTrace;\n\tBOOL\tm_OutHexTrace;\n\tBOOL\tm_OutWGTrace;\n\tBOOL\tm_OutD3DTrace;\n\tBOOL\tm_OutDDRAWTrace;\n\tBOOL\tm_AssertDialog;\n\tBOOL\tm_ImportTable;\n\tBOOL\tm_RegistryOp;\n\tBOOL\tm_TraceHooks;\n\tBOOL\tm_UnNotify;\n\tBOOL\tm_Windowize;\n\tBOOL\tm_HotPatch;\n\tBOOL\tm_HookDLLs;\n\tBOOL\tm_AnsiWide;\n\tBOOL\tm_HookNoRun;\n\tBOOL\tm_CopyNoShims;\n\tBOOL\tm_HookNoUpdate;\n\tBOOL\tm_SequencedIAT;\n\tBOOL\tm_TerminateOnClose;\n\tBOOL\tm_ConfirmOnClose;\n\tBOOL\tm_EmulateRegistry;\n\tBOOL\tm_OverrideRegistry;\n\tBOOL\tm_Wow64Registry;\n\tBOOL\tm_Wow32Registry;\n\tBOOL\tm_FullScreenOnly;\n\tBOOL\tm_ShowHints;\n\tBOOL\tm_BackgroundPriority;\n\tBOOL\tm_NeedAdminCaps;\n\tBOOL\tm_PeekAllMessages;\n\tBOOL\tm_NoWinPosChanges;\n\tBOOL\tm_MessagePump;\n\tBOOL\tm_ClipMenu;\n\tBOOL\tm_NoBanner;\n\tint\t\tm_InjectionMode;\n\tBOOL\tm_HookEnabled;\n\tBOOL\tm_ReplacePrivOps;\n\tCString\tm_FilePath;\n\tCString\tm_LaunchPath;\n\tCString\tm_StartFolder;\n\tCString\tm_Module;\n\tCString\tm_Title;\n\tCString\tm_OpenGLLib;\n\tCString\tm_Notes;\n\tCString\tm_Registry;\n\tBOOL\tm_SlowDown;\n\tBOOL\tm_BlitFromBackBuffer;\n\tBOOL\tm_NoFlipEmulation;\n\tBOOL\tm_OffscreenZBuffer;\n\tBOOL\tm_LockColorDepth;\n\tBOOL\tm_DisableGammaRamp;\n\tBOOL\tm_AutoRefresh;\n\tBOOL\tm_IndependentRefresh;\n\tBOOL\tm_TextureFormat;\n\t//BOOL\tm_FixWinFrame;\n\tBOOL\tm_VideoToSystemMem;\n\tBOOL\tm_FixTextOut;\n\tBOOL\tm_SharedDC;\n\tBOOL\tm_HookGlide;\n\tBOOL\tm_RemapMCI;\n\tBOOL\tm_NoMovies;\n\tBOOL\tm_FixMoviesColor;\n\tBOOL\tm_StretchMovies;\n\tBOOL\tm_BypassMCI;\n\tBOOL\tm_SuppressRelease;\n\tBOOL\tm_KeepCursorWithin;\n\tBOOL\tm_KeepCursorFixed;\n\tBOOL\tm_UseRGB565;\n\tBOOL\tm_SuppressDXErrors;\n\tBOOL\tm_FlipEmulation;\n\tBOOL\tm_MarkBlit;\n\tBOOL\tm_MarkLock;\n\tBOOL\tm_MarkWinG32;\n\tBOOL\tm_MarkGDI32;\n\tBOOL\tm_DumpDIBSection;\n\tBOOL\tm_DumpDevContext;\n\tBOOL\tm_NoSysMemPrimary;\n\tBOOL\tm_NoSysMemBackBuf;\n\tBOOL\tm_NoBlt;\n\tBOOL\tm_BilinearBlt;\n\tBOOL\tm_FastBlt;\n\tBOOL\tm_GDIColorConv;\n\tBOOL\tm_PreventMaximize;\n\tBOOL\tm_ClientRemapping;\n\tBOOL\tm_LockWinStyle;\n\tBOOL\tm_FixParentWin;\n\t//BOOL\tm_ModalStyle;\n\tBOOL\tm_KeepAspectRatio;\n\tBOOL\tm_ForceWinResize;\n\tBOOL\tm_HideMultiMonitor;\n\tBOOL\tm_FixD3DFrame;\n\tBOOL\tm_NoWindowMove;\n\tBOOL\tm_HookChildWin;\n\tBOOL\tm_HookDlgWin;\n\tBOOL\tm_MessageProc;\n\tBOOL\tm_FixMouseHook;\n\tBOOL\tm_FixNCHITTEST;\n\tBOOL\tm_RecoverScreenMode;\n\tBOOL\tm_RefreshOnResize;\n\tBOOL\tm_Init8BPP;\n\tBOOL\tm_Init16BPP;\n\tBOOL\tm_BackBufAttach;\n\tBOOL\tm_ClearTextureFourCC;\n\tBOOL\tm_NoDDExclusiveMode;\n\tBOOL\tm_CreateDesktop;\n\tBOOL\tm_AllowSysmemOn3DDev;\n\tBOOL\tm_HandleAltF4;\n\tBOOL\tm_HandleExceptions;\n\tBOOL\tm_VirtualHeap;\n\tBOOL\tm_SkipFPS;\n\tBOOL\tm_LimitFPS;\n\tBOOL\tm_ShowFPS;\n\tBOOL\tm_ShowFPSOverlay;\n\tBOOL\tm_ShowTimeStretch;\n\tBOOL\tm_TimeStretch;\n\tBOOL\tm_StretchTimers;\n\tBOOL\tm_NormalizePerfCount;\n\tBOOL\tm_CPUSlowDown;\n\tBOOL\tm_CPUMaxUsage;\n\tBOOL\tm_QuarterBlt;\n\tBOOL\tm_FineTiming;\n\tBOOL\tm_EnableTimeFreeze;\n\tBOOL\tm_ReleaseMouse;\n\tBOOL\tm_EnableHotKeys;\n\tBOOL\tm_InterceptRDTSC;\n\tBOOL\tm_HookOpenGL;\n\tBOOL\tm_ForceHookOpenGL;\n\tBOOL\tm_FixPixelZoom;\n\tBOOL\tm_FixBindTexture;\n\tBOOL\tm_HookGlut32;\n\tBOOL\tm_FakeVersion;\n\tBOOL\tm_FullRectBlt;\n\tBOOL\tm_CenterToWin;\n\tBOOL\tm_Deinterlace;\n\tBOOL\tm_LimitDdraw;\n\tBOOL\tm_SuppressOverlay;\n\tBOOL\tm_SurfaceWarn;\n\tBOOL\tm_CapMask;\n\tBOOL\tm_NoWindowHooks;\n\tBOOL\tm_NoDDRAWBlt;\n\tBOOL\tm_NoDDRAWFlip;\n\tBOOL\tm_NoGDIBlt;\n\tBOOL\tm_NoFillRect;\n\tBOOL\tm_FixClipperArea;\n\tBOOL\tm_SharedDCHybrid;\n\tBOOL\tm_SyncPalette;\n\tBOOL\tm_NoWinErrors;\n\tBOOL\tm_PretendVisible;\n\tBOOL\tm_WinInsulation;\n\tBOOL\tm_QualityFonts;\n\tBOOL\tm_AnalyticMode;\n\tBOOL\tm_NoPaletteUpdate;\n\tBOOL\tm_LimitResources;\n\tBOOL\tm_CDROMDriveType;\n\tBOOL\tm_HideCDROMEmpty;\n\tBOOL\tm_HookGOGLibs;\n\tBOOL\tm_BypassGOGLibs;\n\tBOOL\tm_FontBypass;\n\tBOOL\tm_BufferedIOFix;\n\tBOOL\tm_ZBufferClean;\n\tBOOL\tm_ZBuffer0Clean;\n\tBOOL\tm_DynamicZClean;\n\tBOOL\tm_ZBufferHardClean;\n\tBOOL\tm_ZBufferAlways;\n\tBOOL\tm_HotPatchAlways;\n\tBOOL\tm_FreezeInjectedSon;\n\tBOOL\tm_StressResources;\n\tBOOL\tm_NoPower2Fix;\n\tBOOL\tm_NoPerfCounter;\n\tBOOL\tm_DisableFogging;\n\tBOOL\tm_ClearTarget;\n\tBOOL\tm_FixPitch;\n\tBOOL\tm_Power2Width;\n\tBOOL\tm_SuppressIME;\n\tBOOL\tm_SetCompatibility;\n\tBOOL\tm_AEROBoost;\n\tBOOL\tm_DiabloTweak;\n\tBOOL\tm_HookDirectSound;\n\tBOOL\tm_HookWinG32;\n\tBOOL\tm_HookSmackW32;\n\tBOOL\tm_FixSmackLoop;\n\tBOOL\tm_BlockPriorityClass;\n\tBOOL\tm_EASportsHack;\n\tBOOL\tm_LegacyAlloc;\n\tBOOL\tm_DisableMaxWinMode;\n\tBOOL\tm_DisableDisableAltTab;\n\tBOOL\tm_NoImagehlp;\n\tBOOL\tm_ForcesHEL;\n\tBOOL\tm_NoHALDevice;\n\tBOOL\tm_MinimalCaps;\n\tBOOL\tm_SetZBufferBitDepths;\n\tBOOL\tm_ForcesSwapEffect;\n\tBOOL\tm_ColorFix;\n\tBOOL\tm_FixGlobalUnlock;\n\tBOOL\tm_FixFreeLibrary;\n\tBOOL\tm_LoadLibraryErr;\n\tBOOL\tm_FixAdjustWinRect;\n\tBOOL\tm_NoPixelFormat;\n\tBOOL\tm_NoAlphaChannel;\n\tBOOL\tm_FixRefCounter;\n\tBOOL\tm_ReturnNullRef;\n\tBOOL\tm_NoD3DReset;\n\tBOOL\tm_HideDesktop;\n\tBOOL\tm_HideTaskbar;\n\tBOOL\tm_ActivateApp;\n\tBOOL\tm_UnlockZOrder;\n\tBOOL\tm_NoDestroyWindow;\n\tBOOL\tm_LockSysColors;\n\tBOOL\tm_LockReservedPalette;\n\tBOOL\tm_SingleProcAffinity;\n\tBOOL\tm_UseLastCore;\n\tBOOL\tm_WireFrame;\n\tBOOL\tm_NoTextures;\n\tBOOL\tm_BlackWhite;\n\tBOOL\tm_SuppressD3DExt;\n\tBOOL\tm_Enum16bitModes;\n\tBOOL\tm_TrimTextureFormats;\n\tBOOL\tm_D3D8Back16;\n\t//BOOL\tm_RawFormat;\n\tBOOL\tm_LimitScreenRes;\n\tBOOL\tm_InitialRes;\n\tBOOL\tm_MaximumRes;\n\tint\t\tm_VSyncMode;\n\tint\t\tm_VSyncImpl;\n\tint\t\tm_WaitMode;\n\tint\t\tm_PosX;\n\tint\t\tm_PosY;\n\tint\t\tm_SizX;\n\tint\t\tm_SizY;\n\tint\t\tm_InitResW;\n\tint\t\tm_InitResH;\n\tint\t\tm_MaxFPS;\n\tint\t\tm_InitTS;\n\tint\t\tm_FakeVersionId;\n\tint\t\tm_MaxScreenRes;\n\tint\t\tm_ResTypes;\n\tint\t\tm_SwapEffect;\n\tint\t\tm_ClipperMode;\n\tint\t\tm_ScanLine;\n\tint\t\tm_TextureFileFormat;\n\t//}}AFX_DATA\n\n\n// Override\n\t// ClassWizard Generates an overriding virtual function.\n\t//{{AFX_VIRTUAL(CTargetDlg)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV Support\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\t// Generated message map functions\n\t//{{AFX_MSG(CTargetDlg)\n\tafx_msg void OnOpen();\n\tafx_msg void OnOpenLaunch();\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n\npublic:\n\tvirtual BOOL OnInitDialog();\n\n\tafx_msg void OnBnClickedTry();\n\tafx_msg void OnBnClickedKill();\n};\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ Will insert additional declarations immediately before the previous line.\n\n#endif"
  },
  {
    "path": "host/TimeSliderDialog.h",
    "content": "#pragma once\n\n\n// CTimeSlider dialog\n\nclass CTimeSliderDialog : public CDialog\n{\n\tDECLARE_DYNAMIC(CTimeSliderDialog)\n\npublic:\n\tCTimeSliderDialog(CWnd* pParent = NULL);   // standard constructor\n\tvirtual ~CTimeSliderDialog();\n\t//~CTimeSliderDialog();\n\n// Dialog Data\n\tenum { IDD = IDD_TIMESLIDER };\n\t//CSliderCtrl m_TimeSlider;\n\tint i_TimeSlider;\n\nprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\n\tDECLARE_MESSAGE_MAP()\npublic:\n\tafx_msg void OnTimer(UINT_PTR nIDEvent);\npublic:\n\tvirtual BOOL OnInitDialog();\nprotected:\n\tvirtual void OnOK();\nprivate:\n\tchar IdleString[20+1];\n};\n"
  },
  {
    "path": "host/TimeSliderDlg.cpp",
    "content": "// TimeSliderDialog.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"dxwndhost.h\"\n#include \"TimeSliderDialog.h\"\n\n// CTimeSliderDialog dialog\n\nIMPLEMENT_DYNAMIC(CTimeSliderDialog, CDialog)\n\nCTimeSliderDialog::CTimeSliderDialog(CWnd* pParent /*=NULL*/)\n\t: CDialog(CTimeSliderDialog::IDD, pParent)\n{\n\tLoadString(AfxGetResourceHandle(), DXW_STRING_IDLE, IdleString, sizeof(IdleString));\n}\n\nCTimeSliderDialog::~CTimeSliderDialog()\n{\n\tMessageBoxEx(0, \"Time Slider destructor\", \"Warning\", MB_OK | MB_ICONEXCLAMATION, NULL);\n\t//CTimeSliderDialog::OnOK(); // kill timer....\n}\n\nvoid CTimeSliderDialog::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\t//{{AFX_DATA_MAP(CTargetDlg)\n\tDDX_Slider(pDX, IDC_TIMESLIDER, i_TimeSlider);\n\t//}}AFX_DATA_MAP\n}\n\n\nBEGIN_MESSAGE_MAP(CTimeSliderDialog, CDialog)\n\tON_WM_TIMER()\nEND_MESSAGE_MAP()\n\n#define IDTimeSiderTIMER 2\n\n// CTimeSliderDialog message handlers\n\nvoid CTimeSliderDialog::OnTimer(UINT_PTR nIDEvent)\n{\n\tCSliderCtrl *Slider;\n\tCStatic *Text;\n\tchar sMsg[81];\n\tstatic int iLastPos=-1;\n\textern char *GetTSCaption(int);\n\n\tSlider=(CSliderCtrl *)this->GetDlgItem(IDC_TIMESLIDER);\n\tText=(CStatic *)this->GetDlgItem(IDC_TIMESPEED);\n\n\tCDialog::OnTimer(nIDEvent);\n\ti_TimeSlider=Slider->GetPos();\n\tif(GetHookStatus(NULL)!=DXW_RUNNING) {\n\t\tSlider->SetPos(0);\n\t\tText->SetWindowTextA(IdleString);\n\t\treturn;\n\t}\n\tif(i_TimeSlider==iLastPos){\n\t\t// no change, check for keyboard input changes\n\t\ti_TimeSlider=GetHookInfo()->TimeShift;\n\t\tif(i_TimeSlider != iLastPos) Slider->SetPos(i_TimeSlider);\n\t}\n\telse {\n\t\t// slider position changed, set the new value\n\t\tif (i_TimeSlider < -8) i_TimeSlider=-8;\n\t\tif (i_TimeSlider >  8) i_TimeSlider= 8;\n\t\tGetHookInfo()->TimeShift=i_TimeSlider;\n\t}\n\tiLastPos = i_TimeSlider;\n\tsprintf(sMsg, \"Time speed %s\", GetTSCaption(i_TimeSlider));\n\tText->SetWindowTextA(sMsg);\n}\n\nBOOL CTimeSliderDialog::OnInitDialog()\n{\n\tCSliderCtrl *Slider;\n\tCDialog::OnInitDialog();\n\n\tSlider=(CSliderCtrl *)this->GetDlgItem(IDC_TIMESLIDER);\n\tSlider->SetRange(-8, +8, 0);\n\tSlider->SetTicFreq(1);\n\tSlider->SetPos(GetHookInfo()->TimeShift);\n\tSetTimer(IDTimeSiderTIMER, 1000, NULL);\n\n\t// TODO:  Add extra initialization here\n\n\treturn TRUE;  // return TRUE unless you set the focus to a control\n}\n\nvoid CTimeSliderDialog::OnOK()\n{\n\t// TODO: Add your specialized code here and/or call the base class\n\n\t// stop timer\n\t// MessageBoxEx(0, \"Stopping Time Slider dialog\", \"Warning\", MB_OK | MB_ICONEXCLAMATION, NULL);\n\tKillTimer(IDTimeSiderTIMER);\n\tGetHookInfo()->TimeShift=i_TimeSlider;\n\tCDialog::OnOK();\n}\n"
  },
  {
    "path": "host/TlHelp32.h",
    "content": "/*****************************************************************************\\\n*                                                                             *\n* tlhelp32.h -  WIN32 tool help functions, types, and definitions             *\n*                                                                             *\n* Version 1.0                                                                 *\n*                                                                             *\n* NOTE: windows.h/winbase.h must be #included first                           *\n*                                                                             *\n* Copyright (c) Microsoft Corp.  All rights reserved.                         *\n*                                                                             *\n\\*****************************************************************************/\n\n#ifndef _INC_TOOLHELP32\n#define _INC_TOOLHELP32\n\n#if _MSC_VER > 1000\n#pragma once\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {            /* Assume C declarations for C++ */\n#endif  /* __cplusplus */\n\n#define MAX_MODULE_NAME32 255\n\n/****** Shapshot function **********************************************/\n\nHANDLE\nWINAPI\nCreateToolhelp32Snapshot(\n    DWORD dwFlags,\n    DWORD th32ProcessID\n    );\n\n//\n// The th32ProcessID argument is only used if TH32CS_SNAPHEAPLIST or\n// TH32CS_SNAPMODULE is specified. th32ProcessID == 0 means the current\n// process.\n//\n// NOTE that all of the snapshots are global except for the heap and module\n//      lists which are process specific. To enumerate the heap or module\n//      state for all WIN32 processes call with TH32CS_SNAPALL and the\n//      current process. Then for each process in the TH32CS_SNAPPROCESS\n//      list that isn't the current process, do a call with just\n//      TH32CS_SNAPHEAPLIST and/or TH32CS_SNAPMODULE.\n//\n// dwFlags\n//\n#define TH32CS_SNAPHEAPLIST 0x00000001\n#define TH32CS_SNAPPROCESS  0x00000002\n#define TH32CS_SNAPTHREAD   0x00000004\n#define TH32CS_SNAPMODULE   0x00000008\n#define TH32CS_SNAPMODULE32 0x00000010\n#define TH32CS_SNAPALL      (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)\n#define TH32CS_INHERIT      0x80000000\n//\n// Use CloseHandle to destroy the snapshot\n//\n\n/****** heap walking ***************************************************/\n\ntypedef struct tagHEAPLIST32\n{\n    SIZE_T dwSize;\n    DWORD  th32ProcessID;   // owning process\n    ULONG_PTR  th32HeapID;      // heap (in owning process's context!)\n    DWORD  dwFlags;\n} HEAPLIST32;\ntypedef HEAPLIST32 *  PHEAPLIST32;\ntypedef HEAPLIST32 *  LPHEAPLIST32;\n//\n// dwFlags\n//\n#define HF32_DEFAULT      1  // process's default heap\n#define HF32_SHARED       2  // is shared heap\n\nBOOL\nWINAPI\nHeap32ListFirst(\n    HANDLE hSnapshot,\n    LPHEAPLIST32 lphl\n    );\n\nBOOL\nWINAPI\nHeap32ListNext(\n    HANDLE hSnapshot,\n    LPHEAPLIST32 lphl\n    );\n\ntypedef struct tagHEAPENTRY32\n{\n    SIZE_T dwSize;\n    HANDLE hHandle;     // Handle of this heap block\n    ULONG_PTR dwAddress;   // Linear address of start of block\n    SIZE_T dwBlockSize; // Size of block in bytes\n    DWORD  dwFlags;\n    DWORD  dwLockCount;\n    DWORD  dwResvd;\n    DWORD  th32ProcessID;   // owning process\n    ULONG_PTR  th32HeapID;      // heap block is in\n} HEAPENTRY32;\ntypedef HEAPENTRY32 *  PHEAPENTRY32;\ntypedef HEAPENTRY32 *  LPHEAPENTRY32;\n//\n// dwFlags\n//\n#define LF32_FIXED    0x00000001\n#define LF32_FREE     0x00000002\n#define LF32_MOVEABLE 0x00000004\n\nBOOL\nWINAPI\nHeap32First(\n    LPHEAPENTRY32 lphe,\n    DWORD th32ProcessID,\n    ULONG_PTR th32HeapID\n    );\n\nBOOL\nWINAPI\nHeap32Next(\n    LPHEAPENTRY32 lphe\n    );\n\nBOOL\nWINAPI\nToolhelp32ReadProcessMemory(\n    DWORD   th32ProcessID,\n    LPCVOID lpBaseAddress,\n    LPVOID  lpBuffer,\n    SIZE_T  cbRead,\n    SIZE_T *lpNumberOfBytesRead\n    );\n\n/***** Process walking *************************************************/\n\ntypedef struct tagPROCESSENTRY32W\n{\n    DWORD   dwSize;\n    DWORD   cntUsage;\n    DWORD   th32ProcessID;          // this process\n    ULONG_PTR th32DefaultHeapID;\n    DWORD   th32ModuleID;           // associated exe\n    DWORD   cntThreads;\n    DWORD   th32ParentProcessID;    // this process's parent process\n    LONG    pcPriClassBase;         // Base priority of process's threads\n    DWORD   dwFlags;\n    WCHAR   szExeFile[MAX_PATH];    // Path\n} PROCESSENTRY32W;\ntypedef PROCESSENTRY32W *  PPROCESSENTRY32W;\ntypedef PROCESSENTRY32W *  LPPROCESSENTRY32W;\n\nBOOL\nWINAPI\nProcess32FirstW(\n    HANDLE hSnapshot,\n    LPPROCESSENTRY32W lppe\n    );\n\nBOOL\nWINAPI\nProcess32NextW(\n    HANDLE hSnapshot,\n    LPPROCESSENTRY32W lppe\n    );\n\ntypedef struct tagPROCESSENTRY32\n{\n    DWORD   dwSize;\n    DWORD   cntUsage;\n    DWORD   th32ProcessID;          // this process\n    ULONG_PTR th32DefaultHeapID;\n    DWORD   th32ModuleID;           // associated exe\n    DWORD   cntThreads;\n    DWORD   th32ParentProcessID;    // this process's parent process\n    LONG    pcPriClassBase;         // Base priority of process's threads\n    DWORD   dwFlags;\n    CHAR    szExeFile[MAX_PATH];    // Path\n} PROCESSENTRY32;\ntypedef PROCESSENTRY32 *  PPROCESSENTRY32;\ntypedef PROCESSENTRY32 *  LPPROCESSENTRY32;\n\nBOOL\nWINAPI\nProcess32First(\n    HANDLE hSnapshot,\n    LPPROCESSENTRY32 lppe\n    );\n\nBOOL\nWINAPI\nProcess32Next(\n    HANDLE hSnapshot,\n    LPPROCESSENTRY32 lppe\n    );\n\n#ifdef UNICODE\n#define Process32First Process32FirstW\n#define Process32Next Process32NextW\n#define PROCESSENTRY32 PROCESSENTRY32W\n#define PPROCESSENTRY32 PPROCESSENTRY32W\n#define LPPROCESSENTRY32 LPPROCESSENTRY32W\n#endif  // !UNICODE\n\n/***** Thread walking **************************************************/\n\ntypedef struct tagTHREADENTRY32\n{\n    DWORD   dwSize;\n    DWORD   cntUsage;\n    DWORD   th32ThreadID;       // this thread\n    DWORD   th32OwnerProcessID; // Process this thread is associated with\n    LONG    tpBasePri;\n    LONG    tpDeltaPri;\n    DWORD   dwFlags;\n} THREADENTRY32;\ntypedef THREADENTRY32 *  PTHREADENTRY32;\ntypedef THREADENTRY32 *  LPTHREADENTRY32;\n\nBOOL\nWINAPI\nThread32First(\n    HANDLE hSnapshot,\n    LPTHREADENTRY32 lpte\n    );\n\nBOOL\nWINAPI\nThread32Next(\n    HANDLE hSnapshot,\n    LPTHREADENTRY32 lpte\n    );\n\n/***** Module walking *************************************************/\n\ntypedef struct tagMODULEENTRY32W\n{\n    DWORD   dwSize;\n    DWORD   th32ModuleID;       // This module\n    DWORD   th32ProcessID;      // owning process\n    DWORD   GlblcntUsage;       // Global usage count on the module\n    DWORD   ProccntUsage;       // Module usage count in th32ProcessID's context\n    BYTE  * modBaseAddr;        // Base address of module in th32ProcessID's context\n    DWORD   modBaseSize;        // Size in bytes of module starting at modBaseAddr\n    HMODULE hModule;            // The hModule of this module in th32ProcessID's context\n    WCHAR   szModule[MAX_MODULE_NAME32 + 1];\n    WCHAR   szExePath[MAX_PATH];\n} MODULEENTRY32W;\ntypedef MODULEENTRY32W *  PMODULEENTRY32W;\ntypedef MODULEENTRY32W *  LPMODULEENTRY32W;\n\nBOOL\nWINAPI\nModule32FirstW(\n    HANDLE hSnapshot,\n    LPMODULEENTRY32W lpme\n    );\n\nBOOL\nWINAPI\nModule32NextW(\n    HANDLE hSnapshot,\n    LPMODULEENTRY32W lpme\n    );\n\n\ntypedef struct tagMODULEENTRY32\n{\n    DWORD   dwSize;\n    DWORD   th32ModuleID;       // This module\n    DWORD   th32ProcessID;      // owning process\n    DWORD   GlblcntUsage;       // Global usage count on the module\n    DWORD   ProccntUsage;       // Module usage count in th32ProcessID's context\n    BYTE  * modBaseAddr;        // Base address of module in th32ProcessID's context\n    DWORD   modBaseSize;        // Size in bytes of module starting at modBaseAddr\n    HMODULE hModule;            // The hModule of this module in th32ProcessID's context\n    char    szModule[MAX_MODULE_NAME32 + 1];\n    char    szExePath[MAX_PATH];\n} MODULEENTRY32;\ntypedef MODULEENTRY32 *  PMODULEENTRY32;\ntypedef MODULEENTRY32 *  LPMODULEENTRY32;\n\n//\n// NOTE CAREFULLY that the modBaseAddr and hModule fields are valid ONLY\n// in th32ProcessID's process context.\n//\n\nBOOL\nWINAPI\nModule32First(\n    HANDLE hSnapshot,\n    LPMODULEENTRY32 lpme\n    );\n\nBOOL\nWINAPI\nModule32Next(\n    HANDLE hSnapshot,\n    LPMODULEENTRY32 lpme\n    );\n\n#ifdef UNICODE\n#define Module32First Module32FirstW\n#define Module32Next Module32NextW\n#define MODULEENTRY32 MODULEENTRY32W\n#define PMODULEENTRY32 PMODULEENTRY32W\n#define LPMODULEENTRY32 LPMODULEENTRY32W\n#endif  // !UNICODE\n\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif // _INC_TOOLHELP32\n\n"
  },
  {
    "path": "host/VJoyDialog.cpp",
    "content": "// VJoyDialog.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"dxwndhost.h\"\n#include \"VJoyDialog.h\"\n#include <math.h> \n\n#define XSPAN 128\n#define YSPAN 128\n\n/*\n\t// calculates the closest m_Slider value\n\tint pos, delta, lastdelta;\n\tlastdelta=200;\n\tfor(pos=-10; pos<=10; pos++){\n\t\tint s;\n\t\ts = (int)(100 * pow(TICKMULTIPLIER, (float)pos)); \n\t\tdelta = abs(s - this->m_VJoySensivity);\n\t\tif(delta > lastdelta) break;\n\t\tlastdelta = delta;\n\t}\n\tthis->m_Slider = pos-1; \n*/\n\nint CVJoyDialog::GetSliderPos(int sensivity)\n{\n\tint pos;\n\tint delta, lastdelta;\n\tlastdelta = 400; // initial value big enough ...\n\tfor(pos=-20; pos<=20; pos++){\n\t\tdelta = abs(Multipliers[20+pos] - sensivity);\n\t\tif(delta > lastdelta) break;\n\t\tlastdelta = delta;\n\t}\n\treturn pos-1; \n}\n\nint CVJoyDialog::SetSensivity(int slider)\n{\n\tif(slider < -20) slider = -20;\n\tif(slider >  20) slider =  20;\n\treturn Multipliers[20+slider];\n}\n\nvoid CVJoyDialog::InitSensivity(void)\n{\n\tint Multiplier;\n\tint pos;\n\tfor(Multiplier = 100, pos=-1; pos>=-20; pos--) Multipliers[20+pos] = Multiplier = (Multiplier * 100) / 105; \n\tfor(Multiplier = 100, pos= 1; pos<= 20; pos++) Multipliers[20+pos] = Multiplier = (Multiplier * 105) / 100; \n\tMultipliers[20] = 100;\n}\n\n// CVJoyDialog dialog\n\nIMPLEMENT_DYNAMIC(CVJoyDialog, CDialog)\n\nCVJoyDialog::CVJoyDialog(CWnd* pParent /*=NULL*/)\n\t: CDialog(CVJoyDialog::IDD, pParent)\n{\n\t//MessageBoxEx(0, \"VJoy constructor\", \"Warning\", MB_OK | MB_ICONEXCLAMATION, NULL);\n}\n\nCVJoyDialog::~CVJoyDialog()\n{\n\t//MessageBoxEx(0, \"VJoy destructor\", \"Warning\", MB_OK | MB_ICONEXCLAMATION, NULL);\n\t//CVJoyDialog::OnOK(); // kill timer....\n}\n\nvoid CVJoyDialog::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\t//{{AFX_DATA_MAP(CTargetDlg)\n\tDDX_Check(pDX, IDC_VJOYENABLED, this->m_VJoyEnabled);\n\tDDX_Check(pDX, IDC_CROSSENABLED, this->m_CrossEnabled);\n\tDDX_Check(pDX, IDC_INVERTXAXIS, this->m_InvertXAxis);\n\tDDX_Check(pDX, IDC_INVERTYAXIS, this->m_InvertYAxis);\n\tDDX_Check(pDX, IDC_B1AUTOFIRE, this->m_B1AutoFire);\n\tDDX_Check(pDX, IDC_B2AUTOFIRE, this->m_B2AutoFire);\n\tDDX_Check(pDX, IDC_VJAUTOCENTER, this->m_VJAutoCenter);\n\tDDX_Check(pDX, IDC_VJMOUSEWHEEL, this->m_VJMouseWheel);\n\tDDX_Radio(pDX, IDC_VJ_USEMOUSE, this->m_UseMode);\n\tDDX_Slider(pDX, IDC_SENSIVITY_SLIDER, this->m_Slider);\n\t//}}AFX_DATA_MAP\n}\n\n\nBEGIN_MESSAGE_MAP(CVJoyDialog, CDialog)\n\tON_WM_TIMER()\nEND_MESSAGE_MAP()\n\n#define IDVJoyTIMER 3\n#define FINDERSIZE 5\n#define CROSSSIZE 20\n#define TICKMULTIPLIER 1.05f\n\n// CVJoyDialog message handlers\n\nvoid CVJoyDialog::OnTimer(UINT_PTR nIDEvent)\n{\n\t// IDC_VJOYPOSITION\n\tint x, y;\n\tDWORD dwVJoyStatus;\n\tDWORD dwSensivity;\n\tCString text;\n\tstatic DWORD dwLastSensivity = 0;\n\n\t// takes care of external updates of sensivity by mouse wheel\n\tdwSensivity = GetHookInfo()->VJoySensivity;\n\tif(dwLastSensivity && (dwSensivity != dwLastSensivity)){\n\t\tCSliderCtrl *Slider;\n\t\tthis->m_Slider = this->GetSliderPos(dwSensivity);\n\t\tSlider=(CSliderCtrl *)this->GetDlgItem(IDC_SENSIVITY_SLIDER);\n\t\tSlider->SetPos(this->m_Slider);\n\t}\n\n\tCDialog::UpdateData(); // calls DoDataExchange\n\tthis->m_VJoySensivity = this->SetSensivity(m_Slider);\n\tdwLastSensivity = this->m_VJoySensivity;\n\n\tdwVJoyStatus = GetHookInfo()->VJoyStatus;\n\tthis->m_VJoyPresent = (dwVJoyStatus & VJOYPRESENT) ? 1 : 0;\n\tdwVJoyStatus &= VJOYPRESENT; // clear all BUT VJOYPRESENT!\n\tif(this->m_VJoyEnabled)\t\tdwVJoyStatus |= VJOYENABLED;\n\tif(this->m_CrossEnabled)\tdwVJoyStatus |= CROSSENABLED;\n\tif(this->m_InvertYAxis)\t\tdwVJoyStatus |= INVERTYAXIS;\n\tif(this->m_InvertXAxis)\t\tdwVJoyStatus |= INVERTXAXIS;\n\tif(this->m_B1AutoFire)\t\tdwVJoyStatus |= B1AUTOFIRE;\n\tif(this->m_B2AutoFire)\t\tdwVJoyStatus |= B2AUTOFIRE;\n\tif(this->m_VJAutoCenter)\tdwVJoyStatus |= VJAUTOCENTER;\n\tif(this->m_VJMouseWheel)\tdwVJoyStatus |= VJMOUSEWHEEL;\n\tswitch(this->m_UseMode){\n\t\tcase 0: dwVJoyStatus |= VJMOUSEMAP; break;\n\t\tcase 1: dwVJoyStatus |= VJKEYBOARDMAP; break;\n\t\tcase 2: dwVJoyStatus |= (VJKEYBOARDMAP|VJMOUSEMAP); break;\n\t}\n\n\tif(this->m_VJoyEnabled && this->m_VJoyPresent){\n\t\tCWnd *JoyPos = this->GetDlgItem(IDC_VJOYPOSITION);\n\t\tCDC *dc = JoyPos->GetDC();\n\t\tRECT client;\n\t\tJoyPos->GetClientRect(&client);\n\t\tx = (client.right/2)  + ((GetHookInfo()->joyposx * client.right) / XSPAN);\n\t\ty = (client.bottom/2) + ((GetHookInfo()->joyposy * client.bottom) / YSPAN);\n\t\t// clear whole square area\n\t\tdc->FillRect(&client, Background);\n\t\t// draw sensivity circle\n\t\tdc->SelectObject(SensivityPen);\n\t\tdc->Ellipse(\n\t\t\t(client.right)*(250-dwSensivity)/500, \n\t\t\t(client.bottom)*(250-dwSensivity)/500, \n\t\t\t(client.right)*(250+dwSensivity)/500, \n\t\t\t(client.bottom)*(250+dwSensivity)/500);\n\t\t// draw center crossfinder\n\t\tdc->SelectObject(CenterPen);\n\t\tdc->MoveTo((client.right/2)-CROSSSIZE,(client.bottom/2));\n\t\tdc->LineTo((client.right/2)+CROSSSIZE,(client.bottom/2));\n\t\tdc->MoveTo((client.right/2),(client.bottom/2)-CROSSSIZE);\n\t\tdc->LineTo((client.right/2),(client.bottom/2)+CROSSSIZE);\n\t\t// draw joystick crossfinder\n\t\tdc->SelectObject(FinderPen);\n\t\tint x0, y0;\n\t\tif(x<client.left) x = client.left;\n\t\tif(x>client.right) x = client.right;\n\t\tif(y<client.top) y = client.top;\n\t\tif(y>client.bottom) y = client.bottom;\n\t\tx0 = (x-FINDERSIZE)<client.left ? client.left : x-FINDERSIZE;\n\t\tdc->MoveTo(x0,y);\n\t\tx0 = (x+FINDERSIZE)>client.right ? client.right : x+FINDERSIZE;\n\t\tdc->LineTo(x0,y);\n\t\ty0 = (y-FINDERSIZE)<client.top ? client.top : y-FINDERSIZE;\n\t\tdc->MoveTo(x,y0);\n\t\ty0 = (y+FINDERSIZE)>client.bottom ? client.bottom : y+FINDERSIZE;\n\t\tdc->LineTo(x,y0);\n\t\t//dc->MoveTo(20,20);\n\t\ttext.Format(\"%d,%d\", GetHookInfo()->joyposx, GetHookInfo()->joyposy);\n\t\tdc->TextOutA(5, 5, text);\n\t\ttext.Format(\"x%d%%\", GetHookInfo()->VJoySensivity);\n\t\tdc->TextOutA(5, 200, text);\n\t\tdc->DeleteDC();\n\t}\n\tGetHookInfo()->VJoyStatus = dwVJoyStatus;\n\tGetHookInfo()->VJoySensivity = this->m_VJoySensivity;\n\tdwLastSensivity = this->m_VJoySensivity;\n}\n\nBOOL CVJoyDialog::OnInitDialog()\n{\n\tDWORD dwVJoyStatus;\n\tCSliderCtrl *Slider;\n\n\t// TODO:  Add extra initialization here\n\tBackground = new(CBrush);\n\tBackground->CreateSolidBrush(RGB(255, 255, 255));\t// white\n\tCenterPen = new(CPen);\n\tCenterPen->CreatePen(PS_DOT, 1, RGB(255, 0, 0)); // red\n\tFinderPen = new(CPen);\n\tFinderPen->CreatePen(PS_SOLID, 1, RGB(0, 0, 0)); // black\n\tSensivityPen = new(CPen);\n\tSensivityPen->CreatePen(PS_DOT, 1, RGB(127, 127, 255)); // clear blue\n\n\tdwVJoyStatus = GetHookInfo()->VJoyStatus;\n\tthis->m_VJoyPresent   = (dwVJoyStatus & VJOYPRESENT) ? 1 : 0;\n\tthis->m_VJoyEnabled   = (dwVJoyStatus & VJOYENABLED) ? 1 : 0;\n\tthis->m_CrossEnabled  = (dwVJoyStatus & CROSSENABLED) ? 1 : 0;\n\tthis->m_InvertYAxis   = (dwVJoyStatus & INVERTYAXIS) ? 1 : 0;\n\tthis->m_InvertXAxis   = (dwVJoyStatus & INVERTXAXIS) ? 1 : 0;\n\tthis->m_B1AutoFire    = (dwVJoyStatus & B1AUTOFIRE) ? 1 : 0;\n\tthis->m_B2AutoFire    = (dwVJoyStatus & B2AUTOFIRE) ? 1 : 0;\n\tthis->m_VJAutoCenter  = (dwVJoyStatus & VJAUTOCENTER) ? 1 : 0;\n\tthis->m_VJMouseWheel  = (dwVJoyStatus & VJMOUSEWHEEL) ? 1 : 0;\n\tthis->m_UseMode = (dwVJoyStatus & VJKEYBOARDMAP) ? ((dwVJoyStatus & VJMOUSEMAP) ? 2 : 1) : 0;\n\tthis->m_VJoySensivity = GetHookInfo()->VJoySensivity;\n\t// calculates the m_Slider values\n\tthis->InitSensivity();\n\tthis->m_Slider = this->GetSliderPos(this->m_VJoySensivity); \n\tSlider=(CSliderCtrl *)this->GetDlgItem(IDC_SENSIVITY_SLIDER);\n\tSlider->SetRange(-20, 20, 1);\n\n\tCDialog::OnInitDialog();\n\n\tSetTimer(IDVJoyTIMER, 40, NULL);\n\n\treturn TRUE;  // return TRUE unless you set the focus to a control\n}\n\nvoid CVJoyDialog::OnOK()\n{\n\tchar val[80];\n\tDWORD dwVJoyStatus;\n\t// stop timer\n\tKillTimer(IDVJoyTIMER);\n\t// update joystick flags\n\tCDialog::UpdateData(); // calls DoDataExchange\n\tdwVJoyStatus = GetHookInfo()->VJoyStatus;\n\tdwVJoyStatus &= VJOYPRESENT; // clear all BUT VJOYPRESENT!\n\tif(this->m_VJoyEnabled)\t\tdwVJoyStatus |= VJOYENABLED;\n\tif(this->m_CrossEnabled)\tdwVJoyStatus |= CROSSENABLED;\n\tif(this->m_InvertYAxis)\t\tdwVJoyStatus |= INVERTYAXIS;\n\tif(this->m_InvertXAxis)\t\tdwVJoyStatus |= INVERTXAXIS;\n\tif(this->m_B1AutoFire)\t\tdwVJoyStatus |= B1AUTOFIRE;\n\tif(this->m_B2AutoFire)\t\tdwVJoyStatus |= B2AUTOFIRE;\n\tif(this->m_VJAutoCenter)\tdwVJoyStatus |= VJAUTOCENTER;\n\tif(this->m_VJMouseWheel)\tdwVJoyStatus |= VJMOUSEWHEEL;\n\tswitch(this->m_UseMode){\n\t\tcase 0: dwVJoyStatus |= VJMOUSEMAP; break;\n\t\tcase 1: dwVJoyStatus |= VJKEYBOARDMAP; break;\n\t\tcase 2: dwVJoyStatus |= (VJKEYBOARDMAP|VJMOUSEMAP); break;\n\t}\n\tthis->m_VJoySensivity = (int)(100 * pow(TICKMULTIPLIER, (float)this->m_Slider)); \n\tsprintf_s(val, sizeof(val), \"%i\", dwVJoyStatus);\n\tWritePrivateProfileString(\"joystick\", \"flags\", val, gInitPath);\n\tsprintf_s(val, sizeof(val), \"%i\", this->m_VJoySensivity);\n\tWritePrivateProfileString(\"joystick\", \"sensivity\", val, gInitPath);\n\tGetHookInfo()->VJoyStatus = dwVJoyStatus;\n\tCDialog::OnOK();\n}"
  },
  {
    "path": "host/VJoyDialog.h",
    "content": "#pragma once\n\n\n// CTimeSlider dialog\n\nclass CVJoyDialog : public CDialog\n{\n\tDECLARE_DYNAMIC(CVJoyDialog)\n\npublic:\n\tCVJoyDialog(CWnd* pParent = NULL);   // standard constructor\n\tvirtual ~CVJoyDialog();\n\t//~VJoyDialog();\n\n// Dialog Data\n\tenum { IDD = IDD_VJOYDIALOG };\n\nprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\n\tDECLARE_MESSAGE_MAP()\npublic:\n\tafx_msg void OnTimer(UINT_PTR nIDEvent);\npublic:\n\tvirtual BOOL OnInitDialog();\nprotected:\n\tvirtual void OnOK();\n\t//virtual void OnCancel();\nprivate:\n\tint GetSliderPos(int);\n\tint SetSensivity(int);\n\tvoid InitSensivity(void);\n\tBOOL m_VJoyPresent;\n\tBOOL m_VJoyEnabled;\n\tBOOL m_CrossEnabled;\n\tBOOL m_InvertYAxis;\n\tBOOL m_InvertXAxis;\n\tBOOL m_B1AutoFire;\n\tBOOL m_B2AutoFire;\n\tBOOL m_VJAutoCenter;\n\tBOOL m_VJMouseWheel;\n\tint m_UseMode;\n\tint m_VJoySensivity;\n\tint m_Slider;\n\tCBrush *Background;\n\tCPen *CenterPen;\n\tCPen *FinderPen;\n\tCPen *SensivityPen;\n\tint Multipliers[41];\n};\n"
  },
  {
    "path": "host/ViewFlagsDialog.cpp",
    "content": "// ViewFlagsDialog.cpp : implementation file\n//\n\n#include \"stdafx.h\"\n#include \"dxwndhost.h\"\n#include \"ViewFlagsDialog.h\"\n\n// CViewFlagsDialog dialog\n\nIMPLEMENT_DYNAMIC(CViewFlagsDialog, CDialog)\n\nCViewFlagsDialog::CViewFlagsDialog(CWnd* pParent /*=NULL*/)\n\t: CDialog(CViewFlagsDialog::IDD, pParent)\n{\n}\n\nCViewFlagsDialog::~CViewFlagsDialog()\n{\n}\n\nvoid CViewFlagsDialog::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n}\n\nBEGIN_MESSAGE_MAP(CViewFlagsDialog, CDialog)\nEND_MESSAGE_MAP()\n\n// CViewFlagsDialog message handlers\n\nBOOL CViewFlagsDialog::OnInitDialog()\n{\n\tCDialog::OnInitDialog();\n\n\t// TODO:  Add extra initialization here\n\tCString sflags;\n\textern TARGETMAP *ViewTarget; // dirty !!!!\n\tint i;\n\tTARGETMAP *t;\n\tDWORD dword;\n\tt = ViewTarget;\n\tsflags.Append(\"Flags1: \");\n\tfor(i=0, dword = t->flags ; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat(\"%s \", GetFlagCaption(0,i));\n\tsflags.Append(\"\\nFlags2: \");\n\tfor(i=0, dword = t->flags2; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat(\"%s \", GetFlagCaption(1,i));\n\tsflags.Append(\"\\nFlags3: \");\n\tfor(i=0, dword = t->flags3; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat(\"%s \", GetFlagCaption(2,i));\n\tsflags.Append(\"\\nFlags4: \");\n\tfor(i=0, dword = t->flags4; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat(\"%s \", GetFlagCaption(3,i));\n\tsflags.Append(\"\\nFlags5: \");\n\tfor(i=0, dword = t->flags5; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat(\"%s \", GetFlagCaption(4,i));\n\tsflags.Append(\"\\nFlags6: \");\n\tfor(i=0, dword = t->flags6; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat(\"%s \", GetFlagCaption(5,i));\n\tsflags.Append(\"\\nFlags7: \");\n\tfor(i=0, dword = t->flags7; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat(\"%s \", GetFlagCaption(6,i));\n\tsflags.Append(\"\\nFlags8: \");\n\tfor(i=0, dword = t->flags8; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat(\"%s \", GetFlagCaption(7,i));\n\tsflags.Append(\"\\nFlags9: \");\n\tfor(i=0, dword = t->flags8; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat(\"%s \", GetFlagCaption(8,i));\n\tsflags.Append(\"\\nFlags10: \");\n\tfor(i=0, dword = t->flags8; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat(\"%s \", GetFlagCaption(9,i));\n\tsflags.Append(\"\\nTFlags: \");\n\tfor(i=0, dword = t->tflags; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat(\"%s \", GetFlagCaption(10,i));\n\n\tthis->SetDlgItemTextA(IDC_DESKTOPINFO, sflags);\n\tthis->SetWindowTextA(t->path);\n\n\treturn TRUE;  // return TRUE unless you set the focus to a control\n\t// EXCEPTION: OCX Property Pages should return FALSE\n}\n\nvoid CViewFlagsDialog::OnOK()\n{\n\t// TODO: Add your specialized code here and/or call the base class\n\n\tCDialog::OnOK();\n}\n"
  },
  {
    "path": "host/ViewFlagsDialog.h",
    "content": "#pragma once\n\n\n// CViewFlagsDialog dialog\n\nclass CViewFlagsDialog : public CDialog\n{\n\tDECLARE_DYNAMIC(CViewFlagsDialog)\n\npublic:\n\tCViewFlagsDialog(CWnd* pParent = NULL);   // standard constructor\n\tvirtual ~CViewFlagsDialog();\n\n\t// Dialog Data\n\tenum { IDD = IDD_VIEWFLAGS };\n\nprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\n\n\tDECLARE_MESSAGE_MAP()\npublic:\npublic:\n\tvirtual BOOL OnInitDialog();\nprotected:\n\tvirtual void OnOK();\n};\n"
  },
  {
    "path": "host/bmpext.h",
    "content": "#pragma once\n\n#include \"afxtempl.h\"\n\n//MakeRgn helper data definition\ntypedef CTypedPtrList< CPtrList, LPRECT > RECTLIST;\n\n//////////////////////////////////////////////////////////////////////////\n// DD Bitmap draw extensions class\nclass AFX_EXT_CLASS CDDBDrawEx\n{\npublic:\n\tCDDBDrawEx(CDC* pDC, CBitmap* pbmSrc, CBitmap* pbmBack = NULL);\n\tvirtual ~CDDBDrawEx();\n\n\tvoid Fill(CRect& rDest);\n\tvoid Draw(CRect& rDest, CPoint& pntSrc);\n\tvoid DrawTransparent(CRect& rDest, CPoint& pntSrc, COLORREF crMask );\n\tHRGN MakeRgn(COLORREF cTransparentColor = 0, COLORREF cTolerance = 0x101010);\n\nprivate:\n\tCDC* m_pDC;\n\tCBitmap* m_pbmSrc;\n\tCBitmap* m_pbmBack;\n\n\tLPRGNDATA RectList2RGNDATA( RECTLIST& rl, RECT& rBound, int& iByteCount );\n};\n\n///////////////////////////////////////////////////////////////////////////\n// DIB support classes\nclass CDibException\n{\npublic:\n\t//exception types: not enough memory, operation not supported, invalid pixel position\n\tenum {E_NOMEM, E_NOTSUPP, E_INVPOS};\n\tCDibException( int iReason ) : m_iReason(iReason) {}\n\n\tstatic void Throw( int iReason ){ throw new CDibException(iReason); }\n\npublic:\n\tint m_iReason;\n};\n\nclass AFX_EXT_CLASS CDib\n{\n// Constructors\npublic:\n\tCDib();\n\tvirtual ~CDib();\n\n// Attributes\nprotected:\n\tLPBYTE m_pBits;\n\tLPBITMAPINFO m_pBMI;\n\npublic:\t\n\tCPalette* m_pPalette;\n\npublic:\n\tDWORD Width() const;\n\tDWORD Height() const;\n\tWORD  NumColors(  BITMAPINFOHEADER& bmiHeader ) const;\n\tBOOL  IsValid() const;\n\n\tvoid SetPixel( int iX, int iY, RGBQUAD& rgbPixel );\n\tRGBQUAD GetPixel(int iX, int iY);\n\nprivate:\n\tvoid AssertPosition( int iX, int iY );\n\tDWORD PaletteSize() const;\n\n// Operations\npublic:\n\tBOOL  Draw(CDC*, CRect& rectDC, CRect& rectDIB) const;\n\t\n\tDWORD Save(CFile& file) const;\n\tDWORD Read(CFile& file, BOOL bFromResource = FALSE );\n\tDWORD ReadFromResource(UINT nResID);\n\n\tvoid Invalidate();\n\t\n// Implementation\nprotected:\n\tBOOL  CreatePalette();\n\n\tvoid Free();\n\npublic:\n\tHBITMAP CreateDDBitmap(CDC* pDC);\n\tHBITMAP\tCreateDDBitmap( HDC hDC );\n\tBOOL Compress(CDC* pDC, BOOL bCompress );\n\nprotected:\n\tCDib& operator = (CDib& dib);\n};\n\n"
  },
  {
    "path": "host/cdib.cpp",
    "content": "// cdib.cpp\n// new version for WIN32\n\n#include \"stdafx.h\"\n#include \"cdib.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n \nIMPLEMENT_SERIAL(CDib, CObject, 0);\n\nCDib::CDib()\n{\n\n       m_hFile = NULL;\n\n       m_hBitmap = NULL;\n\n       m_hPalette = NULL;\n\n       m_nBmihAlloc = m_nImageAlloc = noAlloc;\n\n       Empty();\n\n}\n\n \n\nCDib::CDib(CSize size, int nBitCount)\n\n{\n\n       m_hFile = NULL;\n\n       m_hBitmap = NULL;\n\n       m_hPalette = NULL;\n\n       m_nBmihAlloc = m_nImageAlloc = noAlloc;\n\n       Empty();\n\n       ComputePaletteSize(nBitCount);\n\n       m_lpBMIH = (LPBITMAPINFOHEADER) new\n\n                                                             char[sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries];\n\n       m_nBmihAlloc = crtAlloc;\n\n       m_lpBMIH->biSize = sizeof(BITMAPINFOHEADER);\n\n       m_lpBMIH->biWidth = size.cx;\n\n       m_lpBMIH->biHeight = size.cy;\n\n       m_lpBMIH->biPlanes = 1;\n\n       m_lpBMIH->biBitCount = nBitCount;\n\n       m_lpBMIH->biCompression = BI_RGB;\n\n       m_lpBMIH->biSizeImage = 0;\n\n       m_lpBMIH->biXPelsPerMeter = 0;\n\n       m_lpBMIH->biYPelsPerMeter = 0;\n\n       m_lpBMIH->biClrUsed = m_nColorTableEntries;\n\n       m_lpBMIH->biClrImportant = m_nColorTableEntries;\n\n       ComputeMetrics();\n\n       memset(m_lpvColorTable, 0, sizeof(RGBQUAD) * m_nColorTableEntries);\n\n       m_lpImage = NULL;  // no data yet\n\n}\n\n \n\nCDib::~CDib()\n\n{\n\n       Empty();\n\n}\n\n \n\nCSize CDib::GetDimensions()\n\n{\n\n       if(m_lpBMIH == NULL) return CSize(0, 0);\n\n       return CSize((int) m_lpBMIH->biWidth, (int) m_lpBMIH->biHeight);\n\n}\n\n \n\nBOOL CDib::AttachMapFile(const char* strPathname, BOOL bShare) // for reading\n\n{\n\n       // if we open the same file twice, Windows treats it as 2 separate files\n\n       // doesn't work with rare BMP files where # palette entries > biClrUsed\n\n       HANDLE hFile = ::CreateFile(strPathname, GENERIC_WRITE | GENERIC_READ,\n\n              bShare ? FILE_SHARE_READ : 0,\n\n              NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);\n\n       ASSERT(hFile != INVALID_HANDLE_VALUE);\n\n       DWORD dwFileSize = ::GetFileSize(hFile, NULL);\n\n       HANDLE hMap = ::CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);\n\n       DWORD dwErr = ::GetLastError();\n\n       if(hMap == NULL) {\n\n              AfxMessageBox(\"Empty bitmap file\");\n\n              return FALSE;\n\n       }\n\n       LPVOID lpvFile = ::MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0); // map whole file\n\n       ASSERT(lpvFile != NULL);\n\n       if(((LPBITMAPFILEHEADER) lpvFile)->bfType != 0x4d42) {\n\n              AfxMessageBox(\"Invalid bitmap file\");\n\n              DetachMapFile();\n\n              return FALSE;\n\n       }\n\n       AttachMemory((LPBYTE) lpvFile + sizeof(BITMAPFILEHEADER));\n\n       m_lpvFile = lpvFile;\n\n       m_hFile = hFile;\n\n       m_hMap = hMap;\n\n       return TRUE;\n\n}\n\n \n\nBOOL CDib::CopyToMapFile(const char* strPathname)\n\n{\n\n       // copies DIB to a new file, releases prior pointers\n\n       // if you previously used CreateSection, the HBITMAP will be NULL (and unusable)\n\n       BITMAPFILEHEADER bmfh;\n\n       bmfh.bfType = 0x4d42;  // 'BM'\n\n       bmfh.bfSize = m_dwSizeImage + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries + sizeof(BITMAPFILEHEADER);\n\n       // meaning of bfSize open to interpretation\n\n       bmfh.bfReserved1 = bmfh.bfReserved2 = 0;\n\n       bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;\n\n       HANDLE hFile = ::CreateFile(strPathname, GENERIC_WRITE | GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);\n\n       ASSERT(hFile != INVALID_HANDLE_VALUE);\n\n       int nSize =  sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries +  m_dwSizeImage;\n\n       HANDLE hMap = ::CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, nSize, NULL);\n\n       DWORD dwErr = ::GetLastError();\n\n       ASSERT(hMap != NULL);\n\n       LPVOID lpvFile = ::MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0); // map whole file\n\n       ASSERT(lpvFile != NULL);\n\n       LPBYTE lpbCurrent = (LPBYTE) lpvFile;\n\n       memcpy(lpbCurrent, &bmfh, sizeof(BITMAPFILEHEADER)); // file header\n\n       lpbCurrent += sizeof(BITMAPFILEHEADER);\n\n       LPBITMAPINFOHEADER lpBMIH = (LPBITMAPINFOHEADER) lpbCurrent;\n\n       memcpy(lpbCurrent, m_lpBMIH, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries); // info\n\n       lpbCurrent += sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;\n\n       memcpy(lpbCurrent, m_lpImage, m_dwSizeImage); // bit image\n\n       DWORD dwSizeImage = m_dwSizeImage;\n\n       Empty();\n\n       m_dwSizeImage = dwSizeImage;\n\n       m_nBmihAlloc = m_nImageAlloc = noAlloc;\n\n       m_lpBMIH = lpBMIH;\n\n       m_lpImage = lpbCurrent;\n\n       m_hFile = hFile;\n\n       m_hMap = hMap;\n\n       m_lpvFile = lpvFile;\n\n       ComputePaletteSize(m_lpBMIH->biBitCount);\n\n       ComputeMetrics();\n\n       MakePalette();\n\n       return TRUE;\n\n}\n\n \n\nBOOL CDib::AttachMemory(LPVOID lpvMem, BOOL bMustDelete, HGLOBAL hGlobal)\n{\n       // assumes contiguous BITMAPINFOHEADER, color table, image color table could be zero length\n       Empty();\n       m_hGlobal = hGlobal;\n       if(bMustDelete == FALSE) {\n              m_nBmihAlloc = noAlloc;\n       }\n       else {\n              m_nBmihAlloc = ((hGlobal == NULL) ? crtAlloc : heapAlloc);\n       }\n       try {\n              m_lpBMIH = (LPBITMAPINFOHEADER) lpvMem;\n              ComputeMetrics();\n              ComputePaletteSize(m_lpBMIH->biBitCount);\n              m_lpImage = (LPBYTE) m_lpvColorTable + sizeof(RGBQUAD) * m_nColorTableEntries;\n              MakePalette();\n       }\n\n       catch(CException* pe) {\n\n              AfxMessageBox(\"AttachMemory error\");\n\n              pe->Delete();\n\n              return FALSE;\n\n       }\n\n       return TRUE;\n\n}\n\n \n\nUINT CDib::UsePalette(CDC* pDC, BOOL bBackground /* = FALSE */)\n\n{\n\n       if(m_hPalette == NULL) return 0;\n\n       HDC hdc = pDC->GetSafeHdc();\n\n       ::SelectPalette(hdc, m_hPalette, bBackground);\n\n       return ::RealizePalette(hdc);\n\n}\n\n \n\nBOOL CDib::Draw(CDC* pDC, CPoint origin, CSize size)\n\n{\n\n       if(m_lpBMIH == NULL) return FALSE;\n\n       if(m_hPalette != NULL) {\n\n              ::SelectPalette(pDC->GetSafeHdc(), m_hPalette, TRUE);\n\n       }\n\n       pDC->SetStretchBltMode(COLORONCOLOR);\n\n       ::StretchDIBits(pDC->GetSafeHdc(), origin.x, origin.y, size.cx, size.cy,\n\n              0, 0, m_lpBMIH->biWidth, m_lpBMIH->biHeight,\n\n              m_lpImage, (LPBITMAPINFO) m_lpBMIH, DIB_RGB_COLORS, SRCCOPY);\n\n       return TRUE;\n\n}\n\n \n\nHBITMAP CDib::CreateSection(CDC* pDC /* = NULL */)\n\n{\n\n       if(m_lpBMIH == NULL) return NULL;\n\n       if(m_lpImage != NULL) return NULL; // can only do this if image doesn't exist\n\n       m_hBitmap = ::CreateDIBSection(pDC->GetSafeHdc(), (LPBITMAPINFO) m_lpBMIH,\n\n              DIB_RGB_COLORS,      (LPVOID*) &m_lpImage, NULL, 0);\n\n       ASSERT(m_lpImage != NULL);\n\n       return m_hBitmap;\n\n}\n\n \n\nBOOL CDib::MakePalette()\n\n{\n\n       // makes a logical palette (m_hPalette) from the DIB's color table\n\n       // this palette will be selected and realized prior to drawing the DIB\n\n       if(m_nColorTableEntries == 0) return FALSE;\n\n       if(m_hPalette != NULL) ::DeleteObject(m_hPalette);\n\n       TRACE(\"CDib::MakePalette -- m_nColorTableEntries = %d\\n\", m_nColorTableEntries);\n\n       LPLOGPALETTE pLogPal = (LPLOGPALETTE) new char[2 * sizeof(WORD) +\n\n              m_nColorTableEntries * sizeof(PALETTEENTRY)];\n\n       pLogPal->palVersion = 0x300;\n\n       pLogPal->palNumEntries = m_nColorTableEntries;\n\n       LPRGBQUAD pDibQuad = (LPRGBQUAD) m_lpvColorTable;\n\n       for(int i = 0; i < m_nColorTableEntries; i++) {\n\n              pLogPal->palPalEntry[i].peRed = pDibQuad->rgbRed;\n\n              pLogPal->palPalEntry[i].peGreen = pDibQuad->rgbGreen;\n\n              pLogPal->palPalEntry[i].peBlue = pDibQuad->rgbBlue;\n\n              pLogPal->palPalEntry[i].peFlags = 0;\n\n              pDibQuad++;\n\n       }\n\n       m_hPalette = ::CreatePalette(pLogPal);\n\n       delete pLogPal;\n\n       return TRUE;\n\n}     \n\n \n\nBOOL CDib::SetSystemPalette(CDC* pDC)\n\n{\n\n       // if the DIB doesn't have a color table, we can use the system's halftone palette\n\n       if(m_nColorTableEntries != 0) return FALSE;\n\n       m_hPalette = ::CreateHalftonePalette(pDC->GetSafeHdc());\n\n       return TRUE;\n\n}\n\n \n\nHBITMAP CDib::CreateBitmap(CDC* pDC)\n\n{\n\n    if (m_dwSizeImage == 0) return NULL;\n\n    HBITMAP hBitmap = ::CreateDIBitmap(pDC->GetSafeHdc(), m_lpBMIH,\n\n            CBM_INIT, m_lpImage, (LPBITMAPINFO) m_lpBMIH, DIB_RGB_COLORS);\n\n    ASSERT(hBitmap != NULL);\n\n    return hBitmap;\n\n}\n\n \n\nBOOL CDib::Compress(CDC* pDC, BOOL bCompress /* = TRUE */)\n\n{\n\n       // 1. makes GDI bitmap from existing DIB\n\n       // 2. makes a new DIB from GDI bitmap with compression\n\n       // 3. cleans up the original DIB\n\n       // 4. puts the new DIB in the object\n\n       if((m_lpBMIH->biBitCount != 4) && (m_lpBMIH->biBitCount != 8)) return FALSE;\n\n              // compression supported only for 4 bpp and 8 bpp DIBs\n\n       if(m_hBitmap) return FALSE; // can't compress a DIB Section!\n\n       TRACE(\"Compress: original palette size = %d\\n\", m_nColorTableEntries);\n\n       HDC hdc = pDC->GetSafeHdc();\n\n       HPALETTE hOldPalette = ::SelectPalette(hdc, m_hPalette, FALSE);\n\n       HBITMAP hBitmap;  // temporary\n\n       if((hBitmap = CreateBitmap(pDC)) == NULL) return FALSE;\n\n       int nSize = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;\n\n       LPBITMAPINFOHEADER lpBMIH = (LPBITMAPINFOHEADER) new char[nSize];\n\n       memcpy(lpBMIH, m_lpBMIH, nSize);  // new header\n\n       if(bCompress) {\n\n              switch (lpBMIH->biBitCount) {\n\n              case 4:\n\n                     lpBMIH->biCompression = BI_RLE4;\n\n                     break;\n\n              case 8:\n\n                     lpBMIH->biCompression = BI_RLE8;\n\n                     break;\n\n              default:\n\n                     ASSERT(FALSE);\n\n              }\n\n              // calls GetDIBits with null data pointer to get size of compressed DIB\n\n              if(!::GetDIBits(pDC->GetSafeHdc(), hBitmap, 0, (UINT) lpBMIH->biHeight, NULL, (LPBITMAPINFO) lpBMIH, DIB_RGB_COLORS)) {\n\n                     AfxMessageBox(\"Unable to compress this DIB\");\n\n                     // probably a problem with the color table\n\n                     ::DeleteObject(hBitmap);\n\n                     delete [] lpBMIH;\n\n                     ::SelectPalette(hdc, hOldPalette, FALSE);\n\n                     return FALSE;\n\n              }\n\n              if (lpBMIH->biSizeImage == 0) {\n\n                     AfxMessageBox(\"Driver can't do compression\");\n\n                     ::DeleteObject(hBitmap);\n\n                     delete [] lpBMIH;\n\n                     ::SelectPalette(hdc, hOldPalette, FALSE);\n\n                     return FALSE;\n\n              }\n\n              else {\n\n                     m_dwSizeImage = lpBMIH->biSizeImage;\n\n              }\n\n       }\n\n       else {\n\n              lpBMIH->biCompression = BI_RGB; // decompress\n\n              // figure the image size from the bitmap width and height\n\n              DWORD dwBytes = ((DWORD) lpBMIH->biWidth * lpBMIH->biBitCount) / 32;\n\n              if(((DWORD) lpBMIH->biWidth * lpBMIH->biBitCount) % 32) {\n\n                     dwBytes++;\n\n              }\n\n              dwBytes *= 4;\n\n              m_dwSizeImage = dwBytes * lpBMIH->biHeight; // no compression\n\n              lpBMIH->biSizeImage = m_dwSizeImage;\n\n       }\n\n       // second GetDIBits call to make DIB\n\n       LPBYTE lpImage = (LPBYTE) new char[m_dwSizeImage];\n\n       VERIFY(::GetDIBits(pDC->GetSafeHdc(), hBitmap, 0, (UINT) lpBMIH->biHeight, lpImage, (LPBITMAPINFO) lpBMIH, DIB_RGB_COLORS));\n\n    TRACE(\"dib successfully created - height = %d\\n\", lpBMIH->biHeight);\n\n       ::DeleteObject(hBitmap);\n\n       Empty();\n\n       m_nBmihAlloc = m_nImageAlloc = crtAlloc;\n\n       m_lpBMIH = lpBMIH;\n\n       m_lpImage = lpImage;\n\n       ComputeMetrics();\n\n       ComputePaletteSize(m_lpBMIH->biBitCount);\n\n       MakePalette();\n\n       ::SelectPalette(hdc, hOldPalette, FALSE);\n\n       TRACE(\"Compress: new palette size = %d\\n\", m_nColorTableEntries);\n\n       return TRUE;\n\n}\n\n \n\nBOOL CDib::Read(CFile* pFile)\n{\n       // 1. read file header to get size of info hdr + color table\n       // 2. read info hdr (to get image size) and color table\n       // 3. read image\n       // can't use bfSize in file header\n\n       Empty();\n       int nCount, nSize;\n       BITMAPFILEHEADER bmfh;\n\n       try {\n              nCount = pFile->Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));\n              //if(nCount != sizeof(BITMAPFILEHEADER)) {\n              //       throw new CException;\n              //}\n              //if(bmfh.bfType != 0x4d42) {\n              //       throw new CException;\n              //}\n              nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER);\n              m_lpBMIH = (LPBITMAPINFOHEADER) new char[nSize];\n              m_nBmihAlloc = m_nImageAlloc = crtAlloc;\n              nCount = pFile->Read(m_lpBMIH, nSize); // info hdr & color table\n              ComputeMetrics();\n              ComputePaletteSize(m_lpBMIH->biBitCount);\n              MakePalette();\n              m_lpImage = (LPBYTE) new char[m_dwSizeImage];\n              nCount = pFile->Read(m_lpImage, m_dwSizeImage); // image only\n       }\n       catch(CException* pe) {\n              AfxMessageBox(\"Read error\");\n              pe->Delete();\n              return FALSE;\n       }\n       return TRUE;\n}\n\nBOOL CDib::ReadSection(CFile* pFile, CDC* pDC /* = NULL */)\n{\n\t// new function reads BMP from disk and creates a DIB section\n\t//    allows modification of bitmaps from disk\n\t// 1. read file header to get size of info hdr + color table\n\t// 2. read info hdr (to get image size) and color table\n\t// 3. create DIB section based on header parms\n\t// 4. read image into memory that CreateDibSection allocates\n\tEmpty();\n\tint nCount, nSize;\n\tBITMAPFILEHEADER bmfh;\n\ttry {\n\t\tnCount = pFile->Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));\n\t\t//if(nCount != sizeof(BITMAPFILEHEADER)) {\n\t\t//\tthrow new CException;\n\t\t//}\n\t\t//if(bmfh.bfType != 0x4d42) {\n\t\t//\tthrow new CException;\n\t\t//}\n\t\tnSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER);\n\t\tm_lpBMIH = (LPBITMAPINFOHEADER) new char[nSize];\n\t\tm_nBmihAlloc = crtAlloc;\n\t\tm_nImageAlloc = noAlloc;\n\t\tnCount = pFile->Read(m_lpBMIH, nSize); // info hdr & color table\n\t\t//if(m_lpBMIH->biCompression != BI_RGB) {\n\t\t//\t throw new CException;\n\t\t//}\n\t\tComputeMetrics();\n\t\tComputePaletteSize(m_lpBMIH->biBitCount);\n\t\tMakePalette();\n\t\tUsePalette(pDC);\n\t\tm_hBitmap = ::CreateDIBSection(pDC->GetSafeHdc(), (LPBITMAPINFO) m_lpBMIH, DIB_RGB_COLORS, (LPVOID*) &m_lpImage, NULL, 0);\n\t\tASSERT(m_lpImage != NULL);\n\t\tnCount = pFile->Read(m_lpImage, m_dwSizeImage); // image only\n\t}\n\tcatch(CException* pe) {\n\t\tAfxMessageBox(\"ReadSection error\");\n\t\tpe->Delete();\n\t\treturn FALSE;\n\t}\n\treturn TRUE;\n}\n\nBOOL CDib::Write(CFile* pFile)\n{\n\tBITMAPFILEHEADER bmfh;\n\tbmfh.bfType = 0x4d42;  // 'BM'\n\tint nSizeHdr = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;\n\tbmfh.bfSize = 0;\n\t//     bmfh.bfSize = sizeof(BITMAPFILEHEADER) + nSizeHdr + m_dwSizeImage;\n\t// meaning of bfSize open to interpretation (bytes, words, dwords?) -- we won't use it\n\tbmfh.bfReserved1 = bmfh.bfReserved2 = 0;\n\tbmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries; \n\ttry {\n\t\tpFile->Write((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));\n\t\tpFile->Write((LPVOID) m_lpBMIH,  nSizeHdr);\n\t\tpFile->Write((LPVOID) m_lpImage, m_dwSizeImage);\n\t}\n\tcatch(CException* pe) {\n\t\tpe->Delete();\n\t\tAfxMessageBox(\"write error\");\n\t\treturn FALSE;\n\t}\n\treturn TRUE;\n}\n\nvoid CDib::Serialize(CArchive& ar)\n\n{\n\tDWORD dwPos;\n\tdwPos = ar.GetFile()->GetPosition();\n\tTRACE(\"CDib::Serialize -- pos = %d\\n\", dwPos);\n\tar.Flush();\n\tdwPos = ar.GetFile()->GetPosition();\n\tTRACE(\"CDib::Serialize -- pos = %d\\n\", dwPos);\n\tif(ar.IsStoring()) {\n\t\tWrite(ar.GetFile());\n\t}\n\telse {\n\t\tRead(ar.GetFile());\n\t}\n}\n\n// helper functions\n\nvoid CDib::ComputePaletteSize(int nBitCount)\n{\n\tif((m_lpBMIH == NULL) || (m_lpBMIH->biClrUsed == 0)) {\n\t\tswitch(nBitCount) {\n\t\t\tcase 1:\n\t\t\t\tm_nColorTableEntries = 2;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\tm_nColorTableEntries = 16;\n\t\t\t\tbreak;\n\t\t\tcase 8:\n\t\t\t\tm_nColorTableEntries = 256;\n\t\t\t\tbreak;\n\t\t\t case 16:\n\t\t\t case 24:\n\t\t\t case 32:\n\t\t\t\tm_nColorTableEntries = 0;\n\t\t\t\tbreak;\n\t\t\t default:\n\t\t\t\tASSERT(FALSE);\n\t\t}\n\t}\n\telse {\n\t\tm_nColorTableEntries = m_lpBMIH->biClrUsed;\n\t}\n\tASSERT((m_nColorTableEntries >= 0) && (m_nColorTableEntries <= 256));\n}\n\n \n\nvoid CDib::ComputeMetrics()\n{\n\t//if(m_lpBMIH->biSize != sizeof(BITMAPINFOHEADER)) {\n\t//\tTRACE(\"Not a valid Windows bitmap -- probably an OS/2 bitmap\\n\");\n\t//\tthrow new CException;\n\t//}\n\tm_dwSizeImage = m_lpBMIH->biSizeImage;\n\tif(m_dwSizeImage == 0) {\n\t\tDWORD dwBytes = ((DWORD) m_lpBMIH->biWidth * m_lpBMIH->biBitCount) / 32;\n\t\tif(((DWORD) m_lpBMIH->biWidth * m_lpBMIH->biBitCount) % 32) {\n\t\t\tdwBytes++;\n\t\t}\n\t\tdwBytes *= 4;\n\t\tm_dwSizeImage = dwBytes * m_lpBMIH->biHeight; // no compression\n\t}\n\tm_lpvColorTable = (LPBYTE) m_lpBMIH + sizeof(BITMAPINFOHEADER);\n}\n\nvoid CDib::Empty()\n{\n\n       // this is supposed to clean up whatever is in the DIB\n\n       DetachMapFile();\n\n       if(m_nBmihAlloc == crtAlloc) {\n\n              delete [ ] m_lpBMIH;\n\n       }\n\n       else if(m_nBmihAlloc == heapAlloc) {\n\n              ::GlobalUnlock(m_hGlobal);\n\n              ::GlobalFree(m_hGlobal);\n\n       }\n\n       if(m_nImageAlloc == crtAlloc) delete [] m_lpImage;\n\n       if(m_hPalette != NULL) ::DeleteObject(m_hPalette);\n\n       if(m_hBitmap != NULL) ::DeleteObject(m_hBitmap);\n\n       m_nBmihAlloc = m_nImageAlloc = noAlloc;\n\n       m_hGlobal = NULL;\n\n       m_lpBMIH = NULL;\n\n       m_lpImage = NULL;\n\n       m_lpvColorTable = NULL;\n\n       m_nColorTableEntries = 0;\n\n       m_dwSizeImage = 0;\n\n       m_lpvFile = NULL;\n\n       m_hMap = NULL;\n\n       m_hFile = NULL;\n\n       m_hBitmap = NULL;\n\n       m_hPalette = NULL;\n\n}\n\n \n\nvoid CDib::DetachMapFile()\n\n{\n\n       if(m_hFile == NULL) return;\n\n       ::UnmapViewOfFile(m_lpvFile);\n\n       ::CloseHandle(m_hMap);\n\n       ::CloseHandle(m_hFile);\n\n       m_hFile = NULL;\n\n}\n\n \n\n \n\n "
  },
  {
    "path": "host/cdib.h",
    "content": "#ifndef _INSIDE_VISUAL_CPP_CDIB\n#define _INSIDE_VISUAL_CPP_CDIB\n\nclass CDib : public CObject\n{\n    enum Alloc {noAlloc, crtAlloc, heapAlloc}; // applies to BITMAPINFOHEADER\n    DECLARE_SERIAL(CDib)\n\npublic:\n\n    LPVOID  m_lpvColorTable;\n    HBITMAP m_hBitmap;\n    LPBYTE  m_lpImage;  // starting address of DIB bits\n    LPBITMAPINFOHEADER m_lpBMIH; // buffer containing the BITMAPINFOHEADER\n\nprivate:\n\n    HGLOBAL m_hGlobal; // for external windows we need to free; could be allocated by this class or allocated externally\n    Alloc m_nBmihAlloc;\n    Alloc m_nImageAlloc;\n    DWORD m_dwSizeImage; // of bitsnot BITMAPINFOHEADER or BITMAPFILEHEADER\n    int m_nColorTableEntries;\n\n    HANDLE m_hFile;\n    HANDLE m_hMap;\n    LPVOID m_lpvFile;\n    HPALETTE m_hPalette;\n\npublic:\n\n    CDib();\n    CDib(CSize size, int nBitCount);  // builds BITMAPINFOHEADER\n    ~CDib();\n    int GetSizeImage() {return m_dwSizeImage;}\n    int GetSizeHeader()\n        {return sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * m_nColorTableEntries;}\n    CSize GetDimensions();\n    BOOL AttachMapFile(const char* strPathname, BOOL bShare = FALSE);\n    BOOL CopyToMapFile(const char* strPathname);\n    BOOL AttachMemory(LPVOID lpvMem, BOOL bMustDelete = FALSE, HGLOBAL hGlobal = NULL);\n    BOOL Draw(CDC* pDC, CPoint origin, CSize size); // until we implement CreateDibSection\n    HBITMAP CreateSection(CDC* pDC = NULL);\n    UINT UsePalette(CDC* pDC, BOOL bBackground = FALSE);\n    BOOL MakePalette();\n    BOOL SetSystemPalette(CDC* pDC);\n    BOOL Compress(CDC* pDC, BOOL bCompress = TRUE); // FALSE means decompress\n    HBITMAP CreateBitmap(CDC* pDC);\n    BOOL Read(CFile* pFile);\n    BOOL ReadSection(CFile* pFile, CDC* pDC = NULL);\n    BOOL Write(CFile* pFile);\n    void Serialize(CArchive& ar);\n    void Empty();\n\nprivate:\n\n    void DetachMapFile();\n    void ComputePaletteSize(int nBitCount);\n    void ComputeMetrics();\n};\n\n#endif // _INSIDE_VISUAL_CPP_CDIB"
  },
  {
    "path": "host/dib.cpp",
    "content": "#include \"stdafx.h\"\n#include \"bmpext.h\"\n\n//////////////////////////////////////////////////////////////////////////\n// DIB support defines\n#define BMIH_SIZE sizeof BITMAPINFOHEADER\n#define BMIF_SIZE sizeof BITMAPFILEHEADER\n\n/* DIB constants */\n#define PALVERSION   0x300\n\n/* Dib Header Marker - used in writing DIBs to files */\n#define DIB_HEADER_MARKER   ((WORD) ('M' << 8) | 'B')\n\n// WIDTHBYTES performs DWORD-aligning of DIB scanlines.  The \"bits\"\n// parameter is the bit count for the scanline (biWidth * biBitCount),\n// and this macro returns the number of DWORD-aligned bytes needed\n// to hold those bits.\n#define WIDTHBYTES(bits)    (((bits) + 31) / 32 * 4)\n\n/////////////////////////////////////////////////////////////////////////////\n//CDib implementation\n\nCDib::CDib() : m_pBMI(0), m_pBits(0), m_pPalette(0)\n{}\n\nCDib::~CDib()\n{\n\tFree();\n}\n\nDWORD CDib::Width() const\n{\n\tif (!m_pBMI)\n\t\treturn 0;\n\t\n\t/* return the DIB width */\n\treturn m_pBMI->bmiHeader.biWidth;\n}\n\nDWORD CDib::Height() const\n{\n\tif (!m_pBMI)\n\t\treturn 0;\n\t\n\t/* return the DIB height */\n\treturn m_pBMI->bmiHeader.biHeight;\n}\n\nWORD  CDib::NumColors(  BITMAPINFOHEADER& bmiHeader ) const\n{\n\tif ( bmiHeader.biClrUsed != 0)\n\t\treturn (WORD)bmiHeader.biClrUsed;\n\t\n\tswitch ( bmiHeader.biBitCount )\n\t{\n\tcase 1:\n\t\treturn 2;\n\tcase 4:\n\t\treturn 16;\n\tcase 8:\n\t\treturn 256;\n\tdefault:\n\t\treturn 0;\n\t}\n}\n\nBOOL  CDib::IsValid()   const\n{\n\treturn (m_pBits != NULL);\n}\n\nDWORD CDib::PaletteSize() const\n{\n\treturn NumColors( m_pBMI->bmiHeader ) * sizeof(RGBQUAD);\n}\n\nBOOL  CDib::Draw(CDC* pDC, CRect& rectDC, CRect& rectDIB) const\n{\n\tif ( !IsValid() )\n\t\treturn FALSE;\n\t\n\tCPalette* pOldPal = NULL;        // Previous palette\n\t\n\t// Get the DIB's palette, then select it into DC\n\tif (m_pPalette != NULL)\n\t{\n\t\t// Select as background since we have\n\t\t// already realized in forground if needed\n\t\tpOldPal = pDC->SelectPalette( m_pPalette, TRUE);\n\t}\n\t\n\t/* Make sure to use the stretching mode best for color pictures */\n\tpDC->SetStretchBltMode( COLORONCOLOR );\n\t\n\t/* Determine whether to call StretchDIBits() or SetDIBitsToDevice() */\n\tBOOL bSuccess;\n\tif( ( rectDC.Width() == rectDIB.Width() ) &&\n\t\t( rectDC.Height() == rectDIB.Height() ) )\n\t\tbSuccess = ::SetDIBitsToDevice(pDC->m_hDC,\t\t\t\t// hDC\n\t\trectDC.left,         // DestX\n\t\trectDC.top,          // DestY\n\t\trectDC.Width(),      // nDestWidth\n\t\trectDC.Height(),     // nDestHeight\n\t\trectDIB.left,\t    // SrcX\n\t\t(int)Height() -\n\t\trectDIB.top -\n\t\trectDIB.Height(),\t\t   // SrcY\n\t\t0,                          // nStartScan\n\t\t(WORD)Height(),             // nNumScans\n\t\tm_pBits,                    // lpBits\n\t\tm_pBMI,                     // lpBitsInfo\n\t\tDIB_RGB_COLORS);            // wUsage\n\telse\n\t\tbSuccess = ::StretchDIBits(pDC->m_hDC,\t\t\t\t\t\t// hDC\n\t\trectDC.left,\t\t\t\t\t// DestX\n\t\trectDC.top,\t\t\t\t\t// DestY\n\t\trectDC.Width(),\t\t\t\t// nDestWidth\n\t\trectDC.Height(),\t\t\t\t// nDestHeight\n\t\trectDIB.left,\t\t\t\t// SrcX\n\t\trectDIB.top,\t\t\t\t\t// SrcY\n\t\trectDIB.Width(),\t\t\t\t// wSrcWidth\n\t\trectDIB.Height(),\t\t\t// wSrcHeight\n\t\tm_pBits,                      // lpBits\n\t\tm_pBMI,                       // lpBitsInfo\n\t\tDIB_RGB_COLORS,               // wUsage\n\t\tSRCCOPY);                     // dwROP\n\t\n\t/* Reselect old palette */\n\tif (pOldPal != NULL)\n\t{\n\t\tpDC->SelectPalette( pOldPal, TRUE);\n\t}\n\t\n\treturn bSuccess;\n}\n\n\nvoid CDib::AssertPosition(int iX, int iY)\n{\n\tif( (iX < 0) || (iX > m_pBMI->bmiHeader.biWidth - 1) ||\n\t\t(iY < 0) || (iY > m_pBMI->bmiHeader.biHeight - 1) )\n\t{\n\t\t//invalid image pixel position\n\t\tCDibException::Throw( CDibException::E_INVPOS );\n\t}\n}\n\n\nRGBQUAD CDib::GetPixel(int iX, int iY)\n{\n \tRGBQUAD rgbResult;\n \tWORD wDummy;\n \t\n\t//takeinto account that DIBit raws are reversed vertically\n\tiY = (m_pBMI->bmiHeader.biHeight - 1) - iY; // GHO fix\n\t//iY = m_pBMI->bmiHeader.biHeight - iY;\n\t\n\t//assert pixel position\n\tAssertPosition( iX, iY );\n\n \t//access the destination pixel\n \tint nRowBytes = m_pBMI->bmiHeader.biWidth * m_pBMI->bmiHeader.biBitCount;\n     nRowBytes = ( (nRowBytes + 31) & (~31) ) / 8;\n \t\n \tswitch( m_pBMI->bmiHeader.biBitCount )\n \t{\n \t\tcase 1:\t\t//Monochrome\n \t\t\trgbResult = m_pBMI->bmiColors[ *(m_pBits + nRowBytes*iY + iX/8) & (0x80 >> iX%8) ];\n \t\t\tbreak;\n \t\tcase 4:\n \t\t\trgbResult = m_pBMI->bmiColors[ *(m_pBits + nRowBytes*iY + iX/2) & ((iX&1) ? 0x0f : 0xf0) ];\n \t\t\tbreak;\n \t\tcase 8:\n \t\t\trgbResult = m_pBMI->bmiColors[ *(m_pBits + nRowBytes*iY + iX) ];\n \t\t\tbreak;\n \t\tcase 16:\n \t\t\twDummy = *(LPWORD)(m_pBits + nRowBytes*iY + iX*2);\n \n \t\t\trgbResult.rgbBlue = (BYTE)(0x001F & wDummy);\n \t\t\trgbResult.rgbGreen = (BYTE)(0x001F & (wDummy >> 5));\n \t\t\trgbResult.rgbRed = (BYTE)(0x001F & wDummy >> 10 );\n \t\t\tbreak;\n \t\tcase 24:\n \t\t\trgbResult = *(LPRGBQUAD)(m_pBits + nRowBytes*iY + iX*3);\n \t\t\tbreak;\n \t\tcase 32:\n \t\t\trgbResult = *(LPRGBQUAD)(m_pBits + nRowBytes*iY + iX*4);\n \t\t\tbreak;\n \t}\n \n \treturn rgbResult;\n}\n\nvoid CDib::SetPixel(int iX, int iY, RGBQUAD &rgbPixel)\n{\n\tWORD wDummy;\n\n\t//takeinto account that DIBit raws are reversed vertically\n\tiY = (m_pBMI->bmiHeader.biHeight - 1) - iY; // GHO fix\n\t//iY = m_pBMI->bmiHeader.biHeight - iY;\n\t\n\t//assert pixel position\n\tAssertPosition( iX, iY );\n\n\t//access the destination pixel\n\tint nRowBytes = m_pBMI->bmiHeader.biWidth * m_pBMI->bmiHeader.biBitCount;\n    nRowBytes = ( (nRowBytes + 31) & (~31) ) / 8;\n\t\n\tswitch( m_pBMI->bmiHeader.biBitCount )\n\t{\n\t\tcase 1:\t\t\n\t\tcase 4:\n\t\tcase 8:\n\t\t\t//do not support this operation;\n\t\t\tCDibException::Throw( CDibException::E_NOTSUPP );\n\t\t\tbreak;\n\t\tcase 16:\n\t\t\twDummy = rgbPixel.rgbRed;\n\t\t\twDummy = wDummy << 5;\n\t\t\twDummy |= rgbPixel.rgbGreen;\n\t\t\twDummy = wDummy << 5;\n\t\t\twDummy |= rgbPixel.rgbBlue;\n\n\t\t\t*(LPWORD)(m_pBits + nRowBytes*iY + iX*2) = wDummy;\n\t\t\tbreak;\n\t\tcase 24:\n\t\t\t*(LPRGBQUAD)(m_pBits + nRowBytes*iY + iX*3) = rgbPixel;\n\t\t\tbreak;\n\t\tcase 32:\n\t\t\t*(LPRGBQUAD)(m_pBits + nRowBytes*iY + iX*4) = rgbPixel;\n\t\t\tbreak;\n\t}\n}\n\nDWORD CDib::Save(CFile& file) const\n{\n\tBITMAPFILEHEADER bmfHdr; // Header for Bitmap file\n\tDWORD dwDIBSize;\n\t\n\tif (m_pBMI == NULL)\n\t\treturn 0;\n\t\n\t// Fill in the fields of the file header\n\t\n\t// Fill in file type (first 2 bytes must be \"BM\" for a bitmap)\n\tbmfHdr.bfType = DIB_HEADER_MARKER;  // \"BM\"\n\t\n\t// Calculating the size of the DIB is a bit tricky (if we want to\n\t// do it right).  The easiest way to do this is to call GlobalSize()\n\t// on our global handle, but since the size of our global memory may have\n\t// been padded a few bytes, we may end up writing out a few too\n\t// many bytes to the file (which may cause problems with some apps).\n\t//\n\t// So, instead let's calculate the size manually (if we can)\n\t//\n\t// First, find size of header plus size of color table.  Since the\n\t// first DWORD in both BITMAPINFOHEADER and BITMAPCOREHEADER conains\n\t// the size of the structure, let's use this.\n\tdwDIBSize = m_pBMI->bmiHeader.biSize + PaletteSize();  // Partial Calculation\n\t\n\t// Now calculate the size of the image\n\tif ((m_pBMI->bmiHeader.biCompression == BI_RLE8) || (m_pBMI->bmiHeader.biCompression == BI_RLE4))\n\t{\n\t\t// It's an RLE bitmap, we can't calculate size, so trust the\n\t\t// biSizeImage field\n\t\tdwDIBSize += m_pBMI->bmiHeader.biSizeImage;\n\t}\n\telse\n\t{\n\t\tDWORD dwBmBitsSize;  // Size of Bitmap Bits only\n\t\t\n\t\t// It's not RLE, so size is Width (DWORD aligned) * Height\n\t\tdwBmBitsSize = WIDTHBYTES((m_pBMI->bmiHeader.biWidth)*((DWORD)m_pBMI->bmiHeader.biBitCount)) * m_pBMI->bmiHeader.biHeight;\n\t\tdwDIBSize += dwBmBitsSize;\n\t\t\n\t\t// Now, since we have calculated the correct size, why don't we\n\t\t// fill in the biSizeImage field (this will fix any .BMP files which\n\t\t// have this field incorrect).\n\t\tm_pBMI->bmiHeader.biSizeImage = dwBmBitsSize;\n\t}\n\t\n\t// Calculate the file size by adding the DIB size to sizeof(BITMAPFILEHEADER)\n\tbmfHdr.bfSize = dwDIBSize + BMIF_SIZE;\n\tbmfHdr.bfReserved1 = 0;\n\tbmfHdr.bfReserved2 = 0;\n\t\n\t/*\n\t* Now, calculate the offset the actual bitmap bits will be in\n\t* the file -- It's the Bitmap file header plus the DIB header,\n\t* plus the size of the color table.\n\t*/\n\tbmfHdr.bfOffBits = BMIF_SIZE + m_pBMI->bmiHeader.biSize + PaletteSize();\n\t\n\t// Write the file header\n\tfile.Write( (LPSTR)&bmfHdr, BMIF_SIZE );\n\tDWORD dwBytesSaved = BMIF_SIZE; \n\t\n\t// Write the DIB header\n\tUINT nCount = sizeof(BITMAPINFO) + PaletteSize();\n\tdwBytesSaved += nCount; \n\tfile.Write(m_pBMI, nCount);\n\t\n\t// Write the DIB bits\n\tDWORD dwBytes = m_pBMI->bmiHeader.biBitCount * Width();\n\t// Calculate the number of bytes per line\n\tif (dwBytes%32 == 0)\n\t\tdwBytes /= 8;\n\telse\n\t\tdwBytes = dwBytes/8 + (32-dwBytes%32)/8 + (((32-dwBytes%32)%8 > 0) ? 1 : 0); \n\tnCount = dwBytes * Height();\n\tdwBytesSaved += nCount; \n\t//file.WriteHuge(m_pBits, nCount);\n\tfile.Write(m_pBits, nCount);\n\t\n\treturn dwBytesSaved;\n}\n\nDWORD CDib::Read(CFile& file, BOOL bFromResource)\n{\n\tDWORD dwReadBytes = 0;\n\tDWORD dwLength = (DWORD)file.GetLength();\n\t\n\t// Ensures no memory leaks will occur\n\tFree();\n\t\n\tBITMAPFILEHEADER bmfHeader;\n\tBITMAPINFOHEADER bmiHeader;\n\t\n\tif( !bFromResource )\n\t{\n\t\t// Go read the DIB file header and check if it's valid.\n\t\tif( (dwReadBytes = file.Read((LPSTR)&bmfHeader, BMIF_SIZE)) != BMIF_SIZE)\n\t\t\treturn 0;\n\t\tif(bmfHeader.bfType != DIB_HEADER_MARKER)\n\t\t\treturn 0;\n\t}\n\t\n\t// Read DIB header.\n\tif( file.Read( &bmiHeader, BMIH_SIZE ) != BMIH_SIZE )\n\t\treturn 0;\n\tdwReadBytes += BMIH_SIZE;\n\t\n\tDWORD dwPalSize = NumColors( bmiHeader ) * sizeof RGBQUAD;\n\tm_pBMI = (LPBITMAPINFO) new BYTE[BMIH_SIZE + dwPalSize];\n\tmemcpy( m_pBMI, &bmiHeader, BMIH_SIZE );\n\t// read palette data\n\tif( file.Read( m_pBMI->bmiColors, dwPalSize ) != dwPalSize )\n\t\treturn 0;\n\tdwReadBytes += dwPalSize;\n\tCreatePalette();\n\t\n\t// Go read the bits.\n\tm_pBits = new BYTE[ dwLength - dwReadBytes + 0x200]; // GHO fix: you need some more space who knows why...? \n\tif (m_pBits == 0)\n\t\treturn 0;\n\t\n\tif (file.Read( m_pBits, dwLength - dwReadBytes ) != (dwLength - dwReadBytes))\n\t{\n\t\tdelete m_pBMI;\n\t\tm_pBMI = NULL;\n\t\t\n\t\tdelete m_pBits;\n\t\tm_pBits = NULL;\n\t\t\n\t\treturn 0;\n\t}\n\tdwReadBytes = dwLength;\n\t\n\treturn dwReadBytes;\n}\n\nDWORD CDib::ReadFromResource(UINT nResID)\n{\n\tDWORD\tdwResult = 0;\n\t// Load\tfrom resource\n\tHRSRC\thbmres = FindResource( NULL, MAKEINTRESOURCE(nResID), RT_BITMAP );\n\tCMemFile file; \n\tHGLOBAL\thGlob;\n\t\n\tif (hbmres)\n\t{\n\t\tDWORD\tdwResSize = SizeofResource( NULL, hbmres );\n\t\tfile.Attach( (LPBYTE)LockResource( hGlob = LoadResource(NULL, hbmres) ), dwResSize );\n\t\tdwResult = Read(file, TRUE);\n\t\tfile.Detach();\n\t\tDeleteObject( hGlob );\n\t}\n\t\n\treturn dwResult;\n}\n\nvoid CDib::Invalidate()\n{ \n\tFree();\n}\n\nBOOL  CDib::CreatePalette()\n{\n\tif ( !IsValid() )\n\t\treturn FALSE;\n\t\n\t//get the number of colors in the DIB\n\tWORD wNumColors = NumColors( m_pBMI->bmiHeader );\n\tBOOL bResult = TRUE;\n\t\n\tif (wNumColors != 0)\n\t{\n\t\t// allocate memory block for logical palette\n\t\tLPLOGPALETTE pLogPal = (LPLOGPALETTE) new BYTE[ sizeof(LOGPALETTE) +\n\t\t\tsizeof(PALETTEENTRY)*wNumColors ];\n\t\t\n\t\t// if not enough memory, clean up and return NULL\n\t\tif( pLogPal == 0 )\n\t\t\treturn FALSE;\n\t\t\n\t\t// set version and number of palette entries\n\t\tpLogPal->palVersion = PALVERSION;\n\t\tpLogPal->palNumEntries = wNumColors;\n\t\t\n\t\tfor (WORD i = 0; i < wNumColors; i++)\n\t\t{\n\t\t\tpLogPal->palPalEntry[i].peRed = m_pBMI->bmiColors[i].rgbRed;\n\t\t\tpLogPal->palPalEntry[i].peGreen = m_pBMI->bmiColors[i].rgbGreen;\n\t\t\tpLogPal->palPalEntry[i].peBlue = m_pBMI->bmiColors[i].rgbBlue;\n\t\t\tpLogPal->palPalEntry[i].peFlags = 0;\n\t\t}\n\t\t\n\t\t// create the palette and get handle to it \n\t\tif (m_pPalette)\n\t\t{\n\t\t\tm_pPalette->DeleteObject();\n\t\t\tdelete m_pPalette;\n\t\t}\n\t\t\n\t\tm_pPalette = new CPalette;\n\t\tbResult = m_pPalette->CreatePalette( pLogPal );\n\t\tdelete pLogPal;\n\t}\n\t\n\treturn bResult;\n}\n\nvoid CDib::Free()\n{\n\t// Make sure all member data that might have been allocated is freed.\n\tif(m_pBMI)\n\t{\n\t\tdelete m_pBMI;\n\t\tm_pBMI = NULL;\n\t}\n\t\n\tif(m_pBits)\n\t{\n\t\tdelete m_pBits;\n\t\tm_pBits = NULL;\n\t}\n\t\n\tif(m_pPalette)\n\t{\n\t\tm_pPalette->DeleteObject();\n\t\tdelete m_pPalette;\n\t\tm_pPalette = NULL;\n\t}\n}\n\nHBITMAP CDib::CreateDDBitmap( HDC hDC )\n{\n\tHBITMAP hBitmap = ::CreateDIBitmap( hDC, &m_pBMI->bmiHeader,\n\t\tCBM_INIT, m_pBits, (LPBITMAPINFO)m_pBMI, DIB_RGB_COLORS);\n\tASSERT(hBitmap);\n\treturn hBitmap;\n}\n\nHBITMAP\tCDib::CreateDDBitmap(CDC* pDC)\n{\t\n\treturn CreateDDBitmap( pDC->GetSafeHdc() );\n}\n\nBOOL CDib::Compress(CDC* pDC, BOOL bCompress )\n{\n\t// 1. makes GDI bitmap from existing DIB\n\t// 2. makes a new DIB from GDI bitmap with compression\n\t// 3. cleans up the original DIB\n\t// 4. puts the new DIB in the object\n\tif((m_pBMI->bmiHeader.biBitCount != 4) && (m_pBMI->bmiHeader.biBitCount != 8)) return FALSE;\n\t// compression supported only for 4 bpp and 8 bpp DIBs\n\tTRACE(_T(\"Compress: original palette size = %d\\n\"), NumColors(m_pBMI->bmiHeader) ); \n\tHDC hdc = pDC->GetSafeHdc();\n\tCPalette* pOldPalette = pDC->SelectPalette( m_pPalette, TRUE);\n\tHBITMAP hBitmap;  // temporary\n\tif((hBitmap = CreateDDBitmap(pDC)) == NULL) return FALSE;\n\tint nSize = BMIF_SIZE + PaletteSize();\n\tLPBITMAPINFO pBMI = (LPBITMAPINFO) new char[nSize];\n\tmemcpy(pBMI, &m_pBMI->bmiHeader, nSize);  // new header\n\tif(bCompress) {\n\t\tswitch (pBMI->bmiHeader.biBitCount) {\n\t\tcase 4:\n\t\t\tpBMI->bmiHeader.biCompression = BI_RLE4;\n\t\t\tbreak;\n\t\tcase 8:\n\t\t\tpBMI->bmiHeader.biCompression = BI_RLE8;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tASSERT(FALSE);\n\t\t}\n\t\t// calls GetDIBits with null data pointer to get size of compressed DIB\n\t\tif(!::GetDIBits(pDC->m_hDC, hBitmap, 0, (UINT) pBMI->bmiHeader.biHeight,\n\t\t\tNULL, pBMI, DIB_RGB_COLORS)) {\n\t\t\tAfxMessageBox(_T(\"Unable to compress this DIB\"));\n\t\t\t// probably a problem with the color table\n\t\t\t::DeleteObject(hBitmap);\n\t\t\tdelete[] pBMI;\n\t\t\tpDC->SelectPalette( pOldPalette, TRUE);\n\t\t\treturn FALSE; \n\t\t}\n\t\tif (pBMI->bmiHeader.biSizeImage == 0) {\n\t\t\tAfxMessageBox(_T(\"Driver can't do compression\"));\n\t\t\t::DeleteObject(hBitmap);\n\t\t\tdelete[] pBMI;\n\t\t\tpDC->SelectPalette( pOldPalette, TRUE);\n\t\t\treturn FALSE; \n\t\t}\n\t\telse {\n\t\t\tm_pBMI->bmiHeader.biSizeImage = pBMI->bmiHeader.biSizeImage;\n\t\t}\n\t}\n\t\telse {\n\t\t\tpBMI->bmiHeader.biCompression = BI_RGB; // decompress\n\t\t\t// figure the image size from the bitmap width and height\n\t\t\tDWORD dwBytes = ((DWORD) pBMI->bmiHeader.biWidth * pBMI->bmiHeader.biBitCount) / 32;\n\t\t\tif(((DWORD) pBMI->bmiHeader.biWidth * pBMI->bmiHeader.biBitCount) % 32) {\n\t\t\t\tdwBytes++;\n\t\t\t}\n\t\t\tdwBytes *= 4;\n\t\t\tm_pBMI->bmiHeader.biSizeImage = dwBytes * pBMI->bmiHeader.biHeight; // no compression\n\t\t\tpBMI->bmiHeader.biSizeImage = m_pBMI->bmiHeader.biSizeImage;\n\t\t} \n\t\t// second GetDIBits call to make DIB\n\t\tLPBYTE lpImage = (LPBYTE) new char[m_pBMI->bmiHeader.biSizeImage];\n\t\tVERIFY(::GetDIBits(pDC->m_hDC, hBitmap, 0, (UINT) pBMI->bmiHeader.biHeight,\n\t\t\tlpImage, pBMI, DIB_RGB_COLORS));\n\t\tTRACE(_T(\"dib successfully created - height = %d\\n\"), pBMI->bmiHeader.biHeight);\n\t\t::DeleteObject(hBitmap);\n\t\tFree();\n\t\tm_pBMI = pBMI;\n\t\tm_pBits = lpImage;\n\t\tCreatePalette();\n\t\tpDC->SelectPalette( pOldPalette, TRUE );\n\t\tTRACE(_T(\"Compress: new palette size = %d\\n\"), NumColors(m_pBMI->bmiHeader) ); \n\t\treturn TRUE;\n\t}\n"
  },
  {
    "path": "host/dxTabCtrl.cpp",
    "content": "// dxTabCtrl.cpp : implementation file\n//\n/////////////////////////////////////////////////////\n// This class is provided as is and Ben Hill takes no\n// responsibility for any loss of any kind in connection\n// to this code.\n/////////////////////////////////////////////////////\n// Is is meant purely as a educational tool and may\n// contain bugs.\n/////////////////////////////////////////////////////\n// ben@shido.fsnet.co.uk\n// http://www.shido.fsnet.co.uk\n/////////////////////////////////////////////////////\n// Thanks to a mystery poster in the C++ forum on \n// www.codeguru.com I can't find your name to say thanks\n// for your Control drawing code. If you are that person \n// thank you very much. I have been able to use some of \n// you ideas to produce this sample application.\n/////////////////////////////////////////////////////\n\n#include \"stdafx.h\"\n#include \"dxTabCtrl.h\"\n\n#include \"TabProgram.h\"\n#include \"TabHook.h\"\n#include \"TabDirectX.h\"\n#include \"TabDirectX2.h\"\n#include \"TabDirect3D.h\"\n#include \"TabInput.h\"\n#include \"TabTiming.h\"\n#include \"TabWindow.h\"\n#include \"TabOpenGL.h\"\n#include \"TabCompat.h\"\n#include \"TabColor.h\"\n#include \"TabLogs.h\"\n#include \"TabRegistry.h\"\n#include \"TabNotes.h\"\n#include \"TabSysLibs.h\"\n#include \"TabDebug.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\nextern BOOL gbDebug;\n\n/////////////////////////////////////////////////////////////////////////////\n// CDXTabCtrl\n\nCDXTabCtrl::CDXTabCtrl()\n{\n\tint i=0;\n\tm_tabPages[i++]=new CTabProgram;\n\tm_tabPages[i++]=new CTabHook;\n\tm_tabPages[i++]=new CTabWindow;\n\tm_tabPages[i++]=new CTabInput;\n\tm_tabPages[i++]=new CTabDirectX;\n\tm_tabPages[i++]=new CTabDirectX2;\n\tm_tabPages[i++]=new CTabDirect3D;\n\tm_tabPages[i++]=new CTabTiming;\n\tm_tabPages[i++]=new CTabLogs;\n\tm_tabPages[i++]=new CTabSysLibs;\n\tm_tabPages[i++]=new CTabCompat;\n\tm_tabPages[i++]=new CTabRegistry;\n\tm_tabPages[i++]=new CTabNotes;\n\tif (gbDebug) m_tabPages[i++]=new CTabDebug;\n\n\tm_nNumberOfPages=i;\n}\n\nCDXTabCtrl::~CDXTabCtrl()\n{\n\tfor(int nCount=0; nCount < m_nNumberOfPages; nCount++){\n\t\tdelete m_tabPages[nCount];\n\t}\n}\n\nvoid CDXTabCtrl::Init()\n{\n\tint i = 0;\n\tm_tabCurrent=0;\n\n\tm_tabPages[i++]->Create(IDD_TAB_PROGRAM, this);\n\tm_tabPages[i++]->Create(IDD_TAB_HOOK, this);\n\tm_tabPages[i++]->Create(IDD_TAB_OUTPUT, this);\n\tm_tabPages[i++]->Create(IDD_TAB_INPUT, this);\n\tm_tabPages[i++]->Create(IDD_TAB_DIRECTX, this);\n\tm_tabPages[i++]->Create(IDD_TAB_DIRECTX2, this);\n\tm_tabPages[i++]->Create(IDD_TAB_D3D, this);\n\tm_tabPages[i++]->Create(IDD_TAB_TIMING, this);\n\tm_tabPages[i++]->Create(IDD_TAB_LOG, this);\n\tm_tabPages[i++]->Create(IDD_TAB_SYSLIBS, this);\n\tm_tabPages[i++]->Create(IDD_TAB_COMPAT, this);\n\tm_tabPages[i++]->Create(IDD_TAB_REGISTRY, this);\n\tm_tabPages[i++]->Create(IDD_TAB_NOTES, this);\n\tif (gbDebug) m_tabPages[i++]->Create(IDD_TAB_DEBUG, this);\n\n\tfor(int nCount=0; nCount < m_nNumberOfPages; nCount++){\n\t\tm_tabPages[nCount]->ShowWindow(nCount ? SW_HIDE:SW_SHOW);\n\t}\n\n\tSetRectangle();\n}\n\nvoid CDXTabCtrl::SetRectangle()\n{\n\tCRect tabRect, itemRect;\n\tint nX, nY, nXc, nYc;\n\n\tGetClientRect(&tabRect);\n\tGetItemRect(0, &itemRect);\n\n\tnX=itemRect.left;\n\tnY=itemRect.bottom+1;\n\tnXc=tabRect.right-itemRect.left-1;\n\tnYc=tabRect.bottom-nY-1;\n\n\tm_tabPages[0]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);\n\tfor(int nCount=1; nCount < m_nNumberOfPages; nCount++){\n\t\tm_tabPages[nCount]->SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);\n\t}\n}\n\nBEGIN_MESSAGE_MAP(CDXTabCtrl, CTabCtrl)\n\t//{{AFX_MSG_MAP(CDXTabCtrl)\n\tON_WM_LBUTTONDOWN()\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CDXTabCtrl message handlers\n\nvoid CDXTabCtrl::OnLButtonDown(UINT nFlags, CPoint point) \n{\n\tCTabCtrl::OnLButtonDown(nFlags, point);\n\n\tif(m_tabCurrent != GetCurFocus()){\n\t\tm_tabPages[m_tabCurrent]->ShowWindow(SW_HIDE);\n\t\tm_tabCurrent=GetCurFocus();\n\t\tm_tabPages[m_tabCurrent]->ShowWindow(SW_SHOW);\n\t\tm_tabPages[m_tabCurrent]->SetFocus();\n\t}\n}\n\nvoid CDXTabCtrl::SwitchToTab(int pos)\n{\n\tm_tabPages[m_tabCurrent]->ShowWindow(SW_HIDE);\n\tSetCurSel(pos);\n\tm_tabPages[pos]->ShowWindow(SW_SHOW);\n\tm_tabPages[pos]->SetFocus();\n\tm_tabCurrent=GetCurFocus();\n}\n\nvoid CDXTabCtrl::OnOK()\n{\n\tfor(int nCount=0; nCount < m_nNumberOfPages; nCount++){\n\t\tm_tabPages[nCount]->UpdateData(TRUE);\n\t}\n}\n\n"
  },
  {
    "path": "host/dxTabCtrl.h",
    "content": "#if !defined(AFX_MYTABCTRL_H__F3E8650F_019C_479F_9E0F_60FE1181F49F__INCLUDED_)\n#define AFX_MYTABCTRL_H__F3E8650F_019C_479F_9E0F_60FE1181F49F__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n// dxTabCtrl.h : header file\n//\n#include \"resource.h\"\n\n/////////////////////////////////////////////////////////////////////////////\n// CDXTabCtrl window\n\nclass CDXTabCtrl : public CTabCtrl\n{\n// Construction\npublic:\n\tCDXTabCtrl();\n\tCDialog *m_tabPages[14]; // this must match the total number of tab elements!\n\tint m_tabCurrent;\n\tint m_nNumberOfPages;\n\tenum { IDD = IDC_TABPANEL };\n\n// Attributes\npublic:\n\n// Operations\npublic:\n\tvoid Init();\n\tvoid SetRectangle();\n\tvoid SwitchToTab(int);\n\n// Overrides\n\t// ClassWizard generated virtual function overrides\n\t//{{AFX_VIRTUAL(CDXTabCtrl)\n\t//}}AFX_VIRTUAL\n\n// Implementation\npublic:\n\tvirtual ~CDXTabCtrl();\n\tvoid OnOK();\n\n\t// Generated message map functions\nprotected:\n\t//{{AFX_MSG(CDXTabCtrl)\n\tafx_msg void OnLButtonDown(UINT nFlags, CPoint point);\n\t//}}AFX_MSG\n\n\tDECLARE_MESSAGE_MAP()\n};\n\n/////////////////////////////////////////////////////////////////////////////\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif // !defined(AFX_MYTABCTRL_H__F3E8650F_019C_479F_9E0F_60FE1181F49F__INCLUDED_)\n"
  },
  {
    "path": "host/dxelevate.cpp",
    "content": "#include \"stdafx.h\"\n#include \"dxwndhost.h\"\n\n#include \"MainFrm.h\"\n#include \"dxwndhostDoc.h\"\n#include \"dxwndhostView.h\"\n\nextern BOOL IsProcessElevated();\nextern BOOL IsUserInAdminGroup();\n\nBOOL DxSelfElevate(CDxwndhostView *view)\n{\n\tBOOL const fInAdminGroup = IsUserInAdminGroup();\n\tif(!fInAdminGroup) return TRUE;\n\n    // Get and display the process elevation information.\n    BOOL const fIsElevated = IsProcessElevated();\n\tBOOL MustRestart;\n\tif(fIsElevated) return TRUE;\n\tMustRestart=MessageBoxLang(DXW_STRING_ADMINCAP, DXW_STRING_WARNING, MB_OKCANCEL | MB_ICONQUESTION);\n\tif(MustRestart==IDOK){\n\t\textern HANDLE GlobalLocker;\n\t\t// Autoelevation at startup has no HostView yet, but nothing to save either\n\t\tif (view && view->isUpdated){\n\t\t\tif (MessageBoxLang(DXW_STRING_LISTUPDATE, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION)==IDYES) \n\t\t\t\tview->SaveConfigFile();\n\t\t}\n\t\tCloseHandle(GlobalLocker);\n\t\tchar szPath[MAX_PATH];\n\t\tif (GetModuleFileName(NULL, szPath, ARRAYSIZE(szPath)))\n\t\t{\n\t\t\t// Launch itself as administrator.\n\t\t\tSHELLEXECUTEINFO sei = { sizeof(sei) };\n\t\t\tchar CurrentDir[MAX_PATH+1];\n\t\t\tCString args;\n\t\t\tsei.lpVerb = \"runas\";\n\t\t\tsei.lpFile = szPath;\n\t\t\t::GetCurrentDirectory(MAX_PATH, CurrentDir);\n\t\t\tsei.lpDirectory = CurrentDir;\n\t\t\t//sei.hwnd = (HWND)this->GetMainWnd();\n\t\t\tsei.hwnd = (HWND)NULL; // set to NULL to force the confirmation dialog on top of everything...\n\t\t\tsei.nShow = SW_NORMAL;\n\t\t\targs = \"\";\n\t\t\tfor(int i=1; i<=__argc; i++) {\n\t\t\t\targs += (LPCSTR)(__argv[i]);\n\t\t\t\targs += \" \";\n\t\t\t}\n\t\t\tsei.lpParameters = args;\n\t\t\tif (!ShellExecuteEx(&sei)){\n\t\t\t\tDWORD dwError = GetLastError();\n\t\t\t\tif (dwError == ERROR_CANCELLED){\n\t\t\t\t\t// The user refused the elevation.\n\t\t\t\t\t// Do nothing ...\n\t\t\t\t}\n\t\t\t}\n\t\t\telse{\n\t\t\t\texit(0); // Quit itself\n\t\t\t}\n\t\t}\n\t}\n\treturn TRUE;\n}"
  },
  {
    "path": "host/dxwnd.manifest",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\" xmlns:asmv3=\"urn:schemas-microsoft-com:asm.v3\">\n    <assemblyIdentity version=\"1.0.0.0\" processorArchitecture=\"X86\" name=\"dxwnd\" type=\"win32\"/>\n    <trustInfo xmlns=\"urn:schemas-microsoft-com:asm.v3\">\n        <security>\n            <requestedPrivileges>\n                <requestedExecutionLevel\n                    level=\"asInvoker\"\n                    uiAccess=\"false\"\n                />\t\n            </requestedPrivileges>\n        </security>\n    </trustInfo>\n    <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\"> \n        <application> \n            <!-- Windows 10 --> \n            <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\"/>\n            <!-- Windows 8.1 -->\n            <supportedOS Id=\"{1f676c76-80e1-4239-95bb-83d0f6d0da78}\"/>\n            <!-- Windows Vista -->\n            <supportedOS Id=\"{e2011457-1546-43c5-a5fe-008deee3d3f0}\"/> \n            <!-- Windows 7 -->\n            <supportedOS Id=\"{35138b9a-5d96-4fbd-8e2d-a2440225f93a}\"/>\n            <!-- Windows 8 -->\n            <supportedOS Id=\"{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}\"/>\n        </application> \n    </compatibility>\n</assembly>\n"
  },
  {
    "path": "host/dxwndhost.cpp",
    "content": "// dxwndhost.cpp : Application and class definitions\n//\n\n#include \"stdafx.h\"\n#include \"dxwndhost.h\"\n\n#include \"MainFrm.h\"\n#include \"dxwndhostDoc.h\"\n#include \"dxwndhostView.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\nextern int KillProcByName(char *, BOOL, BOOL);\n\n/////////////////////////////////////////////////////////////////////////////\n// CDxwndhostApp\n\nBEGIN_MESSAGE_MAP(CDxwndhostApp, CWinApp)\n\t//{{AFX_MSG_MAP(CDxwndhostApp)\n\tON_COMMAND(ID_APP_ABOUT, OnAppAbout)\n\tON_COMMAND(ID_HELP_VIEWHELP, OnViewHelp)\n\t//}}AFX_MSG_MAP\n\t// Basic file command \n\tON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)\n\tON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// custom command line parsing:\n// CNewCommandLineInfo Class constructor\n\n// too do: eliminate nasty global variables....\nUINT m_StartToTray = FALSE;\nUINT m_InitialState = DXW_ACTIVE;\nBOOL gbDebug = FALSE;\nBOOL gWarnOnExit = FALSE;\nBOOL gTransientMode = FALSE;\nBOOL gAutoHideMode = FALSE;\nBOOL gQuietMode = FALSE;\nBOOL gMustDie = FALSE;\nint iProgIndex;\nDWORD SysColors[32];\n//char m_ConfigFileName[MAX_PATH+1] = \"dxwnd.ini\";\n\nclass CNewCommandLineInfo : public CCommandLineInfo\n{\n//public:\n//\tUINT m_StartToTray;\n//\tUINT m_InitialState;\n\n\tvoid ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast);\n};\n\nBOOL LangSelected=FALSE;\nchar LangString[20+1] = {0};\n\nvoid CNewCommandLineInfo::ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast)\n{\n\t// syntax:\n\t// /t -- start minimized in tray icon\n\t// /i -- start in idle state\n\t// /d -- start in debug mode\n\t// /lang=<XX> -- loads the language resources in Resources_<XX>.dll extension\n\t// /c:<path> -- loads <path> config file instead of default dxwnd.ini\n\t// /e -- terminates (Ends) the active dxwnd session\n\t// /r:<n> -- run the n-th game in configuration and terminate together with it\n\t// /a -- auto-hide mode while a game is running\n\t// /q -- quiet mode, no error/message dialog boxes\n\n\tif(bFlag) {\n\t\tCString sParam(lpszParam);\n\t\tif (sParam.MakeLower() == \"t\"){\n\t\t\tm_StartToTray=TRUE;\n\t\t\treturn;\n\t\t}\n\t\tif (sParam.MakeLower() == \"i\"){\n\t\t\tm_InitialState=DXW_IDLE;\n\t\t\treturn;\n\t\t}\n\t\tif (sParam.MakeLower() == \"a\"){\n\t\t\tgAutoHideMode=TRUE;\n\t\t\treturn;\n\t\t}\n\t\tif (sParam.MakeLower() == \"debug\"){\n\t\t\tgbDebug = TRUE;\n\t\t\treturn;\n\t\t}\n\t\tif (sParam.MakeLower().Left(5) == \"lang=\"){\n\t\t\tHMODULE ResLib;\n\t\t\tCString Lang;\n\t\t\tLang = sParam.MakeLower().Right(2);\n\t\t\tResLib=LoadLibrary(\"Resources_\"+Lang+\".dll\");\n\t\t\tif(ResLib) {\n\t\t\t\tAfxSetResourceHandle(ResLib);\n\t\t\t\tLangSelected=TRUE;\n\t\t\t}\n\t\t\telse MessageBoxEx(NULL, \"Missing language \\\"\"+Lang+\"\\\"\\nUsing default language \\\"en\\\"\", \"Warning\", MB_OK, NULL);\n\t\t\t//strcpy(LangString, sParam.MakeLower().Mid(5));\n\t\t\treturn;\n\t\t}\n\t\tif (sParam.Left(2).MakeLower() == \"c:\"){\n\t\t\tstrcpy_s(gInitPath, sizeof(gInitPath)-1, sParam.Mid(2,sizeof(gInitPath)-1));\n\t\t\treturn;\n\t\t}\n\t\tif (sParam.MakeLower() == \"e\"){\n\t\t\t// Exit (kill) existing DxWnd session\n\t\t\tKillProcByName(\"DxWnd.exe\", TRUE, FALSE);\n\t\t\texit(0);\n\t\t}\n\t\tif (sParam.Left(2).MakeLower() == \"r:\"){\n\t\t\tgTransientMode = TRUE;\n\t\t\tm_StartToTray=TRUE;\n\t\t\tchar *p = (char *)sParam.GetString();\n\t\t\tiProgIndex = atoi(&p[2]);\n\t\t\treturn;\n\t\t}\n\t\tif (sParam.MakeLower() == \"q\"){\n\t\t\t// (Q)uiet mode: no message dialogs on screen\n\t\t\tgQuietMode = TRUE;\n\t\t}\n\t}\n\n\t// Call the base class to ensure proper command line processing\n\tCCommandLineInfo::ParseParam(lpszParam, bFlag, bLast);\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// CDxwndhostApp Class constructor\n\nCDxwndhostApp::CDxwndhostApp()\n{\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// The only CDxwndhostApp object\n\nCDxwndhostApp theApp;\n\n/////////////////////////////////////////////////////////////////////////////\n// CDxwndhostApp Class initialization\n\nBOOL CDxwndhostApp::InitInstance()\n{\n\tchar InitPath[MAX_PATH];\n\tAfxEnableControlContainer();\n\n\t// standard initialization\n\n\t// DDE file open: Parse command line for standard shell commands and so on.\n\t// Parse command line for standard shell commands, DDE, file open\n\t// and user-defined flags. The CCommandLine class has been replaced\n\tCNewCommandLineInfo cmdInfo;\n\tParseCommandLine(cmdInfo);\n\t\n\tGetCurrentDirectory(MAX_PATH, InitPath);\n\tstrcat_s(InitPath, sizeof(InitPath), \"\\\\dxwnd.ini\");\n\t\n\t//CompatibilityMinLevel = GetPrivateProfileInt(\"window\", \"compatminlevel\", 0, InitPath);\n\n\tif(!gbDebug) gbDebug = GetPrivateProfileInt(\"window\", \"debug\", 0, InitPath); // debug flag set from config file\n\tif(!gAutoHideMode) gAutoHideMode = GetPrivateProfileInt(\"window\", \"autohide\", 0, InitPath); // debug flag set from config file\n\tgWarnOnExit = GetPrivateProfileInt(\"window\", \"warnonexit\", 0, InitPath); // WarnOnExit flag set from config file\n\n\t// Register the document template.\n\n\tCSingleDocTemplate* pDocTemplate;\n\tpDocTemplate = new CSingleDocTemplate(\n\t\tgbDebug ? IDR_MAINFRAME_EX : IDR_MAINFRAME,\n\t\tRUNTIME_CLASS(CDxwndhostDoc),\n\t\tRUNTIME_CLASS(CMainFrame),       // SDI main frame window\n\t\tRUNTIME_CLASS(CDxwndhostView));\n\tAddDocTemplate(pDocTemplate);\n\n\tif(!LangSelected){\n\t\tLANGID LangId;\n\t\tchar LangString[20+1];\n\t\tGetPrivateProfileString(\"window\", \"lang\", \"\", LangString, 20+1, InitPath);\n\t\tif(!strcmp(LangString, \"default\") || !strlen(LangString)){ // if no specification, or lang=default\n\t\t\t// do nothing\n\t\t}\n\t\tif(!strcmp(LangString, \"automatic\")){ // lang=automatic\n\t\t\tHMODULE ResLib;\n\t\t\tLangId=GetUserDefaultUILanguage();\n\t\t\t// other codes to be implemented:\n\t\t\t// 409 (2-9): english (default)\n\t\t\t// 411 (2-11): japanese\n\t\t\tswitch(LangId & 0x1FF){\n\t\t\t\tcase 0x04: // chinese family\n\t\t\t\t\tResLib=LoadLibrary(\"Resources_CN.dll\");\n\t\t\t\t\tif(ResLib) AfxSetResourceHandle(ResLib);\n\t\t\t\t\telse MessageBoxEx(NULL, \"Missing language \\\"CN\\\"\\nUsing default language \\\"en\\\"\", \"Warning\", MB_OK, NULL);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x10: // 410 - italian, 810 - switzerland italian\n\t\t\t\t\tResLib=LoadLibrary(\"Resources_IT.dll\");\n\t\t\t\t\tif(ResLib) AfxSetResourceHandle(ResLib);\n\t\t\t\t\telse MessageBoxEx(NULL, \"Missing language \\\"IT\\\"\\nUsing default language \\\"en\\\"\", \"Warning\", MB_OK, NULL);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x19: // 419 - russian\n\t\t\t\t\tResLib=LoadLibrary(\"Resources_RU.dll\");\n\t\t\t\t\tif(ResLib) AfxSetResourceHandle(ResLib);\n\t\t\t\t\telse MessageBoxEx(NULL, \"Missing language \\\"RU\\\"\\nUsing default language \\\"en\\\"\", \"Warning\", MB_OK, NULL);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: \n\t\t\t\t\t//char sBuf[81];\n\t\t\t\t\t//sprintf(sBuf, \"Got Lang=%x(%x-%x)\", LangId, LangId>>9, (LangId & 0x1FF));\n\t\t\t\t\t//MessageBox(NULL, sBuf, \"LangId\", MB_OK);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif(strcmp(LangString, \"automatic\") && strcmp(LangString, \"default\") && strlen(LangString)) { // lang=something different from both automatic and default\n\t\t\tHMODULE ResLib;\n\t\t\tCString Lang;\n\t\t\tLang.SetString(LangString);\n\t\t\tResLib=LoadLibrary(\"Resources_\"+Lang+\".dll\");\n\t\t\tif(ResLib) AfxSetResourceHandle(ResLib);\n\t\t\telse MessageBoxEx(NULL, \"Missing language \\\"\"+Lang+\"\\\"\\nUsing default language \\\"en\\\"\", \"Warning\", MB_OK, NULL);\n\t\t}\n\t}\n\n\t// Dispatch commands specified on the command line.\n\tif (!ProcessShellCommand(cmdInfo))\n\t\treturn FALSE;\n\tm_pMainWnd->SetWindowText(\"DXWnd\");\n\tRECT rect;\n\tm_pMainWnd->GetWindowRect(&rect);\n\trect.right = rect.left + 320;\n\trect.bottom = rect.top + 200;\n\t//m_pMainWnd->MoveWindow(&rect, TRUE);\n\tm_pMainWnd->ShowWindow(SW_SHOW);\n\tm_pMainWnd->UpdateWindow();\n\n\tBOOL bCheckAdminRights = GetPrivateProfileInt(\"window\", \"checkadmin\", 0, InitPath); \n\textern BOOL DxSelfElevate(CDxwndhostView *);\n    OSVERSIONINFO osver = { sizeof(osver) };\n\t// self elevation at start if configured for the whole DxWnd session\n    if (bCheckAdminRights && (GetVersionEx(&osver)) && (osver.dwMajorVersion >= 6)){\n\t\tDxSelfElevate((CDxwndhostView *)NULL);\n\t}\n\n\t// save system colors for later recovery\n\tfor(int index=COLOR_SCROLLBAR; index<=COLOR_MENUBAR; index++) SysColors[index]=0; // initialize\n\tfor(int index=COLOR_SCROLLBAR; index<=COLOR_MENUBAR; index++) SysColors[index]=::GetSysColor(index);\n\treturn TRUE; \n}\n\n\n/////////////////////////////////////////////////////////////////////////////\n// Used in application version information dialog CAboutDlg\n\nclass CAboutDlg : public CDialog\n{\npublic:\n\tCAboutDlg();\n\tvirtual BOOL OnInitDialog();\n\n// Data Dialog \n\t//{{AFX_DATA(CAboutDlg)\n\tenum { IDD = IDD_ABOUTBOX };\n\tCString\tm_Version;\n\tCString\tm_Thanks;\n\t//}}AFX_DATA\n\n\t// ClassWizard generated virtual function overrides.\n\t//{{AFX_VIRTUAL(CAboutDlg)\n\tprotected:\n\tvirtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV Support\n\tvirtual void OnTimer(UINT_PTR);\n\t//}}AFX_VIRTUAL\n\n// Implementation\nprotected:\n\t//{{AFX_MSG(CAboutDlg)\n\t\t// There is no message handler.\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n};\n\nCAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)\n{\n\t//{{AFX_DATA_INIT(CAboutDlg)\n\tm_Version = _T(\"\");\n\t//}}AFX_DATA_INIT\n}\n\nvoid CAboutDlg::DoDataExchange(CDataExchange* pDX)\n{\n\tCDialog::DoDataExchange(pDX);\n\t//{{AFX_DATA_MAP(CAboutDlg)\n\tDDX_Text(pDX, IDC_VERSION, m_Version);\n\tDDX_Text(pDX, IDC_THANKS, m_Thanks);\n\t//}}AFX_DATA_MAP\n}\n\n#define ID_HELP_SCROLL 999\n\nBOOL CAboutDlg::OnInitDialog()\n{\n\tCDialog::OnInitDialog();\n\tSetTimer(ID_HELP_SCROLL, 600, NULL);\n\treturn TRUE;  // return TRUE unless you set the focus to a control\n}\n\nCString Thanks[] = {\n\"Aqrit for proxies, many tweaks & hot patching schema\",\n\"AxXxB and Old-Games.ru teammates for ZBUFFER fix\",\n\"Fabian \\\"ryg\\\" Giesen & others for DXT1/5 compression\",\n\"FunkyFr3sh for fixes in proxy dll\",\n\"Gsky916 for chinese translation\",\n\"Jari Kommpa for ddraw wrapper source and d3d hints\",\n\"Jiri Dvorak for his d3d8 wrapper with 16bpp emulation\",\n\"Luigi Auriemma for injection syncronization\",\n\"Michael Koch for d3d9 proxy dll\",\n\"Narzoul for sharing DC handling code\",\n\"Olly (www.ollydbg.de) for OllyDBG & disasm lib\",\n\"RomSteady for his kind encouragement\",\n\"Ryan Geiss for his bilinear filter code\",\n\"TigerhawkT3 for html manual pages\",\n\"Tsuda Kageyu for MinHook dll\",\n\"\"};\n\n#define THANKSKOUNT 15\n\nvoid CAboutDlg::OnTimer(UINT_PTR nIDEvent)\n{\n\tstatic int i=0;\n\tint j;\n\tCString RolledThanks;\n\tfor(j=i; j<THANKSKOUNT; j++) RolledThanks.AppendFormat(\"%s\\n\", Thanks[j]);\n\tfor(j=0; j<i          ; j++) RolledThanks.AppendFormat(\"%s\\n\", Thanks[j]);\n\tthis->SetDlgItemTextA(IDC_THANKS, RolledThanks);\n\ti=(i+1)%THANKSKOUNT;\n}\n\nBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)\n\tON_WM_TIMER()\nEND_MESSAGE_MAP()\n\n// The application command to run the dialog\nvoid CDxwndhostApp::OnAppAbout()\n{\n\tchar tmp[32], ver[32];\n\tCAboutDlg aboutDlg;\n\tGetDllVersion(tmp);\n\tsprintf(ver, \"DLL version %s\", tmp);\n\taboutDlg.m_Version = ver;\n\taboutDlg.m_Thanks = \"\";\n//\taboutDlg.m_Thanks = \"\\\n//Aqrit for proxies, many tweaks & hot patching schema\\n\\\n//AxXxB and Old-Games.ru teammates for ZBUFFER fix\\n\\\n//Fabian \\\"ryg\\\" Giesen & others for DXT1/5 compression\\n\\\n//FunkyFr3sh for fixes in proxy dll\\n\\\n//Gsky916 for chinese translation\\n\\\n//Jari Kommpa for ddraw wrapper source and d3d hints\\n\\\n//Jiri Dvorak for his d3d8 wrapper with 16bpp emulation\\n\\\n//Luigi Auriemma for injection syncronization\\n\\\n//Michael Koch for d3d9 proxy dll\\n\\\n//Narzoul for sharing DC handling code\\n\\\n//Olly (www.ollydbg.de) for OllyDBG & disasm lib\\n\\\n//RomSteady for his kind encouragement\\n\\\n//Ryan Geiss for his bilinear filter code\\n\\\n//TigerhawkT3 for html manual pages\\n\\\n//Tsuda Kageyu for MinHook dll\\n\\\n//\";\n\taboutDlg.DoModal();\n\taboutDlg.KillTimer(ID_HELP_SCROLL);\n}\n\nvoid CDxwndhostApp::OnViewHelp()\n{\n\tHINSTANCE ret;\n\tchar sHelpPath[MAX_PATH];\n\tGetPrivateProfileString(\"window\", \"help\", \".\\\\help\\\\DxWnd.html\", sHelpPath, MAX_PATH, gInitPath);\n\tret=ShellExecute(NULL, \"open\", sHelpPath, NULL, NULL, SW_SHOWNORMAL);\n\tif((DWORD)ret<=32){\n\t\tchar *m;\n\t\tswitch((DWORD)ret){\n\t\t\tcase 0:\t\t\t\t\t\t\tm=\"Out of memory resources\"; break;\n\t\t\tcase ERROR_BAD_FORMAT:\t\t\tm=\"Invalid .exe file\"; break;\n\t\t\tcase SE_ERR_ACCESSDENIED:\t\tm=\"Access denied\"; break;\n\t\t\tcase SE_ERR_ASSOCINCOMPLETE:\tm=\"File name association incomplete or invalid\"; break;\n\t\t\tcase SE_ERR_DDEBUSY:\t\t\tm=\"DDE busy\"; break;\n\t\t\tcase SE_ERR_DDEFAIL:\t\t\tm=\"DDE failed\"; break;\n\t\t\tcase SE_ERR_DDETIMEOUT:\t\t\tm=\"DDE timed out\"; break;\n\t\t\tcase SE_ERR_DLLNOTFOUND:\t\tm=\"DLL not found\"; break;\n\t\t\tcase SE_ERR_FNF:\t\t\t\tm=\"File not found\"; break;\n\t\t\tcase SE_ERR_NOASSOC:\t\t\tm=\"No association with file extension\"; break;\n\t\t\tcase SE_ERR_OOM:\t\t\t\tm=\"Not enough memory\"; break;\n\t\t\tcase SE_ERR_PNF:\t\t\t\tm=\"Path not found\"; break;\n\t\t\tcase SE_ERR_SHARE:\t\t\t\tm=\"Sharing violation\"; break;\n\t\t\tdefault:\t\t\t\t\t\tm=\"Unknown error\"; break;\n\t\t}\n\t\tMessageBox(0, m, \"DxWnd error\", MB_ICONEXCLAMATION|MB_OK);\n\t}\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// CDxwndhostApp Message Handler\n\nchar *GetTSCaption(int shift)\n{\n\tstatic char *sTSCaption[17]={\n\t\t\"x16\",\"x12\",\"x8\",\"x6\",\n\t\t\"x4\",\"x3\",\"x2\",\"x1.5\",\n\t\t\"x1\",\n\t\t\":1.5\",\":2\",\":3\",\":4\",\n\t\t\":6\",\":8\",\":12\",\":16\"};\n\tif (shift<-8 || shift>8) return \"???\";\n\treturn sTSCaption[shift+8];\n}\n"
  },
  {
    "path": "host/dxwndhost.h",
    "content": "// dxwndhost.h : DXWNDHOST Application's main header file\n//\n\n#if !defined(AFX_DXWNDHOST_H__C68B92A2_C45F_4B59_986D_5BBC6BAD3AD8__INCLUDED_)\n#define AFX_DXWNDHOST_H__C68B92A2_C45F_4B59_986D_5BBC6BAD3AD8__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n\n#ifndef __AFXWIN_H__\n\t#error include 'stdafx.h' before including this file for PCH\n#endif\n\n#include \"resource.h\"       // Main symbols\n\nextern int MessageBoxLang(UINT, UINT, UINT);\nextern int MessageBoxLangArg(UINT, UINT, UINT, ...);\n\n// DxWnd host app private data\n// fields here are associated to TARGETMAP records, but need not to be passed\n// to the dxwnd hook callback, so they are left in a separate array to save \n// the (limited) IPC space and allow for more record entryes (currently 255).\n\n#define MAX_NOTES 1024\n#define MAX_REGISTRY 2048\n#define MAX_TITLE 80\n\ntypedef struct PRIVATEMAP\n{\n\tchar title[MAX_TITLE+1];\n\tchar launchpath[MAX_PATH+1];\n\tchar startfolder[MAX_PATH+1];\n\tchar *notes;\n\tchar *registry;\n}PRIVATEMAP;\n\ntypedef struct {\n\tTARGETMAP *TM;\n\tPRIVATEMAP *PM;\n\tchar *ExePath;\n} ThreadInfo_Type;\nThreadInfo_Type;\n\nextern char gInitPath[MAX_PATH+1];\nextern void OutTrace(const char *, ...);\n\n/////////////////////////////////////////////////////////////////////////////\n// CDxwndhostApp:\n// For the definition of this class action please see the file dxwndhost.cpp.\n//\n\nclass CDxwndhostApp : public CWinApp\n{\npublic:\n\tCDxwndhostApp();\n\n// Override\n\t// ClassWizard Generates a virtual function overrides.\n\t//{{AFX_VIRTUAL(CDxwndhostApp)\n\tpublic:\n\tvirtual BOOL InitInstance();\n\t//}}AFX_VIRTUAL\n\n// Implementation\n\t//{{AFX_MSG(CDxwndhostApp)\n\tafx_msg void OnAppAbout();\n\tafx_msg void OnViewHelp();\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n};\n\n/////////////////////////////////////////////////////////////////////////////\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ Will insert additional declarations immediately before the previous line.\n\n#endif // !defined(AFX_DXWNDHOST_H__C68B92A2_C45F_4B59_986D_5BBC6BAD3AD8__INCLUDED_)\n"
  },
  {
    "path": "host/dxwndhost.vs2008.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"dxwndhost\", \"dxwndhost.vs2008.vcproj\", \"{FD0B0234-8EC5-43C0-A384-1B881DD3D925}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{FD0B0234-8EC5-43C0-A384-1B881DD3D925}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "host/dxwndhost.vs2008.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"dxwndhost\"\n\tProjectGUID=\"{FD0B0234-8EC5-43C0-A384-1B881DD3D925}\"\n\tRootNamespace=\"dxwndhost\"\n\tKeyword=\"MFCProj\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"1\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/dxwndhost.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"../Include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderThrough=\"stdafx.h\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/dxwndhost.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"../dll/Release/dxwnd.lib shlwapi.lib\"\n\t\t\t\tOutputFile=\"../Release/dxwnd.exe\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tAdditionalManifestDependencies=\"\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/dxwnd.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t\tAdditionalManifestFiles=\"dxwnd.manifest\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/dxwndhost.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"1\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"1\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/dxwndhost.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"../Include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS; PSAPI_VERSION=1\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tPrecompiledHeaderThrough=\"stdafx.h\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/dxwndhost.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"../dll/Debug/dxwnd.lib\"\n\t\t\t\tOutputFile=\"../Debug/dxwnd.exe\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tAddModuleNamesToAssembly=\"\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/dxwnd.pdb\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/dxwndhost.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\CDragEdit.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\CGlobalSettings.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\CoolUtils.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\CppUACSelfElevation.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\DesktopDialog.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dib.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dxelevate.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dxTabCtrl.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"dxwndhost.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"dxwndhost.rc\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"dxwndhostDoc.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"dxwndhostView.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\findwindow.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\getfname.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\host.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\KillProc.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\KillProcTree.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"MainFrm.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\MessageBox.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\OutTrace.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\PaletteDialog.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\PaletteDialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ShimsDialog.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\SpecialEdit.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\StatusDialog.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"StdAfx.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tUsePrecompiledHeader=\"1\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t\tUsePrecompiledHeader=\"1\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\SystemTray.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabCompat.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabDebug.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabDirect3D.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabDirectX.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabDirectX2.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabHook.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabInput.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabLogs.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabNotes.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabProgram.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabRegistry.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabSysLibs.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabTiming.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabWindow.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"TargetDlg.cpp\"\n\t\t\t\t>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Release|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t\t<FileConfiguration\n\t\t\t\t\tName=\"Debug|Win32\"\n\t\t\t\t\t>\n\t\t\t\t\t<Tool\n\t\t\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\t\t\tPreprocessorDefinitions=\"\"\n\t\t\t\t\t/>\n\t\t\t\t</FileConfiguration>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TimeSliderDlg.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ViewFlagsDialog.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\VJoyDialog.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\cdib.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\CDragEdit.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\CGlobalSettings.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\CoolUtils.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\DesktopDialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\dxTabCtrl.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Include\\dxwnd.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"dxwndhost.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"dxwndhostDoc.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"dxwndhostView.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"MainFrm.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\SpecialEdit.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\StatusDialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"StdAfx.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\SystemTray.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabCompat.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabDebug.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabDirect3D.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabDirectX.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabDirectX2.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabHook.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabInput.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabLogs.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabNotes.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabProgram.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabRegistry.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabSysLibs.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabTiming.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TabWindow.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"TargetDlg.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\TimeSliderDialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ViewFlagsDialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\VJoyDialog.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\alt-ctrl-shift.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\alt.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\bigicons.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\bitmap1.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\bitmap2.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\bmp00001.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\dxw1.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\dxw2.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\dxw5.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\"res\\dxwndhost.rc2\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\gho.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\idr_main.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\notes.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\palette24.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\registry.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run+33.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run+66.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-0.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-180.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-33.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-66.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-90.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\smallicons.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\viewfinder.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<File\n\t\t\tRelativePath=\".\\res\\alt-ctrl-shift.png\"\n\t\t\t>\n\t\t</File>\n\t\t<File\n\t\t\tRelativePath=\".\\alt-ctrl-shift.png\"\n\t\t\t>\n\t\t</File>\n\t\t<File\n\t\t\tRelativePath=\".\\alt.png\"\n\t\t\t>\n\t\t</File>\n\t\t<File\n\t\t\tRelativePath=\".\\res\\alt.png\"\n\t\t\t>\n\t\t</File>\n\t\t<File\n\t\t\tRelativePath=\".\\resource\"\n\t\t\t>\n\t\t</File>\n\t</Files>\n\t<Globals>\n\t\t<Global\n\t\t\tName=\"RESOURCE_FILE\"\n\t\t\tValue=\"dxwndhost.rc\"\n\t\t/>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "host/dxwndhostDoc.cpp",
    "content": "// dxwndhostDoc.cpp : CDxwndhostDoc Define the behavior of the class.\n//\n\n#include \"stdafx.h\"\n#include \"dxwndhost.h\"\n\n#include \"dxwndhostDoc.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n// CDxwndhostDoc\n\nIMPLEMENT_DYNCREATE(CDxwndhostDoc, CDocument)\n\nBEGIN_MESSAGE_MAP(CDxwndhostDoc, CDocument)\n\t//{{AFX_MSG_MAP(CDxwndhostDoc)\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n/////////////////////////////////////////////////////////////////////////////\n// CDxwndhostDoc class constructor / destructor\n\nCDxwndhostDoc::CDxwndhostDoc()\n{\n}\n\nCDxwndhostDoc::~CDxwndhostDoc()\n{\n}\n\nBOOL CDxwndhostDoc::OnNewDocument()\n{\n\tif (!CDocument::OnNewDocument())\n\t\treturn FALSE;\n\n\treturn TRUE;\n}\n\n\n\n/////////////////////////////////////////////////////////////////////////////\n// CDxwndhostDoc Serialization\n\nvoid CDxwndhostDoc::Serialize(CArchive& ar)\n{\n\tif (ar.IsStoring())\n\t{\n\t}\n\telse\n\t{\n\t}\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// CDxwndhostDoc Diagnostic Class\n\n#ifdef _DEBUG\nvoid CDxwndhostDoc::AssertValid() const\n{\n\tCDocument::AssertValid();\n}\n\nvoid CDxwndhostDoc::Dump(CDumpContext& dc) const\n{\n\tCDocument::Dump(dc);\n}\n#endif //_DEBUG\n\n/////////////////////////////////////////////////////////////////////////////\n// CDxwndhostDoc Command\n"
  },
  {
    "path": "host/dxwndhostDoc.h",
    "content": "// dxwndhostDoc.h : CDxwndhostDoc class definitions and interface declarations.\n//\n/////////////////////////////////////////////////////////////////////////////\n\n#if !defined(AFX_DXWNDHOSTDOC_H__07C9FF34_8B9B_49CC_BE82_B76813FE88FE__INCLUDED_)\n#define AFX_DXWNDHOSTDOC_H__07C9FF34_8B9B_49CC_BE82_B76813FE88FE__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n\n\nclass CDxwndhostDoc : public CDocument\n{\nprotected: // Create from serialization only features.\n\tCDxwndhostDoc();\n\tDECLARE_DYNCREATE(CDxwndhostDoc)\n\n// Attributes\npublic:\n\n// Operation\npublic:\n\n//Override\n\t// ClassWizard Generates a virtual function overrides.\n\t//{{AFX_VIRTUAL(CDxwndhostDoc)\n\tpublic:\n\tvirtual BOOL OnNewDocument();\n\tvirtual void Serialize(CArchive& ar);\n\t//}}AFX_VIRTUAL\n\n// Implementation\npublic:\n\tvirtual ~CDxwndhostDoc();\n#ifdef _DEBUG\n\tvirtual void AssertValid() const;\n\tvirtual void Dump(CDumpContext& dc) const;\n#endif\n\nprotected:\n\n// Generated message map functions\nprotected:\n\t//{{AFX_MSG(CDxwndhostDoc)\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n};\n\n/////////////////////////////////////////////////////////////////////////////\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ will insert additional declarations immediately before the previous line.\n\n#endif // !defined(AFX_DXWNDHOSTDOC_H__07C9FF34_8B9B_49CC_BE82_B76813FE88FE__INCLUDED_)\n"
  },
  {
    "path": "host/dxwndhostView.cpp",
    "content": "// dxwndhostView.cpp : CDxwndhostView Define the behavior of the class.\n//\n\n#include \"stdafx.h\"\n#include \"shlwapi.h\"\n#include \"TlHelp32.h\"\n#include \"CoolUtils.h\"\n\n#include \"dxwndhost.h\"\n\n#include \"dxwndhostDoc.h\"\n#include \"dxwndhostView.h\"\n#include \"TargetDlg.h\"\n#include \"SystemTray.h\"\n#include \"StatusDialog.h\"\n#include \"DesktopDialog.h\"\n#include \"PaletteDialog.h\"\n#include \"TimeSliderDialog.h\"\n#include \"VJoyDialog.h\"\n#include \"ShimsDialog.h\"\n#include \"ViewFlagsDialog.h\"\n#include \"CGlobalSettings.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#undef THIS_FILE\nstatic char THIS_FILE[] = __FILE__;\n#endif\n\n#define\tWM_ICON_NOTIFY WM_APP+10\n#define strcasecmp lstrcmpi\n\nextern UINT m_StartToTray;\nextern UINT m_InitialState;\n//extern char m_ConfigFileName[MAX_PATH+1];\nextern BOOL Inject(DWORD, const char *);\nextern int KillProcByName(char *, BOOL, BOOL);\nextern BOOL gTransientMode;\nextern BOOL gAutoHideMode;\nextern BOOL gbDebug;\nextern BOOL gMustDie;\nextern int iProgIndex;\n\nPRIVATEMAP *pTitles; // global ptr: get rid of it!!\nTARGETMAP *pTargets; // idem.\n\n#define LOCKINJECTIONTHREADS\n\nchar gInitPath[MAX_PATH+1] = \"\"; // don't put it into the class because it must be used after destructor\nchar gExportPath[MAX_PATH+1]; \nCWnd *pParent;\n\n// beware: it must operate upon count+1 sized arrays\nchar *strnncpy(char *dest, char *src, size_t count)\n{\n\tdest[count]=0;\n\treturn strncpy(dest, src, count);\n}\n\nstatic char *Escape(char *s, char **dest)\n{\n\tif(!*dest)\t*dest=(char *)malloc(strlen(s)+100);\n\telse\t\t*dest=(char *)realloc(*dest, strlen(s)+100); \n\tchar *t = *dest;\n\tfor(; *s; s++){\n\t\tswitch(*s){\n\t\t\tcase '\\n':\n\t\t\t\t*t++ = '\\\\';\n\t\t\t\t*t++ = 'n';\n\t\t\t\tbreak;\n\t\t\tcase '\\r':\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t*t++ = *s;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t*t=0;\n\treturn *dest;\n}\n\nstatic char *Unescape(char *s, char **dest)\n{\n\tif(!*dest)\t*dest=(char *)malloc(strlen(s)+100);\n\telse\t\t*dest=(char *)realloc(*dest, strlen(s)+100); \n\tchar *t = *dest;\n\tfor(; *s; s++){\n\t\tif((*s=='\\\\') && (*(s+1)=='n')){\n\t\t\t*t++ = '\\r';\n\t\t\t*t++ = '\\n';\n\t\t\ts++;\n\t\t}\n\t\telse{\n\t\t\t*t++ = *s;\n\t\t}\n\t}\n\t*t=0;\n\treturn *dest;\n}\n\nvoid GetFolderFromPath(char *path)\n{\n\tfor(char *c=&path[strlen(path)-1]; (c>path) && (*c!='\\\\'); c--) *c=0;\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// CDxwndhostView\n\nIMPLEMENT_DYNCREATE(CDxwndhostView, CListView)\n\nBEGIN_MESSAGE_MAP(CDxwndhostView, CListView)\n\t//{{AFX_MSG_MAP(CDxwndhostView)\n\tON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)\n\tON_COMMAND(ID_EXPLORE, OnExplore)\n\tON_COMMAND(ID_LOG_VIEW, OnViewLog)\n\tON_COMMAND(ID_LOG_DELETE, OnDeleteLog)\n\tON_COMMAND(ID_TASK_KILL, OnKill)\n\tON_COMMAND(ID_TASK_PAUSE, OnPause)\n\tON_COMMAND(ID_TASK_RESUME, OnResume)\n\tON_COMMAND(ID_WINDOW_MINIMIZE, OnWindowMinimize)\n\tON_COMMAND(ID_WINDOW_RESTORE, OnWindowRestore)\n\tON_COMMAND(ID_WINDOW_CLOSE, OnWindowClose)\n\tON_COMMAND(ID_WINDOW_MINIMIZE, OnWindowMinimize)\n\tON_COMMAND(ID_TASKBAR_HIDE, OnTaskbarHide)\n\tON_COMMAND(ID_TASKBAR_SHOW, OnTaskbarShow)\n\tON_COMMAND(ID_MODIFY, OnModify)\n\tON_COMMAND(ID_ADD, OnAdd)\n\tON_COMMAND(ID_PDUPLICATE, OnDuplicate)\n\tON_COMMAND(ID_PEXPORT, OnExport)\n\tON_COMMAND(ID_PKILL, OnProcessKill)\n\tON_COMMAND(ID_PKILLALL, OnProcessKillAll)\n\tON_COMMAND(ID_FILE_IMPORT, OnImport)\n\tON_COMMAND(ID_DELETE, OnDelete)\n\tON_COMMAND(ID_FILE_SORTPROGRAMSLIST, OnSort)\n\tON_COMMAND(ID_EDIT_GLOBALSETTINGS, OnGlobalSettings)\n\tON_COMMAND(ID_OPTIONS_EXPERTMODE, OnExpertModeToggle)\n\tON_COMMAND(ID_FILE_CLEARALLLOGS, OnClearAllLogs)\n\tON_COMMAND(ID_FILE_GOTOTRAYICON, OnGoToTrayIcon)\n\tON_COMMAND(ID_FILE_SAVE, OnSaveFile)\n\tON_COMMAND(ID_HOOK_START, OnHookStart)\n\tON_COMMAND(ID_HOOK_STOP, OnHookStop)\n\tON_COMMAND(ID_DXAPP_EXIT, OnExit)\n\tON_COMMAND(ID_RUN, OnRun)\n\tON_COMMAND(ID_TRAY_RESTORE, OnTrayRestore)\n\tON_COMMAND(ID_VIEW_STATUS, OnViewStatus)\n\tON_COMMAND(ID_VIEW_SHIMS, OnViewShims)\n\tON_COMMAND(ID_VIEW_DESKTOP, OnViewDesktop)\n\tON_COMMAND(ID_VIEW_PALETTE, OnViewPalette)\n\tON_COMMAND(ID_VIEW_TIMESLIDER, OnViewTimeSlider)\n\tON_COMMAND(ID_VIEW_VIRTUALJOYSTICK, OnViewVirtualJoystick)\n\tON_COMMAND(ID_DESKTOPCOLORDEPTH_8BPP, OnDesktopcolordepth8bpp)\n\tON_COMMAND(ID_DESKTOPCOLORDEPTH_16BPP, OnDesktopcolordepth16bpp)\n\tON_COMMAND(ID_DESKTOPCOLORDEPTH_24BPP, OnDesktopcolordepth24bpp)\n\tON_COMMAND(ID_DESKTOPCOLORDEPTH_32BPP, OnDesktopcolordepth32bpp)\n\tON_COMMAND(ID_TOOLS_RECOVERSCREENMODE, OnRecoverScreenMode)\n\tON_COMMAND(ID_TOOLS_CLEARCOMPATIBILITYFLAGS, OnClearCompatibilityFlags)\n\tON_COMMAND(ID_TOOLS_RECOVERSYSTEMCOLORS, OnRecoverSystemColors)\n\tON_COMMAND(ID_MOVE_TOP, OnMoveTop)\n\tON_COMMAND(ID_MOVE_UP, OnMoveUp)\n\tON_COMMAND(ID_MOVE_DOWN, OnMoveDown)\n\tON_COMMAND(ID_MOVE_BOTTOM, OnMoveBottom)\n\tON_COMMAND(ID_VIEW_FLAGS, OnViewFlags)\n\tON_WM_RBUTTONDOWN()\n\tON_WM_HOTKEY()\n\tON_WM_DROPFILES()\n\t//}}AFX_MSG_MAP\nEND_MESSAGE_MAP()\n\n// v2.1.68: dialog box for status check.\nBOOL CheckStatus()\n{ \n\tif(GetHookStatus(NULL)==DXW_RUNNING){\n\t\tMessageBoxLang(DXW_STRING_WAITTASK, DXW_STRING_WARNING, MB_OK | MB_ICONEXCLAMATION);\n\t\treturn TRUE;\n\t}\n\treturn FALSE;\n}\n\n// v2.1.78: recover desktop settings.\nstatic void RevertScreenChanges(DEVMODE *InitDevMode)\n{\n\tDEVMODE CurDevMode;\t\n\tEnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &CurDevMode);\n\tif ((CurDevMode.dmPelsHeight != InitDevMode->dmPelsHeight) ||\n\t\t(CurDevMode.dmPelsWidth != InitDevMode->dmPelsWidth) ||\n\t\t(CurDevMode.dmBitsPerPel != InitDevMode->dmBitsPerPel)){\n\t\tif (MessageBoxLang(DXW_STRING_RESTORE, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION)==IDYES) \n\t\t\tChangeDisplaySettings(InitDevMode, 0);\n\t}\n}\n\nvoid SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)\n{\n\tstrcpy_s(t->path, sizeof(t->path), dlg->m_FilePath);\n\tstrcpy_s(t->module, sizeof(t->module), dlg->m_Module);\n\tstrcpy_s(t->OpenGLLib, sizeof(t->OpenGLLib), dlg->m_OpenGLLib);\n\tif(dlg->m_DXVersion > 1) dlg->m_DXVersion += 5;\n\tt->dxversion = dlg->m_DXVersion;\n\tt->monitorid = (dlg->m_MonitorId == -1) ? -1 : dlg->m_MonitorId - 1;\n\tt->MaxDdrawInterface = dlg->m_MaxDdrawInterface+1;\n\tt->SlowRatio = dlg->m_SlowRatio;\n\tt->coordinates = dlg->m_Coordinates;\n\tt->flags = 0;\n\tt->flags2 = 0;\n\tt->flags3 = 0;\n\tt->flags4 = 0;\n\tt->flags5 = 0;\n\tt->flags6 = 0;\n\tt->flags7 = 0;\n\tt->flags8 = 0;\n\tt->flags9 = 0;\n\tt->flags10 = 0;\n\tt->tflags = 0;\n\tt->dflags = 0;\n\tif(dlg->m_UnNotify) t->flags |= UNNOTIFY;\n\tif(dlg->m_Windowize) t->flags2 |= WINDOWIZE;\n\tif(dlg->m_HookDLLs) t->flags3 |= HOOKDLLS;\n\tif(dlg->m_AnsiWide) t->flags5 |= ANSIWIDE;\n\tif(dlg->m_HookNoRun) t->flags7 |= HOOKNORUN;\n\tif(dlg->m_CopyNoShims) t->flags7 |= COPYNOSHIMS;\n\tif(dlg->m_HookNoUpdate) t->flags7 |= HOOKNOUPDATE;\n\tif(dlg->m_SequencedIAT) t->flags8 |= SEQUENCEDIAT;\n\tif(dlg->m_TerminateOnClose) t->flags6 |= TERMINATEONCLOSE;\n\tif(dlg->m_ConfirmOnClose) t->flags6 |= CONFIRMONCLOSE;\n\tif(dlg->m_EmulateRegistry) t->flags3 |= EMULATEREGISTRY;\n\tif(dlg->m_OverrideRegistry) t->flags4 |= OVERRIDEREGISTRY;\n\tif(dlg->m_Wow64Registry) t->flags6 |= WOW64REGISTRY;\n\tif(dlg->m_Wow32Registry) t->flags6 |= WOW32REGISTRY;\n\tif(dlg->m_HookEnabled) t->flags3 |= HOOKENABLED;\n\tif(dlg->m_NeedAdminCaps) t->flags |= NEEDADMINCAPS;\n\tif(dlg->m_NoBanner) t->flags2 |= NOBANNER;\n\tif(dlg->m_HotPatch) t->flags4 |= HOTPATCH;\n\tif(dlg->m_FullScreenOnly) t->flags3 |= FULLSCREENONLY;\n\tif(dlg->m_ShowHints) t->flags7 |= SHOWHINTS;\n\tif(dlg->m_BackgroundPriority) t->flags8 |= BACKGROUNDPRIORITY;\n\tif(dlg->m_PeekAllMessages) t->flags3 |= PEEKALLMESSAGES;\n\tif(dlg->m_NoWinPosChanges) t->flags5 |= NOWINPOSCHANGES;\n\tif(dlg->m_MessagePump) t->flags5 |= MESSAGEPUMP;\n\tif(dlg->m_ClipMenu) t->flags8 |= CLIPMENU;\n\n\tswitch(dlg->m_InjectionMode){\n\t\tcase 0: break;\n\t\tcase 1: t->flags2 |= STARTDEBUG; break;\n\t\tcase 2: t->flags7 |= INJECTSUSPENDED; break;\n\t}\n\n\tswitch(dlg->m_DxEmulationMode){\n\t\tcase 0: break;\n\t\tcase 1: t->flags |= EMULATEBUFFER; break;\n\t\tcase 2: t->flags |= LOCKEDSURFACE; break;\n\t\tcase 3: t->flags |= EMULATESURFACE; break;\n\t\tcase 4: t->flags5 |= HYBRIDMODE; break;\n\t\tcase 5: t->flags5 |= GDIMODE; break;\n\t}\n\n\tswitch(dlg->m_InitColorDepth){\n\t\tcase 0: break;\n\t\tcase 1: t->flags2 |= INIT8BPP; break;\n\t\tcase 2: t->flags2 |= INIT16BPP; break;\n\t\tcase 3: t->flags7 |= INIT24BPP; break;\n\t\tcase 4: t->flags7 |= INIT32BPP; break;\n\t}\n\n\tswitch(dlg->m_DxFilterMode){\n\t\tcase 0: break;\n\t\tcase 1: t->flags4 |= BILINEAR2XFILTER; break;\n\t\tcase 2: t->flags5 |= BILINEARFILTER; break;\n\t}\n\n\tswitch(dlg->m_DCEmulationMode){\n\t\tcase 0: break;\n\t\tcase 1: t->flags2 |= GDISTRETCHED; break;\n\t\tcase 2: t->flags3 |= GDIEMULATEDC; break;\n\t\tcase 3: t->flags6 |= SHAREDDC; break;\n\t}\n\n\tswitch(dlg->m_ResTypes){\n\t\tcase 0: t->flags4 |= SUPPORTSVGA; break;\n\t\tcase 1: t->flags4 |= SUPPORTHDTV; break;\n\t\tcase 2: t->flags4 |= NATIVERES; break;\n\t}\t\n\n\tswitch(dlg->m_MouseVisibility){\n\t\tcase 0: break;\n\t\tcase 1: t->flags |= HIDEHWCURSOR; break;\n\t\tcase 2: t->flags2 |= SHOWHWCURSOR; break;\n\t}\t\n\n\tswitch(dlg->m_MouseClipper){\n\t\tcase 0: break;\n\t\tcase 1: t->flags |= DISABLECLIPPING; break;\n\t\tcase 2: t->flags |= CLIPCURSOR; break;\n\t\tcase 3: t->flags |= CLIPCURSOR; t->flags8 |= CLIPLOCKED; break;\n\t}\t\n\n\tswitch(dlg->m_OffendingMessages){\n\t\tcase 0: break;\n\t\tcase 1: t->flags3 |= FILTERMESSAGES; break;\n\t\tcase 2: t->flags3 |= DEFAULTMESSAGES; break;\n\t}\t\n\n\tswitch(dlg->m_TextureHandling){\n\t\tcase 0: break;\n\t\tcase 1: t->flags5 |= TEXTUREHIGHLIGHT; break;\n\t\tcase 2: t->flags5 |= TEXTUREDUMP; break;\n\t\tcase 3: t->flags5 |= TEXTUREHACK; break;\n\t\tcase 4: t->flags5 |= TEXTURETRANSP; break;\n\t}\n\n\tswitch(dlg->m_SonProcessMode){\n\t\tcase 0: break;\n\t\tcase 1: t->flags4 |= SUPPRESSCHILD; break;\n\t\tcase 2: t->flags5 |= ENABLESONHOOK; break;\n\t\tcase 3: t->flags5 |= INJECTSON; break;\n\t}\t\n\n\tswitch(dlg->m_LogMode){\n\t\tcase 0: break;\n\t\tcase 1: t->tflags |= (OUTTRACE|ERASELOGFILE); break;\n\t\tcase 2: t->tflags |= OUTTRACE; break;\n\t\tcase 3: t->tflags |= (OUTTRACE|OUTSEPARATED); break;\n\t}\t\n\n\tswitch(dlg->m_WinMovementType){\n\t\tcase 0: break;\n\t\tcase 1: t->flags |= LOCKWINPOS; break;\n\t\tcase 2: t->flags |= LOCKWINPOS; t->flags2 |= LOCKEDSIZE; break;\n\t\tcase 3: t->flags |= LOCKWINPOS; t->flags7 |= ANCHORED; break;\n\t}\n\n\tswitch(dlg->m_VSyncMode){\n\t\tcase 0: break;\n\t\tcase 1: t->flags8 |= FORCEVSYNC; break;\n\t\tcase 2: t->flags8 |= FORCENOVSYNC; break;\n\t}\n\n\tswitch(dlg->m_VSyncImpl){\n\t\tcase 0: break;\n\t\tcase 1: t->flags8 |= VSYNCSCANLINE; break;\n\t\tcase 2: t->flags |= SAVELOAD; break;\n\t}\n\tswitch(dlg->m_WaitMode){\n\t\tcase 0: break;\n\t\tcase 1: t->flags8 |= FORCEWAIT; break;\n\t\tcase 2: t->flags8 |= FORCENOWAIT; break;\n\t}\n\n\tswitch(dlg->m_ClipperMode){\n\t\tcase 0: break;\n\t\tcase 1: t->flags3 |= FORCECLIPPER; break;\n\t\tcase 2: t->flags |= SUPPRESSCLIPPING; break;\n\t}\n\n\tswitch(dlg->m_TextureFileFormat){\n\t\tcase 0: break;\n\t\tcase 1: t->flags8 |= RAWFORMAT; break;\n\t\tcase 2: t->flags8 |= DDSFORMAT; break;\n\t}\n\n\tswitch(dlg->m_WindowStyle){\n\t\tcase 0: break;\n\t\tcase 1: t->flags2 |= MODALSTYLE; break;\n\t\tcase 2: t->flags |= FIXWINFRAME; break;\n\t\tcase 3:\tt->flags9 |= FIXTHINFRAME; break;\n\t}\n\n\tif(dlg->m_HookDI) t->flags |= HOOKDI;\n\tif(dlg->m_HookDI8) t->flags |= HOOKDI8;\n\tif(dlg->m_EmulateRelMouse) t->flags6 |= EMULATERELMOUSE;\n\tif(dlg->m_SkipDevTypeHID) t->flags7 |= SKIPDEVTYPEHID;\n\tif(dlg->m_SuppressDIErrors) t->flags7 |= SUPPRESSDIERRORS;\n\tif(dlg->m_SharedKeyboard) t->flags7 |= SHAREDKEYBOARD;\n\tif(dlg->m_ModifyMouse) t->flags |= MODIFYMOUSE;\n\tif(dlg->m_VirtualJoystick) t->flags6 |= VIRTUALJOYSTICK;\n\tif(dlg->m_Unacquire) t->flags6 |= UNACQUIRE;\n\tif(dlg->m_OutDebug) t->tflags |= OUTDEBUG;\n\tif(dlg->m_CursorTrace) t->tflags |= OUTCURSORTRACE;\n\tif(dlg->m_OutDebugString) t->tflags |= OUTDEBUGSTRING;\n\tif(dlg->m_AddTimeStamp) t->tflags |= ADDTIMESTAMP;\n\tif(dlg->m_AddRelativeTime) t->tflags |= ADDRELATIVETIME;\n\tif(dlg->m_OutWinMessages) t->tflags |= OUTWINMESSAGES;\n\tif(dlg->m_OutDWTrace) t->tflags |= OUTDXWINTRACE;\n\tif(dlg->m_OutOGLTrace) t->tflags |= OUTOGLTRACE;\n\tif(dlg->m_OutHexTrace) t->tflags |= OUTHEXTRACE;\n\tif(dlg->m_OutWGTrace) t->tflags |= OUTWINGTRACE;\n\tif(dlg->m_OutDDRAWTrace) t->tflags |= OUTDDRAWTRACE;\n\tif(dlg->m_OutD3DTrace) t->tflags |= OUTD3DTRACE;\n\tif(dlg->m_AssertDialog) t->tflags |= ASSERTDIALOG;\n\tif(dlg->m_ImportTable) t->tflags |= OUTIMPORTTABLE;\n\tif(dlg->m_RegistryOp) t->tflags |= OUTREGISTRY;\n\tif(dlg->m_TraceHooks) t->tflags |= TRACEHOOKS;\n\tif(dlg->m_HandleExceptions) t->flags |= HANDLEEXCEPTIONS;\n\tif(dlg->m_VirtualHeap) t->flags8 |= VIRTUALHEAP;\n\tif(dlg->m_LimitResources) t->flags2 |= LIMITRESOURCES;\n\tif(dlg->m_CDROMDriveType) t->flags3 |= CDROMDRIVETYPE;\n\tif(dlg->m_HideCDROMEmpty) t->flags4 |= HIDECDROMEMPTY;\n\tif(dlg->m_HookGOGLibs) t->flags6 |= HOOKGOGLIBS;\n\tif(dlg->m_BypassGOGLibs) t->flags6 |= BYPASSGOGLIBS;\n\tif(dlg->m_FontBypass) t->flags3 |= FONTBYPASS;\n\tif(dlg->m_BufferedIOFix) t->flags3 |= BUFFEREDIOFIX;\n\tif(dlg->m_ZBufferClean) t->flags4 |= ZBUFFERCLEAN;\n\tif(dlg->m_ZBuffer0Clean) t->flags4 |= ZBUFFER0CLEAN;\n\tif(dlg->m_DynamicZClean) t->flags8 |= DYNAMICZCLEAN;\n\tif(dlg->m_ZBufferHardClean) t->flags8 |= ZBUFFERHARDCLEAN;\n\tif(dlg->m_ZBufferAlways) t->flags4 |= ZBUFFERALWAYS;\n\tif(dlg->m_HotPatchAlways) t->flags4 |= HOTPATCHALWAYS;\n\tif(dlg->m_FreezeInjectedSon) t->flags5 |= FREEZEINJECTEDSON;\n\tif(dlg->m_StressResources) t->flags5 |= STRESSRESOURCES;\n\tif(dlg->m_NoPower2Fix) t->flags4 |= NOPOWER2FIX;\n\tif(dlg->m_NoPerfCounter) t->flags4 |= NOPERFCOUNTER;\n\tif(dlg->m_DisableFogging) t->flags4 |= DISABLEFOGGING;\n\tif(dlg->m_ClearTarget) t->flags5 |= CLEARTARGET;\n\tif(dlg->m_FixPitch) t->flags6 |= FIXPITCH;\n\tif(dlg->m_Power2Width) t->flags6 |= POWER2WIDTH;\n\tif(dlg->m_SuppressIME) t->flags2 |= SUPPRESSIME;\n\tif(dlg->m_SuppressD3DExt) t->flags3 |= SUPPRESSD3DEXT;\n\tif(dlg->m_Enum16bitModes) t->flags7 |= ENUM16BITMODES;\n\tif(dlg->m_TrimTextureFormats) t->flags8 |= TRIMTEXTUREFORMATS;\n\tif(dlg->m_D3D8Back16) t->flags8 |= D3D8BACK16;\n\tif(dlg->m_SetCompatibility) t->flags2 |= SETCOMPATIBILITY;\n\tif(dlg->m_AEROBoost) t->flags5 |= AEROBOOST;\n\tif(dlg->m_DiabloTweak) t->flags5 |= DIABLOTWEAK;\n\tif(dlg->m_HookDirectSound) t->flags7 |= HOOKDIRECTSOUND;\n\tif(dlg->m_HookWinG32) t->flags8 |= HOOKWING32;\n\tif(dlg->m_HookSmackW32) t->flags7 |= HOOKSMACKW32;\n\tif(dlg->m_FixSmackLoop) t->flags7 |= FIXSMACKLOOP;\n\tif(dlg->m_BlockPriorityClass) t->flags7 |= BLOCKPRIORITYCLASS;\n\tif(dlg->m_EASportsHack) t->flags5 |= EASPORTSHACK;\n\tif(dlg->m_LegacyAlloc) t->flags6 |= LEGACYALLOC;\n\tif(dlg->m_DisableMaxWinMode) t->flags6 |= DISABLEMAXWINMODE;\n\tif(dlg->m_DisableDisableAltTab) t->flags7 |= DISABLEDISABLEALTTAB;\n\tif(dlg->m_NoImagehlp) t->flags5 |= NOIMAGEHLP;\n\tif(dlg->m_ForcesHEL) t->flags3 |= FORCESHEL;\n\tif(dlg->m_NoHALDevice) t->flags8 |= NOHALDEVICE;\n\tif(dlg->m_MinimalCaps) t->flags3 |= MINIMALCAPS;\n\tif(dlg->m_SetZBufferBitDepths) t->flags6 |= SETZBUFFERBITDEPTHS;\n\tif(dlg->m_ForcesSwapEffect) t->flags6 |= FORCESWAPEFFECT;\n\tif(dlg->m_ColorFix) t->flags3 |= COLORFIX;\n\tif(dlg->m_FixGlobalUnlock) t->flags7 |= FIXGLOBALUNLOCK;\n\tif(dlg->m_FixFreeLibrary) t->flags7 |= FIXFREELIBRARY;\n\tif(dlg->m_LoadLibraryErr) t->flags8 |= LOADLIBRARYERR;\n\tif(dlg->m_FixAdjustWinRect) t->flags8 |= FIXADJUSTWINRECT;\n\tif(dlg->m_NoPixelFormat) t->flags3 |= NOPIXELFORMAT;\n\tif(dlg->m_NoAlphaChannel) t->flags4 |= NOALPHACHANNEL;\n\tif(dlg->m_FixRefCounter) t->flags4 |= FIXREFCOUNTER;\n\tif(dlg->m_ReturnNullRef) t->flags4 |= RETURNNULLREF;\n\tif(dlg->m_NoD3DReset) t->flags4 |= NOD3DRESET;\n\tif(dlg->m_HideDesktop) t->flags4 |= HIDEDESKTOP;\n\tif(dlg->m_HideTaskbar) t->flags6 |= HIDETASKBAR;\n\tif(dlg->m_ActivateApp) t->flags6 |= ACTIVATEAPP;\n\tif(dlg->m_UnlockZOrder) t->flags5 |= UNLOCKZORDER;\n\tif(dlg->m_NoDestroyWindow) t->flags6 |= NODESTROYWINDOW;\n\tif(dlg->m_LockSysColors) t->flags3 |= LOCKSYSCOLORS;\n\tif(dlg->m_LockReservedPalette) t->flags5 |= LOCKRESERVEDPALETTE;\n\tif(dlg->m_LimitScreenRes) t->flags4 |= LIMITSCREENRES;\n\tif(dlg->m_SingleProcAffinity) t->flags3 |= SINGLEPROCAFFINITY;\n\tif(dlg->m_UseLastCore) t->flags5 |= USELASTCORE;\n\tif(dlg->m_SlowDown) t->flags |= SLOWDOWN;\n\tif(dlg->m_BlitFromBackBuffer) t->flags |= BLITFROMBACKBUFFER;\n\tif(dlg->m_NoFlipEmulation) t->flags4 |= NOFLIPEMULATION;\n\tif(dlg->m_OffscreenZBuffer) t->flags8 |= OFFSCREENZBUFFER;\n\tif(dlg->m_LockColorDepth) t->flags7 |= LOCKCOLORDEPTH;\n\tif(dlg->m_DisableGammaRamp) t->flags2 |= DISABLEGAMMARAMP;\n\tif(dlg->m_AutoRefresh) t->flags |= AUTOREFRESH;\n\tif(dlg->m_IndependentRefresh) t->flags2 |= INDEPENDENTREFRESH;\n\tif(dlg->m_TextureFormat) t->flags5 |= TEXTUREFORMAT;\n\t//if(dlg->m_FixWinFrame) t->flags |= FIXWINFRAME;\n\tif(dlg->m_VideoToSystemMem) t->flags |= SWITCHVIDEOMEMORY;\n\tif(dlg->m_FixTextOut) t->flags |= FIXTEXTOUT;\n\tif(dlg->m_HookGlide) t->flags4 |= HOOKGLIDE;\n\tif(dlg->m_RemapMCI) t->flags5 |= REMAPMCI;\n\tif(dlg->m_NoMovies) t->flags6 |= NOMOVIES;\n\tif(dlg->m_FixMoviesColor) t->flags6 |= FIXMOVIESCOLOR;\n\tif(dlg->m_StretchMovies) t->flags6 |= STRETCHMOVIES;\n\tif(dlg->m_BypassMCI) t->flags6 |= BYPASSMCI;\n\tif(dlg->m_SuppressRelease) t->flags6 |= SUPPRESSRELEASE;\n\tif(dlg->m_KeepCursorWithin) t->flags |= KEEPCURSORWITHIN;\n\tif(dlg->m_KeepCursorFixed) t->flags2 |= KEEPCURSORFIXED;\n\tif(dlg->m_UseRGB565) t->flags |= USERGB565;\n\tif(dlg->m_SuppressDXErrors) t->flags |= SUPPRESSDXERRORS;\n\tif(dlg->m_FlipEmulation) t->flags6 |= FLIPEMULATION;\n\tif(dlg->m_MarkBlit) t->flags3 |= MARKBLIT;\n\tif(dlg->m_MarkLock) t->flags3 |= MARKLOCK;\n\tif(dlg->m_MarkWinG32) t->flags8 |= MARKWING32;\n\tif(dlg->m_MarkGDI32) t->flags8 |= MARKGDI32;\n\tif(dlg->m_DumpDIBSection) t->flags8 |= DUMPDIBSECTION;\n\tif(dlg->m_DumpDevContext) t->flags8 |= DUMPDEVCONTEXT;\n\tif(dlg->m_NoSysMemPrimary) t->flags6 |= NOSYSMEMPRIMARY;\n\tif(dlg->m_NoSysMemBackBuf) t->flags6 |= NOSYSMEMBACKBUF;\n\tif(dlg->m_NoBlt) t->flags5 |= NOBLT;\n\tif(dlg->m_FastBlt) t->flags5 |= DOFASTBLT;\n\tif(dlg->m_GDIColorConv) t->flags5 |= GDICOLORCONV;\n\tif(dlg->m_PreventMaximize) t->flags |= PREVENTMAXIMIZE;\n\tif(dlg->m_ClientRemapping) t->flags |= CLIENTREMAPPING;\n\tif(dlg->m_LockWinStyle) t->flags |= LOCKWINSTYLE;\n\tif(dlg->m_FixParentWin) t->flags |= FIXPARENTWIN;\n\t//if(dlg->m_ModalStyle) t->flags2 |= MODALSTYLE;\n\tif(dlg->m_KeepAspectRatio) t->flags2 |= KEEPASPECTRATIO;\n\tif(dlg->m_ForceWinResize) t->flags2 |= FORCEWINRESIZE;\n\tif(dlg->m_HideMultiMonitor) t->flags2 |= HIDEMULTIMONITOR;\n\tif(dlg->m_FixD3DFrame) t->flags3 |= FIXD3DFRAME;\n\tif(dlg->m_NoWindowMove) t->flags3 |= NOWINDOWMOVE;\n\tif(dlg->m_HookChildWin) t->flags |= HOOKCHILDWIN;\n\tif(dlg->m_HookDlgWin) t->flags8 |= HOOKDLGWIN;\n\tif(dlg->m_MessageProc) t->flags |= MESSAGEPROC;\n\tif(dlg->m_FixMouseHook) t->flags8 |= FIXMOUSEHOOK;\n\tif(dlg->m_FixNCHITTEST) t->flags2 |= FIXNCHITTEST;\n\tif(dlg->m_RecoverScreenMode) t->flags2 |= RECOVERSCREENMODE;\n\tif(dlg->m_RefreshOnResize) t->flags2 |= REFRESHONRESIZE;\n\tif(dlg->m_BackBufAttach) t->flags2 |= BACKBUFATTACH;\n\tif(dlg->m_ClearTextureFourCC) t->flags7 |= CLEARTEXTUREFOURCC;\n\tif(dlg->m_NoDDExclusiveMode) t->flags7 |= NODDEXCLUSIVEMODE;\n\tif(dlg->m_CreateDesktop) t->flags6 |= CREATEDESKTOP;\n\tif(dlg->m_AllowSysmemOn3DDev) t->flags8 |= ALLOWSYSMEMON3DDEV;\n\tif(dlg->m_HandleAltF4) t->flags |= HANDLEALTF4;\n\tif(dlg->m_LimitFPS) t->flags2 |= LIMITFPS;\n\tif(dlg->m_SkipFPS) t->flags2 |= SKIPFPS;\n\tif(dlg->m_ShowFPS) t->flags2 |= SHOWFPS;\n\tif(dlg->m_ShowFPSOverlay) t->flags2 |= SHOWFPSOVERLAY;\n\tif(dlg->m_ShowTimeStretch) t->flags4 |= SHOWTIMESTRETCH;\n\tif(dlg->m_TimeStretch) t->flags2 |= TIMESTRETCH;\n\tif(dlg->m_StretchTimers) t->flags4 |= STRETCHTIMERS;\n\tif(dlg->m_NormalizePerfCount) t->flags5 |= NORMALIZEPERFCOUNT;\n\tif(dlg->m_CPUSlowDown) t->flags7 |= CPUSLOWDOWN;\n\tif(dlg->m_CPUMaxUsage) t->flags7 |= CPUMAXUSAGE;\n\tif(dlg->m_QuarterBlt) t->flags5 |= QUARTERBLT;\n\tif(dlg->m_FineTiming) t->flags4 |= FINETIMING;\n\tif(dlg->m_ReleaseMouse) t->flags4 |= RELEASEMOUSE;\n\tif(dlg->m_EnableTimeFreeze) t->flags4 |= ENABLETIMEFREEZE;\n\tif(dlg->m_EnableHotKeys) t->flags4 |= ENABLEHOTKEYS;\n\tif(dlg->m_InterceptRDTSC) t->flags4 |= INTERCEPTRDTSC;\n\tif(dlg->m_HookOpenGL) t->flags2 |= HOOKOPENGL;\n\tif(dlg->m_ForceHookOpenGL) t->flags3 |= FORCEHOOKOPENGL;\n\tif(dlg->m_FixPixelZoom) t->flags6 |= FIXPIXELZOOM;\n\tif(dlg->m_FixBindTexture) t->flags7 |= FIXBINDTEXTURE;\n\tif(dlg->m_HookGlut32) t->flags7 |= HOOKGLUT32;\n\tif(dlg->m_WireFrame) t->flags2 |= WIREFRAME;\n\tif(dlg->m_NoTextures) t->flags4 |= NOTEXTURES;\n\tif(dlg->m_BlackWhite) t->flags3 |= BLACKWHITE;\n\tif(dlg->m_FakeVersion) t->flags2 |= FAKEVERSION;\n\tif(dlg->m_FullRectBlt) t->flags2 |= FULLRECTBLT;\n\tif(dlg->m_CenterToWin) t->flags5 |= CENTERTOWIN;\n\tif(dlg->m_Deinterlace) t->flags5 |= DEINTERLACE;\n\tif(dlg->m_LimitDdraw) t->flags7 |= LIMITDDRAW;\n\tif(dlg->m_SuppressOverlay) t->flags7 |= SUPPRESSOVERLAY;\n\tif(dlg->m_NoPaletteUpdate) t->flags2 |= NOPALETTEUPDATE;\n\tif(dlg->m_SurfaceWarn) t->flags3 |= SURFACEWARN;\n\tif(dlg->m_CapMask) t->flags3 |= CAPMASK;\n\tif(dlg->m_NoWindowHooks) t->flags6 |= NOWINDOWHOOKS;\n\tif(dlg->m_NoDDRAWBlt) t->flags3 |= NODDRAWBLT;\n\tif(dlg->m_NoDDRAWFlip) t->flags3 |= NODDRAWFLIP;\n\tif(dlg->m_NoGDIBlt) t->flags3 |= NOGDIBLT;\n\tif(dlg->m_NoFillRect) t->flags4 |= NOFILLRECT;\n\tif(dlg->m_FixClipperArea) t->flags7 |= FIXCLIPPERAREA;\n\tif(dlg->m_SharedDCHybrid) t->flags8 |= SHAREDDCHYBRID;\n\tif(dlg->m_SyncPalette) t->flags6 |= SYNCPALETTE;\n\tif(dlg->m_NoWinErrors) t->flags7 |= NOWINERRORS;\n\tif(dlg->m_PretendVisible) t->flags8 |= PRETENDVISIBLE;\n\tif(dlg->m_WinInsulation) t->flags8 |= WININSULATION;\n\tif(dlg->m_QualityFonts) t->flags8 |= QUALITYFONTS;\n\tif(dlg->m_AnalyticMode) t->flags3 |= ANALYTICMODE;\n\tif(dlg->m_ReplacePrivOps) t->flags5 |= REPLACEPRIVOPS;\n\tif(dlg->m_InitialRes) t->flags7 |= INITIALRES;\n\tif(dlg->m_MaximumRes) t->flags7 |= MAXIMUMRES;\n\tt->posx = dlg->m_PosX;\n\tt->posy = dlg->m_PosY;\n\tt->sizx = dlg->m_SizX;\n\tt->sizy = dlg->m_SizY;\n\tt->ScanLine = dlg->m_ScanLine;\n\tt->MaxFPS = dlg->m_MaxFPS;\n\tt->InitTS = dlg->m_InitTS-8;\n\tt->FakeVersionId = dlg->m_FakeVersionId;\n\tt->MaxScreenRes = dlg->m_MaxScreenRes;\n\tt->SwapEffect = dlg->m_SwapEffect;\n\tt->resw = dlg->m_InitResW;\n\tt->resh = dlg->m_InitResH;\n\tstrcpy_s(t->module, sizeof(t->module), dlg->m_Module);\n\tstrcpy_s(t->OpenGLLib, sizeof(t->OpenGLLib), dlg->m_OpenGLLib);\n}\n\nstatic void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)\n{\n\tdlg->m_DXVersion = t->dxversion;\n\tdlg->m_MonitorId = t->monitorid + 1;\n\tdlg->m_MaxDdrawInterface = t->MaxDdrawInterface-1;\n\tdlg->m_SlowRatio = t->SlowRatio;\n\tif(dlg->m_DXVersion > 6) dlg->m_DXVersion -= 5;\n\tdlg->m_Coordinates = t->coordinates;\n\tdlg->m_FilePath = t->path;\n\tdlg->m_Module = t->module;\n\tdlg->m_OpenGLLib = t->OpenGLLib;\n\tdlg->m_UnNotify = t->flags & UNNOTIFY ? 1 : 0;\n\tdlg->m_Windowize = t->flags2 & WINDOWIZE ? 1 : 0;\n\tdlg->m_HotPatch = t->flags4 & HOTPATCH ? 1 : 0;\n\tdlg->m_HookDLLs = t->flags3 & HOOKDLLS ? 1 : 0;\n\tdlg->m_AnsiWide = t->flags5 & ANSIWIDE ? 1 : 0;\n\tdlg->m_HookNoRun = t->flags7 & HOOKNORUN ? 1 : 0;\n\tdlg->m_CopyNoShims = t->flags7 & COPYNOSHIMS ? 1 : 0;\n\tdlg->m_HookNoUpdate = t->flags7 & HOOKNOUPDATE ? 1 : 0;\n\tdlg->m_SequencedIAT = t->flags8 & SEQUENCEDIAT ? 1 : 0;\n\tdlg->m_TerminateOnClose = t->flags6 & TERMINATEONCLOSE ? 1 : 0;\n\tdlg->m_ConfirmOnClose = t->flags6 & CONFIRMONCLOSE ? 1 : 0;\n\tdlg->m_EmulateRegistry = t->flags3 & EMULATEREGISTRY ? 1 : 0;\n\tdlg->m_OverrideRegistry = t->flags4 & OVERRIDEREGISTRY ? 1 : 0;\n\tdlg->m_Wow64Registry = t->flags6 & WOW64REGISTRY ? 1 : 0;\n\tdlg->m_Wow32Registry = t->flags6 & WOW32REGISTRY ? 1 : 0;\n\tdlg->m_HookEnabled = t->flags3 & HOOKENABLED ? 1 : 0;\n\tdlg->m_NeedAdminCaps = t->flags & NEEDADMINCAPS ? 1 : 0;\n\tdlg->m_NoBanner = t->flags2 & NOBANNER ? 1 : 0;\n\tdlg->m_FullScreenOnly = t->flags3 & FULLSCREENONLY ? 1 : 0;\n\tdlg->m_ShowHints = t->flags7 & SHOWHINTS ? 1 : 0;\n\tdlg->m_BackgroundPriority = t->flags8 & BACKGROUNDPRIORITY ? 1 : 0;\n\tdlg->m_PeekAllMessages = t->flags3 & PEEKALLMESSAGES ? 1 : 0;\n\tdlg->m_NoWinPosChanges = t->flags5 & NOWINPOSCHANGES ? 1 : 0;\n\tdlg->m_MessagePump = t->flags5 & MESSAGEPUMP ? 1 : 0;\n\tdlg->m_ClipMenu = t->flags8 & CLIPMENU ? 1 : 0;\n\n\tdlg->m_InjectionMode = 0;\n\tif(t->flags2 & STARTDEBUG) dlg->m_InjectionMode = 1;\n\tif(t->flags7 & INJECTSUSPENDED) dlg->m_InjectionMode = 2;\n\n\tdlg->m_DxEmulationMode = 0; // none\n\tif(t->flags & EMULATEBUFFER) dlg->m_DxEmulationMode = 1;\n\tif(t->flags & LOCKEDSURFACE) dlg->m_DxEmulationMode = 2;\n\tif(t->flags & EMULATESURFACE) dlg->m_DxEmulationMode = 3;\n\tif(t->flags5 & HYBRIDMODE) dlg->m_DxEmulationMode = 4;\n\tif(t->flags5 & GDIMODE) dlg->m_DxEmulationMode = 5;\n\n\tdlg->m_DxFilterMode = 0;\n\tif(t->flags4 & BILINEAR2XFILTER) dlg->m_DxFilterMode = 1;\n\tif(t->flags5 & BILINEARFILTER) dlg->m_DxFilterMode = 2;\n\n\tdlg->m_DCEmulationMode = 0;\n\tif(t->flags2 & GDISTRETCHED) dlg->m_DCEmulationMode = 1;\n\tif(t->flags3 & GDIEMULATEDC) dlg->m_DCEmulationMode = 2;\n\tif(t->flags6 & SHAREDDC    ) dlg->m_DCEmulationMode = 3;\n\n\tdlg->m_ResTypes = 0;\n\tif(t->flags4 & SUPPORTSVGA) dlg->m_ResTypes = 0;\n\tif(t->flags4 & SUPPORTHDTV) dlg->m_ResTypes = 1;\n\tif(t->flags4 & NATIVERES) dlg->m_ResTypes = 2;\n\n\tdlg->m_MouseVisibility = 0;\n\tif(t->flags & HIDEHWCURSOR) dlg->m_MouseVisibility = 1;\n\tif(t->flags2 & SHOWHWCURSOR) dlg->m_MouseVisibility = 2;\n\n\tdlg->m_MouseClipper = 0;\n\tif(t->flags & DISABLECLIPPING) dlg->m_MouseClipper = 1;\n\tif(t->flags & CLIPCURSOR) dlg->m_MouseClipper = 2;\n\tif(t->flags8 & CLIPLOCKED) dlg->m_MouseClipper = 3;\n\n\tdlg->m_OffendingMessages = 0;\n\tif(t->flags3 & FILTERMESSAGES) dlg->m_OffendingMessages = 1;\n\tif(t->flags3 & DEFAULTMESSAGES) dlg->m_OffendingMessages = 2;\n\n\tdlg->m_TextureHandling = 0;\n\tif(t->flags5 & TEXTUREHIGHLIGHT) dlg->m_TextureHandling = 1;\n\tif(t->flags5 & TEXTUREDUMP) dlg->m_TextureHandling = 2;\n\tif(t->flags5 & TEXTUREHACK) dlg->m_TextureHandling = 3;\n\tif(t->flags5 & TEXTURETRANSP) dlg->m_TextureHandling = 4;\n\n\tdlg->m_SonProcessMode = 0;\n\tif(t->flags4 & SUPPRESSCHILD) dlg->m_SonProcessMode = 1;\n\tif(t->flags5 & ENABLESONHOOK) dlg->m_SonProcessMode = 2;\n\tif(t->flags5 & INJECTSON) dlg->m_SonProcessMode = 3;\n\n\tdlg->m_InitColorDepth = 0;\n\tif(t->flags2 & INIT8BPP)  dlg->m_InitColorDepth = 1;\n\tif(t->flags2 & INIT16BPP) dlg->m_InitColorDepth = 2;\n\tif(t->flags7 & INIT24BPP) dlg->m_InitColorDepth = 3;\n\tif(t->flags7 & INIT32BPP) dlg->m_InitColorDepth = 4;\n\n\tdlg->m_LogMode = 0;\n\tif(t->tflags & OUTTRACE)\t\tdlg->m_LogMode = 2; // must be first one ....\n\tif(t->tflags & ERASELOGFILE)\tdlg->m_LogMode = 1; \n\tif(t->tflags & OUTSEPARATED)\tdlg->m_LogMode = 3;\n\n\tdlg->m_WinMovementType = 0;\n\tif(t->flags & LOCKWINPOS)\t\tdlg->m_WinMovementType = 1;\n\tif(t->flags2 & LOCKEDSIZE)\t\tdlg->m_WinMovementType = 2;\n\tif(t->flags7 & ANCHORED)\t\tdlg->m_WinMovementType = 3;\n\n\tdlg->m_VSyncMode = 0;\n\tif(t->flags8 & FORCEVSYNC) dlg->m_VSyncMode = 1;\n\tif(t->flags8 & FORCENOVSYNC) dlg->m_VSyncMode = 2;\n\n\tdlg->m_VSyncImpl = 0;\n\tif(t->flags8 & VSYNCSCANLINE) dlg->m_VSyncImpl = 1;\n\tif(t->flags & SAVELOAD) dlg->m_VSyncImpl = 2;\n\n\tdlg->m_WaitMode = 0;\n\tif(t->flags8 & FORCEWAIT) dlg->m_WaitMode = 1;\n\tif(t->flags8 & FORCENOWAIT) dlg->m_WaitMode = 2;\n\n\tdlg->m_ClipperMode = 0;\n\tif (t->flags3 & FORCECLIPPER) dlg->m_ClipperMode = 1;\n\tif (t->flags & SUPPRESSCLIPPING) dlg->m_ClipperMode = 2;\n\n\tdlg->m_TextureFileFormat = 0;\n\tif( t->flags8 & RAWFORMAT) dlg->m_TextureFileFormat = 1;\n\tif( t->flags8 & DDSFORMAT) dlg->m_TextureFileFormat = 2;\n\n\tdlg->m_WindowStyle = 0;\n\tif(t->flags2 & MODALSTYLE) dlg->m_WindowStyle = 1;\n\tif(t->flags & FIXWINFRAME) dlg->m_WindowStyle = 2;\n\tif(t->flags9 & FIXTHINFRAME) dlg->m_WindowStyle = 3;\n\n\tdlg->m_HookDI = t->flags & HOOKDI ? 1 : 0;\n\tdlg->m_HookDI8 = t->flags & HOOKDI8 ? 1 : 0;\n\tdlg->m_EmulateRelMouse = t->flags6 & EMULATERELMOUSE ? 1 : 0;\n\tdlg->m_SkipDevTypeHID = t->flags7 & SKIPDEVTYPEHID ? 1 : 0;\n\tdlg->m_SuppressDIErrors = t->flags7 & SUPPRESSDIERRORS ? 1 : 0;\n\tdlg->m_SharedKeyboard = t->flags7 & SHAREDKEYBOARD ? 1 : 0;\n\tdlg->m_ModifyMouse = t->flags & MODIFYMOUSE ? 1 : 0;\n\tdlg->m_VirtualJoystick = t->flags6 & VIRTUALJOYSTICK ? 1 : 0;\n\tdlg->m_Unacquire = t->flags6 & UNACQUIRE ? 1 : 0;\n\tdlg->m_OutDebug = t->tflags & OUTDEBUG ? 1 : 0;\n\tdlg->m_CursorTrace = t->tflags & OUTCURSORTRACE ? 1 : 0;\n\tdlg->m_OutDebugString = t->tflags & OUTDEBUGSTRING ? 1 : 0;\n\tdlg->m_AddTimeStamp = t->tflags & ADDTIMESTAMP ? 1 : 0;\n\tdlg->m_AddRelativeTime = t->tflags & ADDRELATIVETIME ? 1 : 0;\n\tdlg->m_OutWinMessages = t->tflags & OUTWINMESSAGES ? 1 : 0;\n\tdlg->m_OutDWTrace = t->tflags & OUTDXWINTRACE ? 1 : 0;\n\tdlg->m_OutOGLTrace = t->tflags & OUTOGLTRACE ? 1 : 0;\n\tdlg->m_OutHexTrace = t->tflags & OUTHEXTRACE ? 1 : 0;\n\tdlg->m_OutWGTrace = t->tflags & OUTWINGTRACE ? 1 : 0;\n\tdlg->m_OutD3DTrace = t->tflags & OUTD3DTRACE ? 1 : 0;\n\tdlg->m_OutDDRAWTrace = t->tflags & OUTDDRAWTRACE ? 1 : 0;\n\tdlg->m_AssertDialog = t->tflags & ASSERTDIALOG ? 1 : 0;\n\tdlg->m_ImportTable = t->tflags & OUTIMPORTTABLE ? 1 : 0;\n\tdlg->m_RegistryOp = t->tflags & OUTREGISTRY ? 1 : 0;\n\tdlg->m_TraceHooks = t->tflags & TRACEHOOKS ? 1 : 0;\n\tdlg->m_HandleExceptions = t->flags & HANDLEEXCEPTIONS ? 1 : 0;\n\tdlg->m_VirtualHeap = t->flags8 & VIRTUALHEAP ? 1 : 0;\n\tdlg->m_SuppressIME = t->flags2 & SUPPRESSIME ? 1 : 0;\n\tdlg->m_SuppressD3DExt = t->flags3 & SUPPRESSD3DEXT ? 1 : 0;\n\tdlg->m_Enum16bitModes = t->flags7 & ENUM16BITMODES ? 1 : 0;\n\tdlg->m_TrimTextureFormats = t->flags8 & TRIMTEXTUREFORMATS ? 1 : 0;\n\tdlg->m_D3D8Back16 = t->flags8 & D3D8BACK16 ? 1 : 0;\n\tdlg->m_SetCompatibility = t->flags2 & SETCOMPATIBILITY ? 1 : 0;\n\tdlg->m_AEROBoost = t->flags5 & AEROBOOST ? 1 : 0;\n\tdlg->m_DiabloTweak = t->flags5 & DIABLOTWEAK ? 1 : 0;\n\tdlg->m_HookDirectSound = t->flags7 & HOOKDIRECTSOUND ? 1 : 0;\n\tdlg->m_HookWinG32 = t->flags8 & HOOKWING32 ? 1 : 0;\n\tdlg->m_HookSmackW32 = t->flags7 & HOOKSMACKW32 ? 1 : 0;\n\tdlg->m_FixSmackLoop = t->flags7 & FIXSMACKLOOP ? 1 : 0;\n\tdlg->m_BlockPriorityClass = t->flags7 & BLOCKPRIORITYCLASS ? 1 : 0;\n\tdlg->m_EASportsHack = t->flags5 & EASPORTSHACK ? 1 : 0;\n\tdlg->m_LegacyAlloc = t->flags6 & LEGACYALLOC ? 1 : 0;\n\tdlg->m_DisableMaxWinMode = t->flags6 & DISABLEMAXWINMODE ? 1 : 0;\n\tdlg->m_DisableDisableAltTab = t->flags7 & DISABLEDISABLEALTTAB ? 1 : 0;\n\tdlg->m_NoImagehlp = t->flags5 & NOIMAGEHLP ? 1 : 0;\n\tdlg->m_ForcesHEL = t->flags3 & FORCESHEL ? 1 : 0;\n\tdlg->m_NoHALDevice = t->flags8 & NOHALDEVICE ? 1 : 0;\n\tdlg->m_MinimalCaps = t->flags3 & MINIMALCAPS ? 1 : 0;\n\tdlg->m_SetZBufferBitDepths = t->flags6 & SETZBUFFERBITDEPTHS ? 1 : 0;\n\tdlg->m_ForcesSwapEffect = t->flags6 & FORCESWAPEFFECT ? 1 : 0;\n\tdlg->m_ColorFix = t->flags3 & COLORFIX ? 1 : 0;\n\tdlg->m_FixGlobalUnlock = t->flags7 & FIXGLOBALUNLOCK ? 1 : 0;\n\tdlg->m_FixFreeLibrary = t->flags7 & FIXFREELIBRARY ? 1 : 0;\n\tdlg->m_LoadLibraryErr = t->flags8 & LOADLIBRARYERR ? 1 : 0;\n\tdlg->m_FixAdjustWinRect = t->flags8 & FIXADJUSTWINRECT ? 1 : 0;\n\tdlg->m_NoPixelFormat = t->flags3 & NOPIXELFORMAT ? 1 : 0;\n\tdlg->m_NoAlphaChannel = t->flags4 & NOALPHACHANNEL ? 1 : 0;\n\tdlg->m_FixRefCounter = t->flags4 & FIXREFCOUNTER ? 1 : 0;\n\tdlg->m_ReturnNullRef = t->flags4 & RETURNNULLREF ? 1 : 0;\n\tdlg->m_NoD3DReset = t->flags4 & NOD3DRESET ? 1 : 0;\n\tdlg->m_HideDesktop = t->flags4 & HIDEDESKTOP ? 1 : 0;\n\tdlg->m_HideTaskbar = t->flags6 & HIDETASKBAR ? 1 : 0;\n\tdlg->m_ActivateApp = t->flags6 & ACTIVATEAPP ? 1 : 0;\n\tdlg->m_UnlockZOrder = t->flags5 & UNLOCKZORDER ? 1 : 0;\n\tdlg->m_NoDestroyWindow = t->flags6 & NODESTROYWINDOW ? 1 : 0;\n\tdlg->m_LockSysColors = t->flags3 & LOCKSYSCOLORS ? 1 : 0;\n\tdlg->m_LockReservedPalette = t->flags5 & LOCKRESERVEDPALETTE ? 1 : 0;\n\tdlg->m_LimitScreenRes = t->flags4 & LIMITSCREENRES ? 1 : 0;\n\tdlg->m_SingleProcAffinity = t->flags3 & SINGLEPROCAFFINITY ? 1 : 0;\n\tdlg->m_UseLastCore = t->flags5 & USELASTCORE ? 1 : 0;\n\tdlg->m_LimitResources = t->flags2 & LIMITRESOURCES ? 1 : 0;\n\tdlg->m_CDROMDriveType = t->flags3 & CDROMDRIVETYPE ? 1 : 0;\n\tdlg->m_HideCDROMEmpty = t->flags4 & HIDECDROMEMPTY ? 1 : 0;\n\tdlg->m_HookGOGLibs = t->flags6 & HOOKGOGLIBS ? 1 : 0;\n\tdlg->m_BypassGOGLibs = t->flags6 & BYPASSGOGLIBS ? 1 : 0;\n\tdlg->m_FontBypass = t->flags3 & FONTBYPASS ? 1 : 0;\n\tdlg->m_BufferedIOFix = t->flags3 & BUFFEREDIOFIX ? 1 : 0;\n\tdlg->m_ZBufferClean = t->flags4 & ZBUFFERCLEAN ? 1 : 0;\n\tdlg->m_ZBuffer0Clean = t->flags4 & ZBUFFER0CLEAN ? 1 : 0;\n\tdlg->m_DynamicZClean = t->flags8 & DYNAMICZCLEAN ? 1 : 0;\n\tdlg->m_ZBufferHardClean = t->flags8 & ZBUFFERHARDCLEAN ? 1 : 0;\n\tdlg->m_ZBufferAlways = t->flags4 & ZBUFFERALWAYS ? 1 : 0;\n\tdlg->m_HotPatchAlways = t->flags4 & HOTPATCHALWAYS ? 1 : 0;\n\tdlg->m_FreezeInjectedSon = t->flags5 & FREEZEINJECTEDSON ? 1 : 0;\n\tdlg->m_StressResources = t->flags5 & STRESSRESOURCES ? 1 : 0;\n\tdlg->m_NoPower2Fix = t->flags4 & NOPOWER2FIX ? 1 : 0;\n\tdlg->m_NoPerfCounter = t->flags4 & NOPERFCOUNTER ? 1 : 0;\n\tdlg->m_DisableFogging = t->flags4 & DISABLEFOGGING ? 1 : 0;\n\tdlg->m_ClearTarget = t->flags5 & CLEARTARGET ? 1 : 0;\n\tdlg->m_FixPitch = t->flags6 & FIXPITCH ? 1 : 0;\n\tdlg->m_Power2Width = t->flags6 & POWER2WIDTH ? 1 : 0;\n\tdlg->m_SlowDown = t->flags & SLOWDOWN ? 1 : 0;\n\tdlg->m_BlitFromBackBuffer = t->flags & BLITFROMBACKBUFFER ? 1 : 0;\n\tdlg->m_NoFlipEmulation = t->flags4 & NOFLIPEMULATION ? 1 : 0;\n\tdlg->m_OffscreenZBuffer = t->flags8 & OFFSCREENZBUFFER ? 1 : 0;\n\tdlg->m_LockColorDepth = t->flags7 & LOCKCOLORDEPTH ? 1 : 0;\n\tdlg->m_DisableGammaRamp = t->flags2 & DISABLEGAMMARAMP ? 1 : 0;\n\tdlg->m_AutoRefresh = t->flags & AUTOREFRESH ? 1 : 0;\n\tdlg->m_IndependentRefresh = t->flags2 & INDEPENDENTREFRESH ? 1 : 0;\n\tdlg->m_TextureFormat = t->flags5 & TEXTUREFORMAT ? 1 : 0;\n\t//dlg->m_FixWinFrame = t->flags & FIXWINFRAME ? 1 : 0;\n\tdlg->m_VideoToSystemMem = t->flags & SWITCHVIDEOMEMORY ? 1 : 0;\n\tdlg->m_FixTextOut = t->flags & FIXTEXTOUT ? 1 : 0;\n\tdlg->m_SharedDC = t->flags6 & SHAREDDC ? 1 : 0;\n\tdlg->m_HookGlide = t->flags4 & HOOKGLIDE ? 1 : 0;\n\tdlg->m_RemapMCI = t->flags5 & REMAPMCI ? 1 : 0;\n\tdlg->m_NoMovies = t->flags6 & NOMOVIES ? 1 : 0;\n\tdlg->m_FixMoviesColor = t->flags6 & FIXMOVIESCOLOR ? 1 : 0;\n\tdlg->m_StretchMovies = t->flags6 & STRETCHMOVIES ? 1 : 0;\n\tdlg->m_BypassMCI = t->flags6 & BYPASSMCI ? 1 : 0;\n\tdlg->m_SuppressRelease = t->flags6 & SUPPRESSRELEASE ? 1 : 0;\n\tdlg->m_KeepCursorWithin = t->flags & KEEPCURSORWITHIN ? 1 : 0;\n\tdlg->m_KeepCursorFixed = t->flags2 & KEEPCURSORFIXED ? 1 : 0;\n\tdlg->m_UseRGB565 = t->flags & USERGB565 ? 1 : 0;\n\tdlg->m_SuppressDXErrors = t->flags & SUPPRESSDXERRORS ? 1 : 0;\n\tdlg->m_FlipEmulation = t->flags6 & FLIPEMULATION ? 1 : 0;\n\tdlg->m_MarkBlit = t->flags3 & MARKBLIT ? 1 : 0;\n\tdlg->m_MarkLock = t->flags3 & MARKLOCK ? 1 : 0;\n\tdlg->m_MarkWinG32 = t->flags8 & MARKWING32 ? 1 : 0;\n\tdlg->m_MarkGDI32 = t->flags8 & MARKGDI32 ? 1 : 0;\n\tdlg->m_DumpDIBSection = t->flags8 & DUMPDIBSECTION ? 1 : 0;\n\tdlg->m_DumpDevContext = t->flags8 & DUMPDEVCONTEXT ? 1 : 0;\n\tdlg->m_NoSysMemPrimary = t->flags6 & NOSYSMEMPRIMARY ? 1 : 0;\n\tdlg->m_NoSysMemBackBuf = t->flags6 & NOSYSMEMBACKBUF ? 1 : 0;\n\tdlg->m_NoBlt = t->flags5 & NOBLT ? 1 : 0;\n\tdlg->m_FastBlt = t->flags5 & DOFASTBLT ? 1 : 0;\n\tdlg->m_GDIColorConv = t->flags5 & GDICOLORCONV ? 1 : 0;\n\tdlg->m_PreventMaximize = t->flags & PREVENTMAXIMIZE ? 1 : 0;\n\tdlg->m_ClientRemapping = t->flags & CLIENTREMAPPING ? 1 : 0;\n\tdlg->m_LockWinStyle = t->flags & LOCKWINSTYLE ? 1 : 0;\n\tdlg->m_FixParentWin = t->flags & FIXPARENTWIN ? 1 : 0;\n\t//dlg->m_ModalStyle = t->flags2 & MODALSTYLE ? 1 : 0;\n\tdlg->m_KeepAspectRatio = t->flags2 & KEEPASPECTRATIO ? 1 : 0;\n\tdlg->m_ForceWinResize = t->flags2 & FORCEWINRESIZE ? 1 : 0;\n\tdlg->m_HideMultiMonitor = t->flags2 & HIDEMULTIMONITOR ? 1 : 0;\n\tdlg->m_FixD3DFrame = t->flags3 & FIXD3DFRAME ? 1 : 0;\n\tdlg->m_NoWindowMove = t->flags3 & NOWINDOWMOVE ? 1 : 0;\n\tdlg->m_HookChildWin = t->flags & HOOKCHILDWIN ? 1 : 0;\n\tdlg->m_HookDlgWin = t->flags8 & HOOKDLGWIN ? 1 : 0;\n\tdlg->m_MessageProc = t->flags & MESSAGEPROC ? 1 : 0;\n\tdlg->m_FixMouseHook = t->flags8 & FIXMOUSEHOOK ? 1 : 0;\n\tdlg->m_FixNCHITTEST = t->flags2 & FIXNCHITTEST ? 1 : 0;\n\tdlg->m_RecoverScreenMode = t->flags2 & RECOVERSCREENMODE ? 1 : 0;\n\tdlg->m_RefreshOnResize = t->flags2 & REFRESHONRESIZE ? 1 : 0;\n\tdlg->m_BackBufAttach = t->flags2 & BACKBUFATTACH ? 1 : 0;\n\tdlg->m_ClearTextureFourCC = t->flags7 & CLEARTEXTUREFOURCC ? 1 : 0;\n\tdlg->m_NoDDExclusiveMode = t->flags7 & NODDEXCLUSIVEMODE ? 1 : 0;\n\tdlg->m_CreateDesktop = t->flags6 & CREATEDESKTOP ? 1 : 0;\n\tdlg->m_AllowSysmemOn3DDev = t->flags8 & ALLOWSYSMEMON3DDEV ? 1 : 0;\n\tdlg->m_HandleAltF4 = t->flags & HANDLEALTF4 ? 1 : 0;\n\tdlg->m_LimitFPS = t->flags2 & LIMITFPS ? 1 : 0;\n\tdlg->m_SkipFPS = t->flags2 & SKIPFPS ? 1 : 0;\n\tdlg->m_ShowFPS = t->flags2 & SHOWFPS ? 1 : 0;\n\tdlg->m_ShowFPSOverlay = t->flags2 & SHOWFPSOVERLAY ? 1 : 0;\n\tdlg->m_ShowTimeStretch = t->flags4 & SHOWTIMESTRETCH ? 1 : 0;\n\tdlg->m_TimeStretch = t->flags2 & TIMESTRETCH ? 1 : 0;\n\tdlg->m_StretchTimers = t->flags4 & STRETCHTIMERS ? 1 : 0;\n\tdlg->m_NormalizePerfCount = t->flags5 & NORMALIZEPERFCOUNT ? 1 : 0;\n\tdlg->m_CPUSlowDown = t->flags7 & CPUSLOWDOWN ? 1 : 0;\n\tdlg->m_CPUMaxUsage = t->flags7 & CPUMAXUSAGE ? 1 : 0;\n\tdlg->m_QuarterBlt = t->flags5 & QUARTERBLT ? 1 : 0;\n\tdlg->m_FineTiming = t->flags4 & FINETIMING ? 1 : 0;\n\tdlg->m_ReleaseMouse = t->flags4 & RELEASEMOUSE ? 1 : 0;\n\tdlg->m_EnableTimeFreeze = t->flags4 & ENABLETIMEFREEZE ? 1 : 0;\n\tdlg->m_EnableHotKeys = t->flags4 & ENABLEHOTKEYS ? 1 : 0;\n\tdlg->m_InterceptRDTSC = t->flags4 & INTERCEPTRDTSC ? 1 : 0;\n\tdlg->m_HookOpenGL = t->flags2 & HOOKOPENGL ? 1 : 0;\n\tdlg->m_ForceHookOpenGL = t->flags3 & FORCEHOOKOPENGL ? 1 : 0;\n\tdlg->m_FixPixelZoom = t->flags6 & FIXPIXELZOOM ? 1 : 0;\n\tdlg->m_FixBindTexture = t->flags7 & FIXBINDTEXTURE ? 1 : 0;\n\tdlg->m_HookGlut32 = t->flags7 & HOOKGLUT32 ? 1 : 0;\n\tdlg->m_WireFrame = t->flags2 & WIREFRAME ? 1 : 0;\n\tdlg->m_NoTextures = t->flags4 & NOTEXTURES ? 1 : 0;\n\tdlg->m_BlackWhite = t->flags3 & BLACKWHITE ? 1 : 0;\n\tdlg->m_FakeVersion = t->flags2 & FAKEVERSION ? 1 : 0;\n\tdlg->m_FullRectBlt = t->flags2 & FULLRECTBLT ? 1 : 0;\n\tdlg->m_CenterToWin = t->flags5 & CENTERTOWIN ? 1 : 0;\n\tdlg->m_Deinterlace = t->flags5 & DEINTERLACE ? 1 : 0;\n\tdlg->m_LimitDdraw = t->flags7 & LIMITDDRAW ? 1 : 0;\n\tdlg->m_SuppressOverlay = t->flags7 & SUPPRESSOVERLAY ? 1 : 0;\n\tdlg->m_NoPaletteUpdate = t->flags2 & NOPALETTEUPDATE ? 1 : 0;\n\tdlg->m_SurfaceWarn = t->flags3 & SURFACEWARN ? 1 : 0;\n\tdlg->m_CapMask = t->flags3 & CAPMASK ? 1 : 0;\n\tdlg->m_NoWindowHooks = t->flags6 & NOWINDOWHOOKS ? 1 : 0;\n\tdlg->m_NoDDRAWBlt = t->flags3 & NODDRAWBLT ? 1 : 0;\n\tdlg->m_NoDDRAWFlip = t->flags3 & NODDRAWFLIP ? 1 : 0;\n\tdlg->m_NoGDIBlt = t->flags3 & NOGDIBLT ? 1 : 0;\n\tdlg->m_NoFillRect = t->flags4 & NOFILLRECT ? 1 : 0;\n\tdlg->m_FixClipperArea = t->flags7 & FIXCLIPPERAREA ? 1 : 0;\n\tdlg->m_SharedDCHybrid = t->flags8 & SHAREDDCHYBRID ? 1 : 0;\n\tdlg->m_SyncPalette = t->flags6 & SYNCPALETTE ? 1 : 0;\n\tdlg->m_NoWinErrors = t->flags7 & NOWINERRORS ? 1 : 0;\n\tdlg->m_PretendVisible = t->flags8 & PRETENDVISIBLE ? 1 : 0;\n\tdlg->m_WinInsulation = t->flags8 & WININSULATION ? 1 : 0;\n\tdlg->m_QualityFonts = t->flags8 & QUALITYFONTS ? 1 : 0;\n\tdlg->m_AnalyticMode = t->flags3 & ANALYTICMODE ? 1 : 0;\n\tdlg->m_ReplacePrivOps = t->flags5 & REPLACEPRIVOPS ? 1 : 0;\n\tdlg->m_InitialRes = t->flags7 & INITIALRES ? 1 : 0;\n\tdlg->m_MaximumRes = t->flags7 & MAXIMUMRES ? 1 : 0;\n\tdlg->m_PosX = t->posx;\n\tdlg->m_PosY = t->posy;\n\tdlg->m_SizX = t->sizx;\n\tdlg->m_SizY = t->sizy;\n\tdlg->m_ScanLine = t->ScanLine;\n\tdlg->m_MaxFPS = t->MaxFPS;\n\tdlg->m_InitTS = t->InitTS+8;\n\tdlg->m_FakeVersionId = t->FakeVersionId;\n\tdlg->m_MaxScreenRes = t->MaxScreenRes;\n\tdlg->m_InitResW = t->resw;\n\tdlg->m_InitResH = t->resh;\n\tdlg->m_SwapEffect = t->SwapEffect;\n}\n\nstatic void SaveConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, char *InitPath)\n{\n\tchar key[32], val[32];\n\tchar *EscBuf = NULL;\n\tsprintf_s(key, sizeof(key), \"title%i\", i);\n\tWritePrivateProfileString(\"target\", key, PrivateMap->title, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"path%i\", i);\n\tWritePrivateProfileString(\"target\", key, TargetMap->path, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"startfolder%i\", i);\n\tWritePrivateProfileString(\"target\", key, PrivateMap->startfolder, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"launchpath%i\", i);\n\tWritePrivateProfileString(\"target\", key, PrivateMap->launchpath, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"module%i\", i);\n\tWritePrivateProfileString(\"target\", key, TargetMap->module, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"opengllib%i\", i);\n\tWritePrivateProfileString(\"target\", key, TargetMap->OpenGLLib, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"notes%i\", i);\n\tWritePrivateProfileString(\"target\", key, Escape(PrivateMap->notes, &EscBuf), InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"registry%i\", i);\n\tWritePrivateProfileString(\"target\", key, Escape(PrivateMap->registry, &EscBuf), InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"ver%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->dxversion);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"monitorid%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->monitorid);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"coord%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->coordinates);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flag%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->flags);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flagg%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->flags2);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flagh%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->flags3);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flagi%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->flags4);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flagj%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->flags5);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flagk%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->flags6);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flagl%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->flags7);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flagm%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->flags8);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flagn%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->flags9);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flago%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->flags10);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"tflag%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->tflags);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"dflag%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->dflags);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"posx%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->posx);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"posy%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->posy);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"sizx%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->sizx);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"sizy%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->sizy);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"maxfps%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->MaxFPS);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"initts%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->InitTS);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"winver%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->FakeVersionId);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"maxres%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->MaxScreenRes);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"swapeffect%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->SwapEffect);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"maxddinterface%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->MaxDdrawInterface);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"slowratio%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->SlowRatio);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"scanline%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->ScanLine);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"initresw%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->resw);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"initresh%i\", i);\n\tsprintf_s(val, sizeof(val), \"%i\", TargetMap->resh);\n\tWritePrivateProfileString(\"target\", key, val, InitPath);\n\n\tfree(EscBuf);\n\tEscBuf = NULL;\n}\n\nstatic void SaveExportStamp(char *InitPath)\n{\n\tchar val[32];\n\tGetDllVersion(val);\n\ttime_t _tm = time(NULL);\n\tstruct tm *curtime = localtime(& _tm);\n\tWritePrivateProfileString(\"stamp\", \"version\", val, InitPath);\n\tWritePrivateProfileString(\"stamp\", \"time\", asctime(curtime), InitPath);\n}\n\nstatic void ClearTarget(int i, char *InitPath)\n{\n\tchar key[32];\n\tsprintf_s(key, sizeof(key), \"path%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"launchpath%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"startfolder%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"ver%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"coord%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"flag%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"flagg%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"flagh%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"flagi%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"flagj%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"flagk%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"flagl%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"flagm%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"flagn%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"flago%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"tflag%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"initx%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"inity%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"minx%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"miny%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"maxx%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"maxy%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"posx%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"posy%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"sizx%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"sizy%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"maxfps%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"swapeffect%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"initts%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\n\tsprintf_s(key, sizeof(key), \"winver%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"maxres%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"notes%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"registry%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"maxddinterface%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n\tsprintf_s(key, sizeof(key), \"slowratio%i\", i);\n\tWritePrivateProfileString(\"target\", key, 0, InitPath);\n}\n\nstatic int LoadConfigItem(TARGETMAP *TargetMap, PRIVATEMAP *PrivateMap, int i, char *InitPath)\n{\n\tchar key[32];\n\tchar *EscBuf = NULL;\n\tchar *sBuf;\n\tsBuf = (char *)malloc(1000000);\n\textern BOOL gbDebug;\n\tTargetMap->index = i;\n\t// -------\n\tsprintf_s(key, sizeof(key), \"path%i\", i);\n\tGetPrivateProfileString(\"target\", key, \"\", TargetMap->path, MAX_PATH, InitPath);\n\tif(!TargetMap->path[0]) return FALSE;\n\t// -------\n\tsprintf_s(key, sizeof(key), \"launchpath%i\", i);\n\tGetPrivateProfileString(\"target\", key, \"\", PrivateMap->launchpath, MAX_PATH, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"startfolder%i\", i);\n\tGetPrivateProfileString(\"target\", key, \"\", PrivateMap->startfolder, MAX_PATH, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"title%i\", i);\n\tGetPrivateProfileString(\"target\", key, \"\", PrivateMap->title, sizeof(PRIVATEMAP)-1, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"module%i\", i);\n\tGetPrivateProfileString(\"target\", key, \"\", TargetMap->module, sizeof(TargetMap->module)-1, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"opengllib%i\", i);\n\tGetPrivateProfileString(\"target\", key, \"\", TargetMap->OpenGLLib, sizeof(TargetMap->OpenGLLib)-1, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"notes%i\", i);\n\tGetPrivateProfileString(\"target\", key, \"\", sBuf, 1000000, InitPath);\n\tUnescape(sBuf, &EscBuf);\n\tPrivateMap->notes = (char *)malloc(strlen(EscBuf)+1);\n\tstrcpy(PrivateMap->notes, EscBuf);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"registry%i\", i);\n\tGetPrivateProfileString(\"target\", key, \"\", sBuf, 1000000, InitPath);\n\tUnescape(sBuf, &EscBuf);\n\tPrivateMap->registry = (char *)malloc(strlen(EscBuf)+1);\n\tstrcpy(PrivateMap->registry, EscBuf);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"ver%i\", i);\n\tTargetMap->dxversion = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"monitorid%i\", i);\n\tTargetMap->monitorid = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"coord%i\", i);\n\tTargetMap->coordinates = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flag%i\", i);\n\tTargetMap->flags = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flagg%i\", i);\n\tTargetMap->flags2 = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flagh%i\", i);\n\tTargetMap->flags3 = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flagi%i\", i);\n\tTargetMap->flags4 = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flagj%i\", i);\n\tTargetMap->flags5 = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flagk%i\", i);\n\tTargetMap->flags6 = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flagl%i\", i);\n\tTargetMap->flags7 = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flagm%i\", i);\n\tTargetMap->flags8 = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flagn%i\", i);\n\tTargetMap->flags9 = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"flago%i\", i);\n\tTargetMap->flags10= GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"tflag%i\", i);\n\tTargetMap->tflags = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"dflag%i\", i);\n\tTargetMap->dflags = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"posx%i\", i);\n\tTargetMap->posx = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"posy%i\", i);\n\tTargetMap->posy = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"sizx%i\", i);\n\tTargetMap->sizx = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"sizy%i\", i);\n\tTargetMap->sizy = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"maxfps%i\", i);\n\tTargetMap->MaxFPS = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"initts%i\", i);\n\tTargetMap->InitTS = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"swapeffect%i\", i);\n\tTargetMap->SwapEffect = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"winver%i\", i);\n\tTargetMap->FakeVersionId = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"maxres%i\", i);\n\tTargetMap->MaxScreenRes = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"maxddinterface%i\", i);\n\tTargetMap->MaxDdrawInterface = GetPrivateProfileInt(\"target\", key, 7, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"slowratio%i\", i);\n\tTargetMap->SlowRatio = GetPrivateProfileInt(\"target\", key, 1, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"scanline%i\", i);\n\tTargetMap->ScanLine = GetPrivateProfileInt(\"target\", key, 1, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"initresw%i\", i);\n\tTargetMap->resw = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t// -------\n\tsprintf_s(key, sizeof(key), \"initresh%i\", i);\n\tTargetMap->resh = GetPrivateProfileInt(\"target\", key, 0, InitPath);\n\t\n\tif (!gbDebug){\n\t\t// clear debug flags\n\t\tTargetMap->flags &= ~(0);\n\t\tTargetMap->flags3 &= ~(SURFACEWARN|ANALYTICMODE|NODDRAWBLT|NODDRAWFLIP|NOGDIBLT);\n\t}\n\tfree(EscBuf);\n\tEscBuf = NULL;\n\tfree(sBuf);\n\treturn TRUE;\n}\n\nstatic int SetTargetIcon(TARGETMAP tm)\n{\n\tFILE *target;\n\ttarget = fopen(tm.path, \"r\");\n\tif (target==NULL) return 3;\n\tfclose(target);\n\tif (tm.flags7 & HOOKNORUN) return 5; \n\tif (tm.flags3 & HOOKENABLED) return ((tm.flags2 & STARTDEBUG)||(tm.flags7 & INJECTSUSPENDED)) ? 2 : 1;\n\treturn 0;\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// CDxwndhostView class constructor / destructor\n\nCDxwndhostView::CDxwndhostView()\n{\n\tEnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &this->InitDevMode);\n}\n\nvoid CDxwndhostView::SaveConfigFile()\n{\n\tint i;\n\n\tfor(i = 0; i < MAXTARGETS; i ++){\n\t\tif(!TargetMaps[i].path[0]) break;\n\t\tSaveConfigItem(&TargetMaps[i], &PrivateMaps[i], i, gInitPath);\n\t}\n\tfor(; i < MAXTARGETS; i ++) ClearTarget(i, gInitPath);\n\tthis->isUpdated=FALSE;\n\tthis->isRegistryUpdated=FALSE;\n}\n\nCDxwndhostView::~CDxwndhostView()\n{\n\tEndHook();\n\n\tRevertScreenChanges(&this->InitDevMode);\n\n\tif (this->isUpdated){\n\t\tif (MessageBoxLang(DXW_STRING_LISTUPDATE, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION)==IDYES) \n\t\t\tthis->SaveConfigFile();\n\t}\n\n\tif(this->SystemTray.Enabled()){\n\t\tthis->SystemTray.StopAnimation();\n\t\tthis->SystemTray.HideIcon();\n\t}\n}\n\nvoid CDxwndhostView::OnExit()\n{\n\t// check for running apps ....\n\tif (GetHookStatus(NULL)==DXW_RUNNING){\n\t\tif (MessageBoxLang(DXW_STRING_EXIT_BUSY, DXW_STRING_WARNING, MB_OKCANCEL | MB_ICONQUESTION)==IDCANCEL) \n\t\t\treturn;\n\t}\n\tdelete(this->GetParent());\n}\n\nBOOL CDxwndhostView::PreCreateWindow(CREATESTRUCT& cs)\n{\n\tcs.style |= LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER;\n\treturn CListView::PreCreateWindow(cs);\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// CDxwndhostView Drawing Classes\n\nvoid CDxwndhostView::OnDraw(CDC* pDC)\n{\n\tCDxwndhostDoc* pDoc = GetDocument();\n\tASSERT_VALID(pDoc);\n}\n\nvoid CDxwndhostView::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)\n{ \n\tswitch(nHotKeyId){\n\t\tcase 0: // minimize\n\t\t\tthis->OnWindowMinimize();\n\t\t\tbreak;\n\t\tcase 1: // restore\n\t\t\tthis->OnWindowRestore();\n\t\t\tbreak;\n\t\tcase 2: // kill\n\t\t\tthis->OnProcessKill();\n\t\t\tbreak;\n\t}\n}\n\nvoid VKeyError(char *key)\n{\n\tchar Msg[81];\n\tsprintf(Msg, \"RegisterHotKey(%s) failed err=%d\", key, GetLastError());\n\tMessageBox(NULL, Msg, \"DxWnd error\", MB_OK+MB_ICONWARNING);\n}\n\nvoid CDxwndhostView::UpdateHotKeys()\n{\n\t// Hot Keys\n\tDWORD dwKey;\n\textern Key_Type HKeys[];\n\textern KeyCombo_Type HKeyCombo[];\n\t// MessageBox(\"update global settings\", \"debug\", MB_OK);\n\tfor(int i=0; HKeys[i].iLabelResourceId; i++){\n\t\tdwKey = GetPrivateProfileInt(\"keymapping\", HKeys[i].sIniLabel, 0, gInitPath);\n\t\tif(dwKey) {\n\t\t\tUnregisterHotKey(this->GetSafeHwnd(), i);\n\t\t\tif(!RegisterHotKey(this->GetSafeHwnd(), i, MOD_ALT+MOD_SHIFT+MOD_CONTROL, dwKey)) VKeyError(HKeys[i].sIniLabel);\n\t\t}\n\t}\n}\n\nvoid CDxwndhostView::OnInitialUpdate()\n{\n\tCListView::OnInitialUpdate();\n\tCListCtrl& listctrl = GetListCtrl();\n\tLV_COLUMN listcol;\n\tLV_ITEM listitem;\n\tint i;\n\tDXWNDSTATUS StatusMap;\n\ttypedef BOOL (WINAPI *ChangeWindowMessageFilter_Type)(UINT, DWORD);\n\tChangeWindowMessageFilter_Type pChangeWindowMessageFilter;\n\n\tDragAcceptFiles();\n\t// the ChangeWindowMessageFilter is not available, nor necessary, on XP\n\tHMODULE hUser32;\n\thUser32 = GetModuleHandle(\"user32.dll\");\n\tpChangeWindowMessageFilter = (ChangeWindowMessageFilter_Type)GetProcAddress(hUser32, \"ChangeWindowMessageFilter\");\n\tif(pChangeWindowMessageFilter){\n\t\t(*pChangeWindowMessageFilter)(WM_DROPFILES, MSGFLT_ADD);\n\t\t(*pChangeWindowMessageFilter)(WM_COPYDATA, MSGFLT_ADD);\n\t\t(*pChangeWindowMessageFilter)(0x0049, MSGFLT_ADD);\n\t}\n\n\t// Create 256 color image lists\n\tHIMAGELIST hList = ImageList_Create(32,32, ILC_COLOR8 |ILC_MASK , 6, 1);\n\tm_cImageListNormal.Attach(hList);\n\n\thList = ImageList_Create(16, 16, ILC_COLOR8 | ILC_MASK, 6, 1);\n\tm_cImageListSmall.Attach(hList);\n\n\t// Load the large icons\n\tCBitmap cBmp;\n\tcBmp.LoadBitmap(IDB_BIGICONS);\n\tm_cImageListNormal.Add(&cBmp, RGB(255,0, 255));\n\tcBmp.DeleteObject();\n\n\t// Load the small icons\n\tcBmp.LoadBitmap(IDB_SMALLICONS);\n\tm_cImageListSmall.Add(&cBmp, RGB(255,0, 255));\n\n\t// Attach them\n\tlistctrl.SetImageList(&m_cImageListNormal, LVSIL_NORMAL);\n\tlistctrl.SetImageList(&m_cImageListSmall, LVSIL_SMALL);\n\n\tlistcol.mask = LVCF_WIDTH;\n\tlistcol.cx = 100;\n\t\n\tlistctrl.InsertColumn(0, &listcol); \n\tif(!strlen(gInitPath)){\n\t\tGetCurrentDirectory(MAX_PATH, gInitPath);\n\t\tstrcat_s(gInitPath, sizeof(gInitPath), \"\\\\\");\n\t\tstrcat_s(gInitPath, sizeof(gInitPath), \"dxwnd.ini\");\n\t}\n\tlistctrl.InsertColumn(0, &listcol);\n\n\tStatusMap.VJoyStatus = GetPrivateProfileInt(\"joystick\", \"flags\", VJOYENABLED|CROSSENABLED|INVERTYAXIS|VJMOUSEMAP|VJKEYBOARDMAP, gInitPath);\n\tStatusMap.VJoySensivity = GetPrivateProfileInt(\"joystick\", \"sensivity\", 100, gInitPath);\n\n\tfor(i = 0; i < MAXTARGETS; i ++){\n\t\tif (!LoadConfigItem(&TargetMaps[i], &PrivateMaps[i], i, gInitPath)) break;\n\t\tlistitem.mask = LVIF_TEXT | LVIF_IMAGE;\n\t\tlistitem.iItem = i;\n\t\tlistitem.iSubItem = 0;\n\t\tlistitem.pszText = PrivateMaps[i].title;\n\t\tlistitem.iImage = SetTargetIcon(TargetMaps[i]);\n\t\tlistctrl.InsertItem(&listitem);\n\t}\n\tfor(; i < MAXTARGETS; i ++) {\n\t\tTargetMaps[i].path[0] = 0;\n\t\tPrivateMaps[i].title[0] = 0;\n\t}\n\tResize();\n\tSetTarget(&StatusMap, TargetMaps);\n\tif(m_InitialState == DXW_ACTIVE)\n\t\tthis->OnHookStart();\n\telse\n\t\tthis->OnHookStop();\n\tif(m_StartToTray) this->OnGoToTrayIcon();\n\tthis->isUpdated=FALSE;\n\tthis->isRegistryUpdated=FALSE;\n\tpTitles = &PrivateMaps[0];\n\tpTargets= &TargetMaps[0];\n\n\tUpdateHotKeys();\n\n\t// Transient mode\n\tif(gTransientMode){\n\t\tthis->OnRun();\n\t}\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// CDxwndhostView Diagnostic Class\n\n#ifdef _DEBUG\nvoid CDxwndhostView::AssertValid() const\n{\n\tCListView::AssertValid();\n}\n\nvoid CDxwndhostView::Dump(CDumpContext& dc) const\n{\n\tCListView::Dump(dc);\n}\n\nCDxwndhostDoc* CDxwndhostView::GetDocument() // Non-debug version is inline.\n{\n\tASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDxwndhostDoc)));\n\treturn (CDxwndhostDoc*)m_pDocument;\n}\n#endif //_DEBUG\n\n\nvoid CDxwndhostView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) \n{\n\t// TODO: Please add your control notification handler code here.\n\tOnRun();\n\t*pResult = 0;\n}\n\n//static char ImportExportPath[4096] = {0};\n\nvoid CDxwndhostView::OnExport()\n{\n\tint i;\n    char path[MAX_PATH];\n\tCListCtrl& listctrl = GetListCtrl();\n\tPOSITION pos;\n\tif(!listctrl.GetSelectedCount()) return;\n\tpos = listctrl.GetFirstSelectedItemPosition();\n\ti = listctrl.GetNextSelectedItem(pos);\n\tGetPrivateProfileString(\"window\", \"exportpath\", NULL, path, MAX_PATH, gInitPath);\n\t//strcat_s(path, MAX_PATH, \"\\\\\");\n\tstrcat_s(path, MAX_PATH, PrivateMaps[i].title);\n\tCFileDialog dlg( FALSE, \"*.dxw\", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,\n        \"dxwnd task config (*.dxw)|*.dxw|All Files (*.*)|*.*||\",  this);\n\tif( dlg.DoModal() == IDOK) {\n\t\tDWORD TFlags;\n\t\tTARGETMAP *TargetMap;\n\t\tstrcpy(path, dlg.GetPathName().GetBuffer());\n\t\t// XP fix:\n\t\tif(strlen(path)>4){\n\t\t\tchar *p;\n\t\t\tp = &path[strlen(path)-4];\n\t\t\tif(strcasecmp(p, \".dxw\")) strcat(path, \".dxw\");\n\t\t}\n\t\telse\n\t\t\tstrcat(path, \".dxw\");\n\t\t//MessageBox(path, \"PathName\", MB_OK);\n\t\t// export with no trace flags active\n\t\tTargetMap = &TargetMaps[i];\n\t\tTFlags = TargetMap->tflags;\n\t\tTargetMap->tflags = 0;\n\t\tSaveConfigItem(&TargetMaps[i], &PrivateMaps[i], 0, path);\n\t\tSaveExportStamp(path);\n\t\tTargetMap->tflags = TFlags;\n\t\tif(GetPrivateProfileInt(\"window\", \"updatepaths\", 1, gInitPath)) {\n\t\t\tGetFolderFromPath(path);\n\t\t\tWritePrivateProfileString(\"window\", \"exportpath\", path, gInitPath);\n\t\t}\n\t}\n}\n\nBOOL CDxwndhostView::OnImport(CString sFilePath)\n{\n\tLV_ITEM listitem;\n\tint i;\n\tfor (i=0; strlen(TargetMaps[i].path) && i<MAXTARGETS; i++)\n\t\t;\n\tif (i==MAXTARGETS) {\n\t\tMessageBoxLang(DXW_STRING_MAXENTRIES, DXW_STRING_WARNING, MB_OK | MB_ICONEXCLAMATION);\n\t\treturn FALSE;\n\t}\n\tCListCtrl& listctrl = GetListCtrl();\n\tif(LoadConfigItem(&TargetMaps[i], &PrivateMaps[i], 0, (char *)sFilePath.GetString())){\n\t\tlistitem.mask = LVIF_TEXT | LVIF_IMAGE;\n\t\tlistitem.iItem = i;\n\t\tlistitem.iSubItem = 0;\n\t\tlistitem.iImage = SetTargetIcon(TargetMaps[i]);\n\t\tlistitem.pszText = PrivateMaps[i].title;\n\t\tlistctrl.InsertItem(&listitem);\n\t}\n\tResize();\n\tSetTarget(NULL, TargetMaps);\t\n\tthis->isUpdated=TRUE;\n\tthis->isRegistryUpdated=TRUE;\n\treturn TRUE;\n}\n\nvoid CDxwndhostView::OnImport()\n{\n\tLV_ITEM listitem;\n\tint i;\n    char path[MAX_PATH];\n\tchar ImportExportPath[4096] = {0};\n\tfor (i=0; strlen(TargetMaps[i].path) && i<MAXTARGETS; i++)\n\t\t;\n\tif (i==MAXTARGETS) {\n\t\tMessageBoxLang(DXW_STRING_MAXENTRIES, DXW_STRING_WARNING, MB_OK | MB_ICONEXCLAMATION);\n\t\treturn;\n\t}\n\tpath[0]=0;\n\tCListCtrl& listctrl = GetListCtrl();\n\t\n\tchar folder[MAX_PATH+1];\n\tchar pathname[MAX_PATH+1];\n\tOPENFILENAME ofn = {0};\n\tGetPrivateProfileString(\"window\", \"exportpath\", NULL, pathname, MAX_PATH, gInitPath);\n\tofn.lpstrInitialDir = pathname;\n\tofn.lStructSize = sizeof(ofn);\n\tofn.lpstrFilter = \"DxWnd export file\\0*.dxw\\0\\0\";\n\tofn.lpstrFile = (LPSTR)ImportExportPath;\n\tofn.nMaxFile = 4096;\n\tofn.Flags = OFN_ALLOWMULTISELECT | OFN_EXPLORER;\n\tofn.lpstrDefExt = \"dxw\";\n\n\tif(GetOpenFileName(&ofn)){\n\t\tif(ImportExportPath[ofn.nFileOffset - 1] != '\\0'){\n\t\t\t// Single-Select\n\t\t\t// \"buffer\" - name of file\n\t\t\tif(LoadConfigItem(&TargetMaps[i], &PrivateMaps[i], 0, ImportExportPath)){\n\t\t\t\tlistitem.mask = LVIF_TEXT | LVIF_IMAGE;\n\t\t\t\tlistitem.iItem = i;\n\t\t\t\tlistitem.iSubItem = 0;\n\t\t\t\tlistitem.iImage = SetTargetIcon(TargetMaps[i]);\n\t\t\t\tlistitem.pszText = PrivateMaps[i].title;\n\t\t\t\tlistctrl.InsertItem(&listitem);\n\t\t\t\tif(GetPrivateProfileInt(\"window\", \"updatepaths\", 1, gInitPath)) {\n\t\t\t\t\tGetFolderFromPath(ImportExportPath);\n\t\t\t\t\tWritePrivateProfileString(\"window\", \"exportpath\", ImportExportPath, gInitPath);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse{\n\t\t\t// Multi-Select\n\t\t\tchar* p = ImportExportPath;\n\t\t\tstrcpy(folder, p);\n\t\t\tstrcat(folder, \"\\\\\");\n\t\t\tif(GetPrivateProfileInt(\"window\", \"updatepaths\", 1, gInitPath)) \n\t\t\t\tWritePrivateProfileString(\"window\", \"exportpath\", folder, gInitPath);\n\t\t\tp += lstrlen((LPSTR)p) + 1;\n\t\t\twhile(*p){\n\t\t\t\t// \"p\" - name of each file, NULL to terminate\n\t\t\t\tif(!*p) break;\n\t\t\t\tif(i==MAXTARGETS) {\n\t\t\t\t\tMessageBoxLang(DXW_STRING_MAXENTRIES, DXW_STRING_WARNING, MB_OK | MB_ICONEXCLAMATION);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tstrcpy(pathname, folder);\n\t\t\t\tstrcat(pathname, p);\n\t\t\t\tif (LoadConfigItem(&TargetMaps[i], &PrivateMaps[i], 0, pathname)){\n\t\t\t\t\tlistitem.mask = LVIF_TEXT | LVIF_IMAGE;\n\t\t\t\t\tlistitem.iItem = i;\n\t\t\t\t\tlistitem.iSubItem = 0;\n\t\t\t\t\tlistitem.iImage = SetTargetIcon(TargetMaps[i]);\n\t\t\t\t\tlistitem.pszText = PrivateMaps[i].title;\n\t\t\t\t\tlistctrl.InsertItem(&listitem);\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\tp += lstrlen((LPSTR)p) + 1;\n\t\t\t}\n\t\t}\n\t\tResize();\n\t\tSetTarget(NULL, TargetMaps);\t\n\t\tthis->isUpdated=TRUE;\n\t\tthis->isRegistryUpdated=TRUE;\n\t}\n}\n\nvoid CDxwndhostView::OnModify() \n{\n\tint i;\n\tCTargetDlg dlg;\n\tPOSITION pos;\n\tLV_ITEM listitem;\n\tCListCtrl& listctrl = GetListCtrl();\n\n\tif(!listctrl.GetSelectedCount()) return;\n\tpos = listctrl.GetFirstSelectedItemPosition();\n\ti = listctrl.GetNextSelectedItem(pos);\n\tdlg.m_Title = PrivateMaps[i].title;\n\tdlg.m_Notes = CString(PrivateMaps[i].notes);\n\tdlg.m_Registry = CString(PrivateMaps[i].registry);\n\tdlg.m_LaunchPath = PrivateMaps[i].launchpath;\n\tdlg.m_StartFolder = PrivateMaps[i].startfolder;\n\tSetDlgFromTarget(&TargetMaps[i], &dlg);\n\tif(dlg.DoModal() == IDOK && dlg.m_FilePath.GetLength()){\n\t\tstrnncpy(PrivateMaps[i].title, (char *)dlg.m_Title.GetString(), MAX_TITLE); \n\t\tPrivateMaps[i].notes = (char *)realloc(PrivateMaps[i].notes, strlen(dlg.m_Notes.GetString())+1);\n\t\tstrcpy(PrivateMaps[i].notes, (char *)dlg.m_Notes.GetString());\n\t\tif(strcmp((char *)dlg.m_Registry.GetString(), PrivateMaps[i].registry)) this->isRegistryUpdated=TRUE;\n\t\tPrivateMaps[i].registry = (char *)realloc(PrivateMaps[i].registry, strlen(dlg.m_Registry.GetString())+1);\n\t\tstrcpy(PrivateMaps[i].registry, (char *)dlg.m_Registry.GetString());\n\t\tstrnncpy(PrivateMaps[i].launchpath, (char *)dlg.m_LaunchPath.GetString(), MAX_PATH);\n\t\tstrnncpy(PrivateMaps[i].startfolder, (char *)dlg.m_StartFolder.GetString(), MAX_PATH);\n\t\tSetTargetFromDlg(&TargetMaps[i], &dlg);\n\t\tCListCtrl& listctrl = GetListCtrl();\n\t\tlistitem.mask = LVIF_TEXT | LVIF_IMAGE;\n\t\tlistitem.iItem = i;\n\t\tlistitem.iSubItem = 0;\n\t\tlistitem.iImage = SetTargetIcon(TargetMaps[i]);\n\t\tlistitem.pszText = PrivateMaps[i].title;\n\t\tlistctrl.SetItem(&listitem);\n\t\tResize();\n\t\tSetTarget(NULL, TargetMaps);\t\n\t\tthis->isUpdated=TRUE;\n\t}\n}\n\nvoid CDxwndhostView::OnExplore() \n{\n\tint i;\n\tCTargetDlg dlg;\n\tPOSITION pos;\n\tint len;\n\tCString\tFilePath;\n\tHINSTANCE ret;\n\n\tCListCtrl& listctrl = GetListCtrl();\n\n\tif(!listctrl.GetSelectedCount()) return;\n\tpos = listctrl.GetFirstSelectedItemPosition();\n\ti = listctrl.GetNextSelectedItem(pos);\n\tFilePath = TargetMaps[i].path;\n\tlen=FilePath.ReverseFind('\\\\');\t\n\tif (len==0) return;\n\tFilePath.Truncate(len);\n\t//MessageBox(FilePath, \"path\", 0);\n\n\textern BOOL IsWinXP(void);\n\tret = ShellExecute(NULL, IsWinXP() ? \"open\" : \"explore\", FilePath, NULL, NULL, SW_SHOW);\n\tif((int)ret <= 32){\n\t\tchar message[MAX_PATH];\n\t\tsprintf(message, \"ShellExecute(\\\"%s\\\", \\\"%s\\\") failed.\\nerror=%d\",\n\t\t\tIsWinXP() ? \"open\" : \"explore\", FilePath, ret);\n\t\tMessageBox(message, \"error\", 0);\n\t}\n}\n\nvoid CDxwndhostView::OnViewLog() \n{\n\tint i;\n\tCTargetDlg dlg;\n\tPOSITION pos;\n\tint len;\n\tCString\tFilePath;\n\n\tCListCtrl& listctrl = GetListCtrl();\n\n\tif(!listctrl.GetSelectedCount()) return;\n\tpos = listctrl.GetFirstSelectedItemPosition();\n\ti = listctrl.GetNextSelectedItem(pos);\n\tif(PrivateMaps[i].startfolder[0]){\n\t\tFilePath = PrivateMaps[i].startfolder;\n\t\tFilePath.Append(\"\\\\dxwnd.log\");\n\t}\n\telse {\n\t\tFilePath = TargetMaps[i].path;\n\t\tlen=FilePath.ReverseFind('\\\\');\t\n\t\tif (len==0) return;\n\t\tFilePath.Truncate(len);\n\t\tFilePath.Append(\"\\\\dxwnd.log\");\n\t}\n\tShellExecute(NULL, \"open\", FilePath, NULL, NULL, SW_SHOW);\n}\n\nvoid CDxwndhostView::OnDeleteLog() \n{\n\tint i;\n\tCTargetDlg dlg;\n\tPOSITION pos;\n\tint len;\n\tCString\tFilePath;\n\tHRESULT res;\n\tFILE *logfp;\n\n\tCListCtrl& listctrl = GetListCtrl();\n\n\tif(!listctrl.GetSelectedCount()) return;\n\tpos = listctrl.GetFirstSelectedItemPosition();\n\ti = listctrl.GetNextSelectedItem(pos);\n\tFilePath = TargetMaps[i].path;\n\tlen=FilePath.ReverseFind('\\\\');\t\n\tif (len==0) return;\n\tFilePath.Truncate(len);\n\tFilePath.Append(\"\\\\dxwnd.log\");\n\n\tif((logfp=fopen(FilePath,\"rb\"))!=NULL){ // if the file exists ....\n\t\tfclose(logfp);\n\t\t// ... ask confirmation.\n\t\tres=MessageBoxLang(DXW_STRING_CLEARLOG, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION);\n\t\tif(res!=IDYES) return;\n\t}\n\n\t_unlink(FilePath);\n}\n\nvoid CDxwndhostView::OnDebugView() \n{\n\tPROCESS_INFORMATION pinfo;\n\tSTARTUPINFO sinfo;\n\tchar exepath[MAX_PATH+1];\n\tchar folderpath[MAX_PATH+1];\n\tZeroMemory(&sinfo, sizeof(sinfo));\n\tsinfo.cb = sizeof(sinfo); \n\tGetPrivateProfileString(\"window\", \"debugview\", \"DbgView.exe\", exepath, MAX_PATH, gInitPath);\n\tstrcpy_s(folderpath, sizeof(folderpath), exepath);\n\tPathRemoveFileSpec(folderpath);\n\tif(strlen(folderpath)==0) strcpy(folderpath, \".\\\\\");\n\tif(!CreateProcessA(NULL, exepath, 0, 0, false, CREATE_DEFAULT_ERROR_MODE, NULL, folderpath, &sinfo, &pinfo)){\n\t\tchar sInfo[81];\n\t\tsprintf(sInfo, \"Error %d starting DebugView\", GetLastError());\n\t\tMessageBox(sInfo, \"Error\", MB_ICONERROR|MB_OK);\n\t\treturn;\n\t}\n\tCloseHandle(pinfo.hProcess);\n\tCloseHandle(pinfo.hThread);\n}\n\nvoid CDxwndhostView::OnSetPath() \n{\n\tint i;\n\tCTargetDlg dlg;\n\tPOSITION pos;\n\tchar *lpProcName, *lpNext;\n\textern BOOL GetProcByName(char *, char *);\n\tchar FullPath[MAX_PATH+1];\n\tchar sMessage[1000];\n\n\tCListCtrl& listctrl = GetListCtrl();\n\n\tif(!listctrl.GetSelectedCount()) return;\n\tpos = listctrl.GetFirstSelectedItemPosition();\n\ti = listctrl.GetNextSelectedItem(pos);\n\t//if(TargetMaps[i].path[0] != '*') return;\n\tlpProcName = &(TargetMaps[i].path[1]);\n\twhile (lpNext=strchr(lpProcName,'\\\\')) lpProcName=lpNext+1;\n\tstrcpy(FullPath,\"\");\n\n\tif(GetProcByName(lpProcName, FullPath)==0){\n\t\tint res;\n\t\tif(strcmp(TargetMaps[i].path, FullPath)){\n\t\t\tsprintf(sMessage, \"Found replacement for \\\"%s\\\", \"\n\t\t\t\t\"full path = \\\"%s\\\", \"\n\t\t\t\t\"do you want to update the configuration?\", lpProcName, FullPath);\n\t\t\tres = MessageBox(sMessage, \"DxWnd set path\", MB_YESNO);\n\t\t\tif(res!=IDYES) return;\n\t\t\tstrcpy(TargetMaps[i].path, FullPath);\n\t\t\tthis->isUpdated=TRUE;\n\t\t}\n\t\telse {\n\t\t\tsprintf(sMessage, \"Path \\\"%s\\\" was already set.\", FullPath);\n\t\t\tMessageBox(sMessage, \"DxWnd set path\", MB_OK);\n\t\t}\n\t}\n\telse{\n\t\tsprintf(sMessage, \"Replacement for \\\"%s\\\" not found, run the game!\", lpProcName);\n\t\tMessageBox(sMessage, \"DxWnd set path\", MB_ICONEXCLAMATION);\n\t}\n}\n\nvoid CDxwndhostView::OnSetRegistry() \n{\n\tint i;\n\tCTargetDlg dlg;\n\tPOSITION pos;\n\tchar *Registry;\n\tFILE *regfp;\n\n\tCListCtrl& listctrl = GetListCtrl();\n\n\tif(!listctrl.GetSelectedCount()) return;\n\tpos = listctrl.GetFirstSelectedItemPosition();\n\ti = listctrl.GetNextSelectedItem(pos);\n\tRegistry = PrivateMaps[i].registry;\n\n\tregfp=fopen(\"dxwnd.reg\", \"w\");\n\tif(regfp==NULL){\n\t\tMessageBoxLang(DXW_STRING_VREG_ERROR, DXW_STRING_ERROR, MB_ICONERROR|MB_OK);\n\t\treturn;\n\t}\n\n\tfwrite(Registry, strlen(Registry), 1, regfp);\n\tfputs(\"\\n\", regfp);\n\tfclose(regfp);\n}\n\nvoid CDxwndhostView::OnSort() \n{\n\tint i, itemcount;\n\tTARGETMAP MapEntry;\n\tPRIVATEMAP TitEntry;\n\tBOOL swapped;\n\tHRESULT res;\n\tCListCtrl& listctrl = GetListCtrl();\n\n\t// find list entries number and ignore the command when less than 2 \n\tfor(i=0; i<MAXTARGETS; i++) if(strlen(TargetMaps[i].path)==0) break;\n\titemcount=i;\n\tif (itemcount<2) return;\n\n\t// ask for confirmation\n\tres=MessageBoxLang(DXW_STRING_SORTLIST, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION);\n\tif(res!=IDYES) return;\n\n\t// bubble sort the list\n\tswapped=1;\n\twhile(swapped){\n\t\tswapped=0;\n\t\tfor(i=0; i<itemcount-1; i++){\n\t\t\tif(strcasecmp(PrivateMaps[i].title, PrivateMaps[i+1].title)>0){\n\t\t\t\t// swap entries\n\t\t\t\tMapEntry=TargetMaps[i];\n\t\t\t\tTargetMaps[i]=TargetMaps[i+1];\n\t\t\t\tTargetMaps[i+1]=MapEntry;\n\t\t\t\tTitEntry=PrivateMaps[i];\n\t\t\t\tPrivateMaps[i]=PrivateMaps[i+1];\n\t\t\t\tPrivateMaps[i+1]=TitEntry;\n\t\t\t\tswapped=1;\n\t\t\t}\n\t\t}\n\t}\n\n\tlistctrl.DeleteAllItems();\n\tfor(i=0; i<itemcount; i++) {\n\t\tLV_ITEM listitem;\n\t\tlistitem.mask = LVIF_TEXT | LVIF_IMAGE;\n\t\tlistitem.iItem = i;\n\t\tlistitem.iSubItem = 0;\n\t\tlistitem.iImage = SetTargetIcon(TargetMaps[i]);\n\t\tlistitem.pszText = PrivateMaps[i].title;\n\t\tlistctrl.SetItem(&listitem);\n\t\tlistctrl.InsertItem(&listitem);\n\t\tTargetMaps[i].index = i; // renumber\n\t}\n\n\tSetTarget(NULL, TargetMaps);\n\tthis->isUpdated=TRUE;\n\tthis->isRegistryUpdated=TRUE;\n}\n\nBOOL PauseResumeThreadList(DWORD dwOwnerPID, bool bResumeThread) \n{ \n    HANDLE        hThreadSnap = NULL; \n    BOOL          bRet        = FALSE; \n    THREADENTRY32 te32        = {0}; \n \n    // Take a snapshot of all threads currently in the system. \n\n    hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0); \n    if (hThreadSnap == INVALID_HANDLE_VALUE) \n        return (FALSE); \n \n    // Fill in the size of the structure before using it. \n\n    te32.dwSize = sizeof(THREADENTRY32); \n \n    // Walk the thread snapshot to find all threads of the process. \n    // If the thread belongs to the process, add its information \n    // to the display list.\n \n    if (Thread32First(hThreadSnap, &te32)){ \n        do{ \n            if (te32.th32OwnerProcessID == dwOwnerPID){\n\t\t\t\tHANDLE hThread = OpenThread(THREAD_SUSPEND_RESUME, FALSE, te32.th32ThreadID);\n\t\t\t\tif (bResumeThread)\n\t\t\t\t\tResumeThread(hThread);\n\t\t\t\telse\n\t\t\t\t\tSuspendThread(hThread);\n\t\t\t\tCloseHandle(hThread);\n            } \n        }\n        while (Thread32Next(hThreadSnap, &te32)); \n        bRet = TRUE; \n    } \n    else \n        bRet = FALSE;          // could not walk the list of threads \n \n    // Do not forget to clean up the snapshot object. \n    CloseHandle (hThreadSnap); \n \n    return (bRet); \n} \n\nvoid CDxwndhostView::OnPause() \n{\n\tCTargetDlg dlg;\n\tHRESULT res;\n\tDXWNDSTATUS DxWndStatus;\n\tif ((GetHookStatus(&DxWndStatus) != DXW_RUNNING) /*|| (DxWndStatus.hWnd==NULL)*/ ) {\n\t\tMessageBoxLang(DXW_STRING_NOPAUSETASK, DXW_STRING_INFO, MB_ICONEXCLAMATION);\n\t}\n\telse {\n\t\twchar_t *wcstring = new wchar_t[48+1];\n\t\tmbstowcs_s(NULL, wcstring, 48, PrivateMaps[DxWndStatus.OrigIdx].title, _TRUNCATE);\n\t\tres=MessageBoxLangArg(DXW_STRING_PAUSETASK, DXW_STRING_INFO, MB_YESNO | MB_ICONQUESTION, wcstring);\n\t\tif(res!=IDYES) return;\n\t\tPauseResumeThreadList(DxWndStatus.dwPid, FALSE);\n\t}\n}\n\nvoid CDxwndhostView::OnResume() \n{\n\tCTargetDlg dlg;\n\tHRESULT res;\n\tDXWNDSTATUS DxWndStatus;\n\tif ((GetHookStatus(&DxWndStatus) != DXW_RUNNING) /*|| (DxWndStatus.hWnd==NULL)*/) {\n\t\tMessageBoxLang(DXW_STRING_NORESUMETASK, DXW_STRING_INFO, MB_ICONEXCLAMATION);\n\t}\n\telse {\n\t\twchar_t *wcstring = new wchar_t[48+1];\n\t\tmbstowcs_s(NULL, wcstring, 48, PrivateMaps[DxWndStatus.OrigIdx].title, _TRUNCATE);\n\t\tres=MessageBoxLangArg(DXW_STRING_RESUMETASK, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION, wcstring);\n\t\tif(res!=IDYES) return;\n\t\tPauseResumeThreadList(DxWndStatus.dwPid, TRUE);\n\t}\n}\n\nextern HWND find_main_window(unsigned long);\n\nstatic void SendMessageToHookedWin(DWORD message)\n{\n\tDXWNDSTATUS DxWndStatus;\n\tHWND TargethWnd;\n\tif (GetHookStatus(&DxWndStatus) == DXW_RUNNING){\n\t\tTargethWnd = (DxWndStatus.hWnd) ? DxWndStatus.hWnd : find_main_window(DxWndStatus.dwPid);\n\t\t::PostMessage(TargethWnd, WM_SYSCOMMAND, message, 0);\n\t}\n}\n\nvoid CDxwndhostView::OnWindowMinimize() \n{\n\tSendMessageToHookedWin(SC_MINIMIZE);\n}\n\nvoid CDxwndhostView::OnWindowRestore() \n{\n\tSendMessageToHookedWin(SC_RESTORE);\n}\n\nvoid CDxwndhostView::OnWindowClose() \n{\n\tSendMessageToHookedWin(SC_CLOSE);\n}\n\nvoid CDxwndhostView::OnTaskbarHide() \n{\n\tgShowHideTaskBar(TRUE);\n}\n\nvoid CDxwndhostView::OnTaskbarShow() \n{\n\tgShowHideTaskBar(FALSE);\n}\n\nvoid CDxwndhostView::OnKill() \n{\n\tCTargetDlg dlg;\n\tHRESULT res;\n\tHANDLE TargetHandle;\n\tDXWNDSTATUS DxWndStatus;\n\tif ((GetHookStatus(&DxWndStatus) != DXW_RUNNING) /*|| (DxWndStatus.hWnd==NULL)*/) {\n\t\tMessageBoxLang(DXW_STRING_NOKILLTASK, DXW_STRING_INFO, MB_ICONEXCLAMATION);\n\t}\n\telse {\n\t\twchar_t *wcstring = new wchar_t[48+1];\n\t\tmbstowcs_s(NULL, wcstring, 48, PrivateMaps[DxWndStatus.OrigIdx].title, _TRUNCATE);\n\t\tres=MessageBoxLangArg(DXW_STRING_KILLTASK, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION, wcstring);\n\t\tif(res!=IDYES) return;\n\t\tDxWndStatus.dwPid;\n\n\t\tTargetHandle = OpenProcess(PROCESS_TERMINATE, FALSE, DxWndStatus.dwPid);\n\t\tif(!TargetHandle){\n\t\t\tMessageBoxLangArg(DXW_STRING_OPENPROCESS, DXW_STRING_ERROR, MB_ICONEXCLAMATION, DxWndStatus.dwPid, GetLastError());\n\t\t\treturn;\n\t\t}\n\t\tif(!TerminateProcess(TargetHandle, 0)){\n\t\t\tMessageBoxLangArg(DXW_STRING_TERMINATE, DXW_STRING_ERROR, MB_ICONEXCLAMATION, TargetHandle, GetLastError());\n\t\t\treturn;\n\t\t}\n\t\tCloseHandle(TargetHandle); \n\t\tClipCursor(NULL);\n\t}\n\n\tRevertScreenChanges(&this->InitDevMode);\n}\n\n// void CDxwndhostView::OnProcessKill(BOOL bAll): kills one instance (bAll==FALSE) or all instances (bAll==TRUE)\n// of the process whose name corresponds to the selected program's list entry.\nvoid CDxwndhostView::OnProcessKill(BOOL bAll)\n{\n\tint i;\n\tPOSITION pos;\n\tCListCtrl& listctrl = GetListCtrl();\n\tchar FilePath[MAX_PATH+1];\n\tchar *lpProcName, *lpNext;\n\tHRESULT res;\n\n\tif(!listctrl.GetSelectedCount()) return ;\n\tpos = listctrl.GetFirstSelectedItemPosition();\n\ti = listctrl.GetNextSelectedItem(pos);\n\n\tstrnncpy(FilePath, TargetMaps[i].path, MAX_PATH);\n\tlpProcName=FilePath;\n\twhile (lpNext=strchr(lpProcName,'\\\\')) lpProcName=lpNext+1;\n\n\tif(TargetMaps[i].flags7 & COPYNOSHIMS){\n\t\tstrcat(lpProcName, \".noshim\");\n\t}\n\n\tif(!KillProcByName(lpProcName, FALSE, FALSE)){\n\t\twchar_t *wcstring = new wchar_t[48+1];\n\t\tmbstowcs_s(NULL, wcstring, 48, PrivateMaps[i].title, _TRUNCATE);\n\t\tres=MessageBoxLangArg(DXW_STRING_KILLTASK, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION, wcstring);\n\t\tif(res!=IDYES) return;\n\t\tKillProcByName(lpProcName, TRUE, bAll);\n\t}\n\telse{\n\t\tMessageBoxLang(DXW_STRING_NOKILLTASK, DXW_STRING_INFO, MB_ICONEXCLAMATION);\n\t}\n\n\tClipCursor(NULL);\n\tRevertScreenChanges(&this->InitDevMode);\n}\n\nvoid CDxwndhostView::OnProcessKill() \n{\n\tOnProcessKill(FALSE);\n}\n\nvoid CDxwndhostView::OnProcessKillAll() \n{\n\tOnProcessKill(TRUE);\n}\n\nvoid CDxwndhostView::OnAdd()\n{\n\tOnAdd(NULL);\n}\n\nvoid CDxwndhostView::OnAdd(char *sInitialPath) \n{\n\t// TODO: Please add a command handler code here.\n\tint i;\n\tCTargetDlg dlg;\n\tLV_ITEM listitem;\n\n\tfor(i = 0; i < MAXTARGETS; i ++) if(!TargetMaps[i].path[0]) break;\n\tif(i>=MAXTARGETS){\n\t\tMessageBoxLang(DXW_STRING_MAXENTRIES, DXW_STRING_WARNING, MB_OK | MB_ICONEXCLAMATION);\n\t\treturn;\n\t}\n\tmemset(&TargetMaps[i],0,sizeof(TARGETMAP)); // clean up, just in case....\n\tif(sInitialPath) dlg.m_FilePath = CString(sInitialPath);\n\t\n\tdlg.m_Coordinates = GetPrivateProfileInt(\"window\", \"defaultcoord\", 0, gInitPath);\n\tdlg.m_PosX = GetPrivateProfileInt(\"window\", \"defaultposx\", 50, gInitPath);\n\tdlg.m_PosY = GetPrivateProfileInt(\"window\", \"defaultposy\", 50, gInitPath);\n\tdlg.m_SizX = GetPrivateProfileInt(\"window\", \"defaultsizx\", 800, gInitPath);\n\tdlg.m_SizY = GetPrivateProfileInt(\"window\", \"defaultsizy\", 600, gInitPath);\n\tdlg.m_LogMode = 0; // ???\n\n\tif(dlg.DoModal() == IDOK && dlg.m_FilePath.GetLength()){\n\t\tstrnncpy(PrivateMaps[i].title, (char *)dlg.m_Title.GetString(), MAX_TITLE);\n\t\tPrivateMaps[i].notes = (char *)malloc(strlen(dlg.m_Notes.GetString())+1);\n\t\tstrcpy(PrivateMaps[i].notes, (char *)dlg.m_Notes.GetString());\n\t\tPrivateMaps[i].registry = (char *)malloc(strlen(dlg.m_Registry.GetString())+1);\n\t\tstrcpy(PrivateMaps[i].registry, (char *)dlg.m_Registry.GetString());\n\t\tstrnncpy(PrivateMaps[i].launchpath, (char *)dlg.m_LaunchPath.GetString(), MAX_PATH);\n\t\tstrnncpy(PrivateMaps[i].startfolder, (char *)dlg.m_StartFolder.GetString(), MAX_PATH);\n\t\tSetTargetFromDlg(&TargetMaps[i], &dlg);\n\t\tCListCtrl& listctrl = GetListCtrl();\n\t\tlistitem.mask = LVIF_TEXT | LVIF_IMAGE;\n\t\tlistitem.iItem = i;\n\t\tlistitem.iSubItem = 0;\n\t\tlistitem.iImage = SetTargetIcon(TargetMaps[i]);\n\t\tif (strlen(PrivateMaps[i].title)==0){\n\t\t\tint len;\n\t\t\tCString\tFilePath;\n\t\t\tFilePath=TargetMaps[i].path;\n\t\t\tlen=FilePath.ReverseFind('\\\\');\t\n\t\t\tif(GetPrivateProfileInt(\"window\", \"namefromfolder\", 0, gInitPath)){\n\t\t\t\tFilePath=FilePath.Left(len);\n\t\t\t\tlen=FilePath.ReverseFind('\\\\');\t\n\t\t\t}\n\t\t\tFilePath=FilePath.Right(FilePath.GetLength()-len-1);\n\t\t\tstrncpy_s(PrivateMaps[i].title, sizeof(PrivateMaps[i].title), FilePath.GetString(), sizeof(PrivateMaps[i].title)-1);\n\t\t}\n\t\tTargetMaps[i].index = i;\n\t\tlistitem.pszText = PrivateMaps[i].title;\n\t\tlistctrl.InsertItem(&listitem);\n\t\tResize();\n\t\tSetTarget(NULL, TargetMaps);\t\n\t\tthis->isUpdated=TRUE;\n\t\tthis->isRegistryUpdated=TRUE;\n\t}\n}\n\nvoid CDxwndhostView::OnDuplicate() \n{\n\tPOSITION pos;\n\tint i;\n\tCListCtrl& listctrl = GetListCtrl();\n\n\tif(!(pos = listctrl.GetFirstSelectedItemPosition())) return;\n\ti = listctrl.GetNextSelectedItem(pos);\n\tif (listctrl.GetItemCount()>=MAXTARGETS-1) return; // too many entries to duplicate one!\n\n\tfor(int j=listctrl.GetItemCount(); j>i; j--){\n\t\tTargetMaps[j+1]=TargetMaps[j];\n\t\tPrivateMaps[j+1]=PrivateMaps[j];\n\t}\n\tTargetMaps[i+1] = TargetMaps[i];\n\tPrivateMaps[i+1] = PrivateMaps[i];\n\n\tlistctrl.DeleteAllItems();\n\tfor(i=0; TargetMaps[i].path[0]; i++) {\n\t\tLV_ITEM listitem;\n\t\tlistitem.mask = LVIF_TEXT | LVIF_IMAGE;\n\t\tlistitem.iItem = i;\n\t\tlistitem.iSubItem = 0;\n\t\tlistitem.iImage = SetTargetIcon(TargetMaps[i]);\n\t\tlistitem.pszText = PrivateMaps[i].title;\n\t\tlistctrl.SetItem(&listitem);\n\t\tlistctrl.InsertItem(&listitem);\n\t\tTargetMaps[i].index = i;\n\t}\n\tSetTarget(NULL, TargetMaps);\n\tthis->isUpdated=TRUE;\n\tthis->isRegistryUpdated=TRUE;\n}\n\nvoid CDxwndhostView::OnMoveTop() \n{\n\tTARGETMAP MapEntry;\n\tPRIVATEMAP TitEntry;\n\tPOSITION pos;\n\tint i;\n\tCListCtrl& listctrl = GetListCtrl();\n\n\tif(!(pos = listctrl.GetFirstSelectedItemPosition())) return;\n\ti = listctrl.GetNextSelectedItem(pos);\n\tif (i==0)return;\n\n\tMapEntry=TargetMaps[i];\n\tTitEntry=PrivateMaps[i];\n\tfor(int j=i; j; j--){\n\t\tTargetMaps[j]=TargetMaps[j-1];\n\t\tPrivateMaps[j]=PrivateMaps[j-1];\n\t}\n\tTargetMaps[0]=MapEntry;\n\tPrivateMaps[0]=TitEntry;\n\n\tlistctrl.DeleteAllItems();\n\tfor(i=0; TargetMaps[i].path[0]; i++) {\n\t\tLV_ITEM listitem;\n\t\tlistitem.mask = LVIF_TEXT | LVIF_IMAGE;\n\t\tlistitem.iItem = i;\n\t\tlistitem.iSubItem = 0;\n\t\tlistitem.iImage = SetTargetIcon(TargetMaps[i]);\n\t\tlistitem.pszText = PrivateMaps[i].title;\n\t\tlistctrl.SetItem(&listitem);\n\t\tlistctrl.InsertItem(&listitem);\n\t}\n\tSetTarget(NULL, TargetMaps);\n\tthis->isUpdated=TRUE;\n\tthis->isRegistryUpdated=TRUE;\n}\n\nvoid CDxwndhostView::OnMoveUp() \n{\n\tTARGETMAP MapEntry;\n\tPRIVATEMAP TitEntry;\n\tPOSITION pos;\n\tint i;\n\tCListCtrl& listctrl = GetListCtrl();\n\n\tif(!(pos = listctrl.GetFirstSelectedItemPosition())) return;\n\ti = listctrl.GetNextSelectedItem(pos);\n\tif (i==0)return;\n\n\tMapEntry=TargetMaps[i-1];\n\tTargetMaps[i-1]=TargetMaps[i];\n\tTargetMaps[i]=MapEntry;\n\tTitEntry=PrivateMaps[i-1];\n\tPrivateMaps[i-1]=PrivateMaps[i];\n\tPrivateMaps[i]=TitEntry;\n\n\tlistctrl.DeleteAllItems();\n\tfor(i=0; TargetMaps[i].path[0]; i++) {\n\t\tLV_ITEM listitem;\n\t\tlistitem.mask = LVIF_TEXT | LVIF_IMAGE;\n\t\tlistitem.iItem = i;\n\t\tlistitem.iSubItem = 0;\n\t\tlistitem.iImage = SetTargetIcon(TargetMaps[i]);\n\t\tlistitem.pszText = PrivateMaps[i].title;\n\t\tlistctrl.SetItem(&listitem);\n\t\tlistctrl.InsertItem(&listitem);\n\t}\n\tSetTarget(NULL, TargetMaps);\n\tthis->isUpdated=TRUE;\n\tthis->isRegistryUpdated=TRUE;\n}\n\nvoid CDxwndhostView::OnMoveDown() \n{\n\tTARGETMAP MapEntry;\n\tPRIVATEMAP TitEntry;\n\tPOSITION pos;\n\tint i;\n\tCListCtrl& listctrl = GetListCtrl();\n\n\tif(!(pos = listctrl.GetFirstSelectedItemPosition())) return;\n\ti = listctrl.GetNextSelectedItem(pos);\n\tif (i==listctrl.GetItemCount()-1)return;\n\n\tMapEntry=TargetMaps[i+1];\n\tTargetMaps[i+1]=TargetMaps[i];\n\tTargetMaps[i]=MapEntry;\n\tTitEntry=PrivateMaps[i+1];\n\tPrivateMaps[i+1]=PrivateMaps[i];\n\tPrivateMaps[i]=TitEntry;\n\n\tlistctrl.DeleteAllItems();\n\tfor(i=0; TargetMaps[i].path[0]; i++) {\n\t\tLV_ITEM listitem;\n\t\tlistitem.mask = LVIF_TEXT | LVIF_IMAGE;\n\t\tlistitem.iItem = i;\n\t\tlistitem.iSubItem = 0;\n\t\tlistitem.iImage = SetTargetIcon(TargetMaps[i]);\n\t\tlistitem.pszText = PrivateMaps[i].title;\n\t\tlistctrl.SetItem(&listitem);\n\t\tlistctrl.InsertItem(&listitem);\n\t}\n\tSetTarget(NULL, TargetMaps);\n\tthis->isUpdated=TRUE;\n\tthis->isRegistryUpdated=TRUE;\n}\n\nvoid CDxwndhostView::OnMoveBottom() \n{\n\tTARGETMAP MapEntry;\n\tPRIVATEMAP TitEntry;\n\tPOSITION pos;\n\tint i, last;\n\tCListCtrl& listctrl = GetListCtrl();\n\n\tif(!(pos = listctrl.GetFirstSelectedItemPosition())) return;\n\ti = listctrl.GetNextSelectedItem(pos);\n\tlast = listctrl.GetItemCount()-1;\n\tif (i==last)return;\n\n\tMapEntry=TargetMaps[i];\n\tTitEntry=PrivateMaps[i];\n\tfor(int j=i; j<last; j++){\n\t\tTargetMaps[j]=TargetMaps[j+1];\n\t\tPrivateMaps[j]=PrivateMaps[j+1];\n\t}\n\tTargetMaps[last]=MapEntry;\n\tPrivateMaps[last]=TitEntry;\n\n\tlistctrl.DeleteAllItems();\n\tfor(i=0; TargetMaps[i].path[0]; i++) {\n\t\tLV_ITEM listitem;\n\t\tlistitem.mask = LVIF_TEXT | LVIF_IMAGE;\n\t\tlistitem.iItem = i;\n\t\tlistitem.iSubItem = 0;\n\t\tlistitem.iImage = SetTargetIcon(TargetMaps[i]);\n\t\tlistitem.pszText = PrivateMaps[i].title;\n\t\tlistctrl.SetItem(&listitem);\n\t\tlistctrl.InsertItem(&listitem);\n\t}\n\tSetTarget(NULL, TargetMaps);\n\tthis->isUpdated=TRUE;\n\tthis->isRegistryUpdated=TRUE;\n}\n\nvoid CDxwndhostView::OnDelete() \n{\n\tint i, len;\n\tPOSITION pos;\n\tCListCtrl& listctrl = GetListCtrl();\n\tCString\tFilePath;\n\tHRESULT res;\n\n\tif(!listctrl.GetSelectedCount()) return ;\n\tpos = listctrl.GetFirstSelectedItemPosition();\n\ti = listctrl.GetNextSelectedItem(pos);\n\n\tFilePath=PrivateMaps[i].title;\n\tif (FilePath.GetLength()==0){\n\t\tFilePath = TargetMaps[i].path;\n\t\tlen=FilePath.ReverseFind('\\\\');\t\n\t\tif (len==0) return;\n\t\tFilePath=FilePath.Right(FilePath.GetLength()-len-1);\n\t}\n\n\twchar_t *wcstring = new wchar_t[MAX_PATH+1];\n\tmbstowcs_s(NULL, wcstring, MAX_PATH, FilePath, _TRUNCATE);\n\tres=MessageBoxLangArg(DXW_STRING_DELENTRY, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION, wcstring);\n\tif(res!=IDYES) return;\n\tlistctrl.DeleteItem(i);\n\tfor(; i < MAXTARGETS  - 1; i ++) {\n\t\tPrivateMaps[i] = PrivateMaps[i + 1]; // V2.1.74 fix\n\t\tTargetMaps[i] = TargetMaps[i + 1];\n\t}\n\tTargetMaps[i].path[0]=0; // clear last one, in case there were MAXTARGETS entries\n\tResize();\n\tSetTarget(NULL, TargetMaps);\n\tthis->isUpdated=TRUE;\n\tthis->isRegistryUpdated=TRUE;\n}\n\nvoid CDxwndhostView::OnHookStart() \n{\n\tCMenu *menu;\n\tmenu = this->GetParent()->GetMenu();\n\tmenu->CheckMenuItem(ID_HOOK_START, MF_CHECKED);\n\tmenu->CheckMenuItem(ID_HOOK_STOP , MF_UNCHECKED);\n\n\tStartHook();\n\tif(this->SystemTray.Enabled()) {\n\t\tUINT IdResource=IDI_DXWAIT;\n\t\tthis->SystemTray.SetIcon(IdResource);\n\t}\n}\n\nvoid CDxwndhostView::OnHookStop() \n{\n\tCMenu *menu;\n\t// v.68: status control!!\n\tif (CheckStatus()) return;\n\n\tmenu = this->GetParent()->GetMenu();\n\tmenu->CheckMenuItem(ID_HOOK_START, MF_UNCHECKED);\n\tmenu->CheckMenuItem(ID_HOOK_STOP , MF_CHECKED);\n\t\n\tEndHook();\n\tif(this->SystemTray.Enabled()) {\n\t\tUINT IdResource=IDI_DXIDLE;\n\t\tthis->SystemTray.SetIcon(IdResource);\n\t}\n}\n\nvoid CDxwndhostView::OnClearAllLogs() \n{\n\t// TODO: Please add a command handler code here.\n\tint i, len;\n\tCListCtrl& listctrl = GetListCtrl();\n\tCString\tFilePath;\n\tHRESULT res;\n\n\tres=MessageBoxLang(DXW_STRING_CLEARALL, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION);\n\tif(res!=IDYES) return;\n\n\tfor(i = 0; i < MAXTARGETS; i ++) {\n\t\tif(!TargetMaps[i].path[0]) break;\n\t\tTargetMaps[i].tflags &= ~OUTTRACE;\n\t\tFilePath = TargetMaps[i].path;\n\t\tlen=FilePath.ReverseFind('\\\\');\t\n\t\tif (len==0) continue;\n\t\tFilePath.Truncate(len);\n\t\tFilePath.Append(\"\\\\dxwnd.log\");\n\t\t_unlink(FilePath);\n\t}\n\t// v2.1.92: clean %TEMP% folder\n\tFilePath = getenv(\"TEMP\");\n\tFilePath.Append(\"\\\\dxwnd.log\");\n\t_unlink(FilePath);\n}\n\nDWORD WINAPI WaitForDeath(LPVOID arg)\n{\n\twhile(!gMustDie) Sleep(1000);\n\texit(0);\n}\n\nDWORD WINAPI TrayIconUpdate(CSystemTray *Tray)\n{\n\tint DxStatus, PrevDxStatus;\n\tUINT IconId;\n\tchar sMsg[1024];\n\tchar *Status;\n\tchar DllVersion[21];\n\tint TickCount, IdleCount;\n\tPrevDxStatus=-1; // a different one...\n\tTickCount=0;\n\tIdleCount=0;\n\twhile (TRUE) {\n\t\t// once a second ...\n\t\tSleep(1000);\n\t\tif(gTransientMode && gMustDie) {\n\t\t\tTray->HideIcon();\n\t\t\tdelete(Tray->GetAncestor(GA_ROOTOWNER));\n\t\t\texit(0);\n\t\t}\n\t\tDxStatus=GetHookStatus(NULL);\n\t\tswitch (DxStatus){\n\t\t\tcase DXW_IDLE: IconId=IDI_DXIDLE; Status=\"DISABLED\"; break;\n\t\t\tcase DXW_ACTIVE: IconId=IDI_DXWAIT; Status=\"READY\"; break;\n\t\t\tcase DXW_RUNNING: IconId=IDI_DXRUN; Status=\"RUNNING\"; break;\n\t\t\tdefault: IconId=IDI_DXIDLE; Status=\"???\"; break;\n\t\t}\n\t\tif (DxStatus != DXW_RUNNING){\n\t\t\tTickCount=0;\n\t\t\tTray->StopAnimation();\n\t\t\tTray->SetIcon(IconId);\n\t\t\tIdleCount++;\n\t\t\tif(IdleCount == 2) {\n\t\t\t\tif(gAutoHideMode) {\n\t\t\t\t\tTray->MaximiseFromTray(pParent, FALSE);\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// animation state machine ....\n\t\t\tTickCount++;\n\t\t\tIdleCount=0;\n\t\t\tif (DxStatus!=PrevDxStatus) {\n\t\t\t\tTray->SetIcon(IconId);\n\t\t\t}\n\t\t\tif(TickCount > 4){\n\t\t\t\tTray->SetIconList(IDI_RUN1, IDI_RUN6);\n\t\t\t\tTray->Animate(50,-1);\n\t\t\t}\n\t\t\tif(TickCount > 6){\n\t\t\t\tTickCount=0;\n\t\t\t\tTray->StopAnimation();\n\t\t\t\tTray->SetIcon(IDI_RUN0);\n\t\t\t}\n\t\t}\n\t\tDXWNDSTATUS DxWndStatus;\n\t\tGetDllVersion(DllVersion);\n\t\tDxWndStatus.Status=DxStatus;\n\t\tif(DxStatus==DXW_RUNNING){\n\t\t\tGetHookStatus(&DxWndStatus);\n\t\t\tsprintf_s(sMsg, 1024, \n\t\t\t\t\"Running \\\"%s\\\"\\nScreen = (%dx%d) %dBPP\\nFullScreen = %s\\nDX version = %d\", \n\t\t\tpTitles[DxWndStatus.OrigIdx].title,\n\t\t\tDxWndStatus.Width, DxWndStatus.Height, DxWndStatus.ColorDepth, \n\t\t\tDxWndStatus.IsFullScreen ? \"Yes\":\"No\", DxWndStatus.DXVersion);    \n\t\t}\n\t\telse\n\t\t\tsprintf_s(sMsg, 1024, \"DxWnd %s\\nHook status: %s\", DllVersion, Status);\n\t\tTray->SetTooltipText(sMsg);\n\t\tPrevDxStatus=DxStatus;\n\t}\n}\n\nvoid CDxwndhostView::OnGoToTrayIcon() \n{\n\tCMenu *menu = this->GetParent()->GetMenu();\n\tUINT IconId;\n\tpParent = this->GetParent();\n\tif(!this->SystemTray.Enabled()){\n\t\tHANDLE StatusThread;\n\t\tDWORD dwThrdId;\n\t\t// Create the tray icon\n\t\tif(!this->SystemTray.Create(NULL, \n\t\t\tWM_ICON_NOTIFY, \"DxWnd\", NULL, IDR_MENU_SYSTRAY,\n\t\t\tFALSE,\n\t\t\tm_StartToTray ? NULL : \"DxWnd DirectDraw windowizer\", // NULL inhibits the Tray banner\n\t\t\t\"DxWnd\", \n\t\t\tNIIF_INFO, 10)){\n\t\t\tMessageBoxLang(DXW_STRING_TRAYFAIL, DXW_STRING_ERROR, MB_OK);\n\t\t\t// error path: if can't create a system tray icon, transient logic must be silently placed here\n\t\t\tif(gTransientMode) StatusThread= CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WaitForDeath, (LPVOID)NULL, 0, &dwThrdId);\n\t\t\treturn;\n\t\t}\n\t\tIconId=(menu->GetMenuState(ID_HOOK_START, MF_BYCOMMAND)==MF_CHECKED)?IDI_DXWAIT:IDI_DXIDLE;\n\t\tif(!this->SystemTray.SetIcon(IconId)){\n\t\t\tMessageBoxLang(DXW_STRING_ICONFAIL, DXW_STRING_ERROR, MB_OK);\n\t\t\treturn;\n\t\t}\n\t\tStatusThread= CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TrayIconUpdate, (LPVOID)&this->SystemTray, 0, &dwThrdId);\n\t}\n\tthis->SystemTray.ShowIcon();\n    this->SystemTray.SetMenuDefaultItem(0, TRUE);\n\tthis->SystemTray.SetTargetWnd(pParent);\t\t// Send all menu messages here.\n\tthis->SystemTray.MinimiseToTray(pParent, FALSE);\n}\n\nvoid CDxwndhostView::OnSaveFile() \n{\n\tif (this->isUpdated) \n\tif (MessageBoxLang(DXW_STRING_SAVELIST, DXW_STRING_WARNING, MB_YESNO | MB_ICONQUESTION)==IDYES) \n\t\tthis->SaveConfigFile();\n}\n\nvoid CDxwndhostView::OnTrayRestore() \n{\n\tCWnd *pParent = this->GetParent();\n\tthis->SystemTray.MaximiseFromTray(pParent, FALSE);\n}\n\nvoid CDxwndhostView::OnViewStatus()\n{\n\tCStatusDialog *pDlg = new CStatusDialog();\n\tBOOL ret = pDlg->Create(CStatusDialog::IDD, this); \n\tpDlg->ShowWindow(SW_SHOW);\n}\n\nvoid CDxwndhostView::OnViewShims()\n{\n\tPOSITION pos;\n\tint i;\n\tchar *ExePath;\n\tCListCtrl& listctrl = GetListCtrl();\n\n\tif(!(pos = listctrl.GetFirstSelectedItemPosition())) return;\n\ti = listctrl.GetNextSelectedItem(pos);\n\tExePath = TargetMaps[i].path;\n\n\tCShimsDialog *pDlg = new CShimsDialog(NULL, ExePath);\n\tBOOL ret = pDlg->Create(CShimsDialog::IDD, this); \n\tpDlg->ShowWindow(SW_SHOW);\n}\n\nTARGETMAP *ViewTarget; // dirty !!!!\n\nvoid CDxwndhostView::OnViewFlags() \n{\n\tint i;\n\tCTargetDlg dlg;\n\tPOSITION pos;\n\tCListCtrl& listctrl = GetListCtrl();\n\n\tif(!listctrl.GetSelectedCount()) return;\n\tpos = listctrl.GetFirstSelectedItemPosition();\n\ti = listctrl.GetNextSelectedItem(pos);\n\tViewTarget = &TargetMaps[i];\n\n\tCViewFlagsDialog *pDlg = new CViewFlagsDialog();\n\n\tBOOL ret = pDlg->Create(CViewFlagsDialog::IDD, this); \n\tpDlg->ShowWindow(SW_SHOW);\n}\n\nvoid CDxwndhostView::OnViewDesktop()\n{\n\tCDesktopDialog *pDlg = new CDesktopDialog();\n\tBOOL ret = pDlg->Create(CDesktopDialog::IDD, this); \n\tpDlg->ShowWindow(SW_SHOW);\n}\n\nvoid CDxwndhostView::OnViewPalette()\n{\n\tCPaletteDialog *pDlg = new CPaletteDialog();\n\tBOOL ret = pDlg->Create(CPaletteDialog::IDD, this); \n\tpDlg->ShowWindow(SW_SHOW);\n}\n\nvoid CDxwndhostView::OnGlobalSettings() \n{\n\tCGlobalSettings *pDlg = new CGlobalSettings();\n\tBOOL ret = pDlg->Create(CGlobalSettings::IDD, this); \n\tpDlg->ShowWindow(SW_SHOW);\n}\n\nvoid CDxwndhostView::OnExpertModeToggle() \n{\n\tCMenu *menu;\n\tgbDebug = !gbDebug;\n\tmenu = this->GetParent()->GetMenu();\n\t::DestroyMenu(menu->GetSafeHmenu());\n\tmenu->LoadMenu(gbDebug ? IDR_MAINFRAME_EX : IDR_MAINFRAME);\t\n\tthis->GetParent()->SetMenu(menu);\n\tmenu->CheckMenuItem(ID_OPTIONS_EXPERTMODE, gbDebug ? MF_CHECKED : MF_UNCHECKED);\n\tWritePrivateProfileString(\"window\", \"debug\", (gbDebug ? \"1\" : \"0\"), gInitPath);\n\n}\n\nvoid CDxwndhostView::OnViewTimeSlider()\n{\n\tCTimeSliderDialog *pDlg = new CTimeSliderDialog();\n\tBOOL ret = pDlg->Create(CTimeSliderDialog::IDD, this); \n\tpDlg->ShowWindow(SW_SHOW);\n}\n\nvoid CDxwndhostView::OnViewVirtualJoystick()\n{\n\tCVJoyDialog *pDlg = new CVJoyDialog();\n\tBOOL ret = pDlg->Create(CVJoyDialog::IDD, this); \n\tpDlg->ShowWindow(SW_SHOW);\n}\n\nvoid CDxwndhostView::Resize()\n{\n\tCListCtrl& listctrl = GetListCtrl();\n\tLV_COLUMN listcol;\n\tint i, tmp, size = 0;\n\t\n\tfor(i = 0; i < MAXTARGETS; i ++){\n\t\tTargetMaps[i].index = i; // renumber the items\n\t\tif(strlen(TargetMaps[i].path) == 0) break;\n\t\ttmp = listctrl.GetStringWidth(PrivateMaps[i].title);\n\t\tif(size < tmp) size = tmp;\n\t}\n\t\n\tlistcol.mask = LVCF_WIDTH;\n\tlistcol.cx = size + 32;\n\tlistctrl.SetColumn(0, &listcol);\n}\n\nvoid CDxwndhostView::OnRButtonDown(UINT nFlags, CPoint point) \n{\n\tCMenu popup;\n\tint res;\n\t\n\tClientToScreen(&point);\n\tpopup.LoadMenu(gbDebug ? IDR_MENU_POPUP_EX : IDR_MENU_POPUP);\n\n\tres = popup.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON | TPM_RETURNCMD, point.x, point.y, this);\n\tswitch(res){\n\tcase ID_PRUN:\n\t\tOnRun();\n\t\tbreak;\n\tcase ID_RUNUNHOOKED:\n\t\tOnRun(TRUE);\n\t\tbreak;\n\tcase ID_PMODIFY:\n\t\tOnModify();\n\t\tbreak;\n\tcase ID_PDELETE:\n\t\tOnDelete();\n\t\tbreak;\n\tcase ID_PADD:\n\t\tOnAdd();\n\t\tbreak;\n\tcase ID_PDUPLICATE:\n\t\tOnDuplicate();\n\t\tbreak;\n\tcase ID_PEXPLORE:\n\t\tOnExplore();\n\t\tbreak;\n\tcase ID_PLOG_VIEW:\n\t\tOnViewLog();\n\t\tbreak;\n\tcase ID_PLOG_DELETE:\n\t\tOnDeleteLog();\n\t\tbreak;\n\tcase ID_PLOG_DEBUGVIEW:\n\t\tOnDebugView();\n\t\tbreak;\n\tcase ID_SETREGISTRY:\n\t\tOnSetRegistry();\n\t\tbreak;\n\tcase ID_SETPATH:\n\t\tOnSetPath();\n\t\tbreak;\n\tcase ID_TASK_KILL:\n\t\tOnKill();\n\t\tbreak;\n\tcase ID_PKILL:\n\t\tOnProcessKill();\n\t\tbreak;\n\tcase ID_PKILLALL:\n\t\tOnProcessKillAll();\n\t\tbreak;\t\n\tcase ID_TASK_PAUSE:\n\t\tOnPause();\n\t\tbreak;\n\tcase ID_TASK_RESUME:\n\t\tOnResume();\n\t\tbreak;\n\tcase ID_PEXPORT:\n\t\tOnExport();\n\t\tbreak;\n\tcase ID_FILE_IMPORT:\n\t\tOnImport();\n\t\tbreak;\n\tcase ID_DESKTOPCOLORDEPTH_8BPP:\n\t\tOnDesktopcolordepth8bpp();\n\t\tbreak;\n\tcase ID_DESKTOPCOLORDEPTH_16BPP:\n\t\tOnDesktopcolordepth16bpp();\n\t\tbreak;\n\tcase ID_DESKTOPCOLORDEPTH_24BPP:\n\t\tOnDesktopcolordepth24bpp();\n\t\tbreak;\n\tcase ID_DESKTOPCOLORDEPTH_32BPP:\n\t\tOnDesktopcolordepth32bpp();\n\t\tbreak;\n\tcase ID_TOOLS_RECOVERSCREENMODE:\n\t\tOnRecoverScreenMode();\n\t\tbreak;\n\tcase ID_TOOLS_CLEARCOMPATIBILITYFLAGS:\n\t\tOnClearCompatibilityFlags();\n\t\tbreak;\n\tcase ID_TOOLS_RECOVERSYSTEMCOLORS:\n\t\tOnRecoverSystemColors();\n\t\tbreak;\n\tcase ID_MOVE_TOP:\n\t\tOnMoveTop();\n\t\tbreak;\n\tcase ID_MOVE_UP:\n\t\tOnMoveUp();\n\t\tbreak;\n\tcase ID_MOVE_DOWN:\n\t\tOnMoveDown();\n\t\tbreak;\n\tcase ID_MOVE_BOTTOM:\n\t\tOnMoveBottom();\n\t\tbreak;\n\tcase ID_VIEW_FLAGS:\n\t\tOnViewFlags();\n\t\tbreak;\n\t}\n\tCListView::OnRButtonDown(nFlags, point);\n}\n\ntypedef struct {\n\tchar *path;\n\tchar *launch;\n} PROCESSMAP;\n\nstatic DWORD WINAPI TransientWaitForChildDeath(void *p)\n{\n\tPROCESSMAP *ProcessMap = (PROCESSMAP *)p;\n\tBOOL bIsSomeoneAlive;\n\tint ret;\n\tchar sPath[MAX_PATH];\n\tchar sLaunch[MAX_PATH];\n\tchar sTemp[MAX_PATH];\n\tchar *lpProcName, *lpNext;\n\n\t// strip full pathname and keep executable name only\n\tstrcpy(sPath, \"\");\n\tif(ProcessMap->path[0]){\n\t\tstrncpy(sTemp, ProcessMap->path, MAX_PATH); \n\t\tlpProcName=sTemp;\n\t\twhile (lpNext=strchr(lpProcName,'\\\\')) lpProcName=lpNext+1;\n\t\tstrncpy(sPath, lpProcName, MAX_PATH);\n\t}\n\tstrcpy(sLaunch, \"\");\n\tif(ProcessMap->launch[0]){\n\t\tstrncpy(sTemp, ProcessMap->launch, MAX_PATH); \n\t\tlpProcName=sTemp;\n\t\twhile (lpNext=strchr(lpProcName,'\\\\')) lpProcName=lpNext+1;\n\t\tstrncpy(sLaunch, lpProcName, MAX_PATH);\n\t}\n\n\tSleep(3000); // Wait for process creation - necessary?\n\n\twhile(TRUE){\n\t\tSleep(2000);\n\t\tbIsSomeoneAlive = FALSE;\n\t\tif(sPath[0]) {\n\t\t\tif (!(ret=KillProcByName(sPath, FALSE, FALSE))) bIsSomeoneAlive = TRUE;\n\t\t}\n\t\tif(sLaunch[0]) {\n\t\t\tif (!(ret=KillProcByName(sLaunch, FALSE, FALSE))) bIsSomeoneAlive = TRUE;\n\t\t}\n\t\tif(!bIsSomeoneAlive) {\n\t\t\tbreak;\n\t\t}\n\t}\n\tgMustDie = TRUE;\n\treturn 0;\n}\n\nstatic char *ExceptionCaption(DWORD ec)\n{\n\tchar *c;\n\tswitch(ec){\n\t\tcase EXCEPTION_ACCESS_VIOLATION:\t\tc=\"Access Violation\"; break;\n\t\tcase EXCEPTION_DATATYPE_MISALIGNMENT:\tc=\"Datatype Misalignment\"; break;\n\t\tcase EXCEPTION_BREAKPOINT:\t\t\t\tc=\"Breakpoint\"; break;\n\t\tcase EXCEPTION_SINGLE_STEP:\t\t\t\tc=\"Single Step\"; break;\n\t\tcase EXCEPTION_ARRAY_BOUNDS_EXCEEDED:\tc=\"Array Bouds Exceeded\"; break;\n\t\tcase EXCEPTION_FLT_DENORMAL_OPERAND:\tc=\"Float Denormal Operand\"; break;\n\t\tcase EXCEPTION_FLT_DIVIDE_BY_ZERO:\t\tc=\"Divide by Zero\"; break;\n\t\tcase EXCEPTION_FLT_INEXACT_RESULT:\t\tc=\"Inexact Result\"; break;\n\t\tcase EXCEPTION_FLT_INVALID_OPERATION:\tc=\"Invalid Operation\"; break;\n\t\tcase EXCEPTION_FLT_OVERFLOW:\t\t\tc=\"Float Overflow\"; break;\n\t\tcase EXCEPTION_FLT_STACK_CHECK:\t\t\tc=\"Float Stack Check\"; break;\n\t\tcase EXCEPTION_FLT_UNDERFLOW:\t\t\tc=\"Float Undeflow\"; break;\n\t\tcase EXCEPTION_INT_DIVIDE_BY_ZERO:\t\tc=\"Integer Divide by Zero\"; break;\n\t\tcase EXCEPTION_INT_OVERFLOW:\t\t\tc=\"Integer Overflow\"; break;\n\t\tcase EXCEPTION_PRIV_INSTRUCTION:\t\tc=\"Priviliged Instruction\"; break;\n\t\tcase EXCEPTION_IN_PAGE_ERROR:\t\t\tc=\"In Page Error\"; break;\n\t\tcase EXCEPTION_ILLEGAL_INSTRUCTION:\t\tc=\"Illegal Instruction\"; break;\n\t\tcase EXCEPTION_NONCONTINUABLE_EXCEPTION:c=\"Non-continuable exception\"; break;\n\t\tcase EXCEPTION_STACK_OVERFLOW:\t\t\tc=\"Stack Overflow\"; break;\n\t\tcase EXCEPTION_INVALID_DISPOSITION:\t\tc=\"Invalid Disposition\"; break;\n\t\tcase EXCEPTION_GUARD_PAGE:\t\t\t\tc=\"Guard Page Violation\"; break;\n\t\tcase EXCEPTION_INVALID_HANDLE:\t\t\tc=\"Invalid Handle\"; break;\n\t\t//case EXCEPTION_POSSIBLE_DEADLOCK:\t\tc=\"Possible Deadlock\"; break;\n\t\tdefault:\t\t\t\t\t\t\t\tc=\"unknown\"; break;\n\t}\n\treturn c;\n}\n\nstatic char *sEventCode(DWORD ec)\n{\n\tchar *c;\n\tswitch(ec){\n\t\tcase EXCEPTION_DEBUG_EVENT:\t\t\t\tc=\"exception\"; break;\n\t\tcase CREATE_THREAD_DEBUG_EVENT:\t\t\tc=\"create thread\"; break;\n\t\tcase CREATE_PROCESS_DEBUG_EVENT:\t\tc=\"create process\"; break;\n\t\tcase EXIT_THREAD_DEBUG_EVENT:\t\t\tc=\"exit thread\"; break;\n\t\tcase EXIT_PROCESS_DEBUG_EVENT:\t\t\tc=\"exit process\"; break;\n\t\tcase LOAD_DLL_DEBUG_EVENT:\t\t\t\tc=\"load dll\"; break;\n\t\tcase UNLOAD_DLL_DEBUG_EVENT:\t\t\tc=\"unload dll\"; break;\n\t\tcase OUTPUT_DEBUG_STRING_EVENT:\t\t\tc=\"out debug\"; break;\n\t\tcase RIP_EVENT:\t\t\t\t\t\t\tc=\"rip\"; break;\n\t\tdefault:\t\t\t\t\t\t\t\tc=\"unknown\"; break;\n\t}\n\treturn c;\n}\n\n// For thread messaging\n#define DEBUG_EVENT_MESSAGE\t\tWM_APP + 0x100\n\nDWORD WINAPI StartDebug(void *p)\n{\n\tThreadInfo_Type *ThInfo;\n\tSTARTUPINFO sinfo;\n\tPROCESS_INFORMATION pinfo;\n\tchar path[MAX_PATH];\n\textern char *GetFileNameFromHandle(HANDLE);\n\tchar *sRunTargetPath;\n#ifdef DXWDEBUGSTEPPING\n\tPROCESS_INFORMATION *pi;\n\tCREATE_THREAD_DEBUG_INFO *ti;\n\tLOAD_DLL_DEBUG_INFO *li;\n\tUNLOAD_DLL_DEBUG_INFO *ui;\n\tEXCEPTION_DEBUG_INFO *ei;\n\tEXIT_PROCESS_DEBUG_INFO *xpi;\n\tEXIT_THREAD_DEBUG_INFO *xti;\n\tint res;\n\tBOOL step=TRUE; // initialize to TRUE to enable\n\tBOOL stepdll=FALSE; // initialize to TRUE to enable\n#endif\n#ifdef LOCKINJECTIONTHREADS\n\tDWORD StartingCode;\n\tLPVOID StartAddress = 0;\n\tHANDLE TargetHandle = NULL;\n#endif\n\tbool bContinueDebugging;\n\tchar DebugMessage[256+1];\n\n\tThInfo = (ThreadInfo_Type *)p;\n\tZeroMemory(&sinfo, sizeof(sinfo));\n\tsinfo.cb = sizeof(sinfo);\n\tsRunTargetPath = ThInfo->ExePath;\n\tstrcpy_s(path, sizeof(path), sRunTargetPath);\n\tPathRemoveFileSpec(path);\n\tif(!CreateProcess(NULL, \n\t\tsRunTargetPath, \n\t\t0, 0, false, DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS, NULL, path, &sinfo, &pinfo)){\n\t\tDWORD dwLastErr = GetLastError();\n\t\tswitch (dwLastErr){\n\t\t\tcase 740:\n\t\t\t\tsprintf(DebugMessage, \"Create process error=%d: DxWnd must run as administrator\", dwLastErr);\n\t\t\t\tMessageBoxEx(0, DebugMessage, \"ERROR\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\t\tif(gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tsprintf(DebugMessage, \"CREATE PROCESS error=%d\", dwLastErr);\n\t\t\t\tMessageBoxEx(0, DebugMessage, \"ERROR\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\t\tif(gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif(gbDebug) OutTrace(\"create process: path=\\\"%s\\\"\\n\", path);\n\tCString strEventMessage;\n\tDEBUG_EVENT debug_event ={0};\n\tbContinueDebugging = true;\n\tDWORD dwContinueStatus = DBG_CONTINUE;\n\twhile(bContinueDebugging)\n\t{ \n\t\tdwContinueStatus = DBG_EXCEPTION_NOT_HANDLED;\n\t\tif (!WaitForDebugEvent(&debug_event, INFINITE)) {\n\t\t\tsprintf(DebugMessage, \"Injection error: WaitForDebugEvent error=%d\",  GetLastError());\n\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\tif(gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\tbreak; // must release pinfo handles\n\t\t}\n\t\t//OutTrace(\"Injection: WaitForDebugEvent code=%d(%s)\\n\", debug_event.dwDebugEventCode, sEventCode(debug_event.dwDebugEventCode));\n\t\tswitch(debug_event.dwDebugEventCode){\n\t\tcase EXIT_PROCESS_DEBUG_EVENT:\n\t\t\tif(gbDebug) OutTrace(\"exit process\\n\", DebugMessage);\n\t\t\tbContinueDebugging=false;\n\t\t\tbreak;\n\t\tcase CREATE_PROCESS_DEBUG_EVENT:\n\t\t\tif (gbDebug) OutTrace(\"create process: base=0x%X path=\\\"%s\\\"\\n\", \n\t\t\t\tdebug_event.u.CreateProcessInfo.lpBaseOfImage,\n\t\t\t\tGetFileNameFromHandle(debug_event.u.CreateProcessInfo.hFile));\n\t\t\tGetFullPathName(\"dxwnd.dll\", MAX_PATH, path, NULL);\n\t\t\tif(!Inject(pinfo.dwProcessId, path)){\n\t\t\t\t// DXW_STRING_INJECTION\n\t\t\t\tsprintf(DebugMessage,\"Injection error: pid=%x dll=%s\", pinfo.dwProcessId, path);\n\t\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\t}\n#ifdef LOCKINJECTIONTHREADS\n\t\t\textern LPVOID GetThreadStartAddress(HANDLE);\n\t\t\tDWORD EndlessLoop;\n\t\t\tEndlessLoop=0x9090FEEB; // careful: it's BIG ENDIAN: EB FE 90 90\n\t\t\tSIZE_T BytesCount;\n\t\t\tTargetHandle = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE, FALSE, pinfo.dwProcessId);\n\t\t\tif(TargetHandle){\n\t\t\t\tStartAddress = GetThreadStartAddress(pinfo.hThread);\n\t\t\t\tif(StartAddress){\n\t\t\t\t\tif(!ReadProcessMemory(pinfo.hProcess, StartAddress, &StartingCode, 4, &BytesCount)){ \n\t\t\t\t\t\tsprintf(DebugMessage,\"ReadProcessMemory error=%d\", GetLastError());\n\t\t\t\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\t\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\t\t\t}\n\t\t\t\t\tif(!WriteProcessMemory(pinfo.hProcess, StartAddress, &EndlessLoop, 4, &BytesCount)){\n\t\t\t\t\t\tsprintf(DebugMessage,\"WriteProcessMemory error=%d\", GetLastError());\n\t\t\t\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\t\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n#endif\n\t\t\tCloseHandle(debug_event.u.CreateProcessInfo.hProcess);\n\t\t\tCloseHandle(debug_event.u.CreateProcessInfo.hThread);\n\t\t\tCloseHandle(debug_event.u.CreateProcessInfo.hFile);\n\t\t\tbreak;\n\t\tcase CREATE_THREAD_DEBUG_EVENT:\n\t\t\tif (gbDebug) OutTrace(\"create thread: th=0x%X base=0x%X start=0x%X\\n\", \n\t\t\t\tdebug_event.u.CreateThread.hThread,\n\t\t\t\tdebug_event.u.CreateThread.lpThreadLocalBase,\n\t\t\t\tdebug_event.u.CreateThread.lpStartAddress);\n\t\t\t//SuspendThread(debug_event.u.CreateThread.hThread);\n\t\t\tCloseHandle(debug_event.u.CreateThread.hThread);\n\t\t\tbreak;\n\t\tcase EXIT_THREAD_DEBUG_EVENT:\n\t\t\tif (gbDebug) OutTrace(\"exit thread: exitcode=0x%X\\n\", \n\t\t\t\tdebug_event.u.ExitThread.dwExitCode);\n#ifdef LOCKINJECTIONTHREADS\n\t\t\tif(TargetHandle && StartAddress){\n\t\t\t\tif(!WriteProcessMemory(pinfo.hProcess, StartAddress, &StartingCode, 4, &BytesCount)){\n\t\t\t\t\tsprintf(DebugMessage,\"WriteProcessMemory error=%d\", GetLastError());\n\t\t\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(TargetHandle) CloseHandle((HANDLE)TargetHandle);\n#endif\n\t\t\t// commented out: apparently, there must be some previous thread that starts before the hooker\n\t\t\t// bContinueDebugging=false;\n\t\t\tbreak;\n\t\tcase LOAD_DLL_DEBUG_EVENT:\n\t\t\tif (gbDebug) OutTrace(\"load dll: base=0x%X path=\\\"%s\\\"\\n\", \n\t\t\t\tdebug_event.u.LoadDll.lpBaseOfDll,\n\t\t\t\tGetFileNameFromHandle(debug_event.u.LoadDll.hFile));\n\t\t\tCloseHandle(debug_event.u.LoadDll.hFile);\n\t\t\tbreak;\n\t\tcase UNLOAD_DLL_DEBUG_EVENT:\n\t\t\tif (gbDebug) OutTrace(\"unload dll: base=0x%X\\n\", \n\t\t\t\tdebug_event.u.UnloadDll.lpBaseOfDll);\n\t\t\tbreak;\n\t\tcase OUTPUT_DEBUG_STRING_EVENT: \t\t\t\t\n\t\t\tif (gbDebug) OutTrace(\"output debug: len=%d unicode=%x\\n\", \n\t\t\t\tdebug_event.u.DebugString.nDebugStringLength,\n\t\t\t\tdebug_event.u.DebugString.fUnicode);\n\t\t\tbreak;\n\t\tcase EXCEPTION_DEBUG_EVENT:\n\t\t\t//sprintf(DebugMessage, \"Exception %x(%s) caught at addr=%x\",\n\t\t\t//\tdebug_event.u.Exception.ExceptionRecord.ExceptionCode, \n\t\t\t//\tExceptionCaption(debug_event.u.Exception.ExceptionRecord.ExceptionCode),\n\t\t\t//\tdebug_event.u.Exception.ExceptionRecord.ExceptionAddress);\n\t\t\t//MessageBoxEx(0, DebugMessage, \"EXCEPTION\", MB_ICONEXCLAMATION, NULL);\n\t\t\tif (gbDebug) OutTrace(\"exception: code=0x%X(%s) addr=0x%X first=%x\\n\", \n\t\t\t\tdebug_event.u.Exception.ExceptionRecord.ExceptionCode, \n\t\t\t\tExceptionCaption(debug_event.u.Exception.ExceptionRecord.ExceptionCode),\n\t\t\t\tdebug_event.u.Exception.ExceptionRecord.ExceptionAddress,\n\t\t\t\tdebug_event.u.Exception.dwFirstChance);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tsprintf(DebugMessage,\"Unknown eventcode=%x\", debug_event.dwDebugEventCode);\n\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION, NULL);\n\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\tbreak;\n\t\t}\n\t\tif(bContinueDebugging){\n\t\t\tContinueDebugEvent(debug_event.dwProcessId, debug_event.dwThreadId, dwContinueStatus);\n\t\t}\n\t\telse{\n\t\t\tDebugSetProcessKillOnExit(FALSE);\n\t\t\tContinueDebugEvent(debug_event.dwProcessId,debug_event.dwThreadId, DBG_CONTINUE); \n\t\t\tDebugActiveProcessStop(debug_event.dwProcessId);\n\t\t}\n\t}\n\tCloseHandle(pinfo.hThread); // no longer needed, avoid handle leakage\n\tCloseHandle(pinfo.hProcess); // no longer needed, avoid handle leakage\n\treturn TRUE;\n}\n\nvoid InjectSuspended(char *exepath, char *dirpath)\n{\n\tSTARTUPINFO sinfo;\n\tPROCESS_INFORMATION pinfo;\n\tchar StartingCode[4];\n\tDWORD EndlessLoop;\n\tEndlessLoop=0x9090FEEB; // careful: it's BIG ENDIAN: EB FE 90 90\n\tDWORD BytesCount;\n\tchar DebugMessage[1024];\n\tDWORD OldProt;\n\tDWORD PEHeader[0x70];\n\tchar dllpath[MAX_PATH];\n\tLPVOID StartAddress;\n\tHANDLE TargetHandle;\n\tFILE *fExe = NULL;\n\tBOOL bKillProcess = FALSE;\n\n\tOutTrace(\"InjectSuspended: exe=\\\"%s\\\" dir=\\\"%s\\\"\\n\",exepath, dirpath);\n\tZeroMemory(&sinfo, sizeof(sinfo));\n\tsinfo.cb = sizeof(sinfo);\n\t// attempt to load the specified target\n\tif (!CreateProcess(NULL, exepath, 0, 0, false, CREATE_SUSPENDED, NULL, dirpath, &sinfo, &pinfo)){\n\t\tsprintf(DebugMessage,\"CreateProcess \\\"%s\\\" error=%d\", exepath, GetLastError());\n\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t}\n\n\twhile(TRUE) { // fake loop\n\t\tbKillProcess = TRUE;\n\n\t\t// locate the entry point\n\t\tTargetHandle = OpenProcess(\n\t\t\tPROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_SUSPEND_RESUME, \n\t\t\tFALSE, \n\t\t\tpinfo.dwProcessId);\n\t\tif (gbDebug) OutTrace(\"Target handle=%x\\n\", TargetHandle);\n\n\t\tFILE *fExe = fopen(exepath, \"rb\");\n\t\tif(fExe==NULL){\n\t\t\tsprintf(DebugMessage,\"fopen %s error=%d\", exepath, GetLastError());\n\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\tbreak;\n\t\t}\n\t\t// read DOS header\n\t\tif(fread((void *)PEHeader, sizeof(DWORD), 0x10, fExe)!=0x10){\n\t\t\tsprintf(DebugMessage,\"fread error=%d\", GetLastError());\n\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\tbreak;\n\t\t}\n\t\tOutTrace(\"NT Header offset=%X\\n\", PEHeader[0xF]);\n\t\tfseek(fExe, PEHeader[0xF], 0);\n\t\t// read File header + Optional header\n\t\tif(fread((void *)PEHeader, sizeof(DWORD), 0x70, fExe)!=0x70){\n\t\t\tsprintf(DebugMessage,\"fread error=%d\", GetLastError());\n\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\tbreak;\n\t\t}\n\n\t\tOutTrace(\"AddressOfEntryPoint=%X ImageBase=%X\\n\", PEHeader[0xA], PEHeader[0xD]);\n\t\tStartAddress = (LPVOID)(PEHeader[0xA] + PEHeader[0xD]);\n\t\tif (gbDebug) OutTrace(\"Thread start address=%x\\n\", StartAddress);\n\n\t\t// patch the entry point with infinite loop\n\t\tif(!VirtualProtectEx(TargetHandle, StartAddress, 4, PAGE_EXECUTE_READWRITE, &OldProt )){\n\t\t\tsprintf(DebugMessage,\"VirtualProtectEx error=%d\", GetLastError());\n\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\tbreak;\n\t\t}\n\n\t\tif(!ReadProcessMemory(TargetHandle, StartAddress, &StartingCode, 4, &BytesCount)){ \n\t\t\tsprintf(DebugMessage,\"ReadProcessMemory error=%d\", GetLastError());\n\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\tbreak;\n\t\t}\n\n\t\tif(!WriteProcessMemory(TargetHandle, StartAddress, &EndlessLoop, 4, &BytesCount)){\n\t\t\tsprintf(DebugMessage,\"WriteProcessMemory error=%d\", GetLastError());\n\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\tbreak;\n\t\t}\n\n\t\tif(!FlushInstructionCache(TargetHandle, StartAddress, 4)){\n\t\t\tsprintf(DebugMessage,\"FlushInstructionCache error=%d\", GetLastError());\n\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\tbreak; // error condition\n\t\t}\n\n\t\t// resume the main thread\n\t\tif(ResumeThread(pinfo.hThread)==(DWORD)-1){\n\t\t\tsprintf(DebugMessage,\"ResumeThread error=%d at:%d\", GetLastError(), __LINE__);\n\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\tbreak;\n\t\t}\n\n\t\t// wait until the thread stuck at entry point\n\t\tCONTEXT context;\n\t\tcontext.Eip = (DWORD)0; // initialize to impossible value\n\t\tfor ( unsigned int i = 0; i < 80 && context.Eip != (DWORD)StartAddress; ++i ){\n\t\t\t// patience.\n\t\t\tSleep(50);\n\n\t\t\t// read the thread context\n\t\t\tcontext.ContextFlags = CONTEXT_CONTROL;\n\t\t\tif(!GetThreadContext(pinfo.hThread, &context)){\n\t\t\t\tsprintf(DebugMessage,\"GetThreadContext error=%d\", GetLastError());\n\t\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tOutTrace(\"wait cycle %d eip=%x\\n\", i, context.Eip);\n\t\t}\n\n\t\tif (context.Eip != (DWORD)StartAddress){\n\t\t\t// wait timed out\n\t\t\tsprintf(DebugMessage,\"thread blocked eip=%x addr=%x\", context.Eip, StartAddress);\n\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t}\n\n\t\t// inject DLL payload into remote process\n\t\tGetFullPathName(\"dxwnd.dll\", MAX_PATH, dllpath, NULL);\n\t\tif(!Inject(pinfo.dwProcessId, dllpath)){\n\t\t\t// DXW_STRING_INJECTION\n\t\t\tsprintf(DebugMessage,\"Injection error: pid=%x dll=%s\", pinfo.dwProcessId, dllpath);\n\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t}\n\n\t\t// pause \n\t\tif(SuspendThread(pinfo.hThread)==(DWORD)-1){\n\t\t\tsprintf(DebugMessage,\"SuspendThread error=%d\", GetLastError());\n\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\tbreak;\n\t\t}\n\t\t// restore original entry point\n\t\tif(!WriteProcessMemory(TargetHandle, StartAddress, &StartingCode, 4, &BytesCount)){\n\t\t\tsprintf(DebugMessage,\"WriteProcessMemory error=%d\", GetLastError());\n\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\tthrow;\n\t\t}\n\n\t\tif(!FlushInstructionCache(TargetHandle, StartAddress, 4)){\n\t\t\tsprintf(DebugMessage,\"FlushInstructionCache error=%d\", GetLastError());\n\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\tbreak; // error condition\n\t\t}\n\n\t\t// you are ready to go\n\t\t// pause and restore original entry point\n\t\tif(ResumeThread(pinfo.hThread)==(DWORD)-1){\n\t\t\tsprintf(DebugMessage,\"ResumeThread error=%d at:%d\", GetLastError(), __LINE__);\n\t\t\tMessageBoxEx(0, DebugMessage, \"Injection\", MB_ICONEXCLAMATION|MB_OK, NULL);\n\t\t\tif (gbDebug) OutTrace(\"%s\\n\", DebugMessage);\n\t\t\tbreak;\n\t\t}\n\t\tbKillProcess = FALSE;\n\t\tbreak; // exit fake loop\n\t}\n\n\t// cleanup ....\n\tif(fExe) fclose(fExe);\n\tif(TargetHandle) CloseHandle(TargetHandle);\n\t// terminate the newly spawned process\n\tif(bKillProcess){\n\t\tif(!TerminateProcess( pinfo.hProcess, -1 )){\n\t\t\tif (gbDebug) OutTrace(\"failed to kill hproc=%x err=%d\\n\", pinfo.hProcess, GetLastError());\n\t\t}\n\t}\n}\n\nDWORD RecoverTargetMaps(LPVOID TargetMaps)\n{\n\tSleep(5000);\n\tSetTarget(NULL, (TARGETMAP *)TargetMaps);\t\n\treturn 0;\n}\n\n// from https://www.winehq.org/pipermail/wine-users/2002-April/007910.html \n//\n// There is no publicaly available version numbering for SafeDisc. However, it \n// seems that the version number is stored in the executable as 3 unsigned 32-bit \n// integers. Using an hexadecimal editor, locate the following byte pattern in \n// the wrapper (game.exe)\n//\n// > 426f475f 202a3930 2e302621 21202059   BoG_ *90.0&!!  Y\n// > 793e0000                              y>..\n//\n// There should be 3 unsigned integers right after that, which are respectively \n// the version, subversion an revision number.\n//\n// On some versions of SafeDisc there are 3 null integers following the pattern, \n// before the version number. You'll then have to look at the 3 unsigned 32-bit \n// integers right after\n//\n// > 426f475f 202a3930 2e302621 21202059   BoG_ *90.0&!!  Y\n// > 793e0000 00000000 00000000 00000000   y>..............\n\nstatic void CheckSafeDiscVersion(char *path)\n{\n\tunsigned char opcode[44+1];\n\tchar sMessage[81];\n\tDWORD dwVersion, dwSubversion, dwRevision;\n\tFILE *exe;\n\tlong seekpos;\n\n\texe=fopen(path, \"rb\");\n\tif(!exe) return;\n\n\twhile(TRUE) {\n\t\tseekpos=ftell(exe); \n\t\tif(fread(opcode, 1, 44, exe) != 44) break;\n\t\t//MessageBox(0, \"check\", \"debug\", 0);\n\t\t// fast way to make 20 char comparisons .....\n\t\tif(*(DWORD *)opcode     ==0x5F476F42)\n\t\tif(*(DWORD *)(opcode+4) ==0x30392A20)\n\t\tif(*(DWORD *)(opcode+8) ==0x2126302E)\n\t\tif(*(DWORD *)(opcode+12)==0x59202021)\n\t\tif(*(DWORD *)(opcode+16)==0x00003E79){\n\t\t\tdwVersion = *(DWORD *)(opcode+20);\n\t\t\tdwSubversion = *(DWORD *)(opcode+24);\n\t\t\tdwRevision = *(DWORD *)(opcode+28);\n\t\t\tif(dwVersion == 0){\n\t\t\t\tdwVersion = *(DWORD *)(opcode+32);\n\t\t\t\tdwSubversion = *(DWORD *)(opcode+36);\n\t\t\t\tdwRevision = *(DWORD *)(opcode+40);\t\n\t\t\t}\n\t\t\tsprintf(sMessage,  \"Safedisk version %d.%d.%d detected\", dwVersion, dwSubversion, dwRevision);\n\t\t\tMessageBox(NULL, sMessage, \"DxWnd hint\", MB_OKCANCEL|MB_ICONWARNING|MB_TOPMOST);\n\t\t\tbreak;\n\t\t}\n\t\tif(fseek(exe, seekpos+4, SEEK_SET)) break;\n\t}\n\tfclose(exe);\n}\n\n#define FILECOPYBUFSIZE 1024\n\nstatic void MakeHiddenFile(char *sTargetPath)\n{\n\tHANDLE hFile     = INVALID_HANDLE_VALUE;\n    HANDLE hTempFile = INVALID_HANDLE_VALUE; \n    BOOL fSuccess  = FALSE;\n    DWORD dwRetVal = 0;\n    UINT uRetVal   = 0;\n    DWORD dwBytesRead    = 0;\n    DWORD dwBytesWritten = 0; \n    char  chBuffer[FILECOPYBUFSIZE]; \n\n\thFile = CreateFile(sTargetPath,           // file name \n\t\tGENERIC_READ,          // open for reading \n\t\t0,                     // do not share \n\t\tNULL,                  // default security \n\t\tOPEN_EXISTING,         // existing file only \n\t\tFILE_ATTRIBUTE_NORMAL, // normal file \n\t\tNULL);                 // no template \n    if (hFile == INVALID_HANDLE_VALUE) { \n        //PrintError(TEXT(\"First CreateFile failed\"));\n        return;\n    }\n\n\tstrcat(sTargetPath, \".noshim\");\n\t\n    //  Deletes last copy of the file, just in case it was updated (patched?)\n\t// DeleteFile(sTargetPath);\n\n    //  Creates the new file to write to for the upper-case version.\n    hTempFile = CreateFile((LPTSTR) sTargetPath,\t// file name \n\t\tGENERIC_WRITE,\t\t\t// open for write \n\t\t0,\t\t\t\t\t\t// do not share \n\t\tNULL,\t\t\t\t\t// default security \n\t\tCREATE_ALWAYS,\t\t\t// overwrite existing\n\t\t//FILE_ATTRIBUTE_HIDDEN,\t// hidden file \n\t\tFILE_ATTRIBUTE_NORMAL, // normal file \n\t\tNULL);\t\t\t\t\t// no template \n    if (hTempFile == INVALID_HANDLE_VALUE) {\n\t\tchar msg[120];\n\t\tsprintf(msg, \"Creation of hidden copy of target file with no SHIMs failed\\nError=%d\", GetLastError());\n\t\tMessageBox(0, msg, \"Warning\", 0); \n        //PrintError(TEXT(\"Second CreateFile failed\"));\n        if (!CloseHandle(hFile)){\n\t\t\tsprintf(msg, \"CloseHandle failed\\nError=%d\", GetLastError());\n            MessageBox(0, msg, \"Error\", 0);\n        }\n        return;\n    } \n    //  Reads BUFSIZE blocks to the buffer and copy to the temporary \n    //  file. \n    do {\n        if (ReadFile(hFile, chBuffer, FILECOPYBUFSIZE, &dwBytesRead, NULL)) {\n            fSuccess = WriteFile(hTempFile, chBuffer, dwBytesRead, &dwBytesWritten, NULL); \n            if (!fSuccess) {\n                //PrintError(TEXT(\"WriteFile failed\"));\n                break;\n            }\n        } \n        else {\n            //PrintError(TEXT(\"ReadFile failed\"));\n            break;\n        }\n    //  Continues until the whole file is processed.\n    } while (dwBytesRead == FILECOPYBUFSIZE); \n\n\tCloseHandle(hFile); \n\tCloseHandle(hTempFile); \n}\n\nPROCESSMAP pm;\n\nvoid CDxwndhostView::OnRun() \n{\n\tOnRun(FALSE); \n}\n\nvoid CDxwndhostView::OnRun(BOOL bForceNoHook) \n{\n\tCListCtrl& listctrl = GetListCtrl();\n\tPOSITION pos;\n\tint i;\n\tSTARTUPINFO sinfo;\n\tPROCESS_INFORMATION pinfo;\n\tchar folderpath[MAX_PATH+20]; // max + space for \".noshim\"\n\tchar exepath[MAX_PATH+20]; // max + space for \".noshim\"\n\tTARGETMAP RestrictedMaps[2];\n\tchar *sRunTargetPath;\n\n\tif(gTransientMode){\n\t\ti=iProgIndex-1;\n\t\tif(i<0) i=0;\n\t}\n\telse {\n\t\tif(!listctrl.GetSelectedCount()) return;\n\t\tpos = listctrl.GetFirstSelectedItemPosition();\n\t\ti = listctrl.GetNextSelectedItem(pos);\n\t}\n\tsRunTargetPath = (strlen(PrivateMaps[i].launchpath)>0) ? PrivateMaps[i].launchpath : TargetMaps[i].path;\n\tZeroMemory(&sinfo, sizeof(sinfo));\n\tsinfo.cb = sizeof(sinfo);\n\t// create a virtually single entry in the targetmap array\n\tmemcpy(&RestrictedMaps[0], &TargetMaps[i], sizeof(TARGETMAP));\n\tmemset(&RestrictedMaps[1], 0, sizeof(TARGETMAP));\n\tif(!(PrivateMaps[i].startfolder[0])){\n\t\tstrcpy_s(folderpath, sizeof(folderpath), sRunTargetPath);\n\t\tstrcpy_s(exepath, sizeof(exepath), sRunTargetPath);\n\t\tPathRemoveFileSpec(folderpath);\n\t}else{\n\t\tstrcpy_s(folderpath, sizeof(folderpath), PrivateMaps[i].startfolder);\n\t\tstrcpy_s(exepath, sizeof(exepath), sRunTargetPath);\n\t}\n\tif(TargetMaps[i].flags7 & COPYNOSHIMS){\n\t\tMakeHiddenFile(exepath);\n\t\tstrncpy(RestrictedMaps[0].path, exepath, MAX_PATH);\n\t}\n\tif(bForceNoHook) RestrictedMaps[0].flags3 &= ~HOOKENABLED;\n\tSetTarget(NULL, RestrictedMaps);\t\n\tOutTrace(\"OnRun idx=%d prog=\\\"%s\\\" unhooked=%x\\n\", i, TargetMaps[i].path, bForceNoHook);\n\n\tif(TargetMaps[i].flags7 & HOOKNORUN){\n\t\tMessageBoxLang(DXW_STRING_CANT_RUN, DXW_STRING_WARNING, MB_ICONERROR|MB_OK);\n\t\treturn;\n\t}\n\n\t// self-elevation if configured and necessary\n\tif(TargetMaps[i].flags & NEEDADMINCAPS){\n\t\textern BOOL DxSelfElevate(CDxwndhostView *);\n\t\tOSVERSIONINFO osver = { sizeof(osver) };\n\t\tif (GetVersionEx(&osver) && (osver.dwMajorVersion >= 6)){\n\t\t\tOutTrace(\"self elevation\\n\");\n\t\t\tDxSelfElevate(this);\n\t\t}\n\t}\n\n\tif((TargetMaps[i].flags3 & EMULATEREGISTRY) || (TargetMaps[i].flags4 & OVERRIDEREGISTRY)){\n\t\tif(this->isRegistryUpdated){\n\t\t\tif(MessageBoxLang(DXW_STRING_VREG_UPDATE,DXW_STRING_WARNING, MB_OKCANCEL|MB_ICONINFORMATION)==IDOK)\n\t\t\t\tthis->SaveConfigFile();\n\t\t}\n\t\tOutTrace(\"export virtual registry entry[%d]\\n\");\n\t\tFILE *regfp;\n\t\tchar *Registry;\n\t\tRegistry = PrivateMaps[i].registry;\n\t\tregfp=fopen(\"dxwnd.reg\", \"w\");\n\t\tif(regfp==NULL)MessageBoxLang(DXW_STRING_VREG_ERROR, DXW_STRING_ERROR, MB_ICONERROR|MB_OK);\n\t\tfwrite(Registry, strlen(Registry), 1, regfp);\n\t\tfputs(\"\\n\", regfp);\n\t\tfclose(regfp);\t\n\t}\n\n\tif(TargetMaps[i].flags7 & SHOWHINTS){\n\t\tOutTrace(\"checksafediscversion\\n\");\n\t\tCheckSafeDiscVersion(TargetMaps[i].path);\n\t}\n\n\t// v2.04.04: fix - STARTDEBUG and INJECTSUSPENDED must take place only when HOOKENABLED\n\tif ((TargetMaps[i].flags2 & STARTDEBUG) && \n\t\t(TargetMaps[i].flags3 & HOOKENABLED)){\n\t\tOutTrace(\"debugger mode\\n\");\n\t\tThreadInfo_Type ThreadInfo;\n\t\tThreadInfo.TM=&TargetMaps[i];\n\t\tThreadInfo.PM=&PrivateMaps[i];\n\t\tThreadInfo.ExePath=exepath;\n\t\tCloseHandle(CreateThread( NULL, 0, StartDebug, &ThreadInfo, 0, NULL)); \n\t}\n\telse\n\tif ((TargetMaps[i].flags7 & INJECTSUSPENDED) &&\n\t\t(TargetMaps[i].flags3 & HOOKENABLED)){\n\t\tOutTrace(\"injectsuspended mode\\n\");\n\t\tInjectSuspended(exepath, folderpath); \n\t}\n\telse{\n\t\tOutTrace(\"setwindowshook mode\\n\");\n\t\tCreateProcess(NULL, \n\t\t\texepath, \n\t\t\t0, 0, false, CREATE_DEFAULT_ERROR_MODE, NULL, folderpath, &sinfo, &pinfo);\n\t\tCloseHandle(pinfo.hProcess); // no longer needed, avoid handle leakage\n\t\tCloseHandle(pinfo.hThread); // no longer needed, avoid handle leakage\n\t}\n\n\tif(gTransientMode){\n\t\tpm.launch = &(PrivateMaps[i].launchpath[0]);\n\t\tpm.path   = &(TargetMaps[i].path[0]);\n\t\tCreateThread( NULL, 0, TransientWaitForChildDeath, &pm, 0, NULL); \n\t}\n\n\t// wait & recover\n\tCreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)RecoverTargetMaps, (LPVOID)TargetMaps, 0, NULL);\n\t// go to tray icon mode when autohide is set, but only if hooking is enabled. If not enable it \n\t// is not possible to monitor the process status, so the window will never show automatically!\n\tif(gAutoHideMode && !bForceNoHook) this->OnGoToTrayIcon();\n\n\t// not working: the file is opened, can't be deleted\n\t//if(TargetMaps[i].flags7 & COPYNOSHIMS){\n\t//\tDeleteFile(exepath);\n\t//}\n}\n\nvoid SwitchToColorDepth(int bpp)\n{\n\tDEVMODE CurrentDevMode;\n\tBOOL res;\n\tEnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &CurrentDevMode);\n\n\tif(MessageBoxLangArg(DXW_STRING_NEWCOLOR, DXW_STRING_WARNING, MB_OKCANCEL | MB_ICONQUESTION, CurrentDevMode.dmBitsPerPel, bpp)!=IDOK) \n\t\treturn;\n\n\t//OutTraceDW(\"ChangeDisplaySettings: CURRENT wxh=(%dx%d) BitsPerPel=%d -> 16\\n\", \n\t//\tCurrentDevMode.dmPelsWidth, CurrentDevMode.dmPelsHeight, CurrentDevMode.dmBitsPerPel);\n\tCurrentDevMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;\n\tCurrentDevMode.dmBitsPerPel = bpp;\n\tres=ChangeDisplaySettings(&CurrentDevMode, CDS_UPDATEREGISTRY);\n\tif(res!=DISP_CHANGE_SUCCESSFUL) {\n\t\tWCHAR *err;\n\t\tswitch(res){\n\t\t\tcase DISP_CHANGE_BADDUALVIEW: err=L\"BADDUALVIEW\"; break;\n\t\t\tcase DISP_CHANGE_BADFLAGS: err=L\"BADFLAGS\"; break;\n\t\t\tcase DISP_CHANGE_BADMODE: err=L\"BADMODE\"; break;\n\t\t\tcase DISP_CHANGE_BADPARAM: err=L\"BADPARAM\"; break;\n\t\t\tcase DISP_CHANGE_FAILED: err=L\"FAILED\"; break;\n\t\t\tcase DISP_CHANGE_NOTUPDATED: err=L\"NOTUPDATED\"; break;\n\t\t\tcase DISP_CHANGE_RESTART: err=L\"RESTART\"; break;\n\t\t\tdefault: err=L\"???\"; break;\n\t\t}\n\t\tMessageBoxLangArg(DXW_STRING_ERRCOLOR, DXW_STRING_ERROR, MB_OK | MB_ICONEXCLAMATION, err, GetLastError());\n\t}\n}\n\nvoid CDxwndhostView::OnDesktopcolordepth8bpp()\n{\n\tSwitchToColorDepth(8);\n}\n\nvoid CDxwndhostView::OnDesktopcolordepth16bpp()\n{\n\tSwitchToColorDepth(16);\n}\n\nvoid CDxwndhostView::OnDesktopcolordepth24bpp()\n{\n\tSwitchToColorDepth(24);\n}\n\nvoid CDxwndhostView::OnDesktopcolordepth32bpp()\n{\n\tSwitchToColorDepth(32);\n}\n\nvoid CDxwndhostView::OnRecoverScreenMode()\n{\n\tRevertScreenChanges(&this->InitDevMode);\n}\n\nvoid CDxwndhostView::OnRecoverSystemColors()\n{\n\textern DWORD SysColors[];\n\t//for(int index=COLOR_SCROLLBAR; index<=COLOR_MENUBAR; index++) {\n\tfor(int index=COLOR_SCROLLBAR; index<=COLOR_BTNHIGHLIGHT; index++) { // don't mess with taskbar ...\n\t\tif(SysColors[index]) {\n\t\t\tINT colors[1];\n\t\t\tcolors[0]=index;\n\t\t\t::SetSysColors(1, colors, &SysColors[index]);\n\t\t}\n\t}\n}\n\nvoid CDxwndhostView::OnClearCompatibilityFlags()\n{\n\tint i;\n\tPOSITION pos;\n\tCListCtrl& listctrl = GetListCtrl();\n\tCString\tFilePath;\n\tHRESULT res;\n\tchar sMessage[500];\n\tDWORD lKeyLength;\n\tLONG ret;\n\n\tif(!listctrl.GetSelectedCount()) return ;\n\tpos = listctrl.GetFirstSelectedItemPosition();\n\ti = listctrl.GetNextSelectedItem(pos);\n\n\t//sprintf(sMessage, \"Clear all compatibility flags for \\\"%s\\\"?\", PrivateMaps[i].title);\n\t//res=MessageBox(sMessage, \"DxWnd\", MB_YESNO | MB_ICONQUESTION);\n\tres=MessageBoxLangArg(DXW_STRING_CLEAR_COMP, DXW_STRING_DXWND, MB_YESNO | MB_ICONQUESTION, PrivateMaps[i].title);\n\tif(res!=IDYES) return;\n\n\tFilePath=TargetMaps[i].path;\n\tif (FilePath.GetLength()==0) return;\n\n\tHKEY hk;\n\tlKeyLength = 0L;\n\tDWORD lType;\n\tret=RegOpenKeyEx(HKEY_CURRENT_USER, \n\t\t\"SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\AppCompatFlags\\\\Layers\", 0, KEY_ALL_ACCESS, &hk);\n\tif(ret){\n\t\tif(ret != ERROR_FILE_NOT_FOUND){\t\t\n\t\t\tsprintf(sMessage, \"error %ld in RegOpenKeyEx HKEY_CURRENT_USER\", ret);\n\t\t\tMessageBox(sMessage, \"DxWnd\", MB_OK);\n\t\t}\n\t}\n\telse {\n\t\tret=RegQueryValueEx(hk, TargetMaps[i].path, NULL, &lType, NULL, &lKeyLength);\n\t\tif(ret && (ret != ERROR_FILE_NOT_FOUND)){\n\t\t\tsprintf(sMessage, \"error %ld in RegQueryValue hk=%lx \\\"%s\\\"\", ret, hk, TargetMaps[i].path);\n\t\t\tMessageBox(sMessage, \"DxWnd\", MB_OK);\n\t\t}\n\t\tif(lKeyLength > 0L) {\n\t\t\tMessageBox(\"Found compatibility flag in HKEY_CURRENT_USER\", \"DxWnd\", MB_OK);\n\t\t\tif(ret = RegDeleteValue(hk, TargetMaps[i].path)) {\n\t\t\t\tsprintf(sMessage, \"error %ld in RegDeleteValue hk=%lx \\\"%s\\\"\", ret, hk, TargetMaps[i].path);\n\t\t\t\tMessageBox(sMessage, \"DxWnd\", MB_OK);\n\t\t\t}\n\t\t}\n\t\tRegCloseKey(hk);\n\t}\n\n\thk=0L;\n\tlKeyLength = 0L;\n\tret=RegOpenKeyEx(HKEY_LOCAL_MACHINE, \n\t\t\"SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\AppCompatFlags\\\\Layers\", 0, KEY_ALL_ACCESS, &hk);\n\tif(ret){\n\t\tif(ret != ERROR_FILE_NOT_FOUND){\n\t\t\tsprintf(sMessage, \"error %ld in RegOpenKeyEx HKEY_LOCAL_MACHINE\", ret);\n\t\t\tMessageBox(sMessage, \"DxWnd\", MB_OK);\n\t\t}\n\t}\n\telse{\n\t\tret=RegQueryValueEx(hk, TargetMaps[i].path, NULL, &lType, NULL, &lKeyLength);\n\t\tif(ret && (ret != ERROR_FILE_NOT_FOUND)){\n\t\t\t\tsprintf(sMessage, \"error %ld in RegQueryValue hk=%lx \\\"%s\\\"\", ret, hk, TargetMaps[i].path);\n\t\t\t\tMessageBox(sMessage, \"DxWnd\", MB_OK);\n\t\t}\n\t\tif(lKeyLength > 0L) {\n\t\t\tMessageBox(\"Found compatibility flag in HKEY_LOCAL_MACHINE\", \"DxWnd\", MB_OK);\n\t\t\tif(ret = RegDeleteValue(hk, TargetMaps[i].path)) {\n\t\t\t\tsprintf(sMessage, \"error %ld in RegDeleteValue hk=%lx \\\"%s\\\"\", ret, hk, TargetMaps[i].path);\n\t\t\t\tMessageBox(sMessage, \"DxWnd\", MB_OK);\n\t\t\t}\n\t\t}\n\t\tRegCloseKey(hk);\n\t}\n}\n\nvoid CDxwndhostView::OnDropFiles(HDROP dropInfo)\n{\n\tCString sFile;\n\tDWORD nBuffer = 0;\n\tchar *p;\n\t// Get number of files\n\tUINT nFilesDropped = DragQueryFile(dropInfo, 0xFFFFFFFF, NULL, 0);\n\tif(nFilesDropped > 0){\n\t\tnBuffer = DragQueryFile(dropInfo, 0, NULL, 0);\n\t\tDragQueryFile(dropInfo, 0, sFile.GetBuffer(nBuffer+1), nBuffer+1);\n\t\tp = (char *)sFile.GetString();\n\t\tp += (strlen(p)-4);\n\t\tif(!_strnicmp(p, \".dxw\", 4)){\n\t\t\tfor(UINT i=1; i<=nFilesDropped; i++){\n\t\t\t\tif(!this->OnImport(sFile)) break;\n\t\t\t\tnBuffer = DragQueryFile(dropInfo, i, NULL, 0);\n\t\t\t\tDragQueryFile(dropInfo, i, sFile.GetBuffer(nBuffer+1), nBuffer+1);\n\t\t\t\tp = (char *)sFile.GetString();\n\t\t\t\tp += (strlen(p)-4);\n\t\t\t\tif(_strnicmp(p, \".dxw\", 4)) break;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis->OnAdd(sFile.GetBuffer());\n\t\t}\n\t\tsFile.ReleaseBuffer();\n\t}\n\tDragFinish(dropInfo);\n}\n\n"
  },
  {
    "path": "host/dxwndhostView.h",
    "content": "// dxwndhostView.h : CDxwndhostView class definition and interface declarations.\n//\n/////////////////////////////////////////////////////////////////////////////\n\n#include \"SystemTray.h\"\n\n#if !defined(AFX_DXWNDHOSTVIEW_H__E8E112CE_6FE9_4F01_AB94_D53F844D5A09__INCLUDED_)\n#define AFX_DXWNDHOSTVIEW_H__E8E112CE_6FE9_4F01_AB94_D53F844D5A09__INCLUDED_\n\n#if _MSC_VER > 1000\n#pragma once\n#endif // _MSC_VER > 1000\n\nclass CDxwndhostView : public CListView\n{\nprotected: // Create from serialization only features.\n\tCDxwndhostView();\n\tafx_msg void OnHotKey(UINT, UINT, UINT);\n\tDECLARE_DYNCREATE(CDxwndhostView)\n\tBOOL isUpdated;\n\tBOOL isRegistryUpdated;\n\tvoid SaveConfigFile();\n\tBOOL OnInitDialog();\n\nprivate:\n\tvoid Resize(void);\n\tTARGETMAP TargetMaps[MAXTARGETS];\n\tPRIVATEMAP PrivateMaps[MAXTARGETS];\n\tDEVMODE InitDevMode;\n\tCSystemTray SystemTray;\n\tint LastX, LastY, LastCX, LastCY;\n\tCImageList m_cImageListNormal, m_cImageListSmall;\n\n// Attributes\npublic:\n\tCDxwndhostDoc* GetDocument();\n\n// Operation\npublic:\n\n// Override\n\t// ClassWizard Generates a virtual function overrides.\n\t//{{AFX_VIRTUAL(CDxwndhostView)\n\tpublic:\n\tvirtual void OnDraw(CDC* pDC);  // Be overridden when rendering this view.\n\tvirtual BOOL PreCreateWindow(CREATESTRUCT& cs);\n\tprotected:\n\tvirtual void OnInitialUpdate(); // Called once after the initial construction.\n\tvoid UpdateHotKeys();\n\t//}}AFX_VIRTUAL\n\n// Implementation\npublic:\n\tvirtual ~CDxwndhostView();\n#ifdef _DEBUG\n\tvirtual void AssertValid() const;\n\tvirtual void Dump(CDumpContext& dc) const;\n#endif\n\nprotected:\n\n// Generated message map functions\nprotected:\n\t//{{AFX_MSG(CDxwndhostView)\n\tafx_msg void OnDblclk(NMHDR* pNMHDR, LRESULT* pResult);\n\tafx_msg void OnAdd();\n\tafx_msg void OnAdd(char *);\n\tafx_msg void OnDuplicate();\n\tafx_msg void OnModify();\n\tafx_msg void OnExport();\n\tafx_msg void OnImport();\n\tBOOL OnImport(CString);\n\tafx_msg void OnDelete();\n\tafx_msg void OnExplore();\n\tafx_msg void OnKill();\n\tafx_msg void OnProcessKill();\n\tafx_msg void OnProcessKill(BOOL);\n\tafx_msg void OnProcessKillAll();\n\tafx_msg void OnPause();\n\tafx_msg void OnResume();\n\tafx_msg void OnWindowRestore();\n\tafx_msg void OnWindowMinimize();\n\tafx_msg void OnWindowClose();\n\tafx_msg void OnTaskbarHide();\n\tafx_msg void OnTaskbarShow();\n\tafx_msg void OnSort();\n\tafx_msg void OnGlobalSettings();\n\tafx_msg void OnExpertModeToggle();\n\tafx_msg void OnViewLog();\n\tafx_msg void OnDeleteLog();\n\tafx_msg void OnDebugView();\n\tafx_msg void OnSetRegistry();\n\tafx_msg void OnSetPath();\n\tafx_msg void OnRButtonDown(UINT nFlags, CPoint point);\n\tafx_msg void OnRun();\n\tafx_msg void OnRun(BOOL);\n\tafx_msg void OnClearAllLogs();\n\tafx_msg void OnGoToTrayIcon();\n\tafx_msg void OnSaveFile();\n\tafx_msg void OnHookStart();\n\tafx_msg void OnInitMenu();\n\tafx_msg void OnHookStop();\n\tafx_msg void OnTrayRestore();\n\tafx_msg void OnViewStatus();\n\tafx_msg void OnViewShims();\n\tafx_msg void OnViewDesktop();\n\tafx_msg void OnViewPalette();\n\tafx_msg void OnViewTimeSlider();\n\tafx_msg void OnViewVirtualJoystick();\n\tafx_msg void OnExit();\n\tafx_msg void OnDesktopcolordepth8bpp();\n\tafx_msg void OnDesktopcolordepth16bpp();\n\tafx_msg void OnDesktopcolordepth24bpp();\n\tafx_msg void OnDesktopcolordepth32bpp();\n\tafx_msg void OnRecoverScreenMode();\n\tafx_msg void OnClearCompatibilityFlags();\n\tafx_msg void OnRecoverSystemColors();\n\tafx_msg void OnMoveTop();\n\tafx_msg void OnMoveUp();\n\tafx_msg void OnMoveDown();\n\tafx_msg void OnMoveBottom();\n\tafx_msg void OnDropFiles(HDROP hDropInfo);\n\tafx_msg void OnViewFlags();\n\t//}}AFX_MSG\n\tDECLARE_MESSAGE_MAP()\n};\n\n#ifndef _DEBUG  // dxwndhostView.cpp for debugging environment.\ninline CDxwndhostDoc* CDxwndhostView::GetDocument()\n   { return (CDxwndhostDoc*)m_pDocument; }\n#endif\n\n/////////////////////////////////////////////////////////////////////////////\n\n//{{AFX_INSERT_LOCATION}}\n// Microsoft Visual C++ Will insert additional declarations immediately before the previous line.\n\n#endif // !defined(AFX_DXWNDHOSTVIEW_H__E8E112CE_6FE9_4F01_AB94_D53F844D5A09__INCLUDED_)\n"
  },
  {
    "path": "host/findwindow.cpp",
    "content": "#include <windows.h>\n#include \"stdafx.h\"\n\nstruct handle_data {\n    unsigned long process_id;\n    HWND best_handle;\n};\n\nstatic BOOL is_main_window(HWND handle)\n{   \n    return GetWindow(handle, GW_OWNER) == (HWND)0 && IsWindowVisible(handle);\n}\n\n\nstatic BOOL CALLBACK enum_windows_callback(HWND handle, LPARAM lParam)\n{\n    handle_data& data = *(handle_data*)lParam;\n    unsigned long process_id = 0;\n    GetWindowThreadProcessId(handle, &process_id);\n    if (data.process_id != process_id || !is_main_window(handle)) {\n        return TRUE;\n    }\n    data.best_handle = handle;\n    return FALSE;   \n}\n\nHWND find_main_window(unsigned long process_id)\n{\n    handle_data data;\n    data.process_id = process_id;\n    data.best_handle = 0;\n    EnumWindows(enum_windows_callback, (LPARAM)&data);\n    return data.best_handle;\n}\n"
  },
  {
    "path": "host/getfname.cpp",
    "content": "#include \"stdafx.h\"\n#include <map>\n#include<Dbghelp.h>\n#include <psapi.h>\n\n#include \"shlwapi.h\"\n\n#define BUFSIZE 512\n\n//Cstring GetFileNameFromHandle(HANDLE hFile) \nchar *GetFileNameFromHandle(HANDLE hFile) \n{\n\tBOOL bSuccess = FALSE;\n\tTCHAR pszFilename[MAX_PATH+1];\n\tHANDLE hFileMap;\n\t//CString strFilename;\n\tstatic char strFilename[MAX_PATH+1];\n\t// Get the file size.\n\tDWORD dwFileSizeHi = 0;\n\tDWORD dwFileSizeLo = GetFileSize(hFile, &dwFileSizeHi); \n\tif( dwFileSizeLo == 0 && dwFileSizeHi == 0 ) return FALSE;\n\ttypedef DWORD (WINAPI *GetMappedFileName_Type)(HANDLE, LPVOID, LPTSTR, DWORD);\n\tstatic GetMappedFileName_Type pGetMappedFileName = NULL;\n\n\tif(!pGetMappedFileName) do { // fake loop\n\t\tHMODULE lib;\n\t\t// Psapi.dll (if PSAPI_VERSION=1) on Windows 7 and Windows Server 2008 R2;\n\t\t// Psapi.dll on Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP\n\t\tlib=LoadLibrary(\"Psapi.dll\");\n\t\tpGetMappedFileName=(GetMappedFileName_Type)GetProcAddress(lib,\"GetMappedFileNameA\");\n\t\tif(pGetMappedFileName) break;\n\t\t// Kernel32.dll on Windows 7 and Windows Server 2008 R2; \n\t\tFreeLibrary(lib);\n\t\tlib=LoadLibrary(\"Kernel32.dll\");\n\t\tpGetMappedFileName=(GetMappedFileName_Type)GetProcAddress(lib,\"GetMappedFileNameA\");\n\t\tif(!pGetMappedFileName) return NULL;\n\t} while(FALSE);\n\n\t// Create a file mapping object.\n\thFileMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 1, NULL);\n\tif (hFileMap) {\n\t\t// Create a file mapping to get the file name.\n\t\tvoid* pMem = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 1);\n\t\tif (pMem) {\n\t\t\tif ((*pGetMappedFileName) (GetCurrentProcess(), pMem, pszFilename, MAX_PATH)){\n\t\t\t\t// Translate path with device name to drive letters.\n\t\t\t\tTCHAR szTemp[BUFSIZE];\n\t\t\t\tszTemp[0] = '\\0';\n\t\t\t\tif (GetLogicalDriveStrings(BUFSIZE-1, szTemp)) {\n\t\t\t\t\tTCHAR szName[MAX_PATH];\n\t\t\t\t\tTCHAR szDrive[3] = TEXT(\" :\");\n\t\t\t\t\tBOOL bFound = FALSE;\n\t\t\t\t\tTCHAR* p = szTemp;\n\t\t\t\t\tdo {\n\t\t\t\t\t\t// Copy the drive letter to the template string\n\t\t\t\t\t\t*szDrive = *p;\n\t\t\t\t\t\t// Look up each device name\n\t\t\t\t\t\tif (QueryDosDevice(szDrive, szName, MAX_PATH)){\n\t\t\t\t\t\t\tsize_t uNameLen = _tcslen(szName);\n\t\t\t\t\t\t\tif (uNameLen < MAX_PATH) {\n\t\t\t\t\t\t\t\tbFound = _tcsnicmp(pszFilename, szName, uNameLen) == 0;\n\t\t\t\t\t\t\t\t//if (bFound) strFilename.Format(L\"%s%s\",szDrive, pszFilename+uNameLen);\n\t\t\t\t\t\t\t\tif (bFound) sprintf(strFilename, \"%s%s\", szDrive, pszFilename+uNameLen);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Go to the next NULL character.\n\t\t\t\t\t\twhile (*p++);\n\t\t\t\t\t} while (!bFound && *p); // end of string\n\t\t\t\t}\n\t\t\t}\n\t\t\tbSuccess = TRUE;\n\t\t\tUnmapViewOfFile(pMem);\n\t\t} \n\t\tCloseHandle(hFileMap);\n\t}\n\treturn(strFilename);\n}\n\n"
  },
  {
    "path": "host/host.rc",
    "content": "#include \"afxres.rc\"\n"
  },
  {
    "path": "host/res/dxwndhost.rc2",
    "content": "//\n// DXWNDHOST.RC2 - this file is not editable by Microsoft Visual C++\n//\n\n#ifdef APSTUDIO_INVOKED\n\t#error this file is not editable by Microsoft Visual C++\n#endif //APSTUDIO_INVOKED\n\n\n/////////////////////////////////////////////////////////////////////////////\n// If you want to edit your own resources, please add here... \n\n/////////////////////////////////////////////////////////////////////////////\n"
  },
  {
    "path": "host/resource1.h",
    "content": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by host.rc\n\n// Next default values for new objects\n// \n#ifdef APSTUDIO_INVOKED\n#ifndef APSTUDIO_READONLY_SYMBOLS\n#define _APS_NEXT_RESOURCE_VALUE        101\n#define _APS_NEXT_COMMAND_VALUE         40001\n#define _APS_NEXT_CONTROL_VALUE         1001\n#define _APS_NEXT_SYMED_VALUE           101\n#endif\n#endif\n"
  },
  {
    "path": "locale/cn/Resources_Cn.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Resources_CN\", \"Resources_CN.vcproj\", \"{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "locale/cn/Resources_Cn.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"Resources_CN\"\n\tProjectGUID=\"{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}\"\n\tRootNamespace=\"Resources_CN\"\n\tKeyword=\"Win32Proj\"\n\tTargetFrameworkVersion=\"196613\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\"..\\..\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(ConfigurationName)\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tCharacterSet=\"1\"\n\t\t\tEnableManagedIncrementalBuild=\"0\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\host\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tResourceOnlyDLL=\"true\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\"..\\..\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(ConfigurationName)\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tCharacterSet=\"1\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\tEnableManagedIncrementalBuild=\"0\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tEnableIntrinsicFunctions=\"true\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\host\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tResourceOnlyDLL=\"true\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx\"\n\t\t\tUniqueIdentifier=\"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Resources_CN.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc;xsd\"\n\t\t\tUniqueIdentifier=\"{93995380-89BD-4b04-88EB-625FBE52EBFB}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav\"\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\bigicons.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\dxw1.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\dxw2.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\dxw5.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\gho.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\palette24.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run+33.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run+66.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-0.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-180.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-33.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-66.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-90.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\smallicons.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "locale/en/Resources_En.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Resources_EN\", \"Resources_En.vcproj\", \"{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "locale/en/Resources_En.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"Resources_EN\"\n\tProjectGUID=\"{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}\"\n\tRootNamespace=\"Resources_CN\"\n\tKeyword=\"Win32Proj\"\n\tTargetFrameworkVersion=\"196613\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\"..\\..\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(ConfigurationName)\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tCharacterSet=\"1\"\n\t\t\tEnableManagedIncrementalBuild=\"0\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\host\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tResourceOnlyDLL=\"true\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\"..\\..\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(ConfigurationName)\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tCharacterSet=\"1\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\tEnableManagedIncrementalBuild=\"0\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tEnableIntrinsicFunctions=\"true\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\host\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tResourceOnlyDLL=\"true\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx\"\n\t\t\tUniqueIdentifier=\"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Resources_EN.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc;xsd\"\n\t\t\tUniqueIdentifier=\"{93995380-89BD-4b04-88EB-625FBE52EBFB}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav\"\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\bigicons.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\dxw1.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\dxw2.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\dxw5.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\gho.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\palette24.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run+33.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run+66.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-0.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-180.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-33.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-66.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-90.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\smallicons.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "locale/it/Resources_It.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Resources_IT\", \"Resources_It.vcproj\", \"{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "locale/it/Resources_It.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"Resources_IT\"\n\tProjectGUID=\"{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}\"\n\tRootNamespace=\"Resources_CN\"\n\tKeyword=\"Win32Proj\"\n\tTargetFrameworkVersion=\"196613\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\"..\\..\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(ConfigurationName)\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tCharacterSet=\"1\"\n\t\t\tEnableManagedIncrementalBuild=\"0\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\host\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tResourceOnlyDLL=\"true\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\"..\\..\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(ConfigurationName)\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tCharacterSet=\"1\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\tEnableManagedIncrementalBuild=\"0\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tEnableIntrinsicFunctions=\"true\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\host\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tResourceOnlyDLL=\"true\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx\"\n\t\t\tUniqueIdentifier=\"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Resources_IT.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc;xsd\"\n\t\t\tUniqueIdentifier=\"{93995380-89BD-4b04-88EB-625FBE52EBFB}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav\"\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\bigicons.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\dxw1.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\dxw2.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\dxw5.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\gho.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\palette24.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run+33.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run+66.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-0.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-180.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-33.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-66.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-90.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\smallicons.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "locale/ru/Resources_Ru.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"Resources_RU\", \"Resources_Ru.vcproj\", \"{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "locale/ru/Resources_Ru.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"Resources_RU\"\n\tProjectGUID=\"{F8D07BBB-A04B-4C0C-8AF8-7F839A152456}\"\n\tRootNamespace=\"Resources_CN\"\n\tKeyword=\"Win32Proj\"\n\tTargetFrameworkVersion=\"196613\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\"..\\..\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(ConfigurationName)\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tCharacterSet=\"1\"\n\t\t\tEnableManagedIncrementalBuild=\"0\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"3\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\host\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tResourceOnlyDLL=\"true\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\"..\\..\\$(ConfigurationName)\"\n\t\t\tIntermediateDirectory=\"$(ConfigurationName)\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tCharacterSet=\"1\"\n\t\t\tWholeProgramOptimization=\"1\"\n\t\t\tEnableManagedIncrementalBuild=\"0\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tEnableIntrinsicFunctions=\"true\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS\"\n\t\t\t\tRuntimeLibrary=\"2\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tUsePrecompiledHeader=\"2\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tDebugInformationFormat=\"3\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tAdditionalIncludeDirectories=\"..\\..\\host\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tSubSystem=\"2\"\n\t\t\t\tOptimizeReferences=\"2\"\n\t\t\t\tEnableCOMDATFolding=\"2\"\n\t\t\t\tResourceOnlyDLL=\"true\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx\"\n\t\t\tUniqueIdentifier=\"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\Resources_RU.rc\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl;inc;xsd\"\n\t\t\tUniqueIdentifier=\"{93995380-89BD-4b04-88EB-625FBE52EBFB}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\resource.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav\"\n\t\t\tUniqueIdentifier=\"{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\bigicons.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\dxw1.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\dxw2.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\dxw5.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\gho.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\palette24.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run+33.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run+66.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-0.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-180.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-33.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-66.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\run-90.ico\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\res\\smallicons.bmp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<File\n\t\t\tRelativePath=\".\\resource\"\n\t\t\t>\n\t\t</File>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "proxy/d3d8.cpp",
    "content": "//------------------------------------------------------------------------------\n// Tiny DirectDraw Proxy DLL v1.0 [28.05.2010]\n// Copyright 2010 Evgeny Vrublevsky <veg@tut.by>\n//------------------------------------------------------------------------------\n#define APP_NAME\t\t\"Tiny DirectDraw Proxy\"\n#define APP_VERSION\t\t\"1.0 [28.05.2010]\"\n\n#define WIN32_LEAN_AND_MEAN\n#include <windows.h>\n#include <ctype.h>\n\nvoid InitDxWnd(void);\nvoid DxWndEndHook(void);\n\nstruct ddraw_dll\n{\n\tHMODULE dll;\n\tFARPROC\tDirect3DCreate8;\n\tFARPROC\tDebugSetMute;\n\tFARPROC\tValidateVertexShader;\n\tFARPROC\tValidatePixelShader;\n} d3d8;\n\n__declspec(naked) void FakeDirect3DCreate8()\t\t\t{ _asm { jmp [d3d8.Direct3DCreate8] } }\n__declspec(naked) void FakeDebugSetMute()\t\t\t\t{ _asm { jmp [d3d8.DebugSetMute] } }\n__declspec(naked) void FakeValidateVertexShader()\t\t{ _asm { jmp [d3d8.ValidateVertexShader] } }\n__declspec(naked) void FakeValidatePixelShader()\t\t{ _asm { jmp [d3d8.ValidatePixelShader] } }\n\nBOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)\n{\n\tchar path[MAX_PATH];\n\tswitch (ul_reason_for_call)\n\t{\n\t\tcase DLL_PROCESS_ATTACH:\n\t\t{\n\t\t\tCopyMemory(path+GetSystemDirectory(path,MAX_PATH-10), \"\\\\d3d8.dll\",11);\n\t\t\td3d8.dll = LoadLibrary(path);\n\t\t\tif (d3d8.dll == false)\n\t\t\t{\n\t\t\t\tMessageBox(0, \"Cannot load original d3d8.dll library\", APP_NAME, MB_ICONERROR);\n\t\t\t\tExitProcess(0);\n\t\t\t}\n\t\t\td3d8.Direct3DCreate8\t\t\t= GetProcAddress(d3d8.dll, \"Direct3DCreate8\");\n\t\t\td3d8.DebugSetMute\t\t\t\t= GetProcAddress(d3d8.dll, \"DebugSetMute\");\n\t\t\td3d8.ValidateVertexShader\t\t= GetProcAddress(d3d8.dll, \"ValidateVertexShader\");\n\t\t\td3d8.ValidatePixelShader\t\t= GetProcAddress(d3d8.dll, \"ValidatePixelShader\");\n\n\t\t\tInitDxWnd();\n\t\t\tbreak;\n\t\t}\n\t\tcase DLL_PROCESS_DETACH:\n\t\t{\n\t\t\tDxWndEndHook();\n\t\t\tFreeLibrary(d3d8.dll);\n\t\t}\n\t\tbreak;\n\t}\n\treturn TRUE;\n}\n"
  },
  {
    "path": "proxy/d3d8.def",
    "content": "LIBRARY \"ddraw\"\nEXPORTS\nValidatePixelShader\t\t\t= FakeValidatePixelShader\t\t\t@1\nValidateVertexShader\t\t= FakeValidateVertexShader\t\t\t@2\nDebugSetMute\t\t\t\t= FakeDebugSetMute\t\t\t\t\t@3\nDirect3DCreate8\t\t\t\t= FakeDirect3DCreate8\t\t\t\t@4\n"
  },
  {
    "path": "proxy/d3d8.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"d3d8\", \"d3d8.vcproj\", \"{579E7FE7-2745-4100-A802-23511711FCDE}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "proxy/d3d8.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"d3d8\"\n\tProjectGUID=\"{579E7FE7-2745-4100-A802-23511711FCDE}\"\n\tRootNamespace=\"dxwnd\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/dxwnd.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tAdditionalOptions=\"/IInclude\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\".;../Include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS;_USRDLL;DXWND_EXPORTS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tExceptionHandling=\"2\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/dxwnd.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"shlwapi.lib odbc32.lib odbccp32.lib\"\n\t\t\t\tOutputFile=\"../Debug/d3d8.dll\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tAdditionalLibraryDirectories=\"\"\n\t\t\t\tIgnoreAllDefaultLibraries=\"false\"\n\t\t\t\tIgnoreDefaultLibraryNames=\"\"\n\t\t\t\tModuleDefinitionFile=\".\\d3d8.def\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/dxwnd.pdb\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\".\\Debug/dxwnd.lib\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/dxwnd.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/dxwnd.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"../Include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS;_USRDLL;DXWND_EXPORTS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"2\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tOpenMP=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/dxwnd.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"1041\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"../Release/d3d8.dll\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tModuleDefinitionFile=\".\\d3d8.def\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/dxwnd.pdb\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\".\\Release/dxwnd.lib\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/dxwnd.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\d3d8.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\init.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Include\\dxwnd.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ini.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "proxy/d3d9.cpp",
    "content": "//------------------------------------------------------------------------------\n// Tiny DirectDraw Proxy DLL v1.0 [28.05.2010]\n// Copyright 2010 Evgeny Vrublevsky <veg@tut.by>\n//------------------------------------------------------------------------------\n#define APP_NAME\t\t\"Tiny DirectDraw Proxy\"\n#define APP_VERSION\t\t\"1.0 [28.05.2010]\"\n\n#define WIN32_LEAN_AND_MEAN\n#include <windows.h>\n#include <ctype.h>\n\nvoid InitDxWnd(void);\nvoid DxWndEndHook(void);\n\nstruct d3d9_dll\n{\n\tHMODULE dll;\n\tFARPROC\tDirect3DShaderValidatorCreate9;\n\tFARPROC\tPSGPError;\n\tFARPROC\tPSGPSampleTexture;\n\tFARPROC\tD3DPERF_BeginEvent;\n\tFARPROC\tD3DPERF_EndEvent;\n\tFARPROC\tD3DPERF_GetStatus;\n\tFARPROC\tD3DPERF_QueryRepeatFrame;\n\tFARPROC\tD3DPERF_SetMarker;\n\tFARPROC\tD3DPERF_SetOptions;\n\tFARPROC\tD3DPERF_SetRegion;\n\tFARPROC\tDebugSetLevel;\n\tFARPROC\tDebugSetMute;\n\tFARPROC\tDirect3DCreate9;\n\tFARPROC\tDirect3DCreate9Ex;\n} d3d9;\n\n__declspec(naked) void FakeDirect3DShaderValidatorCreate9()\t{ _asm { jmp [d3d9.Direct3DShaderValidatorCreate9] } }\n__declspec(naked) void FakePSGPError()\t\t\t\t\t\t{ _asm { jmp [d3d9.PSGPError] } }\n__declspec(naked) void FakePSGPSampleTexture()\t\t\t\t{ _asm { jmp [d3d9.PSGPSampleTexture] } }\n__declspec(naked) void FakeD3DPERF_BeginEvent()\t\t\t\t{ _asm { jmp [d3d9.D3DPERF_BeginEvent] } }\n__declspec(naked) void FakeD3DPERF_EndEvent()\t\t\t\t{ _asm { jmp [d3d9.D3DPERF_EndEvent] } }\n__declspec(naked) void FakeD3DPERF_GetStatus()\t\t\t\t{ _asm { jmp [d3d9.D3DPERF_GetStatus] } }\n__declspec(naked) void FakeD3DPERF_QueryRepeatFrame()\t\t{ _asm { jmp [d3d9.D3DPERF_QueryRepeatFrame] } }\n__declspec(naked) void FakeD3DPERF_SetMarker()\t\t\t\t{ _asm { jmp [d3d9.D3DPERF_SetMarker] } }\n__declspec(naked) void FakeD3DPERF_SetOptions()\t\t\t\t{ _asm { jmp [d3d9.D3DPERF_SetOptions] } }\n__declspec(naked) void FakeD3DPERF_SetRegion()\t\t\t\t{ _asm { jmp [d3d9.D3DPERF_SetRegion] } }\n__declspec(naked) void FakeDebugSetLevel()\t\t\t\t\t{ _asm { jmp [d3d9.DebugSetLevel] } }\n__declspec(naked) void FakeDebugSetMute()\t\t\t\t\t{ _asm { jmp [d3d9.DebugSetMute] } }\n__declspec(naked) void FakeDirect3DCreate9()\t\t\t\t{ _asm { jmp [d3d9.Direct3DCreate9] } }\n__declspec(naked) void FakeDirect3DCreate9Ex()\t\t\t\t{ _asm { jmp [d3d9.Direct3DCreate9Ex] } }\n\nBOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)\n{\n\tchar path[MAX_PATH];\n\tswitch (ul_reason_for_call)\n\t{\n\t\tcase DLL_PROCESS_ATTACH:\n\t\t{\n\t\t\tCopyMemory(path+GetSystemDirectory(path,MAX_PATH-10), \"\\\\d3d9.dll\",11);\n\t\t\td3d9.dll = LoadLibrary(path);\n\t\t\tif (d3d9.dll == false)\n\t\t\t{\n\t\t\t\tMessageBox(0, \"Cannot load original d3d9.dll library\", APP_NAME, MB_ICONERROR);\n\t\t\t\tExitProcess(0);\n\t\t\t}\n\t\t\td3d9.Direct3DShaderValidatorCreate9\t= GetProcAddress(d3d9.dll, \"Direct3DShaderValidatorCreate9\");\n\t\t\td3d9.PSGPError\t\t\t\t\t\t= GetProcAddress(d3d9.dll, \"PSGPError\");\n\t\t\td3d9.PSGPSampleTexture\t\t\t\t= GetProcAddress(d3d9.dll, \"PSGPSampleTexture\");\n\t\t\td3d9.D3DPERF_BeginEvent\t\t\t\t= GetProcAddress(d3d9.dll, \"D3DPERF_BeginEvent\");\n\t\t\td3d9.D3DPERF_EndEvent\t\t\t\t= GetProcAddress(d3d9.dll, \"D3DPERF_EndEvent\");\n\t\t\td3d9.D3DPERF_GetStatus\t\t\t\t= GetProcAddress(d3d9.dll, \"D3DPERF_GetStatus\");\n\t\t\td3d9.D3DPERF_QueryRepeatFrame\t\t= GetProcAddress(d3d9.dll, \"D3DPERF_QueryRepeatFrame\");\n\t\t\td3d9.D3DPERF_SetMarker\t\t\t\t= GetProcAddress(d3d9.dll, \"D3DPERF_SetMarker\");\n\t\t\td3d9.D3DPERF_SetOptions\t\t\t\t= GetProcAddress(d3d9.dll, \"D3DPERF_SetOptions\");\n\t\t\td3d9.D3DPERF_SetRegion\t\t\t\t= GetProcAddress(d3d9.dll, \"D3DPERF_SetRegion\");\n\t\t\td3d9.DebugSetLevel\t\t\t\t\t= GetProcAddress(d3d9.dll, \"DebugSetLevel\");\n\t\t\td3d9.DebugSetMute\t\t\t\t\t= GetProcAddress(d3d9.dll, \"DebugSetMute\");\n\t\t\td3d9.Direct3DCreate9\t\t\t\t= GetProcAddress(d3d9.dll, \"Direct3DCreate9\");\n\t\t\td3d9.Direct3DCreate9Ex\t\t\t\t= GetProcAddress(d3d9.dll, \"Direct3DCreate9Ex\");\n\t\t\tInitDxWnd();\n\t\t\tbreak;\n\t\t}\n\t\tcase DLL_PROCESS_DETACH:\n\t\t{\n\t\t\tDxWndEndHook();\n\t\t\tFreeLibrary(d3d9.dll);\n\t\t}\n\t\tbreak;\n\t}\n\treturn TRUE;\n}\n"
  },
  {
    "path": "proxy/d3d9.def",
    "content": "LIBRARY \"d3d9\"\nEXPORTS\nDirect3DShaderValidatorCreate9\t= FakeDirect3DShaderValidatorCreate9\t@1\nPSGPError\t\t\t\t\t\t= FakePSGPError\t\t\t\t\t\t\t@2\nPSGPSampleTexture\t\t\t\t= FakePSGPSampleTexture\t\t\t\t\t@3\nD3DPERF_BeginEvent\t\t\t\t= FakeD3DPERF_BeginEvent\t\t\t\t@4\nD3DPERF_EndEvent\t\t\t\t= FakeD3DPERF_EndEvent\t\t\t\t\t@5\nD3DPERF_GetStatus\t\t\t\t= FakeD3DPERF_GetStatus\t\t\t\t\t@6\nD3DPERF_QueryRepeatFrame\t\t= FakeD3DPERF_QueryRepeatFrame\t\t\t@7\nD3DPERF_SetMarker\t\t\t\t= FakeD3DPERF_SetMarker\t\t\t\t\t@8\nD3DPERF_SetOptions\t\t\t\t= FakeD3DPERF_SetOptions\t\t\t\t@9\nD3DPERF_SetRegion\t\t\t\t= FakeD3DPERF_SetRegion\t\t\t\t\t@10\nDebugSetLevel\t\t\t\t\t= FakeDebugSetLevel\t\t\t\t\t\t@11\nDebugSetMute\t\t\t\t\t= FakeDebugSetMute\t\t\t\t\t\t@12\nDirect3DCreate9\t\t\t\t\t= FakeDirect3DCreate9\t\t\t\t\t@13\nDirect3DCreate9Ex\t\t\t\t= FakeDirect3DCreate9Ex\t\t\t\t\t@14\n"
  },
  {
    "path": "proxy/d3d9.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"d3d9\", \"d3d9.vcproj\", \"{579E7FE7-2745-4100-A802-23511711FCDE}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "proxy/d3d9.txt",
    "content": "Direct3DShaderValidatorCreate9\nPSGPError\nPSGPSampleTexture\nD3DPERF_BeginEvent\nD3DPERF_EndEvent\nD3DPERF_GetStatus\nD3DPERF_QueryRepeatFrame\nD3DPERF_SetMarker\nD3DPERF_SetOptions\nD3DPERF_SetRegion\nDebugSetLevel\nDebugSetMute\nDirect3DCreate9\nDirect3DCreate9Ex\n\n"
  },
  {
    "path": "proxy/d3d9.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"d3d9\"\n\tProjectGUID=\"{579E7FE7-2745-4100-A802-23511711FCDE}\"\n\tRootNamespace=\"dxwnd\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/dxwnd.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tAdditionalOptions=\"/IInclude\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\".;../Include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS;_USRDLL;DXWND_EXPORTS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tExceptionHandling=\"2\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/dxwnd.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"shlwapi.lib odbc32.lib odbccp32.lib\"\n\t\t\t\tOutputFile=\"../Debug/d3d9.dll\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tAdditionalLibraryDirectories=\"\"\n\t\t\t\tIgnoreAllDefaultLibraries=\"false\"\n\t\t\t\tIgnoreDefaultLibraryNames=\"\"\n\t\t\t\tModuleDefinitionFile=\".\\d3d9.def\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/dxwnd.pdb\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\".\\Debug/dxwnd.lib\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/dxwnd.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/dxwnd.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"../Include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS;_USRDLL;DXWND_EXPORTS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"2\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tOpenMP=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/dxwnd.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"1041\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"../Release/d3d9.dll\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tModuleDefinitionFile=\".\\d3d9.def\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/dxwnd.pdb\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\".\\Release/dxwnd.lib\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/dxwnd.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\d3d9.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\init.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Include\\dxwnd.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ini.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "proxy/ddraw.cpp",
    "content": "//------------------------------------------------------------------------------\n// Tiny DirectDraw Proxy DLL v1.0 [28.05.2010]\n// Copyright 2010 Evgeny Vrublevsky <veg@tut.by>\n//------------------------------------------------------------------------------\n#define APP_NAME\t\t\"Tiny DirectDraw Proxy\"\n#define APP_VERSION\t\t\"1.0 [28.05.2010]\"\n\n#define WIN32_LEAN_AND_MEAN\n#include <windows.h>\n#include <ctype.h>\n\nvoid InitDxWnd(void);\nvoid DxWndEndHook(void);\n\nstruct ddraw_dll\n{\n\tHMODULE dll;\n\tFARPROC\tAcquireDDThreadLock;\n\tFARPROC\tCheckFullscreen;\n\tFARPROC\tCompleteCreateSysmemSurface;\n\tFARPROC\tD3DParseUnknownCommand;\n\tFARPROC\tDDGetAttachedSurfaceLcl;\n\tFARPROC\tDDInternalLock;\n\tFARPROC\tDDInternalUnlock;\n\tFARPROC\tDSoundHelp;\n\tFARPROC\tDirectDrawCreate;\n\tFARPROC\tDirectDrawCreateClipper;\n\tFARPROC\tDirectDrawCreateEx;\n\tFARPROC\tDirectDrawEnumerateA;\n\tFARPROC\tDirectDrawEnumerateExA;\n\tFARPROC\tDirectDrawEnumerateExW;\n\tFARPROC\tDirectDrawEnumerateW;\n\tFARPROC\tDllCanUnloadNow;\n\tFARPROC\tDllGetClassObject;\n\tFARPROC\tGetDDSurfaceLocal;\n\tFARPROC\tGetOLEThunkData;\n\tFARPROC\tGetSurfaceFromDC;\n\tFARPROC\tRegisterSpecialCase;\n\tFARPROC\tReleaseDDThreadLock;\n} ddraw;\n\n__declspec(naked) void FakeAcquireDDThreadLock()\t\t\t{ _asm { jmp [ddraw.AcquireDDThreadLock] } }\n__declspec(naked) void FakeCheckFullscreen()\t\t\t\t{ _asm { jmp [ddraw.CheckFullscreen] } }\n__declspec(naked) void FakeCompleteCreateSysmemSurface()\t{ _asm { jmp [ddraw.CompleteCreateSysmemSurface] } }\n__declspec(naked) void FakeD3DParseUnknownCommand()\t\t\t{ _asm { jmp [ddraw.D3DParseUnknownCommand] } }\n__declspec(naked) void FakeDDGetAttachedSurfaceLcl()\t\t{ _asm { jmp [ddraw.DDGetAttachedSurfaceLcl] } }\n__declspec(naked) void FakeDDInternalLock()\t\t\t\t\t{ _asm { jmp [ddraw.DDInternalLock] } }\n__declspec(naked) void FakeDDInternalUnlock()\t\t\t\t{ _asm { jmp [ddraw.DDInternalUnlock] } }\n__declspec(naked) void FakeDSoundHelp()\t\t\t\t\t\t{ _asm { jmp [ddraw.DSoundHelp] } }\n// HRESULT WINAPI DirectDrawCreate( GUID FAR *lpGUID, LPDIRECTDRAW FAR *lplpDD, IUnknown FAR *pUnkOuter );\n__declspec(naked) void FakeDirectDrawCreate()\t\t\t\t{ _asm { jmp [ddraw.DirectDrawCreate] } }\n// HRESULT WINAPI DirectDrawCreateClipper( DWORD dwFlags, LPDIRECTDRAWCLIPPER FAR *lplpDDClipper, IUnknown FAR *pUnkOuter );\n__declspec(naked) void FakeDirectDrawCreateClipper()\t\t{ _asm { jmp [ddraw.DirectDrawCreateClipper] } }\n// HRESULT WINAPI DirectDrawCreateEx( GUID FAR * lpGuid, LPVOID *lplpDD, REFIID iid,IUnknown FAR *pUnkOuter );\n__declspec(naked) void FakeDirectDrawCreateEx()\t\t\t\t{ _asm { jmp [ddraw.DirectDrawCreateEx] } }\n// HRESULT WINAPI DirectDrawEnumerateA( LPDDENUMCALLBACKA lpCallback, LPVOID lpContext );\n__declspec(naked) void FakeDirectDrawEnumerateA()\t\t\t{ _asm { jmp [ddraw.DirectDrawEnumerateA] } }\n// HRESULT WINAPI DirectDrawEnumerateExA( LPDDENUMCALLBACKEXA lpCallback, LPVOID lpContext, DWORD dwFlags );\n__declspec(naked) void FakeDirectDrawEnumerateExA()\t\t\t{ _asm { jmp [ddraw.DirectDrawEnumerateExA] } }\n// HRESULT WINAPI DirectDrawEnumerateExW( LPDDENUMCALLBACKEXW lpCallback, LPVOID lpContext, DWORD dwFlags );\n__declspec(naked) void FakeDirectDrawEnumerateExW()\t\t\t{ _asm { jmp [ddraw.DirectDrawEnumerateExW] } }\n// HRESULT WINAPI DirectDrawEnumerateW( LPDDENUMCALLBACKW lpCallback, LPVOID lpContext );\n__declspec(naked) void FakeDirectDrawEnumerateW()\t\t\t{ _asm { jmp [ddraw.DirectDrawEnumerateW] } }\n__declspec(naked) void FakeDllCanUnloadNow()\t\t\t\t{ _asm { jmp [ddraw.DllCanUnloadNow] } }\n__declspec(naked) void FakeDllGetClassObject()\t\t\t\t{ _asm { jmp [ddraw.DllGetClassObject] } }\n__declspec(naked) void FakeGetDDSurfaceLocal()\t\t\t\t{ _asm { jmp [ddraw.GetDDSurfaceLocal] } }\n__declspec(naked) void FakeGetOLEThunkData()\t\t\t\t{ _asm { jmp [ddraw.GetOLEThunkData] } }\n__declspec(naked) void FakeGetSurfaceFromDC()\t\t\t\t{ _asm { jmp [ddraw.GetSurfaceFromDC] } }\n__declspec(naked) void FakeRegisterSpecialCase()\t\t\t{ _asm { jmp [ddraw.RegisterSpecialCase] } }\n__declspec(naked) void FakeReleaseDDThreadLock()\t\t\t{ _asm { jmp [ddraw.ReleaseDDThreadLock] } }\n\nBOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)\n{\n\tchar path[MAX_PATH];\n\tswitch (ul_reason_for_call)\n\t{\n\t\tcase DLL_PROCESS_ATTACH:\n\t\t{\n\t\t\tCopyMemory(path+GetSystemDirectory(path,MAX_PATH-10), \"\\\\ddraw.dll\",11);\n\t\t\tddraw.dll = LoadLibrary(path);\n\t\t\tif (ddraw.dll == false)\n\t\t\t{\n\t\t\t\tMessageBox(0, \"Cannot load original ddraw.dll library\", APP_NAME, MB_ICONERROR);\n\t\t\t\tExitProcess(0);\n\t\t\t}\n\t\t\tddraw.AcquireDDThreadLock\t\t\t= GetProcAddress(ddraw.dll, \"AcquireDDThreadLock\");\n\t\t\tddraw.CheckFullscreen\t\t\t\t= GetProcAddress(ddraw.dll, \"CheckFullscreen\");\n\t\t\tddraw.CompleteCreateSysmemSurface\t= GetProcAddress(ddraw.dll, \"CompleteCreateSysmemSurface\");\n\t\t\tddraw.D3DParseUnknownCommand\t\t= GetProcAddress(ddraw.dll, \"D3DParseUnknownCommand\");\n\t\t\tddraw.DDGetAttachedSurfaceLcl\t\t= GetProcAddress(ddraw.dll, \"DDGetAttachedSurfaceLcl\");\n\t\t\tddraw.DDInternalLock\t\t\t\t= GetProcAddress(ddraw.dll, \"DDInternalLock\");\n\t\t\tddraw.DDInternalUnlock\t\t\t\t= GetProcAddress(ddraw.dll, \"DDInternalUnlock\");\n\t\t\tddraw.DSoundHelp\t\t\t\t\t= GetProcAddress(ddraw.dll, \"DSoundHelp\");\n\t\t\tddraw.DirectDrawCreate\t\t\t\t= GetProcAddress(ddraw.dll, \"DirectDrawCreate\");\n\t\t\tddraw.DirectDrawCreateClipper\t\t= GetProcAddress(ddraw.dll, \"DirectDrawCreateClipper\");\n\t\t\tddraw.DirectDrawCreateEx\t\t\t= GetProcAddress(ddraw.dll, \"DirectDrawCreateEx\");\n\t\t\tddraw.DirectDrawEnumerateA\t\t\t= GetProcAddress(ddraw.dll, \"DirectDrawEnumerateA\");\n\t\t\tddraw.DirectDrawEnumerateExA\t\t= GetProcAddress(ddraw.dll, \"DirectDrawEnumerateExA\");\n\t\t\tddraw.DirectDrawEnumerateExW\t\t= GetProcAddress(ddraw.dll, \"DirectDrawEnumerateExW\");\n\t\t\tddraw.DirectDrawEnumerateW\t\t\t= GetProcAddress(ddraw.dll, \"DirectDrawEnumerateW\");\n\t\t\tddraw.DllCanUnloadNow\t\t\t\t= GetProcAddress(ddraw.dll, \"DllCanUnloadNow\");\n\t\t\tddraw.DllGetClassObject\t\t\t\t= GetProcAddress(ddraw.dll, \"DllGetClassObject\");\n\t\t\tddraw.GetDDSurfaceLocal\t\t\t\t= GetProcAddress(ddraw.dll, \"GetDDSurfaceLocal\");\n\t\t\tddraw.GetOLEThunkData\t\t\t\t= GetProcAddress(ddraw.dll, \"GetOLEThunkData\");\n\t\t\tddraw.GetSurfaceFromDC\t\t\t\t= GetProcAddress(ddraw.dll, \"GetSurfaceFromDC\");\n\t\t\tddraw.RegisterSpecialCase\t\t\t= GetProcAddress(ddraw.dll, \"RegisterSpecialCase\");\n\t\t\tddraw.ReleaseDDThreadLock\t\t\t= GetProcAddress(ddraw.dll, \"ReleaseDDThreadLock\");\n\n\t\t\tInitDxWnd();\n\t\t\tbreak;\n\t\t}\n\t\tcase DLL_PROCESS_DETACH:\n\t\t{\n\t\t\tDxWndEndHook();\n\t\t\tFreeLibrary(ddraw.dll);\n\t\t}\n\t\tbreak;\n\t}\n\treturn TRUE;\n}\n"
  },
  {
    "path": "proxy/ddraw.def",
    "content": "LIBRARY \"ddraw\"\nEXPORTS\nAcquireDDThreadLock\t\t\t= FakeAcquireDDThreadLock\t\t\t@1\nCheckFullscreen\t\t\t\t= FakeCheckFullscreen\t\t\t\t@2\nCompleteCreateSysmemSurface\t= FakeCompleteCreateSysmemSurface\t@3\nD3DParseUnknownCommand\t\t= FakeD3DParseUnknownCommand\t\t@4\nDDGetAttachedSurfaceLcl\t\t= FakeDDGetAttachedSurfaceLcl\t\t@5\nDDInternalLock\t\t\t\t= FakeDDInternalLock\t\t\t\t@6\nDDInternalUnlock\t\t\t= FakeDDInternalUnlock\t\t\t\t@7\nDSoundHelp\t\t\t\t\t= FakeDSoundHelp\t\t\t\t\t@8\nDirectDrawCreate\t\t\t= FakeDirectDrawCreate\t\t\t\t@9\nDirectDrawCreateClipper\t\t= FakeDirectDrawCreateClipper\t\t@10\nDirectDrawCreateEx\t\t\t= FakeDirectDrawCreateEx\t\t\t@11\nDirectDrawEnumerateA\t\t= FakeDirectDrawEnumerateA\t\t\t@12\nDirectDrawEnumerateExA\t\t= FakeDirectDrawEnumerateExA\t\t@13\nDirectDrawEnumerateExW\t\t= FakeDirectDrawEnumerateExW\t\t@14\nDirectDrawEnumerateW\t\t= FakeDirectDrawEnumerateW\t\t\t@15\nDllCanUnloadNow\t\t\t\t= FakeDllCanUnloadNow\t\t\t\tPRIVATE\nDllGetClassObject\t\t\t= FakeDllGetClassObject\t\t\t\tPRIVATE\nGetDDSurfaceLocal\t\t\t= FakeGetDDSurfaceLocal\t\t\t\t@18\nGetOLEThunkData\t\t\t\t= FakeGetOLEThunkData\t\t\t\t@19\nGetSurfaceFromDC\t\t\t= FakeGetSurfaceFromDC\t\t\t\t@20\nRegisterSpecialCase\t\t\t= FakeRegisterSpecialCase\t\t\t@21\nReleaseDDThreadLock\t\t\t= FakeReleaseDDThreadLock\t\t\t@22"
  },
  {
    "path": "proxy/ddraw.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"ddraw\", \"ddraw.vcproj\", \"{579E7FE7-2745-4100-A802-23511711FCDE}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDE}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "proxy/ddraw.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"ddraw\"\n\tProjectGUID=\"{579E7FE7-2745-4100-A802-23511711FCDE}\"\n\tRootNamespace=\"dxwnd\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/dxwnd.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tAdditionalOptions=\"/IInclude\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\".;../Include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS;_USRDLL;DXWND_EXPORTS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tExceptionHandling=\"2\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/dxwnd.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"shlwapi.lib odbc32.lib odbccp32.lib\"\n\t\t\t\tOutputFile=\"../Debug/ddraw.dll\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tAdditionalLibraryDirectories=\"\"\n\t\t\t\tIgnoreAllDefaultLibraries=\"false\"\n\t\t\t\tIgnoreDefaultLibraryNames=\"\"\n\t\t\t\tModuleDefinitionFile=\".\\ddraw.def\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/dxwnd.pdb\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\".\\Debug/dxwnd.lib\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/dxwnd.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/dxwnd.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"../Include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS;_USRDLL;DXWND_EXPORTS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"2\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tOpenMP=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/dxwnd.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"1041\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"../Release/ddraw.dll\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tModuleDefinitionFile=\".\\ddraw.def\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/dxwnd.pdb\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\".\\Release/dxwnd.lib\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/dxwnd.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ddraw.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\init.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Include\\dxwnd.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ini.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "proxy/init.cpp",
    "content": "#include <windows.h>\n#include <stdio.h>\n#include \"dxwnd.h\"\n\ntypedef int (*StartHook_)();\ntypedef int (*EndHook_)();\ntypedef int (*SetTarget_)(TARGETMAP *);\n\nBOOL DxWndEnabled = FALSE;\nchar DxWndIniPath[] = \".\\\\dxwnd.dxw\";\n\nstatic TARGETMAP target;\nstatic HMODULE hModule;\n\nstatic int GetIntEntry(char *tag, int default)\n{\n\treturn GetPrivateProfileInt(\"target\", tag, default, DxWndIniPath); \n}\n\nvoid InitDxWnd(void)\n{\n\tchar DxWndPath[MAX_PATH];\n\tGetPrivateProfileString(\"system\", \"dxwndpath\", \".\", DxWndPath, MAX_PATH, DxWndIniPath);\n\t//MessageBox(0, DxWndPath, \"dxwnd\", MB_ICONERROR);\n\tsprintf(DxWndPath, \"%s\\\\dxwnd.dll\", DxWndPath);\n\t//MessageBox(0, DxWndPath, \"dxwnd\", MB_ICONERROR);\n\n\thModule = LoadLibraryA(DxWndPath);  \n\t//hModule = LoadLibraryA(\"dxwnd.dll\");  \n    if (hModule)\n    {\n        StartHook_ startHook = (StartHook_)GetProcAddress(hModule, \"StartHook\");\n        SetTarget_ setTarget = (SetTarget_)GetProcAddress(hModule, \"SetTarget\");\n        if (startHook && setTarget)\n        {\n\t\t\t// target.path must be set to current task pathname.\n            GetModuleFileNameA(NULL, target.path, MAX_PATH);\n\n\t\t\ttarget.FakeVersionId = GetIntEntry(\"winver0\", 0);\n\t\t\ttarget.flags\t\t= GetIntEntry(\"flag0\", EMULATESURFACE|MODIFYMOUSE|USERGB565);\n\t\t\ttarget.flags2\t\t= GetIntEntry(\"flagg0\", WINDOWIZE|SETCOMPATIBILITY);\n\t\t\ttarget.flags3\t\t= GetIntEntry(\"flagh0\", HOOKDLLS|HOOKENABLED);\n\t\t\ttarget.flags4\t\t= GetIntEntry(\"flagi0\", SUPPORTSVGA);\n\t\t\ttarget.flags5\t\t= GetIntEntry(\"flagj0\", AEROBOOST|CENTERTOWIN);\n\t\t\ttarget.flags6\t\t= GetIntEntry(\"flagk0\", 0);\n\t\t\ttarget.flags7\t\t= GetIntEntry(\"flagl0\", 0);\n\t\t\ttarget.flags8\t\t= GetIntEntry(\"flagm0\", 0);\n\t\t\ttarget.flags9\t\t= GetIntEntry(\"flagn0\", 0);\n\t\t\ttarget.flags10\t\t= GetIntEntry(\"flago0\", 0);\n\t\t\ttarget.tflags\t\t= GetIntEntry(\"tflag0\", 0);\n\t\t\ttarget.dflags\t\t= GetIntEntry(\"dflag0\", 0);\n\t\t\ttarget.posx\t\t\t= GetIntEntry(\"posx0\", 0);\n\t\t\ttarget.posy\t\t\t= GetIntEntry(\"posy0\", 0);\n            target.sizx\t\t\t= GetIntEntry(\"sizx0\", 0);\n            target.sizy\t\t\t= GetIntEntry(\"sizy0\", 0);\n            target.coordinates\t= GetIntEntry(\"coord0\", 1); // centered to desktop\n            target.MaxFPS\t\t= GetIntEntry(\"maxfps0\", 0);\n\t\t\ttarget.dxversion\t= GetIntEntry(\"ver0\", 0);\n\t\t\tif(target.dxversion > 1) target.dxversion += 5;\n\t\t\ttarget.FakeVersionId= GetIntEntry(\"winver0\", 0);\n\t\t\ttarget.MaxScreenRes = GetIntEntry(\"maxres0\", 0);\n\t\t\ttarget.SwapEffect\t= GetIntEntry(\"swapeffect0\", 0);\n\t\t\ttarget.InitTS\t\t= GetIntEntry(\"initts0\", 0);\n            target.monitorid\t= GetIntEntry(\"monitorid0\", -1);\n\t\t\ttarget.resw\t\t\t= GetIntEntry(\"initresw0\", 800);\n\t\t\ttarget.resh\t\t\t= GetIntEntry(\"initresh0\", 600);\n            target.MaxDdrawInterface = GetIntEntry(\"maxddinterface0\", 7);    \n\t\t\ttarget.ScanLine\t\t= GetIntEntry(\"scanline0\", 0);\n\n            setTarget((TARGETMAP *)&target);\n            startHook();\n        }\n    }\n\telse\n\t\tMessageBox(0, \"Cannot load dxwnd.dll library\", \"dxwnd\", MB_ICONERROR);\n}\n\nvoid DxWndEndHook(void)\n{\n    if (hModule)\n    {\n        EndHook_ endHook = (EndHook_)GetProcAddress(hModule, \"EndHook\");\n        if (endHook) endHook();\n    }\n}\n"
  },
  {
    "path": "proxy/wing32.cpp",
    "content": "//------------------------------------------------------------------------------\n// Tiny WinG32 Proxy DLL v1.0 [30.01.2017]\n// Copyright 2010 Evgeny Vrublevsky <veg@tut.by>, 2017 GHO\n//------------------------------------------------------------------------------\n#define APP_NAME\t\t\"Tiny WinG32 Proxy\"\n#define APP_VERSION\t\t\"1.0 [28.05.2010]\"\n\n#define WIN32_LEAN_AND_MEAN\n#include <windows.h>\n#include <ctype.h>\n\nvoid InitDxWnd(void);\nvoid DxWndEndHook(void);\n\nstruct wing32_dll\n{\n\tHMODULE dll;\n\tFARPROC\tWinGCreateDC;\n\tFARPROC\tWinGCreateBitmap;\n\tFARPROC\tWinGBitBlt;\n\tFARPROC\tWinGStretchBlt;\n\tFARPROC\tWinGRecommendDIBFormat;\n\tFARPROC\tWinGGetDIBPointer;\n\tFARPROC\tWinGSetDIBColorTable;\n\tFARPROC\tWinGGetDIBColorTable;\n\tFARPROC\tWinGCreateHalftonePalette;\n\tFARPROC\tWinGCreateHalftoneBrush;\n} wing32;\n\n__declspec(naked) void FakeWinGCreateDC()\t\t\t\t\t{ _asm { jmp [wing32.WinGCreateDC] } }\n__declspec(naked) void FakeWinGCreateBitmap()\t\t\t\t{ _asm { jmp [wing32.WinGCreateBitmap] } }\n__declspec(naked) void FakeWinGBitBlt()\t\t\t\t\t\t{ _asm { jmp [wing32.WinGBitBlt] } }\n__declspec(naked) void FakeWinGStretchBlt()\t\t\t\t\t{ _asm { jmp [wing32.WinGStretchBlt] } }\n__declspec(naked) void FakeWinGRecommendDIBFormat()\t\t\t{ _asm { jmp [wing32.WinGRecommendDIBFormat] } }\n__declspec(naked) void FakeWinGGetDIBPointer()\t\t\t\t{ _asm { jmp [wing32.WinGGetDIBPointer] } }\n__declspec(naked) void FakeWinGSetDIBColorTable()\t\t\t{ _asm { jmp [wing32.WinGSetDIBColorTable] } }\n__declspec(naked) void FakeWinGGetDIBColorTable()\t\t\t{ _asm { jmp [wing32.WinGGetDIBColorTable] } }\n__declspec(naked) void FakeWinGCreateHalftonePalette()\t\t{ _asm { jmp [wing32.WinGCreateHalftonePalette] } }\n__declspec(naked) void FakeWinGCreateHalftoneBrush()\t\t{ _asm { jmp [wing32.WinGCreateHalftoneBrush] } }\n\nBOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)\n{\n\tchar path[MAX_PATH];\n\tswitch (ul_reason_for_call)\n\t{\n\t\tcase DLL_PROCESS_ATTACH:\n\t\t{\n\t\t\tCopyMemory(path+GetSystemDirectory(path,MAX_PATH-10), \"\\\\wing32.dll\",11);\n\t\t\twing32.dll = LoadLibrary(path);\n\t\t\tif (wing32.dll == false)\n\t\t\t{\n\t\t\t\tMessageBox(0, \"Cannot load original wing32.dll library\", APP_NAME, MB_ICONERROR);\n\t\t\t\tExitProcess(0);\n\t\t\t}\n\t\t\twing32.WinGCreateDC\t\t\t\t\t= GetProcAddress(wing32.dll, \"WinGCreateDC\");\n\t\t\twing32.WinGCreateBitmap\t\t\t\t= GetProcAddress(wing32.dll, \"WinGCreateBitmap\");\n\t\t\twing32.WinGBitBlt\t\t\t\t\t= GetProcAddress(wing32.dll, \"WinGBitBlt\");\n\t\t\twing32.WinGStretchBlt\t\t\t\t= GetProcAddress(wing32.dll, \"WinGStretchBlt\");\n\t\t\twing32.WinGRecommendDIBFormat\t\t= GetProcAddress(wing32.dll, \"WinGRecommendDIBFormat\");\n\t\t\twing32.WinGGetDIBPointer\t\t\t= GetProcAddress(wing32.dll, \"WinGGetDIBPointer\");\n\t\t\twing32.WinGSetDIBColorTable\t\t\t= GetProcAddress(wing32.dll, \"WinGSetDIBColorTable\");\n\t\t\twing32.WinGGetDIBColorTable\t\t\t= GetProcAddress(wing32.dll, \"WinGGetDIBColorTable\");\n\t\t\twing32.WinGCreateHalftonePalette\t= GetProcAddress(wing32.dll, \"WinGCreateHalftonePalette\");\n\t\t\twing32.WinGCreateHalftoneBrush\t\t= GetProcAddress(wing32.dll, \"WinGCreateHalftoneBrush\");\n\n\t\t\tInitDxWnd();\n\t\t\tbreak;\n\t\t}\n\t\tcase DLL_PROCESS_DETACH:\n\t\t{\n\t\t\tDxWndEndHook();\n\t\t\tFreeLibrary(wing32.dll);\n\t\t}\n\t\tbreak;\n\t}\n\treturn TRUE;\n}\n"
  },
  {
    "path": "proxy/wing32.def",
    "content": "LIBRARY \"wing32\"\nEXPORTS\nWinGCreateDC = FakeWinGCreateDC\t@1\nWinGCreateBitmap = FakeWinGCreateBitmap\t@2\nWinGBitBlt = FakeWinGBitBlt @3\nWinGStretchBlt = FakeWinGStretchBlt @4\nWinGRecommendDIBFormat = FakeWinGRecommendDIBFormat @5\nWinGGetDIBPointer = FakeWinGGetDIBPointer @6\nWinGSetDIBColorTable = FakeWinGSetDIBColorTable @7\nWinGGetDIBColorTable = FakeWinGGetDIBColorTable @8\nWinGCreateHalftonePalette = FakeWinGCreateHalftonePalette @9\nWinGCreateHalftoneBrush = FakeWinGCreateHalftoneBrush @10\n"
  },
  {
    "path": "proxy/wing32.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"wing32\", \"wing32.vcproj\", \"{579E7FE7-2745-4100-A802-23511711FCDF}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{579E7FE7-2745-4100-A802-23511711FCDF}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDF}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDF}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FCDF}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "proxy/wing32.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"wing32\"\n\tProjectGUID=\"{579E7FE7-2745-4100-A802-23511711FCDF}\"\n\tRootNamespace=\"dxwnd\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/dxwnd.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tAdditionalOptions=\"/IInclude\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\".;../Include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS;_USRDLL;DXWND_EXPORTS\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tExceptionHandling=\"2\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/dxwnd.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"shlwapi.lib odbc32.lib odbccp32.lib\"\n\t\t\t\tOutputFile=\"../Debug/wing32.dll\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tAdditionalLibraryDirectories=\"\"\n\t\t\t\tIgnoreAllDefaultLibraries=\"false\"\n\t\t\t\tIgnoreDefaultLibraryNames=\"\"\n\t\t\t\tModuleDefinitionFile=\".\\wing32.def\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/dxwnd.pdb\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\".\\Debug/dxwnd.lib\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/dxwnd.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/dxwnd.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"../Include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS;_USRDLL;DXWND_EXPORTS\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"2\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tOpenMP=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/dxwnd.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"1041\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"../Release/wing32.dll\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tModuleDefinitionFile=\".\\wing32.def\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/dxwnd.pdb\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\".\\Release/dxwnd.lib\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/dxwnd.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\wing32.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\init.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\"..\\Include\\dxwnd.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\ini.h\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  },
  {
    "path": "wing/wing32.cpp",
    "content": "/*\n * WinG support\n *\n * Copyright 2007 Dmitry Timoshkov\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation; either\n * version 2.1 of the License, or (at your option) any later version.\n *\n * This library is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n * Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public\n * License along with this library; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA\n */\n\n#define _CRT_SECURE_NO_WARNINGS\n\n#define GDIREMAPPED\n\n#include \"windows.h\"\n#include \"windef.h\"\n\n// === wrappers ===\n\n#ifdef GDIREMAPPED\n\nHDC WINAPI WinGCreateDC(void)\n{\n    return CreateCompatibleDC(0);\n}\n\nHBITMAP WINAPI WinGCreateBitmap(HDC hdc, BITMAPINFO *bmi, void **bits)\n{\n    return CreateDIBSection(hdc, bmi, 0, bits, 0, 0);\n}\n\nBOOL WINAPI WinGBitBlt(HDC hdcDst, INT xDst, INT yDst, INT width, INT height, HDC hdcSrc, INT xSrc, INT ySrc)\n{\n    return BitBlt(hdcDst, xDst, yDst, width, height, hdcSrc, xSrc, ySrc, SRCCOPY);\n}\n\nBOOL WINAPI WinGStretchBlt(HDC hdcDst, INT xDst, INT yDst, INT widthDst, INT heightDst, HDC hdcSrc, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc)\n{\n    INT old_blt_mode;\n    BOOL ret;\n\n    old_blt_mode = SetStretchBltMode(hdcDst, COLORONCOLOR);\n    ret = StretchBlt(hdcDst, xDst, yDst, widthDst, heightDst, hdcSrc, xSrc, ySrc, widthSrc, heightSrc, SRCCOPY);\n    SetStretchBltMode(hdcDst, old_blt_mode);\n    return ret;\n}\n\nBOOL WINAPI WinGRecommendDIBFormat(BITMAPINFO *bmi)\n{\n    if (!bmi) return FALSE;\n\n    bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);\n    bmi->bmiHeader.biWidth = 320;\n    bmi->bmiHeader.biHeight = -1;\n    bmi->bmiHeader.biPlanes = 1;\n    bmi->bmiHeader.biBitCount = 8;\n    bmi->bmiHeader.biCompression = BI_RGB;\n    bmi->bmiHeader.biSizeImage = 0;\n    bmi->bmiHeader.biXPelsPerMeter = 0;\n    bmi->bmiHeader.biYPelsPerMeter = 0;\n    bmi->bmiHeader.biClrUsed = 0;\n    bmi->bmiHeader.biClrImportant = 0;\n\n    return TRUE;\n}\n\nvoid * WINAPI WinGGetDIBPointer(HBITMAP hbmp, BITMAPINFO *bmi)\n{\n    DIBSECTION ds;\n\n    if (GetObjectW( hbmp, sizeof(ds), &ds ) == sizeof(ds)){\n        memcpy(&bmi->bmiHeader, &ds.dsBmih, sizeof(*bmi));\n        return ds.dsBm.bmBits;\n    }\n    return NULL;\n}\n\nUINT WINAPI WinGSetDIBColorTable(HDC hdc, UINT start, UINT end, RGBQUAD *colors)\n{\n    return SetDIBColorTable(hdc, start, end, colors);\n}\n\nUINT WINAPI WinGGetDIBColorTable(HDC hdc, UINT start, UINT end, RGBQUAD *colors)\n{\n    return GetDIBColorTable(hdc, start, end, colors);\n}\n\nHPALETTE WINAPI WinGCreateHalftonePalette(void)\n{\n    HDC hdc;\n    HPALETTE hpal;\n\n    hdc = GetDC(0);\n    hpal = CreateHalftonePalette(hdc);\n    ReleaseDC(0, hdc);\n\n    return hpal;\n}\n\nHBRUSH WINAPI WinGCreateHalftoneBrush(HDC hdc, COLORREF color, INT type)\n{\n    return CreateSolidBrush(color);\n}\n\n#else\n\nHDC WINAPI WinGCreateDC(void)\n{\n    return (HDC)0;\n}\n\nHBITMAP WINAPI WinGCreateBitmap(HDC hdc, BITMAPINFO *bmi, void **bits)\n{\n\treturn (HBITMAP)0;\n}\n\nBOOL WINAPI WinGBitBlt(HDC hdcDst, INT xDst, INT yDst, INT width, INT height, HDC hdcSrc, INT xSrc, INT ySrc)\n{\n\treturn (BOOL)0;\n}\n\nBOOL WINAPI WinGStretchBlt(HDC hdcDst, INT xDst, INT yDst, INT widthDst, INT heightDst, HDC hdcSrc, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc)\n{\n\treturn (BOOL)0;\n}\n\nBOOL WINAPI WinGRecommendDIBFormat(BITMAPINFO *bmi)\n{\n    return TRUE;\n}\n\nvoid * WINAPI WinGGetDIBPointer(HBITMAP hbmp, BITMAPINFO *bmi)\n{\n    return NULL;\n}\n\nUINT WINAPI WinGSetDIBColorTable(HDC hdc, UINT start, UINT end, RGBQUAD *colors)\n{\n\treturn (UINT)0;\n}\n\nUINT WINAPI WinGGetDIBColorTable(HDC hdc, UINT start, UINT end, RGBQUAD *colors)\n{\n\treturn (UINT)0;\n}\n\nHPALETTE WINAPI WinGCreateHalftonePalette(void)\n{\n\treturn (HPALETTE)0;\n}\n\nHBRUSH WINAPI WinGCreateHalftoneBrush(HDC hdc, COLORREF color, INT type)\n{\n\treturn (HBRUSH)0;\n}\n\n#endif"
  },
  {
    "path": "wing/wing32.def",
    "content": "LIBRARY \"WinG32\"\nEXPORTS\nWinGBitBlt\t\t\t\t\t= WinGBitBlt\t\t\t\t\t@1\nWinGCreateBitmap\t\t\t= WinGCreateBitmap\t\t\t\t@2\nWinGCreateDC\t\t\t\t= WinGCreateDC\t\t\t\t\t@3\nWinGCreateHalftoneBrush\t\t= WinGCreateHalftoneBrush\t\t@4\nWinGCreateHalftonePalette\t= WinGCreateHalftonePalette\t\t@5\nWinGGetDIBColorTable\t\t= WinGGetDIBColorTable\t\t\t@6\nWinGGetDIBPointer\t\t\t= WinGGetDIBPointer\t\t\t\t@7\nWinGRecommendDIBFormat\t\t= WinGRecommendDIBFormat\t\t@8\nWinGSetDIBColorTable\t\t= WinGSetDIBColorTable\t\t\t@9\nWinGStretchBlt\t\t\t\t= WinGStretchBlt\t\t\t\t@10\n"
  },
  {
    "path": "wing/wing32.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 10.00\n# Visual Studio 2008\nProject(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"wing32\", \"wing32.vcproj\", \"{579E7FE7-2745-4100-A802-23511711FFFF}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Win32 = Debug|Win32\n\t\tRelease|Win32 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{579E7FE7-2745-4100-A802-23511711FFFF}.Debug|Win32.ActiveCfg = Debug|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FFFF}.Debug|Win32.Build.0 = Debug|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FFFF}.Release|Win32.ActiveCfg = Release|Win32\n\t\t{579E7FE7-2745-4100-A802-23511711FFFF}.Release|Win32.Build.0 = Release|Win32\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "wing/wing32.vcproj",
    "content": "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>\n<VisualStudioProject\n\tProjectType=\"Visual C++\"\n\tVersion=\"9.00\"\n\tName=\"wing32\"\n\tProjectGUID=\"{579E7FE7-2745-4100-A802-23511711FFFF}\"\n\tRootNamespace=\"wing32\"\n\tTargetFrameworkVersion=\"131072\"\n\t>\n\t<Platforms>\n\t\t<Platform\n\t\t\tName=\"Win32\"\n\t\t/>\n\t</Platforms>\n\t<ToolFiles>\n\t</ToolFiles>\n\t<Configurations>\n\t\t<Configuration\n\t\t\tName=\"Debug|Win32\"\n\t\t\tOutputDirectory=\".\\Debug\"\n\t\t\tIntermediateDirectory=\".\\Debug\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Debug/wing32.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tAdditionalOptions=\"\"\n\t\t\t\tOptimization=\"0\"\n\t\t\t\tAdditionalIncludeDirectories=\"\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;_DEBUG;_WINDOWS;_USRDLL\"\n\t\t\t\tMinimalRebuild=\"true\"\n\t\t\t\tExceptionHandling=\"2\"\n\t\t\t\tBasicRuntimeChecks=\"3\"\n\t\t\t\tRuntimeLibrary=\"1\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Debug/wing32.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Debug/\"\n\t\t\t\tObjectFile=\".\\Debug/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Debug/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tDebugInformationFormat=\"4\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"_DEBUG\"\n\t\t\t\tCulture=\"0\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tAdditionalDependencies=\"shlwapi.lib odbc32.lib odbccp32.lib\"\n\t\t\t\tOutputFile=\"../Debug/wing32.dll\"\n\t\t\t\tLinkIncremental=\"2\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tAdditionalLibraryDirectories=\"\"\n\t\t\t\tIgnoreAllDefaultLibraries=\"false\"\n\t\t\t\tIgnoreDefaultLibraryNames=\"\"\n\t\t\t\tModuleDefinitionFile=\".\\wing32.def\"\n\t\t\t\tGenerateDebugInformation=\"true\"\n\t\t\t\tProgramDatabaseFile=\".\\Debug/wing32.pdb\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\".\\Debug/wing32.lib\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Debug/wing32.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t\t<Configuration\n\t\t\tName=\"Release|Win32\"\n\t\t\tOutputDirectory=\".\\Release\"\n\t\t\tIntermediateDirectory=\".\\Release\"\n\t\t\tConfigurationType=\"2\"\n\t\t\tInheritedPropertySheets=\"$(VCInstallDir)VCProjectDefaults\\UpgradeFromVC60.vsprops\"\n\t\t\tUseOfMFC=\"0\"\n\t\t\tATLMinimizesCRunTimeLibraryUsage=\"false\"\n\t\t\tCharacterSet=\"2\"\n\t\t\t>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreBuildEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCustomBuildTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXMLDataGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCWebServiceProxyGeneratorTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCMIDLTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tMkTypLibCompatible=\"true\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tTargetEnvironment=\"1\"\n\t\t\t\tTypeLibraryName=\".\\Release/wing32.tlb\"\n\t\t\t\tHeaderFileName=\"\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCCLCompilerTool\"\n\t\t\t\tOptimization=\"2\"\n\t\t\t\tInlineFunctionExpansion=\"1\"\n\t\t\t\tAdditionalIncludeDirectories=\"../Include\"\n\t\t\t\tPreprocessorDefinitions=\"WIN32;NDEBUG;_WINDOWS;_USRDLL\"\n\t\t\t\tStringPooling=\"true\"\n\t\t\t\tExceptionHandling=\"2\"\n\t\t\t\tRuntimeLibrary=\"0\"\n\t\t\t\tEnableFunctionLevelLinking=\"true\"\n\t\t\t\tOpenMP=\"true\"\n\t\t\t\tPrecompiledHeaderFile=\".\\Release/wing32.pch\"\n\t\t\t\tAssemblerListingLocation=\".\\Release/\"\n\t\t\t\tObjectFile=\".\\Release/\"\n\t\t\t\tProgramDataBaseFileName=\".\\Release/\"\n\t\t\t\tWarningLevel=\"3\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManagedResourceCompilerTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCResourceCompilerTool\"\n\t\t\t\tPreprocessorDefinitions=\"NDEBUG\"\n\t\t\t\tCulture=\"1041\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPreLinkEventTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCLinkerTool\"\n\t\t\t\tOutputFile=\"../Release/wing32.dll\"\n\t\t\t\tLinkIncremental=\"1\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tModuleDefinitionFile=\".\\wing32.def\"\n\t\t\t\tProgramDatabaseFile=\".\\Release/wing32.pdb\"\n\t\t\t\tRandomizedBaseAddress=\"1\"\n\t\t\t\tDataExecutionPrevention=\"0\"\n\t\t\t\tImportLibrary=\".\\Release/wing32.lib\"\n\t\t\t\tTargetMachine=\"1\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCALinkTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCManifestTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCXDCMakeTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCBscMakeTool\"\n\t\t\t\tSuppressStartupBanner=\"true\"\n\t\t\t\tOutputFile=\".\\Release/wing32.bsc\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCFxCopTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCAppVerifierTool\"\n\t\t\t/>\n\t\t\t<Tool\n\t\t\t\tName=\"VCPostBuildEventTool\"\n\t\t\t/>\n\t\t</Configuration>\n\t</Configurations>\n\t<References>\n\t</References>\n\t<Files>\n\t\t<Filter\n\t\t\tName=\"Source Files\"\n\t\t\tFilter=\"cpp;c;cxx;rc;def;r;odl;idl;hpj;bat\"\n\t\t\t>\n\t\t\t<File\n\t\t\t\tRelativePath=\".\\wing32.cpp\"\n\t\t\t\t>\n\t\t\t</File>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Header Files\"\n\t\t\tFilter=\"h;hpp;hxx;hm;inl\"\n\t\t\t>\n\t\t</Filter>\n\t\t<Filter\n\t\t\tName=\"Resource Files\"\n\t\t\tFilter=\"ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe\"\n\t\t\t>\n\t\t</Filter>\n\t</Files>\n\t<Globals>\n\t</Globals>\n</VisualStudioProject>\n"
  }
]